iii ThreeTreesLight

about me / / /

"フルスタックエンジニアって、ようはRPGの「赤魔導士」とか一緒で、序盤は重宝するけど中盤以降に上級の専門職ユニットが使えるようになると、リストラされるアレ"

Twitter / fladdict (via igi)

(via kasei-san)

3 weeks ago  Notes (336)

(Source: sheepfilms, via kasei-san)

i18nのtranslation missingをテストする

i18nのtranslation missingをテストする

i18n対応したサービスを提供していると、i18nのdictが一部抜けていたり、デザイン崩れているじゃんって事が多々有りますよね?

で、そういうのをデプロイ前に未然に防ぎたいと思ってcontroller specにて、translation_missingが含まれているかとかチェックしていたけど、複数人で書いていると中々網羅性に掛けたりして困ってました。

そういうときに便利なのがi18n-task gem

install

gemいれて

$ vim Gemfile
gem 'i18n-tasks', '~> 0.4.5' 

$ bundle

configuration

デフォルトの言語はja、テスト対象はja, enにしたいと思います。

$ i18n-tasks config > config/i18n-tasks.yml
$ vim config/i18n-tasks.yml

base_locale: ja
locales: [ja, en]

# dictを分割している場合は、それぞれ読み込んじゃいます。
data:
  read: 
    -  'config/locales/defaults/%{locale}.yml'
    -  'config/locales/views/defaults/%{locale}.yml'
    -  'config/locales/views/foo/%{locale}.yml'

実行

# translation missing
$ i18n-tasks missing

# unused
$ i18n-tasks unused

さらに使っていない物をremoveしたり、検索対象やremoveに際しignoreする事もconfigurationできます。

rspec

spec/view/translation/i18n_spec.rbを追加することで、CIでちゃんと試験してくれるようになります。

require 'spec_helper'
require 'i18n/tasks'

describe 'I18n' do
  let(:i18n) { I18n::Tasks::BaseTask.new }

  it 'does not have missing keys' do
    count = i18n.missing_keys.count
    fail "There are #{count} missing i18n keys! Run 'i18n-tasks missing' for more details." unless count.zero?
  end

  it 'does not have unused keys' do
    count = i18n.unused_keys.count
    fail "There are #{count} unused i18n keys! Run 'i18n-tasks unused' for more details." unless count.zero?
  end
end

遣り過ぎるとメンテナンス性が落ちたり、設定が複雑化することもあるので、現行プロジェクトではtranslation missingだけの抽出を対象にしています。

やっと心が安らぐ。。。

1 month ago  Notes (0)

#rails #i18n

スクリーンショットを直接クリップボードに保存する方法

結構あるあるなのですが、Automan作ったりスクリプト書いたりどうなの?って思ってたら、公式にあったとか悲しい。

OS X Mountain Lion: 画面を撮影するためのショートカット

画面の写真(スクリーンショット)はデスクトップ上にファイルとして保存されますが、スクリーンショットをクリップボードに保存したい場合は、Control キーを押しながら他のキーを押します。クリップボードに保存したピクチャは、書類にペーストできます。

つまり範囲指定且つclipbordで登録する場合

cmd + shift + 4 + ctrl

1 month ago  Notes (0)

#osx #screenshot

(via kasei-san)

"たまにUNIX系のレシピ読むと「適当なディレクトリ」という記述を見た瞬間に詰みます。料理できない人が「醤油適量」で死ぬくらいの致死率です。"

WindowsのあのフォルダはUNIX/Linuxで言えばあそこだ - Qiita (via zoker)

(via kasei-san)

1 month ago  Notes (488)

[objctive-c][ios]primitiveな変数をカテゴリ拡張したい

さて、boolやintなどpremitiveな変数をカテゴリ拡張して扱えない。

KVCが行えないため、setterやgetterを定義できないため。

intの場合

intの場合はNSNumberを使えば問題ないのだけど、BOOLはそうもいかない。

Boolの場合

不可能なので、NSNumberからのboolvalueで代用

header file

@property (nonatomic, strong, readonly) NSNumber    *foo;

method file

@dynamic foo;

- (NSNumber *)foo
{
    return objc_getAssociatedObject(self, @selector(setFoo:));
}

- (void)setFoo:(NSNumber *)foo
{
    objc_setAssociatedObject(self, _cmd, foo, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

からのboolValue setterは

self.foo = [NSNumber numberWithBool:YES];

からのboolValue getterは

- (BOOL)boolFoo
{
    if (self.foo) {
        return [self.foo boolValue];
    }
    return NO;
}

という感じ。

参照:how-to-add-bool-property-to-a-category

1 month ago  Notes (0)

#objc #bool #category