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

Machine Learning

Coursera の Machine Learning コースを 2016/12/27 から始めた。今、Week 4 の途中。とりあえずは、付いていけている。課題を満点でpassしていないのが、心残りだけれど期限があるので期限優先で進めている。順調に進めば、2017/04 には終わっているはず。

2016年の振り返り

Pull Requests 2016年はPRが多い年だった。 GitHubを使い始めてからこれまでに、PRを出した件数を年ごとに数えてみると以下の通りだった。 2010年:0件 2011年:0件 2012年:1件 2013年:0件 2014年:1件 2015年:2件 2016年:11件 2016年が飛び抜けて多い。基本的…

fluent-plugin-parameterized-path を作成した

fluent-plugin-parameterized-path という fluentd のプラグインを作成した。 どんなプラグインか ログをファイルに出力するプラグイン。 指定したキーの値から、出力するファイルのパスを決定する。 out_file とほぼほぼ同じ機能がある。symlink_path は未…

Digest認証で制御されているElasticsearchにアクセスする

Python Elasticsearch Client を使って, Digest認証のかかったElasticsearch に接続する方法. from elasticsearch import Elasticsearch, RequestsHttpConnection from requests.auth import HTTPDigestAuth es = Elasticsearch( ['myelastic.example.com'],…

vscode-digdag

Visual Studio Code のDigdag 向け拡張機能を作成している。名前はvscode-digdag。 一番初めのバージョンの公開は 2016年7月19日。すでにおよそ2か月が経過しているので、「作成した」というよりは「作成している」の方がしっくりくる。 開発も、当初はシン…

tokyo.ex #5 に参加した

beam-lang.connpass.com に参加してきた。19:00 に会社を出て 19:20 分に到着。ギリギリ。 細かいことは置いておいて、印象に残った部分を残しておく。 Phoenix について @ohrdev さんのお話。 Elixir の公開されているライブラリの数は 3000くらい。他の言…

VSCode に Integrated terminal という機能が追加されていた

VSCode 1.2.0 で Integrated terminal という機能が追加されていた。 大雑把にいうと、エディタのウィンドウの一部にターミナルを追加させる機能。 mix コマンドをコマンドパレットから実行できるように拡張機能を書こうとしてたんだけれど、Integrated term…

Visual Studio Code をコマンドラインから起動させる

問題 コマンドラインから Visual Studio Code を起動したいが、どう設定すればいいか不明。 環境 Mac OS X 10.10.5 Visual Studio Code 1.2.1 解決 コマンドパレットから shell Command: Install 'code' command in PATH を実行する。アンインストールも同じ…

Ueberauth: (FunctionClauseError) no function clause matching in Keyword.merge/2

問題 phoenix に ueberauth_identity を組み込もうとしたところ、コンパイル時に (FunctionClauseError) no function clause matching in Keyword.merge/2 というエラーが発生する。 環境 Elixir 1.2.6 Phoenix 1.1.4 ueberauth_identity 0.2.3 解決 config.…

(PHPUnit 5 未満では)データプロバイダでモックオブジェクトを作成しないほうがいい

前提 PHPUnit 5 未満を使用している(問題の確認をしたのは PHPUnit 4.8.21)。 問題 指定したメソッドが一回だけコールされることを確かめるテストで、指定したメソッドが一回も呼ばれていないのにテストが成功してしまう。 モックオブジェクトはデータプロ…

はてなブログでElixirのコードにシンタックスハイライトを適用する方法

2015/11/18 時点で、ここを見る限りElixir のシンタックスハイライトは未対応。 でも、大丈夫 Elixir と Ruby は見た目が似ていると言われている。ruby を指定しておけばそれっぽくハイライトされる。 defmodule, defmacro などなど Elixir にしかないキーワ…

HTTPリクエストからChannelへメッセージを送る

GETやPOSTなどのHTTPリクエストを受け取り、その処理の中でChannelにデータを送信したい場合、以下のように書くことでメッセージを送信できる。 HelloPhoenix.Endpoint.broadcast_from! self(), "rooms:lobby", "new_msg", %{uid: uid, body: body} http://h…

コマンドラインの引数を得る方法

Elixirでコマンドラインのツールを書く方法が(自分の観測範囲内では)二通りある。 一つはスクリプトとして実行する方法。もう一つは、escript を使う方法(こっちの方法も名前からするとスクリプトとして実行されてるっぽいけど)。 スクリプトとして実行…

Elixirで正規表現

Elixir の正規表現は Regexモジュール を使う。 仕事ではPHPを書くことが多い。PHPの正規表現は PCRE関数 が標準的だろう。普段使うPCRE関数をElixirのRegex で置き換えるとしたらどうなるのか? 比較の対象は preg-match と preg_replace の二つにする。理由…

Elixirのドキュメント生成方法

mix.ex の deps に ex_doc と earmark を追加する。バージョンは最新版で。 defp deps do [{:ex_doc, ">= 0.0.0", only: :docs}, {:earmark, ">= 0.0.0", only: :docs}] end パッケージのダウンロードとコンパイル $ mix deps.get $ mix deps.compile 環境変…

prefecture_jp というライブラリを作成した

prefecture_jpというライブラリを作成した。Hexにも上げた。 機能 都道府県コードから都道府県名への変換、またはその逆。都道府県コードは JIS X 0401 に対応(0埋め2桁の数字)。 使い方 単体で 都道府県コードから都道府県名を検索 iex> PrefectureJp.fin…

Elixir v1.1.0

v1.1.0 がリリースされていた (下書きしているときは、v1.1.0 だったけれど、現在の最新版は v1.1.1)。 機能追加で特記すべきことは、Enum, Dict, Task への関数の追加と、MapSet 型の追加、と書かれている。HashSet よりも速く、今後はSetの実装はMapSetが…

Elixir1.0.5 は Erlang18 に未対応ではなかった

というのを初めて知った。 きっかけは、dialyxir を使おうと思ったから。 dialyxir をインストールする時の必ずエラーが発生しインストールに失敗する。 エラーの内容は以下の通り。 Creating PLT /home/ymmtmsys/.dialyxir_core_18_1.0.5.plt ... ** (Funct…

HTTPoisonのプーリング

HTTPクライアントにHTTPoisonを利用してみた。 同時実行数を増やすと50コネクション以上のコネクションは作成されないことがわかった。コードを見てみると、内部ではhackneyが使われていることがわかった。 hackney のドキュメントをみると、何も指定がなけ…

Phoenix で Poolboy を使ってコネクション(プロセス)プーリング

Poolboy を使ってコネクションプーリングができるようにする。接続先は memcached。 memcached のクライアントにはmcdを使った。 サンプルのhello_phoenixを元にした。手を加えたファイルだけ以下に貼っておく (ちなみに Phoenix は v1.0.0)。 実行してみと…

Phoenixのデプロイ

Erlang (Elixir) の機能の中で気になっているのが、ホットデプロイだ。といっても、そういう機能があるからといって気軽にデプロイできるものでもないらしいけど。 デプロイに関するスライド。 http://sile.github.io/slide/kbkz_tech_05/#/ http://www.slid…

mix phoenix.new のオプション

アプリケーション作成時のオプションに何があるか調べてみた(といっても、大して調べてないけれど)。 答えはここに。 --app アプリケーション名?よくわかってない。 --module モジュール名を指定する。phoenix.new したときのディレクトリ名とモジュール…

Phoenix のアップデート

v0.17.0 がリリースされていたので更新してみる。フレームワーク(というか、Mixでインストールしたライブラリ)をアップデートするのは今回が初めて。 % mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v0.17.0/phoen…

求めていたのはinspect/2だった

to_string/1 ではなくinspect/2 だった。 iex(1)> to_string %{a: 1, b: "hoyhoy"} ** (Protocol.UndefinedError) protocol String.Chars not implemented for %{a: 1, b: "hoyhoy"} (elixir) lib/string/chars.ex:3: String.Chars.impl_for!/1 (elixir) lib…

IEx.Pryでデバッグ

ここで デバッガみたいなのはある? と書いた。調べてみたところIEx.pryが使えることがわかった。 使い方 大雑把にいうとこんな感じ IEx モジュールを require する。 ブレイクポイントコードに仕込む。 iex でサーバを起動する リクエストを出す。 ブレイク…

PhoenixのLogger

とりあえず、アプリが起動する状態になった。 Phoenix・Elixir をちょっとさわって思ったのは、コード上に型が現れてれていないとなにかと調べにくい、ということ。馴染みのある言語なら、型が現れてなくてもなんとかなっちゃうんだけど、馴染みのない言語だ…

Phoenixを始めてみた

Phoenix が気になったので、さわり始めた。 Phoenix は Elixir で書かれていて、アプリを作る場合も Elixir で書く。Phoenix もElixir も今まで使ったことがなく、初めての言語、初めてのフレームワークで、いろいろとつまづくことが多そう。その反面、面白…

mipmap

問題 R.drawable.ic_launcher と書くと Cannot resolve symbol ic_launcher というエラーが出る。 解決 drawable ではなく mipmap を使う。R.mipmap.ic_launcher。 アプリを Nexus 6 と Nexus 9 に備えましょうgoogledevjp.blogspot.jp 現在使用している And…

Google Play services out of date

問題 Androidアプリ開発時以下のようなログが出力され、アプリが落ちることがあった。 Google Play services out of date. Requires xxxxxxx but found yyyyyyy xxxxxxx や yyyyyyy バージョン番号。 解決 「Google Play 開発者サービス」アプリをアップデー…

UNIXの哲学と関数型プログラミング

UNIXの哲学と関数型プログラミングは共通しているところがあるよね、というのを最近同僚と話した。 ここでいうUNIXの哲学とは スモール・イズ・ビューティフル 一つのプログラムには一つのことを うまくやらせる ソフトウェアの挺子を有効に活用する…

PHPのjson_encode

少数点以下の数が0の場合はコンパクトになる! 123.45, 'bar' => 658.00]) . PHP_EOL; # => {"foo":123.45,"bar":658} これが原因か...

不正なHTTPヘッダ

リバースプロキシとしてアプリケーションの前にnginxを置いている. あるとき, アプリケーションにリクエストヘッダが渡らないんですけど, という問い合わせがきた. うーん, 自分が使っている分にはヘッダは渡ってきてるんだけどな... とりあえず, どんなリク…

optparse-applicative

optparse-applicative を使った。そのコードは ここ。 optparse-applicative は、コマンドラインのオプションを解析するライブラリ。使い方に関してはここをよく参考にした。 オプションの解析だけでなく、必須パラメータの解析も同時に行ってくれて便利。 P…

Data.Sequenceメモ

高速なキューData.Sequence. 空のキュー Prelude Data.Sequence> empty fromList [] キューの先頭に要素を追加 Prelude Data.Sequence> 1 <| 2 <| 3 <| empty fromList [1,2,3] キューの末尾に要素を追加 Prelude Data.Sequence> empty |> 1 |> 2 |> 3 fromL…

変数のスコープ

日頃 JavaScript を書かないのがたたって、変数のスコープがどこまで有効なのかわからなかった。 問題となったのは以下のコード。変数hoyはcatch節でも有効なのかどうか。 try { var hoy = "HoyHoy"; throw "exception"; } catch (e) { console.log(hoy); } …

社内のLTに発表者として参加した

発表者として参加したので振り返り。 悪かった点 言いたいことは 1 つに絞る 言いたいことが2つあったので、両方とも盛り込んだ。振り返ってみるとどちらとも中途半端な説明で終わっていたような。 LTということで持ち時間も限られていて、詳しく説明できな…

小説家という職業 を読んで

「小説家という職業」という本を読んだ(小説家になりたいと考えているわけではない)。 小説家という職業 (集英社新書)作者: 森博嗣出版社/メーカー: 集英社発売日: 2010/06/17メディア: 新書購入: 7人 クリック: 273回この商品を含むブログ (103件) を見る…

HTTPって意外に難しい

web

長い間Webサービスの開発に携わっているのだけれど、HTTP について全然理解していなかったんだ、と思わされる出来事があった。 そのこととは、名前ベースのバーチャルホストのこと。今までは、ドメイン名を変えれば同じサーバ上に複数のサービスを稼働させら…

はてな エンジニアブロガー祭りに参加して

ここ最近ブログを書いていなかったけれど(確認したら 2013年8月8日が最後だった)、書かかないのは損なんんじゃないのか、と思った。 なので、具体的な目標はないけれど、できるだけ書いてみようと思う。 その一歩目がこれ。

Aeson でオプション値を含む JSON を扱う.

JSON の要素が全部が必須であれば簡単だけれども、そうでない場合が往々にしてある。公式のドキュメントにはサンプルがなかったので、ここにメモしておく。 値なし Person の middleName がオプション値。型は Maybe Text。パース時に (.:?) を使用する。mid…

($) と (.)

($) と (.) のことをよくわかっていないので調べる。 ghci で見てみる。 Prelude> :i ($) ($) :: (a -> b) -> a -> b -- Defined in `GHC.Base' infixr 0 $ Prelude> :i (.) (.) :: (b -> c) -> (a -> b) -> a -> c -- Defined in `GHC.Base' infixr 9 . ($)…

ping

Hakell で ping を作った。Haskell で ping を作ろうと思ってから2年以上も経ってしまった。 コードは Gist にある。 ping を作る中で一番苦労したところは、送信するパケットを作成ところ。String (Char) でどうやってデータを作ればいいのかわからなかった…

ネットワークプログラミング(サーバー編)

そろそろネットワークのプログラムを書いてみようと思ったので、echo サーバを書いてみた。 意外に簡単に書けてしまった。 C しか知らなかった頃は、頑張って scoket, bind, listen ... とかシステムコール呼び出してたけど(あと引数の構造体を作るのが面倒…

go

Haskell のライブラリのソースを見ていると、go というローカル関数名がよく使われているのに気付く。今日はData.Map のソース を読んでいたけれど、go だらけだった。 なぜだろうと思う人は他にもいるようで stackoverflow にそのことに関する質問が投稿さ…

foldlに無限リスト?

無限リストに foldl を適用すると停止しないと言うのを前に書いたが、なぜ停止しないのだろうか。 なぜ停止しないのか foldl の定義はこうなっている。 foldl f z0 xs0 = lgo z0 xs0 where lgo z [] = z lgo z (x:xs) = lgo (f z x) xs f を(&&) とした場合…

foldr をやっと正しく理解した

今まで foldr についていい加減な理解をしていたが、やっと正しく理解できた(気がする)。理解できていなかったのは、無限リストに適用しても停止する(ことがある)のは何故かというところ。 よくある例 Prelude.and を foldr と (&&) を使って作ってみる…

Twitterで認証する方法(Batch)

Twitter のタイムラインを取得して、どうのこうのするバッチを作っている(まだ途中)。Twitter のタイムラインを取得する API は認証が必要。Webサービスやアプリ等は OAuth を使うが、バッチの場合はそうも行かない。バッチなど人が介在しないシステムでは…

PG Backups を使った DB のインポート

開発環境の DB の中身を本番環境 (Heroku) の DB にインポートする手順。詳しくは https://devcenter.heroku.com/articles/heroku-postgres-import-export を参照。開発環境の DB は Postgres. 1. 開発環境の DB を dump する。 % PGPASSWORD=myapp_password…

Heroku のアプリに独自のドメインを割り当てる(ムームードメイン)

ここを参考にする。 前提 xxx という Heroku のアプリを作成したとする。作成したアプリの URL は xxx.herokuapp.com www.example.com というドメインを作成したアプリに割り当てる。 Herokuの設定 割り当てたいドメインを追加する。Web の管理画面からでも…

Gem の作成 (sinatra-ajax_only)

思い立ったが吉日、Gem を作成することにした。 どんな Gem かというと、Sinatra の Extension で、Ajax でのリクエストのみを受け付けるルートに Ajax でないリクエスト が来た場合に ステータスコード 403 を返すというもの。公開した Gem はこちら。 403 …