職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

2016年、作ったものまとめ。

2016年も残り10時間を切りました。
突然ですがここで2016年に作ったものをまとめておきたいと思います。

続きを読む

CloudWatch Logs を華麗に読む CWLReader v1.2

CloudWatch Logs のログを華麗に読むツール CWLReader をアップデートしました。
github.com
pure HTML / JavaScript なツールで、html ファイルを1つ置くだけで使えます。ダウンロードはこちらから。

製品のコンセプトなどは、初回リリース時の記事 をご覧下さい。

主なアップデート内容と意図

初回リリースは 2016年8月 だったのですが、この4ヶ月の間にも AWS は凄まじい進化を遂げています。その進化の中には、リージョンの追加というものも含まれます。まずは、これらに対応しました。

その他には、画面の見た目やモノの配置に調整を入れました。例えば、誤解を招かない範囲でマージンを極力小さくすることで、ログそのものを読むことに集中できるようにしました。

さいごに

何かお気付きの点などございましたら、issue を上げて頂きますと嬉しいです。
英語書くのしんどいよ〜という方は、Twitterで連絡下さい(ブロックしてたらゴメンなさい)。

関西モバイルアプリ研究会 #関モバ 第21回 に参加

関西モバイルアプリ研究会(通称 関モバ)の第21回に参加してきました。

kanmoba.connpass.com

会場

今回の会場も、このブログなどでもお世話になっている 株式会社はてな さんの京都オフィス!
本当によくお世話になってます。

自分で発表した内容

speakerdeck.com
補足資料

うるう秒の挿入まであと5日間程度!ということで、うるう秒特集を組みました。
前回のうるう秒は2015年7月1日(日本時間)だったのですが、その直前には勤務先の社内勉強会で似たような話をしていました。その時の内容を関モバ向けにアレンジしたのが今回の内容です。

聞いた話

全部メモできたわけではないですが、だいたいこんな内容でした。

最後に紹介されていたプッシュ通知テスト用ツール、良さげでした。
GitHub - noodlewerk/NWPusher: OS X and iOS application and framework to play with the Apple Push Notification service (APNs)


おまけ1


これ、自分のマシンに突っ込んでるファイアウォールが原因になっているような気がしてきました。

おまけ2

懇親会では、ずっと日付の話をしていました。
祝日法国民の祝日に関する法律)、最高に萌えます。
第二条に登場する「春分日」と「秋分日」は、懇親会において総務省が決定し公表するかのような発言をしていましたが、調べてみるとこれは正確ではなく、内閣府による解説ページ によれば、国立天文台官報にて公表するという運用が正解でした。ここに訂正させて頂きます。

さいごに

運営の皆さん、はてな の皆さん、会場でご一緒した皆さん、ありがとうございました!

第26回 #シェル芸 勉強会に参加してきました

2日前の話題ではありますが、タイトルの通りです。今回も大阪サテライトでの参加でした。

atnd.org
togetter.com

午前中の学び

午前の勉強会は bashキーバインドの話でした。

  • set -o emacs
  • set -o vi

どちらが良いかなんて一目瞭然ですね(宗教戦争を煽るスタイル)。

そしてbind芸。

もちろん午前の勉強会のオチは、危険bind芸で端末を落とすこと、でしたww


午後のクイズ大会


午後の部が始まる前に、大阪サテライトでは .xlsx のファイルフォーマット解説の会を開催していました。
基本は

  • zipで固めてある
  • 1シートで1つの .xml ファイルが存在する
  • 文字列は sharedStrings みたいなファイルに格納されている
  • 各シートのセルは、中身が文字列のときは sharedStrings の中身での出現場所を指し示すようになっている
    • 全く同じ文字列が複数のセルに入っているとき、sharedStrings は上手く再利用される
  • セルの中身が式(formula)のとき、その評価結果はシートの中にキャッシュされている
    • 例えば =A1 という式が入っていて、その参照先セルが文字列であるとき、式の評価結果がキャッシュされることになるため sharedStrings を参照する形にはなっていない。ファイルサイズが増える原因になり得る。
Q1

一度展開した .xlsx / .docx / .pptx を再びzipに戻す業務。
実は難しいです。。

Q2

パワポのスライドに含まれる「危険」という文字列が、何回登場するか数える問題。
回答:$ unzip -p 20141019OSC_LT.pptx "ppt/slides/slide*.xml" | grep -o '危険' | wc -l
unzip コマンドの展開ファイル指定にはワイルドカードも使えることが重要ですね。

Q3

パワポに含まれる画像を全て抽出してzipに固める問題。
回答:$ unzip -d hoge/ 20141019OSC_LT.pptx "ppt/media/*"; cd hoge/ppt/media/; zip ../../../hoge.zip ./*; cd ../../../
テンポラリのディレクトリを作ってますが、最後に消してないのはお行儀が悪いですね。

Q4

スライド7ページ目に含まれる文字列を抜き出す問題。文字列に全角半角が混在している場合などにおいては、古き良き時代の shift-out / shift-in のような設計思想のタグ構造になっているので、どこからどこまでが1行であるのか?をきちんと管理しなければなりません。パワポにおいては <a:p> タグが段落を示すようなので、これを1行として取り扱いましょう。
回答:$ unzip -p 20141019OSC_LT.pptx ppt/slides/slide7.xml | sed 's/<a:p>/@/g' | tr '@' '\n' | sed 's/<[^<>]*>//g'


Q5〜Q8

大阪サテライトでの予習の成果を生かすことのできそうな問題でしたが、残念ながら正解にはたどり着かず。

気休め

懇親会 兼 LT大会

今回は私生活がボロボロでしたので自分では発表しませんでしたが、今回も大阪サテライトは最高の話が続きました。
素晴らしい発表の数々は、こちら!

さいごに

企画運営してくださってる皆さん、凄いネタをぶつけてくれる皆さん、各会場の皆さんなどなどに感謝!

それでは皆さん、良いshん年を!!(typoじゃない)

目とコーヒー

先日、スターバックスでコーヒーを飲みながら本を読んでいると、二人組の女性客が入店してきて、店員さんに案内されながら筆者の隣の席に着いた。二人とも白い杖を持っておられる。恐らく目が見えないのだろう。

店員さんの行動を見る限りでは非常に慣れている様子で、商品の選択を促す際には点字のメニューを渡して放置ではなく(点字メニューが用意してあったとしたら、もちろんそれも素晴らしいことだが)、「どのような飲み物が欲しいのか?」を聞き出し、それに合う商品をいくつか提案し、その中から注文を取るということをやっておられた。
それ以外にも座席への誘導の仕方や会計の手順、商品の引き渡しなどにおいても理にかなった行動を取っておられた。これらの行動は「助けてあげたい」という精神だけではほぼ不可能だろう。この店員さんが相当の経験を積んできているか、きちんとした教育をうけているかのいずれかであることは容易に想像できる。スタバ凄い。

二人組のお客さんも、凄い。
テーブルの上に置いてある物の位置を、きちんと記憶しているようだった。コーヒーの容器を倒してしまわないか心配していたが、そんなことは無かった。
硬貨も紙幣も、識別して数えることができていた。硬貨は練習すれば識別できそうな気もするが、紙幣は難しそうだ。2016年9月にオーストラリアで 新しい $5 紙幣 が発行され、今後発行される紙幣では "Intaglio"(凹版印刷)で生じる突起によって、目が見えなくても紙幣の識別が可能になる、という話があった。日本の紙幣にはこのような機能は無いはず。どうやって識別していたのだろう…?

もしかすると、これらは盲目の方々にとってはできて当然のことなのかもしれないが、凄い。

筆者には、身近なところに盲目の方は居られないし、自分自身に何か進行中の病気がある訳でもないが、プログラミングという視覚が重要になる仕事をしている以上、盲目になることは怖いことだと認識している。少し前に音楽仲間と酒を交わしたときも「目が見えなくなるのと耳が聞こえなくなるの、どっちが怖いか?」ということが話題に上がったが、その場にいたミュージシャンも全員「目だなー」という意見を持っていたのは印象的だった。

過去にはこんな発言もしていた。


使える時間には制限があるけれども、人の為だけでなく自分自身の為にも、徳を積んでおきたいところだ。