mmag

ハマったことメモなど

Gettextってよくできてるんだな、という感想

Elixir経由でしか使ったこと無いけど、Wikipediaを読むとどれでも大体同じっぽい。 joe-noh.hatenablog.com なんでよくできてると思ったかというと、仕事でRails書いててtranslation missingをチラホラ出してしまい「直してもまだ漏れがあるのかないのかわか…

dev.toコードリーディング会に参加した

smarthr.connpass.com 行ってきました。十数人で各々が好きなところから読み始めて、最後に見所や気づきを喋る流れでした。initializersを読んでいく人やモデル中心に見ていく人など様々。近日中に全員のメモが公開されるとのことですので、そのときはリンク…

PhoenixでPage Specific JavaScript

と言ってもすでにインタネットに情報があります。 medium.com まずはviewモジュール名(@view_module)とテンプレート名(@view_template)からjsファイルのパスが導出できるように取り決めしておき、bodyタグのdata属性にそのパスを吐き出しておく。で、DOMCont…

GenStageのcastやcallもdispatchするんですね

github.com 以前ふむふむ眺めただけだったので触ってみたら微ハマりした。 defmodule Producer do use GenStage ... def enqueue(item) do GenStage.cast(__MODULE__, {:enqueue, item}) end def handle_cast({:enqueue, item}, state) do {:noreply, [item]…

EctoからSQL関連の機能が分離されるらしい

github.com EctoはポスグレなんかのRDBMSと使われることが多いと思われるけど、役割としてはschemaでデータの構造を定義したりchangesetでデータを操作したりrepoを通して実際にデータを保存したりといろいろあり、SQLを扱うことだけが仕事じゃない。どんな…

Apolloのcache updateがやや辛そうに見える

使っているのはvue-apolloだけど。 Mutationした結果をつかってquery cacheを更新する、ということができる。これによってもう一回queryしなくてよくなるなどの効果がある。Optimistic responseと組み合わせると、迅速なフィードバックを利用者に返すことが…

ElixirのConfigに関する議論が盛り上がっている

これ elixirforum.com 課題意識としては、Mixプロジェクトにおけるconfigはアプリケーションが起動するときに読み込まれるけれど、その一方でそれをreleaseビルドするときはコンパイルするときに読み込まれるという違いがあり、混乱のもとになっている、とい…

Atomic Designのあいつら

Atomic Designという、コンポーネント単位で設計してく手法というか考え方みたいなものがあるわけですが、様々な解釈があるようでみんな違うこと言ってる気がしている。ここ半年くらい仕事とか趣味プロダクトで試したり、あちこちブログ読んだりしてなんとな…

GraphQLやってる

前に書いた社内向けの日報Webサービスで、RESTful(RESTish?)なAPIからGraphQLなAPIに書き直しをしてる。 サーバ側 そもそもそんなに大きなアプリケーションではないので、雑にhas manyやらassociationsを辿っていく程度のものはすぐにできた。認証はAuthoriz…

Svelteをちょっと触った

Svelte • The magical disappearing UI framework Syntax的なところはVueっぽいけど、特徴的なのは $ svelte compile --format iife App.html > App.js とエントリポイントのhtmlからjsを生成するとこ。生成されたコードにはSvelteのコードは含まれていない…

使ってない依存パッケージがmix.lockに残ってるとき

なんやかんやで、mix.exsからは消えてるのに、mix.lockには残っちゃってる依存性があるとき。 $ mix deps.unlock --unused でmix.lockから消せる。

AbsintheでContextを組み立てたりMiddlewareを挟んだり

最近AbsintheをつかってGraphQLサーバを実装しはじめているのですが、これどう書くんだろと思って調べたことがあったのでメモ。 調べたと言ってもドキュメントに全部書いてあったので、ドキュメント写してるみたいになってる。まあいいよね。 Context GraphQ…

Erlang 20.1.7でglobal名が衝突してtakeoverが失敗する

www.manning.com この本を読みながら遊んでいたらハマった。 chuckyというアプリケーションをつくってfailoverとtakeoverを試してみる章で、failoverはうまくいくけどtakeoverできない、という現象が見られた。 A, B, Cという3つのnodeがあり、Aでchuckyが動…

one_for_allとrest_for_allはtemporaryなプロセスの死で発火しない

再起動戦略one_for_allのSupervisorがいたとして、そこにtemporaryなWorkerとpermanentなWorkerがぶら下がっているとします。 permanentがWorkerがクラッシュすると、temporaryなWorkerが落とされて、両方再起動します。one_for_allなので。 しかしながら、t…

umbrellaではRPCしてくれる君をつくろうという話

Elixirのumbrellaは知っていましたが、実際これ分散させて動かすときどうなんのさ、というイメージがぱっとしていなかったのですが、こちらを読んだら腹落ち感が生まれたのでメモ。特にInterface Moduleを切った上でRPCする、というところ。 medium.com 例え…

お仕事のVue.jsアプリに入れてみたものたち

最近はカラーミーリピートのフロントエンド開発で生計を立てています。お仕事なのでいろいろ施策があり優先順位があるわけですが、今のチームは自由研究と称して優先順位外のことをしてもほどほどなら許される空気があるので、興味あるツールなどをお試しし…

Absintheをちょっと触った

Absinthe(アブサン、アブサント)というElixirのライブラリがありまして、GraphQLのAPIやってみよということでちょっと触りました。 http://absinthe-graphql.org/ ほんとにちょっと触っただけなので見せるコードもありませんが、いくつか思っていることを…

v-modelを受け付けるカスタムコンポーネントの書き方の好み

Vue

Vue.js 2系を対象とします。 何がしたいかというと、 <my-great-text-input v-model="text" /> ということがしたい。 とりあえずドキュメントを見ると、以下のような方法が書いてある。 https://jp.vuejs.org/v2/guide/components.html#カスタムイベントを使用したフォーム入力コンポーネント <template> <input type="text" :value="value" @input="updateText"> </template> <script> e</my-great-text-input>…

OpenAPIの3.0.0が出てた

1週間くらい前にリリースされていた模様。semverになってる。 github.com 気になるとこ レスポンス深い https://github.com/OAI/OpenAPI-Specification/tree/master/examples/v3.0 などの例をちらっと見た程度だけど、以下のようにレスポンスの書き方がやや…

カッコの周りの空白について

function foo() { ... } ていうコードを書いたらlintに怒られた。space-before-function-parenだそうで、 function foo () { .. } なら許してくださるらしい。 ギュってなってて読みづらいとかいう理由から生まれたんじゃないかと思うのだけど、エディタのフ…

AngularのHttpを使うサービスの単体テスト

4系の話。Httpを使ってAPIアクセスするようなサービス(ここではPostService)のテスト。もう一度同じものを書けと言われても無理だなと思ったので書いておく。 import { TestBed, inject, async } from '@angular/core/testing'; import { MockBackend, Moc…

ReDocに食わせるOpenAPIにはoperationIdを書こう

最近ReDocを触っていてヤヤハマリに遭遇することがあるので書いておきます。 github.com operationIdってなにさというと、OpenAPIのOperation Objectの一項目で、操作を識別するための一意な文字列のことです。ReDocに食わせるOpenAPIには、と書きましたが、…

minikubeを触った

ふとkubernetesを触ってみようと思い、ローカルで試すにはminikubeがよいということで試してみた。一通りチュートリアルをやってわかった気になったので、ちょっとした構成をつくってみたのがこちら。 github.com docker hubに上げてないイメージを使うため…

asdf-nodejsでgpgのエラー

最近macをセットアップする機会があったので、各言語のバージョン管理にasdfというやつを使い始めました。以前も一度試したのですが、なんだったか途中でコケてよくわからんから、まぁanyenvでいいか、となっていたので再挑戦。今度はそれなりにサクッと行き…

Phoenix v1.3からのディレクトリ構成をもう一度調べる

はいこんにちは。 Phoenix v1.3.0-rc.0がリリースされました。前リリースからの大きな変更として、Phoenixプロジェクトのディレクトリ構成がガラッと変わります。新たな構成に対応したジェネレータは、phoenix.*ではなくphx.*というタスクになっています。つ…

ニポポタマスを支える技術

こんにちは。 わたくし、勤め先の有志と社内向けの日報投稿Webサービス、ニポポタマス(通称ニポタマ)をやっています。元々は会社の開発合宿でつくりはじめたものですが、会社のみんなが日々の出来事、書きたいことを書ける場として、また僕ら開発者がやり…

あっちこっちでpreload問題

こんばんは。 Ectoでは関連を明示的にpreloadすることがよくあります。例えばUserがPostを複数持っていて、それをUserControllerのshowアクションでこんなjsonで返したいとき、 { "user": { "name": "joe_noh", "posts": [ {"title": "...", body: "..."}, {…

知らなかった、と言ったな。あれは嘘だ。

はい。 先日、Ecto.Changeset.change/2 知らなかった - mmagというエントリを書いたのですが、前に自分が書いたコードでchange/2使ってました。はい、知ってました。 例えば、UserとOrganizationがmany_to_manyな関係にあるとします。あるユーザを、ある団体…

Ecto.Changeset.change/2 知らなかった

Ectoのmany_to_manyのドキュメントを読んでいたら、使用例の中でEcto.Changeset.change/2という関数が使われていました。 構造体からchangesetをつくってくれる関数なようです。知らなかった。struct入れてもchangeset入れてもいいみたい。キャストやバリデ…

postcssで書いたものをwebpackで1つのまとめる

こういうやつ、いつもハマって時間使うので書いておきます。 postcssが〜とかではなく、extract-text-webpack-pluginがどんなやつなのか分かってなかったのが問題でした。これを使うと各loaderでコネコネした結果を指定したファイルに吐き出してくれます。こ…