Category技術

ConoHaのオブジェクトストレージをPaperclipから使う

清楚かわいいConoHaちゃんが、APIのレビュー記事を書くとクーポンをくれるらしいので、全力で乗っかっていこうと思います。

conoha_1920_1080_mode_2015summer
(画像はこのは通信室より引用)

今回利用してみるのは、ConoHaのオブジェクトストレージです。
これは基本的にOpenStack Swiftを使って実現されており、API仕様OpenStack Swift APIとほぼ同じ内容になっています。

APIが互換であれば、OpenStack Swiftを扱えるシステムからConoHaのオブジェクトストレージも扱うことが出来るはずですね。
そんなわけで、試しにRuby on Railsで画像アップロードをお手軽にできるPaperclipのバックエンドをConoHaのオブジェクトストレージにしてみましょう。

Continue reading

スモールチームの情報共有にIncが便利そうな話

自分含めて3人のチームで趣味プロをしていこうと画策しているんですが、その時に課題になったのが情報共有ツール。
リアルタイムの情報共有はチャットツールのSlackで良いんですが、開発環境の構築方法とか、使ってるツールの一覧とか、そういった「後から見返したい情報」を残すのにチャットツールはあまり向いていないんですよね。
またSlackは無料だと10,000messageまでしかログを保存してくれないため、なおのこと情報の集積は別の場所が必要になってきます。

こういう場合Wikiがお手軽な選択肢に上がるんですが、無料だからといって広告が出るのは嫌だし、最近は色々なサービスが出ているから選択肢も多かろう、ということで色々漁っていました。
条件としては以下のような感じ。

  • Markdown的なものでさっくりエントリを書いて共有できる
  • インターフェイスがこなれていて使いやすい
  • クローズドでメンバー以外にはエントリが見えない
  • 3人で利用した時にできれば無料、無理なら可能な限り低価格で済む

以下では検討したシステムについて紹介していきます。

Continue reading

strtotimeとtimestampの素敵な関係

基本的には関数型言語推しですが、業務では諸事情でPHPを使っています。
色々と罠の多い言語であることは知っていたんですが、先日「これはあんまりだろ…」という挙動を踏み抜きました。
軽くググった限りでは同様の事例紹介が見当たらなかったのと、あまりにも衝撃的だったため記事として残しておきます。

前置き:MySQL DATETIMEとstrtotime

PHPerな諸氏におかれましては、strtotimeが色々と頑張りすぎるせいでハマったことは1度や2度ではないのではないでしょう。
例えばMySQLのDATETIMEで未定義を表す0000-00-00 00を32bit環境でstrtotimeに渡すとfalseになります。
ドキュメントを見ると

返り値 ¶
成功時はタイムスタンプ、そうでなければ FALSE を返します。 PHP 5.1.0 以前ではこの関数は失敗時に -1 を返します。

と書かれており、「そうか、日付として不正だから解釈に失敗してfalseを返したんだな。0月とか存在しないし」と思ってしまいそうになるんですが、同じコードを64bit環境で実行すると以下のようになります。

$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
int(-62170016400)

謎の数値が出てきました。
これが一体いつを表しているのか、さらにdate関数を掛けて確認してみます。

$ php -r 'var_dump(date("Y-m-d H:i:s", strtotime("0000-00-00 00:00:00")));'
string(20) "-0001-11-30 00:00:00"

つまり、PHPはMySQLのDATETIMEの未定義値を「マイナス1年11月30日の0時0分0秒」とみなしていることがわかります。
実はPHPでは0月が「前年の12月」を、0日が「前月の最終日」を、それぞれ表すと解釈されるので、0年の1ヶ月前の更に1日前で-1年11月30日という日付が導かれるんですね。
32bit環境でfalseが返っていたのは、日付として不正だからでも何でもなく、単に「表現できる整数値の範囲を超えていたから」という理由だったわけです。

この挙動の違いは公式ドキュメントのコメント欄にさんざん書かれているので知っている人も多いと思います。
一方、今回踏んだ挙動は発生条件がかなり限られていることと、そもそも普通はそんなことしないだろう、という辺りであまり知られていないだろう挙動です。
あ、ここまでが前振りです。長くてすみません。

Continue reading

すごいHaskell本の演習問題を公開しました(5章まで)

最近、会社で「すごいHaskellたのしく学ぼう!」の勉強会を主催しています。



内容としては週1回、1時間かけて本を読み進めつつ、例を実際に動かしたり、分かりづらい部分を自分が補足したり、気になる部分をお互い教え合ったり、といった形で進めています。
前回主催した型システム入門の勉強会はあっという間に参加者が減って頓挫したものの、今回は8回目時点で参加者がほとんど減っておらず、よい感じに続いています。

ところで、すごいHaskell本は説明順序も適切ですし、例も豊富にある良い本なのですが、勉強会を進めて不満に思うことが出てきました。
それは、自分で考えて手を動かすための演習問題が一切ないという点です。
例が豊富にあるとはいえ、プログラミングの醍醐味は「どうやって解くかを考えて、それをプログラムに落としこむ」ところにあると自分は思っています。
また、そうやって問題を解くことで記憶も定着しますし、必要な知識が身についているかの理解度チェックにもなります。

そういうわけで、社内勉強会では章が終わるごとに演習問題を解いて理解を確認してもらう、ということを行っています。(宿題というわけではなく、任意で解きたい人だけ解いてもらうような感じです)
この演習問題、もともとは社内Githubにまとめていたのですが、社外から見れないと不便であることと、特に社外秘の情報というわけでもないことから、Githubに公開することにしました。
現在勉強会が5章までしか進んでいないので、5章分までの公開です。

すごいHaskell楽しく演習!

すごいHaskell本を自習している方や勉強会をしている方、もしくは単にHaskellの問題を解いてみたい方など、ご自由に利用していただければと思います。
なお、問題作成にあたり自分で解けることは確認していますが、記述に間違いがあったり分かりづらい部分があるかもしれません。
そういった場合はメールかTwitterで@kokuyouwind宛てにリプライをいただければと思います。

問題を作るにあたり、なるべく作業的にならないよう、面白い題材を選んだつもりです。
以下では章ごとの問題について、どんな題材をテーマに何を狙って問題を作ったかの解説を書いていきたいと思います。

Continue reading

関数型プログラミングとは結局何なのか

この記事はドワンゴ Advent Calendar 2014の14日目です。
ちなみに前日は@erukitiさんでした。
他の方は「こんなもの作ってみた!」系の記事が多いのですが、技術系の話題であれば特に縛りはないようなので、今回はひたすら文章をつらつらと綴っていきたいと思います。

ここ数年、「マルチコア時代の主流は関数型だ」とか「Javaはもう古い! 時代は関数型!」といった記事をよく見かけるようになった気がします。
大学でOCamlを学んできた自分としては嬉しい限りなのですが、なんだか関数型という言葉がバズワード的な使われ方をしている気がして、まるで「現在起こっている全ての問題を解決する銀の矢だ!」といわんばかりの雰囲気を感じるのが気になっています。
最近うちの部署でもにわかに「関数型っぽく書こう」みたいな機運が高まってることもあるので、この機に関数型プログラミングとはなにか、どのような特徴があって何に向いているのか、みたいなことをまとめてみたいと思います。

Continue reading