TAM座右の銘は「明日から本気出す」、素敵な言葉なので毎日言っています。TAM毎回挨拶がこれで正直どうなんですか、と言う感じですが、あえて今回も「お久しぶり」。TAMはPixel3ユーザ*でした*。Pixel3ほんと気に入っていてPixel4シリーズもスルーキめたわけですが、まあ、直前まで使ってたのにある時いきなり動かなくなりました。その後電源入れ直そうと色々調べて試したのですが、どうも無理と言うことで、修理費用とかも調べた上でPixel5を注文しました。言うわけで、おそらく誰も望まない(そして遅い)Pixel5のレビューを今更したいと思います。TAMお久しぶり(いつもの)。皆様テレワークは如何で御座いましょうか。俺はそう言うお仕事では無いので普通に出勤しておりますが、出来る限りの防衛手段をとっているとは言えなかなか難しいもので御座います。見るかどうかは置いといて「やっぱTVくらい見れるようにしとくかなー」的な感じで今回さっくりchinachu環境を組みました。「だからなんだ?」で終わってしまうくらいにはchinachuに関しては色んなところで手順が説明されておりますので、当たり前のように割愛させて頂き、今回は「lxcコンテナでchinachuを動かす」と言う話で表題通りlxcの話メインで。TAMよっ!(簡潔挨拶)。過去事例に違わず1年半程あいてしまいましたが、皆様お元気でしょうか。俺は全然元気ではありません、TAMでございます。なんで元気ではないかっつーと、9月の末あたりでしょうか。バイクで事故しまして生まれてはじめての骨折、入院、手術を体験しまして、鎖骨をネジ止めされてる状態がしばらく続くわけで、これが痛いとかはもう無いんですけど動かすとすこぶる気持ち悪い。今回一人でこけてひとりで怪我したわけですけど、あれですねえ、バイクの場合しょうもない小さな事故でもダイレクトアタックですので怖いものです、身を以って知りましたよ。Sandyおじさんなんて揶揄される世代のPCを如何に駆逐するかと言うのは一つのテーマであったりしますが、「いやお前もSandyおじさんやん」だったわけでして、ようやくこの夏〜秋でメイン環境を一新しました。3700Xでございます。巷でも評判の良いCPUですが、本当は3950Xまで待つ、いや伸びそうだから3900Xで手打ち?、みたいな方向で考えていたのですけど、まず3900Xは品薄でプレミア価格状態であほらしかったのと、いつ出るか分からない3950Xは待てないなあ、と言うことで8C16T、充分だろーって感じで3700Xで組んだわけです。その後3950X発表されたのですが「水冷推奨(公式)」と言うことでまあ、うん、この選択でよかったんじゃないかな?。まあSandy世代からの移行ですからCPU以外にもケース以外ほぼ全入れ替えになっちゃうわけですが、X570マザー、メモリもDDR3からDDR4になるし、ついでにHDDも3TBx2から8TBx1に、SSDもSATAからNVMeのものへ...と。OSはそのままneonさんで。組み上げて実際使ってみた感想はと言いますと、うん、快適でございます。快適でございますが、i7-2600K環境と比較してどう?、と言われると、あちらも結構快適な環境にしてあったからなあ...。これがSandyじじいが減らない理由だと思います。RX480からRX5700XTに替えたのですが、こっちのがインパクトあったかなー。OpenCLとか使いたいならあまり向かないゲーム向けGPUではありますが、4KゲームやVRと考えるとこれくらいのGPU無いとあれかなーと言う感じではございます。CPUに関してはI社とA社がバトルしてくれることが良いのだろうと思います。今後が楽しみですねえ。TAMQtと沙織さんのお話。Creatorも含めてQtでコードを書くと言うのは基本的にプラットフォーム依存を少なく出来る、と言う利点があると思うのだけど、実際は書いてると結構出てくる。別件で書いてるOpenGL周りのコードもQt+Creatorを使っているけど、そりゃあもうね。saoriに関しては当初から「できるだけQtに依存して同一コードを以って特定環境で動かないところを無くしてみよう」と考えて書いております。いつまでこれ続けられるかは謎ですけどねえ。結果、実は現状同じコードでWindows上でも動きます。androidは素晴らしいクライアントが存在するから試す気も無いし、アポー系は宗教上の理由で試す環境が無いのでWindowsしか試してませんが、Windwos10のノートPCで出先で思いついた修正をさくっと出来て試せるのはそれだけでも素晴らしいし便利ですねえ。言え、既に問題は見つかっていて、例えばWindowsでQNetworkReply::readAll()が空な場合がある、とかね。調べた結果どうも一定データ量を超えるとダメっぽくて、最終的に落ち着いたのが「タイムラインの取得量(limit=で指定するんですが)を若干小さくすることで回避」だったりします。内部バッファ量の違いかなーと思ったりもするんですが、このへんはQtのコード見てみないとなんとも。Windowsの場合OpenSSL周りも別個用意してたりするわけだったりするのでこの辺の差もあるのかも。ひとつはまりかけたのが、変数長の違い。statusのidを保存するのに最初longを使ってたのだけど、どうもWindowsだとおかしくなる、結局qlonglongに落ち着いたのだけど、後で気になってlimit.h見てみたら、linux(64)だとlong=longlong、Windows(64)だとint=long、うおおおい!って感じ。どこまで頑張れるかは分かりませんが、一応Windowsでもコンパイルして動かしてみてますよと言うお話。TAMお久しぶりどころか、あけましておめでとうですが、すっかり春めいてといいますかやや暑い日もあったりする梅雨前のひととき、皆様いかがお過ごしでしょうか。えーとりあえずmastodonクライアントを昨年から作ってて本当は年末には見せびらかす予定だったんですけど、色々バタバタしまして気がつけばゴールデンウィークですよ。言うわけで、機能足らなすぎで作りかけ感満載ですが、saori-0.1沙織さんです。見ての通りマルチアカウント対応のMDIクライアント。名前の由来は特にありませんが、俺は流川ガールズが大好きです。現状できることと言うのは本当に少なく、インスタンスに接続して一部タイムラインや通知を読み出すくらいです。Tootもまだ出来ませんし画面には機能しないボタンが並んでいたりしますが、まあmastodonにおけるごくごく基本的な「認証してアクセストークンをゲットしてJSONデータを得る」は実装されております。コード化結構簡単ですので是非皆さんも手作りmastodonクライアント挑戦して欲しい感じですかねえ。勉強になったところもあるので、何回かに分けてこのへん日記にまとめようかな。以下、認証まわりのコード的な話。twitterクライアントもそうなんだけど、ぶっちゃけアクセストークンを取得してAPIに正しくアクセスできれば後はデータをいじるだけ、mastodonはJSONでデータくれるのでQtのQJsonDocument他をごっそり使うことで手軽に得たデータを利用できます。ポイントはどうやって認証するのって話ですが、saoriではSaoridonクラスでクライアント登録。SaoriAddAccountDialogで認証、アクセストークン取得。SaoriAccountに情報を保存、アクセス時もここからAPIにアクセス。こんな感じの流れになってます。相変わらずコードにコメントを書かない糞コード書きなのでわかりにくいですが、Saoridon::clientRedistration()でクライアントをインスタンスに登録します。若干ずるのようなイメージもありますがQEventLoopを回してQNetworkAccessManagerからのQNetworkReplyをその場でもらうと言うテク、これ便利で結構使ってしまいますがさておき。登録が済んだらclient_secretとclient_idがJSONで帰ってきますので、今度はSaoriAddAccountDialogでアクセストークンを取ります。実際は上のクライアント登録もこのダイアログでやるんだけどね。Saoridon::getAuthorizedUrl()でURLを作りWebブラウザで開いて認証、コードをコピーしてそれをSaoridon::getAccessToken()で渡すとアクセストークンが返ってくる、と言う手順ですねえ(grant_typeはauthorization_codeです)。SaoriAddAccountDialog自体はボタンを押せなくしたり複雑に組んでありますが、実際に必要なコードはSaoridonの方にほぼほぼまとめられています。client_idとclient_secretからaccess_tokenとれたらそれをSaoriAccountに保存し、実際のAPIアクセスはこのクラスからアクセス、と言う感じです。アクセストークンはヘッダにぶち込むだけでいいのでSaoriAccount::createHeader()を見てもらえば簡単かと。あとは、mastodonのAPIとにらめっこどぞー、って感じですね。ここまでくればQNetworkReplyでJSON取れますからあとは煮るなり焼くなり。QJsonObjectで取得してHTMLに整形してQTextBrowserに流しこむ、と言うことをsaoriではやってますが、この辺はまた今度。TAM「もう全部Qtでいいんじゃないかなあ...」と定期的に呟きたい、と言うか既に呟いているTAMです。全部Qtでいいと思うよ。最近...いや数年前...もっと前か。前からQt+OpenGLの組み合わせのコードをへろへろ書いてはニヤニヤしたりしておりますが、本当にコードがすっきりするし楽なのでどんどん堕落していきます。やって人は退化していくのだと。伊達や酔狂でやってる分野なのでいいんですけどねー。作りたいものは色々あるのですが、まあ、よからぬ方向に持てる知識をぶち込んでおりますよ。言え、普段は結局Officeとか使うことの方が多いわけでして。最近特に思うのですが、普及って力やなあと。別にOfficeのUIが優れているとか使い勝手が良いとか全く感じたことないのですが(むしろやりたいこと出来なくてイライラすることのが多いわけですが)、さっとWordやExcelファイルを用意して送信して「修正して印刷して」とかを結構誰にでもできてしまうっつう、まあシェアの力ってのはやっぱでかいなーと。逆に言ってしまえば、WordやExcelのファイルを完全に読み書きできるのであれば別にM社のOfficeでなくても良い...と言うのも事実なんだけどね。「普及してるからM社のOffice使うなんてロックじゃないぜ」と言ってしまえばそれまでなのだけど、まあ、「でもそれってM社でもいいんですよね?」ってのもそうなわけで。そんなわけで、どんどんオープンな世界から離れていっております。Qt/KDE好きよ?。言え自宅のメインマシンはneonですのでubuntuベースのものを使っております。「VirtualBoxにWindows10て仮想マシンが見えるのですが?」と言う話は軽くスルーしつつ。言えばグラフィックドライバ周り、AMDのカード使ってると色々と選択があるのですが、現状kernel4.10にamdgpu-proのdkms、その上でMesa17.3を使うと言う組み合わせにしばらく落ち着いております。この組み合わせの利点は、特になにも無しにDPやHDMIに音声を流せるってとこでしょうねえ。それ以外はまあ、標準とあんまかわんないかな。なんだかんだでHDMIから音出ると捗るので...。HMDとかで音がヘッドホンから出ますから動画の喘ぎ声をスピーカーから垂れ流す心配もn...あー、ゲフンゲフン。言えばWindows10でのWSL、正直使い道をあまり思いつかなかったのですが「sshクライアントが欲しいなー、でもWindows専用はよおわからんなー」と言う割と無駄な理由で導入したのですが、予想していたよりも遥かに便利で驚いていたりします。slogin使うにしてもubuntuなんかからと全く同じ操作のままなので捗りますし、ちょっとしたスクリプトなんかも同じようにさっと書ける。GUIが無い(そりゃXサーバ立ち上げれば使えるんだろうけど)と言う点を除いても予想以上によくできた子で嬉しいですねー。TAMshaderを基本としたモッダーンなOpenGLプログラムをQtとC++で書こうって話。Qt5.9を使ってますが5.7あたりでもいけるんじゃないでしょうか。shaderがサポートされたのは5.9からのような気もしますが、別にQOpenGLFunctions_4_3_Coreとか使えばそれ以前からも使えないことはない...まあ、そのへんはいいか。QtでOpenGLを使うと良い点と言えば、とりあえず色んな環境で動くようにコンパイルできることとか、ウィンドウ操作周りやらマウス入力系等をQt一式に任せられるとか、おなじみsignal/slotでのコードが書けるとか、まあ色々ありますが、個人的にQt大好きっ子ですので「かっこいい」が一番ですかねえ。言うことで、QtっぽくOpenGLのコードを書くぜーと言う感じでGo。色んな意味で本気出してるTAMです。唐突ですが自宅のHDDが悲鳴をあげはじめたので交換した話です。今後もこう言うこと起こりそうなのでなんとなくまとめておきます。