Islands in the byte stream

Technical notes by a software engineer

DroidKaigi 2018で『すばらしきGraphQLのSEKAIへようこそ』という発表をしました

DroidKaigi 2018 に参加して発表してきました。 今回はDroidKaigiということでクライアントサイドの視点から解説しています。よって、サーバーサイドの実装についてはまったく触れていません。サーバーサイドの実装については以前発表をしたことがあるのでそ…

DroidKaigi PreludeのKPT

DroidKaigi Prelude - connpass DroidKaigi Prelude というイベントでDroidKaigiのセッションを徹底解説します! - Islands in the byte stream やりました。 運営の @okoysm さん、tarappo さん、および会場提供のDeNA様、ありがとうございました。また、一…

JavaScript Quiz: (new Array(2)).map($ => 'hello') === ?

タイトルの式を一瞬考えてから本文を読んでください ;)

Ruby 2.5未満でRuby 2.5のStructのkeyword_initを使う

追記: backports v3.11.0の時点ではstruct/new.rbの冒頭に変なputsがあるなど使われている形跡がありません。またフィールド名を予約語にすると使えないという問題もありました。一旦自前のmonkey patchを使うことにしてます。 NEWS-2.5.0 - Documentation f…

IntelliJ IDEAで特定行のGitHub PRを開く"Find Pull Request" pluginがまじイノベーティブ

Kazuho's Weblog: git blameでプルリクエストの番号を表示する をみて、vscodeとかIntelliJ IDEAのpluginないかな〜と思っていたら、IntelliJ IDEA用にはすでにありました。インストールして数週間使っていますが、git blame を眺める機会が激減していい感じ…

保育所の公式データは統一されたフォーマットで提供してほしい

三行まとめ 保育所*1の電子化データは提供元によってファイル形式もデータの構造も異なるためプログラムで加工しにくい 東京都の場合、認可保育所一覧はそれぞれの区が管理しており探すのが大変 保育所のデータはプログラムで加工しやすい統一されたフォーマ…

2017年まとめ

キャリア Bit Journey(as エンジニア)とSpeee(as 技術顧問)は引き続き スタートアップでサービス開発するのは学びがあってよい 技術顧問業は難しい。成果はあったりなかったりする 35歳になった 2017年の初頭に 定年説をめぐって — 1. ミームの濫用 – To…

GraphQLの基本用語

GraphQLって用語が分かりにくいんですよね…ということで社内用に作った用語集を公開しておきます。 GraphQL http://graphql.org/ グラフキューエル query language リクエストのフォーマットがGraphQLということ レスポンスはJSON(でもMessagePackでもなん…

caniuse.com が素晴らしいのでパトロンとして登録した

https://caniuse.com/ というサービスがあって、ブラウザごとのJSやHTMLの機能を調べられる(caniuse = Can I use X?) 超便利なサービスなのです。 自分のいるリージョンなども登録できて、ある機能を利用できるユーザーのシェアを数字でみられます。たとえ…

High Sierraには「アプリのリンクを踏んでもChromeの空白ページが開くだけ」というバグがあるっぽい

一時的な回避策ですが、このバグが発現する状態になったら「Chromeを再起動する」で回復するようです。このエントリを書いている時点でのmacOSの最新版は 10.13.2 (High Sierra) なので、以降のバージョンでは直ってるかもしれません。 ぼく自身はまだSierra…

railsdmでマルチテナント・ウェブアプリの話をしました

railsdm.github.io 発表:「マルチテナント・ウェブアプリケーションの実践」 一文でまとめると「HTTPのリクエストごと、あるいはjobの実行ごとにストレージの名前空間違うから気をつけような!!」ってのを常に意識する必要がありますって話でした。 なおEl…

DroidKaigi Prelude というイベントでDroidKaigiのセッションを徹底解説します!

DroidKaigi 2018 (2/8-2/9)の関連イベント*1としてDroidKaigi Preludeというイベントを企画しました。現在、参加者&LTを募集中です。 connpass.com メインセッションの「DroidKaigiセッション解説」を @shiraj_i さんと @muumuumuumuu さんといっしょにやり…

ISUCON7本戦で5位でした

ISUCON7 にチーム「スギャブロエックス」で参加して5位でした。 ベストスコアが29944点なので、せめてこれを最終スコアにしたかった…! チームメイト ISUCON7 勝てなかった - すぎゃーんメモ リポジトリ github.com 所感 今回は "Chair Constructor Online" …

ES modulesのexport defaultは使わないほうがよい

ES modulesにexport defaultってのがあるんですが、default exportのexport対象に名前が必須でないため、IDEによるコード補完と相性が悪いです。 他のところはどうしてるのかなと思って調べてみると、GoogleのTypeScript Style Guideでは禁止されてました。 …

nodejsの標準モジュールzlibはworker threadを使うらしく

Zlib | Node.js v9.2.0 Documentation Note that all zlib APIs except those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications. スレッドプール数は UV_T…

WebAssemblyをNodeJS Native Addonの配布形式として使う

三行まとめ 高い圧縮率をほこる gzipライブラリ zopfliをwasmにビルドして npmjs.org にリリースしてみた wasmはネイティブコードと比較してだいたい50%くらいの性能を期待できる emscriptenは N-API と比べると出来ることが少なすぎるのが課題 背景 WebAsse…

はてなブログのエントリにPlantUMLを埋め込む方法

PlantUML、便利ですよね。はてなブログでも使いたいですよね。ということでやってみました。 まずエントリの最後にこのスニペットを置きます: <script> var a = Array.from(document.querySelectorAll("pre.code")); a.forEach(function (pre) { if (pre.attributes[…

AssemblyScriptでHello, world!してみた

github.com AssemblyScriptという、TypeScriptのサブセットでありWebAssemblyにコンパイルできる言語があります。 ※ WebAssemblyについては WebAssembly の基礎 - nmi.jp などをどうぞ TSのサブセットとはいえ、WebAssemblyにコンパイルしやすくするために若…

ISUCON7 予選通過した!

スギャブロエックス(id:sugyan, id:kazeburo, id:gfx) で予選に出場して2日目2位でした。去年は予選敗退だったので2年ぶりの本戦出場です。 バランスの良い良問で大変楽しかったです。ISUCON運営チームに於かれましては大変おつかれさまでした&ありがとう…

compression-webpack-plugin + zopfli でgzip圧縮ファイルを用意する

sprocketsを使っているアセットは半ば自動的にgzip圧縮版ファイルが用意されるのでそれをnginxのgzip_staticなどでサーブすればいいわけですが、JSのビルドをwebpck化したときにそういえばgzipされたファイルを用意しなくなったなと。それでもまあ、nginxが…

GraphQLの型を補完する Date, BigInt, Any を提供する graphql_types gem を書いた

github.com クライアントサイドでもdecoderがないとただの文字列だったりオブジェクトだったりしますが、ひとまずRuby側だけでも。 Anyなんて使う機会あるの?って感じもしますが、「なんらかのオブジェクトの構造をもっているはずだが、クライアントサイド…

開発者向けにMarkdown JPというコミュニティを作ってみました

gitter.im Markdown自体の仕様については、CommonMarkに期待しているので commonmark.org でよい CommonMarkに収まらない拡張を日本語で議論できる場所がほしい ルビや数式など サービス間で(ある程度)互換性があることはMarkdownの大きな価値なので、その…

GraphiQL が "Mode graphql failed to advance stream." というエラーで起動しなったときのワークアラウンド

GraphiQL(グラフィクル)ってのはGraphQL(グラフキューエル)のAPI consoleです。GraphQL IDEと呼ばれることもあります。 github.com (現行バージョン: v0.11.5, バグ確認バージョン: v0.11.2) こいつには、どうも変なクエリを食わせると二度と起動しな…

yarnpkgのenginesのバージョンチェックを無効にする方法

yarnpkg v1.0から、 package.json の engines sectionのバージョンチェックが顕密になりました。これにより新しいnodejsやyarnpkgを試すのが面倒になります。 これにメリットを感じない場合は無効化しましょう。 具体的には、 ~/.yarnrc に ignore-engines t…

Rubyの型定義ファイルを中央repoにしないほうがいい理由

あるいは私がDefinitelyTyped (DT) が失敗だと思っている理由、です。 DefinitelyTypedは明確に失敗だと思っているので、あれを避けるのはそんなに難しくないかなと。まず (1) anyを認めて「型がなくてもいいや」という気持ちでいく (2) 中央repoは作らずそ…

TypeScriptでPromise.prototype.finallyを使う

github.com Promise.prototype.finally が stage-3 になって、 ES polyfill集である core-js にも v2.5.0 で追加されたので、babel-runtime などを使っている場合はcore-jsのバージョンを上げるだけで finally を使えるようになってます。 しかし、TypeScrip…

CommonMark v0.28 のイマイチなところ

作業メモとして。なお、 CommonMark ≒ GitHub Flavored Markdown くらいの感覚で書いてます(実際にはGFMはCommonMark + いくつかの独自拡張)。 http://commonmark.org/ https://github.github.com/gfm/ 膠着語分かち書きしない言語におけるスペースで区切…

Androidライブラリのためのmaskaradeというorgを作った

The Maskarade project · GitHub 最近イマイチAndroidの活動ができてないんですが、Androidライブラリのメンテを諦めたわけではなくて、たとえばOrmaとかはまだやりたいことがいくつかあるのでやるつもりはあります。一方で、ちゃんと新しいメンテナがいたほ…

builderscon 2017 tokyo に行った

builderscon tokyo 2017 - Aug 3, 4, 5 2017 いろいろな分野の人がいて非常に刺激になりました。来年はなにかネタを持っていきたい。 あと名札がリバーシブルなのよかった。なお一人ひとりにユニークなQRコードを発行するのはバリアブル印刷というそうです。…

npmjs.com で著名ソフトウェアによく似た名前のマルウェアが大量に発見された

Malicious packages in npm. Here’s what to do | Ivan Akulov’s blog People found malicious packages in npm that work like real ones, are named similarly real ones, but collect and send your process environment to a third-party server when yo…