ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

NAISTサマーセミナーに行きました

NAISTサマーセミナー2018 というのがありまして、NAISTのお方にさまざまな分野の知識を授けてもらえるということです。日程的にOKっぽくて、研究室の同期がビットコインブロックチェーンを研究対象にしたいと言っていたので、誘ってそのテーマで応募しました。

すんなり通りましたが大雨や地震の影響でテスト期間がずれて、2日間ある講義のうちの初日にかぶることになりました。ごめんなさいのメールを出して午後から参加させてもらうことになりました。

バスで片道 420円、山道をゆられつつNAISTに行きました。二日間でやった内容としては

  • Bitcoin / Blockchain / Ethereum とは何か?
  • Solidity を触ってみよう
  • web3py で ethereum を扱う
  • ethereum と sesame の連携

みたいな感じでした。

blockchain / ethereum については実装には触れず仕組みを学び、「なるほどこんな概念なのか」という感想を得るに至りました。

solidity はなんだかよくわからない言語と概念で最後まで仲良くなることはできませんでした。もう少し構成要素を理解したら行ける気がする。同期はコピペを駆使してオリジナルトークンを発行していました(コピペか全継承が正しい流儀っぽい)。

web3 はほとんどメインで触っていて、頑張って 「オリジナルトークンを同期に送りつける」スクリプトや「オリジナルトークンの流通があったら sesameAPIを叩いて鍵を開けたり閉めたりする」スクリプを書きました。web3自体は簡単だと思ったんですがいろんな種類のエラーが度々現れてそのトラブルシュートに多くの時間を食べられました。

二日間もあったにもかかわらず成果が少ないので残念ですがトラブルシュートに追われていたのでしかたがない。ethereum がどんなものでどんな構成要素から成るかということがわかっただけでも御の字です。もう少し難しいこともやりたかったようなでも同期の進捗を見てるとこれでも十分なのか〜という感じ。

二日間の最後には謎の修了証書授与がありました。大した内容ではないと思うし参加者の反応もまばらなのであれはやめていいのでは?

NAISTは面白かったし来年も面白そうなテーマがあれば行ってみたいと思います。というか 5日間くらい泊まり込みでやって全ジャンルの知識を詰め込んでくれ。そこまでしたら修了証書にも有り難みが生まれると思いますので

すぐWindows Boot Loader を吹き飛ばす

ラップトップにしてもデスクトップにしても、そんなにたくさんマシンを持っているわけではないので一つのラップトップを常用しているわけです。基本的にはLinux/Unixの世界で生きて行きたいんだけど(今は Arch Linux) Office とか VS とか HSP とかを使いたくなるとき、あるいはゲームをしたいときなんかはやはり Windows に頼らざるを得ないわけで、結果としてデュアルブートをやっています。

デュアルブートの話をすると必ずといってよいほど、VirtualBoxVMWareでの仮想化やWSLを持ち出されるのですが、私のマシンはメモリもそんなにないし*1、それよりも HDD だしで仮想化ではちょっと遅すぎるかなという感じだし、 WSL がしたいわけじゃなくて LSW がしたいわけです。Windows で i3WM が動くなら考える。


そのうえ、私はよく環境をぶち壊します。多くの理由としては「起動が遅くなってきた気がするからお掃除」です。こういうときArchを再インストールするんですが*2、必ずといってよいほど Windowsブートローダを吹き飛ばしてWindowsを起動できなくなります。今日はこれの復旧の話。

grub で Arch linuxWindows の両方を起動できるようになることを目標にしてます。

以下に手順を箇条書き。いろんなサイトの情報を集めたやつです。ちなみに私のマシンは UEFI 対応の64bit ラップトップで、GPT で *** されています*3

  1. 他のWindowsマシンでWindowsのインストールUSBを作ります。ISOを落としてきてddとかで焼いたやつでうまく行ったためしがない。
  2. Windowsを起動するとアップグレードするかクリーンインストールするか的な Yes/No ダイアログが出ますがクリーンインストールの方を選択します(おそらく「いいえ」の方)。
  3. 「コンピュータの修復」的な選択肢が左下に生えるのでこれをクリックします。「復旧」っぽい選択肢に進むと「コマンドプロンプト」が現れるのでこれをやります。
  4. こんな感じのコマンドで
> diskpart
DISK> list vol
いろいろ出る。私はEFIのボリュームは 100MB ということにしているのでそれを目印にしています。
DISK> sel vol 4
DISK> assign letter=G:    # かぶらなければ何でもいい
DISK> exit
> cd /d G:\EFI\  # 本来はここに Microsoft ってディレクトリがあるが当然ない
> bootrec /Rebuildbcd
> bcdboot D:\Windows /s G: /f ALL  /l ja-JP

bootrec にはそれなりに時間がかかり、 G:\EFI\Microsoft\Boot\BCD が作られます。これに満足して終わってはいけない。次の bcdboot もしっかり実行しておいてください。当然、これの引数のドライブレターは各自の環境に合わせること。

  1. exit を何回かやってPCの電源を切り、つけなおします。多分Windowsが調子にのってWindows Boot loader がデフォルトで起動されるようになってしまったので、起動オプションから 「EFIファイルで起動」みたいなのを見つけてきて grub のファイルから Arch を起動します。
  2. arch で sudo os-prober として Windows が見つかることを確認したら、 grub の設定をもう一回やるというか、つまり↓をやります。
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg

例によって --efi-directory なんかは各自の設定に合わせてください。ここまでやると grub のエントリに Windows Boot Loader が追加されるはずです。

  1. PCを再起動して BIOS/UEFI の設定で Windows Boot Loader よりも grub が優先的に起動されるようにします。

ここまでできたら多分OK、ひとしごとおしまい。

*1:8GBです。今の人権ラインは16GBだな?

*2:他に良い方法があれば教えてください

*3:ここに入る文字列がわからない

arch linux インストールしたときの覚書

本当にメモなので人がみて面白いものではない。


xorg を入れておく。これはなんだかんだで使うので入れればいいでしょ

i3-wm i3-status も入れる

firefox を入れる

インターネット情報を利用して yay をいれる。 yaourt の時代は終わった。違いがわからないので yaourt でもよい。

fcitx-mozc をいれるんだけどこれだけ入れても日本語入力はうまく動かないので fcitx-im パッケージをいれる。

broadcom-wl を入れる。僕のマシンではこれがないと wifi できないので必須。

あとは好きにカスタマイズできそう。 環境を再現したいなら https://github.com/theoldmoon0602/dotfiles が動くかもしれないしそうでもないかもしれない。

nvim いれる。 xclip いる。結局 pulseaudio もつかう

高専カンファレンス in 東京に参加しました

 まず僕のような田舎者は東京の大きな高専カンファレンスに参加する機会などないのですが、今回は最高の高専カンファレンスで交通費支援が出た*1ので参加してきました。参加した動機は交通費が出るのと藍月要先生が登壇されるとの情報があったのとです。

 以下には印象に残った発表やその他を書きます。


 どれもこれも濃い発表ばかりだったんですが、午前中はとちくじさんの Interpreting Deep Learning from a Biological Perspective が最高でした。要するに機械学習モデルと脳みその仕組みを相互に検証しようみたいな話*2です。ご本人がすごく楽しそうにお話されていたので印象に残っているのはもちろんのこと、どうやら僕は興味がありそうな分野でかつ、まるで自分では理解できない話が好きっぽいです。かなりアカデミックな(でも高専カンファレンス用に難しくなさを優先していたと思う)感じの発表だったのですが楽しく拝聴させていただきました。もっときいていたい、本気の発表がみたい発表でした。


 ↑は午前中最後の発表だったのでお昼になるんですが、お昼も提供されて神 :pray: でした。僕はサンドイッチを食べましたが結構ボリュームがありましたがぱくぱく食べました。  弊学からは交通費支援を利用した現役生が6, 7人来ていたのですがそのうちの5年生と固まって食べていたのは交流的な視点上よくなかったです(でも他にどうしようもないんです、そういう人間なので)。


お昼の時間を持て余しつつも午後になり、ここはお目当ての藍月要先生*3 の発表と 学校の先輩であり何度もお世話になっている yanoshi さんの発表が重なっていてどちらを見るか大変悩む選択を強いられました。他の方々もそうだと思います。運営残酷では??? 仕方ないですね。

 結局藍月要先生の発表を拝聴しました(決意は固かったので)。藍月先生の発表はとにかくヤバイという言葉でお伝えするのが一番という感じのぶちこわれ発表でしたが、ストーリーがあり藍月先生がどのように考えて世界を作っているのかという部分が垣間見れて一読者として歓喜以外の何もありませんでした。

 この藍月先生にこのあとの休憩で1巻にサインを頂き*4、さらに当日着ていた セキュリティキャンプのTシャツにサインを頂き、握手までしてもらいました。私のミーハーな部分が見られて面白かったです。アイドルやなんかにはまる人間の気持ちがわかりますね。これは最高の体験です。いや、藍月先生の著書を読んでいるときのほうが幸福度は高いが……。


他にもたくさん発表をきいたし面白かったんですが(在宅ワークではじめる生物学研究なんかも面白かったです)、とにかくこの二つの発表と体験が強く印象に残っていますのでこれらについて触れるに留めさせいただきます。


途中休憩を挟んだりしながら*5このように会は進んで懇親会です。この頃には結構消耗していて野菜類を食べたり壁の花になったりしていました。無花果がおいしかった。

2時間ほどある懇親会の殆どをひたすら立って過ごしていて、途中で以前お世話になった*6DMMの人事の方にお声掛けいただくなどのイベントはありましたが、概ね平穏でした。

これにてカンファレンスは閉会。お片付けなどがありましたが人々が積極性を持って動いているのですごかったです。


その後 2次会的な感じで、弊学のOBの方々に現役生7人程度で居酒屋に連れて行ってもらいさまざまな楽しいお語りをしました。私は成人しているが烏龍茶を頼むなどの社会性を発揮しつつ*7、ほとんど黙っていたのにHUGっと!プリキュアの話だけは嬉々としてする人間になってしまった。ところで今日のプリキュアも良かったですね。


などが本日の感想になります。都合の良い欲求としてはいろんな方とおしゃべりして友達になりたいとかあったんですが人間性などの観点からうまくいかず残念です。発表者になると良いのでしょうがそれもなんだか恐れ多いような気持ちになっています。LTくらいの発表をどこかでやりたいな。

日記でした。

*1:Google Form に新幹線の代金書いたら全額出た。スポンサー企業の方、カンパしてくださった大人の方々、運営の皆様ありがとうございます

*2:初心者がざっくりとまとめようとするとこうなる

*3:「俺達は異世界に行ったらまず真っ先に物理法則を確認する」という高専生が異世界に行って高専生するラノベを書かれており端的に表現して面白いラノベです

*4:当然2, 3巻も持ってきていましたが謎の遠慮をした

*5:パソコンも古くなってきてバッテリーがもたないので休憩時間に充電をしたりしていました。発表をきいているとき足元に電源がある感じだったので開けてもらえると嬉しかったです

*6:https://furutsuki.hatenablog.com/entry/2017/09/02/163049

*7:おビールより高いんですが面白い

明石高専IT勉強会CTFにちょっと出た

言い訳させてほしいんだけどちょっとしか出られてないので仕方ない。

明石高専というすごい高専の人たちが一般向けにCTFを開くと言うので参加しました。takoyaki (本当はzer0pts をチーム名にしてたけどチームidのtakoyaki が通ってしまった)という一人チームで出て、自明を数問とおして 810 pt で得点26チーム中13位でした。

registrationでまごついたりCTF環境を確保できなくて困ったりしていたので仕方ない。とにかく解けた問題のwriteupをします

santy check [10pt]

やるだけ

Don't Feel Look [Bianry, 100pt]

画像にフラグが書いてあるがこういうのは嘘なので strings する

easyBIOS [Binary, 300pt]

512バイトピッタリのbinaryが渡される。strings しても情報なし。fileコマンド打つと Boot Record と言われる。そんな気はしていた。 qemu をめっちゃ遅い回線で落としてきて qemu-system-i386 hoge するとフラグを吐く

Intro to AES [Crypto 100]

rubyでAES暗号化してるコードと出力をもらう。すべてソースコードにかいてあるので、 enctypt のところを decrypt になおして動かすだけ。ruby は デフォルトでは入ってないので apt-get install -y ruby すること。

Substitution [Crypto, 100]

単一換字暗号 solver に突っ込むだけ

leaking [Web, 100]

よくわからないけど確か cookie かなにかにbase64文字列があるのでデコードする。

itadakimasu [Network, 100]

HTTPのパケットをひたすら眺めてそれっぽい文字列を urldecode すると xxd の出力があるので vim で整形して勝ち

解けたけど submit 失敗 Try, it! [Web, Crypto, 150]

文字列を入れるとエンコードされる。2文字ずつで出力が変わることがわかったので文字の長さを見ると 32 だったし md5 でしょとあたりをつけて 、フラグっぽいエンコードを32文字ごとに分けて crack、出力をtr で整形してflag, 1min たりなかった。

感想

短い時間しか参加できなかったけど面白かった。CTFの問題を解く面白さ、わからない面白さなどを感じることができた。多分運営の人は運営の面白さとか作問の面白さを感じていたと思う。また参加したい。ありがとう、ありがとう。

今の所判明しているシェル芸botの仕様

随時更新していくつもりです。憶えてればね。

わかんないよ

ここにすべてを置いてきた

github.com

基本仕様

#シェル芸 #危険シェル芸 というタグのツイート(以下シェル芸ツイート)をシェルスクリプトとして解釈し、標準出力を140字程度に切り詰めて返す。なお、このとき @minyoruminyon という先頭のメンションとトリガーとなっているタグは削除された状態で解釈される。

ときどきこれ以外のハッシュタグもサポートしていて、いまは #ゆるシェル がそうだし昔は #新春シェル芸 がそうだった。

運営は私 @theoldmoon0602 だけど、いまは @ryuichiueda 先生にサーバ借りてそちらで動かしています。ありがたい……。

運営が私なので欲しいコマンドとか機能とかがあったら伝えてくれると実装したい。とうぜん Pull-req でもよい。

制限

当然いろんな制限がある。

  • 一回のシェル芸が終わると環境がリセットされるとか
  • ネットワークインターフェースは loopback しかもってない
  • 実行時間は最大5秒(時々変わるけど、これ以上長くすることはあまりない)
  • シェルスクリプトとして返すステータスコードが0でないとだめ(確かそうだった)

シェル芸チェーン

2018年4月ごろ登場(多分)

シェル芸ツイートが引用ツイートの形であるとき、その引用ツイートの内容に続けて、シェル芸ツイートの内容を含めたものをシェルスクリプトとする。何回も連鎖ができる。

以下例

画像ツイート

2018-7-13 登場

/images に画像ファイルをおくとその画像をツイートに付与する。一枚だけしか対応してない。

以下例

@shellgeibot

@shellgeibot という シェル芸bot よりもそれらしいアカウントが存在する。もともとはシェル芸botへの新機能の追加時にデバッグ用途で取得したアカウントだったんですが、適当な運用をしていたら鍵アカウントなのに follow request が来てしまって、いい機会なので公開したという経緯がある。

現在(2018/08/16)は twitter の UserStreams 廃止に伴って statuses/filter を用いた新しい(?) シェル芸bot のテストアカウントになっている (https://github.com/theoldmoon0602/ShellGeiBot/tree/a3f35b47bd51075c56c3b08f7933258f89d98827)。 こちらもフォローしてフォローバックされていることが前提条件で、その上で #シェル芸 または #shellgei_test タグ付随のツイートをすることで発火する。

本当にどうでもいい日記みたいなことだけど、 この機能を搭載した ShellGeiBot を 手元の arch マシンでビルドしたところ、 シェル芸botが動いている ubuntu では動かないELFができてしまった(GLIBC_2.28 が ubuntu にはまだ来てなくて、 arch ではこっちに依存してしまったのが問題らしい)。 こういうところで道を間違えるのが得意なので、 シェル芸botのビルドのために CircleCI を導入した。

CHANGELOG.txt

2018-08-16 statuses/filter に対応した filter.json ブランチを作った。 @shellgeibot で運用している 2018-07-13 画像付きツイートの機能を追加 忘れた

あと

なんか忘れていることがあれば教えてください

プログラミング言語を作りました

元記事

のばなしうさぎ

このように、お友達のいらいざくんが「cottonなる言語を作ったよ〜見て〜」と言って自慢してきて、「すげーーっ!!」となったので、これは負けていられないと思い、 silk というプログラミング言語を作りました。

GitHub - theoldmoon0602/silk

僕も勉強がてら Haskell + LLVM で処理系書いてみるか、と思っていたですが、 cotton のソースを見たところ、レキサもパーサもまるで読めなかったので心折られて、OCaml + LLVM で書くことにしました。 silk 自体の目標としては、 cotton の追従です。 残念ながら全く同じというわけではないのですが。

ところで silk の何よりイケイケなポイントはその小ささで、試しに cat *ml* | wc -l としたら 284 と出ました。いろんなものを省いた結果ですね。

ざっくりした処理の流れ

  • Tokenize
  • Parse
  • α変換
  • 型検査
  • K正規化
  • Closure変換
  • LLVM IR 生成

以上です、 cotton はLLVM builderを使わずに手でIRを吐いていたようですが、ちゃんと cotton のソースコードを読まなかったので、 silk では LLVMOCaml バインドを利用しています。なので多分速度には問題がないです。

データ型はInt32しかない上に関数はオブジェクトとして認めていないので型の概念が今は必要ないので型検査がありません。α変換とか Closure変換とかは必要になったら入れようと思っていたのですが気がついたら cotton と同じところまでは動いたのでまだありません。*1

LLVMは初めて触りましたが関数のインターフェースが勉強になります。どの関数がどんな役割の値を返すのか、といったことはコード生成を自分で書こうとしたらいくらでも悩めるところだったと思うので。一方で、 llbuilder 型の扱いはちょっと気に食わない感じがします。多分これ引数が変更されてますよね?*2 違いますかね。違ったらまるでわからん。

LLVMに任せるとメモリレジスタの管理が不要になるのは本当に偉大ですね。

使ったライブラリとか

いらいざが Lexer とか Parser Generatorを使っていたのでこちらも定番の ocamllex menhir 体制で望みました。レキサパーサを書かなくて良くなるだけでものすごく開発が楽になりますね。

ビルドは OMake を使っていましたが、作業環境その2でいくら menhir を入れてもないと怒られる事案が発生して、回避のために build.sh というファイルに ocamlbuild を用いたビルドスクリプトも書きました。

みていたものとか

どんな構文にするかは cotton ベースで決めていました。LLVM まわりは

https://llvm.moe/ocaml/Llvm.html

Blox/codegen.ml at master · sgtb3/Blox · GitHub

cminus/codegen.ml at master · douggard/cminus · GitHub

を引っ張ってきたりです。なんでこいつら関数の引数に func なんてものがあるんだろうと思っていたのですが、 append_block の引数に必要だったんですよね、なんでこんなことになってるんだろうというのはよくわからないまま、 silk でも eval_exp の引数には func がいます。

おわりに

cotton が更新されたら silk も更新していきたいと思っています。OCaml way も LLVM way もまるで知らないのでもう少し綺麗に書きたいとも思っています。

モチベーションを与えてくれたいらいざと cotton に感謝を込めて。

*1:このあたりってLLVMがやってくれているということなんですか、それともこの程度のプログラムならひつようないということですか

*2:OCamlってそういうことできましたっけ?