programming

プログラマとコミュニティ あるいは SD8月号に記事を書かせてもらいました

表題にあるとおり、Software Design8月号の特集記事を書かせていただきました。GitHub入門的な記事です。 今書店で売ってる号は7月号ですので、今売ってるやつには載ってません(でももちろん買ってくださってもいいんですよ?)。発売日は7/18ですので、そ…

Perlの黒魔術を解説するよ〜〜〜〜

まずはこちらをごらんください。 Base64 decoder/encoder in Perl - 兼雑記shinh.hatenablog.com すごすぎる……。恐ろしいですね。 なぜこんなことになるのか、解説していきましょう。まずはPerlの気持ちになりましょう。 Perlの気持ち編 ポイントその1 barew…

エラーハンドリング・クロニクル #nds41

はじめに プログラミング技術の歴史は、ありとあらゆる歴史がそうであるように、いろんな「史観」で眺めることができます。ならば、プログラミング技術の歴史を、「エラーハンドリングとの戦い」という視点から見ることもできるのではないでしょうか。本日は…

Functor における map の引数の順序を考えてたらいっこストンと腑に落ちた話

別に知見は書いてないですが、なるほどなーと思ったという感想を書いたエントリです。 ScalazとHaskellのFunctorの提供するmap(fmap)は、引数の順番が異なります。 Scalaz の Functor def map[A, B](r: F[A])(f: A => B): F[B] F[A] なFunctor値が最初の引数…

テンプレートをDRYにするのは慎重にやったほうがいいですよねというお話

社内でレビューおじさん業してて書いた内容ですけど守秘する必要ない情報なんでちょっと内容書き換えてオープンアンドシェアーします。 本文 見た目とかUIというのはソフトウェアの中でめちゃめちゃ柔らかい部品(些細な変更されることが多い部品)なので、…

値の一意性を保証したいときに気をつけるべきこと

たまに以下のようなロジックで値の一意性を保証しようとしているコードを見かけます。 if ( 既に値が存在するか ) { ...(1) print "別の値にしてください" } else { 値をどっかに保存する処理 ...(2) print "保存しました" } 一見うまく動きそうなんですけど…

LLユーザこそ「ふつうのLinuxプログラミング」を読んだらいいという話

4年くらいまえに一度通読して「ふーん」で終わってたんだけど、最近読み返したら「これはめっちゃ良い本では?」となったので紹介します。 ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道作者: 青木峰郎出版社/メーカー: ソフ…

続・結局型クラスって何がうれしいのっていう話

今回は時間がないので簡単に見ます。 型クラスによってアドホック多相が実現されるとどんな柔軟なことができるのかという例を見ましょう。 たとえば、List#max について見て見ましょう。これ、要素が String だったら辞書順での最大値を返すし、Int だったら…

で、結局型クラスって何がうれしいの、ということの説明

前回の記事では、Scala では implicit parameter を利用することで型クラスと同等のことが実現できることがわかりました。しかし前回の疑問として、「で、それの何がうれしいのよ」というのは残っていましたね。 今回はそのうれしみをなるべくわかりやすく説…

Scala の implicit parameter は型クラスの一種とはどういうことなのか

なんか型クラスとか言うと型の怖いひとたちが怖い話をワイワイしてるイメージがありますよね。わたしはあります。「で、それって何がうれしいのよ」とか、そういう話はあまりされていないような印象がありますね(あくまで印象です)。その上 "Scala の impl…

Rails で content-type が application/json などの場合、MethodOverrideが効かない件

背景 Rails には MethodOverride の仕組みがあって、これはなにかっていうと、HTTP method が POST の場合でも _method=PUT とかそういうパラメーターを付けてリクエストしてあげると Rails のレイヤーではそのリクエストを PUT として扱ってくれるやつです…

読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む -

きっかけはこのツイート。 基礎的なことなんだろうけど理解できてないこと。 読み取り権限のない実行権限だけのファイルってどういう扱いになるんだろう。— ゑぬぽい改@電探が出(ん)たん? (@NPoi) March 27, 2014 実際にやってみるとわかるけど、実行権限…

要するに DI って何なのという話

友人から「しんぺいさん DI について書いてほしい」みたいな話をだいぶ前からされてたんだけど書く気力ずっとなかった。でも仕事の気分転換にちょっとずつ書いたやつがいい量まとまったので公開するです。たいしたことは書いてないっていうか知ってるひとに…

猫型プログラミング言語史観(2) 〜あるいは実行コンテキストにどう立ち向かうのか〜

前回のおさらいと今回の話 前回は手続き型パラダイムとオブジェクト指向パラダイムを見比べたときに、「ひとかたまりのデータとそれを操作する手続きを一カ所にまとめて守る」という方向に言語が進化していったというひとつの史観を示しました。その中で返答…

猫型プログラミング言語史観(1) 〜あるいはオブジェクト指向における設計指針のひとつ〜

TL;DR 手続き型プログラミングでは手続きを抽象化することで保守性を挙げることに成功したが、データを守ることには失敗してしまった。そこでオブジェクト指向はデータと手続きをひとかたまりにすることでデータを外から守るというコンセプトを打ち出した。 …

師走なので今年おこなったプログラマー活動を振り返る

年末までまだあるし年内の活動まだ確定してないけど、なんか年内忙しくてもうなんもできなそうだから今公開します。 総括 今年は去年に比べると格段にオープンソース活動ができたのでよかった感じがする。 一方、家庭優先にしててコミュニティ活動(Niigata.p…

jasmine で Backbone.js とか Marionette.js の view のテストしたい

問題 テンプレートが html とかに書かれてて html ファイルと js が密結合しててつらい。たとえば template: "#nyan" とかなってる Marionette.js のviewをテストするときにそこにテスト側から任意のテンプレートをインジェクトしたい 解決方法 jasmine-jque…

なぜ akka を使うべきなのか

馬鹿にはマルチスレッドは複雑すぎる わたしマルチスレッド怖いんです。なんでかっていうと、あれ、これってスレッドセーフだっけ?とか考えないとだめだし、えーっとこの変数は別のスレッドからアクセスされる可能性があるから〜とか考えないとだめ。あとロ…

突然死botちゃんのコードが奇麗になったよ

おかげさまでご好評をいただいている突然死botですが、初めて Scala で書いたプロダクトだったゆえかなり凄惨なソースとなっておりました。 そこで、最近ようやく Scala にも慣れてきたので、specs2でmockito使ってテストするのの練習もかねて、エイヤっとリ…

Akka 2.2 の pipeline のテストを書く

PipelinePorts を作ってそこにコマンドやイベントを流し込めば普通に結果が返り値で返ってくるのでテストを書きやすい val pipelinePort = { val ctx = new PipelineContext {} PipelineFactory.buildFunctionTriple(ctx, new YourPipelineStage) } // パイ…

Akka2.2 既に死んでるactorをwatchした場合どうなるのか

ちゃんと Terminated が送られてくる see http://doc.akka.io/docs/akka/2.2.0/general/supervision.html#what-lifecycle-monitoring-means One important property is that the message will be delivered irrespective of the order in which the monitori…

Akka(2.2) のネットワークサーバーを Graceful に shutdown

こんな感じでどうでしょうね。 解説はコメントを参照のこと。 import akka.actor._ import akka.actor.Terminated import akka.io._ import akka.io.IO import akka.util.ByteString import java.net.InetSocketAddress import scala.collection.immutable.{…

APNsGatewayServer を書いてたら AWS に仕事を奪われたので現代のラッダイト運動を起こしたい

APNsGatewayServer を書こうの巻 えー。APNsとのやりとり部分を書くのはなにげにとても面倒です。面倒な理由として プロトコルがアップルのオレオレプロトコルであり、なおかつバイナリでやりとりしている APNsサーバーに対してリクエストを送っても、基本的…

TcpPipelineHandlerで管理してるコネクションを切るの術

解決したい問題 Akka でネットワークサーバーを書く場合、エンコード/デコードの部分は Pipeline を利用し、TCPレイヤーの IO をその Pipeline に流し込む場合は TcpPipelineHandlerを利用するのが定石だと思いますが、ではサーバーがレスポンスを返したあと…

レールルで Controller から ActiveRecord を生で触るのをやめたい話

単純な操作ならいいんだけど、複数テーブルに対してごにょっと操作をして、それがアトミックでなくてはならなくて、みたいなときの話。 単純な複数テーブルに対する操作なら多分主従の関係みたいなのあると思うしそういうときには主のほうを表すARを継承した…

Ruby の練習問題書いてるけど問題作るのってむずかしい

Ruby の練習問題を作ろうとしてるんだけど、問題を作るのってめちゃめちゃむずかしい。 今はとりあえず課題ひとつだけつくって、それは単方向リストを実装しろっていう課題なんだけど、これが「どのくらいの難易度なのか」ということがまずわからない。あと…

Scala の implicit conversions がよくわかんなかったからいろいろやってようやくわかった気がする

アホなので implicit conversions みたいな魔術っぽいことされると「えっなになに」「なにが起きてるの」ってなってしまって混乱する。いままでの「なんとなくこんな感じのアレだよね」みたいなやつとしては、たとえば String を wrap するような SugoiStrin…

Ruby で Scala の Option っぽいやつを実装してみた話

こんな感じで実装できた。Option (Haskell で言うところの Maybe)はモナドの中でもかなりわかりやすく実装しやすい。foreach とか filter は実装してない。 ただ、これだけがあっても、map や flatmap とか foreach とかを組み合わせたときに読みやすい感じ…

「オブジェクトをイミュータブルにしろ」って言うけど、それってたとえば状態が変わったらオブジェクト作り直すってことでしょ、ちょう非効率じゃん。って思ってたんだけど、

オブジェクトの内部の値がイミュータブルであれば、今後もその値は変更されないことが保証されているので、新しい状態を持った新しいオブジェクトの内部の値のうち、変更のない部分(つまり値のうちのほとんど)は古いオブジェクトの値をそのまま参照すればよ…

Re: チャットとかでパスワードを教えるとき暗号化すると良い

この記事。3ヶ月以上前のやつなんだけどちょうどいい題材なので今更これに反応してというか勝手に乗っかって秘密鍵と公開鍵のことについて書く。 この記事では同じキーを使って暗号化と復号化を行っているけれど、これだと「じゃあそのキーをどうやって共有…