Type Checking Ruby Programs with Anntations

RubyKaigi 2017で話す内容です。 当日使ったスライドを公開します。 Type Checking Ruby Programs with Annotations // Speaker Deck 多すぎて飛ばした分も入っています。全体の内容としては、この記事を読めばほとんどそれで良いんじゃないかと思います。 …

2017年はFigmaである

最近はSketchではなくFigmaを使っています。 www.figma.com 何が良いかというと、これはブラウザで動いていて(アプリもあるけどブラウザ版をそのまま動かしている感じ)、一つのワークスペースを何人かでそのまま突っつけるのが良いのです。誰かがなにかを…

Nullarihyon 1.7

Xcode8にNullability Violationをチェックする機能が入ると聞いて一晩泣き明かしましたが、それはそれとしてちまちま開発を続けています。Xcode8との比較はまたそのうち。 github.com Nullarihyon 1.6では「nonnullなインスタンス変数に代入があるかどうかを…

Objective Cでnilと向き合う

最近のObjective Cでは、クラスやプロトコルの定義をするときに、メソッドの引数・返り値やプロパティがnilになるかどうかを書くことができるようになっています。 @interface Person : NSObject @property (nonatomic, nonnull) NSString *name; @property …

Cのauto

Unix考古学を読んでいて、ちょっと面白い記述を見つけた。 たとえば、Dennis Ritchieのコンパイラは、局所的な自動変数をautoという型で定義したり、あるいは変数定義を省略することを許していましたが、型を明確に宣言するという今日のスタイルに変更されま…

LINTを見直した話

僕は基本的にLINTが大嫌いで、理由は いくつかのLINTはあまり上手く実装されていない いくつかのよくあるルールは、プログラミング言語の設計者がわざと導入したルールを制限するものである という二つが主である。(既に使われているLINTにわざわざ文句は言…

長い文字列をNSDecimalNumberに変換するとおしりが0になる

なにかの金額を入力する画面などで、ユーザーに数字を入力してもらうUIを作ることがある。金額なので、NSDecimalNumberで受けることになる。このとき大きな数字を入力すると、入力とは違う値になることがある。*1 NSDecimalNumber(string: "9999999999999999…

NSDecimalNumber(floatLiteral:)は使ってはいけない

私がSwiftで気に入っている改善として、NSDecimalNumberのインスタンスがちょう簡単に作れることがあります。 let d : NSDecimalNumber = 15.97 すばらしい。Objective Cだとこうなって、辛い。 NSDecimalNumber *d = [NSDecimalNumber decimalNumberWithStr…

特定のMacでビルドできないXcodeプロジェクト

Xcodeに登録されているファイルの名前とファイルシステム上の名前が大文字小文字で違っている場合、Apple Storeから買ってきたばかりのあなたのMacではビルドできるかもしれませんが、Case Sensitiveなファイルシステムに設定しているMacではビルドできませ…

CI完了を待ってPRをマージするbotを作るためのライブラリを公開しました

CIを待って自動でPRをマージするbotを作ると便利だった - soutaroブログで、紹介した、CIが完了したときに自動でPRをマージするbotですが、皆さんが簡単に実装できるようnpm packageにしました。 github.com 動くと良いですね。(npm packageはまだ試してな…

CIを待って自動でPRをマージするbotを作ると便利だった

GitHubを使っている場合「Pull Requestが作られたら自動でCIを実行し、グリーンになることを確認してからマージする」というのは割と広く採用されている開発のフローだと思います。PRごとにCIすることを確実にすることで、うっかりビルドを壊すようなPRをマ…

Swiftでas!と書く場合のガイドライン

as!って言うのは、要するにダウンキャストできない場合にプログラムを終了させるものである。 if let x = expr as? SomeClass { f(x) } else { fatalError() } と書くのであれば、 f(expr as! SomeClass) と、同じことなので、as!で書いた方が良い。その方が…

それでenumとclassのどっちにすれば良いの?

SwiftのenumがObjective Cで欲しいときはどうするか - soutaroブログ この記事には enumが便利なのは ある状態では有効だけど、別の状態では有効ではない値を定義するとき です。 と書きましたが、「それはサブクラスっていうやつではないか」という声があり…

SwiftのenumがObjective Cで欲しいときはどうするか

Swiftではenumという種類のデータ型を定義できます。Cのenumと違って、引数を持てるようになっています。これが便利なのは ある状態では有効だけど、別の状態では有効ではない値を定義するとき です(すごい雑な説明なので、他の使い方も調べておきましょう…

MacでATOKを使っている場合にバックスラッシュを入力する

MacのEl Capitanでは仮名漢字変換が変わっていて、スペースを叩かなくても自動で変換してくれるようになっている。これはこれでなかなか便利なのだけど(今、何ヶ月かぶりにATOKに切り替えてみたら変換を忘れまくるので驚いた)、一つ不満があって、漢字にし…

bundle execを殺す

業務を劇的に改善する3つのスピリチュアルプログラミング技法 「バグの希釈」の項目を見て思い出した。 2015年に書いたコードの中で、一番意味不明で気が利いてたなーと自分では思っているやつは「lib/bundler/setup.rbに空のファイルを置く」というものだっ…

コーディング面接の例

プログラマの面接をするときには実際にコーディングをしてもらうべきという話は良く聞くが、もうちょっと細かくどういうお題を出したら良いかとか、どういう風に評価したら良いかとかの話はあんまり聞かない気がする。せっかくなので、ユビレジでの面接で私…

UX DAY TOKYO 2015

UX Days Tokyo 20152015.uxdaystokyo.com 行ってきた。直接に関係がある話はあんまりしません。 エクストリームプログラミングが発表されたのは1999年だったという(Wikipediaより)。 Amazon.co.jp: XPエクストリーム・プログラミング入門―ソフトウェア開…

ファイルを保存しない人生

スマホに満足してますか??ユーザインタフェースの心理学? (光文社新書)作者: 増井俊之出版社/メーカー: 光文社発売日: 2015/02/20メディア: Kindle版この商品を含むブログ (2件) を見る 私は学生の頃はEmacsを使っていて、何かのときに知ったのがauto-save-…

Rubyの::演算子について

ruby*1では、A::Bという形式の式は、NODE_COLON2という名前になる。::という演算子の式なので、コロンが二つでCOLON2だろうか。とても素直な名前である。::の両端には普通はAとかBとかの定数名を書くが、callメソッドを呼ぶための構文でも使う。 irb(main):0…

Rubyの定数は難しい

ネストしたモジュールとかクラスの定義方法には、まあ二つくらい書き方がある。 バカ正直にネストしたモジュールを並べる方法。 module A module B module C ... end end end ::演算子を使う方法。 module A::B::C ... end この二つは同じだと思っていたのだ…

ヒラギノの縦位置を揃えるちょうべんりなSketchプラグインの紹介

Sketch 3 Advent Calendar 2014の18日目の記事です。 Sketch 3 Advent Calendar 2014 - Adventar Sketchでボタン的なものを作ろうとすると、テキストレイヤーの位置決めに苦労するのはよく知られた話だと思います。ボタンの外側を作って、内側にテキストレイ…

PebbleからNew RelicでWebサービスの状態が確認できるWatchfaceを作りました

インストールはこちらから。ただし、あなたのスマートフォンがiPhoneの場合は、まだインストールできません。自分でPebble用のアプリをビルドできる場合は、GitHubリポジトリからソースコードをアレして$ pebble buildってやってください。 https://apps.get…

4時間かかるバッチ処理に失敗していた

#!/bin/bash set -e PWD=`pwd` cd /var/tmp/data/... ${PWD}/do_something.sh ...${PWD}って、シェルの組み込みの変数で常にカレントディレクトリを返す子。先頭で代入した変数名が悪い。 #!/bin/bash set -e basedir=`pwd` cd /var/tmp/data/... ${basedir}…

WordPressを使いこなせる上司になろう

WordPressは辛い。何が辛いか。 ふとアップデートすると壊れる こまめにアップデートしていると割と大丈夫だけど、ちょっと期間が空くと壊れる WordPressでCSSの変更したら壊れた画面が全世界に配信された プラグインを入れたら画面が見れなくなった 基本的…

ユビレジのサービス状況を監視するためのモニタを作りました

ユビレジではNew RelicとかLogglyとか使ってサービスに問題が生じていないかを監視しているのですが、そうはいってもあんまりちゃんと監視できていないのが問題になっていました。簡単に言うとWebブラウザでいちいちアクセスするのは、明らかにめんどくさい…

privateって書きたくない

まず前提として publicにするべきものはpublicにするべき(公開されたAPIであるもの) privateにするべきものはprivateにするべき(公開すると都合が悪いもの) である。ところが、残念なことにこの二つの間には、どちらとも言いがたいものがかなりの分量あ…

それは話が逆になっている

エンジニアが作るネットサービスのアイデアがしょぼいワケ【連載:えふしん】 - エンジニアtype 種を明かせば簡単で、エンジニアはしょぼいアイディアでも自分で実装できちゃうというだけの話なのですよ、これ。実装を一人でできるので、アイディアの段階で枝…

Cross Origin Resource Sharingのプリフライトの背景を理解する

Ajaxで他のホストのデータにアクセスできるようになるやつについてです。 HTTP access control (CORS) | MDN この辺のドキュメントを読んでいても、どうも今ひとつ納得できなかったりすることがないかと思います。 シンプルなリクエストとプリフライトリクエ…

MacからDELLのディスプレイにきれいに画面を出力させる方法

MacでMini DisplayportからDELLのディスプレイに画面を出すと、とても汚いことがあります。これを直す方法。僕はU2713Hで気づきましたが、U2713HMとかU2711とかでも同じ問題が発生しているはずだし、他のディスプレイでも同じことが起きているかもしれない。…