キモブロ

Please spy check please, Fucking retard

Ruby

Heroku Buttonのテスト

やってみた https://github.com/kimoto/nopasteとりあえずハマったことをメモ。このアプリはpostgresql addonを使っているんだけど app.jsonに "addons": ["heroku-postgresql:dev"]って書くと、heroku上ではちゃんと動いてるんだけど heroku buttonがなぜか…

趣味サーバー を ruby 1.9.3-p448 にアップデートして再構築した

最新のRubyが出てたので再構築しなおした。ついこないだ同じようなアップデートしたばっかだけど。こないだの記事 → 趣味サーバーで使ってるWEB系ソフトウェアをいろいろアップデートした - キモブロ 特に意味なし。趣味です。以下手順。 最新のRubyを入れる…

Sqale使ってみた。

Sqale使ってみた。自作のgyazoサーバーを動かしてみる。 ユーザー登録 まずsqale.jpにいきユーザー登録する なんかGithubのOAuth?で認証できたのでこれでログイン。 公開鍵登録 まぁ公開鍵なのでガンガン公開しちゃうけど、こんな感じで設定した。 いわゆる.…

これActiveRecordでできるような

@tokuhirom すごいざっくりですが、例えばユーザーに紐付く何かしらのアイテムを「消す」という操作が $user->items->del とかできたり、その集合がソート済なのか否かがとれたりしたら嬉しいのかなという感じです。— かるぱねるらさん (@karupanerura) 12月…

DataMapperだとこんな感じや

たとえばchannelsってテーブルがあったとして、ChannelってModelを作った場合で考える channels = Channel.all channels.each do |ch| ch.name end みたいな感じのコードを書いたとしても実際に発行されるSQLは以下のようになる kimoto ~/tmp[27601]% !ru ru…

Ruby1.9から2.0ってiconvが使えなくなるという変更があるので100%互換ではないよね

まぁ言語としては互換か。実際の運用を考えるとiconv使ってるコードは結構あると思うので実質そこのfixは必要かなという感じ。kconvとかも使えない require 'kconv' "あいうえお".tosjis とかなってるコードを String#encodeで置き換えていく感じ 補足: もと…

Ruby2.0.0-devを入れてみた!

$ rbenv install 2.0.0-dev $ rbenv global 2.0.0-devでいけた。処理速度のベンチマークをしてみたけど、簡単な四則演算とクラス生成が早くなるわけではなかった。まぁリリースノート見ろよって感じではあるけど。たぶんrequireのあたりの効率化が行われた感…

Capistranoでマルチステージング

developmentとproductionでファイルのデプロイ先を変更したりする方法を探していたのだけど、multistageプラグインという名前の通りの機能によって実現出来た。(通常だと環境変数の値でproductionとdevelopmentの切り替えを行う) その他細かいメモ rbenvが…

open-uri使わなくてもこうやれば楽

Net::HTTP.get URI.parse("http://www.google.co.jp") 追記: って思ったけどこれだとredirectのとき追尾してくれないのか。open-uriだとリダイレクトしてたときは自動でリダイレクト先のコンテンツ持ってきてくれる

失敗したら繰り返すやつ = retry-handler

それがまさにretry-handlerですねー ssig33.com - text/失敗したら繰り返すやつ Proc.new{ open(url) }.retry(:max => 3) https://github.com/kimoto/retry-handler

一応書いとくけど

Modelはそもそもいろんな案件で使い回しが聞く、これは当たり前である。しかし俺がいってるのはそういうことではなくて、ActiveRecordとDataMapperではその取り回し、扱いやすさに大きな差があって、DataMapperの方が扱いやすいということを書いている。Acti…

Railsだとmodelを別案件に使いまわせる気がしないけど、DataMapperでは出来る気がする。それはソースコードがすべてであって、ソースコードからデータベーススキーマを生成できるし、そのモデルのすべてのロジックはそのソースコードに詰まっている。

だから気軽に別案件に移動させることができるのがよい。何よりわかりやすい。だから俺はDataMapperが好きだ。DataMapperはコードの側に主導権がある。データベース定義はコードにとっての一つの仮の姿でしかない。RubyのDataMapperの良さ - キモブロ あとは…

CSVMapper v0.0.4 Released

https://github.com/kimoto/csvmapper/blob/master/Changes 0.04 - Added #columns method columns :first_name, :last_name, :age - Added #grouped_by method grouped by field key - Added #where method arel style finder (testing) columnsはまとめて…

CSVMapperみたいなタイプの作り方の良さはmodelとしてロジックをなんでもかんでもぶち込めること

class MyCSV < CSVMapper column 定義の羅列 column 定義の羅列 column 定義の羅列 column 定義の羅列 column 定義の羅列 column 定義の羅列 # このモデルが持っているべき処理 def method # columnはインスタンス変数にバインドされてるのでそれ使えば良い …

XMLMapper構想

CSVMapperみたいな感じでXML(or HTML)をRubyのクラスにしたい。と思ってたらhappy mapperってのがすでにあってhttp://happymapper.rubyforge.org/ class User include HappyMapper element :id, Integer element :name, String element :screen_name, String…

CSVMapperをDSLっぽく使わない方法

単なる言語の機能を利用した言語内DSLだからなにもしないでもこんなかんじだな require 'csvmapper' class MyCSV < CSVMapper end MyCSV.delimiter '<>' MyCSV.column :name, 0, :string MyCSV.column :hash, 1 MyCSV.column :host, 2 MyCSV.column :contact…

イマドキのgemのつくりかた

なんかマジで簡単になった。最近ライブラリ作りまくってるのでその全体的な手順をメモ。 Ruby1.9の前提で書きますが、1.8でも出来るかもですね。Rubygemsの認証周りについては記載してませんが、画面に表示される英文読んでたら楽ショーで出来る思います gem…

CSVMapperの自動ヘッダー読み込み機能について

CSVの1行目が列の説明になってるCSVあるじゃないすか。ああいうのは自動でフィールドに変換できるようになってますたとえばこういうやつ。日本語も大丈夫 first name,last name,age,住所 takumi,kimoto,99,ウインドウズ みたいな感じのを読み込むときに、has…

CSVMapper良い感じなんだけど、まだ書き込み機能がないのとまだプロトタイプなのでソースがひどい感じなのをなんとかしないと駄目ですね

まだもうちょい作りこみたいのでリファクタリングはあとの課題。 とりあえずめっちゃ使いやすい感じにしたい。ローカルにある次期バージョン0.04だと以下の機能を実装済みで ActiveRecordのarelみたいな感じで扱えるようにした csv = MyCSV.load_file("/path…

CSVMapperで作るPeercastのYellowPageIndex Parser

# encoding: utf-8 require 'csvmapper' require 'cgi' class YPIndex < CSVMapper before_filter do |v| CGI.unescapeHTML(v) if v end delimiter '<>' column :name, 0, :string column :hash, 1 column :host, 2 column :contact, 3, :uri column :genre,…

Foreman 0.53でProcfile内に;を記述するとSyntax Errorになる件の回避策

社内IRCでも話題になっていたけど0.51だと大丈夫、なので0.51を使うようにします。そしてRubyにはbundlerというまともなバージョン管理の仕組みがあるのでそれを使いますカレントディレクトリにGemfileを作成 gem 'foreman', '0.51'とします。すると $ bundl…

CSVをDSLで定義した感じで読み込めるCSVMapper作った

https://github.com/kimoto/csvmapper Usage require 'csvmapper' class MyCSV < CSVMapper column :name, 0, :integer column :ipaddr, 1, :ipaddr column :file_path, 2, :pathname column :time, 3, :time end p MyCSV.load("name1,127.0.0.1,./tmp/path/…

retry-handlerアップデートしてMethod#retry追加した (v0.2)

https://github.com/kimoto/retry-handler/blob/master/Changes File.method(:read).retry("./not_found.txt", :accept_exception => StandardError, :logger => Logger.new(STDERR)) こんな感じのが出来るようになった

Procの実行結果を一定期間キャッシュしてくれるproc-cache便利

俺の前に作ったproc-cacheというモジュールを最近また使い始めてるけどまじで便利や。retry-handlerぐらい便利だな。 https://github.com/kimoto/proc-cache これはProcの実行結果を一定期間キャッシュしてくれるというもの。なんていうかわかりやすいんだよ…

garbでgoogle analyticsのpage view情報取得

なんかgoogle analytics簡単につかえるgemあったんで使ってみた。 require 'garb' username = ENV['GARB_USERNAME'] # メアド password = ENV['GARB_PASSWORD'] # パスワード property_id = ENV['GARB_PROPERTY_ID'] # UA-*** って文字列 Garb::Session.logi…

open_gem入れるとgem open nokogiriとか出来るようになって簡単にgemのソースコード見れて便利

$ gem install open_gem $ gem open -l nokogiri # VISUAL or EDITORがnokogiriのディレクトリを編集状態になる -lでlatest versionって意味になる。-lつけないと複数バージョンあったときは どのバージョンにするかの選択肢が表示される

CSVの構造をDSLで定義して読み込み系モジュール その2 csv-omg

https://github.com/eval/csv-omg インストール gem install csv-omg 使ってみる require 'csv-omg' class User include CsvOmg col :first_name, 'First Name' col :last_name, 'Last Name' col :age, 'Age' end p users = User.parse(File.read("./test.cs…

CSVの構造をDSLで定義して読み込み系モジュール その1 csv-mapperを使ってみる

とりあえず今回利用するCSVさんはこちら First Name,Last Name,Age John,Doe,27 Jane,Doe,26 Bat,Man,52 インストール $ gem install csv-mapper 使ってみる require 'csv-mapper' results = CsvMapper.import('./test.csv') do start_at_row 1 [first_name,…

SteamのOpenIDを使ってみた

Steamのアカウントで外部サイトで認証できる仕組みを試しに作ってみた。TF2のOutpostだかなんだかあのへんのトレードサイトでも使われてるやつね。一応動くデモ http://kymt.me:8888/ ソースコード https://bitbucket.org/kimoto/oidon/srcomniauthのプラグ…

Hashie::Clashについて

Chainable Lazy Hashを生成してくれるのか。何これカワイイ require 'hashie' c = Hashie::Clash.new c.where(:abc => 'def') p c # => {:where=>{:abc=>"def"}} c = Hashie::Clash.new c.where(:abc => 'def').where(:hoge => 'fuga') p c # => {:where=>{:…

Hashie::Dashについて

hashにメソッドアクセスができるようになるのがHashie::Mashだけど こんどは各フィールドにrequire属性とか付けれるようになるのがHashie::Dash require 'hashie' class Person < Hashie::Dash property :name, :required => true end person = Person.new #…

Hashがもうちょい便利になったHashie::Mashについて

表題。普通にOpenStructでいいんだけど require 'hashie' h = Hashie::Mash.new h.key1 = Hashie::Mash.new h.key1.key2 = Hashie::Mash.new h.key1.key2.key3 = :value p h[:key1][:key2][:key3] # => :value 末尾に?をつけることでそのメソッドの存在チェ…

過去一週間分の日付文字列生成

((Date.today - 1.weeks) ... Date.today).map{|e| e.strftime("%Y-%m-%d")} => ["2012-07-18", "2012-07-19", "2012-07-20", "2012-07-21", "2012-07-22", "2012-07-23", "2012-07-24"]

passengerでデフォルトでインスタンスを起動させておく方法

デフォルトだと初回アクセスによってプロセスが起動されるが、それをnginx起動時に自動で起動させておく方法 たとえばhttp://pi.kymt.meってサービスをpassengerによって起動していて、nginx起動時に自動起動させたい時 passenger_pre_start http://pi.kymt.…

ruby-aaws-simple作った

ruby-aawsがあまりにも使いにくいので、使いやすいラッパー作った。 AmazonAPIのリクエストとレスポンスを内部的にキャッシュ 商品名とか代替画像一覧とか画像コードとか、商品の値段などよく使うフィールドのみの取得に限定することで使いやすくした https:…

新案件の構成メモ(予定)

rbenv+ruby 1.9.3-p194 rails+mysql plugin devise (ユーザー管理システムを自動生成) rails_admin (超クールな管理画面自動生成してくれる、エクスポートとかも出来るしデータ自体生成出来る) cancan (ユーザーの権限管理)

Arrayをto_sしたときのRuby1.9と1.8の違い

ハマった。(人のコードで) Ruby1.9 ["aaaa","bbbb","cccc"].to_s => "[\"aaaa\", \"bbbb\", \"cccc\"]" Ruby1.8 ["aaaa","bbbb","cccc"].to_s => "aaaabbbbcccc"

LZ4 for Ruby使ってみた

圧縮ライブラリ? のruby bindingを使ってみた。まずgem install lz4-rubyします。 https://github.com/komiya-atsushi/lz4-ruby#readme さっそくone linerで使ってみる $ ruby -rlz4-ruby -e "p LZ4::compress('test bbbbb')" "\n\xA0test bbbbb" うっ、圧縮…

Mustache使ってみる

今更だけど触ったのでログ。logic-lessとうたってるので、ロジックを極力書けないようにしたテンプレートエンジンって感じなのかな。とりあえず使ってみる。 http://mustache.github.com/ まず、gem install mustache した後にirbで実験 irb(main):001:0> re…

RubyのDataMapperの良さ

2年間ネットから引退してたせいで全然詳しくなくて、たぶんもうみんな思ってるだろうし、おそらく今更感が高いだろうけど、俺が最近便利だなーと思ってるので書く。結論を先に言うとDataMapperはデータベースではなくコードの側に主導権があるのが良い。扱い…