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とかでも同じ問題が発生しているはずだし、他のディスプレイでも同じことが起きているかもしれない。…

開発のスループットを犠牲にしてレイテンシを向上させる

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~作者: Mike Cohn,マイクコーン,安井力,角谷信太郎出版社/メーカー: 毎日コミュニケーションズ発売日: 2009/01/29メディア: 単行本(ソフトカバー)購入: 74人 クリック: 764回この…

inputでエンターキーを押しても、formのsubmitイベントが発生しないのはどうすれば良いの?

いつも忘れて混乱するので書いておく。細かいルールを解説したページを前見たんだけど見つけられない……formの中にinput[type=submit]なinput要素がないと、テキストフィールドでエンターを押してもsubmitイベントが発生しない。見えないようにしたsubmitボタ…

テキストフィールドの値の変更の監視にはkeyupイベントではなくてinputイベントを使おう

漢字が読めないがいこくじんやようちえんじにもひらがなならよめるね!アクセシブル!という話ではなくて、keyupイベントを使ってテキストフィールドの変更を監視するとiOSでこんなことになります(多分、変換の確定がキーイベントじゃない)。左上の「かん…

ユビレジで水が飲めるようになるまでの話

水が飲めるようになるまでの例え話にだけ食いついてみる。まあタイトルはちょっと嘘で「お菓子を食べられるようになるまで」の話ですけどね。 権限委譲、リーダーシップ、チーム - naoyaのはてなダイアリー ユビレジは、2010年に始めたスタートアップです。…

テストが通らなくて5時間泣いた話をしようか

class MyError < StandardError attr_reader :exception def initialize(exn) @exception = exn end end begin begin 1/0 rescue ZeroDivisionError => exn raise MyError.new(exn) end rescue MyError => exn p "rescue MyError", exn rescue Exception => …

要望を、忘れることで穏便かつ確実にリジェクトする

先日ちょっと社内で議論をして、ユビレジの改善に関するアイディアの出し方を整理しました。これまでどうやってたかというと、BasecampのTodoリストにリストアップしていた。これを止めることにしました。基本的には、Discussionという機能を使います(要す…

2012年の最後にSSDにしてみた

まあーMacは遅い。メモリ16GBも積んでるのに遅い。XcodeとRubyMineとRailsとAparture起動すると、16GB使い切る。というか「現在非使用中」とか書いてある領域が6GBくらいあって、遅い。レインボーくるくるが始まると遅い。*1たくさんある「現在非使用中」が…

Objective-Cの残念な子なところ

__blockがうざすぎる。 NSArray* a = [object foo]; NSArray* b = [a bar]; NSArray* c = [b baz];とかあったりして、ここいらがどうも遅い気がするので時間を計測したいとしよう。まずはこんな感じ。 NSDate* start = [NSDate date]; NSArray* a = [object …

Cucumberは偉かった

Cucumberを初めて見た人はこんな違和感を感じるんじゃないかと思います。 なんだこれ。変なDSL入れるより、直接Rubyプログラムを書いちゃう方が楽じゃん。便利じゃん。速いじゃん。 僕もそう思っていました。そう思ったプログラマは、Cucumberを使わずにTest…

PABさんのユビレジへのジョインについて

PABさんがユビレジにジョインしました。バリバリScalaでプログラミングされてる方で、水島を採用したときから恐れてはいたとおり、ユビレジがどんどんScalaに汚染されていきます。ああどうしましょう。(あ、念のため白々しく宣言しておきますが、私は引き続…

みずほ銀行のATMのテンキーがおかしい件

あなたが日常的に見ているテンキーには(たぶん)2種類あることに、気づいているだろうか。 画像は、iOS 6に搭載されている「電話」と「計算機」のスクリーンショットである。テンキーの順序が逆になっている。なんで逆になったのか、なんだかよくわからない…

Silent Wednesday

ジェイソン・フリード:なぜ職場で仕事ができないのか | Talk Video | TED.com 【TED Talks】なぜ職場で仕事ができないのか/ジェイソン・フリード | 書き起こし.com オフィスが仕事をするための理想的な環境でないという問題についての、37signalsの社長Json…

複数のプロジェクトでGemfileを共有する方法

require 'pathname' instance_eval (Pathname(__FILE__)+"another_project/Gemfile").read) などとします。 なんでこんなことやりたいの? Railsのプロジェクトをテストするためのプロジェクトを用意して、そっちでもRailsのモデルを読みたいのです*1。さら…

なんでソフトバンクにいかないといけないのか

例えばSquareはSSNを取って契約者の身元の担保にしているわけだと思うのですが、それがない国だとこうなるのかなーという気もします。ソフトバンクのiPhoneが必要なのは、まあソフトバンクの戦略なのかもしれませんが、その辺りの契約者の情報をきちんと確認…

Paypal Hereを買ってきました

https://www.paypal.jp/here/Webページには書いてないけどソフトバンクのiPhoneが必要という噂の、Paypal Hereを買ってきました。(僕のiPhoneはSoftbankなので、auだとダメなのかとかわかりません。)Paypal Hereの購入に必要そうな手続きとか、Softbankで…

第3回 iphone_dev_jp 東京iPhone/Mac勉強会でFrankの紹介をしました

サンプルプログラムとプレゼンテーションを公開します。https://github.com/soutaro/chefpad各方面に(いらん)配慮をした結果、サンプルプログラムは画像リソースを削除してあります。(どの方面かはプレゼンテーションの中に残してあるスクリーンショット…

Core Dataに久々にはまった

ユビレジを使っているお客さんから商品のダウンロードがえらい遅いという報告を受けました。さあ、いったい何が起きている??遅い原因は、二つありました。 インポートの際に手抜きをして、Find-or-Createをナイーブに実装していた saveがめちゃくちゃ遅い …

SelectorKitというライブラリを公開します

http://soutaro.github.com/SelectorKitiOSアプリのViewを指定するためのselectorです。割とCSSセレクタに似た構文にしています。uiQueryというのがあるのですが、これを書くのがかなりしんどいのでかっとなって作りました。ドキュメントに書いてないのです…

FrankでRubyからiOSアプリを操作してテストする

昨日の話の続きです。 iOSアプリのインテグレーションテストに関する問題 - soutaroにっき こんな感じでテストを書くことができます。 ENV['RAILS_ENV'] = 'development' require File.expand_path('../../server/config/environment', __FILE__) require 'r…

iOSアプリのインテグレーションテストに関する問題

iOSにかぎらず、今日のアプリケーションではサーバとクライアントの両方を開発しなくてはいけないことが、決して特別ではありません。その際にややこしいのが次のような事情です。 開発は同時に行われるので、厳密にプロトコルを予め決めておいて、モックだ…