2日前の話題ではありますが、タイトルの通りです。今回も大阪サテライトでの参加でした。
午前中の学び
午前の勉強会は bash
のキーバインドの話でした。
set -o emacs
set -o vi
どちらが良いかなんて一目瞭然ですね(宗教戦争を煽るスタイル)。
そしてbind芸。
$ bind '"a":' でaキーが死ぬ。 #危険 #危険bind芸 #シェル芸
— Ryuichi Ueda (@ryuichiueda) 2016年12月25日
もちろん午前の勉強会のオチは、危険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'
ここでの a っていうXML名前空間のURI は https://t.co/2edQzVl6Yg だそうな。drawingml って言うのね。 #シェル芸
— T.Motooka (@t_motooka) 2016年12月25日
Q5〜Q8
大阪サテライトでの予習の成果を生かすことのできそうな問題でしたが、残念ながら正解にはたどり着かず。
気休め
_人人人人人人人人人人人_
— T.Motooka (@t_motooka) 2016年12月25日
> クリスマスツリー <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ pic.twitter.com/KaR1FooLoV
懇親会 兼 LT大会
今回は私生活がボロボロでしたので自分では発表しませんでしたが、今回も大阪サテライトは最高の話が続きました。
素晴らしい発表の数々は、こちら!
- Excelでもコマンド実行がしたい! - Qiita
- Hyperでエキサイティングなシェル芸ライフ
- FUSE で繋がる世界
- kanji banner // Speaker Deck
- あとは、資料は見つけられませんでしたが、動くバナー芸という荒技もありました!