タグ

ブックマーク / soutaro.hatenablog.com (13)

  • Squareに転職しました - soutaroブログ

    11月からSquareで働いています。POSレジを作るのが嫌になったと言ってユビレジを辞めてSiderに転職したのが2016年、その3年後にまたレジの会社で働くことになるとは……(レジは作ってませんが。) *1 アメリカに行くのかというとそんなことはなくて、東京で日法人の従業員として働いています。Squareが日でサービス開始したのは2013年のことですが、それ以来東京のオフィスには開発者がいない状況でした。募集もしてなかったのですが、募集があるかどうかの確認もせずに知り合いづてに応募した人間がいて、それが私です……入社してから気づいたのですが、最近、全社を挙げてSFから世界中に分散していくというのを進めているそうで、その流れに気づかないうちに乗っていたのかもしれません。 今回仕事を探すに当たっては「RubyとSteepの開発に時間を使えるようにしたい」「社内でRubyの型に関するテス

    Squareに転職しました - soutaroブログ
    Watson
    Watson 2019/12/25
  • TypeScriptのanyみたいな「なんでも代入できる型」を分類する - soutaroブログ

    安全でないもの - void * (C) いろいろあるんだろうけど、Cから始めよう。void*にはなんでもキャストできるし、元の型に戻すこともできる。まあany。問題は変なことをやった場合。(Cはよくわからないから誰かが例を書いてくれ。) キャストによって変な型が得られた場合の挙動は未定義なんだと思う。(知らないから、誰か仕様を調べてくれ。)未定義というのは、コンパイラとか計算機は何をしても良いという意味で、 プロセスの実行を止める 最適化によってコードが消える プロセスのメモリを破壊しながら動き続ける 鼻から悪魔が出る などのパターンがありうる。実際には大体SEGVで落ちると思うんだけど、それは仕様には含まれていない。 ここで「安全である」というのは「プログラムの実行中に未定義の状態にならない」という意味である。つまり、Cは安全ではない。 キャストの検査で安全になったもの - dynam

    TypeScriptのanyみたいな「なんでも代入できる型」を分類する - soutaroブログ
    Watson
    Watson 2019/10/06
  • Sorbetについて - soutaroブログ

    昨日のAsakusa.rbに行ったらSorbetについて聞かれたので、少し話したんだけど、ちょっときちんと確認しないまま話したらぐだぐだだったので、もう少しまとめておく。 全体的な話として、Sorbetはとても良くできているので、これで良いと思う人はそれで良いと思います。 $ srb --version Sorbet typechecker 0.4.4306 git 31ef906fe5eb572865f2b5d3ea5805793554c676 built on 2019-06-25 06:45:18 GMT with debug symbols Rubyと少し合わないところはあるので、その辺を挙げる。 1. サブタイピング いわゆるDuck typingというやつが、まあ良くない。 sig { params(arg: Eachable).void } def push_from(arg

    Sorbetについて - soutaroブログ
  • JSONやYAMLのデータ構造をチェックするライブラリStrongJSONのご紹介 - soutaroブログ

    JSONやYAMLを使うと、かなり複雑なデータが作成できますが、これが意図通りの形式になっているかを確認するのは自明ではありません。XMLにはXML Schemaがありますが、そんな感じのものがJSONにも欲しかったので、作りました。 github.com こんな感じで使います。 Schema = StrongJSON.new do let :phone, object(phone: string) let :email, object(email: string) let :contact, enum(phone, email) let :person, object(name: string, contacts: array(contact)) end json = Schema.person.coerce(JSON.parse(input, symbolize_names: true

    JSONやYAMLのデータ構造をチェックするライブラリStrongJSONのご紹介 - soutaroブログ
  • Rubyでnilとfalseを区別する方法 - soutaroブログ

    補足があります。 Rubyでnilとfalseを区別する方法 - soutaroブログ Rubyでは、ついこの間の2.3のリリースまで、 nil と false を区別する方法がありませんでした。 「 nil か false 」とそれ以外を区別することはできます。 if とか unless でも良いですし、 && でも良いです。Rubyの構文の中には、真理値に応じてなんらかの処理をしたりしなかったりするものがありますので、「偽」である「 nil または false 」と、「真」である「それ以外の値」は区別できるのです。が、「偽」同士の nil と false は区別することができませんでした。 と、進めると、Ruby初心者の皆さんは混乱するかもしれませんね。 nil? があるじゃないかと。 x == nil でいいじゃないかと。しかし、こいつらはメソッドでありユーザーが自由に再定義できるの

    Rubyでnilとfalseを区別する方法 - soutaroブログ
    Watson
    Watson 2018/05/31
    拡張ライブラリー書いてC言語レイヤーで判定するかな( ˘ω˘)
  • 2017年はFigmaである - soutaroブログ

    最近はSketchではなくFigmaを使っています。 www.figma.com 何が良いかというと、これはブラウザで動いていて(アプリもあるけどブラウザ版をそのまま動かしている感じ)、一つのワークスペースを何人かでそのまま突っつけるのが良いのです。誰かがなにかを変更すると、それは隣で開いている人にすぐに伝わります。これがものすごく快適なのです。 Sketchに残された問題について以前に書いたことがありますが、それは複数人で一つのファイルを変更することが事実上不可能なことです。diffを取って後でマージするというソフトウェア開発で広く行われている方法は、Sketchには通用しません。(なんとかっていう頑張ってSketchをマージする製品もあるそうですが、結局Figmaで良いという気分になったので使ったことがありません。)どうしてdiffを取ってマージしたいかというと、非同期に変更を共有した

    2017年はFigmaである - soutaroブログ
  • SwiftのenumがObjective Cで欲しいときはどうするか - soutaroブログ

    Swiftではenumという種類のデータ型を定義できます。Cのenumと違って、引数を持てるようになっています。これが便利なのは ある状態では有効だけど、別の状態では有効ではない値を定義するとき です(すごい雑な説明なので、他の使い方も調べておきましょう)。 Swiftのenumとは 例えばあなたが最強のレジアプリを開発しているとしましょう。販売する商品の価格には次の二通りがあります。 単価と税率が決まっているもの(単価¥100、税8%) 全体の金額からの割合であるようなもの(10%割引) enumを使わないで普通のクラスにしようとすると、こんな感じになるはずです。 class MenuItem { let isPercentage: Bool let unitPrice: NSDecimalNumber! let vatPercentage: NSDecimalNumber! let p

    SwiftのenumがObjective Cで欲しいときはどうするか - soutaroブログ
  • Swiftでas!と書く場合のガイドライン - soutaroブログ

    as!って言うのは、要するにダウンキャストできない場合にプログラムを終了させるものである。 if let x = expr as? SomeClass { f(x) } else { fatalError() } と書くのであれば、 f(expr as! SomeClass) と、同じことなので、as!で書いた方が良い。その方がタイプ数が減るし、コードの見た目も簡潔になって理解しやすくなる。長いコードはそれだけで苦痛だし、なにか間違ったプログラミングをしていることを示すシグナルにもなる。ダウンキャスト失敗の場合に終了するためだけにifを書くことは、全体的なコードの乱雑さを増してしまい、当の問題の見落としに繋がる。 ただし、as?とかas!とかダウンキャストをしてる時点で、そのプログラムには潜在的な問題があると考えることもできて、当にダウンキャストが必要なのか3回くらい考えた方が良い。

    Swiftでas!と書く場合のガイドライン - soutaroブログ
    Watson
    Watson 2016/02/25
  • ユビレジのサービス状況を監視するためのモニタを作りました - soutaroブログ

    ユビレジではNew RelicとかLogglyとか使ってサービスに問題が生じていないかを監視しているのですが、そうはいってもあんまりちゃんと監視できていないのが問題になっていました。簡単に言うとWebブラウザでいちいちアクセスするのは、明らかにめんどくさいわけです。具体的にNew Relicを見ようと思ったとすると、 New Relicを見ようと思う ブラウザの新しいタブにrpm.newrelic.comと入れる パスワードを入れる アプリケーション一覧からUbiregiを選ぶ やっとモニタにたどり着く! という手順が必要になります。全体的に面倒くさいのですが、この中で一番問題になるのは1の「New Relicを見ようと思う」ということです。あんまり思いません。そして、問題が発生するのは、問題が発生すると思いもしなかったタイミングです。メール通知なんかもありますが、わりと簡単に他のものに埋

    ユビレジのサービス状況を監視するためのモニタを作りました - soutaroブログ
    Watson
    Watson 2014/02/13
  • iOSアプリのインテグレーションテストに関する問題 - soutaroブログ

    iOSにかぎらず、今日のアプリケーションではサーバとクライアントの両方を開発しなくてはいけないことが、決して特別ではありません。その際にややこしいのが次のような事情です。 開発は同時に行われるので、厳密にプロトコルを予め決めておいて、モックだけでテストして幸せになれるわけではない*1 クライアントとサーバは別々の言語で開発されることが多いが、テストしたいのは両方の状態の整合性である 1つ目の問題は、まあ手抜きと言えばそうなんですが、サーバもクライアントも一人で開発していると、万が一なにかのトラブルがあったときに「定義されているプロトコルにそって開発しているのだから、これはクライアント|サーバのバグである。俺は悪くない!」とか、全く言えないわけです*2。ちゃんとend-to-endで動くことを確かめましょう。 じゃあ、テストしたいと思っても、2番目の問題が浮上してきます。 サーバはRails

    iOSアプリのインテグレーションテストに関する問題 - soutaroブログ
  • 第3回 iphone_dev_jp 東京iPhone/Mac勉強会でFrankの紹介をしました - soutaroブログ

    サンプルプログラムとプレゼンテーションを公開します。 https://github.com/soutaro/chefpad 各方面に(いらん)配慮をした結果、サンプルプログラムは画像リソースを削除してあります。(どの方面かはプレゼンテーションの中に残してあるスクリーンショットからお察しください)。 リンク Testing With Frank — Painless iOS and Mac Testing With Cucumber どういう話でしたか? Frankを使うとRubyからiPhoneアプリのテストができるので、iPhoneアプリがクライアントになっていて、サーバがRailsで書いてあるような、今どきのアプリのテストがやりやすいよ!という話でした。 Frankって言うのは一言で言えば、iPhoneアプリのためのSeleniumです。 サンプルの説明 Railsのサーバを普通に開発

    第3回 iphone_dev_jp 東京iPhone/Mac勉強会でFrankの紹介をしました - soutaroブログ
  • SelectorKitというライブラリを公開します - soutaroブログ

    http://soutaro.github.com/SelectorKit iOSアプリのViewを指定するためのselectorです。割とCSSセレクタに似た構文にしています。uiQueryというのがあるのですが、これを書くのがかなりしんどいのでかっとなって作りました。 ドキュメントに書いてないのですが、新機能としてセレクタの途中の要素を選択することができます。{}でくくります。CSSにもない新機能!多分バギーです。非決定的な要素を選択する場合にうまく動作しないと思う。*1 例。 「コーヒー」と書かれたラベルを含むテーブルビューセル { UITableViewCell } UILabel:[text='コーヒー'] menu-item-listというaccessibilityIdentifierをもつUITable UITable#menu-item-list 前方一致、後方一致 UIL

    SelectorKitというライブラリを公開します - soutaroブログ
  • iOSのプロジェクトをJenkinsでビルドする - soutaroブログ

    情報がまとまっていなくて苦労したので書いておく。やってしまえば簡単。 やりたいこと githubにpushした時点でビルドする ビルドしてテストを実行する(まだできてない) ビルドして、Testflightを使って、弊社のセールス・サポートチームに配布する Provisioningを更新するなどの作業はJenkinsを意識しなくてもできること Provisioningはgitのリポジトリに入れておく やらないこと 自動でベータ版としてベータテスターに配布する 自動でiTunes Connectにサブミットする Jenkinsをインストールする Mac用のパッケージをインストールする。インストーラはdaemonとかいうユーザーで実行しようとするが、これはjenkinsとか適当に作ったユーザーに変えておく。 Jenkins Mac OS X InstallerでJenkinsを入れる - Iw

    iOSのプロジェクトをJenkinsでビルドする - soutaroブログ
  • 1