読者です 読者をやめる 読者になる 読者になる

プログラマとコミュニティ あるいは 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ヶ月以上前のやつなんだけどちょうどいい題材なので今更これに反応してというか勝手に乗っかって秘密鍵と公開鍵のことについて書く。 この記事では同じキーを使って暗号化と復号化を行っているけれど、これだと「じゃあそのキーをどうやって共有…

やったー Akka 2.2 でチャットサーバーできたよ〜

https://github.com/Shinpeim/ChatServerAkka2_2 もっとキレイに書けないもんなのかな〜

日本一わかりやすいというほどでもない Akka2.2 の IO まわりと Pipeline まわり

!!!!!!この記事は古い情報を扱っています!!!!!! Akka 2.3 からは Pipeline はなくなっています。この記事の内容は古いです。気をつけてください 前回までのあらすじ 自信満々で日本一わかりやすい Akka の IOManager と SocketHandle(やServerHa…

Akka 2.2 でエコーサーバー

前回のエントリ にあまりに悲しいオチが付いたが、気をたしかにもって Akka 2.2 でのエコーサーバーを書いてみた。 このあたりの感じは IOManager のときとあまり変わらない。むしろわかりやすくなっている気がする。 Mainから読んでいって Server.scala、Cl…

日本一わかりやすい Akka の IOManager と SocketHandle(やServerHandle)、それに IO.Iteratee と IO.IterateeRef

ちょっとこのあたりが複雑に感じたので、一度整理しておく。まぁ全部「公式読めば書いてあるよ」で OK なんだけど、それではあまりにマッチョすぎるしわたしがあとから参照したいしみたいな感じ。 IOManager とはなにか Akka でIOを扱うときには、 IOManager…

Scala + akka の簡単なチャットサーバーを改良してみた

スナップショット => https://github.com/Shinpeim/ScalaChatServerSample/tree/d18399985dcca22f4f593593ad02230c4a9f402f サーバーソケットに責任を持つアクターと、クライアントソケットに責任を持つアクターを別々にしてみた ひとつの接続に対してひとつ…

Scala + akka で簡単なチャットサーバーを書いてみたので解説してみるよ

!!!CAUTION!!! この記事で扱っている IO のインターフェイスは Akka 2.2 で すでに old-io 扱いとなり( http://doc.akka.io/docs/akka/2.2.0/scala/io-old.html )、Akka 2.3 からは削除されてしまっています。 今ならばこちらを参考にされたほうがいい…

新しく使う技術は、お仕事で使う前に UserStreams 常駐系の twitter bot を作ると良い。運用も体験できていろいろな勘所がわかる。ということに気づいた

こちらからは以上です。

突然死 bot が生まれ変わりました

以前 Ruby の練習として、following の発言を 突然死ナイズする Twitter の bot を書きましたが、おそらく鍵アカに対してもホイホイ follow リクエスト送るみたいな挙動がお行儀が悪かったのでしょう、だいぶ昔にアカウントが凍結されておりました。 そのあ…

Ruby の C Extension を作ったのでどういうことをやったかまとめた

waveずたずたのための ruby の C Extension 書いたんだけど、どうやって書いたのかまとめると有益っぽいのでまとめた。 ビルドするためにどうすんの Cだから当然コンパイルしないと動かない。普通は make でビルドしたいと思うんだけど、そのための仕組みと…

WaveずたずたがいろんなOSに対応した(と思う)

けっこう評判がよくてうれしい WZZ ですが、不自由で邪悪な mac OS でしかリアルタイムプレイが動かないのがちょっと残念でした。そんな折、 「そうだ、OpenAL使えばいろんなプラットフォームで動くんじゃね?」思い立った わたしの TL がなぜか空前のC Exte…

waveずたずたが激ヤバになった

まずはこれを見てくれ waveずたずたシーケンサー そうです。waveずたずたがリアルタイム演奏に対応しました。 waveずたずたってなんだよ WaveZutaZutaというおもちゃを書いている話 を参照してください。 中身 @nagachika さんが書いた、 ruby から coreaudi…

Macでワンライナーでカップラーメンタイマー

$ sleep 180 && say -v Zarvox ramen de ki ta yo TLのドラがわりとかにもどうぞ

Redisを題材にしたデータ型と計算量の話を書き始めている

プロセスのやつ書いてるときに、自分自身がすごい勉強になって、またなんか書きたいなというのがまずあって、あと、以前からデータ型と計算量の話はわかりやすくまとめておきたいという気持ちがあった。 最近(というかもうずいぶんまえから)Redisが話題にな…

CRuby の hash.c を一部読んだ

ツイッターで「Ruby の Hash のキーにするオブジェクトに hash と eql? を定義しないといけないのなんでなんだろう」という話題が出て、「おそらく Hash の名前の通り、Hash テーブルを lookup するのにキーの hash 値を計算するのに使ってるんだろうね」と…

Niigata.ll が開催されるので長野からエア参加します

新潟の LLer たちが集まってワイワイするイベント Niigata.ll が本日開催されるそうです。わたしは個人的な事情で現在長野県におり参加できないので、資料だけ送りつけて長野からエア参加します。 Perlなめんな 内容は、別言語のひとたちから DIS られがちで…

アニメーションgifを殺して静止画にしたらかっこよかったはなし

アニメーション gif って一枚一枚の画像を高速で切り替えてアニメにしてるわけだけど、じゃあ、何枚も画像を切り替えるんじゃなくて、一枚の画像の中で上から順に表示させたらかっこいいんじゃないかなーって思って(伝われ)やってみたら案の定かっこよかっ…

後方互換性についてさいきん考えていることを書く

後方互換性を守るべきブロダクトと、そこまで気にしなくていいプロダクトがあると思っている。 後方互換性を守るべきもの これはもうシンプルで、「依存関係の下のほうにあるプロダクト」。下のレイヤーを担うことを狙っているものについては後方互換性を守…

テストに通ったら伊藤かな恵さんに褒められる環境を作って捗る話

追記:今はこのコマンドは App::WithSound っていう名前でCPANに上がってるのでそれを使うといいです。 「テストに通ると#{ここに好きな女性声優の名前を入れよう}の声で褒めらるってのよくない?」みたいな話をツイッターでしてたら、みんな大好き @moznion…

プロセスの話第五回書いた

今回の記事 全体 今回もがんばったよ!褒めて!

SimpleObjectContainer という gem をリリースした

リリースしたよ 業務で Object::Container という CPAN モジュールに似た動きをする gem が欲しいなーと思ったので作ってリリースしました。まだ機能限定版です。 https://rubygems.org/gems/simple-object-container ドキュメントっぽいのは github の READ…