2015年4月29日水曜日

railsでlink_toにmethod: :delete指定した時に動かなくてrails.js探した

railsでlink_toにmethod: :delete指定したら、
DELETEメソッドで飛んでくるはずがGETメソッドで飛んできて想定どおりに動きませんでした。

調べたところrails.jsが必要というのが見つかったので、
rails.jsってどこにあるんだと調べてみたところ、
jquery-railsの中にあるjquery_ujs.jsを読み込めばいいことがわかりました。

application.jsに以下を追加で解決しました。
//= require jquery_ujs


参考URL
http://d.hatena.ne.jp/spitfire_tree/20120323/1332477590
http://techracho.bpsinc.jp/kazumasa-ogawa/2011_12_27/4874
https://github.com/rails/jquery-ujs

2015年4月25日土曜日

React.js meetup #1に参加してきました

今日はReact.js meetup #1に参加してきました。
http://reactjs-meetup.connpass.com/event/11232/
一人当たりの持ち時間が短くてバタバタしてる感じでしたが、
とても有意義な話が聞けてすごく刺激を受けて帰ってきました。
メモったことや感想をつらつらと載せていきます。


・React 概論 @naoya_itoさん
https://speakerdeck.com/naoya/reactgai-lun
今日発売のWEB+DB PRESSにreact.jsの記事書いたそうです。

PHPフレームワークのXHPの移植として開発されたのがきっかけ
facebookのプロダクションで絶賛使われてるってのがいい

≒サーバーサイド脳で書ける
Viewは常に全更新
Viewは宣言的に定義

従来の手法の難しさ=DOM操作の難しさ
-DOMが状態を持っている
-グローバル (どこからでも書き換えられる)
-非同期 (外部と通信したりとか)

VirtualDOM
-速度チューニングする余地は残されている
-通常使う時はVirtualDOM気にすることはない

Reactの責務
1 DOMの更新
2 イベントへの反応

サーバーサイド脳でいける
コンポーネント指向(変更がコンポーネントに局所化される)
データフローが明確

生産性より信頼性
-可読性、保守性など長期的な信頼性に重きを置いている
-書く時間より読む時間の方が長いよね

jquery併用できる
-DOM操作はパラダイムが違うのでよくわかんないでやるべきではない
-$ajaxとかは使ってかまわない


・react-rails @hokacchaさん
https://speakerdeck.com/hokaccha/react-rails-1
react-railsはreactjsの公式が作っているgem

mount view helper and UJS
-マウントするコードを書かなくていい
-APIリクエストしない分高速

server side Rendering
-{ prerender: true }をつける
どうやってやっているか
--ExecJSでJSを実行
--therubyracer(V8)推奨

ベンチマーク
-react > haml
-hamlと同等かそれより早いくらい
-死ぬほど遅いわけではなさそうというのがわかるベンチマーク

turbolinks
-普段はまっさきにOFFにするけど、使っても動く

まとめ
-グリングリン動くSPAとかにはたぶん向かない
-部分的に動的コンテンツがあるようなアプリケーションだと使いどころあるかも
-Turbolinksにわんちゃんあるかも


・10分で実装するflux @azuさん
http://azu.github.io/slide/react-meetup/flux.html
#データフローを追っかけていったので、フローがわかりやすかったですが、
#話は難しかったです。。


・mercury/mithril.js @yosuke_furukawaさん
https://speakerdeck.com/yosuke_furukawa/mithril-dot-js
introduction to react=神資料
https://speakerdeck.com/hokaccha/introduction-to-react

react
-shouldComponentUpdate
-子ノードのすべてを再描画しないようにさせる

mithrilのアプローチ
-再描画のタイミングを制御して回数を減らす
-イベントの最後に再描画という形にしなくてよくなる

mercuryのアプローチ
-再描画の回数を減らす
-VDOMのtreeの探索範囲を限定する


・React/SPAの設計と運用 @mizchiさん
https://gist.github.com/mizchi/ee8256f7783dde2bea8d
#実際に開発していってぶちあたった壁とどう乗り越えたかのお話でした


・LT - React.jsと、Railsとかアイドルとか @sugyanさん
http://sugyan.com/presentations/reactjs-meetup-1/#/
@hokacchaさんの話でも出てきたturbolinksではまったのでOFFにしたそうです


・LT - Java+React.jsでServer Side Rendering @makingさん
http://www.slideshare.net/makingx/reactjs-meetupjavassr
javaでも標準でjsのengine使えるよ


・LT - React.js(React Native) + UI Design Prototyping @tsuyoshi higuchiさん
https://speakerdeck.com/tyshgc/rapid-react-prototyping-react-dot-jsdeuidezainpurototaipuwozuo-ru
デザイナーがコンポーネントを意識してデザインを作る
Photoshopのcomponent情報からreactのjsx吐き出すツール作ってた。
#すごい

2015年4月24日金曜日

mixi iOS Training 第8回に参加してきました

mixi iOS Training 第8回に参加してきました。
http://app-training.connpass.com/event/14125/
だいぶ会場に来る人は減ってきた感じがしますが、
その分質問とかしやすそうな雰囲気です、したことないですがw

今回も前回に引き続き、TODOアプリの開発です。
今回はTODOの削除と永続化について学びました。

TODOを削除する
https://github.com/mixi-inc/iOSTraining-TODO-App/issues/3

TODOの永続化
https://github.com/mixi-inc/iOSTraining-TODO-App/issues/4

教材
https://github.com/mixi-inc/iOSTraining-TODO-App

また授業の中でメモったことをつらつらと載せていきます。

・#pragma mark HOGEHOGE
ソースの上にあるパンくずリストにHOGEHOGEが追加されて、選択するとそこに遷移できる

・// TODO: HOGEHOGE
同じくパンくずリストにTODOが追加される(FIXMEでも出る)

・NSArrayをNSMutableArrayに変換するやりかたはいくつかある
NSMutableArray *arr = @[].mutableCopy;
[NSMutableArray arrayWithArray:@[]];

・buildできなくてはまるよくあるパターン
Target Membershipのチェック外れてる

・クラッシュしたときの話
スタックトレースよりもその上のエラーメッセージを読んで解決することが多い

・アプリの状態
Inactive
→アプリを起動してて一番上にいるけど、通知センターを開いている状態
Suspended
→OSがプロセスをkillした

・シミュレータでのHOMEボタンのショートカット
command + shift + h

・plistにセキュリティ的によくないものは保存しない
講師の方曰く、このくらい危険らしいw
→UserDefaultsにパスワードを保存しないでください = あなたのamazonのパスワードを手のひらに書かないでください

・ObjectiveCでnilに対してメソッドを実行しても何も起きない(エラーにならない)
javaだとヌルポで落ちるよね


次回はちょっと空いて5/21だそうです。

2015年4月20日月曜日

capybaraでidもlabelもないラジオボタンを選択する

またcapybaraのテストを書いていて、 idもlabelも使ってないラジオボタンを選択する方法を調べました。 自分の場合はこのやり方で選択できました。
  • 銀行振込
  • 代金引換便
  • クレジットカード決済
  • その他
  • s.find(:xpath, ".//input[@value='2']/..").choose 'deal_type'

    2015年4月15日水曜日

    SmartNews TechNight Vol.2に参加してきました

    SmartNews TechNight Vol.2に参加してきました。
    https://atnd.org/events/64096

    ハッシュタグはこちら
    https://twitter.com/hashtag/smarttechnight

    聞いてて思ったのは、
    大きなサービスもってる大きな会社は大量発注で安くサーバー仕入れるので、
    コストという観点からいくとオンプレの方が有利なんだなと。
    ただ、どこも便利なものは使っていこうという姿勢だったのでいいですね。

    トークセッションはちょっとメモれなかったですが、
    その他のプレゼン聞いててメモったことをつらつらと書いていきます。

    SmartNews大平さん
    ・SmartNewsにはインフラ専任がいない
    ・すべてAWSに乗っている
    http://aws.amazon.com/jp/solutions/case-studies/smartnews/
    ・使ってるSaas
      Datadog
      NewRelic
      pagerduty
      logentries
      chartio
    ・クラウド使うと得意領域は違ってもアプリエンジニアとインフラエンジニアでやることはだいたい同じになってくる

    GREE梶原さん
    ・最近の新規のサービスはAWSで取り組んでる
    ・クラウドかオンプレかの選定基準(現時点)
      コスト
       大規模調達するとまだまだ物理サーバーが安い
       年に数回AWSの値下げが実施されるのでもっと安くなってほしい
      メンテナンスの自由度
       サービスによってメンテナンスの調整コストが高いものがある
    ・使ってるSass
      PagerDuty
      SumoLogic
      DataDog

    CyberAgent桑野さん
    ・クラウドの時代になってもやることは変わらないけど、やり方が変わってきている
      コード化するためのツールのコモディティ化
      そもそも1から自分で構築しない
      基本的な部品のAPI化
      スピード感がましている/キャッチアップが大変
    ・いろんな職種のエンジニアがいるのではなくて、得意な技術領域の異なるエンジニアがいるだけ

    2015年4月14日火曜日

    capybaraのテストでセットされたcookieを取得する

    capybaraでテストを書いていて、独自にセットしたcookieが
    ちゃんとセットされたかをテストしたかったのでcookieの取得方法を調べました。

    cookieはこれで取れるようです。
    Capybara.current_session.driver.request.cookies.[]('cookie名')

    こんな感じのテストコードを書きました。
    it 'ログイン' do
      visit '/login'
      fill_in 'email', with: 'aaa@bbb.com.ne'
      fill_in 'password', with: '1234567890'
      click_on 'Login'
     
      expect(page.driver.status_code).to eq(200)
      expect(Capybara.current_session.driver.request.cookies.[]('login_token')).not_to eq(nil)
     
      # 確認用
      # puts Capybara.current_session.driver.request.cookies.[]('login_token')
    end
    


    参考URL
    http://stackoverflow.com/questions/19325960/rails-cucumber-capybara-how-to-set-retrieve-cookies-in-tests

    2015年4月10日金曜日

    mixi iOS Training 第7回に参加してきました

    またmixiのiOS Trainingに参加してきました。
    http://app-training.connpass.com/event/13617/
    今回はTODOアプリの2回目で、新しいTODOを追加できるようにしました。

    コードはこちら
    https://github.com/mixi-inc/iOSTraining-TODO-App
    やることはこちら
    https://github.com/mixi-inc/iOSTraining-TODO-App/issues/2
    今回のスタートはshow-todoブランチで、今回のゴールはadd-todoブランチ。

    講義の最初は最近恒例のまずgitの使い方から。
    この中でやってたターミナルからFinder開く方法
    open .
    これ初めて知りました。

    講義を受けながらつらつらとメモったことを載せていきます。
    ・NavigationController の rootViewControllerはデフォルトで表示するもの

    ・XCodeのSource Controllからgitのcommitもできる
    対象ファイルとdiffが見やすくなっているので便利

    ・Bar Button ItemはNavigationController管理下じゃないと置けない

    ・メソッドをこう定義した場合
    - (void)doneButtonTapped:(id)sender{
    NSLog(@"doneButtonTapped");
    }
    「doneButtonTapped:」の:までがメソッド名。

    ・storyboardを開いてDebug View Hierarchyで3Dに表示できる。



    前回と違って今回は落ちこぼれなかったので、すごく有意義な時間が過ごせました。
    ここでしか触ってないけどさすがに7回もやってると少しずつ慣れてきてるのかなぁと思ったりしてます。
    中級者くらいまではなりたいなと思う今日この頃です。