2014-01-01から1年間の記事一覧
ソフトウェアを開発するためのプログラミング言語には様々な種類があり、 歴史あるもの新しいもの、手軽さを重視したもの厳密さを追求したもの、など様々な種類があります。 ここでは、8種類のプログラミング言語を、それぞれお昼ごはんに例えてみました。 …
これはElm Advent Calendar 2014の14日目の記事です。 AngularJSのチュートリアルをElmで再実装してみました! doloopwhile/elm-phonecat · GitHub まだ、本体のソースコードだけで、解説は何もないのですが・・・。 書いていて、気づいた事を、良い点・不満…
Elm 0.14がリリースされました。 今回のリリースには後方互換性が保たれない、大きな変更が含まれてます。 これによりHaskellとの違いが大きくなったため、もはや「Haskellベースの言語」という表現はふさわしくないかも知れません。 ところで、このような大…
これはElm Advent Calendar 2014の7日目です。 社内勉強会でElmを紹介したら、 ボス「Who is creating Elm language ?」 私 「えっ?」 ボス「Elmって誰が作ってるの?」 というわけで調べてみました。 メイン開発者はPreziの中の人 Elmコンパイラに一番多く…
これはElm Advent Calendar 2014の6日目です。 Elmの優れた点と言えば、 Haskellベースの静的型関数型言語 Functional Reactive Programming 強力なレイアウト機能 などがまず挙がるでしょう。しかし、 図形描画ライブラリ も、実はElmの長所の一つなのです…
これはElm Advent Calendar 2014の3日目です。 ElmはHaskellベースの言語なので、Haskellの記事や入門書もElmの学習に使えます。しかし、実はElmにはチョコチョコHaskellと違うところがあって互換性はありません。 相違点をElm公式サイトLearnの SyntaxとFAQ…
バズーカが弾切れ、絶対絶命のピンチ、メガネの小悪党がmain関数を実行する前に実行ファイルを削除したいというのはよくあることです。 使用例 たとえばこういうコードに・・・ // get.go package main func main() { println("ハハハハハ!飛行石を手に入れ…
ElmはPlaygroundで簡単にコードを試せますが、最終的にはelmコマンドでコンパイルする必要があります。 0. バイナリをインストール MacとWindowは、公式サイトのInstallから、 バイナリをダウンロードできます。 しかし、LinuxではHaskell Platformを使って…
これはElm Advent Calendar 2014の1日目です。 Elmはクライアントサイド向けの関数型言語です。一体どんな言語なのでしょうか? 1. HTML/CSS/JSにコンパイルされる ElmはHTML/CSS/JSにコンパイルして使用します。 この辺はJavaScriptにコンパイルされるAltJS…
知ってて当たり前の超凡ミス。 起こったこと:rsyncが失敗する rsyncが何故か失敗してしまう。"protocol incompatibility"と出ていますが、--protocolオプションを指定しても、最新版のrsyncをインストールしても、同じエラーが出ます。なぜでしょう? Tue N…
goreの説明を追記。 LLから、Goに移るときの不満の一つに「標準のREPL(インタラクティブシェル)が無い」があります。 「ポインタはmapのキーになるんだっけ?」のような、つまらない(けど、ありがちな)疑問を解消するには、ドキュメントを漁るより、コー…
プログラマーは往々にしてCUI世界の住人なのですが、 ごくたまに、ファイルをドラッグ&ドロップで指定できると便利、ということがあります。 doloopwhile/dap · GitHub スクリーンショット インストール go get github.com/doloopwhile/dap 使い方 ドラッグ…
小さなGoライブラリをつくった時、ほとんど自分しか使わないような規模なら、わざわざREADMEに「Usage」「Example」「Functions」なんて書くのは面倒ですよね。 そんな時は、godocdownで自動生成してしまうのがオススメです。 godocと同等の内容をGitHub用Ma…
DockerfileのENV コマンドで、複数の環境変数を一度に指定できるようになるらしい。 Allow ENV to set multiple variables in one layer · Issue #2333 · docker/docker · GitHub 従来は複数の環境変数を設定するには、ENVを繰り返さなければなりませんでし…
Pythonでは__iter__メソッドを定義すれば((Rubyでは.eachメソッドを定義してEnumerableをincludeすれば、C#ではGetEnumerator()メソッドを定義すれば、 PHPではIteratorを実装すれば))、 晴れて独自のコレクション型でも、foreach文などでループできるように…
Strategy設計の失敗 前回で、HTMLとテキストでレポートを出力するコードを書きました。その中でFormatter interfaceを定義し、その具象型としてPlainTextFormatter HTMLFormatterを定義するというStrategyパターンを採用しました。 しかし、気になる点が無い…
Goのinterfaceは「使う側」が定義するもの 前回Formatter interface、Formatterを使ってレポートを出力するReport struct、 Formatterの実装PlainTextFormatterとHTMLFormatterを定義しました。 type Formatter interface { OutputStart() OutputHead(text s…
例:レポートを出力するクラス。 レポートをHTMLで出力するstruct*1を作ったあなた。上司からプレーンテキストでも出力してくれと言われてしまいました。とりあえず、フォーマットを引数で指定するようにしたのですが・・・ *1:レポートの内容はフィクション…
DBもapacheも何も要らない、空っぽのdockerコンテナが欲しい。 ただし、1度起動したら、docker stopするまで起動しっぱなしでいて欲しい。 回答 pseudo-tty付きのBashを走らせれば良いようです。 docker run -itd base bash -c "bash --rcfile <(echo \"trap…
前回の「ECMAScript6を使うのは5年ぐらい時期尚早だった」が舌っ足らずで、はてぶでコメントがついていたので補足 trasuerを使えば後で移行できる・・・とは限らない koba04さん Traceur使ってES6で書いておくとそのまま移行出来るメリットはあると思う http…
新製品のWEB UIを作ることになりました。 「functionって書くのダルいから、CoffeeScriptにしましょうよ」 「でもCoffeeScriptって、そろそろオワコンじゃないか?」 「ちょっと待てよ、そろそろES6(ECMAScript6、JavaScriptの次期標準、後述)が使えるよう…
mainパッケージに変数を埋め込みたいとき Goで作ったアプリで --version 用にバージョン番号とビルド日時を埋め込みたい。 そんな時、-ldflagsを使えばいいのはwell-knownだと思います。 go build -ldflags=" -X main.compiled 'ビルド日時' -X main.version…
「Goは興味あるけど、会社は(Python|Ruby|PHP|Perl|Java|C#)だからなぁ」というあなた。 個人的なCLIツールを、Goで書き直してみたらいかがでしょう? GoはLL並に書きやすいだけでなく、LLには無い優れた特徴を兼ね備えた言語なのです。 上記は、自社のGo la…
数値を右揃えあるいは0詰めして表示するのはまれによく遭遇するタスクです。 fmt.Printfには出力幅を指定する機能がありますが、幅をいくつにとればよいか、 言い換えれば「一番大きな数値の、桁数はいくつか?」は、プログラマーが計算しなければなりません…
「VimからGoを」ではありません。 CLIツールに設定ファイルをエディタで開く機能(git config --editのような)をつくろうとしたところ、上手く行きません。exec.Command("vim").Run() で vimを起動しようとしても、exit status 1で失敗してしまうのです。 …
peco/pecoでgit rebase -i のrebase先を選択するコマンドを作りました。 git-rebase-i-peco: select rebase -i target 私の場合、commit --fixupとrebase -iが「マウスでコミット番号をコピペしがち&よく使うコマンド」の双璧なので、これでマウスレス・Git…
peco/pecoがそこそこ流行っているみたいなので、 git commit --fixup の fixup先を選択するコマンドを作ってみました。 git-fixup-peco: select fixup target with peco これで、git log してコミット番号をマウスでコピペする必要がなくなりました! # 実は…
Go言語には、C言語のコードを呼べるcgoという機能があります。 「json版sed」の./jqの機能を呼んでみます。 jqを選んだのは、 * ./jqはコマンド自体はそこそこ有名 * Go言語から直接呼べれば役にたつ(かもしれない) * APIが単純 * mrubyやImageMagickのよ…
GOPATH 問題 Gophers! 周知のようにgoはGOPATHで依存パッケージをどこにインストールするか決められます。 入門記事などでは、~/.bashrcや~/.zshrcの中で export GOPATH=$HOME/gocode または export GOPATH=$HOME とすることが多いようです。 しかし、GOPATH…
社内勉強会で発表しようと思ったけど、寿司の運搬という重大任務を仰せつかって、流れてしまったスライドを転載 direnv is an awesome successorof ***env's. from Kenji Omoto (なお原稿では乱立する"***env"をマスコミは「目があって角が2本」としか認識…