Sun, Mar 10, 2024

Authy Desktopが終了するので秘密鍵を抽出して他ツールへ移行する

Authy Desktopが2024年3月にサービス終了 公式 参考記事 Authyは人気のある2FAアプリケーションの一つだったが、 2024年3月にデスクトップ用Authyが終了する発表されている。 元々は8月の予定だったが、3月に前倒しになった模様。 自分はAndroid, Linuxの環境下でAuthyを使っていたがデスクトップ版が終了するため、モバイル版はAegisとデスクトップ版はGnome Authenticatorに移行することにした。 移行先の選定 Authyの一つ大きなポイントはデスクトップ・モバイルデバイス間の各クライアントでの同期だが、これはAuthyのサーバ経由で秘密鍵を同期することで実現されている。 AegisはOSSのTOTPクライアントだが、Android向けしかないため、デスクトップ向けにはGnome Authenticatorを使うことにした。 Aegis Google play https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis GitHub https://github.com/beemdevelopment/Aegis Aegisの記事 https://gigazine.net/news/20230128-aegis-authenticator-review/ AegisのバックアップとしてGoogle Authenticator形式の複数の秘密鍵をまとめたQRコードが出力できる(他にも標準的な形式のインポート・エクスポート形式をサポートしている) Gnome Authenticator Fluthub https://flathub.org/apps/com.belmoussaoui.Authenticator GitLab https://gitlab.gnome.org/World/Authenticator flatpakで導入するGnome AuthenticatorはGoogle Authenticator形式のQRコードをWebカメラから読み込むことができる Aegisのバックアップ用QRをWebカメラにかざして読み込ませることでAuthyの秘密鍵の同期相当が行える ちなみに以下も選択肢としては良いと思う Google Authenticater自体も最近 バックアップ/QRのエクスポート機能が追加されていて(Aegisで利用している一括のQRコード形式)が扱える 2fas(https://2fas.com/) は iOS / Android / Chrome Extension クライアントがあり、こちらに寄せるのもアリかも AuthyからTOTPの秘密鍵のエクスポート 公式を漁ったがAuthyの秘密鍵をエクスポートする方法が見つからなかった。 どうやらAuthyの秘密鍵のエクスポートはサポートされていないため、各自で何らかのアプリやツールを用いた移行が必要となる。 rootが取れるAndroid端末があれば、Aegisや他のアプリからもエクスポートできるらしいが自分はroot取得していないので https://github.com/token2/authy-migration を使った。 authy-migrationはクライアントのふりをしてバックアップから秘密鍵をダンプする
Mon, Nov 20, 2023

VimConf 2023 Tinyに行ってきた

2023年11月18日、秋葉原で開催されたVimConf 2023 Tinyに参加してきました。 https://vimconf.org/2023/ VimConfが4年ぶりに帰ってくる! VimConf は、世界初かつ世界で唯一のコミュニティによって定期運営されているVimの国際カンファレンスです。 新型コロナの影響で開催を延期していたVimConfが、2023年ついに開催決定! 今回は、準備期間が限られているため、VimConf 2023 tinyとして縮小版での開催となりますが、 Vimに関する様々なセッションが予定されています。 Vimユーザーなら誰でも楽しめるVimConf 2023 tiny。 Vimをもっと使いこなしたい方、Vimについてもっと知りたい方は、ぜひご参加をご検討ください! 初めてのVimConfの参加でちょっと緊張していたのだけれど、とても楽しかった。 ありすえさんがtogetterにまとめてくれているのでそれ見ながら思い出しつつ書いていきます。 https://zenn.dev/lambdalisue/articles/67f532581548b6 Bram Moolenaar the Creator of Vim (mattn) Bram Moolenaar the Creator of Vim (mattn) - Togetter Vimの歴史やVimの作者Bramさんとmattnさんの二人のエピソードをSoftware Designのスピンアウトという形でお話されてました。 自分も、Bramさんがこの世を去ったと知ったときとても悲しい気持ちになったのを覚えている。 このキーノートでmattnさんも感情をなんとか抑えながら話していて、聞いている自分も気持ちを抑えながら聞いていました。 印象的だったのはBramさんはあのmattnさんから見ても手が早かったこと、英語がコンプレックスだったmattnさんのターニングポイントがBramさんとのメールのやりとり、それがOSSへの貢献につながっていること。 そして、今後mattnさんはずっとVimを使いつづけ、メンテナンスしていくんだという意志表明があり、良い基調講演でした。 Revolutionizing Vim/Neovim Plugin Development ~ An In-Depth Look into Denops (Λlisue) Revolutionizing Vim/Neovim Plugin Development ~ An In-Depth Look into Denops (Λlisue) - Togetter 開発者のありすえさん自身が、Denopsについて解説するトーク。 特にDenopsのアーキテクチャそれらの通信がどうなっているのか、プラグイン間の通信あたりが個人的に面白かった。 Vim / NeoVim <–> denops のやりとりはそれぞれJSON/MessagePackでやりとりし、denops <–> plugin は messagepack-rpc でやりとりしている。
Wed, May 17, 2023

RubyKaigi 2023に登壇してFusumaについて話した

RubyKaigi 2023 RubyKaigi2023で登壇してFusumaについて話した。 CFPを出したら通過してしまい、まだまだ先の話だと思っていたら、あっという間に当日が来てしまった。 資料づくりがままならないのに途中でGem入れたほうが面白いだろうなと思ってしまったのが良くなかった。 新しくGemをこしらえてきたのだけれど、ギリギリの発表10分前に2つリリースすることになるとは思ってもみなかった。 結果fusuma本体が落ちるバグ入りプラグインをリリースをしてしまい、その後すぐに修正した。余裕を持ったスケジュールが大事。 今でも自分がRubyKaigiに登壇するなんて思ってもいなかったし、なんならもう一週間経つけれど、あんまり実感がない。 https://rubykaigi.org/2023/schedule/#day1 で並んでる面々、みんな凄い人ばかりで、自分が並んでるのが違和感があるというか、まだそんな感じがする。 RubyKaigi is 祭 ランチブレイクの時にRubyKaigiって祭りだよねという話をしていた。 あの短い期間だけ、町がRubyistに包まれるあの熱狂的でカオスな状況、まさしく祭りだと思う。 好きなトークを聞いて、久々に会う友人・はじめましての人と話して、松本グルメ探訪し、夜はOfficial Party、Drinkup、After Party、会期中ずっとRubyの話してるのすごい楽しい。 トーク聞きに来てくれた友人の夫妻と久々に会ったらお子さんがめっちゃ大きくなってて謎に感動したり、 推しのk0kubunさんやペンさんと写真を撮ってホクホクしていたり、 初めてRubyKaigiに来たという若者見つけてバーに連れて行ったり、 特にDay 3は After Party🍺 => 居酒屋🍺 => ラーメン屋🍺 => コンビニ🍺 みたいな感じで朝までずっと飲んで話してた。 ラーメン屋で朝まで飲んでた人達、みんな無事かな#rubykaigi #rubyfriends pic.twitter.com/O2zDWNscAP — iberianpig(Kohei Yamada) (@nukumaro22) May 14, 2023 みんな体力持つなぁと思ってたんですが、多分この楽しい時間をこのRubyKaigi終わらせたくないんですよね。だからRubyKaigiの夜は長い。 ちなみに最初に参加したのはRubyKaigi 2019の福岡の時で、その時もめちゃくちゃ楽しかったけど、今回はもっと楽しめた気がする。Kaigi is back! RubyKaigiを盛り上げてきてくださったスタッフの皆様、スポンサーしてくれている企業さんには頭が上がりません。本当にありがとうございます。 Fusumaについて発表した FusumaはLinuxのタッチパッド向けのマルチタッチジェスチャのツール。gem install fusuma でジェスチャが効くようになる。 ネィティブでジェスチャ実装されてないLinuxディストロでもほとんどのケースでマルチタッチジェスチャが使えるようになる。 初めて作ったGemなのでそれなりに思い入れがあって、また長くメンテしてると色々リファクタリングしたくなって、その結果プラグインで拡張できるようになったりしたのでその仕組みを中心に話した感じ。 YouTubeにアーカイブがあがってました。 同時通訳 RubyKaigiは日 -> 英の同時通訳があって、自分の発表を英語に通訳してもらって日本語ネイティブじゃない方にもトークを聞いてもらえる。これめちゃくちゃすごい。 自分は通訳の方を入れて話すのは初めてだった。 当日になってギリギリまで資料を弄ってしまっていたので、事前に送った資料との差分が出ていてそのギャップを埋めるのにてんやわんやさせてしまいました。本当に申し訳ありません。 二人の通訳の方がセクション毎に交代して通訳を担当するのでお互いのパートで表現のニュアンスのズレがでないか調整をしていた。 技術通訳をされているプロの方々で、担当してくれた方はバッファやキューなどのデータ構造のことを認識されていて、その上でどの表現が適切か、発火はFireかTriggerか、みたいな細かいところまで質問していただけて、すごく新鮮な体験だった。 あと、通訳し終わる前にスライドが次に移動すると英語で聞いている人が理解しづらくなるので、話の区切りでは適宜間を持たせたほうが良いという話や、みなさんどうしても早口になるのでゆっくり落ち着いて話すようにというアドバイスをいただきました。 しかし、想定よりも若干時間が余ったのでかなりオタク特有の早口出てしまったと思います。すみません。 登壇資料 トークの中で話してた、ヨドバシに通ってMac触って挙動を確認してたのは本当で、それでエッジスワイプをプロトタイプのxSwipeに実装できた。 Macのトラックパッド上を2本指で右端からからスワイプすると通知センター開くやつで、右端指1本分くらいの領域を通過したあとその領域にもう1回連続でタッチが入り移動するとトリガされるやつ。 ただ、Synapticsではタッチパッド上の絶対位置が取れて同じような実装が出来るのだが、相対移動しか取れないLibinputだと端を取るのがちょっと難しくまだFusumaには移植できてない。
Mon, Apr 26, 2021

Linux用マルチタッチジェスチャのFusumaがv2にアップデート

Linux向けのマルチタッチジェスチャツールのFusumaがv2にバージョンアップした。 新たにジェスチャの設定項目が充実して、細かいところに手が届くようになった。 Fusuma v2のアップデートの概要 Fusuma v2ではマルチプロセス化、I/O多重化、継続ジェスチャ、contextに応じた設定の切り替えなど、 色々とアップデートが入った結果、以下のような機能が実現できるようになった。 アプリ固有のジェスチャ設定(fusuma-plugin-appmatcher) Mac OSスタイルの3本指ドラッグ Windowsスタイルの3本指スワイプでのウィンドウ切り替え スワイプ/ローテートによる音量調整・輝度変更 動作確認した環境 この記事内での設定はDELL XPS 13 9310上のUbuntu 20.04(X11/Gnome-shell)で動作確認している。 利用しているディストリビューションやデスクトップ環境に応じてショートカットキーなどは適宜読み替えて欲しい。 $ fusuma --version reload config: /home/iberianpig/.config/fusuma/config.yml --------------------------------------------- Fusuma: 2.0.5 libinput: 1.16.5 ruby 2.7.0p0 OS: Linux 5.10.0-1026-oem #27-Ubuntu SMP Thu May 6 07:19:13 UTC 2021 Distribution: Ubuntu 20.04.2 LTS \n \l Desktop session: ubuntu x11 --------------------------------------------- なお、Fusuma v2から要求するRubyバージョンが2.5.1以上(Ubuntu 18.04のデフォルトのRubyバージョン)となっているので注意。 Fusumaとプラグインを最新版にアップデート gemコマンドでアップデートできる。 システムワイドのRubyを使ってインストールしていない場合sudoは不要。 $ sudo gem update fusuma インストール済みのFusumaプラグインがある場合はそれらをアップデートしておく。 # プラグインをリストする $ sudo gem list fusuma-plugin- fusuma-plugin-keypress (0.
Tue, May 14, 2019

Upgrade to elementary OS 5.0 Juno

下書きが2019-05-14T15:38:04+09:00 となっているので1年以上塩漬けされた記事である😨 (2020/06/05) elementary OSはUIが綺麗でかつ動作も軽快なので、5年ほど愛用している。今回、新バージョンの5.0Junoが出てしばらく経っていたのでアップグレードすることにした。 Unetbootinを利用してelementary OS Junoにアップグレードする。 実際はクリーンインストールなのだが、elementary OS自体は公式でアップグレードパスを用意していない。 /homeと/を別パーティションに分けていたので、データ領域である/homeを残してそれ以外を新しい環境に移行する。 環境 Dell XPS 13 9360 OS: elementary OS 0.4 Loki → elementary OS 5.0 Juno パーティション Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p1 42G 17G 23G 42% / /dev/nvme0n1p2 177G 151G 17G 90% /home 今回 / の領域をフォーマットして5.0 Junoをクリーンインストールし、 /homeには個人の設定(XDG_CONFIGやdotfiles)やドキュメント類などが置いてあり、ここは引き続き利用する。 インストールにはUnetbootinを利用した。 Unetbootinについてはこちらをご参考に↓ アプリケーションのインストール /home以外はクリーンインストールなので、aptや/usr/local/binでインストールしていたものは再インストールする必要がある。 Ansibleでローカル環境の再構築 Ansibleでローカル環境の再構築を楽に行えるようにしたかったので、アプリケーションのリスト程度だがdotfiles/.config/ansible/playbook.ymlに残している。 ansible-playbookコマンドでリポジトリの追加、パッケージインストールを下記のコマンドで行う。 ansible-playbook ~/.config/ansible/playbook.yml -K インストールしたアプリケーション一覧 ブラウザ Google Chrome メインブラウザ 手動でインストール Chromium Firefox パスワードマネージャ bitwarden snapでインストール可 Chrome拡張もある 画像編集系 Gimp 画像編集 Inkscape ベクタ系の画像編集 ターミナル/CLI環境 byobu tmuxのラッパー guake ドロップダウンタイプのターミナル git バージョン管理 tig gitのCUIクライアント ranger VimライクなCUIファイラ vim-gnome GVim。クリップボード拡張入りのVimも入る。 xclip CLIクリップボードマネージャ チャット Slack 仕事で使うチャットアプリ Line chrome拡張 デスクトップ拡張/GUI numix-icon-theme
Tue, Apr 30, 2019

tig-explorer.vimの使い方

Vim用のGitクライアントが欲しかった vimのGitプラグインとして何を使っているのが多いだろうか? 自分の観測範囲ではfugitiveを使っている人が多いようだ。 しかし、ターミナルではCUIツールで高速なプレビューの出来るtigをGitクライアントとして利用している人は多いのではないだろうか。 vimでもtigが使いたい。そんな人(自分)のためにvim pluginを作成した。 tig-explorer.vim tig-explorer.vimはtigをvimから扱うプラグイン。 tigの機能でdiff上からeキーを押下すると任意のエディタで該当箇所を開く事が出来るが、このプラグインを使うと、vimからtigを呼び出すことが出来る。 tigを開き、差分をチェックして、そこから再びvimで開くことが出来る。 また、vimからtigを呼び出すには!tigコマンドをvimのコマンドモードから呼び出すことでも同じことが実現でも可能だが、 プロセスがvim-tig-vim-tig-vimのようにどんどんネストしてしまう。 このプラグインを経由してエディタで開く場合は親のvimプロセスで開くため、vim上のbuffer移動やhistory、yankが途切れることがない。 また、vimからtigに行番号やファイル名を渡せるので、↓のコマンドが格段に扱いやすくなる。 tig FILEPATHで閲覧中のファイルの履歴を見る(:TigOpenCurrentFile) tig grep PATTERN PATHでプレビューしてから開く(:TigGrep) tig blame FILEPATHで現在のファイル履歴を行単位で見る(:TigBlame) tig-explorer.vimのカスタマイズ .vimrcの記述例 " tigを開くnnoremap <Leader>t :TigOpenProjectRootDir<CR>" 現在のファイルの履歴を見るnnoremap <Leader>T :TigOpenCurrentFile<CR>" パターンでtig grepするnnoremap <Leader>g :TigGrep<CR>" tig grepした内容を再呼び出しするnnoremap <Leader>r :TigGrepResume<CR>" 選択中のキーワードでtig grepするvnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>" カーソル下のキーワードでtig grepするnnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>" 現在のカーソル位置でtig blameするnnoremap <Leader>b :TigBlame<CR>また、このプラグインの特徴的なところでtig上でCtrl-tを押下するとvimのタブで開く機能が追加されている。 同様にCtrl-sで水平分割、 Ctrl-vで垂直分割出来る。 tig上のvimを開くキーバインドの動的に追加していて、下記がデフォルトの設定値。 let g:tig_explorer_keymap_edit = '<C-o>'let g:tig_explorer_keymap_tabedit = '<C-t>'let g:tig_explorer_keymap_split = '<C-s>'let g:tig_explorer_keymap_vsplit = '<C-v>'↑ .
Sun, Apr 28, 2019

2019/04/28 最近読んだ記事

Ruby FFIについて https://github.com/ffi/ffi RubyからCの関数を呼び出すことが出来る代物。 内部でlibffiというライブラリを経由してRubyからCをコールする。 ↓ FFIを使って作成されたプロジェクト一覧 https://github.com/ffi/ffi/wiki/projects-using-ffi キー入力のエミュレーションライブラリのxdotoolの基幹ライブラリのlibxdoをNative Extentionとして呼び出せるか調べていた。 というのも、fusumaでxdotoolの呼び出し遅延のIssueが上がっていて、ネイティブのC関数レベルでAPIを呼べると改善するか試したかったというのがある。 最近のlibxdo3に対応出来ているライブラリは少なく、forkされたものであれば動くことを確認した。 require 'x_do' => true XDo.new.keyboard.type_keysequence('super+Right') => :success # 隣のワークスペースに移動 GIFのようにワークスペースの移動が出来ている。fusuma-pluginsとして追加出来ないかと画策中。 既にあるGemを最大限利用したいが、足りない部分は自分でメンテしないといけないかも。 貸倒引当金について 昔の顧客に未払いのまま倒産するスタートアップが居るので調べた。 一括評価になりそう。 この単語もたまたま詳しい方に教えて頂けたが、会計難しいので詳しい人からすぐ聞けるようにしておきたい。 歴4ヶ月の異業種未経験がリモート開発 スクール上がりだと教育コスト結構必要で、スクールで教えることと業務経験は全く別で、覚えることも多い。 簡単な物をつくる1つの方法だけを教えられれても、現実で解決する問題は難しくて複雑なものが多いので仕方ない。 特に最初からリモートワークは絶対にやめたほうが良くて、テキストベースのチャットで理解できる範囲なんて初心者(じゃなくても難しい)に分かるはずもない。 しかも教える側のコストが格段に大きくなってしまうので、お互いに不幸になる。 技術的レベルが足りないのであれば、 ちゃんと1年下積みしたら見違えるように変わるので、フリーランスなる前に何処かの事業会社や受託会社などに転がり込んで武者修行すると早い。 自分は職業訓練校の後にスタートアップにインターンとしてジョインしたが、特に小さいスタートアップだと急速な成長は見込めるものの体力無いとしんどいので覚悟決めていったほうが良い。 最近、未経験でフリーランスのエンジニアやりたいという人から相談受けることがあるけれど、普通に無謀なのでまずは会社に入ろう。
Fri, Feb 22, 2019

Fusumaのインストールと設定

Linux上でタッチパッド上のジェスチャーをカスタマイズ出来るFusumaというライブラリをRubyGems公開している。 日本語の記事もあまりないので、使い方やカスタマイズの記事を書いてみることにした。 RubyGemsにライブラリを公開した時の記事⇓ Fusumaのインストール Debian系を利用しているOS(パッケージ管理にaptを利用している)なら下記のapt install等のコマンドはそのまま利用できるはず。 自分はUbuntu16.04ベースのelementary OS lokiをインストールしたDell XPS 13(9360)で利用している。 Archの人はArchWikiに色々書いてもらっているようなのでそちらを参照。 https://wiki.archlinux.org/index.php/Libinput#fusuma Ubuntu 15.04以降ではFusumaに依存するlibinputを使用することができるが、Ubuntu 14以下の古いバージョンではsynapticsドライバを使用するxswipexSwipeを試してみて欲しい。 インストールされているRubyのバージョンを確認 まず最初にRubyをインストールしてあるか確認。 システムにインストールされているRubyでも問題ない。 (もちろんrbenvやrvm使ってても問題ない) $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] # ↑Rubyの2.4がインストールされていることを確認 依存パッケージのインストール タッチパッドの入力を読ませる必要があるためlibinput-toolsをインストールする。 (Fusuma内部でlibinput debug-eventsによるデバッグログの出力を利用している) $ sudo apt install libinput-tools また、Alt+Left, Alt+Rightなどショートカットを発行できるようにするためxdotoolをインストールする。 $ sudo apt install xdotool FusumaをRubyGemsからインストール $ sudo gem i fusuma iはinstallの省略。システムのRubyでインストールする場合はsudoが必要。 (rbenvやrvmでインストールしているRubyを使う場合、$ gem i fusuma でインストール出来る) Fusumaの設定ファイルを作成する ~/.config/fusuma/config.ymlに設定ファイルを作成する。 $ mkdir -p ~/.config/fusuma $ touch ~/.config/fusuma/config.yml エディタで~/.
Sun, Sep 2, 2018

ranger-explorer.vimをアップデートした

ranger-explorer.vimというVimプラグインをアップデートした。 このアップデートでranger上の操作でVimのタブで開くか画面分割して開くかを選択できるようにした。 (あとNeovimもサポートした) ranger-explorer.vim https://github.com/iberianpig/ranger-explorer.vim Vimのファイラのrangerに置き換えるVimプラグイン。 Vimからrangerでカレントディレクトリを開いたり、プロジェクトルートのディレクトリを開いたりできる。 また、Vimのプロセスがネストせず、rangerの親プロセスのVimで開くようにしているのでbufferを共有することが出来る。(これが!rangerで開いた時との違い) 今回のアップデートでは rangerから Vimのタブや画面分割で開いたり出来るようにしている。 ranger rangerはCLIベースの高機能ファイラで、コマンドラインから操作できる。 hjklの移動、yyのヤンク、ddのカット、pのペーストなどVimライクな操作や、コマンドラインでの:rename、:touchなどの操作がサポートされている。 特に高速なライブプレビューが気に入っており、これだけでrangerを選択するモチベーションになっている。 rangerからタブ/画面分割で開く ranger-explorerからrangerを開いた時、Vimを開くキーバインドがrangerに自動で定義されるようにした。 <Ctrl-o>: 現在のタブ上で開く <Ctrl-t>: 新しいタブで開く <Ctrl-v>: 画面を垂直に分割して開く <Ctrl-s>: 画面を水平に分割して開く このようにrangerから分割して開くことが出来る。 動的にrangerへキーバインドを注入しているので、CLIからrangerを開いた時はこれらのキーバインドは使えず、ranger-explorerから開いた時のみタブや画面分割が出来るようになる。 また、動的にアサインするキーバインドは ~/.vimrc で下記のように上書きできる。 let g:ranger_explorer_keymap_edit = '<C-o>'let g:ranger_explorer_keymap_tabedit = '<C-t>'let g:ranger_explorer_keymap_split = '<C-s>'let g:ranger_explorer_keymap_vsplit = '<C-v>'得意なツールに任せる 無理に全てVimプラグインで頑張るよりも得意なツールを使えば良いと考えていて、 今回の場合はディレクトリ構造を扱うのが適したツールのrangerに任せている。 特にファイルを開いたり、検索する部分は外部のCLIツールを利用している。 fzf.vim ファイル名をあいまい検索(fuzzy-finder) ranger-explorer.vim ディレクトリ階層からファイルを選択 tig-explorer.vim tigでGitの履歴から、git grepからファイルを開く どれもプレビューが高速なツールなのでVimからファイルを探すワークフローが快適になった。 異なるツールの操作に一貫性を持たせる Vimに外部ツールを利用する場合はパフォーマンスの利点もあるが、普段から使い慣れているツールを扱えるということが利点。 しかし、当然ながらツール毎に細かいキーバインドが異なる。同じ機能は同じキーバインドで扱えるようにしたいと思っていた。 そこで、fzfや以前愛用していたvimfiler/ctrlpと同様の使い勝手が欲しくて、<C-o>、<C-t>、<C-v>、<C-s>のキーバインドでタブや画面分割して開けるようにした。 プラグイン側からキーバインドを動的に設定するアイデアは、tig-explorerにも取り込んでいる。
Fri, Apr 27, 2018

2018/04/27 最近読んだ記事

最近読んだ記事で気になったものを幾つかピックアップ。 ERC20に準拠したトークンコントラクトの脆弱性問題について 独自実装した箇所のSolidityのプログラムにバグがあった。 ERC20自体に欠陥があるわけではない。 算出処理はzeppelin-solidityというコントラクト開発ライブラリ群のSafeMath.sol を利用することが定石となっています。 計算処理で意図しない処理を弾くのには SafeMath 使うのが良さそう。 シェルスクリプトで排他・共有ロック&セマフォ POSIX標準のshell scriptでロックを作る。(どんなOS上でも動くという話) ポイントはアトミックに(単一操作で)作るという点である。つまり存在確認処理と作成処理が同時ということだ。もし存在しないことを確認できて、いざ作成しようとした時に他のプロセスに素早く作成されてしまったら、ロックファイルを上書きできてしまうのでアクセス権が唯一のものではなくなってしまう。 作成と確認アトミックであれば良い。 $ mkdir /tmp/lockfile # ロック作成/確認 $ echo $? #=> 0 # 成功 $ mkdir /tmp/lockfile # => mkdir: ディレクトリ `/tmp/lockfile' を作成できません: ファイルが存在します $ echo $? #=> 1 # 失敗 ちなみに以前の会社ではmkdirでロック書いてた。 確か他と比較して早いというのが理由。 【翻訳】サイドプロジェクトから収益性のあるスタートアップに育てる方法(前編) Nomad List 作った人の話。毎月1つのペースでサービス作るのは楽しそう。 Nomad Listはノマドワーカーに必要なネットや電源、生活費を含めた都市毎のランキングがメインのサイト。 コワーキングのリストとかもある。 ログインしてチャットチャンネルに参加する部分は有料。 サインアップしたらフリーミアムとかはなくて全て有料プラン。 あと、remoteok というサービスも作っていてこちらも稼ぎを出してる模様 数を撃つこと自体は当てるためには必要。個人的にかなり参考にしたい。 アマゾン・エコーが、英会話の練習相手になってくれた 日常会話的な内容が練習出来ると良さそう。 最近まったくSpeakingの練習してない。まずEcho Dotを箱から出さないと。
Sun, Jun 25, 2017

fwupdでLinuxからUEFI(BIOS)のアップデート

Linuxデスクトップを利用する際に少し問題となるBIOSのアップデート。 ここではfwupdというツールを使ってUEFI(BIOS)のアップデート方法を書く。 特徴として、別のデバイスにBootableなディスクを焼いてアップデートする必要がないが、サポートされているデバイスでなければ対応出来ない。 なお、Unetbootinを使ってUSBデバイスからのアップデート手順をQiitaに書いているのでそちらもご参考あれ。 この記事はUbuntu16.04ベースのelementary os v0.4(loki), Dell XPS13 9360で試した内容を元にを書いている。 fwupdで利用可能なデバイスかどうかを確認する 利用可能なデバイスのリストはこちら→(https://fwupd.org/lvfs/devicelist) 自分のXPS13 9360はfwupdでアップデート可能だった。 fwupdのインストール aptでfwupdインストールする sudo apt install fwupd cabファイルをダウンロード (https://fwupd.org/lvfs/devicelist) からダウンロードする。 画像内のリンク先のcabファイル。 fwupdmgrでインストール fwupdmgrというコマンドが利用出来るようになっている。 ただし、ACアダプタを接続していないと進めないので注意する。 fwupdmgr installでファームウェアをインストール。 fwupdmgr install /path/to/your/downloaded/firmware.cab これでインストール待ち状態になった。 再起動時にBIOSのロード画面でアップグレードが走る。 Special Thanks https://github.com/hughsie/fwupd https://fwupd.org/lvfs/devicelist
Sun, May 14, 2017

Linuxでマルチタッチのジェスチャにショートカットを割り当てるFusumaというGemを作った

linuxのマルチタッチのジェスチャを認識して任意のスクリプトを実行するプログラムを作った。 https://github.com/iberianpig/fusuma Fusumaという名前でRubyGemsに公開した。 Linux上のタッチパッドでのジェスチャをキーイベントにマッピングし、スワイプを検知したらワークスペースを移動させるなどの処理を可能にする。 ちなみにsyncapticsドライバ向けのPerlでの先行実装のxSwipe を過去に作っていて、こちらを元にRubyでlibinputドライバ向けに書き直している。 ワークスペースの切り替えする横スワイプが襖を開ける動作と似てるところが由来。 TouchEggやGinsなどUbuntuのWikiに紹介されるようなライブラリは利用するのに一癖ある。そして設定で上手くいかないケースが多い。 Perl製のxSwipe/今回公開したRuby製のFusumaはデバッグログを利用してタッチパッドの出力を読み取り、任意のスクリプトを発行出来る。そのため、タッチパッドのデバッグログ出力さえ出来ればジェスチャ解釈はできるためマルチタッチジェスチャの敷居がかなり低くなった。 Fusumaの使い方 インストールについては、Fusumaのインストール方法(https://github.com/iberianpig/fusuma#installation) を読んで欲しい。 Input Groupにログインユーザ追加後、ログイン・ログアウトしないとFusuma実行ユーザーからタッチパッドが読み取れず、Fusumaが失敗してしまうので注意。 fusumaコマンドで起動。 ~/.config/fusuma/config.ymlに設定ファイルを配置するとFusuma起動時に読み込んでくれる。 ジェスチャとそれに対応するスクリプトを自由にカスタマイズできる。 下記は一例。 swipe: 3: left: command: 'xdotool key alt+Right' right: command: 'xdotool key alt+Left' up: command: 'xdotool key alt+t' down: command: 'xdotool key alt+w' 4: left: command: 'xdotool key super' right: command: 'xdotool key super+a' up: command: 'sh ~/tool/linux/script/desktop_switcher.sh 1' down: command: 'sh ~/tool/linux/script/desktop_switcher.sh -1' pinch: 2: in: command: 'xdotool key ctrl+equal' out: command: 'xdotool key ctrl+minus' 4: in: command: 'xdotool key super+a' out: command: 'xdotool key super+s' threshold: swipe: 0.
Mon, Feb 6, 2017

Ubuntuのベースバージョンを変えずにLinuxカーネルをアップグレードする方法

環境のElementary OS 0.4 Lokiを利用しているが、カーネルのバージョンは4.4である。 4.4ではディスプレイ周りの不具合が多かったため、カーネルをアップグレードしたかった。 本記事の内容は、基本的にベースバージョンのUbuntu16.04でも同様と見てもらって構わない。 ukuuによるカーネルのアップグレード ukuuというツールを使えば任意のkernelをインストール出来る リポジトリを追加する sudo apt-add-repository -y ppa:teejee2008/ppa ukuuのインストール sudo apt update && sudo apt install ukuu Ukuu Kernel Update Utilityというアプリを選択して起動(ukuuでターミナルから起動してもいい) カーネルのバージョンを選んでインストール出来る。インストールされたカーネルはローカルにキャッシュされていて、 キャッシュ済の場合バージョンを簡単に切り替えできる。 記事執筆時点では4.9.8までインストール出来ることを確認した。 動作確認時に特に問題はないと思われたが、Fusumaが依存しているlibinput-debug-eventsのログにエラーが出ていた。 そのためukuuによるアップグレードではなく、後述するHWEカーネル用パッケージをインストールすることにした。 HWEカーネル用パッケージのインストール HWEカーネルとは HWE(Hardware Enablement)カーネルは,より新しいハードウェアでもLTSを使えるように用意されている 「LTS Enablement Stacks」のカーネルです。 簡単に言うと,LTS以降にリリースされたUbuntuで使われるカーネルを,LTSでも使えるようにしたものです。 (http://gihyo.jp/admin/serial/01/ubuntu-recipe/0278) より引用 安定版と開発版があり、開発版であれば4.8が入るそうだったので開発版をインストールすることにした。 linux-generic-hwe-16.04-edgeをインストール sudo apt install linux-generic-hwe-16.04-edge バージョンの確認 $ uname -a Linux XPS-L321X 4.8.0-34-generic #36~16.04.1-Ubuntu SMP Wed Dec 21 18:55:08 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux カーネルバージョンは4.8.0-34まで上がった。 ハードウェアのサポートが入っているためか、こちらではlibinput-debug-eventsが正しく動作していた。
Mon, Jan 30, 2017

記憶の定着率を上げるPocket+Kindle連携

日々の情報収集のフロー内で記憶定着のために自分がやっていることを書いてみた。 エビングハウスの忘却曲線 エビングハウスの忘却曲線と復習の関係に注目すると、復習は少し時間を空けておいたほうが効率が良いと言われている。 1〜2日以内にチェックして短期記憶に、1週間後に再度見直して長期記憶に持っていく作戦。 時間を空けて読むという行為をWebサービスを組み合わせてやってみる。 なお、1日以内、1週間以内、2週間以内で3度復習したほうが良いらしいが、運用効率が悪いので期間はあまり厳密にしない。 気になったらとりあえずPocketに入れる PocketはWebページを"後で読むリスト"に追加してくれるサービス。 後で見返そう、今時間ないから後で見たい、難しいから復習しよう、と思った時にここに放り投げる。 スマホアプリやChrome拡張があって、ブラウジングしながら後で読むリストに追加できる。 Pocketで見る(短期記憶) Pocketのアプリをスマホに入れる。タブレットでも良いが、いつでも持っているものがいい。 毎日の通勤時に記事をチェックする。 Kindleで記事を読む(長期記憶) P2K - Pocket to Kindleというサービスを使ってPocketの記事をKindleで読む。 配信オプションが色々ある(daily/weekly, 記事の長さ、 取得順序、 etc)が、自分は30分程度で読める分を週1回Kindleに配信している。 Kindleで読むのは週に1回(しかも長めの記事)になるので必然的にPocketに入れた時から期間が空くことになる。 週末に30分-1時間程度かけて読む。 その他 Twitterを連携させて時間差付けてフィード流したり、後で読むリストに追加したりしている IFTTTでTwitter-> Pocketの連携 Twitterでいいねした記事を後で読むリストに追加する。 IFTTTでPocket -> Buffer連携 Pocketでスターをつけた記事をBuffer経由で#見てるタグを付けてTwitterにポストする Buffer経由することで時間を空けてツイートするので自分自身が記事を再チェック出来る 上記を取り入れた場合、3回以上同じ記事を目にすることになる。 Special Thanks [忘却曲線 - Wikipedia] (https://ja.wikipedia.org/wiki/%E5%BF%98%E5%8D%B4%E6%9B%B2%E7%B7%9A) エビングハウスの忘却曲線(ぼうきゃくきょくせん) 「記憶」の仕組みを知って効率よく学習したい…その3、短期記憶の特徴と容量について - 烏は歌う
Tue, Jan 24, 2017

風呂キンドルのすゝめ

風呂で読書するというのを一度やってみたかったのでやってみた。 Kindle KindleのペーパーホワイトのWifiキャンペーンモデルを使ってる。買って1年半くらいになる。 キャンペーン情報の有りのモデルのほう買ったけれど、キャンペーン情報はありがたいので特にキャンペーンなしにしなくても良い。安いし。 Kinlde PaperWhiteは最近のデバイスとは打って変わって電池持ちはすごいよくて殆んど充電しない。 測ってないけれどガラケーよりも電池持ちが断然いい。 Ziploc 防水性能をアドオンする。 ZiplocのMサイズだとちょうどよかった。ちなみにお茶っ葉を保管するのに買った。 Kindleを入れるとこうなる。奇跡のジャストサイズ。 風呂Kindleやってみた結果 意外と良かった。日々の習慣に組み込みたいレベル。 蒸気プラスビニール一枚隔てるので、視認性は若干落ちるのでフォントサイズを少しだけ大きくすれば快適に読める。 バスタブをちょっと曲げてあげて溝の部分に挟んであげるとKindleを立てるスタンドになる。手で持たなくていい。 これも快適な要因の1つ。 ただ、集中して読めるのだが、水分が持って行かれているのに気づかない。 お水を飲んだりするのにペットボトル置いておくといい。あとのぼせてしまう場合はお湯の温度を少し下げたほうがいい。 ちなみに今はホモ・サピエンス全史という本を読んでる。 ネアンデルタール人と裾野を分けたサピエンスは動物とどう違うのか、お金、会社、資本主義はどうやって成り立っているのか。 それらは全て虚構であり、それを信じなければ成り立たなかった…という話。 普段読まないジャンルだけれど結構売れてるみたいで内容はすごく面白い。