2011/10/08

Windowsで作って日本語が含まれるZIPファイルをPerlで文字化けせず解凍する

Archive::Zip使った。なんかEncodeの辺りが無理矢理な気がするが、こんな感じかしら。

use Archive::Zip;
use File::Spec;
use Encode;

my $file = $ARGV[0];
my $zip  = Archive::Zip->new();
die 'read error' unless $zip->read($file) == &Archive::Zip::AZ_OK;

for my $member ( $zip->members ) {
    my $to = File::Spec->catfile(decode('shift_jis',$member->fileName()));
    $zip->extractMember( $member, $to );
}

スクリーンショット(2011-10-08 14.34.42)

2011/09/27

ブログをTypePadに移行

このゆーすけべー日記をTypePadに移行しました!

というのも、半年分くらい自宅のファイルサーバのデータが諸々の事情で飛びまして(汗)... 事実上、このブログもタイムスリップ状態になったわけです。で、まぁいい機会だしってことで思いつきで移行してみました。

とはいうものの、TypePadはちょい前に使ってみて使用感がとてもよいと目を付けていましたよ。以下はこの記事の編集画面のスクショです。

スクリーンショット(2011-09-27 8.52.19)

記事ごとのURLが変更になる関係で「404 Not Found」的な症状がでるかもしれませんがご了承ください>< 今後ともよろしくお願いします!

gitweb.cgiをPlackで起動する

というか、miyagawaさんのgistでいいんだけど...

俺の場合は

  • '/'というパスでアクセスしてトップが表示される
  • Plack::Middleware::Staticを使った

ってことで以下のような.psgiになった。

use Plack::App::WrapCGI;
use Plack::Builder;

my $app =
  Plack::App::WrapCGI->new( script => '/home/git/gitweb/gitweb.cgi' )
  ->to_app;
builder {
    enable "Plack::Middleware::Static",
      path => qr{^/static/},
      root => '/home/git/gitweb/';
    $app;
};

これでplackupすればOK。もちろんstarmanなどのpsgi互換のサーバソフトでも起動できるので、応用でnginx等のフロントサーバを使えたりする。いやー便利!

2011/01/26

Facebookでシェアされたリンクのランキング等サービス「Shared」を公開してます!

今から22時間前。ふと気になったアイデアがあってFacebookにこう書きました。

Facebookで最近likeとshareされたリンクのランキングページがあったら便利かな!

Facebookのシェアってのは、とあるページのURLを貼り付けて「このページ面白いよ!」みたいな感じで、 友達に紹介したりできる機能です。 昔からそのシェアされたリンクの「グローバル」なランキングを取りたいと思ってたんだけど、 なんとなく実装方法が沸いてきたので、上記の書き込みから急いで作ってみました。 適当にバージョン番号ふってるんですが、現在「0.03」で、 「http://fb-shared.com/」というURLで運用中です。実験中とはいえ結構安定してきました。 あ、そうそう、サービスの名前は「Shared」です。

Shared * Links on Facebook Shared * Links on Facebook
shared

機能は至ってシンプル。 Facebookやってるとお分かりだと思うのですが、シェアの情報って何気に拾いにくいので、 その辺りをサポートする機能です。

  • 自分がシェアしたリンクをコメントと共に見る
  • 友達がシェアしたリンクをコメントと共に見る
  • Sharedユーザーの中で人気のあるリンクを見る

これ、実はログインするユーザー数が増えないとランキングの精度が出ないし、 自分の友達のリンク情報が少ないままなので、Facebookユーザーの方は是非使ってみてください!

とりあえず、今までどんなものをシェアしてきたかの履歴がだーと見えて面白いっすよ!

一応、サービスのサポートとかはFacebook上のアプリのプロフィールページでやろうと思ってます。

というわけで、Sharedをよろしく!

2011/01/24

2月に北海道に行って「Hokkaido.pm #4」でトークしてきます

ありがたいことに JPA(Japan Perl Association) さんから援助してもらって、 北海道に行って「Hokkaido.pm #4」というイベントに参加させていただくことになりました。 2月19日(土)に札幌で行われるPerlの勉強会イベントです。募集は以下で行っています。

今回せっかくお呼ばれして話す機会をもらえたので、 気合いを入れて発表したいと思います。 未成年の参加者の方もいる可能性があるということで、 その辺りは気をつかいつつ題名は 「エロサイト管理者の憂鬱3 - エロくない7つの開発することについて - 」 といたします。質疑応答を含めて40分のトークです。

hokkaido.pm

概要は仮で以下のようなものです。

今回は、2009年YAPC::Asia 前夜祭で発表し、 WEB+DB Press vol.54 の第一特集記事「Webサービス即日開発」のネタ元になったという 「エロサイト管理者の憂鬱2」の続編をお送りいたします。 2009年の頃からわずかばかりの時間の経過ですが、 その間にWebアプリケーションを取り巻く状況は変化してきました。 PerlにおいてはPlackの開発が進行し普及しつつあり、 ユーザーからの視点で見るとiPhoneなどのスマートフォンがメジャーになり閲覧環境が変わってきてもいます。 また、運用環境のVPSなども出そろってきました。 エロサイト管理者の憂鬱「3」では、諸々の事項をこうしたアップデートに合わせつつ、 僕が個人で行っている開発の「全て」の「今」を解き明かし、 少しでも皆さんのWebアプリケーション開発のきっかけになればいいと思っています。

「個人がPerlで作るWebサービス」について以下の7つの項目を話します。

  1. モチベーションは何か
  2. 企画をする
  3. "sandbox"ディレクトリで遊ぶ
  4. WAFとO/R Mapperをどうするか
  5. アプリを作る
  6. デプロイする
  7. 運用をしていく

かなりアプリよりの話で、かつ個人や小規模の方の開発向けの発表内容です。 また、Perlに限らずWebアプリケーションを作りたいという全ての方向けって感じにもしたいです。

都心やその周辺県でこそ.pm、つまりPerl開発者の集まりは充実していますが、 地方はもっと盛り上がってもいいし、そこからスターが飛びでてもいいかなーとも勝手に思っています。 仰々しいですが、その足がかりになれば嬉しいなんて勝手に想像しています。

ということで、北海道にいる方、もしくは北海道に行きたい方は、 是非ご参加ください!

Kamakura.pm テクニカルトーク#01 で「Blog Hacks 2011」を話します

発足したばかりの鎌倉周辺のPerl Mongersの集まりKamakura.pmの「まともな」テクニカルトークイベントが、 今週末28日(金)に開催されます。 そこで、鎌倉市民であり鎌倉で活動する僕も参加し、 「Blog Hacks 2011」という題名で20分ほどトークしたいと思います。

blog hacks 2011

概要は以下。

2004年発売のオライリー「Blog Hacks」はBlogを書くこと、 Blogツールやそれを活用した技術ハックの楽しさを表現してくれました。 時代は巡る巡って2011年。 Twitter、Facebookなどのソーシャルメディアが出現し、 Blogの周りの状況は変わってきましたが、その楽しさは相変わらずだと僕は感じています。 ただ、2004年の「Blog Hacks」では通じない2011年なりの「Hack」の仕方があります。 そこで、今回はPerlのことにも触れつつその周辺の技術を利用したBlogの楽しみ方を、 「Blog Hacks 2011」と題しKamakura.pm テクニカルトーク#01で話したいと思います。 Facebookとの連動、CSS Frameworkについてのライトな事柄や、 Perlを使ったMovableTypeのHackなどコアな話など20分で解説していきます。

主催者のtypesterさんに聞くと、そこまでPerlにこだわらなくても周辺技術でもいいよーってことなので、 このテーマにしました。すでに募集定員の20人が埋まってしまっているので、 なんとも言えないのですが、 もしかしてキャンセルがでるかもしれないので「補欠」登録してみて参加できるかもしれないので、興味のある人は是非。

「統合」に見るFacebookのインターフェース、という記事をWebSiteExpert#34に寄稿しました

明日発売になる技術評論社「Web Site expert #34」という雑誌の特集「Facebookが来る!!」にて、 「統合」に見るFacebookのインターフェースという記事を4ページばかし寄稿させていただきました。 記事を書く経緯として、Facebookで知り合いの編集の方が「誰かFacebookに関する記事書きたい人、いいね!ください」 と言っていたのでいいね!した次第です。 実際に紙面になって気づいたのですが、 その編集の方が割と僕らFacebookのコアユーザーに近いところにいるということでこの特集は「個人的に」すごい。

Facebook

...

ですが、その前にFacebookはコミュニケーションのプラットフォームであることを忘れてはいけません。 2010年末には渋谷でFacebookユーザが集まったパーティが開かれ、 Facebookの代名詞とも言ってもよい「いいね!」をシチュエーション別に分類した「いいね!48手」まで 飛び出しました。

見開きにはこのリード。 実は2010年末の渋谷でのFacebookユーザが集まったパーティって、 僕が企画したアンオフィシャルな「Facebook忘年会」のことだったりしますし、 「いいね!48手」を紹介したのはこの日記でも紹介した「ささくれささお」のことだったりします。

肝心の僕の記事は、Facebookのホーム画面にある「ニュースフィード」や各々の「ウォール」のインターフェースについて優れているということを述べ、その理由について詳細を書いています。 本当は「Facebookを流行らせたのは僕です!」って内容がよかったのですが、 いやらしいのでやめました。

ということで、Facebookに興味のある方なんか買って読むといいんじゃないんですかね!

Web Site Expert #34
posted with yusukebe.com::AmazonSearch on 2011.1.24
  • 大型本 / 技術評論社
  • Amazon 売り上げランキング: 19217
Amazon.co.jpで詳細を見る

2011/01/23

Twitpicなど写真共有サイトのランキングサイト「Picst(ピクスト)」を公開!

オシャレな写真共有iPhoneアプリのinstagramでは、 「Popular」ってメニューがあって今人気の写真(オシャレな)を閲覧することができて 結構楽しかったり、そこに載るのがモチベーションになったりします。 が、それ以上におそらく使われているであろうTwitterと連動する写真共有サイト Twitpicの「Popular」な写真ってなかなかわからないですね。

昔からTwibというTwitterでつぶやかれたURLをひたすら収集する、 サービスをやってるもんで、人気のTwitpic URLはなんとなく分かるんですが、 Twitpicを含む写真共有サイトのランキング専用サイトが欲しくなりました。

そこで、とりあえずTwitpic、Flickr、instagramという3つのサービスの個別エントリー記事(つまり写真が載ってるページ)を、Twitter APIから解析して、人気の写真を出すというサービスを作ってみました。 名前は「Picst」、読みは「ピクスト」、URLは「http://pic.st/」です。

Picst | Popular ranking of twitpic, instagram and flickr pictures. Picst | Popular ranking of twitpic, instagram and flickr pictures.
Picst

本当はグローバルなサービスにしたかったのですが、 現在のところ、日本語のみ対応してます。 というのも、当初は「日本語のみ」というフィルターを通さずにやっていたのですが、 でてくるのが外人の写真ばっかりで何が面白いのかという尺度がわからなかったので、 今のところそうしてます。

で、実際にツイートを集めてランキング順に並べてみると、 ランキング上Twitpicばっかりなのですが、 結構面白い写真がでてきていい感じです。 やっぱり「おわらい系」写真が人気ありますね。 一日一回見てくすっと笑えるサイトを目指す感じですかね。

ちなみに、Twitterはもちろんのこと、Facebookとの連動も割と考えて作っています。 Like ButtonやShare Button、さらにはComment Boxなんてのも設置して、 面白かった写真をFacebook上で共有してもらって、 さらにはバイラルにPicst自体も広がっていけばいかなーと思っています。

さて簡単な技術的な解説。 サービスのエントリーへのツイートが何件あるかはお得意の Twitter Stream APIとSearch APIの兼用という方法を取っています。 問題となるのは、写真のサムネイルURLやタイトルなどの情報の取得なのですが、 これはembedly APIのみを使用しています。 30以上の写真共有サイトを共通のインターフェースに従い、 eEmbed形式で情報をゲットできるのでまさにこのサービスにふさわしいものです。

また、運用にもちょっと力を入れていて、 今回はVPSをlinodeでしっかりと借りています。 そして、バックエンドに関して、 Web Application Frameworkには最近自作している Rumi、 APIが安定しているという理由(言い訳?)でO/R MapperにはDBIx::Skinnyを利用しています。 モックを作った時にはCatalyst+DBIx::Classだったのですが、 かなりリソースが節約された感じです。

というわけで、今話題の写真を見つけるなら「Picst!」。 よかったら見てみてね。 Enjoy!

2011/01/15

iPhoneでエロ画像が快適に見える「imeero」を作ってみた

エッチな画像、いいですね^^; 最近では、2chエロスレッドまとめサイトなどに高画質でいろいろな意味で綺麗な写真が、 うまいこと並べられています。 僕はそれを最近お気に入りのiPhoneで快適に見たいと思いました。 それぞれのブログはiPhoneに最適化されているのですが、 いかんせんあくまで「ページの中の一つの画像」という雰囲気がしちゃうので、 集中して個別の画像を見ることができないなーと感じています。 そこで、iPhoneからエロまとめサイトの画像を一個一個快適に見ることができるサービスを作ってみました。 名前は「imeero(イメエロ)」と言います(18禁)。

imeero

使い方は簡単。 見たい画像集のタイトルをタップすると一番目の画像がでてきます。 指をタッチしてスライドさせると次の画像に移ります。 てな具合でそれぞれの画像を楽しんでください。

さて簡単な実装の話。今回の目玉はやはりUIです。 当初は独自のJavaScriptで、 「iPhone JavaScript タップ」などでGoogle検索した結果を踏まえてUIのインタラクションを実現してました。 ただ、jQuery Mobileに目をつけてから、 そのAPIでだいぶできることがわかったので、 インタラクションのほとんどはjQuery MobileのAPIを通してイベントを取得しています。

例えばjQuery Mobileを使えば、画像を遷移させるためのイベント、 つまり「一度指を画面にタッチしてから、そのままドラッグをする」という動作は、 「swipe」というTouch Eventで簡単に取得できます。

また、jQuery Mobileを介すことにより、おそらくiPadやAndroidといったスマートフォンにもある程度、 対応させることができたのかと思います。

その他、バックエンドのどの画像をエロい画像と見なすかなどのテクニックなどや、 画像配信のコツなどありますが、それは要望があればまたの機会でお話させていただきたいです。

ということで、imeeroをよろしく!

プロジェクト思考で作ろう

未だに書いてない2011年、New Decadeの抱負にかえて。

問題意識

自分で小さな会社を持って仕事をすることの良さは比較的自由に時間を作れることだ。 フリーランスを含め、同じような環境に置かれている人が周りにいることが、 昨今のTwitterやFacebookのつながりで分かってきた。

そういう人の、特に開発者の方の仕事のやり方で多いのは受託開発である。 受託と言ってもその度合いによって様々であるが、 大抵いい話を聞かないし、自分もあまりいい印象はない。

象徴的な例は、自分が開発の役割で携わっていた案件で、 企画側に追加や変更要望を出したくても自分の工数が無駄に増えるだけ故、 意見が言えないというケースである。 その他を挙げれば、人月見積も文句を言う対象である。 また、同じ案件に関わっている人でも行程がそれぞれ分離されていて、 他の制作者の方の顔を見ないまま終わってしまうこともしばしばある。

余談だが、これらを含め苦い思いをした経験から、弊社では「完全な」受託開発というのは 一切取らないように最近ではしている。 折角だから自分が気持ちいいと思うこと以外はやらない。

では受託開発以外のやり方はないものか。 いや、ある程度「受託的」であっても構わないが、気持ちよく仕事のできるやり方はないものか。 それを考えている。 さらに欲を言えば、できた物が世の中にない物ならばさらにいい。

今から述べることはこうした問題意識を解決するための仮説であり、 それを今から検証しようとしている。

仲間を集める

去年の10月からのFacebookの流行の兆しで、興味深いの点は、 フリーランスや小さい会社の人と友達になれた事だ。 もちろんTwitterも似たようなプラットフォームではあるが、俺の場合Facebookがそれであった。 ソーシャルメディアやそれに携わるイベントを通して同じような境遇の、かつノリがあう仲間が見つかるのはでかい。

仲間にも二種類ある。

一つは同じ物作りができる人達だ。 自分はプログラマーでもあるので、同じプログラマーの友達と出会うと刺激し合う関係になり、 いい物が早く作れる。 また、自分には持っていない能力を持つデザイナーやコーダーとは協業しようしてちょっとした何か作る運びになり、 一人ではできない物が作れる。

もう一種類の仲間は、物を作っている俺らをビジネスのフィールドに立たせてくれる お兄さん的役割の人だ。 向こうから企画を持ち込んでくれる場合もあるし、 こちらから「こういうのがやりたい」と言ってノってもらうのもあり得る。 そういう人はお金の扱いとマーケティング調査の能力に優れている必要がある。 また、人脈も必要かもしれない。

「こんな仲間が欲しい」と理想を言っているようだが、 これは、個人的には見つかりつつある事実だ。

チームを組む

仲間が集まるとお金が絡むかどうかは置いておき「こんなことやりたい」というのがでてくる。 誰と「こんなこと」をやりたいかを優先的に考えつつ、 達成するための能力の最低限を満たすようにチームを組もう。 チームを組む時の始め方として、顔合わせ的なリアルの打ち合わせから始めるケースもあるだろうが、 オンラインのグルーピングツールも使えるだろう。 Google GroupsやSkypeのグループチャット、その他プロジェクトマネージメントサービスなどである。

チームの人数はあまり大きすぎない方がいい。 もちろん作る物のボリュームによるが、コアなメンバーは5人前後がいいだろう。 その時にお金が絡む場合であると、上記した物作りな人とお金を持ってくる人と二種類の人が混在する可能性があるが、コアなグループならばむしろ一緒の方がいいかもしれない。 後々制作に入ったら制作チームを別途作成する。

重要なことだが、作られたチームは「こんなことやりたい」が達成できた時点で、 解散する。

プロジェクト思考で作る

チームの「こんなことやりたい」というのは大抵具体的にはなっていない。 それを闇雲に作っていくのではなく、ちゃんとした手順を踏んで具現化していく。 「手順」についていいお手本がある。 東大MOTの宮田秀明氏が提唱する「プロジェクト思考」である。 著書「仕事のやり方間違えてます」では自身のヨットレースの経験談を交え、 以下の「想像のプロセス」と呼ぶスパイラルを回してプロジェクトを回していくと、 最高の仕事ができると述べる。

  1. ビジョン - 大きくて単純明快な目標
  2. コンセプト - 基本概念
  3. モデル - コンセプトを実現するための仕組み
  4. デザイン/ソリューション - モデルを具現化する
  5. 意志決定/テスト - 確認
  6. 実行

実は今まで書いてきた、好きな人と仕事をすることやチーム組むこともプロジェクト思考の考え方だ。

また、プロジェクト思考以外にも「デザイン思考」が役に立つ。 「デザイン思考の道具箱」という書籍を書いた奥出直人教授は俺の大学時代の恩師であり、 実のところこの本の題材になっているのは俺が彼の研究室で実践していたことのまとめとも言える。

プロトタイプ主義

我々は物を比較的早く作る能力と環境を持っているのであるから、作ってみることは有効だ。 とりわけアプリケーションという視点に立てば、今は様々なライブラリやフレームワークが便利に提供されているので、 それらを組み合わせてプロトタイプを作ることが容易である。 作った物をそのまま運用させるかは置いておき、 とにかく動く物、触れる物を作って検証することを優先しよう。 俺の場合何か作ってみて、面白くないからという理由や、実現できないからという理由で、 ボツにするケースが多い。 ということはそれだけ駄目なケースがあるわけなので、グダグダ言う前にさっさと作ってボツにした方が、 効率がいいわけだ。

また、プロトタイプというわけではないが、 個人が似たような発想で作った物がビジネスにできるという理由でプロジェクトになる経緯もある。 動く物がもうあるわけだから話が早い。

リリースする

プロジェクト思考、プロトタイプ主義で作った物をリリースしよう。 実のところ、運用も絡んだリリースについて俺が強く言えることはあまりない。 特に多少なりともでかいアプリケーションとなると運用のコストがかかるので、 チームがそれで手一杯になってしまう可能性がある。 手離れのいい形で運用会社に任せるか、金額的にも人的にも低コストの運用方法を見つけるのが、 策だろうか。

実践すること、共有するための場所を作ること

今まで述べた仮説を実践していこうと思う。 もしくはもうすでに、イベントなど単発的なものならば実践をしてきた。 ただ、俺の希望は個人でこれを実践することだけにとどまらない

こうしたソーシャルな時代におけるプロジェクト思考の物作りのやり方を共有し、 仲間探しができる「場所」を作りたいと思っている。 それが「新しいモノ作りについて飲むぞ」という集まりだったのだし、 このエントリーを書いている意味でもある。

「場所を作る」だってプロジェクトだ。そのためのチームも徐々に整えようとしているし、 どういうプロジェクトかを説明するための名前もつけようとしている。 また、とある形でやり方をまとめていく可能性がある。

最初は少数精鋭でプロジェクトの成功事例を作るのが優先であるが、 もし興味のある人がいたら、 各々の「やり方」を共有するような勉強会などをやろうとも思っている。

賛同していただける方がいれば、TwitterなりFacebookで連絡をいただけると嬉しい。 コミュニケーションの場でも作ろうと思う。

参考文献

仕事のやり方間違えてます―成功を手にする「理系思考」10の法則
posted with yusukebe.com::AmazonSearch on 2011.1.15
  • 宮田 秀明
  • 単行本 / 祥伝社
  • Amazon 売り上げランキング: 90886
Amazon.co.jpで詳細を見る

デザイン思考の道具箱―イノベーションを生む会社のつくり方
posted with yusukebe.com::AmazonSearch on 2011.1.15
  • 奥出 直人
  • 単行本 / 早川書房
  • Amazon 売り上げランキング: 42862
Amazon.co.jpで詳細を見る