@kyanny's blog

My thoughts, my life. Views/opinions are my own.

iOS のブラウザでテキストフィールド・テキストエリア内の文字列を選択状態にする方法

少し前の CodeGrid の記事で「ふつうは element.select() で十分だが iOS の場合だけ他のやり方じゃないとダメ」と書いてあって、ほんとかよと思って試してみたらほんとだった。

app.codegrid.net

codepen.io

button.addEventListener('click', function (event) {
  // textarea.select();
  textarea.focus();
  textarea.setSelectionRange(0, textarea.value.length);
});

iOS Mobile Safari だけでなく Chrome でも同様だった。死ぬまでに一回くらいハマりそう(なので思い出すきっかけになるようブログにメモっとく)

Rails Shift_JIS な CSV アップローダを作るときの注意点

  • (当たり前だが) form は enctype="multipart/form-data" にすること。 form_tag foo_path, multipart: true
  • params[:file] で ActionDispatch::Http::UploadedFile インスタンスがとれる
  • params[:file].read でデータが String でとれる
    • エンコーディングは ASCII-8BIT (バイナリ)
  • 実際は Shift_JIS (CP932) なデータがアップロードされている、とみなして force_encoding する
  • アプリケーション内では UTF-8 で扱いたいのでさらに encode する
  • CSV.parse のオプション headers: true は必要に応じて。 row_sep は無くても \r\n を解釈してくれた

https://github.com/kyanny/playground/blob/gh-pages/upload_sjis_csv/README.md

https://github.com/kyanny/playground/blob/gh-pages/upload_sjis_csv/app/controllers/welcomes_controller.rb#L8-L29

最近読んだもの

Ruby Design Patterns: Memento

Memento pattern というのを初めて聞いた。

Mastering Concurrency | AppSignal

ベーシックな内容だったけど読みやすかった。あとウェブサイトのデザインがきれい。

Why you should use Clojure for your next microservice - Atlassian Developers

よく見る謳い文句で特に目を惹かれるものはなかったけど動画は気になる。が、ぜんぜんたいしたことなかった。

アルゴリズム図鑑

アルゴリズム図鑑

アルゴリズム図鑑

  • Moriteru Ishida
  • 教育
  • 無料

恥ずかしながら最短経路探索プログラムを自力で実装できないので、このアプリで(何度目かの)アルゴリズムの勉強をしている。いきなりダイクストラ法とか背伸びせず、幅優先探索から。

ここ数日くらいやっててまだ完成までこぎつけられていないけど、このアプリはアルゴリズムをステップごとにビジュアルで見せる説明でわかりやすいので、なんとか挫折せずくらいつけている。

改めて取り組んでみてようやく、自分は何がわかってなかったのか、がわかりかけてきた。そもそもグラフというデータ構造をプログラムで実装することがちゃんとできていなかった。というか、いわゆる「迷路」、アスキーアートでかかれてる文字列のあれ、あれをグラフにすることがうまくできなかった。二次元配列にはできるけど、その先でつまってしまった。アルゴリズム以前の問題。

なんでこんなこともできないのかと自己嫌悪で憂鬱な気持ちになりながらもまともに動かないプログラムをいじり続けて、少しずつではあるが「アルゴリズムとデータ構造」というのがセットになってる意味を体得できてきた気がする。この手の本のまえがきとかにたいてい書いてあって何度も読んでるんだけど、やっぱり手と頭を一緒に動かさないと身につかないというか。

いまは、探索まではできるようになったけど、最短経路を表示するために「どれが最短経路だったか」という情報を保存しておくところで、どうやればいいのかで悩み、直している最中。探索アルゴリズムによって、そういう情報・状態をどのように保存しておくのかのやり方も変わりうるのか?みたいなこともわからないので、わからないなりに悩みながらひたすらぐぐりながらの試行錯誤。でてくるサンプルコードが見事にどれひとつとして知りたいことをピンポイントで実装してなくて泣きが入る(が、教育的観点からはむしろ望ましい)

自分のできの悪さに劣等感をひしひしと感じるし、なかなかうまくいかなくてイライラもするけど、やってて嫌ではなく、むしろ夢中でやっているので(楽しいか?というと微妙だが。悔しくてやめられないだけともいえるし、それ含めて楽しみだともいえなくもない)こんどこそちゃんとものにしたい。