simple-web-system technology

Webに関する技術をシンプルに扱うブログ

DartのYamlをMap<String, String>やList<String>に変換する方法

環境 以下のライブラリを使う。(普通これだよね) https://pub.dev/packages/yaml Mapの場合 ライブラリでMapをパースするとMap型ではなくdynamic型が返ってくる。 実態はYamlMap型。 YamlMap型から値を取り出しても値の方が推論されず、使いにくい。 Yaml…

DartのEnumのvalues関数で取得したListは破壊的変更できない

DartのEnumのvalues関数で取得したListはUnmodifiableListなので、remove等の破壊的変更が行えない。 toListで新しくListを作ると破壊的変更ができる。 以下のコード参照 enum ItemType { item1, item2, item3, } final items = ItemType.values; /// -> [it…

複数スマホをもっててsimカードを入れ替える機会が多いときの裏ワザ

スマホケースとスマホの間にゼムクリップ挟んでおくといいよ どうせsimカード入れ替えるときにケース外すし 海外旅行とかで結構役立つ

i3wmでセカンドディスプレイ使うならarandrを使うといいよって話

xrandrは辛い。arandrを使おう gnomeやxfce4等のフルスタックなウィンドウマネージャーでセカンドディスプレイを使う場合、ウィンドウマネージャーに付属するツールを使えば設定できます。ただ、i3wm単体で使う場合は、cliツールのxrandrが使われることが多…

RiverpodでStateNotifierProviderを使うときは、0.14系からの記事を参照しましょう

FlutterのState管理の定番になりつつあるRiverpodですが、0.14系からStateNotifierProviderの呼び出し方が変わったのはご存知でしょうか。 0.14がリリースされたのは2021/04/04なのですが、検索してみると0.13系までの情報がかなり多かったので、整理してみ…

FlutterのDialogを不用意に閉じないようにする

うっかり自分の予想外のタイミングでDialogが閉じることがあるので、 それを防ぐ方法をまとめました。 考慮してない導線だったりして、バグの原因になったりしますからね。 FlutterでDialogを閉じる方法 主に以下の3種類です。 Navigator.of(context).pop()…

会社用のリポジトリだけ、会社用のGithubアカウントを使うようにする

TL;DR githubアカウントを個人用と仕事用で分けたいけど、 id_rsaファイルを切り替えるのとかは面倒くさい 結論: github cliを使う gitのcredential設定で、特定ドメインに対して、認証方法を設定できる。 この認証方法は色々な方法を使えるが、github cliが…

vimでflutterを実行するのが辛かったから、VSCodeから実行した話

表題そのままです。 何が辛かったのか VimでFlutterの開発を行うにあたって以下の2点が辛かったです。 Breakpointを使ってデバッグできない vimのプラグインでflutter runした時に出るバッファが扱いづらい VSCodeで実行しよう 軽さの点とデバッガから考え…

Dartで即時関数を使ってみる(final変数にif文で値を入れたりする)

こんな感じで書ける。 JavaScriptよりも括弧が少ない。 変数宣言時に型をつけた方が間違いが少ないのでおすすめ。 final num = 42; final String message = () { if (num == 42) { return 'this is answer.'; } else { return 'wrong.'; } }(); 即時関数内に…

i3wmでxdotoolを使って、起動時に自動で必要なツールを起動するようにした

i3wmのコマンド自体で自動化できると思ったけど、そんなことなかったので、xdotoolを使った。 xdotool key super+2でworkspace 2に遷移できる。 あとは起動時間を考慮してsleepしつつ&で非同期に起動するだけ。 引っかかったところとして、xdotool key super…

i3wm と xdotoolを組み合わせて、起動時に自動で必要なツールを起動するようにした

i3wmのコマンド自体で自動化できると思ったけど、そんなことなかったので、xdotoolを使った。 xdotool key super+2でworkspace 2に遷移できる。 あとは起動時間を考慮してsleepしつつ&で非同期に起動するだけ。 引っかかったところとして、xdotool key super…

Flutterのstream(bloc)を同期的に待ち受ける方法

結論 streamは非同期的に使うのが主な使い方だが、複数のstreamを扱うにあたって同期的に同期的に値を流したい時もある stream1を処理した後に、stream2を処理みたいな そういう時は、await forを使う Future<int> getStreamInt(stream) async { var result; awai</int>…

環境変数に"\"を入れるとechoしても見えない

状況 Shellのプラグインで Keybindingの設定で環境変数を使う時がたまにある この際、以下のように環境変数を設定する # 例はfish # ただ、他のShellでも同様にバックスペースが要求される set -Ux EXAMPLE_KEY \C-t こうした時にechoで$EXAMPLE_KEYを表示し…

Terminalを録画してanime gifにする方法メモ

[evernote:678e7aa70a7b533d4738cef3e283dbfb Uploading] 結論 asciinemaで録画して、asiicast2gifを使う 色々なツールを使ってみたけどこの組み合わせが一番動作が安定していてよかった インストール homebrewなどのPackageManagerに入っていることも多いの…

VSCodeでTerminalがある下のパネルを開く方法

環境 Macで動作確認しています Windows、Linuxで操作する場合は、CmdをCtrlに置き換えると大体動くはず Panelを表示・非表示にする 下のやつの正式名称はPanelです。 Cmd + Shift + pのコマンド一覧でPanelと打つと、Panel用に用意されているコマンド一覧が…

Riverpodクラス整理メモ

Riverpod関連でクラスや関数が多すぎて訳がわからないので整理してみた。 整理方法 各パッケージのexportから主要なクラスや関数をピックアップした。 riverpod Riverpod本体。Dartだけで動く。 StateNotifierProvider StateProvider FutureProvider StreamP…

Vimの画面管理に関して Windowだけ優遇されてない?BufferとTabの待遇改善を要求する 

ウィスキーで酔ったまま書いた駄文です。 あと、Emacsを使っててVimの画面管理と大体同じことを思うことが結構あったので参考になるかもです。 Vimの画面管理の概要 Vimの画面管理には3つの概念があります Window Buffer Tab このうち、互いに関係している…

ChromebookのTerminalでfontを自由に変える方法(おまけにテーマも変える)

Chrome OS 84からTerminalの設定画面が大幅に変わりました。(テーマ機能とか結構いいです) 見やすくなったのはいいんですが、フォントがデフォルトのものしか選べなくなっています。 vim-deviconsなどでアイコンを使いたいときに困ってしまいます 解決方法…

Emacs 27だとTerminalでTrueColor表示にするの簡単だよ

TrueColorとは、256 color(8bit)よりも多い16,777,216(24bit)色で色を表示できる規格です。 iTerm2やGnomeなどよく使われているTerminalでは対応していることが多いです。 ChromebookのTerminalも対応しています。 Emacs新参者なのでよくわからないんですが…

ChromebookのCrostiniでxselとかでclipboardにコピーできない問題

Crostiniだと以下のようにClipboardにコピーする処理が動かないです。 echo hellp | xsel -bi cat sample.txt | xsel -bi これは、Redditであったwl-clipboardとおうツールのwl-copyで解決しました。 www.reddit.com こういう処理になります。 echo hellp | …

tmuxにfish shellのフルパスを書きたくなかった

tmuxは何も設定しない場合、デフォルトシェルが起動します。 大体はbashでしょう。 ただ、自分はfishを愛用していて、fishの場合はPOSIX互換性がないため、デフォルトシェルにする運用はあまり好まれなかったりします。 そのためtmuxからfishを呼び出して使…

これでいける # 普通に起動する場合 emacsclient -a "" # aliasの場合 alias='emacsclient -a ""' 自分は必ずtuiで起動したいから、更にオプションを指定している # 普通に起動する場合 emacsclient=emacs -t -a '' # aliasの場合 alias emacs="emacsclient=…

Chromebookにnixをインストールする

CrostiniはLXDというコンテナ環境で動作していますが、 このままだとnix-shellがインストールできません。 詳細は以下のIssueにあります。 github.com Issueから解決方法抜粋します ctrl-alt-t でcroshを開く vsh terminaと入力 lxc config set penguin secu…

新しいプログラミング言語やフレームワークの学習方法

メインのエディタを決める vscode デバッガ強い vim emacs sublime text3 サブエディタにintellijを使えるようにする intellij デバッガ強い 日本語の書籍や公式サイトのガイドをひたすら読む クソつまらないんだけど、がんばる 何か作って実践しようとして…

Arm(armhf)のChromebookにVisual Studio Codeをインストールしてハマったメモ

VSCodeにもとうとう公式のArmのバイナリが来ました!! code.visualstudio.com さっそくChromebookにインストールしようとして躓いたのでなんとかしたメモです インストール環境 Chromebook C101PA (armhf:32bit) Debian(Crostini) 10.4 lenovo ideapad duet…

Linuxで、Android Studioのスマホ接続やadb devicesを見ると、permission deniedになる現象の解決方法

簡単に言うとroot権限でadbのdaemonが起動していないからそうなる。 特にAndroid Studioでは、裏でadbが勝手に起動しているので、結構引っかかる。 しかもWindowsやMacだとこの現象が起きないので、訳がわからなくなる。 以下のように、adbを一旦終了してroo…

Arch Linux + i3wm + i3blocksを構築するまでのロードマップ

USBにArchLinuxを焼いて、起動できるようになる パーティションの切り方について理解する Arch Linuxのインストール方法について理解する bootloaderに関して理解する ユーザーと権限に関して理解する ネット接続に関して理解する X Serverに関して理解する …

Clojureのフロントエンドに入門してみた(re-frame + VSCode)

モチベーション 以前からLispに興味はあったのですが、この記事が結構おもしろくてClojureやってみようとなりました logmi.jp シンプルな設計が好きなんですけど、Clujureを学ぶことで勉強になればいいなと また、re-frameからreactのCSSライブラリのmateria…

rustでvectorの値をiteratorで変更するときは、iter_mut()を使う

背景 rustでvectorに入ってるstructをiter().find()で取得して、その値を変更しようとしたんだけど 取り出した値にmutとかつけてもコンパイルエラーで動かなかった ネットであまり見つからないのでメモ代わりに残す 正解 以下のようにすればよかった // 正解…

coc.nvimのプラグインをinit.vim(vimrc)からインストールする設定

以下のように書けばいい " vimであれば、.vimrc " neovimであればinit.vim " これは自分の使っているプラグイン let g:coc_global_extensions = [ \ 'coc-yank' \, 'coc-tsserver' \, 'coc-snippets' \, 'coc-prettier' \, 'coc-pairs' \, 'coc-fzf-preview'…