Facebook, Twitterでの拡散情報を取得する
「うわー、このURLのソーシャルメディアでのシェア状況知りたいって感じやわー」ってことが3日に1日くらいあると思うので、メモがてら投稿します。
# https//google.comのいいねとシェア数を取得 https://api.facebook.com/method/fql.query?query=select%20like_count,%20share_count%20from%20link_stat%20where%20url=%22https://google.com%22
<fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> <link_stat> <like_count>86482</like_count> <share_count>134607</share_count> </link_stat> </fql_query_response>
# https//google.comのいいねとシェア数を取得 https://api.facebook.com/method/fql.query?format=json&query=select%20like_count,%20share_count%20from%20link_stat%20where%20url=%22https://google.com%22
[ { like_count: 86482, share_count: 134607 } ]
# https://facebook.comのツイートカウントを取得 http://urls.api.twitter.com/1/urls/count.json?url=https://facebook.com/
{ count: 26250, url: "https://facebook.com/" }
超簡単ですね。
Railsの404,500エラーページをカスタマイズ
Railsはエラーページをもともと用意してくれていて本番で動かすと
そこに飛ばしてくれるので、まぁいいっちゃいいのですが、
簡単に設定できるのでやってしまえばいいかと。
(レイアウトとかそのまま使えてサイト内ページっぽくなるし)
■環境 Rails 4.0.3 Ruby 2.1.1
とりあえずローカルで見たいのでWEBric(rails s)を本番設定で起動して確認します。
(developmentのままだといつもの赤いページが表示されます)
まず、ActionController::RoutingErrorを拾うためにroutesに設定が必要です。
# config/routes.rb # どこにも当てはまらなかったものを取得するので最終行に書いて下さい。 get '*path', to: 'application#render_404'
次にapplicationコントローラに設定を書きます。
class ApplicationController < ActionController::Base protect_from_forgery with: :exception rescue_from ActiveRecord::RecordNotFound, with: :render_404 rescue_from ActionController::RoutingError, with: :render_404 rescue_from Exception, with: :render_500 def render_404(exception = nil) if exception logger.info "Rendering 404 with exception: #{exception.message}" end render template: "errors/error_404", status: 404, layout: 'application' end def render_500(exception = nil) if exception logger.info "Rendering 500 with exception: #{exception.message}" end render template: "errors/error_500", status: 500, layout: 'application' end end
あとはviews以下にerrorsディレクトリを作ってそれぞれ
error_400.slim(haml)とerror_500.slimを置いて
好きなようにデザインして下さい。
applicationコントローラじゃなくてerorrsコントローラとかにしたいとかは
適当にパスを書き換えればできます。
Fluentd Casual Talks #3 at :D
ディー・エヌ・エーさんで行われたfluentd勉強家に行ってきました!fluentdはkibanaのdemoを動かすときにインストールしただけというド素人状態で参加しました。
Togetterはこちら: http://togetter.com/li/602421
norikraの話
@tagomoris slide: fluent-plugin-norikra #fluentdcasual
fluent-plugin-norikra
Norikra: Schema-less event stream
fluentd - Norikraで遊んでみた - Qiita [キータ]
USTREAM: komamitsu's channel: test live. その他
集計処理をSQLっぽくかける これは便利そう。
(DeNA枠)Fluentdでshadowサーバ用意したら捗った話
@sonots
slide: Shadow fluentdcasualtalks 20131213
Haikanko -> fluentdクラスタ管理ツール
yohoushi
shadowサーバ
(Kage Kageをちょっとだけ使ってみた - ぱいぱいにっき)
- dummy_log_generator
Fluentd のベンチマークテストに使える dummy_log_generator - Qiita [キータ]
ログを吐き出しまくるツール
ログメッセージをランダム生成 rate(行数/秒)
memo: fluentdはログをchunkにまとめてtcpソケットで送って閉じるってのをずっとやってる。fluent-agent-liteがよさそう。shadowサーバをおいてproxyするってのはいいなぁ。自分のいまの仕事だと規模が小さすぎてそこまでしなくてもいいけど使ってみたい。。
fluentd go implementation (仮)
@stanaka slide: https://t.co/kVp3vK10ZF fluentdという名のGolangへの勧誘(笑)
Windows版fluentdで幸せになれますか
ちょっと俺はWindowsとはさよならバイバイしたので、、って感じだけどほんとにWindowsで動いてた!メモ帳でコード開いて!
Treasure Agent Monitoring Service
@kzk_mover
slide: Treasure Agent Monitoring Service (ベータ)
中の方の発表
fluentdモニタリング
- 基本編
プロセス監視 ポート監視 システム情報
- fluentd特化編 buffer溢れ buffer flushのリトライ回数 fluentd自体のエラー/ワーニング
type monitor_agentをやるとfluentd自体のログが取れる
★Treasure Agent Monitoring Service
- td-agentのモニタリングサービス
- td-monitoringってプラグイン入れたら
この勉強会内でリリースされてました!
★感想
fluentd使わねば!!いったんfluentd -> elasticsearch -> kibanaの流れで使ってみるけどいろいろできそうだなという印象を受けた。
最近つかってないツールの勉強会に行って使わないとが続いいたので、絶対導入するぜ〜
楽しかったです!
ng-mtg#4 AngularJS勉強会 #ng_jp
Togetter
http://togetter.com/li/598391?utm_source=dlvr.it&utm_medium=twitter
2013/12/03@サイバーエージェントでのAngularJS勉強会に行ってきました!
僕は普段JSを書きまくってるわけではないですが前回のプロジェクトでBackboneを使っていたので最近話題のAngularにも興味を持ち始めた(とはいえ触ったことは一切ない)という状態で参加しました。
楽しかったー!ほとんどメモですが書きますー。
AngularJS 20min
AngularJS 20min #ng_jp // Speaker Deck
@naoya_ito さん
はじめにこの発表があったおかげでかなりangularが腹落ちした感じでこの後のセッションをきくことが出来ました。さすがでした。初心者or まだ触ったことがない方はぜひスライドを見てみるといいと思います!
# memo AngulerJSはjs MVW Framework Model View Whatever (初期はMVVMっぽかったけどそういう議論は時間の無駄) MVCとかっていう型よりangularjsはangularjsって思って学ぶ方がいい 特徴 ・htmlそのものがテンプレート ・双方向バインディング ng-controllerとかng-repetとかをhtmlに書いていく感じ アプリ側に関数用意して$scopeで渡す アプリ側(angularjs側)はDOMの構造を知らない DOM関連の値がない。HTMLからアプリを掴みに行く HTML構造の変更に強い 要するにtemolate-toolkitとかerbとかみたいなもの アプリ側から見た目を動的に替えたい時はngshowとかで なるだけDomを掴まない 制約ある HTMLにロジックは書けない リモートのJSONデータもバインド フィルター機能も簡単 FormValidationもある HTMLを拡張して動的なアプリを作るのに必要な機能をいっぱい追加してるのがangularjs 本格的に使おうとすると大変な部分もある
簡単なものをさらっと作る場合には本当に労力使わずに綺麗に高機能に作れそうだなという印象。とりあえず使ってみたい!
OnsenUI
続いてOnsenUIを作っているお二方の登壇。
Home | Onsen UI
OnsenUI モバイル用のUIを簡単に作れる
元自衛隊員の方とカンボジア出身の方の発表でした。なんとメモを取っていない、、AngularJSを多少使っている方には良いプレゼンだったかも!AngularというよりOnsenUIに興味を持ちました! (スライドも発見できず。。見つけたら追記します!)
実践! AngularJS
@sakatam さん
AngularJS 勉強会 #4 - 実戦!AngularJS // Speaker Deck
実践でどうAngularを使っていくかという発表とその時のTipsなど。実務で導入できるようになったらもう一度見直したいスライドでした!開発スケジューリングも勉強になりました。
# memo 柔軟性にはbakboneに劣るが モジュール/ベースの開発を強制 DI/Module APIレスポンスもmock可能 week1-3 開発基盤づくり ファイル構成、ビルドプロセスを調べたり APIクライアントなどの基底クラス week4-5 チーム展開 フロントエンドエンジニアにしっかり慣れてもらう DI/モジュール志向/テストファーストの概念理解 ちょっとしたdirectiveを作ってみる week6-12 実開発 普通にテストファーストでできる モデリング→UnitTest→Viewスケルトン実装 End2EndTestはクリティカル・パス確認用
目指せ脱初心者!あなたの知りたかったAngularJS
@agektmr さん
Directiveの話をかなり詳しくしてくださってましたが、聞き入ってしまっていてほとんどメモとれず。。後日スライドあげてくださるようなのでこちらも追記します。
# memo これ使うと便利 http://jsbin.com/welcome/1/edit 書き方が超勉強になると実力者の方々がおっしゃっていたもの。 本家の方々が書いたやつ http://demo.agektmr.com/flexbox/ web-components polymer-project
以下LTメモです。一人目の方のしかメモしてなかった、、
angularjs入門 @Tkashiro さん。kayacの方
social-counter <- Angularで作ったもの
【初心者が学ぶときにおすすめなリンク集】
動画で学べるサイト。これが全てといってもいい
egghead.io: Learn AngularJS with Tutorial Videos & Training @eggheadio
Page not found · GitHub Pages
AngularUI for AngularJS
Popular Modules - AngularJS Modules, Plugins and Directives
まとめ
JSそのものを書くことが楽になりそう。backboneよりも最初の勉強コスト低い?業務で一度使ってみたいなーー!!!って感じ!
かなり有意義な勉強会でした!
主催者のみなさん、登壇者の皆さん、ありがとうございました!
Capybara使うときに横に置いておくと有用なリンク集
matcherを調べるときに見ると良い
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_selector%3F-instance_methodよく使いそうなリファレンス一覧
http://qiita.com/ToruFukui/items/130eeb61d8ab2883466expathでの指定もできるのでxpathのリファレンス?的な
http://itref.fc2web.com/xml/xpath.htmlこう書くのがいいよ!の例
http://robots.thoughtbot.com/better-acceptance-tests-with-page-objectsこれいいかも!(まだ試せてない、、)
https://github.com/natritmeyer/site_prism
他にあればぜひ教えて下さい!
CapybaraでE2Eテストを始める
WAFに依存しない形でCapybaraを導入してE2Eテストを書けるようになるところまでの導入です。テストの実行自体はRSpecを使います。
$ mkdir capybara-test $ cd capybara-test
適当にGemfileを作ってbundle installで入れます
# Gemfile source "http://rubygems.org" gem "rspec" gem "capybara" gem "capybara-webkit"
今回はcapybaraのドライバーはcapybara-webkitを使用しています。
※capybaraのドライバについては下記リンクが詳しいです。
poltergeist - Capybaraを使う際に知っておきたいこと - Qiita [キータ]
$ bundle install
ここでqtがないからインストールできない的なエラーが出るかもしれません。上記リンクに記述がある通りcapybara-webkitがqtに依存しているからです。 その場合は下記リンクより自分の環境に合わせた解決策を実行してみてください。(私の場合はmacだったので、brew install qtでできました)
Installing Qt and compiling capybara webkit · thoughtbot/capybara-webkit Wiki · GitHub
インストールできたら、次にrspec initでspecディレクトリとspec_helper.rbを作ります。
$ bundle exec rspec --init
capybaraを使うためspec_helperに次の記述を追加します。
# spec_helper.rb require 'capybara/rspec' require 'capybara-webkit' # ここは各自合わせて下さい Capybara.app_host = 'url' Capybara.javascript_driver = :webkit RSpec.configure do |config| … config.include Capybara::DSL end
ここまでできたらあとはspecファイルをsepcディレクトリ内に作っていってテストを実行していきます。
# spec/login_spec.rb require 'spec_helper' describe 'login', :type => :feature, :js => true do it do visit 'http://test.com/login' fill_in 'login', :with => 'test_user' fill_in 'password', :with => 'password' click_button 'Login' expect(page).to have_content('Logged in as') end end
詳しい書き方はREADMEを見て下さい。
https://github.com/jnicklas/capybara
あとはアサーションを書いてキャプチャを撮ったりも簡単にできるのでどんどん書いて実行していってみてください。
Rubyのワンコールブロックがイケメンな話
またメタプログラミングRubyネタ。小ネタです。
著者がRubyは簡潔にかけていいけどイケてないと言っているのが
name = ["i", "my", "me"] name.map{|n| n.capitalize } #=> ["I", "My", "Me"]
って感じのが、パイプとか中括弧とかでブロック作ってややこしい、と。 確かにその通りです。ちなみにこれをワンコールブロックというそうです。
ですが、これをRuby1.9以降ならSymbolのProc変換という方法で超簡潔にかけちゃいます!
name = ["i", "my", "me"] name.map(&:capitalize) #=> ["I", "My", "Me"] string_numbers = ["1", "2", "3"] string_numbers.map(&:to_i) #=> [1, 2, 3]
イケメン!! ちなみに1.8系とかでも自分で簡単に実装できちゃいます。
なぜこれが動くかとかは下記のサイトが丁寧だったのでご参考まで。