スロークッカーとかいうぐう有能調理器具wwwwwwww

はじめに

プログラマツイッターユーザの間では、誕生日とか退職とか就職とか引っ越しとか結婚とかそういう節目のタイミングでアマゾンの欲しいものリストを公開しプレゼントを請うという文化が存在します。不肖私もこのたび 2月13日に無事31歳の誕生日を迎えることとなりまして、浅ましくも欲しいものリストを公開したところ、ハリボのグミが1.4kgのほか、ウイスキーが約1.5リットル、KORGのクリップチューナー、アイカツのCD、さらには大物としてスロークッカーという調理器具を友人各位からいただきました。本当に友人に恵まれていて感謝以外の感情がない。各位におかれましては必ず誕生日にwishlistを私宛に送るように。恩に報いる所存です。

f:id:nkgt_chkonk:20150214125536j:plain

amazonの箱のチョイスがおかしい様子です

f:id:nkgt_chkonk:20150214131542j:plain

ゴールデンベアとハッピーコーラです

f:id:nkgt_chkonk:20150214125956j:plain

日本が誇るウイスキー、白州です。

f:id:nkgt_chkonk:20150214181156j:plain

Signalize!とカレンダーガールが収録されています。カレンダーガールは名曲中の名曲です。

f:id:nkgt_chkonk:20150215172410j:plain

癖のあるウイスキー好きにとっての定番、ラフロイグです。

f:id:nkgt_chkonk:20150215172348j:plain

スロークッカーだ!!!!!!!!!!!!!!!!!!!!

ところで、このスロークッカーという調理器具(写真ではダンボールに入ってるけど)はどういうものかというと、簡単にいうと「電気の力で弱火状態をずーっと保持してくれる君」なのです。ものによってはタイマー付きで、時間が来ると勝手に電源切ってくれます。

これ、いろいろとうれしいんですよ。ガスの力で弱火を保持しようと思うと、結局それって火を扱ってるのでそうそう簡単にキッチンを離れることができません。たまに火の様子見に行ったりしないとだめだし。あと、コンロを一口占領しちゃうのも困りものですよね。とくに「弱火でじっくり」系の料理ってすごく長い時間コンロを占領しちゃうので、なにかと困ります。そこで考え付くのが低温調理の雄としてよく挙げられる炊飯器ですが、炊飯器も長時間占領されちゃうとお米が炊けないという問題があります。そこでスロークッカーの出番になるわけです。スロークッカーによってわたしたちは、コンロのことも炊飯器のことも火の元のことも気にせず煮込み料理を遂行する自由を手にいれるのです。

誕生日にスロークッカーをいただいたのが本当に嬉しかったので、急遽スペアリブを買ってきて、こいつを煮込んでみることにしました。以下その工程であります。

スペアリブをホッロホロにしてやろう

f:id:nkgt_chkonk:20150216004144j:plain

はい。スペアリブを買ってきました。ちょっとお安くなっていてお得ですね。新潟市に特有のスーパーマーケットである清水フードのマークが見えて住所が特定されかねない気がしますが気にせずいきます。

f:id:nkgt_chkonk:20150216004325j:plain

表面に焼き色をつけるという工程を行っているところです。

f:id:nkgt_chkonk:20150216004928j:plain

肉を煮込むときにはまず普通に茹でてアクを取り除きましょう。

f:id:nkgt_chkonk:20150216010015j:plain

こちらはアクを取り除いたあと茹で汁を捨て、煮汁とともにスロークッカーに投入した様子です。煮汁は酒、砂糖、みりん、醤油、しょうがを適当にお湯にぶっこんだものです。写真を見るとわかるかと思いますが、パーソナルコンピュータで仕事の進捗を出していると、隣でスロークッカーが自動的に調理の進捗を出してくれるというCI(継続的インテグレーション)体制を敷くことが可能となっております。(PCとの距離が近すぎて熱が危なかったのでこのあとちょっと場所を移動しました)

f:id:nkgt_chkonk:20150216030548j:plain

スロークッカーが自動的に肉をビルドしている様子です。

f:id:nkgt_chkonk:20150216053502j:plain

ビルドが無事成功した様子です。

f:id:nkgt_chkonk:20150216053526j:plain

箸を入れたら、全く力を入れていないにもかかわらず骨から肉が分離されました。こういうのを骨と肉の疎結合と言います。プログラムの設計において非常に重要な概念ですね。

f:id:nkgt_chkonk:20150216053533j:plain

こちらが成果物です。控えめに言って最高にうまい。

前回の「タイ風豚の角煮」をこれで作るのも良さそう。

まとめ

  • 誕生日にアマゾンの欲しいものリスト公開したらみんなの愛が最高にうれしかった
  • なんとそのなかにスロークッカーとかいう有能すぎる調理器具が!!
  • 試しにスペアリブを煮てみました。
  • スロークッカーはCIツールである
  • 骨と肉の疎結合を実現することも可能である。

誕生日プレゼントをくださったみなさん、ほんとうにありがとうございました。

タイ風角煮考

ここ最近角煮が話題かどうか知りませんが角煮です。

角煮ですが、うまいし簡単に作れるのですが時間がかかります。とはいえ、タイ風角煮なら雑に作ってもうまいという知見があるのでシェアします。

まず、角煮が硬くなるのは調味料で煮る、そのタイミングです。このタイ風角煮はその工程をまるっと無視して、タイ風のたれをかけて食べるものなので、雑に作ってもほろほろの角煮が出来上がります。ただし圧力鍋は必須です。圧力鍋は角煮に限らず煮込み料理がはかどりまくるのでないひとはこの機会に買いましょう。

材料は以下のとおりです。

下ごしらえ

豚バラブロックは適当なサイズに切っておきます。しょうがは皮をむいて(皮は捨てない)、すりおろしておきます。みじん切りでもいいです。

豚バラを雑に圧力鍋で煮る

豚バラブロックを適当なサイズに切って、しょうがの皮の部分とネギと一緒に圧力鍋で雑に煮ます。私はいつも時間は適当にやってますが適当な時間煮込んだだけでも十分うまいです。

別の鍋でキャベツを茹でる

豚バラは結構油がしつこいので、キャベツと一緒にたべるといいでしょう。キャベツは千切りでもいいんですけど、この豚の角煮の場合茹でた方が合う気がします。

タイ風たれを作る

小鍋に、トムヤムクンのもとを適当な量(わたしはいつも計ってないです)と、豚を煮た煮汁をおたま一杯分くらいと、すりおろしたしょうが、ナンプラー、レモン汁を入れて煮詰めます。お好みでパクチーも入れるとよいでしょう。ここの味は好みの問題なんで、それぞれ好きな量入れれば良いです。わたしはいつも味を見ながら雑に投入してます。

トムヤムクンのもとですが、わたしは高円寺北口にある「東京屋」とかいう怪しげな店で買った瓶づめのやつをいつも使っています。

この店です https://www.google.co.jp/maps/@35.705495,139.649401,3a,75y,328.63h,99.9t/data=!3m4!1e1!3m2!1sHr6DitUq-jbcCeGRp9FAJw!2e0

このタレはけっこう万能で、どんなものでもタイ風の味付けにできる優れものなので、トムヤムクンを作らないとしてもトムヤムクンのもとを常備しておくと良いでしょう。いつでも手軽にタイっぽい味が楽しめるのでおすすめです。

盛り付ける

茹でたキャベツを持ったお皿に、味のついていない豚の角煮を盛り、その上からたれをこれでもかというくらいにかけます。その上にお好みでパクチーを散らして完成。

雑に作ってもいつもおいしくできるし、妻や友人たちの評判も良いし、ごちそう感のあるメニューですので、ぜひ大量に作って家族や友人たちと大量に食べてください。

@sasaplus1 さんの神対応によって process-bookがwebで読みやすくなりました

process-book ってなに

この文書はなんですか?

この文書は*nix系のシステムにおけるプロセスやシグナルなどについて説明することを目的に書かれました。「プロセスとかよくわかってないからちゃんと知りたいな」みたいなひとたちが想定読者です。

書いているあいだは gist で管理されていたのですが、ボリュームが大きくなったので github で管理するように変えました。

というやつです。結構頑張って書いたんですけど、その結果結構いろんな人に褒めていただけて、本当にありがたいなという感じです。ありがとうございます、ありがとうございます。

実は大きなトピックとして「環境変数」についてまったく触れられてなくて、そこは「あちゃー」って感じなんですけど、いつか気が向いたら追記するかもしれません。気が向かなかったら追記しないので、気が向くといいなと思っています。

どこで読めるの

process-book

どういう経緯なの

ちょっと前に「gh-pagesに対応したブランチ作ったから見て」って @sasaplus1 さんから言われてて、「おっありがたい、あとでみよーっと」って思ってたらそのまま忘却の彼方にアレしてしまっていたのですが、今回 Github の issue にコメントをいただいたことで思い出して、それをそのまま、ほんとにそのまま取り込ませていただいたという形です。

ありがとうございました & 放置しててすみませんでした。めっちゃ神対応な感じだったんで今度 :beer: おごります……。

swift の protocol の解決が Playground 上でうまくいかないっぽい話

えー。尊敬するiOSアプリケーションプログラマのひとりであるdictavさんがこういうものを上げておりました。

Logger for Swift

これを見て最初に思ったのが、「static var とかセオリーで考えたら「ねーよ」っていう感じだけど、この場合に限ってはうまく作用してておもしろいな」でした。

その次に思ったのが、「あっでも description に関しては var である必要なくない?」でした。というのも、この desciption は固定でいいはずだから。

しかし、この var description は、そもそも Printable プロトコル(ジャバで言う所のinterfaceみたいなもんや)が要求するするものであるので、そもそも「description は let でよくない?」というのは的外れな考えですね。

というわけで、Printable プロトコルについて調べてみましょう。

Printable プロトコルとは

Swift Standard Library Reference: Printable

ここに全部書いてある。要するにそのクラスのインスタンスを文字列化するときにどういう形で文字列化するかっていうのを var description というところに定義しておいてね、っていうプロトコルです。

試してみる

で、これをみて私はまず「enum が Printable プロトコル実装できるのおもしろいな〜」って思って、Xcode の Playground でこういうふうに書いてみたんですね。

http://i.gyazo.com/70dda2bb1299d383cae6dcf8ac961616.png

あっあれーーーーー!?println(Nyan.Nyaa.description)はちゃんと "にゃー" を返すのにprintln(Nyan.Nyaa)が"(Enum Value)"を返す!?!?!?!?!?

というのを見て「なにこれどういうこと」と困惑していたら、Twitterから「これアンドキュメンテドだけど、Xcodeでちゃんとプロジェクト作ってビルドするとprintln(Nyan.Nyaa)も"にゃー"だよ」という情報を得ました。そこで私は「あれっこれ(つまり enum の この挙動)って要するに「未定義」な振る舞いなんじゃないの」って思ってしまったんですね。疑問に思ったら一次情報に当たるのがプログラマのたしなみです。仕様上の定義を探す旅に出ましょう。

まずはレキシカルな仕様を調べる

まずは言語のLexicalな仕様を当たりましょう。これは要するに「そのプログラムを文字列的(形式言語的)に解釈したときにただしいプログラムとして受理できるかどうか」を調べることにあたります。

The Swift Programming Language: Lexical Structure

Lexicalな仕様がきちんと公開されていました。

この中で関係ありそうなのは The Swift Programming Language: Declarationsenum-declaration の部分で、抜粋すると

http://i.gyazo.com/92923d52b9aeaadfe2b0137341031b64.png

とあります。enum-declaration の部分をみると、enumの定義が受理する文字列のルールはふたつあるようです。

今の関心は

enum Nyan : Printable {
    case Nyaa, Mew
    var description: String {
        switch self {
        case .Nyaa: return "にゃー"
        case .Mew: return "みゅー"
        }
    }
}

なので、多分 attributes と access_level-modifier は(optionalだし)関係ないだろうなとあたりをつけ、union-style-enum­ が受理する文字列や ­raw-value-style-enum­ が受理する文字列をさらに見ていきます。swift をちょっと知ってると、上に見た文法はraw-value-styleではないとわかるので、union-value-style-enumにあたりをつけてみていきましょう。   まず、union-value-style-enum は 以下のルールを受理します。

enum(固定文字列) ­enum-name­ generic-parameter-clause(­opt) ­type-inheritance-clause(­opt) ­{ ­union-style-enum-members­(opt)­}

ここから、Nyanの定義のうち "Nyan" が "enum-name" であり ":Printable" が ­type-inheritance-clause であることが推測できます。 深追いはしませんが enum-name は Nyan を受理するし type-inheritance-clause は " : Printable" を受理することが同様に深追いしていくとわかります。

さて、問題は ­union-style-enum-members­(opt)­ です。こいつが

    case Nyaa, Mew
    var description: String {
        switch self {
        case .Nyaa: return "にゃー"
        case .Mew: return "みゅー"
        }
    }

を受理するかどうがが今一番の関心ですが、union-style-enum-membersunion-style-enum-member union-style-enum-members(opt)となっており、union-style-enum-member複数集まったものだと見て取れます。で、union-style-enum-member は declaration | union-style-enum-case-clause­ とあり、今回の例で言えば case Nyaa, Mewunion-style-enum-case-clause­にあたり、var destription 以下がdeclaration­ に当たることが推測できます。で、実際にこいつらをさらに追ってみると、上記のようなNyan enumの定義がレキシカルには受理されるべきものであるということが確認できます(実際に追ってみてください)。

さて、これでこれが「レキシカルには受理されるべきものだ」ということが確認できました。

次は意味を調べる

では、次は enum における computed property (var varname: Type { codeblock } みたいなやつはcomputed property と呼ばれる)が言語仕様上どういう意味を持つのかってことを見ていく段階ですね。探すと、出て来ました。

The Swift Programming Language: Enumerations

Enumerations in Swift are first-class types in their own right. They adopt many features traditionally supported only by classes, such as computed properties to provide additional information about the enumeration’s current value, and instance methods to provide functionality related to the values the enumeration represents.

なるほど、computed property は普通のクラスみたいに使えるよ、と書いてありますね。ということは、この挙動は別に未定義なわけではなくて、Xcodeでプロジェクト作ってビルドしたときの挙動が「swiftの仕様上ただしい挙動である」と言えそうです。

じゃあなんでPlayground上では仕様と異なる動きをするの?

これ、どうやら Playground が依存している LLDB 上の制限っぽいです。たとえば、以下のような(enumと関係ない)例を見てみてください。

http://i.gyazo.com/05d24ffaaeb3428bb37fc25f7961c230.png

普通にPrintableを実装した Nyan クラスのインスタンスが println に対応していません。そして lldb のなんかの値が吐かれています。つまり、多分これって、静的に解決すべき 「Nyan is a Printable」な関係がLLDBの制限によって静的に解決できなくて、そのせいでうまく動いてない、ということなんでしょうね(仮説です)。

この仮説の正否と、なぜ LLDB 上で Printable が解決できないかについてはおそらく dictav さんがブログで解明してくれるでしょう!期待して全裸待機!!!!

Niigata.pm tech talk を開催しました #niigatapm

去る 12/13 、JPAさんの支援により Songmu さんを講師にお迎えして、Niigata.pm tech talk を開催しました。

内容

発表内容は、以下のような感じでした。

hayajoさん 「Dockerを使った Perl アプリケーション開発」

タイトルの通り、Dockerを利用して Perl のアプリケーションを開発するためのノウハウについて発表していただきました。実際にテスト用の環境で業務で Docker を利用されているらしく、さらなる知見を今後も発表していただけそうですね。レンサバを提供するという業務上、FTPの利用をやめることができず、そこがボトルネックとなってDockerをなかなか本番投入できない、という話は「なるほどな〜」という感じでした。資料はこちら Dockerを使ったPerlアプリケーション開発 | ストーリーボード - STORYBOARDS

moznionさん 「空の青とパーザーの気持ち」

最近 Parser ばかり書いているという moznion さん。実際にいくつもパーサを書いたことによって得られた知見を発表してくれました。「みなさんにもいつかパーザ期ってのが来るんですよ」「拳銃は便利、一丁欲しい」「心を強く持て」などの名言がたくさん飛び出す中、机上の空論ではない「自分の体験として得られた知見」をたくさん発表してくれました。資料のアップが待たれる。

neko_gata_s 「ScalaPerl と 関数」

わたしです。Scalaの関数型としての側面を、Perlのコードを用いながら説明するという内容です。解説はほとんど口頭で行ったため、資料にはコードしか書いていないので、資料だけアップしても意味がわからんという感じになっているので、資料をアップする予定はありません。

masaru_b_clさん 「OWINについて」

.NET における PSGI であるところの OWIN についての発表をしていただきました。OWINについての説明の間、twitterのタイムラインが「これPSGIだ」「完全にPSGI」「PSGIじゃん」で埋まったのはおもしろかったです。OWIN によってIISへの依存が断ち切られたことによって、最近なにかと話題の たプラットフォームで .NET のサーバーサイドアプリケーションが実際に動くというのをデモされていて、heroku上で.NETアプリケーションが動いているのはけっこう「おお!」という感じでした。ただ、OWINは .NET5 では消えさり、MSが用意する新しい仕組みに置き換えられるとのこと(しかし概念はまったく変わらない)で、ちょっとした悲しみもありつつ、「はやくこないかな Mac 向け .NET core」という気持ちになる発表でしたね。あと async await めっちゃ便利そうだった。資料はこちらから OWINについて #niigatapm #nds39 で発表してきました #aspnetjp | be free

ritoさん 「JSON Web Tokenについて」

JSON Web Token について。名前は知ってるけど具体的にはよく知らない、くらいの存在であるJSON Web Tokenについて発表してくれました。一言で言うと二者間で署名付きのメッセージをやりとりするための仕様とのことで、シンプルな仕様であるため実装が用意であり、なおかつ構造化されたデータを署名付きで送れるので、悪意あるリクエストと正しいリクエストを比較的前段(アプリケーションサーバーとか)で弾くことができて、バックエンドへの負荷が減らせるという感じでかなり便利に使えるなこれは、という感じでした。eyJ!eyJ! 資料はこちらから About_JWT_at_NDS_39_Niigata_pm // Speaker Deck

itosouplusさん 「Aircrack-ngによるwifiのハッキング手法とwepのアリゴリズムと脆弱性について」

WEPキーの脆弱性についてWEPの暗号化の仕組みから解説してくれる発表でした。実際にWEPキーの解析が一瞬で終わる様もデモしていました。今回が初発表とのことでだいぶ緊張されていたようですが、「WEPはなんかヤバいらしいよ」くらいの理解であるひとが多いなか、弱いIVが発見されたせいでキーの一部が簡単に割れてしまうことが納得できたし、実際にWEPを利用する怖さを実感できるとても良い発表だったように思います。資料はどこかにあるかな(教えてください)

Songmuさん 「私を育ててくれたN個のCPANモジュールたち」

トリを飾るは Songmu さん。現在第一線で Perl ハッカーとして活躍されている Songmu さんが、自分が関わってきた CPAN モジュールとともに自分がどうやってPerlハッカーになっていったのかを振り返る発表でした。静かながらも熱のこもった発表で、聴いているひとたちが「かっこいいな、自分もこうやってコミュニティに自然に貢献できるハッカーになりたいな」と思えるような感じでした。発表資料はこちら 私を育ててくれたN個のCPANモジュール達

その他の話

正直2次会以降あんまり覚えてない!けど翌日新幹線が止まってしまい東京からわざわざ来てくださった方々が帰宅困難に!という1幕があり、「あっなんかっあっスンマセンあっうっ」ってなりました。

その他レポート

わたしが見つけ次第貼っていきます。「書いたんだけど!」みたいなひとは @neko_gata_s までメンションください!ブログを書くまでがNiigata.pmですよ!

OWINについて #niigatapm #nds39 で発表してきました #aspnetjp | be free

Niigata .pm tech talk に参加してきました #niigatapm #nds39 | civic site

ドラ娘の話

なんか盛り上がってるけど、けっこう前からわたしもよくドラ娘という風潮に twitter とかで言及してたのでこのタイミングでブログで一度書いておく。

  • ドラ娘という風潮は個人的には不快であるが、これはどちらかというと私個人の嗜好に基づくものなので、「私は不快である」というのは好悪の問題であり善悪の問題ではないのでそれを理由に「悪いものだ」と言うつもりはない。
  • ポリティカリーコレクトかどうかで言ったら完全にアウトだとは思う
  • ただ、すべてのカンファレンスが政治的な正しさを持つべきだとも思わない。
  • つまり、「うちのカンファレンスはポリティカリーコレクトとかクソくらえなんで」っていうカンファレンスがあってもいいと思うし、それに対しておのおのがおのおのの思うように行動すれば良い。

というのが私の基本的なスタンスです。

追加で言っておきたいことが一点あって、「ドラ娘やってるほうだって楽しんでやってるんだから外野がどうこう言うことじゃねーだろ」みたいな意見は最悪だと思っています。カンファレンスの参加者や発表者から不快感や違和感が表明されているのに対して「外野は黙ってろ」っていうのはどうなんですかね。参加者や発表者がそのカンファレンスのあり方についてする発言を "外野の発言" とするスタンスに対しては「それは違うんじゃねーの」って強く思いますね。「ドラ娘最高!」っていう参加者も「あれはないと思う」っていう参加者もどっちも「外野」ではないよね。

TRADITIONAL MUSIC THEORY FOR CONTEMPORARY MUSICIANS を読んだ

一般に流通してない本なんだけど、下のリンクから買える。

【販売ページ】Traditional Music Theory For Contemporary Musicians | Music Theory Workshop Japan

公開されてる分は全部読んだ。

著者が自分でも言ってるんだけど、「猿でもわかる!!音楽理論」みたいなタイプのやつだと演奏や作曲に活かすことができないくらいレベルが低くて役に立たないし、かといって芸大和声みたいなやつだとそれを役立たせるまでの道のりが遠すぎる & ポピュラーミュージックに応用するまでの道のりが遠すぎるというのがあって、なかなか「演奏や作曲の役に立ちやすい音楽理論の本」ってのは今までなかった印象がある。この本はそのちょうど間を埋めるような立ち位置の本で、バンドマンやDTMerにとってはかなり参考になるのではないかと思った。

ただ、結構ストイックに進んでいくタイプの本だし、たまに「んっこれって説明あったかな」「あーちょっと戻るとたしかに書いてあるね」みたいな感じで、「まだ音楽理論のことをあまり知らない人」にとって、「これ一冊で全部わかる!」となるにはちょっと難易度結構キビシいかもしれないな〜という印象も受けた。

まとめると、もしわたしが「ポピュラーミュージック音楽理論教室」をやるとしたら、教科書にしたいな、という感じの本でした。独学するなら気合いが必要、でもまわりに訊けるひとがいるならめっちゃ良い感じにまとまってるな、というところです。

少なくともわたしのバンドメンバーや音楽仲間にはおすすめできる本なので興味があったら購入すると良いかもしれない。わたしの友人がこれ買って「ここわかんないんだけど」みたいなことがあったらわたしが教えますのでそういうひとはお気軽に相談してください。

あっあと、この本に限らないけど、音楽理論の本やるときはちゃんと音を出しながら耳と頭両方使うのがとても大事だと思う。そうしないと音と理論が結びつかないから。