Quantcast
Channel: くりにっき
Viewing all 446 articles
Browse latest View live

「勉強会を始めるまで」で発表するつもりでした #java_ja

$
0
0

java-ja.勉強会勉強会で発表するつもりだったのですが、当日急に体調が悪くなってしまったので資料だけアップしてました。*1

代理発表してくれた @さんありがとうございます!

補足

スライドの12枚目

  • 普段自分が参加している勉強会で登壇者として立つことが、そのコミュニティに対する一番の恩返しだと思います。

スライドの13枚目

  • 質問されやすいようにわざと穴を開けておくのもテクニックの1つw
  • 起承転結重要
    • 短いLTなら「転」は不要
    • 最後にまとめがないとしまらない
    • 自分が意識しているのは「自己紹介、アジェンダ(起)」→「本題(承)」→「まとめ、オチ(結)」

追記

数年に一度の大腹痛は尿管結石でした・゚・(つД`)・゚・ 

*1:数年に一度の大腹痛で病院への往復もしんどかった・・・


TDD Boot Camp 横浜 3rd に参加してました #TDDBC

$
0
0

TAとして手伝いに行ったはずがGroovyの人数が足りなくて急遽 id:yamap_55さんとペアプロをすることになりました。

当日のリポジトリ

https://github.com/sue445/tddbc_yokohama_20131005

ペアプロの流れ

  1. gradleのバージョンが古すぎて gradle ideaできなかったのでダウンロード
  2. 題1にとりかかる
  3. 途中までやったところで題2で作ったメソッドを元に題1をやった方がいいと判断し題1を後回しに
  4. 題2が終わって題1に戻る
  5. 題3をすすめる
  6. 題3が終わったところで残り10分だったので ネタでTravis CIと連携させてみることに
  7. 手順は GithubにあるリポジトリをTravis CI連携する手順 #junitbook - くりにっきを参照
  8. 「Github Travis」でググれば2番目に出てくるw f:id:sue445:20131006224543p:plain
  9. githubにpushした後にtravis側でテストが実行されるのに若干時間かかったものの、丁度10分で設定完了

IntelliJ IDEAで日本語テストメソッド名にするとテストが見つからない時の対処法 (Mac Mountain Lion以降)

PC再起動も必要とは思わなかったw

今回初めて知ったGroovyの豆知識

任意のクラスからbooleanへの暗黙的なキャスト

staticboolean isValid(String version) {
        try {
            parse(version)
        }catch(e) {
            false
        }
    }

    static JdkVersion parse(String version) {

Groovyだとreturnが省略できるのはもちろんだけど、 parseの戻り値は JdkVersionだがisValidの戻り値がbooleanなので勝手に

return parse(version) != null

みたいなことをやってくれてるらしい

正規表現のキャプチャが楽

static JdkVersion parse(String version) {
        def m = version =~ /^JDK([0-9]+)u([0-9]+)$/
        if(!m) {
            thrownewIllegalArgumentException()
        }
        String strFamilyNumber = m[0][1]
        String strUpdateNumber = m[0][2]

rubyperl$1, $2にはまだ負けるけど、素のJavaでやるのに比べたらすごい簡単

ちなみに似たようなことをJavaでやろうとするとこうなる https://github.com/sue445/kulib/blob/master/src/main/java/net/sue445/kulib/util/RegexUtil.java

as

        jdkVersion.familyNumber = strFamilyNumber asint

familyNumberintstrFamilyNumberStringなのですが、Integer.parseIntしなくていいらしい

懇親会のLT

まとめ

Groovy素晴らしい

最後に

id:yamap_55さんのおかげでGroovyについて初めて知ることが多かったです。ありがとうございます!

参考書籍

プログラミングGROOVY

プログラミングGROOVY

Chrome Gitlab Notifierを作りました

$
0
0

会社でGitlabを使ってるのですが、通知がメールしかないのが不便だったのでchromeの拡張として作りました。 1ヶ月くらい仕事で試用してだいぶこなれてきたので勢いで公開。*1

公開して気づいたのですが、スクリーンショットがないとどんなツールかさっぱり分からないので何か追加します。。。

GitlabのAPIを使って気づいたことなど

  • 自分のプロフィールのprivate tokenを設定するだけでAPIにアクセスできるのは簡単
  • イベント(Issue, Milestore, MergeRequest)は取れるのですが、MergeRequestとかに対するコメントがとれないのが不便
    • Noteがそれに対応するのかと思ったのだけど、responseを見てもMergeRequestなのかIssueなのかよく分からない
  • イベントの更新日時が取得できない

あとネタでテストを書きました

ブコメ返信

id:waniji

早速入れてみたら通知がわんさか来て焦ったw

初回実行時はキャッシュがないため受け取ったイベントは全部新着扱いになってます。 キャッシュがない時は通知出さない方がよさそうですねw

追記

公開して気づいたのですが、スクリーンショットがないとどんなツールかさっぱり分からないので何か追加します。。。

スクショ追加done。1280x800 か 640x400しか使えないのが地味に面倒。

*1:勢い大事

AZusaar!!の楽天トラベルAPIを2013-10-24にアップデートしました

$
0
0

楽天トラベル系API バージョンアップと「api.rakuten.co.jp」で提供しているAPIに関するお知らせ - 楽天ウェブサービスブログ

AZusaar!!でも誰も気づいてないと思うけど楽天トラベルの 施設検索APIを使ってるのでアップデートしました。

APIのエンドポイントだけ変わってると思ったら細かいところで変わってたのでメモ。

developerIdがなくなって applicationIdになった

400エラーになるんだけど サンプルにあるようなエラーのJSONレスポンスが出なかったので原因が分かりづらかった

jsonpのコールバック関数名が callBackから callback(全部小文字)になった

お、お、おう・・・

JSONの構造が変わった

before (version: 2009-10-20)

{"Body":{"SimpleHotelSearch":{"hotel":[{"hotelBasicInfo":{"hotelNo":1661,
            "hotelName":"目黒雅叙園",
            // 略},
        },
        {"hotelBasicInfo":{// 略},
        },
      ],
    },
  },
}

after (version: 2013-10-24)

{"hotels":[{"hotel":[{"hotelBasicInfo":{"hotelNo":1661,
            "hotelName":"目黒雅叙園",
            // 略},
      ],
    },
    {"hotel":[{// 略},
      ],
    },
  ],

ほぼリファレンスどおりなんですがhotelの中が配列になってるとは思わなかった。*1

実際に2013-10-24 にアップデートしたコード

upgrade to rakuten travel API ver 2013-10-24 : resolve #10 · 6b31c0e · sue445/azusaar_js

*1:APIの仕様的に1つのhotelの中に複数要素が入るなんてありえないと思うんですがねぇw

RubyMineからbundle execする方法

$
0
0

RubyMineは1年以上使ってるのですが、IDE上から rails serverrspecしようとすると Gemfileのgemではなく「preferences >RubySDK and Gems >RubySDK」のgemを参照するため、Gemfileとは別に gem install rails rspecとかやっていてモニョーンとなっていました。

RubyMineから bundle execする方法も見つからなかったのですが、偶然見つけたので備忘録として残しておきます。

設定場所

Run > Edit Configurations

f:id:sue445:20131114143420p:plain

Defaults >RSpecとかRails> Bundler

Run the script in context of the bundle (bundle exec) にチェックを入れる

f:id:sue445:20131114143735p:plain

ヒストリが残ってたら全部消す。

これで bundle exec rspecできるようになりました!!!!!!!

ちなみに

f:id:sue445:20131114143928p:plain

ヒットしない(´・ω・`)

Jasmineではdescribeの中は1回しか評価されてなかった

$
0
0

describeの内側で宣言した変数が毎回初期化されてるか気になったので。 たぶんドキュメントのどっかに書いてありそうだけど 英語を読むのが大変なのでコード書く方が速いので実際にコードを書いて調べてみました。

コード

結果

Error: Expected 2 to equal 1.

orz

JUnitだとテストクラスのインスタンスが毎回生成されてるためインスタンス変数でもOKなんですが、Jasmineだと1回しか評価されていない模様。

こんな感じにローカル変数で持ちつつ、 beforeEachで明示的に初期化するのがよさそう

RubyMineやWebStormをインストールしたら設定してること

$
0
0

@さんの IntelliJ IDEAをインストールしたら設定してること(Java/Groovy編) — うさぎ組に影響されて書いてみました。

JetBrains系のIDEは設定がほとんど共通してるため、他のIDEでも参考になります。(WebStorm, RubyMineでも使えました)

上記エントリ以外でやってることを書きます

typo warningの抑制

f:id:sue445:20131204235644p:plain

Inspections -> Spelling ->Typoのチェックを外したらwarningが出なくなりますが、それだとバグに気づきにくくなるので辞書登録して抑制した方がいいです。

Spelling -> Dictionaries

f:id:sue445:20131205000342p:plain

ここに辞書ファイル(単語が羅列されたテキストファイル)があるディレクトリを登録すればOK

辞書登録前

f:id:sue445:20131205000005p:plain

画像は いろふ Advent Calendar 2013 : ATNDで投下するネタですw

辞書ファイル

テキストファイルであれば拡張子は何でもいいですが、RubyMineにバンドルされていたのが拡張子dicだったのでそれを使ってます。*1

idea.dic

irof
klass

大文字・小文字は区別されない模様

辞書登録後

f:id:sue445:20131205000037p:plain

緑の波線で出ていた警告が消えました。

辞書ファイルはgithubに置いておけば他の環境でも使えるし、プロジェクトにコミットしておけば他のメンバも利用できるようになります。

[RubyMine] railsrspecをbundle execで実行する

何もしないと普通に railsコマンドや rspecコマンドで実行してシステムに入ってるgemを使うため設定必須(これやらないとGemfileがあるのにgemが見つからないってエラーになる)

以前エントリ書いたのでそれを参考にしてください。

RubyMineからbundle execする方法 - くりにっき

分からないことがあったら

検索ワードに「 IntelliJ IDEA」や「WebStorm」をつけるとだいたいヒットするので、それを自分が使ってるIDEに設定にします。

*1:拡張子txtにしたら認識されなかったのでdicじゃないとダメみたい

irofさんをJUnitで走らせてみた #irof_history

$
0
0

はじめに

これは いろふ Advent Calendar 2013 : ATNDの7日目です

6日目

@さんの "性善説"いろふさん登場! #irof_historyでした

7日目:irofさんをJUnitで動かしてみた

id:irofさんは走るとすぐに疲れます

そしてirofさんといえばJUnitです。

そこでirofさんをJUnitにしてみました

Irof Runner

irofさんと一緒に走りましょう!

@RunWith(Irof)
class SampleIrofTest {
    @Test
    void"test 01"(){
    }

    @Test
    void"test 02"(){
    }

    // ....

    @Test
    void"test 162"(){
    }

    @Test
    void"test 163"(){
        // test failed!
    }

しかしirofさんは走ると疲れてしまいます

162*1テストケースを走ると疲れてしまうので、163個目で疲れてエラーになってしまいます

ソースコード

https://github.com/irof/irof_history/tree/master/irof-runner

maven central repositoryに公開する気はないので、使いたい場合には下記をコピペしてくればいいと思います( ´∀`)

Irof.groovy

package irof.runner

import org.junit.runner.notification.RunNotifier
import org.junit.runners.BlockJUnit4ClassRunner
import org.junit.runners.model.FrameworkMethod
import org.junit.runners.model.InitializationError

class Irof extends BlockJUnit4ClassRunner {
    staticfinalint MAX_IROF_COUNT = 162staticint testCount = 0

    Irof(Class<?> klass) throws InitializationError {
        super(klass)
    }

    @Override
    protectedvoid runChild(FrameworkMethod method, RunNotifier notifier) {
        testCount++
        if(testCount > MAX_IROF_COUNT){
            thrownewIrofTiredException()
        }
        originalRunChild(method, notifier)
    }

    protectedvoid originalRunChild(FrameworkMethod method, RunNotifier notifier){
        super.runChild(method, notifier)
    }
}

IrofTiredException.groovy

package irof.runner

classIrofTiredExceptionextendsRuntimeException {
    IrofTiredException(){
        super("つかれた")
    }
}

分からなければJUnit実践入門を読めばいいと思います(ステマ)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

まとめ

さぁみんなも自分のテストコードにirofさんをインストールしましょう!

8日目

@さん

*1:いろふ


jenkins-backup-scriptを作りました

$
0
0

会社でそういう需要があったので作りました

https://github.com/sue445/jenkins-backup-script

Jenkinsのバックアップ方法を探していて Backup Pluginというのはあったのですが、これだと手動バックアップしかできなかったので、Jenkinsのジョブ上で定期実行するために自分で作成。

想定としては

  • jenkins-backup-script 自体をJenkinsのジョブとして実行
    • githubからcloneして使うので、普通のジョブの設定と同じ
    • crontab形式で指定できるので1日1回定期実行
  • 設定ファイルとプラグインを階層構想を保持してtar.gzでアーカイブ
    • (弊社の場合)インフラチームのスクリプトでtar.gzファイルを別のサーバに転送
  • プラグインをアップデート前に手動バックアップしておいて、何かあったらバックアップから復旧
    • tar.gzを展開してそのまま上書きするだけ

という感じです

なんとなく二番煎じくさいですが、ググっても自分が作ったようなのは見つかりませんでした。

みんなJenkinsの定期バックアップはしなかったり、社内スクリプトなので外部に公開してないのだろうか。。。

カスタマイズしたければ適当にforkしてください。

あと、bashだけで書いているのでUNIX系ならどんな環境でも動くはずですが、Debian lennyとCentOS 6でしか動作確認してないので若干不安。。。

Agile Samurai Base CampでTDDのお手伝いをしていました #agilesamurai

$
0
0

TDDクラスタつながりで声がかかったので Agile Samurai Base Campのお手伝いしてきました。

当日やったこと

午後の部のTDDセッションで @さんとJavaScript(Jasmine)のハンズオン

当日の資料

当日のペアプロリポジトリ

自分のKPT

Keep

  • 前日にスタッフで素振りが出来た
  • カンペ用意していてよかった
  • JavaScriptでTDDやるにあたってのフレームワークの紹介などを資料にまとめておいてよかった
  • WebStormのステマ
    • terminalでslやるの忘れてたw

Problem & Try

  • 時間配分ミスった
    • TDDなのにテストあまり書いてないorz
    • ベースになるプロジェクトは予め用意しておいて、ハンズオンではテスト書くところから始めるべきだった
  • 会場の関係で声が後ろまで聴こえていたかどうかは不明

Rubyでプリキュアを作った #cure_advent

$
0
0

これは プリキュア Advent Calendar 2013の16日目です。

はじめに

12/16はキュアピースの中の人の金元寿子さんの誕生日です。おめでとうございます!!!

ピカピカぴかりんじゃんけんぽん!キュアピース!

#いい夫婦の日なので嫁を晒す

#いい夫婦の日なので嫁を晒す 会社の方

トリプルピース

15日目

id:tdakakさんの ハートキャッチプリキュア!の好きなところでした

16日目:Rubyプリキュアを作った

Rubicure*1というプリキュアのgemを作りました。

プリキュアハッカソンid:drillbitsさんが作っていた pycureインスパイヤされてRuby版を作りました。(Ruby 2.0以上必須)

使い方

gem install rubicure

してください irb

require"rubicure"

すれば使えるようになります。

実際に使ってみます。

Rubicure::Seriesを取得

Precure.〜でそれっぽいタイトルを入れればRubicure::Seriesを取得できます。

Precure.max_heart.title
#=> "ふたりはプリキュア Max Heart"Precure.splash_star.title
#=> "ふたりはプリキュア Splash Star"Precure.yes.title
#=> "Yes! プリキュア5"Precure.yes_gogo.title
#=> "Yes! プリキュア5 Go Go!"Precure.fresh.title
#=> "フレッシュプリキュア!"Precure.heart_catch.title
#=> "ハートキャッチプリキュア!"Precure.smile.title
#=> "スマイルプリキュア!"Precure.dokidoki.title
#=> "ドキドキ!プリキュア"

ここで勃発する初代(無印)問題。

無印は下記のようにunmarkedを使うか、Precureから Rubicure::Seriesのメソッド呼んだ場合無印になります。*2

Precure.unmarked.title
#=> "ふたりはプリキュア"Precure.title
#=> "ふたりはプリキュア"

余談ですがここの method_missingは地味に面倒くさかったです

defmethod_missing(name, *args)
      unmarked_precure = Rubicure::Series::find(:unmarked)

      ifRubicure::Series::valid?(name)
        Rubicure::Series::find(name)
      elsif unmarked_precure.respond_to?(name)
        unmarked_precure.send(name, *args)
      elsesuperendend

タイトルのaliasも一通り用意しているのでまず困ることはないかと思います。 https://github.com/sue445/rubicure/blob/master/config/series.yml

放映中のプリキュアを取得

Precure.nowPrecure.currentで取れます。

Precure.now
#=> {:title=>"ドキドキ!プリキュア", :started_date=>Sun, 03 Feb 2013, :ended_date=>Sun, 26 Jan 2014, :girls=>["cure_heart", "cure_diamond", "cure_rosetta", "cure_sword", "cure_ace"]}Precure.current
#=> {:title=>"ドキドキ!プリキュア", :started_date=>Sun, 03 Feb 2013, :ended_date=>Sun, 26 Jan 2014, :girls=>["cure_heart", "cure_diamond", "cure_rosetta", "cure_sword", "cure_ace"]}

プリキュアの放送がされてない期間(下のサンプルだとスマイルとドキドキの空白期間)ではエラーになります

require"delorean"Delorean.time_travel_to "2013-02-01"Precure.now
#=> RuntimeError: Not on air precure!

現在時刻系のテストには delorean使うと超便利

日付を渡して放映期間中かどうか調べる

Rubicure::Series#on_air?メソッドに DateTimeか日付っぽい文字列*3を渡します

Precure.dokidoki.on_air?("2013-12-16")
#=> truePrecure.smile.on_air?("2013-12-16")
#=> false

番組に出てくるプリキュアの一覧を取得する

Rubicure::Series#girlsRubicure::Girlの配列が返ってきます

Precure.smile.girls
#=> [#<Rubicure::Girl:0x007fbd60a5d6e0 @human_name="星空みゆき", @precure_name="キュアハッピー", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ハッピー!!)\nキラキラ輝く未来の光! キュアハッピー!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスハッピー", "ウルトラハッピー"], @current_state=0, @state_names=["星空みゆき", "キュアハッピー", "プリンセスハッピー", "ウルトラハッピー"]>, #<Rubicure::Girl:0x007fbd60a5d5c8 @human_name="日野あかね", @precure_name="キュアサニー", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!サニー!!)\n太陽サンサン熱血パワー! キュアサニー!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスサニー", "ウルトラサニー"], @current_state=0, @state_names=["日野あかね", "キュアサニー", "プリンセスサニー", "ウルトラサニー"]>, #<Rubicure::Girl:0x007fbd60a5d500 @human_name="黄瀬やよい", @precure_name="キュアピース", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ピース!!)\nピカピカピカリンジャンケンポン! キュアピース!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスピース", "ウルトラピース"], @current_state=0, @state_names=["黄瀬やよい", "キュアピース", "プリンセスピース", "ウルトラピース"]>, #<Rubicure::Girl:0x007fbd60a5d410 @human_name="緑川なお", @precure_name="キュアマーチ", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!マーチ!!)\n勇気リンリン直球勝負! キュアマーチ!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスマーチ", "ウルトラマーチ"], @current_state=0, @state_names=["緑川なお", "キュアマーチ", "プリンセスマーチ", "ウルトラマーチ"]>, #<Rubicure::Girl:0x007fbd60a5d320 @human_name="青木れいか", @precure_name="キュアビューティ", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ビューティ!!)\nしんしんと降り積もる清き心! キュアビューティ!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスビューティ", "ウルトラビューティ"], @current_state=0, @state_names=["青木れいか", "キュアビューティ", "プリンセスビューティ", "ウルトラビューティ"]>]Precure.smile.girls.map(&:human_name)
#=> ["星空みゆき", "日野あかね", "黄瀬やよい", "緑川なお", "青木れいか"]Precure.smile.girls.map(&:precure_name)
#=> ["キュアハッピー", "キュアサニー", "キュアピース", "キュアマーチ", "キュアビューティ"]Precure.smile.girls.count
#=> 5

Cure.~

Rubicure::GirlRubicure::Series#girls経由じゃなくても取得できます

Cure.lemonade
#=> #<Rubicure::Girl:0x007fbd60ae72a0 @human_name="春日野うらら", @precure_name="キュアレモネード", @transform_message="プリキュア!メタモルフォーゼ!\nはじけるレモンの香り、キュアレモネード!\n希望の力と未来の光!\n華麗に羽ばたく5つの心!\nYes!プリキュア5!\n", @extra_names=[], @current_state=0, @state_names=["春日野うらら", "キュアレモネード"]>Cure.pine
#=> #<Rubicure::Girl:0x007fbd60aee640 @human_name="山吹祈里", @precure_name="キュアパイン", @transform_message="チェインジ!プリキュア・ビートアップ!\nイエローハートは祈りのしるし!\nとれたてフレッシュ、キュアパイン!\nレッツプリキュア!\n", @extra_names=["キュアエンジェルパイン"], @current_state=0, @state_names=["山吹祈里", "キュアパイン", "キュアエンジェルパイン"]>Cure.muse
#=> #<Rubicure::Girl:0x007fbd60af7510 @human_name="調辺アコ", @precure_name="キュアミューズ", @transform_message="レッツプレイ!プリキュアモジュレーション!!\n爪弾くは女神の調べ! キュアミューズ!\n響け4人の組曲!スイートプリキュア!\n", @extra_names=["クレッシェンドミューズ"], @current_state=0, @state_names=["調辺アコ", "キュアミューズ", "クレッシェンドミューズ"]>Cure.peace
#=> #<Rubicure::Girl:0x007fbd60aceca0 @human_name="黄瀬やよい", @precure_name="キュアピース", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ピース!!)\nピカピカピカリンジャンケンポン! キュアピース!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスピース", "ウルトラピース"], @current_state=0, @state_names=["黄瀬やよい", "キュアピース", "プリンセスピース", "ウルトラピース"]>Cure.rosetta
#=> #<Rubicure::Girl:0x007fbd60af42c0 @human_name="四葉ありす", @precure_name="キュアロゼッタ", @transform_message="プリキュアラブリンク!\nL! O! V! E!\nひだまりポカポカ キュアロゼッタ!\n響け愛の鼓動!ドキドキプリキュア!\n世界を制するのは愛だけです、\nさぁ、あなたも私と愛を育んでくださいな\n", @extra_names=[], @current_state=0, @state_names=["四葉ありす", "キュアロゼッタ"]>

シャイニールミナスミルキィローズは下記の方法で取得してください

Shiny.luminous
#=> #<Rubicure::Girl:0x007fbd60ad7288 @human_name="九条ひかり", @precure_name="シャイニールミナス", @transform_message="ルミナス・シャイニングストリーム!\n輝く命、シャイニールミナス!\n光の心と光の意志、すべてを一つにするために!\n", @extra_names=[], @current_state=0, @state_names=["九条ひかり", "シャイニールミナス"]>Milky.rose
#=> #<Rubicure::Girl:0x007fbd60aded08 @human_name="美々野くるみ", @precure_name="ミルキィローズ", @transform_message="スカイローズ・トランスレイト!\n青いバラは秘密のしるし! ミルキィローズ!\n", @extra_names=[], @current_state=0, @state_names=["美々野くるみ", "ミルキィローズ"]>

その他alias https://github.com/sue445/rubicure/blob/master/config/girls.yml

Rubicure::Girl

nameで現在の名前が取れます

yayoi = Precure.smile.girls[2]

yayoi.name
#=> "黄瀬やよい"

transform!で掛け声とともに変身し、nameも変わります

yayoi.transform!

(レディ?)
プリキュア・スマイルチャージ!
(ゴー!ゴー!レッツ・ゴー!ピース!!)
ピカピカピカリンジャンケンポン! キュアピース!
5つの光が導く未来!
輝け!スマイルプリキュア!

yayoi.name
#=> "キュアピース"

第2形態以降もあれば繰り返し変身します(が、掛け声はありません)

yayoi.transform!
yayoi.name
#=> "プリンセスピース"

yayoi.transform!
yayoi.name
#=> "ウルトラピース"

最後までいくと人間に戻ります

yayoi.transform!
yayoi.name
#=> "黄瀬やよい"

humanizeだと途中でも変身を解除して人間に戻ります

yayoi.transform!.transform!
yayoi.name
#=> "プリンセスピース"

yayoi.humanize
#=> 0
yayoi.name
#=> "黄瀬やよい"

プリキュアオールスターズ

Precure.all_starsプリキュアオールスターズ全員取得できます

Precure.all_stars.count
#=> 33Precure.all_stars.map(&:precure_name)
#=> ["キュアブラック", "キュアホワイト", "シャイニールミナス", "キュアブルーム", "キュアイーグレット", "キュアドリーム", "キュアルージュ", "キュアレモネード", "キュアミント", "キュアアクア", "ミルキィローズ", "キュアピーチ", "キュアベリー", "キュアパイン", "キュアパッション", "キュアブロッサム", "キュアマリン", "キュアサンシャイン", "キュアムーンライト", "キュアメロディ", "キュアリズム", "キュアビート", "キュアミューズ", "キュアハッピー", "キュアサニー", "キュアピース", "キュアマーチ", "キュアビューティ", "キュアハート", "キュアダイヤモンド", "キュアロゼッタ", "キュアソード", "キュアエース"]

未実装

  • transform_with
    • 初代だとパートナーがいないと変身できないという設定なので
    • ただ、厳密にやろうとするとパートナー妖精も考慮しないといけなくなるのでYAMLだけでなんとかするのは限界があった
  • (みなと)みらいのともだち
    • 坂上あゆみ?知らない子ですね
  • S☆S
    • 満と薫?知らn(ry

映画プリキュアオールスターズ NewStage みらいのともだち 特装版 【Blu-ray】

映画プリキュアオールスターズ NewStage みらいのともだち 特装版 【Blu-ray】

参考になったもの

まとめ

  • rubyを書き始めてまだ1年半ですが、自分が使いたいものを作ったり RailsにPullRequestを送る程度には使いこなせるようになったと思います
  • ネタgemを作るとメタプロが捗る *4

おまけ

せっかくなのでcodeclimate登録してみたらGPA 4.0でした (・ω<)

f:id:sue445:20131215233131p:plain

ブコメレス

いや無印はunmarkedじゃないでしょう……firstとかが妥当

Enumerable以外でfirst使うのはそれはそれで違和感が。yamlで別名をつけているので

Precure.futari_wa_pretty_cure 

でも取得はできます。

19日目

このままだと連投予定

映画プリキュアオールスターズNew Stage2 特装版Blu-ray

映画プリキュアオールスターズNew Stage2 特装版Blu-ray

*1:Ruby + Precure = Rubicure

*2:unmarkedではなくfutari_wa_pretty_cureでも可

*3:Date.parseできればOK

*4:オヤジギャグ

渋谷.rb でrubicureについて話した #cure_advent #shibuyarb

$
0
0

これは プリキュア Advent Calendar 2013の19日目です

18日目

@さんの プリキュアに愛を伝えたくて #cure_advent : どっくりぽんかんじまでした

TLでプリキュアショー行ってる人は何人かいるけど、僕もそろそろ行くべきか。。。

19日目 : 渋谷.rb でrubicureについて話した

渋谷.rb[:20131218] で話した資料です。

内容は 16日目の内容を社内LT大会にアレンジしつつ、さらに渋谷.rb用に加筆修正してます。

slideshare

謝辞

前回の Rubyでプリキュアを作った #cure_adventでは初のはてブ100over取らさせて頂きました。ありがとうございます!

余談ですが、はてブ100overでも社内LT大会では優勝とは程遠かったです。。。

20日目

@さん

しじみ食堂のつけ麺 #LOVETSUKEMEN

$
0
0

これは つけ麺 Advent Calendar 2013の20日目です

19日目

@さん

20日目 : しじみ食堂

しじみ食堂 - 目黒/ラーメン [食べログ]

会社の近くにあるので同僚と昼食によく行きます*1

目黒(アルコタワー近辺)でつけ麺食べられるところの中では一番評価が高いです。(ランチメンバー調べ)

外観

内容

  • 黒しじみラーメン(醤油ベース)
  • 白しじみラーメン(塩ベース)
  • しじみつけ麺

ランチ時間帯(11:30〜15:30)はお値段据え置きで卵かけご飯が付くのでお得感があります。

しじみつけ麺

たまごかけご飯

21日目

*1:Twilog調べで月1〜2回

RubyMineでRails開発してるけど何か質問ある?

$
0
0

これは IntelliJ IDEA Advent Calendar 2013 - Qiita [キータ]の21日目です

20日目

id:masanobuimaiさんの Presentation Assistantでドヤ顔しようでした

21日目:RubyMineでRails開発してるけど何か質問ある?

お仕事

  • 社内ツールとか社内ライブラリとかいろいろ作ってます
  • あとはアプリのウェブサイトとかもメンテしてます

RubyMineって何が便利?

あとは過去エントリ参考にしてください

RubyMine - くりにっき

不便な点

  • リファクタリングする時にvendor/bundle/配下のgemも検索対象になる
    • 検索も重いし、検索画面でヒットしたのを除外するのも一手間
    • せめて .gitignore くらい見てほしい

ぶっちゃけTerminalってどうよ?

  • RubyMine6でterminalがサポートされて小躍りしたんですが、(現段階で)日本語対応が微妙なのであまり使ってないです。。。*1
    • gitはiterm2でやってます
    • 日本語コミットメッセージ使うなって話ですが、業務的なことは日本語で書いた方がいいし*2、他の人も日本語でコミットコメント書いてるので日本語の表示は避けられない
  • rails serverbundle installはRubyMineのterminal使ってますがメニューから使えるのであまり意味ないw

Vimmerじゃなかったっけ?

  • サーバに入ってファイルを直接編集する時はVim使ってます
  • ローカルでもファイル数個で完結するスクリプトの類はVimで書いています

22日目

@さん

*1:表示と入力それぞれおかしい

*2:重要なことなので日本語で失礼します

Macでlsした時につくアットマークを消すgemを作った

$
0
0

需要なさそうですが主に自分用に公開

1年くらいずっと自分のdotfilesに置いて使ってたのですが、いちいち

ruby ~/dotfiles/scripts/rm_xttr.rb ~

とするのがつらくなってきたので昨今のgem化マイブームの流れに乗って公開。

公開する時に初めてtypoしてるのに気づいたw(×:xttr, ○:xattr)

使い方

こんな感じ

$ ls-l
total 129208
-rw-r--r--@ 1 sue445  staff  66150602122122:10 jenkins.war

$ rm_xattr jenkins.war

$ ls-l
total 129208
-rw-r--r--  1 sue445  staff  66150602122122:10 jenkins.war

参考リンク

Macでlsした時のパーミッションにあるアットマークを消す。xattrコマンド。 - kanonjiの日記


Chrome Extensionでユニットテストしてみる #TddAdventJp

$
0
0

これは TDD Advent Calendar 2013の24日目です。

23日目

@さん

24日目 : Chrome Extensionでユニットテストしてみる

Chrome Gitlab Notifierユニットテストをしてみたので共有です

何をテストするのか?

人によって粒度は違うと思いますが、自分の場合普段のウェブアプリの開発だと

  • Model : 割と書く
    • 不安なところは全部テストを書く
  • View : 書かない
    • デザイン崩れや使いやすいかどうかは目で見ないと分からないため自動化できない
    • 社内ツールを作ることが多いので、画面は適当でいい
    • 分単位で変わる仕様に対してユニットテストを書くのは無駄
  • Controller : 多少書く
    • GETやPOST叩いた時にエラーが起きないこと(最低限のハッピーパスの担保)
    • 中のModelも呼ばれるので結合テストも兼ねている

くらいの粒度でユニットテスト書いています。

Chrome Extensionの場合

  • Model : 存在しない
    • Chrome Extensionでそんなに複雑な処理はやらないはず
    • APIを叩くケースだとModelが完全に外部にあるためテストは不要
      • もちろん自分でAPIを作ってる場合だとAPI側でのテストは必要です
  • View
    • デザイン崩れや使いやすいかは(ry
  • Controller
    • APIを叩けるかどうか

のようになるため、個人的にユニットテストは無くてもいいと思います(笑)

無理矢理ユニットテストをしてみた

Jasmine + Phantomjs + Travis CI という構成でユニットテストをしています

Jasmine

  • 普段からRSpec書いているので慣れている
  • SpecRunner.htmlを表示すればブラウザでテストが出来るのでお手軽

Phantomjs

PhantomJSでJasmineのテストを動かすためのサンプルコマンド

phantomjs spec/lib/run-jasmine.js spec/SpecRunner.html

run-jasmine.js はphantomjsのリポジトリでDL出来ます https://github.com/ariya/phantomjs/blob/master/examples/run-jasmine.js

Travis CI

phantomjsはTravis CIにデフォルトで入ってるので特に .travis.yml 内でのインストール手順も不要です(基本的には先述のコマンドを書くだけでOK)

おまけ : Travis CIでテストに成功したらmasterをgh-pagesにpushする

個人的にgh-pagesをmaster扱いするのは違和感があったし、かといって手動でgh-pagesを更新するのも面倒臭かったので自動化しました。

https://github.com/sue445/chrome-gitlab-notifier/blob/master/.travis.yml

after_success:- git checkout -b gh-pages
  -'[ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ $GH_TOKEN ] && git push -f --quiet https://$GH_TOKEN@github.com/sue445/chrome-gitlab-notifier.git gh-pages'env:global:-secure:"SOME_TOKEN"

解説

git checkout -b gh-pages

Travis CIでcheckoutした時はテスト対象のbranchしか存在しないため checkout -bでbranchを作成する

'[ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ $GH_TOKEN ] && git push -f --quiet https://$GH_TOKEN@github.com/sue445/chrome-gitlab-notifier.git gh-pages
  • [ "$TRAVIS_BRANCH" == "master" ]
    • masterブランチのみを対象
  • [ "$TRAVIS_PULL_REQUEST" == "false" ]
    • Travis CIはPull RequestされたBranchにもテストするため、これをつけないとPull RequestされたBranchがgh-pagesにpushされるw
  • $GH_TOKEN
    • .travis.yml の env/global/secure に書かれたtoken
    • githubで発行したtokenをTravis CIのgemで暗号化してるものなので外部に公開しても安全らしい(Travis CI以外でtokenを復号化できないため)
  • git push -f
    • ぷっしゅはいふんえふ たのしー!
    • --quietをつけないとTravis CIのログに復号化されたtokenが出るので必須

参考になったサイト

参考書籍

テスタブルJavaScript

テスタブルJavaScript

最近出たオライリーから書籍ですが、ユニットテストだけでなくウェブインスペクタやJenkins周りなど広い意味でのJavaScriptのテストについて触れられているのでおすすめ

テスト駆動JavaScript

テスト駆動JavaScript

JavaScriptでTDDの基礎を学ぶための1冊。JsTestDriverはIDEとの親和性は高いんだけど、JsTestDriver自体にハマるのであまりおすすめしたくない。。。

25日目

大トリは id:t-wada‎ さんです!!!!

キュアエンジニアが2013年買って良かったもの #cure_advent

$
0
0

プリキュア #cure_advent Advent Calendar 2013 - Adventarの3(+25)日目です

ネタが急に思いついたので書いてみます

ふんわりキュアフレンズシリーズ

キュア本棚

「ふんわり」とあるようにフィギュアいうよりはぬいぐるみです。夜も一緒に抱いて寝ることができます

スマイルプリキュア! ふんわりキュアフレンズキュアピース

スマイルプリキュア! ふんわりキュアフレンズキュアピース

スマイルプリキュア BD

スマプリBD全話見終わったああああああああああ #smile_precure

スマイルだけがプリキュア!(懐古厨)

スマイルプリキュア!  【Blu-ray】Vol.1

スマイルプリキュア! 【Blu-ray】Vol.1

スマイルプリキュア!  【Blu-ray】Vol.2

スマイルプリキュア! 【Blu-ray】Vol.2

スマイルプリキュア!  【Blu-ray】Vol.3

スマイルプリキュア! 【Blu-ray】Vol.3

スマイルプリキュア!  【Blu-ray】Vol.4

スマイルプリキュア! 【Blu-ray】Vol.4

スマイルプリキュア ウルトラパワーアップセット

【速報】朝っぱらからプリキュアBlu-rayとスマイルパクトの配達ktkr!!

BDの後ろに写ってるやつ。スマイルパクト+レインボーキュアデコル+ウルトラキュアデコルのセット

エンジニアは誰でもプリキュアになれる!

ラブリーコミューン

ウルトラキュアデコルと組み合わせることでこんな遊びもできます

タッチコミューンにウルトラキュアデコルをつけたらすごいゴツくなったw #precure

ドキドキ!プリキュア ドキドキ変身! ラブリーコミューン

ドキドキ!プリキュア ドキドキ変身! ラブリーコミューン

プリキュアボーカルベストBOX

プリキュアのボーカルベストBOX買ってきた。CD10枚組w

初代~ドキドキの主題歌・キャラソン集。CD10枚組21000円という大ボリューム。プリキュアの10年分歴史を感じる。

特にボーナストラックの「プリキュアメドレー2013(Short Version)」を聴いているとテンションが上がるためここぞというときに聴いています

Shortバージョンといいつつ5分弱あるので全然ショートじゃないw*1

早くカラオケで歌いたかとです。。。

プリキュア ボーカルベストBOX

プリキュア ボーカルベストBOX

1月に発売される「ドキドキ!プリキュアボーカルベスト」にFull Versionが収録されているので超期待

ドキドキ!プリキュア ボーカルベスト

ドキドキ!プリキュア ボーカルベスト

*1:OP全部+ED数曲のメドレー

勉強会で振り返る2013年

$
0
0

2012年のは こちら

1月

2月

3月

4月

5月

6月

7月

8月

9月

10月

11月

12月

まとめ

  • 1年間で37回参加(前年比+1)
    • 取りこぼしてるのもあるのでたぶんもう少し多い
  • このうち半分くらいは発表したりスタッフやTAとして手伝っているので去年よりは増えてる
  • 社内勉強会頑張りました

1年前の自分からのマサカリ

今年はインプットだけじゃなくアウトプットも増やしていきたい

 1勉強会1エントリくらいで

自分が発表したやつに関しては意識してエントリ書いた

新しい分野の勉強会を開拓

Java, Ruby, 知り合いが開催系除いたら完全新規はないorz

Amazon・楽天の購入履歴で振り返る2013年

$
0
0

今年最後と言ったな、あれは嘘だ! *1

書籍系は送料無料の楽天ブックスを使うことが多いです

2月

Rails4とredis特集なので割と読み返すことが多いです

WEB+DB PRESS Vol.73

WEB+DB PRESS Vol.73

  • 作者:設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
  • 出版社/メーカー:技術評論社
  • 発売日: 2013/02/23
  • メディア:大型本
  • 購入: 12人 クリック: 131回
  • この商品を含むブログ (6件) を見る

3月

bluetooth対応の防水スピーカーなので風呂場でBGM流すのに使ってます。

TDK LoR Bluetooth ワイヤレススピーカー 防塵・防滴 A33

TDK LoR Bluetooth ワイヤレススピーカー 防塵・防滴 A33

プリキュアの表紙につられて

アニメージュ 2013年 04月号 [雑誌]

アニメージュ 2013年 04月号 [雑誌]

スマイルプリキュア! コンプリートファンブック (学研ムック)

スマイルプリキュア! コンプリートファンブック (学研ムック)

積読ならぬ入読*2

Software Design 総集編 【2001~2012】

Software Design 総集編 【2001~2012】

ノンデザイナーズ・デザインブック [フルカラー新装増補版]

ノンデザイナーズ・デザインブック [フルカラー新装増補版]

5月

1st嫁T

ふんわりキュアフレンズに目覚めた瞬間である

スマイルプリキュア! ふんわりキュアフレンズキュアピース

スマイルプリキュア! ふんわりキュアフレンズキュアピース

ドキドキ!プリキュア ふんわりキュアフレンズ キュアロゼッタ

ドキドキ!プリキュア ふんわりキュアフレンズ キュアロゼッタ

6月

プリキュアハッカソン開催を視野に入れての怒涛のオールスターズラッシュ。

映画プリキュアオールスターズDX みんなともだちっ☆奇跡の全員大集合!【初回限定版】 [DVD]

映画プリキュアオールスターズDX みんなともだちっ☆奇跡の全員大集合!【初回限定版】 [DVD]

映画プリキュアオールスターズDX2 希望の光☆レインボージュエルを守れ!【特装版】 [DVD]

映画プリキュアオールスターズDX2 希望の光☆レインボージュエルを守れ!【特装版】 [DVD]

映画プリキュアオールスターズDX3 未来にとどけ!世界をつなぐ☆虹色の花 特装版 [DVD]

映画プリキュアオールスターズDX3 未来にとどけ!世界をつなぐ☆虹色の花 特装版 [DVD]

映画プリキュアオールスターズ NewStage みらいのともだち 特装版 【DVD】

映画プリキュアオールスターズ NewStage みらいのともだち 特装版 【DVD】

17 jewelsのためだけに購入。(iTunesStoreにも店頭にもなかった)

7月

2nd嫁T

ドキドキ!プリキュア キュアロゼッタTシャツ ブラック サイズ:M

ドキドキ!プリキュア キュアロゼッタTシャツ ブラック サイズ:M

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

8月

WEB+DB PRESS Vol.76

WEB+DB PRESS Vol.76

  • 作者:五十嵐啓人,伊野亘輝,近藤宇智朗,渡邊恵太,須藤耕平,中島聡,A-Listers,はまちや2,川添貴生,片山育美,池田拓司,濱崎健吾,佐藤太一,曾川景介,久保渓,門脇恒平,登尾徳誠,伊藤直也,mala,後藤秀宣,若原祥正,奥野幹也,大林源,WEB+DB PRESS編集部
  • 出版社/メーカー:技術評論社
  • 発売日: 2013/08/24
  • メディア:大型本
  • この商品を含むブログを見る

これだけ!  KPT

これだけ! KPT

10月

WEB+DB PRESS Vol.77

WEB+DB PRESS Vol.77

  • 作者:中川勝樹,山内沙瑛,舟崎健治,吉荒祐一,今井雄太,八木橋徹平,安川健太,近藤宇智朗,奥野幹也,天野祐介,賈成カイ,伊藤直也,住川裕岳,北川貴久,菅原一志,後藤秀宣,久森達郎,登尾徳誠,渡邊恵太,中島聡,A-Listers,小俣裕一,はまちや2,川添貴生,石本光司,舘野祐一,沖田邦夫,澤村正樹,卜部昌平,吉藤博記,片山暁雄,平山毅,WEB+DB PRESS編集部
  • 出版社/メーカー:技術評論社
  • 発売日: 2013/10/24
  • メディア:大型本
  • この商品を含むブログ (2件) を見る

11月

引っ越し祝いにいろいろ購入。余談ですがプリキュアだけでクレジットの引き落としが10万超えてましたw

スマイルプリキュア!  【Blu-ray】Vol.1

スマイルプリキュア! 【Blu-ray】Vol.1

スマイルプリキュア!  【Blu-ray】Vol.2

スマイルプリキュア! 【Blu-ray】Vol.2

スマイルプリキュア!  【Blu-ray】Vol.3

スマイルプリキュア! 【Blu-ray】Vol.3

スマイルプリキュア!  【Blu-ray】Vol.4

スマイルプリキュア! 【Blu-ray】Vol.4

スマプリとドキプリの未購入分

ドキドキ!プリキュア ふんわりキュアフレンズ キュアダイヤモンド

ドキドキ!プリキュア ふんわりキュアフレンズ キュアダイヤモンド

ドキドキ!プリキュア ふんわりキュアフレンズ キュアソード

ドキドキ!プリキュア ふんわりキュアフレンズ キュアソード

マーチとビューティはいまだ発売されず(´;ω;`)

スマイルプリキュア! おーっきなふんわりキュアフレンズ キュアハッピー

スマイルプリキュア! おーっきなふんわりキュアフレンズ キュアハッピー

スマイルプリキュア! ふんわりキュアフレンズキュアサニー

スマイルプリキュア! ふんわりキュアフレンズキュアサニー

脱衣所の足ふきマット。近隣で売ってるところが見つからなかったので。

12月

レアキャラソン集

サザエさん音楽大全

サザエさん音楽大全

WEB+DB PRESS Vol.78

WEB+DB PRESS Vol.78

社内LT大会用に購入

スマイルプリキュア! スマイルパクトキャリー

スマイルプリキュア! スマイルパクトキャリー

まとめ

プリキュア買いすぎw

*1:ネタを思いついてしまったら仕方ない

*2:pdfをiPadに入れただけ

2013年に読んだ技術書まとめ

$
0
0
Viewing all 446 articles
Browse latest View live