ラベル ruby の投稿を表示しています。 すべての投稿を表示
ラベル ruby の投稿を表示しています。 すべての投稿を表示

2012年2月6日月曜日

ローカルにあるgemファイルのインストール



[ruby] ローカルにあるgemファイルをインストールする - プログラム番長のヲボエガキ


ここを参考にして出来た!


gemの-lオプションを使う。



$ gem install -l foo.gem


$ gem instlal -hして確認。



-l, --local Restrict operations to the LOCAL domain




2011年12月13日火曜日

ホモスレbotを書きました。



ホモスレのURLをツイートするホモスレbotを書きました。


Twitter

ホモスレbot


ソースコード(ライセンスはWTFPL)

hanachin/homosure ? GitHub


要求


最近はホモスレ多いですよね。1日に何本も立ってる気がします。


僕が欲しかったもの



  • 手動でホモスレ検索する手間が省ける

  • 面白いホモスレならTwitterで誰かがつぶやいてくれているはず

  • 2chの生のホモスレではなくまとめが見れればよい

  • 既に見た事あるスレは見なくてもいい

  • なるべくホモスレでの検索結果を汚さない


欲しかったので作る、いつもの流れですね。


実装


何度か使ってなれているので、Twitterのgemを使っています。


Twitterの「ホモスレ」の検索結果からURLを抽出し、DBにデータを蓄積しツイートするようになってます。


既にツイートしたことのあるURLはツイートしないようになってます。


一旦Mechanizeで実際にアクセスすることで、リダイレクト後のURLを取得するようになっています。(なっているはずです、多分)


実際にアクセスする前のURLと、実際にアクセスしたURLが違う場合(リダイレクトなど)データベースで、リダイレクト後のページとひもづけてます。


これから機能を追加するなら




  • Twitterでそのホモスレの検索結果の隆盛等をグラフで表示する

  • URLリダイレクタを挟んでクリック数等の情報を取得する

  • 【今日のホモスレ】や【お勧めのホモスレ】等、既にDBにあるホモスレからリコメンドする

  • ページの内容からホモスレ度を判定する

  • 蓄積したホモスレのURLを元に、ホモスレを掲載してるまとめブログの一覧を作り、RSS等からもホモスレ情報を集める


まとめ


前から欲しいなーと思ってたので作りました。快適な生活に一歩近づきましたね。


もっと需要の高そうな別のワードに対するbotを作成するときに役立つかもしれません。


ホモスレbot作った話をブログに公開することで更にアレなものを作っても公開出来る謎の自信がつきました。





2011年12月10日土曜日

Guard + Powで快適Sinatra開発



Sinatraを使ってWebアプリケーションを作る際、Sinatraを手動で何度も再起動するのは面倒くさくないですか?


そんなときはGuardとPowを使えばSinatraのファイルを書き換え保存するだけで自動的に再起動させることが可能です。


これでテンポよく快適に開発出来ます。


Powの導入


~/.pow/以下にRackアプリのディレクトリへのシンボリックリンクをはるだけで、http://ほにゃらら.dev/でそのアプリにアクセス出来るようになります。


Homebrewを使っている場合は



% brew install pow


で導入出来ます。(多分)


僕はbrewを使わずに入れました。Powにはnode.jsが必要です。


僕はnvmを使ってnode.jsインストールしてPowのサイトに書かれたコマンドを実行してインストールしました。お好きな方で。


参考:Node.js 入門


参考:Pow: Zero-configuration Rack server for Mac OS X


Powderの導入


Powを更に便利に使うためにPowderをインストールします。



% gem install powder


で入ります。


参考:Pow使うならPowder入れておくだァーッ! - Meltdown Countdown


Guardの導入


Guardを使えばファイルが変更されたら自動で何かすることが出来ます。


自動で何をするのかをGuardfileに書きます。


bundlerやcucumberなど様々なツールに対応しています。(参考:List of available Guards ? guard/guard Wiki ? GitHub


guard-powを使えばSinatraのファイルをいじったら再起動、といったことが簡単に出来ます。



% gem install guard-pow


参考:Guard::PowでPowを更に快適に使う | ひげろぐ


試しにSinatraアプリを作ってみる


コマンドログ


Nil% mkdir hello
Nil% cd hello
Nil% cat > web.rb
require 'sinatra'
get '/' do
'Hello world!'
end
Nil% cat > config.ru
require "./web.rb"
run Sinatra::Application
Nil% cat > Guardfile
guard 'pow' do
watch('web.rb')
end
Nil% cat > .rvmrc
use 1.9.2
Nil% powder link
Your application is now available at http://hello.dev/
Nil% guard
Guard is now watching at '/Users/sei/hello'


ソースコード


この状態でweb.rbを書き換えると



Pow restarted.


と表示され、無事再起動していることが確認できます。


ハマったところなど




  • 僕はrvmでRubyを管理してるのですが、.rvmrcの中で使うRubyのバージョンを指定するのを忘れて怒られました。

  • guard pow initでGuardfileを生成する方が楽かも。(Railsアプリ等の場合)

  • 僕の場合、Sinatraのアプリの中に直接日本語を書いてたりするのでconfig.ruの先頭に1行これを付け加えてます。



# -*- coding: utf-8 -*-


まとめ


この記事はざっくりすぎるので参考リンクを読んだ方が詳しく書いてます。


ざっくりまとめると




  • Powを使うと~/.pow/シンボリックリンクはるだけでRackアプリが動く

  • Powderを使うとシンボリックリンクはるのや、Powに関わるあれやこれやをやってくれる

  • Guardを使うとPowで動いてるRackアプリを自動で再起動出来る


以上です。





2011年12月6日火曜日

僕のブックマークの可視化



僕のはてなブックマークの、1月頃から10月の末あたりまでの、タグ付けの様子を可視化してみました。



タグごとに円で表示されています。


いっぱいブックマークされたタグは大きめに表示されます。


時間がたつにつれて円がだんだん小さくなります。





2011年11月28日月曜日

RubyでシンプルなTwitterクライアント書いた



シンプルなTwitterクライアント書きました。


hanachin/tsurube ? GitHub


名前はTwitter×Ruby、ついるび、つるび、つるべ、ということでtsurube。


コマンドラインで動作するTwitterクライアントを30分くらいで作れるPythonはかっこいい - YAMAGUCHI::weblog


こちらの記事をを見てRubyでやってみたくなった。


「30分? よゆー」と思ってたけどずるずる時間かかって実装力の足りなさを痛感しました。


今のところ




  • tl タイムライン取得

  • tl 40 タイムライン取得(1-200の間で指定)

  • mentions, m メンション見る

  • login, l ログイン

  • exit, quit, q 終了

  • tw ついーと


あたりのコマンドは実装した。基本的なツイートする、TL見る、メンション見る、終了する。が実装出来たし満足。


config.ymlに認証情報を登録したらすぐ使えます。


困ったところ


コンソールの操作するgem使った事ない

カーソルキーの上押すと前のコマンドが見れたり、Emacsバインドで編集出来れば最高なんですが、そういう事が出来るgemを僕は知らない。


探そうと思ったけどHighLineで対処。


今度良さそうなgemをいくつか試しておこうと思う。


warning: regexp match /.../n against to UTF-8 string

日本語で発言するときにここのコードで「warning: regexp match /.../n against to UTF-8 string」が出た。


faraday/lib/faraday/utils.rb at master ? technoweenie/faraday ? GitHub


UTF-8の文字列に対してRegExpのオプションでnを渡して漢字コード無視ってるのが問題なよう。


エラーメッセージでググると同じ問題がいくつか出てきた。


FaradayのUtilsのescapeメソッドの中身をEscapeUtilsのescape_url使うようにして対処。


工夫したとこ


元ネタのライセンスが面白かったので同じものを採用。


参考:WTFPL - Wikipedia


ログインが必要な処理をブロックで渡して、ログインしてなかったらログインを促すメッセージをだしブロックを実行しない、ログインしていたらブロックを実行する。


という風に書いてみた。ブロック可愛いよブロック。





2011年11月10日木曜日

Android+MacRubyでMacを操作するアプリを作ったよ



AndroidアプリからMacを操作するPaddapというアプリを作りました。


hanachin/paddap ? GitHub


どんなアプリ?


一言で説明すると、AndroidをMacのトラックパッド代わり等に使うアプリです。MacRuby使ってます。


週末ものづくり講座の成果物です。


デモ






2011年11月5日土曜日

Okinawa.rbの勉強会に参加してきたよ!



勉強会はブログ書くまでが勉強会!


Okinawa.rbの勉強会に参加してきました。



具体的には、iPhone勉強会のやり方に倣って、Ruby/Rails初心者な方達には過去の勉強会資料などを使ってチュートリアルを行い、そうでない方々にはモクモクとハッカソンをしてもらう、という形です。

僕はモクモクとハッカソンしました。


ハッカソンの様子。真ん中で寝てるのが僕。


http://29.media.tumblr.com/tumblr_lu74q7cR8m1qzr282o1_500.jpg


Instagram


僕がハッカソンで書き直したかったもの


「はてなブックマークのタグ付けのデータを元に自分(や他人)が今興味をもっていることを視覚化したい。」


そう思ってしこしこ授業中に作ったのがこちら。


f:id:h6n:20111106014949p:image


Processingを直接使うより手慣れた言語でやった方が早く出来るだろう。


データの取得も表示も同じ言語でやった方がやりやすそうだ。


ということでプロトタイプをRubyで書きました。




  1. 自分のはてなブックマークのAtomフィードをダウンロード

  2. Ruby + Nokogiriでタグ等を抜き出す

  3. Ruby Processingを使って表示


という流れ。これを皆が見れるようにウェブブラウザで動くように書き直そう!というのが僕の今日のハッカソンの目標。


ハッカソンでやったこと


とりあえずブラウザでProcessing.js使って加工済みのデータを表示するところまで出来ました。


f:id:h6n:20111106022523p:image




  1. はてなブックマークのデータを取りたいのでAPI調べる


    1. どうやらja/bookmark/misc/feed - Hatena Developer Centerを参考にフィードのURLにパラメータ渡せば欲しいデータとれそう



  2. Anemoneっていうクロール用のgemがあるっぽいので入れて少し使ってみる

  3. Sinatra等でサーバー側書いたり、Anemoneでデータ取って来るにしても表示出来ないとどうしようもない

  4. とりあえずRuby Processingで書いたやつをProcessing.jsに移植


    1. Rubyでクラスとか使ってたのをJSで直接書くのはやだ

    2. CoffeeScript使おう

    3. Processing.jsのサンプルをCoffeeScriptで書いて動くのを確認

    4. 気がついたら昼。飯食べに行きつつ書き直し。

    5. [ ].push 123はアリなのに[ ].shiftは駄目で[ ].shift()と書かなきゃ駄目など、引数無しの関数あたりでハマる



  5. 同級生がやってたTry Rubyにちょっかい出す

  6. 気がついたら17時すぎててタイムアウト…


といった感じでした。


書き直す前の元データと書き直した奴まとめて成果物として置いておきます。


全部まとめてzip


反省点



  • ハッカソンは昼飯かって持ってきてたほうが時間節約出来る

  • 自分に優先順位と時間制限をつける

  • 下調べが足りてなかった orz


    • Processing.js周り

    • CoffeeScriptもチュートリアル一通りやってて満足して触ってなかったし

    • よく考えるとフィード取ってきて云々もRubyじゃなくてクライアント側のJSで出来るだろう


      • 最初のアイディア話して意見聞いてもよかったのでは



    • 今日はCoffeeScriptしか書いてないけどRubyで書いたのを移植、だからRuby勉強会のハッカソンの内容的にはいいはず…!


      • ほんとはSinatraとか使ってそこでRuby分補給する予定でした orz





  • 勉強会終わるまでにデプロイが理想

  • もっと話しかければよかったー&今度は懇親会出よっと


    • 懇親会ではなちんさんは何者かという話があったらしいww

    • 「誰一人として本名も年齢も経歴も知らない」中yasulabさん経由で経歴がばれるという謎の現象



  • 初めてバスで帰った。800円ちょいで那覇市内までいける。


    • Googleさんによると自宅まで徒歩2時間半ぐらい。Googleさんを信じて次は歩いてみようと思う。




感想


こういうもくもくもいいですね。楽しかったー。自分も(完全ではないにしろ)ブラウザで動くようになったし。


同級生がRubyハマってくれたようだし、初めてRubyやる人多かったけど皆楽しいって言ってましたね。(英語がつらいとも…)


Okinawa.rbの人に長田のうどん屋、栄町のサワディ・おでんの東大など美味しそうな店紹介してもらった。行かねば。(特にうどん)


今月は26・27日にもハッカソンがあるのでたのしみです。2日も実装に使えるのでいいネタ考えねば! (2つ作るのもありなのかな)


リンク


当日資料


世界の麦汁さん

Okinawa.rbの勉強会に初参戦してきたよ: 麦汁三昧


libkinjoさん

忘れ物しないようにチェックを入れる事が出来るウェブアプリ





DontForgetSomething


ソースコード


yamanetoshiさん

Node.jsいじってたらしい。自分もいじりたい。


ハッカソン - /var/log/messages


ふりかえりメモ

Google Groups


Togetter

第3回 Okinawa.rb 勉強会 - ハッカソン/チュートリアル - Togetter





2011年9月23日金曜日

7つの言語7つの世界 Ruby 3日目



試してみよう




感想等


3章はRubyのメタプログラミングの紹介、メタプログラミングとはプログラムを書くプログラム

Rubyの機能を使えばDSL(ドメイン固有言語)を構築することが簡単に出来る(らしい)

メタプログラミングRuby欲しくなった。

Rubyの3日分の「試してみよう」の他の人の解答見ると、奇麗なコード多すぎて嫉妬。

読んでる間ずっとリファレンスマニュアルと睨めっこだった。

もっとちゃんとした本を一冊かって頭に叩き込まれるまで勉強したいなぁ。

一番良いのは忘れないように毎日何か書く事だろうけど。書かないと何回も調べたことでも忘れちゃう気がする。

試してみようの3日目

元々定義されてるメソッドと同じheadersが設定されてたらmethod_missing呼ばれない。

なので定義されてるメソッドをundefしていく必要があるみたい。

メソッドをまっさらに消すのをブランクスレートと呼ぶらしい。

メタプログラミングに利用出来る機能



  • オープンクラス


    • クラスを定義した後からでも変更出来る

    • 普通はメソッドを追加する時に変更する

    • メソッドを追加する前に作成したオブジェクトからでも追加したメソッドを呼び出せる

    • DSLを作成する時に便利

  • method_missing


    • phpの__callとか__getのようなものか。

    • 例として出ているローマ字がすごい。

  • モジュール


    • 最も人気のあるスタイル

    • 「マクロと呼ばれるモジュールメソッドを使う」

    • acts_as_csvマクロでdefine_methodを使ってCSVファイルに関する全ての動作を定義(acts_as_csv.rb)

本見ながら書いたもの


















2011年9月22日木曜日

7つの言語7つの世界 Ruby 2日目



探してみよう



試してみよう



感想等


感想

クラスさえもClassクラスのインスタンス。全てがオブジェクト。


そしてModule.classはClassで、Module.class.superclassはModuleで…と頭がこんがらがりそう。


mixinの仕組みは便利ですね。Enumerableはいろんな演算を抽象化していて面白い。


試してみようはTree.rbがあんまりすっきり書けてない感じ。


本文に「このレベルの抽象化でも少しは優れたプログラミング言語になるが、Rubyの真の秘術が登場するのはまだまだこれからだ。」と書いているので次の章が楽しみです。


疑問点



  • PHP 5.4のtraitもmixinのようなものなのかな?


メモ



  • 配列やハッシュやシンボルのリテラルは書き方いくつかあるので詳しくはリテラルを見る

  • 配列


    • [ ]や[ ]=はArrayクラスのメソッド、なのでundefined_variable[0] = 'hoge'とか宣言してない変数の[0]に値を入れようとするとメソッドないよとエラーが出る

    • Rangeを渡したり-1を渡したり使いやすい。キュー、リスト、スタック、セットのように使えるし、どんな型でもok多重配列もok



  • ハッシュ


    • 試しに['hoge' => 'hoge', 0 => 'foo']って書いたら{'hoge' => 'hoge', 0 => 'foo'}を要素に持つ配列が出来た。ちょっと予想外

    • 同じシンボルは同じオブジェクト、文字列が必要なわけじゃないけど、名前が必要、そんな時に用いるらしい


      • 名前付きの引数もハッシュで再現出来る、関数の最後の引数を囲むブレースが省略可能なおかげ





  • 「Rubyが本当の力を発揮するのは、コードブロックを使い始めたとき」

  • コードブロック


    • 詳しくはメソッド呼び出し(super・ブロック付き・yield)を参照

    • 名前のない関数のようなもの、関数やメソッドに引数として実行可能なコードを受け渡し出来る

    • 用途


      • ファイルの角行の処理

      • HTTPトランザクション内で処理

      • コレクションに対して複雑な演算

      • 他にも至るところでブロックが使われる



    • Rubyの慣習では1行だけのコードブロックはブレースで、複数業にまたがるコードブロックはdo/endで囲む



  • クラス


    • 継承関係


      • 全てのクラスの親はObject(1.9ではBasicObject)

      • クラスはClassのインスタンス

      • Classのインスタンスはオブジェクトのテンプレート

      • Classの親はModule



    • 慣習、規則


      • クラスは大文字で始まりキャメルケース

      • インスタンス変数とメソッド名は小文字で始まり、区切りにアンダースコア

      • 定数は全て大文字で書く

      • インスタンス変数の先頭には@をつける

      • クラス変数の先頭には@@をつける

      • 判定用の関数とメソッドには通常、疑問符をつける

      • アクセッサを定義するメソッドがModuleで定義されている(class Module)


        • attrとattr_accessorがよく使われる







  • モジュール


    • クラスに混ぜ込んで(mixinして)使う、モジュールで定義した振る舞い、定数がクラスの一部となる

    • モジュールは複数のクラスメソッドに依存していることが多い

    • Javaでは明示的にinterfaceを実装するがRubyではダックタイピングによって暗黙的に



  • mixin


    • Flavorsで初めて導入、SmalltalkやPythonなどでも使われている。

    • 最も重要なmixinはEnumerableとComparable


      • Enumerableはeachを実装しておけばany?とかall?とかselectとかinjectとか便利なメソッドが使えるように

      • Comparableは<=>(宇宙船演算子)を定義しておけば比較演算が出来るようになる






Reia

p24のtree.rbの例に書いてあったもの。


Reia Programming Language


Erlang VM(BEAM)上で動くRuby-likeな言語らしい。


でももう開発止まっててこれ以上何かを追加する計画はないので興味があるならElixirをチェックしろと書いてますね。


面白そう。Erlangの章読んだらまたチェックしたい。


本見ながら書いたもの

tree.rb



to_file.rb



遊び





2011年9月16日金曜日

7つの言語7つの世界 Ruby 1日目



Okinawa.rbも立ち上がったみたいだし


Ruby入門のレッスン一覧


こんなすごく便利なサイトもあるし、Rubyもっと覚えたい。


残念ながら今のお仕事で使えるかは微妙。


とりあえずの目標として


Rubyアソシエーション: トップページ


シルバーをを受けてみたい。


いつでも試験を受ける環境はある、実行に移せるかは自分次第、なので頑張るのです。


探してみよう




試してみよう



感想等


RubyはOOPL、ダックタイプ、強い型付け、動的型付け。全てがオブジェクト!(数でさえも)


プログラマの生産性を高めてくれる機能がたくさん。


「人間様が気分よくプログラミングするための言語」Rubyは何を目指すのか - GIGAZINE


を読んだ。楽しそう。続けて2日目読みます。楽しい時間はあっというまだなー。





7つの言語7つの世界を読みます。



7つの言語7つの世界を買ったので読みます。Scheme修行と平行して読む。楽しみ楽しみ。7週間で読めるかは微妙なところだけどw


読んだら友達に貸す。貸したら自分で買いそうだけど。早く貸すためにちゃんとサボらず読む。


「はじめに」の中で書いてあったことを意識しながら読みます。



本書を単に読むだけでは、シンタックスの雰囲気はつかめるだろうが、それ以上は無理だ。

実は演習問題をやらずに1回読みました。それ以上を掴むためにもう一度読みます。



演習問題を自分でコーディングしてみる前にネット上で答えを探すようでは、失敗だ。まず自分で解いてみて、いくつかの問題が解けないことを自分自身で認識するようにしてほしい。

まず、自分で1回解くように頑張ります。僕は怠け癖が強いのでついつい調べてばかりで手動かせない。


でもRubyの1日目を解いてからググったら奇麗な解答を見つけることが出来たので終わったらググるの解禁、むしろ積極的にググって他人のコード見ます。


あと序文はかなり共感出来る。人の真似して書いてるだけでちょっとずつ出来ることが増えてくのだとか、実際に書いてコンパイルとおるように直しているうちに気づくこととか。


ちゃんと読むためにエントリかきました。


早速手を動かして、本読みます。


追記


The Pragmatic Bookshelf | Seven Languages in Seven Weeksから本書のコードをダウンロード出来る。


正誤表もあるので不具合あったらチェックします。