奥が深い症候群

ソフトウェア開発の職場でよく発症する症状 奥が深い症候群 使いにくいツールに「奥が深い」と言ってのめり込む症候群。 往往にしてもっとシンプルな解決策が他にある。 弊社フレームワーク、Tex、C++、Perl、Vim、Emacsなどで発症しがち。 理由があるはず症…

今までに使ったプログラミング言語

仕事でまともに使っている言語 Ruby Ruby on Rails のために使っている。 汎用言語としてはRubyが一番完成度が高いと思っている。 「標準ライブラリのメソッドが豊富」といったレベルだけではなく、 周辺ツールが充実している。依存関係したければBundler、…

コードの格付け++

ランクA ~ コメントを読まなくても、関数名だけで使い方がわかる ランクB ~ コメントを読めば使い方がわかる ランクC ~ 中身を読まないと使い方がわからない ランクD ~ 書いた人の心を読まないと使い方がわからない(or 心を読んでもわからない) 元ネタ…

レガシ―プロジェクトを引き受けた時、最初に準備するべき七つのこと

「営業一課で使っている■■ってPHPアプリがあるんだけど、メンテナの○○さんが退職するから、4月からは君に任せるよ」 そして、ソースを見てビックリ!! テストは無い、リリース時の手順書も無い、仕様書ももちろん無い。 一方で「ログインできません」「な…

Scalaの最も難しいところ

仕事でScalaで書いたプロジェクトを担当する機会がありました。 「Scalaは難しい」と時々言われます。 YammerがScalaからJavaへ移行中 matzとkmizuさんを中心としたscalaの複雑性についての話 私の感想は やっぱりScalaは難しい。 しかし、それはScala大好き…

「サービス層」「DAO層」はアンチパターンだ

転職して、Java(Jersey)とScala(Play)で書かれたWebアプリケーションをメンテを1年半ほどする機会があったのですが、Java界隈で特によく使われている(ような気がする) 「Resource / Service / Daoの3層に分ける設計」はアンチパターンであると思えてな…

direnvで、使用するdocker-machineを指定する

.envにこんな風に書けるようにします。 # .env use docker-machine my-rails-app ディレクトリに移動すると、自動的にdocker-machineを(まだ起動していないなら)起動し、docker-machine envで環境変数をセットします。 $ cd ~/Documents/my-project direnv…

Yggdroot/indentLineのせいでmarkdownの表示がおかしくなった

markdown編集中に"*hogehoge"が"hogehoge"のように変換されて表示されてしまう。この表示の仕方はVimのmarkdownモードの機能の1つで、set conceallevel=2が設定されているとこう表示する。 問題はset conceallevel=2などした覚えが無いということで、調べる…

Ruby初心者(つまり昨日の僕)に伝えたいRubyの7つのハマり所

書くのが楽しいプログラミング言語であるRubyですが、それでも「落とし穴」がいくつも存在します。 その中から私が最近ハマった落とし穴を7つ紹介します。 シンボルと文字列は異なる Rubyには「文字列(String)」("a" とか 'Hello world!')の他に、文字列…

rbenv環境で特定バージョンのコマンドを実行する(特にrubocop)

RBENV_VERSION環境変数を指定すればいい。 #!/bin/bash RBENV_VERSION=2.2.3 rbenv exec rubocop "$@" 背景 イマドキ、プロジェクトで使うRubyのバージョンを.ruby-versionやGemfileで指定していない人はいないと思いますが、その時困るのはgem install hoge…

RubyでHashの多重代入

params = {a: "hello", b: "world"} def foo(a:, b:) puts a + b end foo(params) # => helloworld って出来るんだから、 a:, b: = params puts a + b # => helloworld って出来ないのかしらん?Ruby 2.2ではできないみたい たしかClojureにこんな機能があっ…

Ruby初心者と忘れっぽい僕のための10の必須リンク先

部分集合が含まれているのは仕様です。 1. リファレンスマニュアル 寝るときに枕の下に敷くこと。 なお、リファレンスマニュアルは各バージョンごとにあるので、最新版(今は2.2.0)を見ましょう。 オブジェクト指向スクリプト言語 Ruby リファレンスマニュ…

Goライブラリもウルトラ簡単に作れる!

RubyGemはめっちゃ簡単に作れる! - 酒と泪とRubyとRailsとでRubyライブラリの公開方法が紹介されていました。 Goライブラリも知らないとハードル高そうに見えますが、実はかなり簡単につくれます。 これから積極的にGoライブラリを作ってOSSの世界に貢献し…

gulpにもmakeにも不満なWebデベロッパーためのRake(コンパイル・パターンマッチ・ファイル監視・通知)

イントロ 21世紀になって登場したフロントエンド向けビルドツールであるgrunt, gulpなどは、最近批判を受けているようだ。 【翻訳】Web世代のデベロッパーのためのmake - MOL 最近のビルドツールって何なの? - 檜山正幸のキマイラ飼育記 gulp問題ひきずり:…

DirenvでDotenvのファイル(.env)を読み込む

Dotenvは環境変数をファイル(.env)から読み込むためのRubyライブラリ。 Twelve-Factor Appなどでは、アプリケーションの設定は環境変数に格納することを推奨しており、Dotenvは本番と開発で環境変数を切り替えるのにうってつけ。 一方、開発環境で環境変数…

go-gitconfigで自作ツールの設定を~/.gitconfigに書く

Goプログラマ必携のGoライブラリ管理ツールghqは、 インストール先などを~/.gitconfigから取得するようになっています*1。 まぁ、非開発者はどうするかとか、そもそも他ツールの設定ファイルに相乗りするのはどうなのかとかは問題ですが、開発者用と割り切れ…

PythonのfileinputをGoで実装してみた

Pythonの○○をGoで実装してみたシリーズ fileinputは、行単位で処理を行うコマンド(特にUNIXフィルタ)を作るときなどに便利なライブラリ。 import fileinput for line in fileinput.input(): process(line) コマンドライン引数で与えられたファイルの行に順…

Python 3.3〜3.5の変更点まとめ(標準編)

この記事は3.2まではPythonを使っていたが、しばらくPythonを離れ、最近戻ってくることになった人*1向けに、 3.3〜3.5で何があったか(何が起こる予定か)をまとめる記事です。 *1:つまり私

Dockerの6つのtips

1. イメージを作る方法はDockerfileだけじゃない Packerもある。 Packer by HashiCorp Packer by HashiCorp Packerは様々な仮想環境のイメージを統一的な方法で作れるツールで、Virtualbox・AWS・DigitalOceanなどにも対応しています。 したがって、DigitalO…

メモ:ローカル環境でCookieが動かないなら、127.0.0.1を疑え。

Cookieを使った認証において、認証取得先とリダイレクト先などは同じ表記でなくてはならない。 すなわち、localhostと127.0.0.1は異なるホストとみなされる。設定ではどちらかに統一すること。

VMWare fusion上のXubuntuで?GVimが正しく描画されない問題

GVimでスクロールしたり、ggでジャンプしたりすると正しく再描画されず画面が真っ黒に。 (たちの悪いことに、マウスで少しスクロールすると再描画される。 そのため、絶妙な「不便で作業効率は落ちるけど一応使えてしまう」不具合になっている) どうやら前…

もしプログラミング言語がお昼ごはんだったら

ソフトウェアを開発するためのプログラミング言語には様々な種類があり、 歴史あるもの新しいもの、手軽さを重視したもの厳密さを追求したもの、など様々な種類があります。 ここでは、8種類のプログラミング言語を、それぞれお昼ごはんに例えてみました。 …

AngularJSのチュートリアルを移植して感じた、Elmの3つの良い点と不満点

これはElm Advent Calendar 2014の14日目の記事です。 AngularJSのチュートリアルをElmで再実装してみました! doloopwhile/elm-phonecat · GitHub まだ、本体のソースコードだけで、解説は何もないのですが・・・。 書いていて、気づいた事を、良い点・不満…

Elm 0.14に際して思ったこと

Elm 0.14がリリースされました。 今回のリリースには後方互換性が保たれない、大きな変更が含まれてます。 これによりHaskellとの違いが大きくなったため、もはや「Haskellベースの言語」という表現はふさわしくないかも知れません。 ところで、このような大…

Elmはそもそも誰が作ってるの?【Elmアドベントカレンダー2014 7日目】

これはElm Advent Calendar 2014の7日目です。 社内勉強会でElmを紹介したら、 ボス「Who is creating Elm language ?」 私 「えっ?」 ボス「Elmって誰が作ってるの?」 というわけで調べてみました。 メイン開発者はPreziの中の人 Elmコンパイラに一番多く…

Elmで青春のフラクタルを描画する【Elmアドベントカレンダー2014 6日目】

これはElm Advent Calendar 2014の6日目です。 Elmの優れた点と言えば、 Haskellベースの静的型関数型言語 Functional Reactive Programming 強力なレイアウト機能 などがまず挙がるでしょう。しかし、 図形描画ライブラリ も、実はElmの長所の一つなのです…

ElmとHaskellの6つの非互換性【Elmアドベントカレンダー2014 3日目】

これはElm Advent Calendar 2014の3日目です。 ElmはHaskellベースの言語なので、Haskellの記事や入門書もElmの学習に使えます。しかし、実はElmにはチョコチョコHaskellと違うところがあって互換性はありません。 相違点をElm公式サイトLearnの SyntaxとFAQ…

ソースに一行追加するだけで実行時にバイナリをバルスできるモジュールを書いた

バズーカが弾切れ、絶対絶命のピンチ、メガネの小悪党がmain関数を実行する前に実行ファイルを削除したいというのはよくあることです。 使用例 たとえばこういうコードに・・・ // get.go package main func main() { println("ハハハハハ!飛行石を手に入れ…

ElmのインストールとHelloWorldのコンパイル【Elmアドベントカレンダー2014 2日目】

ElmはPlaygroundで簡単にコードを試せますが、最終的にはelmコマンドでコンパイルする必要があります。 0. バイナリをインストール MacとWindowは、公式サイトのInstallから、 バイナリをダウンロードできます。 しかし、LinuxではHaskell Platformを使って…

Elmとはどんな言語か?その7つの特徴【Elmアドベントカレンダー2014 1日目】

これはElm Advent Calendar 2014の1日目です。 Elmはクライアントサイド向けの関数型言語です。一体どんな言語なのでしょうか? 1. HTML/CSS/JSにコンパイルされる ElmはHTML/CSS/JSにコンパイルして使用します。 この辺はJavaScriptにコンパイルされるAltJS…