NaCl非公式ブログ

VagrantのDocker Provider

西田雄也と申します. 長女(5)に嫌われているのか3歳の中頃からお風呂に誘うと「お父さんやだ.一人で入る.」と言われます.

本稿の想定読者: Vagrantを使っている方

開発環境を作成するのに便利なVagrantですが,2014-05にリリースされた1.6からはDocker Providerが標準で使えるようになっています.これはVirtualBoxの代わりにDockerを使って同様の環境を用意するもので,VirtualBoxよりもDockerの方が隔離レベルが低い分,仮想環境の構築・起動を短時間で行える利点があります.

筆者は作成したItamaeレシピを動かしたり,レシピの処理結果をServerspecで試験する環境として使っています.

本稿ではそんなVagrantのDocker Providerの使い方を紹介します.

...続きを読む

Ruby開発合宿

ビーチ

NaClの前田です。

柴田さんの発案でRubyWorld Confernece後の週末に松江でRubyの開発合宿をしようということになり、遠方から来られる方の宿泊費や交通費をRubyアソシエーションが負担する形で11/5〜6に開発合宿を行いました。

柴田さんの他、笹田さん、中田さん、成瀬さん、田中さん、武者さん、松田さんが参加されました。

弊社からは橋本君と私の2名で参加しました。

...続きを読む

getpeername(2)がENOTCONNを返すとき

釜揚げそば

NaClの前田です。

松江はそろそろ寒くなって来て、バイクに乗るのがつらい反面、釜揚げそばが美味しい季節になって来ました。 みなさんいかがお過ごしでしょうか。

ちょっと先の話になりますが、12/28の年末ジャンボしまね企業博という何やら景気の良さそうなイベントでブースの留守番をする予定ですので、興味がある方がいたら遊びに来てください(リンク先は企業向けの募集ページです)。

さて、今日はEventMachineを使ったTCPサーバアプリケーションでEM::Connection#get_peernamenilを返すという障害報告があったので、ちょっと調べてみました。

...続きを読む

Character Propertiesについて

こんにちは。NaCl東京支社の小田です。AdaにType Parametersがあったことに驚いている、生粋のRailsプログラマです(^^)。今、上司からたまたま勧められた萩谷昌己さんの「ソフトウェア考現学」を読んでいます。私が生まれた年にかかれた古い本ですが、time-testedな記述も多く、とても楽しみながら読んでいます。生まれ年の本を読む格別は、生まれ年のワインを飲むそれに似ているとよく言われますが、それを実感しています。以下は、その本のまえがきの一部になります。溢れ出る仏教感から諸行無常の鐘の音がきっと聞こえるはずです。興味がわいた方はぜひ。

ソフトウェアとは、流行り歌のようなものではないかと思うことがある。昨日あんなに流行っていたあの歌も、今日はすっかり忘れ去られてしまっている。今日には今日の歌が流れ、明日には明日の歌が作られる。そんな流行り歌に、進歩というものがあるはずもなし、毎日耐えることなく作られてゆく無数の歌の中で、たまたまその時代と同期することのできた歌が街角に流れ、それを口ずさむ人々の心をほんの一瞬だけ潤すのである。

ソフトウェアにも同じようなことがいえる。昨日はあんなに流行っていたプログラミング言語やオペレーティング・システムが、今日にはすっかり忘れ去られてしまっている。人々は、貪欲なまでに、新しいものを追い続けている。

さて、今日はRubyの正規表現のリテラル内で使用できるCharacter Propertiesを紹介します。簡単な使い方と内在する問題、その問題への対応方法をご紹介します。この記事でこの機能の使用機会が増えれば幸いです。

...続きを読む

R7RSのdelay-forceとは何か

こんにちは。NaCl松江本社のyharaです。最近BiwaSchemeにdelay-forceという機能を追加しました。 BiwaSchemeは筆者の個人的なプロジェクトで、JavaScriptで書かれたScheme処理系です。 delay-forceはSchemeの最新規格であるR7RS (small language)から標準として取り込まれた機能で、delayおよびforceと併用してScheme上で遅延評価を実現するためのものですが、それがどういうものなのかについては順を追って見ていく必要があるでしょう。

本記事では以下の順で説明を行います。

  1. delay-forceをいつどのように使うのか
  2. delay-forceがどのように実装されるのか
  3. サンプルプログラム
...続きを読む

ビジュアルプログラミング環境スモウルビーの紹介

最近、プログラミング教育が大きな注目を集めています。 日本でも小学校でのプログラミング教育必修化が検討されており、Ruby界隈でも『Hello Ruby』の翻訳本である『ルビィのぼうけん』が今年5月に出版されるといった話題もありますね。

プログラミング教育の盛り上がりは、松江でも例外ではありません。 筆者は、NPO法人Rubyプログラミング少年団の活動を通じて、小中学生にプログラミングを教えています。 そこでは、スモウルビー(Smalruby)というソフトウェアを使っています。

この記事では、いちユーザの立場からスモウルビーを紹介します。 想定読者は、ある程度プログラミングの経験があって、小中学生にプログラミングを教えたいと思っている方々です。 また、スモウルビーでゲームを作る際のノウハウはあまりウェブ上に無いため、それらについてもいくつか紹介したいと思います。

本記事では、それぞれ下記のバージョンを対象としています。

  • smalruby: 0.1.10
  • smalruby-editor: 0.4.0
...続きを読む

機械学習勉強会に参加して画像の人物判定プログラムを書いた話

佐田です。 本記事は、ITOCが主催した平成27年度機械学習勉強会に参加した時に、私が感じたことについてまとめたものです。 上記のリンク先にも書いてあるとおり、平成27年12月から平成28年3月10日まで毎週開催された勉強会です。 参加者は、データサイエンティスト養成読本 機械学習入門編 (Software Design plus)を教科書にして学習していました。

機械学習勉強会の大まかな流れとしては、チームごとに分かれ、それぞれのチームで目標を決めて発表会で発表するという流れでした。 その発表までの流れに沿って本記事は書きました。

...続きを読む

自作でイベント駆動型サーバ作るのツライ問題とlua-nginx-module

何の因果かわかりませんが、お仕事でちょっと賢いリバースプロキシサーバ(以降、RPサーバ)を作る機会が2回ありました。 HTTPヘッダの内容によってプロキシ先のサーバを動的に切り替えるようなものです。

ちょっと賢いリバースプロキシ

この要件を満たすため、RPサーバには以下のようなプログラムが必要になります。

  • HTTPヘッダの内容を知るためにHTTPリクエストをパース
  • プロキシ先のサーバへHTTPリクエストをプロキシ
  • プロキシ先のサーバはRedisから取得
  • レスポンスをクライアントへ返す
  • 大量のリクエストも捌ける

1回目はRubyとI/O多重化のライブラリを使ってイベント駆動型のRPサーバを自作してみました。 が、振り返ってみるとこれは失敗でした。

...続きを読む

ドキュメント作業で楽をしたい

プログラマがあまりやりたがらない作業のひとつとしてドキュメント作成がよく挙げられるかと思います。 〇〇仕様書とか〇〇設計書とか〇〇手順書などの作成作業ですね。 特に成果物がdocxやxlsxのようなプレーンテキストでない場合、次のような理由で気が滅入る方も多いのではないでしょうか。

  • 手慣れた道具(エディタ)を使うことができない
  • 専用のソフトでよくわからない機能が裏で勝手に動いたりしてて気持ち悪い
  • 変更履歴をトラッキングしづらい、差分をマージしづらい

Markdownでさくっと書いてそれっぽいものができれば、GitHubのWikiなどにぼちぼち書き溜めておいて最後にコンパイルするみたいなやり方ができるなぁとか、そうすればわざわざドキュメント専用リポジトリを作ったりする必要もないなぁとかモヤモヤしながらいろいろ調査・検討したので以下の4構成でまとめたいと思います。

  1. Pandocについて
  2. Pandocを使って Markdown -> HTML, PDF を作成する
  3. Pandocを使って Markdown -> docx を作成する
  4. Pandocで作られたdocxをRubyで加工する
...続きを読む

RubyアプリケーションのABCSizeの目安

チームで開発する際はコーディング規約を決めて行うことが多いと思います。 実際に書いたコードが規約に従っているかどうかを検査するため、筆者はRuboCopを使用しています。 コーディング規約そのものはWeb上に公開されているものを参考にして決めていますが、制限が厳しすぎる等の意見がチーム内であった場合は適宜規約を調整しています。 最近チーム内でABCSizeに基づく警告を出す閾値がもう少し高くても良いのではという意見が出たことをきっかけにいくつかのアプリケーションでの例を調べたので紹介します。

...続きを読む