タグ

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

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

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

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

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

    TypeScriptのanyみたいな「なんでも代入できる型」を分類する - soutaroブログ
    laiso
    laiso 2019/10/05
  • 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ブログ
    laiso
    laiso 2019/06/26
  • 型付き ⊄ 型なし - soutaroブログ

    最近、TypeScriptについて考えることが多い。SideCIでWebフロントエンドの開発に使いはじめたこともあるし、Steepの開発をしていて「TypeScriptだとどうなるんだっけ??」などと言いながら試してみることもある。 TypeScriptは型付きのJavaScriptである。構文はほとんど同じで、使えるライブラリもかなり近い。JavaScriptへの変換はかなり自明で、ランタイムは全く同じ。性能の差はない。Webpackやnpmを初めとするツール群もかなり共通しているし、アプリケーションも似たようなもん。書いている気分には、ほとんど差がない。つまり、TypeScriptJavaScriptでプログラミングしているときに、なにか違いを感じるとすれば、それは(ほとんど)型付きの言語と型なしの言語の差と考えて良い。 RubyJavaを比較するのとは、全然話が違う。構文も意味も

    型付き ⊄ 型なし - soutaroブログ
    laiso
    laiso 2018/02/07
    "型検査の有無しか違わない二つの言語で、プログラミングの心構えが変わるのは、型検査の有無が原因と考えるのが妥当だろう。"
  • 2017年はFigmaである - soutaroブログ

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

    2017年はFigmaである - soutaroブログ
    laiso
    laiso 2017/03/02
  • Nullarihyon 1.7 - soutaroブログ

    Xcode8にNullability Violationをチェックする機能が入ると聞いて一晩泣き明かしましたが、それはそれとしてちまちま開発を続けています。Xcode8との比較はまたそのうち。 github.com Nullarihyon 1.6では「nonnullなインスタンス変数に代入があるかどうかを確認する機能」を実装しています。 NS_ASSUME_NONNULL_BEGIN @interface Person : NSObject @property (nonatomic) NSString *name; @property (nonatomic) NSString *address; - (instancetype)initWithName:(NSString *)name address:(NSString *)address; @end @implementation Pe

    Nullarihyon 1.7 - soutaroブログ
    laiso
    laiso 2016/07/01
  • CIを待って自動でPRをマージするbotを作ると便利だった - soutaroブログ

    GitHubを使っている場合「Pull Requestが作られたら自動でCIを実行し、グリーンになることを確認してからマージする」というのは割と広く採用されている開発のフローだと思います。PRごとにCIすることを確実にすることで、うっかりビルドを壊すようなPRをマージしてしまうことを防ぎ、いつの間にかmasterが壊れることを防ぎます。*1「CIが通っていないPRをマージしない」というのは、GitHubでそういう制約を設けることもできますし、そこまでやらずにチーム内の約束として共有しても良いでしょう。(ユビレジでは後者を採用しています。) 問題は、CIは一瞬では終わらないことです。ユビレジの場合、RailsのWeb appのCIには15分ほどかかりますし、iPad appのCIは30分かかります。CIのためのリソースにも限りがあるので、状況によっては既に15個CIのジョブが溜まっていて、完

    CIを待って自動でPRをマージするbotを作ると便利だった - soutaroブログ
    laiso
    laiso 2016/03/14
  • 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ブログ
    laiso
    laiso 2016/03/03
  • bundle execを殺す - soutaroブログ

    業務を劇的に改善する3つのスピリチュアルプログラミング技法 「バグの希釈」の項目を見て思い出した。 2015年に書いたコードの中で、一番意味不明で気が利いてたなーと自分では思っているやつは「lib/bundler/setup.rbに空のファイルを置く」というものだったりする。会社で少し説明したんだけど、あまりうけなかったのでここに書いておこう。 ユビレジで販売している製品の中にユビレジエクステンションというのがあって、簡単に言うとRaspberry Piに電源とWi-FiアダプタとUSBハブを付けたもので、HTTPでJSONをPOSTするとレシートが印刷できる機械になっている。ふつーにDebianが動いていて、Rubyで書いたHTTPサーバとかLED点滅のためのdaemonとかレシート印刷のためのdaemonとかが動いている。問題は、特定の処理でHTTPサーバとかを再起動するときに、なんか

    bundle execを殺す - soutaroブログ
    laiso
    laiso 2016/01/20
  • コーディング面接の例 - soutaroブログ

    プログラマの面接をするときには実際にコーディングをしてもらうべきという話は良く聞くが、もうちょっと細かくどういうお題を出したら良いかとか、どういう風に評価したら良いかとかの話はあんまり聞かない気がする。せっかくなので、ユビレジでの面接で私がコーディングについて確認するときのパターンを、いくつか紹介してみようと思う。 実際にコードを書いてもらうパターン 候補者がどのくらいプログラミングできそうかの予備情報がない場合に、簡単なアルゴリズムを書いてもらうことが多い。例としては、 Linked Listを書いてください Stackを書いてください など。ここで、おもむろに int main(int argc, char* argv[]) { などと書き始める人は、あまり良い印象をもたれない。 class Stack などと書き始める人は上よりは期待できる。 このとき、わざと出題で詳細をあまり明らか

    コーディング面接の例 - soutaroブログ
    laiso
    laiso 2015/06/22
  • ユビレジのサービス状況を監視するためのモニタを作りました - soutaroブログ

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

    ユビレジのサービス状況を監視するためのモニタを作りました - soutaroブログ
    laiso
    laiso 2014/02/12
  • MacからDELLのディスプレイにきれいに画面を出力させる方法 - soutaroブログ

    MacでMini DisplayportからDELLのディスプレイに画面を出すと、とても汚いことがあります。これを直す方法。僕はU2713Hで気づきましたが、U2713HMとかU2711とかでも同じ問題が発生しているはずだし、他のディスプレイでも同じことが起きているかもしれない。 tl;dr http://embdev.net/topic/284710 上のURLから、patch-edid.rbをダウンロードして実行すると、DisplayVendorID-10acみたいなディレクトリがすぐ下にできるので、それを/System/Library/Displays/Overridesにコピーして再起動する。再起動すると、DELLのディスプレイがちゃんと良い感じに表示されるようになっている。 私になにがおきたのか DELLのU2713Hというディスプレイを買って、昨日無事に届いて、Macに接続した

    MacからDELLのディスプレイにきれいに画面を出力させる方法 - soutaroブログ
    laiso
    laiso 2013/04/05
  • Cucumberは偉かった - soutaroブログ

    Cucumberを初めて見た人はこんな違和感を感じるんじゃないかと思います。 なんだこれ。変なDSL入れるより、直接Rubyプログラムを書いちゃう方が楽じゃん。便利じゃん。速いじゃん。 僕もそう思っていました。 そう思ったプログラマは、Cucumberを使わずにTestUnitでテストを書きます。変なDSLを覚える必要も無ければ、書く必要もありません。幸せな日々。ん?ボタンをタップするコードを3回書いてるな?よしメソッドにしよう!TableViewの内容のテスト?メソッドにしよう! そしてある日気づきます。Cucumberじゃん、これ……しかも、Rubyプログラムがそのままなので読みにくい。一体どこで間違えたのでしょう? CucumberでテストしたいのはUIです。Cucumberのターゲットは受け入れテストなので、最終的な成果物のテストが必要になります。最終的な成果物は実際にユーザーが使

    Cucumberは偉かった - soutaroブログ
    laiso
    laiso 2012/11/27
  • 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ブログ
    laiso
    laiso 2012/10/14
  • みずほ銀行のATMのテンキーがおかしい件 - soutaroブログ

    あなたが日常的に見ているテンキーには(たぶん)2種類あることに、気づいているだろうか。 画像は、iOS 6に搭載されている「電話」と「計算機」のスクリーンショットである。テンキーの順序が逆になっている。なんで逆になったのか、なんだかよくわからないけれども、これが標準的な配置になっているのだと思う。PCのテンキーはどっちだっけ。 私が面白いと思うのは、この2つを特に混乱せずに使えていることで、ちょっと不思議である。いつも、日語キーボードと英語キーボードが並んでいたら混乱してしまうし、MacWindowsでUndoしようとしたら混乱してしまう。それなのに、2つのテンキーには混乱しない。電卓を使う場合と電話をかける場合で別々の適切なキー配置があり、その適切な配置が採用されているから混乱しないのだろうか。いやそんなことはないだろう…… さて、電話と電卓のテンキーには混乱しない私だが、いつも使う

    みずほ銀行のATMのテンキーがおかしい件 - soutaroブログ
    laiso
    laiso 2012/10/05
  • 第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ブログ
    laiso
    laiso 2012/07/23
  • 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ブログ
    laiso
    laiso 2012/07/20
  • iOSアプリのインテグレーションテストに関する問題 - soutaroブログ

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

    iOSアプリのインテグレーションテストに関する問題 - soutaroブログ
    laiso
    laiso 2012/07/20
    確かにテストコードからサーバーサイドのモデル参照できるのは優位点だなー
  • FrankでRubyからiOSアプリを操作してテストする - soutaroブログ

    昨日の話の続きです。 iOSアプリのインテグレーションテストに関する問題 - soutaroにっき こんな感じでテストを書くことができます。 ENV['RAILS_ENV'] = 'development' require File.expand_path('../../server/config/environment', __FILE__) require 'rails/test_help' require 'frank-cucumber/frank_helper' class FranklyTest < ActiveSupport::TestCase include Frank::Cucumber::FrankHelper self.use_transactional_fixtures = false setup do wait_for_frank_to_come_up Counte

    FrankでRubyからiOSアプリを操作してテストする - soutaroブログ
    laiso
    laiso 2012/07/20
  • 1