Linuxのデスクトップとサーバーについて扱います。mini2を試験導入していてすごく便利で体感が良かったです。2019年時点でブラウザでtwitterを3タブ開くとクラッシュ(?)するレベルでありさすがに限界で、8インチサイズタブレットの更新として購入しました。SDカード含めて2.5万円くらいです。miniで同じスペックを実現しようとすると8万円くらいになるため、雑に使ってもまだ大丈夫な値段という意味もあって、Andoridタブレットにしました。SDが1500円くらいなのが大きくて、ipadだとsdカードは刺せないうえストレージを増やすだけで1~2万円違う。SIMオプションもipadは1.5万円くらいする。mini2よりは縦長です。mini2に安い非光沢シートを貼っていたせいもありますが。購入して即、アップデートを実施。Andorid9.1でした。ダークモードに対応しました。https://github.com/MichinariNukazawa/lina_dicto_for_ios/commit/533fcddb03f75a2e71d56e708174b0f1e4c8ef9bios13.3・xcode11.3にて。xcode11以降で作ったAPPで単純なものなら、それだけで済む。色をcustomなどにしていなければ自動でダークモードに変化する。Catalogに定義できるそれ以外のものはコードでなんとかする。simulatorでのdarkmode「設定」に実機の「画面表示と明るさ」はないが「デベロッパ」の方にdarkmode設定がある。Overridesから操作できる。codedarkmode判定。styleで埋め込んだCSSを全て置換するのは大変手間なので諦めて全て消去する。取れるのだけれど一工夫必要で、画面回転などと区別する。(再描画するだけなら不要かも。本APPは必要だったのでやった)アイコンは偶然にもdarkmodeと共通で問題なかった。TextViewはplaintテキストならsystem色が使えるが、Attributedの場合はコードから制御しないといけない模様。TS-CM80S」の組み合わせでを作ったので、ベンチマークをとっておきました。購入検討の参考にしてください。構成SSDドライブ化ケースのオススメに上がっているSSD。M.2のSATAタイプはM.2専用(?)のものに比べて遅いとされていますが外付けにするので今回は安くて大きいものを買いました。ケースはもうすこし安い2000円以下のものもありましたが、SSDも売っているメーカのものを選んで安全をとりました。SSD(SATAでない)を外付け化する方法はなかったのですが(というか内蔵PCI-Eに追加する方法すら無かった)、今はM.2の外付け化も可能なようです。ベンチマーク参考のため内蔵SSDドライブの速度を。内蔵SSD-変換噛ませケーブル1(TypeB経由)-変換噛ませケーブル2(TypeA経由)-HUB経由ここでTypeB/Aは速度に関係なくて単に区別を付けるためのものです。TypeC-ケーブル-TypeB-変換キャップ-TypeCTypeB-TypeC変換キャップは100円均一のものでした。TypeC-ケーブル-TypeA-ケース純正ケーブルTypeC-TypeAケーブルは、以前秋葉原で300円くらいで買ったものです。TypeC-電源&HTMI付きハブ-TypeAは、amazonで1000円ちょっとのものを買いました。/exfatHUB接続についてはtimemachineをセットしてからなのでexfatのみです。上のケーブルと比べて全体に遅いですが早い項目もあって悩ましい。(後述の仮想マシンを置く目的でそれほど遅くなかったようなので、今はこれで運用しています。)MacOSXでの利用について。最初は使用できない旨の警告が出ますが、とりあえず適当なファイルシステムを作れば、あとはそれを消してパーティションをカスタマイズ可能です。今回はセミ外付けデータ用としてexfat。(仮想マシンのイメージなどを置きたい・Linuxなどからデータを移すため)mac拡張ディスクを300GBほど切り出して、そちらをtimemachineのドライブにしました。250GB中200GBくらい使っているMacOSXで、バックアップ作成にかかったのは2時間くらいでした。linar-gradientを同時に使うトリック。}¬```htmlタグに背景色、bodyに透過PNG画像。最初はグラデーションと画像でcssファイルを分けていたのが有効化のトリックかとも思ったが、そうではなかった。注意:image/sky.pngはcssファイルからの相対パスになっていた。image/sky.png```stackoverflowのコメントによると画像とグラデーションの同時利用は回答時点では仕様策定中と書いてあるのだと思う。electronelectron-packagerがフリーズした場合の対処electron-packagerがフリーズした場合の対処。./release/win```とかで止まった時、npmキャッシュを除去すると解決する場合がある。8%)〜```また、各プラットフォーム向けelectonバイナリのダウンロードは進行していてプログレスバーが出ていないだけの場合もある。catalinaにて発生)/tmp下を見るとわかる。electron-*的な名前のファイルが存在してサイズが増えていくはず。時点で、事実上の完売ということで。最終被チェック数:81物理書籍(ダウンロードカード付き):36部でした。GTK等マイナテーマを含む84pの書籍で上記実績となりました。ありがとうございます。タイトルが長いので「クロス本」と呼んでます。以下ではそう書きます。...本当は、クロス本執筆の動機を説明するのにちょうどよいため本文から「はじめに」章を転載しようと考えていたのですが、もしかすると参加アドベントカレンダーのレーティングに抵触する可能性が。わたしはGTK大好きです本当なんです。なきゃアプリ開発に2年も投入しないし本も書かない。そんな殺伐ポエム4Pを含むけれど他のページは本当に実用的な知見の塊「クロス本」は、電子書籍版をPixiv/BOOTHとgubloadで買えます。技術書典5で頒布予定のクロスプラットフォーム・PCアプリ開発の本(仮)の草稿を、書いた端から公開していきます。GTK,Qt,Electronをそれぞれ使用した経験について書いた技術エッセイです。#技術書典5に出店予定の「クロス本(仮)」、実際にGTK,Qt,Electronの全部で、中規模アプリケーション(helloworldでない実用アプリケーション)を書いたことがあるのは自分くらいだろうから本書を書けるのは日本では自分だけ、という思いで書いてます。2018年10月7日だいたいの時系列。参加を決めたのはサークル募集が始まってから。何か新しい開発をする+それを書く、はつらい。やったことを書くほうが執筆時コストが少なく文章へ割けるリソースが増える。(思い出すというコスト、思い出せないというリスクは有る。)エラー処理の章を書こうと思って自分の過去コードからGTKのGErrorの利用例を探していたら、dialog_builder*って関数を使っているのが見つかって、過去にGladeフォームデザイナを使ったことがあるらしい。内容は早くに時系列エッセイからTIPS集へ。そのほうが前後関係という依存関係が減り章がモジュール化されるため、書くのが楽になる。原稿はMarkdownで書いてpandocベースの自作コンバータでPDF化。#技術書典5pandocでMakdownのコードブロックについて。書く本を書くと、「本をビルドするための技術」をテーマにもう一冊クイックスタート本が書ける。入稿が初めてで一番安い締め切りは逃した。日本語リンタは今回のクロス本の執筆には役立たなかった。知り合いに原稿データを配って試し読みしてもらった。Web上での試し読み募集には応募がなかった。自分は別の方の本のレビューに参加させていただいた。チェック数と売上データのグラフを作っている方がいて、とても参考になったので自分もチェック数と売り上げを公開した。被チェック数を不定期報告しているのは前回の技術書典4で被チェック数と売り上げを集計した方がおり、そのデータが大変有り難かったため、次回以降のデータ収集に貢献するためのものです。忘れたりしなければ終了後売り上げ冊数まで公開します。2018年9月18日こんなこともしていました。技術書典5で頒布予定のクロスプラットフォーム・PCアプリ開発の本(仮)の草稿を、書いた端から公開しています。GTK,Qt,Electronをそれぞれ使用した経験について書いた技術エッセイです。敵に囲まれておる、と思った。サークル一覧公開から5日後くらいに、「この時期のブックマーク数の3倍の冊数が売れます」って言っている人がいたが、自分の場合は実際にそうなった。売り子の約束をしていた友人が所要で1ヶ月前に自分1人で参加することになった。別の知人が買い物ついでにお昼頃の店番をしてくれることになったので、買い物はその間にさせてもらった。技術同人誌、そして物理書籍の物理物販は、自分にとって大きな挑戦の機会でした。リリースされたクロス本は、今年の主要で輝かしい「進捗」となりました。ことのはアムリラートには感謝してます。今年は主要な進捗としてクロス本の他に、「daisy-cell-block-editor」をリリースしたいと考えています。クロスプラットフォーム・デスクトップ・アプリケーションを扱ったクロス本に登場したクロスプラットフォームUMLシーケンス図エディタdaisy-sequenceの姉妹アプリケーションです。クロスプラットフォーム。2018年12月9日ご期待下さい。TL;DR関数名のtypoを修正すると、それまで通っていたテストが落ちる。原因は、テストシステムが生成して渡した不正な引数による異常系終了だった。対処として、テストケース実行を汚い実装で検出して特別に処理することで問題を回避することとした。詳細electron製アプリのdaisy-sequenceに対して、selenium/mochaでウィンドウの起動テストを行っている。これはほぼselenium公式サンプルと同じシンプルなテストである。daisy-sequenceではコマンドライン引数を受け取る。Cli.parse(argv)`にて行っている。この中で、`sprintf-js`パッケージの`sprintf()`関数をtypoしていた。arg;}```これを修正したところ、ウィンドウが即座に終了し、seleniumテストに失敗する。デバッグ前提として、typoを修正するとテストに失敗する。別のtypoを入れる、alart()を挿入する等すると、テストに成功するようになる。これまでテスト失敗が起こらなかったのは、不正で止まることが原因だったらしい。arg.errへの代入(arg.errはエラーフラグを兼ねる)を消すとテストに成功する。それとも、parse()がエラーを返すと失敗する?Cli.parse()エラー時の`process.exit(-1);`を消すと、テストに成功する。parse()がエラーを返すとテストが失敗する!ところでprocess.exit()するとウィンドウが即座に閉じる。ウィンドウが閉じればテストは失敗する。不正な引数を受け取っていることが原因の可能性がある。process.write.stderr()等を使用しても出力されない。上記デバッグの際もこれが作業の困難さを増した。対処として、単にファイルに書き出すこととした。JSON.stringify(remote.process.argv));`結果、取得できたselenium/mocha実行時のコマンドライン引数。```js["/home/nuka/daisy_sequence/daisy_sequence/node_modules/electron/dist/electron","/home/nuka/daisy_sequence/daisy_sequence","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-popup-blocking","--disable-prompt-on-repost","--disable-sync","--disable-web-resources","--enable-automation","--enable-logging","--force-fieldtrials=SiteIsolationExtensions/Control","--ignore-certificate-errors","--load-extension=/tmp/.org.chromium.Chromium.oi97WO/internal","--log-level=0","--metrics-recording-only","--no-first-run","--password-store=basic","--remote-debugging-port=12106","--test-type=webdriver","--use-mock-keychain","--user-data-dir=/tmp/.org.chromium.Chromium.h85Kss","data:,"]```daisy-sequenceは、第二引数が存在する場合に`-o`でなければ、不正なコマンドライン引数として即座に失敗終了する。(ただし、先頭がelectronで終了する場合これを引数に数えない。)原因は不正な引数を受け取っていたことによる不正終了により、ウィンドウが即時終了していたことであると考えられる。typo修正前の動作はこのようになっていた。selenium/mocha実行はelectronに対してテストに適したコマンドライン引数を渡し、アプリケーションはそれを受け取る。アプリケーションはtypoにより「未知の関数を実行しようとした例外」で停止する。selenium/mocha実行は途中でアプリケーション側に例外が発生しても検知(失敗判定)しない。seleniumはウィンドウが起動している・終了できたことに満足してテストをOK判定する。以上のことからseleniumによるウィンドウ起動テストは成功していた。「不正な引数を受け取ったことによる不正終了」と「未知の関数を実行しようとした例外」はどちらもアプリケーションの不正終了を起こす。他のテストでは不正な引数をわたしたことによる不正終了が起こりその理由の区別はつかないので、テスト成功となっていた。typoを修正したことで、以下のように変化した。selenium/mocha実行時のコマンドライン引数を受け取ることで、アプリケーションは不正な引数エラーで即座に不正終了する。seleniumはウィンドウが起動していないためテストをNG判定する。ところで「不正終了」という言葉の使い方が正しくない気がする。対処コマンドライン引数からそれらしい引数を検出したらselenium実行と判定してコマンドライン処理をskipすることとした。キー文字列は"--test-type="にした。selenium/mocha実行は途中でアプリケーション側に例外が発生しても検知(失敗判定)しないが、検出して失敗判定するようにしたい。daisy-sequenceは幸い、正常系で(起動時にwarningが一件出るのと、編集削除操作でエラーログを出力する以外に)例外が発生しない。アプリケーション側でパースする際にelectron向けコマンドライン引数を適切に排除する。mini2を試験導入していてすごく便利で体感が良かったです。nijiflowをベースに、機械学習で艦これとアズールレーンの画像の分類器を作り、学習済みグラフ等を公開した。これのTwitterBotを作成し公開している。データセットはPixivのタグ付け済み画像情報を元に作成した。Web上にあまり開封写真等の詳細がなかったので残しておきます。モノが大きいためか、知らない運送会社でおくられてきた。...JavaScriptで、変数を使った正規表現マッチング例および失敗例は、自作のJavaScriptソースから抜粋。※例ごとにマッチする文字列が違いますがご容赦ください。