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

mmag

ハマったことメモなど

Vector ClockとCRDTsについて調べてるけどまだ上手く説明できない

社内のElixir勉強会で↓のtalkを観た。 Phoenix Presenceを実装するためのベースになっているVector ClockとCRDTsについて調べたり議論したのだけれど、混乱して「よくわからんね」となったので宿題として調べている。色々わかってきて「こういうことかな〜」…

Elixir Meetup #2 でLTしてきた

できないことはPortで外注 from Joe_noh www.slideshare.net なんかkeynoteからPDFにしてslideshareに上げたら日本語消滅しました。 なのでpptxにしてから上げたので、フォントが意図したものじゃないのですがご勘弁ください。 自分が話したのは、Portモジュ…

Ecto 2.0.0-betaを試す (3)

今回はEcto.Multiです。 なにそれ Ecto.Multiとはそもそも何かというと、1つのトランザクション内で行われるべき複数のRepo操作をまとめるデータ構造です。DBを操作する前にどのような変更がなされるのか覗き見することができます。これの導入に伴い、before…

Ecto 2.0.0-betaを試す (2)

第2弾です。 今回はリレーションです。以前からあるhas_one, has_manyを復習し、新たに入ったmany_to_manyを試してみます。 TL;DR これ書いてる時点のコードはこちら。 github.com has_one User has_one Profile を作っていきます。Userは前回つくったので割…

Ecto 2.0.0-betaを試す (1)

はい。 Ectoはしばらく触っていなかったのですが、v2.0がもうすぐということで触ってみました第1弾。 まずはプロジェクトをセットアップして単純なinsertのテストを通すところまで。 TL;DR こちらに今日時点のコードがあるので、細かいとこは飛ばしていきま…

Poolboyメモ

社内勉強会でpoolboyで遊んでみて、いろいろ調べたのでこっちにも貼ります。 poolboyとは プロセスプールを管理してくれるErlangのライブラリ。poolboyはワーカープロセスをいくつか予め起動しておく。それらを利用したいクライアントは、poolboyに「どのプ…

接続端末が同期して光るサイリウムみたいなWebアプリをつくった

やったこと 年末に宴会芸みたいなものをやることになり色々と何をやろうかと話し合っていたのですが、どうにもオモシロな方向に振り切れなさそうだね〜となり、エンタメ方向なことをやりました。具体的には、 数名が舞台で踊る 観客には、あるサイトにスマホ…

iexで「recompile」が便利だった

iex(1)> MyApp.MySup.start_my_server {:ok, #PID<0.101.0>} iex(2)> recompile 15:34:42.541 [info] Application my_app exited: :stopped Compiled lib/my_app/my_app.ex Compiled lib/my_app/my_sup.ex Generated my_app app {:restarted, [:my_app]} い…

Phoenixでgulpとか(brunchじゃないやつ)を使う

Phoenixフレームワークでは、mix phoenix.serverするとデフォルトでbrunchが立ち上がって、 web/staticらへんのファイルを監視してくれます。 とてもありがたいのですが、「え〜、brunch???」と思う方もいらっしゃるでしょう。 そんなときは、おもむろにconf…

YAPC::Asia 2015に参加しました

8月20日の前夜祭から22日まで、YAPC::Asia 2015に参加してきたので、所感を書きます。 技術的なこと Kazuho Okuさんの「HTTP/2時代のウェブサイト設計」が印象的でした。 HTTP/2時代のウェブサイト設計 from Kazuho Oku www.slideshare.net これまでは、HTTP…

phoenixでGET以外のリンクが効かなくなったときのメモ

なにが起きた phoenixのv0.16.0が出たのでガッとアップデートしたら、一緒にphoenix_htmlとかもバージョンが上がりました。動くっしょ〜と何も考えずにいたら、動かなくなってました。 症状は、linkヘルパで作ったリンクの内、GET以外(確認したのはPOSTとDELE…

Elixir Playgroundが便利っぽい

My @elixirlang playground is finally out! You can run code (!) & share/embed snippets. Have a look: http://t.co/dYoYOxMPOn #myelixirstatus— Steve Domin (@stevedomin) 2015, 8月 10 ということなので使ってみよう。 便利っぽい。

Ectoで複数のRepoを使う

なにがしたい 例えば、レガシーなシステムを徐々にモダンにしていきたいので、古いDBと新しいDBを 共存させたいとします。要は、異なる接続先の2つ3つのDBを使いたい。 どうする Repoを2つ作ります。 以下、Phoenixのディレクトリ構成に合わせて説明します。…

Ectoで生成されるidカラムの名前を変える

Phoenix v0.14.0, mariaex v0.3.2. 発端としては、デフォルトでつくられるidの名前をevent_idにしたかった。というか、事情によりしなければならなかった。table/2にprimary_key: falseを与えるとidが作られないというのはすぐにわかったのだけれど、auto_in…

Phoenixでconfirm付きのdelete

phoenix_htmlのlinkヘルパは、リクエストメソッドがgetの場合は普通にaタグでリンクを作り、そうでない場合はaタグをformでラップして、onclick属性が働くような組み立て方をしてくれます。 で、何かリソースをdeleteするようなリンクでは、「ホントにOK?」…

PhoenixでDBにseed

これが正解みたいな方法は無いのでは。多分。 # priv/repo/seeds.ex alias MyApp.User alias MyApp.Repo Faker.start Enum.each 1..99, fn i -> params = %{name: Faker.Name.name, email: Faker.Internet.email} User.changeset(%User{}, params) |> Repo.i…

Rails Engineでマウントする側のモデルとされる側のモデルのassociation

目論見 MyAppという普通のRailsアプリにMyBlogというエンジンをマウントする。 MyAppにUserモデルがあることをMyBlogが知っていると仮定(設定できるようにしたほうが良いけどとりあえず)。 MyBlogにはArticleモデルがあり、Userには複数のArticleを持たせた…

HTTPoisonでパラメータありGETリクエスト

hackneyベースのElixir用HTTPクライアントライブラリのHTTPoisonでGETリクエストを送ろうとしてハマったのでメモ。 どこでハマったかというと、GETパラメータの指定方法がよくわからんかった。結論はこれ。 params = [key1: 1, key2: 2] HTTPoison.get!("htt…

社内Elixir勉強会をやってて思ったこと

5月のアタマから、だいたい週1回のペースで社内Elixir勉強会をやってきました。 新卒のペーペーですが、ちょっと思うことがあるので、だらだら雑にポエムを垂れ流しておきます。 特に、何か主張したいことがあるわけじゃないです。 ちなみに勉強会の資料はこ…

社内でElixir勉強会をした

GMOペパボ社内で「おいお前らElixirやるぞ!!」なことをしました。 資料はこちら Elixirだ 第1回 - 基礎だ - from Joe_noh 一応社内のエンジニアに届くかたちで呼びかけはしましたが、諸々の都合で急遽開催したので、結果ワタシが同期4人に対して1時間ほど…

第1回ペパボテックカンファレンスに行ってきた

はい。 行ってきました。 メモも取りましたが、こちらのブログの方が圧倒的にまとまっているのでリンクしてお茶を濁します。 第1回ペパボテックカンファレンス参加レポート - りあるふぁいとぷろぐらまーrfp.hatenablog.com さて、皆さんの発表を聞いた感想…

MapSetがElixirに入るとのこと

Erlang 18のリリース後、Elixirに新モジュールMapSetが追加されるようです。 lexmagさんが実装・ベンチマーキングし、HashSetと比較した結果がこちら。 MapSet evaluation - elixir#3242 ひゃー。爆速。 この記事を書いている時点ではまだ全ての関数のベンチ…

GMOペパボに入社しました

以上だッッッ!!!!!!1

phoenix.newがarchiveされるっぽい

以前、Phoenixプロジェクトの新規作成というエントリで書いた方法が、v0.10.0で導入されたbrunch周りでエラーを吐くようになっていて困ったっちー。 そこで、ふとphoenixframework/phoenixのmasterの様子を見てみると、こんなのがマージされてた。さすが、バ…

ElixirのHashSetを読んだ

lib/elixir/lib/hash_set.exです。 なにするやつか iex(1)> set = HashSet.new #HashSet<[]> iex(2)> set = HashSet.put(set, :a) #HashSet<[:a]> iex(3)> set = HashSet.put(set, :b) #HashSet<[:b, :a]> iex(4)> set = HashSet.put(set, :c) #HashSet<[:c,…

ember-cli adapter generate [検索]

$ ember g adapter ApplicationAdapter --base-class=Fixure --base-classには"Adapter"を付けないもよう。 追記 なんかトラブるのでember gはほどほどにしようと思いました まる

Mixプロジェクトに同梱したファイルを参照する

ある新しいライブラリに以下の問題があってムムッと思ってプルリクした。 例えばlib/data/people.ymlを置くとする。lib/my_app/module.exでこのファイルを読みたい。 # ダメな例 "lib/data/people.yml" |> File.open # 良い例 "../lib/data/people.yml" |> P…

メモ

Phoenix + Ember(Ember CLI) priv/static/js/にember-cliプロジェクトのdistへのsymリンク貼る。 web/templates/layout/application.html.eexとかに <%= if Dict.get(@conn.assigns, :ember_page, false) do %> <script src="js/dist/assets/vendor.js"></script> <script src="js/dist/assets/emph.js"></script> <% end %> とか書く。さらに、dist/ind…

Phoenixプロジェクトの新規作成

※ 追記 このエントリの内容は古くなっています。以下の記事を参照してくださいな。 phoenix.newがarchiveされるっぽい - mmag 追記終わり。 -- おひさ。 いままでは本家をgit cloneして目当てのバージョンのタグにチェックアウトして、 $ mix phoenix.new my…

EmberでError: No model was found for '0'

なんかエラーでた。 RestAdapterを使っているときで、バックエンドはRailsでした。 バックエンドがjbuilderでjson作って返しているのですが、そのjsonの形式が原因でした。 scaffoldしっぱなしだと、 # app/views/posts/index.json.jbuilder json.array!(@po…

Grape使いたくなかったときのメモ

なんか新しいディレクトリ掘るじゃないですかー、Grapeってー。 controllersの中に入れたりしてもいいらしいですけどー、MVCからハミ出してる感じがしてー、なーんか好きじゃないんですよー。 ということを考えたときのメモ。 class PostsController < Appli…

ember new で Request path contains unescaped characters

ember-cli使ってember new hogeしたら、 前略 create tests/helpers/resolver.js create tests/helpers/start-app.js create tests/index.html create tests/test-helper.js create tests/unit/.gitkeep create vendor/.gitkeep Installed packages for tool…

ember-simple-auth-deviseとユーザ登録

追記 なんか正しく動いてなさげ。あとで直す、または別の方法を検討。 追記終わり 最近Ember.js関連のなにかを見ています。 Emberで認証をやろうとしたときにember-simple-authが便利です。バックエンドがRailsでDeviseを使うならば、ember-simple-auth-devi…

Elixirマクロの展開後コードを見る

Elixirのマクロはコンパイル時にバーっと展開されるわけですが、本当に自分が望んだ形に展開されてるのか、不安になって眠れない夜もあるでしょう。 ということで、複雑なマクロを書いちゃったときはテストで展開後のコードをチェックするのも1つの手です。 …

Hex 0.6.0の新機能hex.docsしてみた

Elixirにはhexというパッケージマネージャがあって、そのv0.6.0がリリースされました。 目玉機能はhex.docsで、これで自分のライブラリのドキュメントをhttp://hexdocs.pm/ライブラリ名/バージョン番号に公開できます。バージョン番号を省略すると最新版に飛…

Phoenix+Houndでテスト回すと警告いっぱい出る

Elixir製の代表的ウェブアプリフレームワークPhoenixで、かの有名なRails Tutorialをなぞってみているのである。 Joe-noh/ph_microblog まだ途中だし、よくわからんとこは端折っているのである。 途中からはCapybaraが出てくるので、Houndを使って結合テスト…

mix deps.getでエラったら

Elixirで何かしようとしたら必ずmix newするのであります。 そしてElixirやErlangのライブラリを使おうとしたら、mix.exsのdepsに書くのであります。 大抵の場合は、 [{:hoge, github: "someone/hoge"}] みたいな感じでいけるけれども、git cloneにも色々あ…

Elixirのガード式でマクロが使える

という驚きの情報を得た!!!1 ガード式では数種類の関数しか使えず、ユーザが定義した関数を使おうとするとエラーになるのは皆様ご存知かと思います。なので関数の代わりにマクロにすれば使えちゃうのか!?そんなことでユートピアが実現するのか!!??…

Elixirのsupervisor, worker, superviseヘルパーがイケメンだった

最近Elixirのことしか書いてないです。たぶんもうしばらくこんな感じです。 ErlangでOTP使うときとか、スーパーバイズしたい子供をつくるときに、child_specと呼ばれる書き方でどんな子供をつくるか指定します。公式のドキュメントにはこんな風に書いてあり…

elixir-modeのタブインデントをスペースにした

使っていたノーパが壊れ、勢い余ってMBAを注文して舞い上がっている私です。 せっかく環境が新しくなったので、ghqとかモダンなものを入れてますし、せっかく環境が新しくなったので、前から気になってたelixir-modeのタブインデントをスペースにしようと思…

Elixirでループ使って関数定義しようとしてハマった

例えば、 defmodule Greeting do Enum.each [:hello, :goodbye], fn (greeting) -> def unquote(greeting) do IO.puts unquote(greeting) end end end というもの。上手く使えばコード量がドチャクソ減って幸せになれるのですが、「invalid syntax in def :h…

Elixirで新しく使えるようになったオペレータ

つい先ほどElixir 1.0.0がリリースされました。めでたいめでたい。 個人的には、1.0.0-rc2で入った変更に注目しております。 [Kernel] Add <~, ~>, <<~, ~>>, <~>, <|> as operators これです。 次のようなことができるようになりました。 defmodule M do de…

ElixirのPlug

今日はPlugです。 Plugとは まずPlugとはなんぞやというところですが A specification for composable modules in between web applications Connection adapters for different web servers in the Erlang VM だそうです。イメージはRackです。今はCowboyと…

ElixirのOptionParser

について述べます。 準備 まずは今回使うサンプルをば。この辺にはあんまり触れません。 mix new optsみたいなことして、 # lib/opts.ex defmodule Opts do def main(args) do OptionParser.parse(args) |> IO.inspect end end # mix.exs defmodule Opts.Mix…

Elixirのマクロについて浅く語ってみる

1.0のリリースが近づき、Elixir熱の高まりを感じる今日この頃、皆様いかがお過ごしでしょうか。 本日は、Elixirの特徴の1つであるマクロについて書いておこうと思います。対象読者は、Elixirの文法くらいはなんとなく分かるっていう人かな。 コードを書くコ…

ハッカソンした

大学内の数人でハッカソンした。概要。ハッシュタグは#nut_hackathon。 自分の成果は以下の通り。全体的にjs書いてた。 ホントなんだこれってものしか浮かばない。何やってんだ俺って思ったら負け。 あと今回はいろいろ考慮して、各自開発→集まって発表の流…

MixにTaskを追加する

ElixirにおけるMixは、Rubyで言うとRakeポジションにあたるモノ。 当然タスクを自作できるはず。 まずmix new hogeして、ディレクトリ掘削作業。 $ mkdir -p lib/mix/tasks/hoge hogeってのはプロジェクト名と揃えておいたけど、fugaでもOK。いっぱい作って…

mix ecto.drop → no password supplied

$ MIX_ENV=dev mix ecto.drop Repo ** (Mix.Error) The database for repo Repo couldn't be dropped, reason given: Password: psql: fe_sendauth: no password supplied . lib/mix/tasks/ecto.drop.ex:32: Mix.Tasks.Ecto.Drop.run/1 (mix) lib/mix/cli.ex…

codepointsとgrapheme

Elixirのドキュメントを眺めていて、String.codepointsとString.graphemesの違いがわからなかったので調査。 ソースにはこんなコメントが。 複数の記号で1文字をなすものを表現するのがGraphemeという解釈でいいのかな。 つまりElixir特有のものではなくてUn…

coffee-scriptとmocha

js周りはあまり詳しくないのですが、mochaというテストフレームワークがあるそうですね。 そのままだとcoffee-scriptには使えないのでテストするときにオプションを渡してあげたりCakefileに書いておいたりするわけですが、どうも動きませんで。 みなさん $ …

テーマはFB matteをベースにしてます。作者さんに感謝を込めて。