Squareに転職しました

11月からSquareで働いています。POSレジを作るのが嫌になったと言ってユビレジを辞めてSiderに転職したのが2016年、その3年後にまたレジの会社で働くことになるとは……(レジは作ってませんが。) *1 アメリカに行くのかというとそんなことはなくて、東京で日…

TypeScriptのanyみたいな「なんでも代入できる型」を分類する

安全でないもの - void * (C) いろいろあるんだろうけど、Cから始めよう。void*にはなんでもキャストできるし、元の型に戻すこともできる。まあany。問題は変なことをやった場合。(Cはよくわからないから誰かが例を書いてくれ。) キャストによって変な型が…

GrillRB 2019にいってきた

こちらです。 grillrb.com speakerdeck.com 話は大体いつものやつですが、ちょっと型を付けてプログラミングしていくことに踏み込んだ内容でした。*1 このGrillRBというのは、ポーランドのグロツワフという都市で開催されるカンファレンスで、大きな特徴とし…

Sorbetについて

昨日のAsakusa.rbに行ったらSorbetについて聞かれたので、少し話したんだけど、ちょっときちんと確認しないまま話したらぐだぐだだったので、もう少しまとめておく。 全体的な話として、Sorbetはとても良くできているので、これで良いと思う人はそれで良いと…

JSONやYAMLのデータ構造をチェックするライブラリStrongJSONのご紹介

JSONやYAMLを使うと、かなり複雑なデータが作成できますが、これが意図通りの形式になっているかを確認するのは自明ではありません。XMLにはXML Schemaがありますが、そんな感じのものがJSONにも欲しかったので、作りました。 github.com こんな感じで使いま…

Balkan Rubyに行ってきた

balkanruby.com 去年 https://2018.balkanruby.com 今年のも年番号がつくと予想 https://2019.balkanruby.com (まだないけど) Genadiが誘ってくれたので、Balkan Rubyに行ってきたのだった。話はいつものやつ。 speakerdeck.com RubyKaigiでMatzとか id:ku…

Siderで使っているTSLintの設定

今のところこんなんです。 { "extends": [ "tslint:latest", "tslint-immutable" ], "rules": { "array-type": false, "arrow-parens": false, "interface-name": false, "interface-over-type-literal": false, "max-classes-per-file": false, "max-line-l…

Rubyでnilとfalseを区別する方法が他にもある話

soutaro.hatenablog.com 他にもいろいろあるという話をTwitterで聞きました。下のツイートから大体見られるんじゃないかな。 なんとかKaigiに合わせて、と思いきや全然関係ない内容でRubyの記事を書きました。 #はてなブログRubyでnilとfalseを区別する方法 …

Rubyでnilとfalseを区別する方法

補足があります。 Rubyでnilとfalseを区別する方法 - soutaroブログ Rubyでは、ついこの間の2.3のリリースまで、 nil と false を区別する方法がありませんでした。 「 nil か false 」とそれ以外を区別することはできます。 if とか unless でも良いですし…

型付き ⊄ 型なし

最近、TypeScriptについて考えることが多い。SideCIでWebフロントエンドの開発に使いはじめたこともあるし、Steepの開発をしていて「TypeScriptだとどうなるんだっけ??」などと言いながら試してみることもある。 TypeScriptは型付きのJavaScriptである。構…

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…