タグ

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

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

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

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

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

    TypeScriptのanyみたいな「なんでも代入できる型」を分類する - 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ブログ
  • 180552

    今のところこんなんです。 { "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-length": false, "member-access": false, "object-literal-key-quotes": [true, "as-needed"], "object-literal-shorthand": false, "object-literal-sort-keys": false, "ordered-impor

    180552
  • Rubyでnilとfalseを区別する方法が他にもある話 - soutaroブログ

    soutaro.hatenablog.com 他にもいろいろあるという話をTwitterで聞きました。下のツイートから大体見られるんじゃないかな。 なんとかKaigiに合わせて、と思いきや全然関係ない内容でRubyの記事を書きました。 #はてなブログ Rubyでnilとfalseを区別する方法 - soutaroブログhttps://t.co/o9DYnwwknl— 松宗太郎 (@soutaro) May 30, 2018 TracePointで私のアイディアを騙すとか、引数の評価に入れるとTracePointを回避できるとか、 $@ に false を代入すると例外が上がるとか、 false..nil にして確実に例外が上がるようにするとか、いろいろな方法があることがわかりました。Rubyの勉強になりますね。 今の時点で決定版かなーと思っているのは rangeリテラル、trunkでも動

    Rubyでnilとfalseを区別する方法が他にもある話 - soutaroブログ
    lugecy
    lugecy 2018/07/01
  • 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ブログ
  • 型付き ⊄ 型なし - soutaroブログ

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

    型付き ⊄ 型なし - soutaroブログ
  • Type Checking Ruby Programs with Anntations - soutaroブログ

    RubyKaigi 2017で話す内容です。 当日使ったスライドを公開します。 Type Checking Ruby Programs with Annotations // Speaker Deck 多すぎて飛ばした分も入っています。全体の内容としては、この記事を読めばほとんどそれで良いんじゃないかと思います。 さて、まずは「Rubyプログラムを型検査する」とはどういうことなのかを考えましょう。ご存じの通り、Rubyというのはすでに型安全な言語です。この場合に、型検査をしてなにをしたいのかは、いまいち自明ではありません。 型安全性とは「型検査をパスしたプログラムを実行しても、未定義の状態にならない」という性質です。Rubyのような型なしの言語を考える場合には「常に成功する型検査をする」と考えます。Rubyは、Cなどと違って、実行中に未定義の状態になることはありません。配列の範囲外にアクセ

    Type Checking Ruby Programs with Anntations - soutaroブログ
  • 2017年はFigmaである - soutaroブログ

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

    2017年はFigmaである - soutaroブログ
  • Objective Cでnilと向き合う - soutaroブログ

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

    Objective Cでnilと向き合う - soutaroブログ
  • ■ - soutaroブログ

    静的型情報を効果的に使うことで簡潔に書けるケースがあることを示したかったのです。 型付けについてのまつもとさんとみずしまさんのやりとり - Togetterまとめ これ、リアルタイムでiPhoneから眺めてたときは気づかなかったんだけど(外だったし)、要するに水島さんが言ってるのの簡単な例としてはオーバーローディング(ad-hoc polymorhismだっけ)でいいんじゃないかと思った。あ、Matzが言ってた。 あと、Haskellのreturnは型がないとできないよって言われたので、その辺もう少し勉強すべきだと思った。Haskell書くか。 個人的には、型システムってMLくらい単純なやつで、明らかに変なプログラムをrejectするためだけに使うくらいしか使い道がないんじゃないかと思ってる。ad-hoc polymorphismとかもっとできることをできるからってやる方向はあるだろうけど

    ■ - soutaroブログ
  • SATソルバを使うためにCNFを作る - soutaroブログ

    SATソルバっていうのは,充足可能性問題(SATisfiability problem)を解いてくれるソフトウェアのことで,SATソルバで数独を解くとか,以外と身近なところに応用があったりします.SATソルバは数独を解くだけじゃなくて,プログラムの停止性の判定に使うとか,いろいろな応用を考えることができる良いものです.普通,SATソルバはCNFという論理式の特殊な形を取り扱います.日語だと乗法標準形とか言うらしいですけど,別にこの言葉は忘れても良いと思います.詳しくはWikipediaでも見てもらえれば良いのですが,CNFは,変数かそのnot付けたやつ,をorで結んだやつ,をandで結んだやつ,という意味です. CNF ::= c1 && ... && c2 c ::= l1 || ... || l2 l ::= x | !x 任意の論理式(変数(x)とor(||)とand(&&)と「な

    SATソルバを使うためにCNFを作る - soutaroブログ
  • 1