PerlとRubyがくしゅう帳

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_です。 最近は主にPerl関連の勉強会やコミュニティに参加しています。

※ 先日のnamba.pmで、ブログ記事にする許可を頂いたので書きました。

いつもコンテンツ力の高いツイートで楽しませてもらっている某職質王氏にインスパイアされて、perl鍋という、ミニハッカソン?みたいな勉強会で、twitterAPIを題材にプログラムを作ってみました。
 

コンテンツ力の高さ・・・それは言葉のセンスもさることながら、次から次へと脳から湧き出る脳内物質まかせに紡ぎ出される、怒涛の連続ツイートではないでしょうか。


ということで、連続ツイートをしている時の脳内の状態を数値化してみようと考え、ツイートしている時に出ている脳内の汁dopamineの出る速度を数値化してみました。

書いたコードはこんな感じです。



TwitterAPIから色々な人のTLを取得する方法は、Net::Twitter::Lite::WithAPIv1_1オブジェクトを使用し、user_timelineメソッドの引数'user_id'に対象の人のtwitterID番号を設定しメソッドを実行すれば、TLの内容が配列のリファレンスで取得できるのでそれをデリファレンスして使用します。
配列(リファレンス)の中身も、ハッシュのリファレンスが入った、複雑な入れ子構造になっているので、Data::Dumperで中身の階層と必要なデータ位置を確認してやる必要があります。
膨大な入れ子構造のままだと把握しにくかったので、今回は必要なデータ(ツイートされた時刻)だけ取り出して新たな配列に格納、それを基礎として色々処理しました。
TLをごっそり取得って、某職質王氏の提唱するネットストーキングを支える技術っぽいですね。


さて、このコードを使って色々な人の数値を測定し実験してみました。ちなみに汁速度の単位はnionと勝手に命名しました。


まずは、Perl入学式のP総裁の脳汁量

papix氏

普通にtwitterを使っているとこんな感じでしょうか。
 
 

次に、リスペクトする面白エンジニアh先生の脳汁量

hisaichi氏

さすがですね。100 over、200 overもありますね。


最後に、このコードを書く動機付けとなった、職質王氏の脳汁量

moznion氏

連続ツイートの数が多いです。しかも、最高値、350 over?!コンテンツ力、凄い!




書いたコードの課題点

・変数や関数等の名前の付け方が適当すぎて、自分でもわかりにくい。元々、数カ月前に途中まで書いたコードの続きを作ったのですが、前書いたコードを自分で読んで、分かりにくかったのは問題。


・思いつくままにダーッと書いたコードなので、別のプログラムでも再利用したり、読みやすくする為に、いくつかのサブルーチンに分けた方が良いのかな?と思った。
->namba.pmで、「そもそも再利用しようとしてコードを分割し、成功した試しがない。コードは再利用も視野に入れて設計し予め小さな単位で書く意識が必要」と教えて頂きました。なるほどです。



最後に

面識がほとんど無いのに、勝手にネタにしてすみませんでした。勝手にネタに使わしてもらったのに、快くブログ記事の許可を頂きありがとうございます。




※ twitterAPIで測定対象のツイートを取得し、3分以内のツイートを連続ツイートとみなし、速度を計測。

※※ 連続ツイート数が10を超えると、脳内がかなり危険なトランス状態に違いないという推測で、評価数値がぐんと上がる様にバイアスをかけてみました。

~perl入学式の部~

先週、perl入学式#3にゆるふわサポーターとして参加して来ました。サポーターとしての参加は2回目。

今回の目玉は、講師がスペシャルゲストの @moznion 氏。 かなり笑いをとってたのが印象的でした。個人的には、ライブでコンテンツ生成の現場を見ることが出来たのが良かった。


昨年と違って、

・今年は隔月開催となり1回の講義で学習する量が増えた

・時間の都合上?冒頭の前回までのおさらいが省略された


前者は、1回の講義で詰め込む量は増えたけれど、講義資料はネットで見られるし、何より1回の参加で出来ること(使えること)がたくさん増えるので、復習も楽しく捗りそうで昨年より良いかも。


後者は途中参加や、前回欠席組のパターンはつらいかなーと思いました。自身で前回までの資料を自習するしかないく、その部分はメールやTwitterでフォローする仕組みがまだ浸透していないのかな、と。

自習・復習して分からないところがあれば、遠慮無くTwitterで質問を投げれば、ガチサポーターの皆様方が丁寧に教えてくれますよ!



~namba.pmの部~

今回の目玉は、八王子から参戦のスペシャルゲスト @moznion 氏。こちらでもコンテンツ力をこれでもかというくらい、発揮しておられましたですね。

個人的に聞きたかったTestの話や考え方を聞けたのは大きかった。自分のような趣味でコードを書いている者にとっては、こういう場って、人の繋がりとリアルな現場の知識が増える貴重な場だったりするので、非常に有意義でしたし楽しいです。


一枚LT以降、後半から二次会にかけては、もう、酒が回ってひたすら楽しい時間でした。

非常に良いコミュニティですね。是非次回も参加したいものです。いや、YAPC::ASIA2013の方が先かな。


あと、氏の提唱するネットストーキングを支える技術、perl鍋で作ったスクリプトのブログ記事公開の許可を貰えたのも大きかった。みなさん、心が広い!

PerlでのTest駆動開発にチャレンジ


最近読み進めている「web開発の基礎徹底攻略」に、Rubyをサンプルとしたテスト駆動開発のやり方の記事が載っていたので、Perlでも試してみました。


ずっとオレ流でコードを書いているので、最近は名前の付け方、テストの書き方など、一歩深く学びたいなーと思っていたところに調度良い教材があったので、試してみました。


本の記事では、RspecというRubyのモジュールを使って、RubyでFizzBuzzクラスのコードを書くという記事だったので、Perlで試すにあたって、


・オブジェクト指向はまだ良くわかっていないので、sub fizzbuzzというサブルーチンを完成させる。

・fizzbuzz.plというファイルに、sub fizzbuzz というサブルーチンを作成し、引数を1つ与えると対応する値を返すコードとした。

・テストに使用するモジュールは、昨年のPerl入学式で教わったTest::Moreというモジュールを使う。

とい風にアレンジしてみました。


PerlでTestを書くにあたり、参考にさせていただいたサイトはxaicronさんのこちらの記事。


まずは、テストモジュールの土台を書いてみる。ファイル名の拡張子は.t。

use strict;
use warnings;
use Test::More;

#ここにテストを書いていく。

done_testing;


そして、テスト対象のモジュール名はfizzbuz.plとし、対象モジュールが読み込めるかのテストを書く。


require_ok( 'fizzbuzz.pl' );


テストは、記事の順序通り、テストを1つ増やして->通るコードを書き->コードを整理する(リファクトたリング)のサイクルを進めていきます。進め方は非常に丁寧に解説されており、初TDDの自分にもわかりやすい非常に初心者向けの良記事です。同じ手順を書いちゃう訳にはいかないので、最終的に出来上がったテストコードがこちら。



出来上がったFizzBuzzのコードがこちら。




テストが全て通ると、こんな感じに。

fizzbuzz


簡単なテスト駆動開発を試してみて感じたことは、fizzbuzzの最大の落とし穴、15の倍数の時(fizzbuzzを返すとき)のケースをテストで書いておけば、確実にコードの穴が発見出来て素晴らしって事です。

今までは頭の中だけでコードを考えて、いざ「出来た!」って動かしてみた時、自分自身で想定できていなかった事がポロポロあったのが、テストをちゃんと書いておけば防げるんだなーと思いました。


今後の課題は、もっと実用的なテストコードを書けるようになりたい。


しかし、「web開発の基礎徹底攻略」は初心者にとって、本当に分かりやすくていい本ですね。おかげで「Perl徹底攻略」の方はまだ未開封状態です。

このページのトップヘ