FreeBSD梅雨なのにあんまり雨が降らずこれはアカンと思う今日この頃。通例では偶数月がシェル芸勉強会の月だが、今回は都合により7月1日での開催となった。今回も株式会社エスコ様(旧ベータソフト様)の会議室を利用させていただいた。会場への移動中は暑かった!この暑い中会場へ移動される参加者の方はお疲れ様である。今回は5人の参加者が集った。初参加の方もいらっしゃった。今回も大阪サテライトのLTも、キュアエンジニア乱入も相まってすごかったようで。「eval系超絶ワンライナー教祖」鳥海さんによるPerl入門だった。ちなみにPerl歴0年だとか。資料はGitHub.ioで公開されている。正規表現(仮題)ワンライナーを書くのに便利な機能があることに改めて気が付いた内容だった。豊富な特殊変数-naeなどの起動オプションそういえば豊富な特殊変数については、こんなことを思い出した。English宣言をするとこうなる。"@a"'1:2:3昼食お昼は定番となった餃子の王将。開発環境の統一性に関する政治力の考察!?などの話題が上がる。午後の部開始前にイントロの話をする。富士山ががが・・・・そしてlessコマンド終了時にショボーンとなる人たちの救済はまだまだ必要性を感じた次第。speakerdeck.comそしていよいよ午後の部開始。今回は地獄の三部構成らしい。言っても前回よりは難易度は低めだったかも。上田ブログ福岡サテライトで考えて解説した内容は下記の通り。Q1問題の意図としてはjoinコマンドを使うんだろうと思いつつ、awkの連想配列を使った解答例。1列目と2列目をセットでキーにしている。15もう一つTukubaiのsm2コマンドを使った例。3Q2ようやくjoinコマンド発動。-aオプションを使った補完の出番。途中まで出来たけどここから?と思っていたがあとはawkでゴニョゴニョやればよかった。出このブログを書いている時に考えた解答例を。欠出欠出欠出MacやFreeBSDな方はこちら。-oオプションでの列指定がコンマ区切りになるのに注意。coreutilsのgjoinコマンドを使うべし。欠出欠出欠出Q3色々ゴニョゴニョやってみたがスッキリ行かず。Q4.1まずは各行の文字列長を1列目に付けてみる。421更に数値がマイナスの行の文字列長にマイナスを付ける。421後は1列目をキーにして横並びの処理をすれば完成。421Q4.2こちらの問題までは追えず。7相手のデータは三角なので四角にすればいいんじゃ?と四角にしている間にタイムアップ・・・Q6まずは問題のデータと全ての素数を混ぜ合わせて並べ換える。ここまでは上田会長の解答とほぼ同じ。-n2233(出力は省略)89899797ここから重複の数を数える。97後は1列目が1の時に改行して完成。97Q7まずはnkfコマンドに実体参照の復号化機能があることを解説。後は頑張ってタグを取れば良さそう。最後まで解答を作る時間が無かった。b後はテキストブラウザのw3mを使う解説もあった。Q8考えているうちに以前にやっていた「バナー芸人衆」という遊びを思い出す。papiro.hatenablog.jpこれをヒントに考えていると「行列変換して空白だけの行を削除」すればいいやん!と閃いた解答例がこちら。空白を-に置換して行列変換する。]*$'で空白だけの行を削除する。-Tで元に戻し、-を空白に戻して完成。午後の部終了後スライドまで準備する時間がなかったので、メモを元に話をした。バナー芸人衆Q8を解くのにヒントになったブログ記事についてちらっと解説。真・マイナンバーシェル芸xargsの話題が出たので、-Pオプションで並列化が出来るという例をちらっと話した。先日自前で運用しているCAを使ってSSLサーバ証明書の発行をしていたのだが、うっかり手が滑ってしまった。Chromeが発行先のサーバ情報を見るのに、SubjectAltNameをチェックするというように仕様が変わっていた。エラーが出てブーブー文句言われてショボーンとなっていた。X.509デジタル証明書のデータを見てみようではないか。例としてTwitterが使っているSSLサーバ証明書を使う。デジタル証明書のDER形式のバイナリデータを復元するワンライナーがこちら。x1cと指定すると、1バイトずつ16進数とASCII文字で出力してくれるので便利だ。cX.509デジタル証明書は、ASN.1記法に基づいたデータ構造になっている。OpenSSLのasn1parseサブコマンドで可視化出来る。DUMP]:301E820B747769747465722E636F6D820F7777772E747769747465722E636F6DUTCTIMEの2つ目が期限日だ。YYMMDDHHMMSS形式にZがついた文字列になっている。最後に付いたZがUTC時間の意味だ。文字列、つまり不正な日付も入れることが出来るようだ・・・UTF8STRINGの部分がCommonName(CN)と呼ばれる部分で、サーバ証明書の場合はホスト名になる。Nameの部分を見るようになったようだ。実際のデータは16進数のバイナリデータとなっている。Nameを可視化したのがこちら。2つのホスト名が登録されているのがわかる。DNS:www.twitter.comバイナリデータを閲覧するコマンドについて補足をしておいた。MacやFreeBSDのodコマンドはマルチバイト文字に対応しているので便利だ。**0000020またvimに付属のxxdコマンドについても説明しておいた。-rオプションを使った16進数への符号化と復号化、-bオプションでビット列(2進数)への符号化など。ower.その後雑談を兼ねたいろんなお話が出てきた。皆さんいろんな環境でいろんな苦労をされているなあ。シェル芸勉強会の意義を考えていたのだが「データに着目する」視点を身に付くのではないか?プログラミングの勉強会ではプログラム自体に着目する気がするが、シェル芸はデータストリームな処理なので必然的にデータに着目するからだ。これを意義と言っていいものかはまだ自信がないのだが。今回は初参加の方もいらっしゃったので、もう少し自己紹介などの時間を取ればよかったと反省。自分なりに解説やサポート、話題提供を頑張ったつもりだが、もう少し肩の力を抜いていいかもしれない。起きるとそこは雪国だった。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。