Islands in the byte stream

Technical notes by a software engineer

ghq+pecoでターミナル作業が捗るぞ

便利なソフトウェアを定期的に掘り起こすぞ活動です。 ghq は「GitHub repoのclone先を統一することでいろいろ便利にできるコマンド」で、github repoのclone先を、カレントディレクトリに依存せず ~/.ghq/github.com/$owner/$repo/ にします。 使い方: ghq …

ActionArgsが素晴らしい件 #Rails

github.com Railsのcontrollerで違和感があるのって actionのinputに params というインスタンスメソッド経由でアクセスすること しかも params はviewからアクセスできる! actionのoutputが controller のインスタンス変数への代入であること しかもそのイ…

RailsのURL helpersをTypeScriptとしてexportするts_routesを書いた

カッとなって作りました。後悔はしてません。 github.com /entries/:id を生成するためにRailsのviewで entry_path(42) などとしますが、それをTypeScriptからも Routes.entryPath(42) などとして使えるようにするためのgemです。 READMEにあるように rake t…

RubyMineでローカル変数やブロック引数にYARD型アノテーションをつける

RubyMine 2017.1 Help :: Using Annotations にあるとおりなんですが、 local variables: # @type [String] my_var = magic_method # @type my_var [String] my_var = magic_method # @type [String] my_var my_var = magic_method # @type [String] my_var …

markdownの拡張記法の現状

Kibelaは次のようにいくつかmarkdownを拡張しています。 PlantUML記法に対応しました - Kibela Blog 記事の外部共有とLaTeX記法による数式表示に対応しました - Kibela Blog そして、今後もそういう拡張は増えていくと思われます。 PlantUML KibelaのPlantUM…

TypeScriptのDefinitelyTypedは「ダメでもともと、うまく使えればラッキー」くらいの距離感がよい

自前でTypeScript型定義ファイル(dts)を用意していないJSライブラリのための型定義ファイル集があります。 https://github.com/DefinitelyTyped/DefinitelyTyped npmで @types/react みたいなのがそうです。 これは便利なものですが、ライブラリ作者ではな…

rougeのlexer開発ワークフロー

github.com digdag の構文を追加するにあたって、Ruby製syntax highlighterであるところのRougeのlexerの開発方法を調べました。 基本 Rouge lexerはDSLで定義します: https://github.com/jneen/rouge#using-the-lexer-dsl lexerはステートマシンとして振る…

digdag run (local mode) で並列実行数を制御する

とある分散バッチシステムでdigdagを導入してみています。 www.digdag.io スケジューラ機能などは使っておらず、タスクを良い感じに並列実行するためのmakeよりちょっと便利なツール、くらいの感じで使ってます。 digdagは下記のようにloopなどを _parallel:…

なぜTypeScript推しなのか

KibelaのフロントエンドをES2015からTypeScriptに絶賛移行中です。 www.typescriptlang.org で、なぜ flow じゃないくてTSなのかって話です。 flow vs typescriptである理由は、どちらもJSのスーパーセットをうたう静的型付きのaltJSだからです。この時代に…

Herokuのreview-appsが "pr-predestroy" をサポートして外部リソースの掃除をできるようになっていた

devcenter.heroku.com Herokuのreview-appsはたとえHerokuを使っていなくても非常に便利なものですが、PR削除時にS3やElasticsearchなど外部にホストしているリソースを掃除する方法がありませんでした。 ところが、最近は pr-predestroy hookが実装されたよ…

mitamaeでrecipeのロードエラー時にデバッグしやすくした

一部のプロジェクトでmitamae (itamae on mruby) を使ってるんですが、自分が書いているときはともかく他人が書いているmiamaeでrecipeのロードエラーが発生すると、mruby-ioレベルでもmitamaeレベルでもファイル名を出力してくれなくてこれはデバッグできな…

AndroidにおけるJava8のサポート状況 2017年版

公式ドキュメントにありました。一言でまとめると、Android Oのpreviewが出た現在においても「Android N (API version 24)と同水準」となっています。 Use Java 8 language features | Android Studio Android Studio 2.4 preview 4 (およびそれが要求する…

React Reduxファーストインプレッション

今更感ありますがReact Reduxを導入したの所感をメモしておきます。 github.com ざっとみてこれなら自分でも再実装できそうだなという印象 いままではreact-micro-container でfluxしてた cf. 小さいReactアプリケーションのためのライブラリ書いた - Qiita …

『Androidを支える技術』(I, II) の内容に興奮した

『Androidを支える技術 I』 ~ 60fpsを達成するモダンなGUIシステム ~ 『Androidを支える技術 II』 ~ 真のマルチタスクに挑んだモバイルOSの心臓部 ~ これらを著者の有野さん よりご恵贈いただきました。ありがとうございます。 始めて知る内容も多かったので…

MathJaxによる描画を細かく制御する

MathJax というのはLaTeXなどで書いた数式を美しく描画するための処理系です。 なおこのエントリは MathJax v2.7.0 を対象にしています。 www.mathjax.org まず前提として、ほとんどのケースではMathJaxをconfigパラメータを与えてロードするだけで自動的にt…

yarnpkgのdependenciesにgithubのリポジトリを直接書こうとしてハマった

追記:(2017/04/14): "foo" : "gfx/foo" ($github_user/$repository)というフォーマットでうまくいきました。ε-(´∀`*)ホッ 追記(2017/04/13): 結局解決できてませんでした。つらい。 fooというnpm moduleにパッチを当てた gfx/foo という版をどうしてもいま…

CommonMarkの現状 2017年4月版

CommonMarkというのはMarkdownの標準化を目指して2014年に立ち上がったプロジェクトです。 当時のニュース: Standard Markdown Becomes Common Markdown then CommonMark (日本語版) 公式サイト: http://commonmark.org/ あれから3年、とうとうGitHubがCommo…

JavaScript SSRのためのレンダリングサーバがほしい

いまReactのSSRのためにHypernova を使っていて、これはこれでちゃんと動くんですがいくつか不満があります。 Unix Domain Socketをサポートしていない アプリケーションサーバ(express)の設定をほとんど変えられない worker数とか bodyの圧縮にzstdを使う…

<meta name="robots" content="noindex"/> でも検索エンジンにインデックスされるケースがある

noindex tagがあるにも関わらずインデックスされているケースを見かけたので調べてみたところ、googlebotに関してはどうやらそういう仕様があるようです。 noindex tag は常にインデックスの削除を行うのだと思っていたのでちょっと驚きました。 メタタグを…

Ormaに関する雑談&質問用にgitterのchat roomをつくりました

en: https://gitter.im/Android-Orma/Lobby ja: https://gitter.im/Android-Orma/Ja 背景 GitLab、Slackライクなサービス「Gitter」を買収。有償プラン廃止で何人でも無料で利用可能に。オープンソース化も約束 - Publickey でひさびさにgitterを知って、悪…

カンファレンススタッフ用アプリがあるとよさそう

DroidKaigi 2017お疲れさまでした。スタッフとしては3回目、スピーカーとしては初めての参加でした。 スタッフとしては、受付の誘導、司会、副司会、会場の片付けなどをしました。特に司会はわりと臨機応変に行動しなければならず、部屋ごとにけっこうバラバ…

DroidKaigi 2017で「ORMの選び方」という発表をしました

Ormaの開発の際に他のORMはどういう設計思想なのかを調べたときの知見をもとに、DroidKaigi 2017用に仕上げた発表です。 これ契機にORMについて一家言ある人が増えるといいなと思いながら発表しました。 SQLiteDatabase (SQLiteOpenHelper) を直接つかうかど…

Bit Journeyに転職してKibelaをリリースしました

半年くらいまえにBit Journeyに転職してKibelaを作ってました。AndroidエンジニアからRails + Reactエンジニアへの転向ということになります。 Kibelaはこちら。ようやく本日リリースできました。といっても開発面でいうとこれからが正念場ではあります。 Ki…

Herokuのreview appsでRailsのLetter Opener WebをつかうHack

github.com これのREADMEにもありますが、Letter Opener (-Webも含む)をHerokuで使うにはちょっと注意が必要です。つまり、 Letter Openerはデータを #{Rails.root}/tmp/letter_opener に保存する Herokuはdyno (node) 間でデータのやりとりは出来ない設計 …

Orma v4.2.0 の Relation#upsert() の設計

https://github.com/gfx/Android-Orma Orma v4.2.0 で Relation#upsert() を実装しました。これは、モデルのインスタンスを渡すとその状態に応じて INSERT または UPDATE を実行するというメソッドです。 モデル同士の関連もよしなにしてくれるので、とりあ…

新技術を学ぶ技術と三つの壁とDroidKaigi 2017

こないだの@onkさんのスライドがとても良かったんですよ。 短期間で新技術を学ぶ技術 from Takafumi ONAKA 短時間といいつつ守破離の「離」までいくのに3年かかるといってて、高速道路なんてものはないんだなということがわかりますね。 とはいえ自分自身に…

ObjectBox vs Orma

greenDAOの開発元であるgreenbotが新しいNoSQL ORMのβ版をアナウンスしたようです。 greenrobot.org いわく、マルチスレッドで使いやすく、バイトコード操作のようなマジカルな方法はとらず、マイグレーションを自動で行えてしかも爆速だと。これらの特徴はO…

Rails + React + SSRのもとでレスポンシブにするにあたって現状とっている方法

SSRと絡めようとすると難しくて、いろいろ試行錯誤しました。いまはこういう方向でやろうとしていて、そこそこメンテナンス可能に書けそうだなという手応えがあります。 三行で CSSのメディアクエリのみを使い、Railsでテンプレートエンジンを使うにせよReac…

Ruby extのためのVisual Studio Codeのclang extension用設定を書き出す

Visual Studio Codeの C/C++ Clang extensionのためのいくらかの設定をすると、Ruby extensionを開発するときに補完が効くようになり、開発が楽になります。 C/C++ Clang - Visual Studio Marketplace ところでRuby extensionのCFLAGSなどの設定はわりと難し…

Android SDK 25.2.3から付属のsdkmanager(1)でパッケージのインストールをする

Android SDK 25.2.3にsdkmanagerとういコマンドが新しくく追加されていたようです。 sdkmanager これは、CLIでAndroid SDK packageを管理するためのツールのようです。Gradle Android pluginと同様にlicensesファイルに対応しているので、CIなどで扱いやすい…