読者です 読者をやめる 読者になる 読者になる

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

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

第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じゃない)