2018-01-01から1年間の記事一覧

1分でプログラミングの練習ができるサイトを作った

1分でプログラミングの練習ができるサイトを作った。 30-seconds-of-code Training データはオープンソースの 30-seconds-of-code を使っていて、それぞれのスニペットを問題にした。 JavaScript なのでコードの実行はブラウザ側で行っている。サーバーサイ…

技能実習生に対する聴取票PDFをOpenCVで加工する

要約 技能実習生に対する聴取票PDFをOpenCVで画像解析して機械的に集計しようとしたが、前処理がすでに難しかった。 背景 政府が非公開としていた失踪した技能実習生に対する聴取票を野党の国会議員が書き写し、その全PDFが公開された。 失踪した技能実習生…

【Node.js】return await の紛らわしい注意点

Eslint には no-return-await というルールがある。Standard JS にも採用されているルールだ。このルールは、return await に警告を出す。 async function foo() { return await bar() } しかし、常に return await しないべきかというとそうでもなくて、必…

【翻訳】HTTP/3(daniel.haxx.seのブログ記事)

daniel.haxx.se のブログ記事 HTTP/3 の翻訳です。この記事は翻訳支援エディタ phra-phra.com を使って翻訳しました(手前味噌)。翻訳の許可は元記事のコメントで了承いただきました。 長い間 HTTP-over-QUIC と呼ばれていたプロトコルは名称が変更され、正…

Firebase + React でオンライン翻訳支援エディタ Phra Phra を作りました

作った Web サービスはこちら。 https://phra-phra.com 2018年11月現在、Phra Phra (プラ・プラ)はオープン・ベータ版です。 Phra Phra を作った動機 私は翻訳が趣味なのですが、本格的な翻訳支援ツールを使ったことはなく、テキストエディタだけを使って…

npm ci コマンド

npm

https://docs.npmjs.com/cli/ci の翻訳。 このコマンドは npm-install に似ていますが、テストプラットフォームやCIや開発環境といった自動化環境で使われることを意図しています。通常の npm install と比べると、ユーザー指向の機能をスキップして高速に動…

JSでプライベートコンストラクタを実現する小技

JavaScript は言語レベルでプライベートメソッドをサポートしていないので、プライベートコンストラクタを実現しようとしたら自分で工夫しないといけない。 通常のコンストラクタを隠蔽して、自作の static メソッドからのみインスタンス作成を許すようにす…

WebRTCの接続がSTUNかTURNかを確認する方法

https://groups.google.com/forum/#!topic/skywayjs/EBnKa28GWxQ chrome:/webrtc-internals/ を開き、 Conn-audio-1-0 のような項目を開き、 googLocalCandidateType または googRemoteCandidateType を見る

【JavaScript】JSON.stringify/parse をカスタマイズしてDate型とかを使えるようにする

JSON を拡張して Date 型とかも使えるようにしたい。 そういうライブラリはすでにある(ejson)けど、標準の JSON.stringify() の第二引数を上手に使えば、ライブラリに頼らなくても自前で簡単にできる。 JSON.stringify() - JavaScript | MDN JSON.stringif…

Travis上でSSH deployする

CI

いつもググって忘れるのでメモ。 やりたいこと Travis でデプロイスクリプトを走らせる時に、VMにSSHログインして何かする、というのをやりたい。そのために暗号化した SSH キーを git 管理下において、Travis 上でのみそれが使えるようにする。 やること 以…

【JavaScript】オブジェクトをmap()とかするにはRamdaが便利

lodash みたいな便利関数のライブラリ Ramda はちょっと変わり種だけどけっこう便利。 特徴としては、 関数型の思想に基づいている なので関数に副作用がない ほとんどの関数が配列とオブジェクトの両方に適用できる というのがある。 JavaScript は配列の操…

ChromeでアドレスバーにフォーカスするショートカットはCmd + L

Chromeでアドレスバーにフォーカスするショートカットは Cmd + L 。 っていうだけの小ネタ。 マウスを使わずにキーボードだけでChromeのアドレスバーにフォーカスできたら便利だなと思って調べたら出てきた。

【Swift】Optionalの配列からnilを取り除くにはflatMap()またはcompactMap()

mapとflatMapという便利メソッドを理解する - Qiita によると flatMap() を使うとのことだが、Swift 4 から deprecation warning になる場合があるので、その時には compactMap で置き換える。 [1, 2, 3, nil].flatMap { $0 } // → [1, 2, 3]

/etc/hostsを編集せずにlocalhostに別名をつける

やりたいこと ローカル・ループバック・アドレス(127.0.0.1)に localhost 以外のホスト名をつけたい。でも /etc/hosts は編集したくない。 方法 lvh.me というドメインがあり、開発用に 127.0.0.1 で DNS 登録されている。 lvh.meというループバックドメイ…

【iOS】frameとboundsの違いを一言で

何回聞いても忘れるので。 frame は親ビューから見た相対座標 bounds はビュー自身の座標系から見た座標 子ビューには bounds を渡す。 let child = UIView() child.frame = self.bounds

ffmpegの出力をパイプしてffplayで表示する

こんな感じで行けるようだ。 $ ffmpeg -i input.mp4 -f matroska - | ffplay -i - ffmpeg の出力を標準出力にして、 ffplay がパイプで標準入力を受け取って表示する。 参考: bash - How can I pipe output of ffmpeg to ffplay? - Super User 出力の - は …

MacのtopコマンドでCPU使用率順に表示する

知らなかった。Linux の top コマンドと違うなあくらいしか思っていなかった。 MacOSのtopコマンドでCPU使用順にソート - ex1-lab $ top -o cpu こうしたら確かに CPU 使用率順になった。

とにかく機械学習を始める(kaggle練習問題Titanic)

とにかく機械学習を練習してみようと思って、『Python 機械学習プログラミング』を読みながら、見よう見まねで kaggle の練習問題 Titanic: Machine Learning from Disaster | Kaggle をやったので記録を残す。 [第2版]Python 機械学習プログラミング 達人デ…

【React】recomposeモジュールをTypeScriptで使う

HOC(高階関数)は便利なんだけど、型と一緒に使おうとするとどうもうまくいかなくて、試行錯誤の結果やっと最小構成の例が作れたので書いておく。まあジェネリクスの練習ですね。これでそこそこの規模のものを作ろうとしたら消耗する予感しかしない。 Examp…

Server Side TypeScriptでdecoratorを使い倒す

サーバーサイドを TypeScript で書くなら decorator を活用するとシンプルに書ける。 decorator はむやみに使うと可読性・保守性が下がるけど、汎用性の高いケースに活用すればビジネスロジックに集中した快適コーディングができる、と思う。 decorator ベー…

Surgeで一瞬で静的サイトを公開する

静的サイトを公開するには GitHub で管理しているリポジトリなら GitHub pages を使えばいいが、そうでない場合に最速で公開したいなら、 Surge が手軽だったのでメモ。 surge.sh # surge コマンドをインストール $ npm install -g surge # これだけでアカウ…

【Swift3】アプリの設定画面に遷移する

UIApplicationOpenSettingsURLString を使えばよい。 func goToAppSetting () { guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else { return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(…

TypeScriptを使う時にnpm install tscしてはいけない

TypeScript を使う時に検索してうっかり古い情報で行うといけないので忘備録。 TypeScript のコンパイラ tsc は DEPRECATED になっているので、 npm install -g tsc とかしてはいけない。 単に npm add typescript すれば node_modules/.bin/tsc が入るので…

history で表示されるコマンドを番号指定して実行するには !n

history コマンドでコマンドの履歴を確認することができる。 $ history 1 echo foo 2 echo bar 3 history 一覧表示された履歴の中で、過去のコマンドを番号指定して実行することができる。!n を実行すると、番号 n のコマンドが実行される。 $ !1 echo foo f…

ffmpegでMacで再生可能なテスト動画を作る

詳しく調べていないのでわからないけど、なぜか以下のように普通にテスト動画を作ると、Quick Player で再生できなかった。互換性がないとか言われる。 $ ffmpeg -f lavfi -i testsrc=duration=10:size=640x360:rate=30 -vcodec libx264 test.mp4 ピクセルフ…

ffmpegのフィルター処理(再生速度、明るさ、ノイズ除去など)

忘備録。 動画に適用するフィルタは-vf で指定する。 動画の再生速度を2倍にするなどができる。 $ ffmpeg -i in.mp4 -vf setpts=PTS/2.0 out.mp4 明るさ、彩度も調整できる。 $ ffmpeg -i in.mp4 -vf eq=brightness=0.06:saturation=2 out.mp4 イコールがつ…

【React】HOCのレンダリングコスト

何をしたか React で HOC (Higher Order Component) が肥大化するとレンダリングのコストが増大するはずだと思って調べた。 もっと詳しく HOC は要するに高階関数であり、高階関数はロジックを抽象化するために優れたデザインパターンだが、パフォーマンス面…

Canvas上のお絵かきを録画する

MediaRecorder API と Canvas の captureStream() を使えば、ブラウザの Canvas 上でお絵描きしている様子を録画できる。 デモサイト 実装は出来心から preact で行ったが、普通に React 使っとけばよかった。やはり細かいところでつまずいたりした。 録画の…

カレントディレクトリを取得するコマンドはbasename $PWD

$ pwd /usr/hoge/fuga であるとき文字列 fuga を取得したければ basename コマンドを使う。 $ basename `pwd` fuga pwd コマンドは変数 $PWD で代用できるので $ basename $PWD fuga でもよい。これなら別のコマンドの引数として使いたい時にも $ some_comma…