June 18, 2006

WEB+DB PRESS vol.33

今回は、US企業で働く場合の、日本との働き方の違いについて書いてみたいと思います。労働体系や労働時間といったものは、企業ごとに風土があるので一概には言えないかと思いますが、サンフランシスコのスタートアップ企業の一例ということで、あらかじめご了承のほど。

まず、最初に大きく日本と違っているのは労働時間、とくにその時間帯です。

この続きは、こちらで。

WEB+DB PRESS Vol.33
WEB+DB PRESS Vol.33
posted with amazlet on 06.06.18
WEB+DB PRESS編集部
技術評論社 (2006/06/22)
Posted by miyagawa at 02:04 PM | Comments (0) | TrackBack (0)

June 17, 2006

YAPC::Europe 2006 Schedule Announced

YAPC::Europe 2006 Schedule
http://www.birmingham2006.com/cgi-bin/yapc.pl?act=talk-schedule&dayid=1

8/30-9/1 にイギリスはバーミンガムで開催される YAPC::Europe 2006 のスケジュールがでました。3日目の一発目Plagger ネタ しゃべってきます。 Plagger World Tour に追加しないと。

実はヨーロッパに旅行するのは初めて。カンファレンスの前後は Leon や clkao のいるロンドンに宿泊するんですが、ノッティンガムパレードやらプレミアリーグの開幕戦やら、楽しめるといいなあ。

Posted by miyagawa at 12:52 PM | Comments (0) | TrackBack (0)

June 15, 2006

ActivePerl で PerlScript と Google Maps

Google Maps を ThinkPad 加速度センサーで操作 というナイスなハックをやってみたわけですが、ちょっと技術的な部分を解説。

まず ThinkPad の加速度を読む部分は、Google で検索すると、

あたりのコードが見つかります。C で書くと、

        if( !DeviceIoControl( hFile, 0x733fc, NULL,  0, // via IOCTL(0x733fc)
                              (void *)&AccelerometerData, 0x24, &ulRead, NULL))
            throw "Failed to DeviceIoControl";
        X = AccelerometerData.x0 + OffsetX;
        Y = AccelerometerData.y0 + OffsetY;

という感じ。これを ActivePerl でやるには、Win32API::File を使って、

use Win32API::File;
my $file = createFile("//./ShockMgr", "r ke") or die "Can't get ShockMgr device";
DeviceIoControl($file, 0x733fc, [], 0, my($buf), 0x24, my($bytes), []);
my @data = unpack "x4s*", $buf;

という具合にやればよし。ネイティブの createFile, DeviceIoControl をそのまま呼べるので簡単。

これでX軸、Y軸の加速度が取れたので、あとは Google Maps とどうやって組み合わせるか。調べてみたところ、Google Maps の JavaScript は v2.0 からローカルの HTML ドキュメントから API Key なしで実行できるようになったとのこと。

というわけで WinIE で ActiveX として Perl を実行してしまって、Google Maps の JS コードと融合すればOK。この ActiveX + Perl はかなり協力で、

<script language="PerlScript">
$window->document->write("hello");
</script>

のようにブラウザのオブジェクトをさわれるし、

<script language="PerlScript">
sub foo { alert("$_[0]") }
</script>
<script language="JavaScript">
foo("bar");
</script>

のように PerlScript で書いた関数を JavaScript から呼び出し、またその逆なんてのも OK。当然 ActivePerl だから、LWP でも Win32::OLE でも使い放題。

てなわけで GMaps との融合。通常の GMaps アプリ同様に js をロードして Map オブジェクトを配置。ポイントは、

        window.setTimeout(loop, interval);
      }
    }
    
    function loop() {
      var pos = get_pos(0).split(/,/);
      var ax = (pos[0] - base[0]) / 20;
      var ay = (pos[1] - base[1]) / 20;
      
      x += ax * 0.0005;
      y -= ay * 0.0005; // opposite way
      map.panTo(new GLatLng(y, x));
    
      window.setTimeout(loop, interval);
    }

という具合に setTimeout でループしながら、Perl で定義した get_pos を呼び出して XY 加速度を取得。その値に応じて map.panTo() で移動、といった具合。

Win32-Perl の機能がブラウザから使えることによって、オンラインアプリの Google Maps とローカルの融合ができる、というわけでこれはアツイなー、と思ったしだいです。

Posted by miyagawa at 05:09 PM | Comments (0) | TrackBack (0)

Blog の整理と mt-text-hatena.pl

最近メインのこの Blog (blog.bulknews.net) の更新が滞り気味、というのも他にいくつも Blog があってカテゴリを散らしているうちに、メインのここに書くネタがほとんどなくなってきたという罠。

Bulknews::SubTech を Plagger ネタ専用に立ち上げていたんですが、はてな記法(でもなんでもいいんですがいわゆる Pre がそのまま書けるフォーマット)だとコードが書きやすいということもあり、コードネタ専門に。それでここのメインが侵食されてきたという感じですね。

せっかく一番読者が多いこの Blog なので、こっちにももっとコード系のtechネタを戻していって、subtech は Plagger 中心のコードメモ系に特化させる予定。というわけで mt-text-hatena をインストールしてみました。このエントリはテストもかねてます。(はてなフォーマットを使うのは一番の本意ではなくてできれば Trac か Kwiki がよかったんですが、もうすでに Subtech ではてなフォーマットを使っているので、まあこれでいいかと)

というわけで、

てな感じに整理。まあ、あんまりこだわらずにポストしていきます。

Posted by miyagawa at 04:44 PM | Comments (0) | TrackBack (0)

June 02, 2006

Six Apart employess on CPAN

Six Apart CPAN Leaderboard (generated from 02packages.details.txt.gz on Thu Jun 1 12:31:59 2006)

Contributors are ranked by number of modules and then by name.

Want to work with us? Send me your resume now!

 
1     Tatsuhiko Miyagawa (MIYAGAWA)   (102) abbreviation, Acme-Module-Authors, Apache-ACEProxy, Apache-AntiSpam, Apache-Clickable, Apache-CustomKeywords, Apache-DefaultCharset, Apache-GuessCharset, Apache-JavaScript-DocumentWrite, Apache-No404Proxy, Apache-Profiler, Apache-Session-CacheAny, Apache-Session-Generate-ModUniqueId, Apache-Session-Generate-ModUsertrack, Apache-Session-PHP, Apache-Session-Serialize-YAML, Apache-Singleton, Apache-StickyQuery, Archive-Any-Create, Attribute-Profiled, Attribute-Protected, Attribute-Unimplemented, Bundle-Sledge, capitalization, Catalyst-Plugin-JSONRPC, Catalyst-View-Jemplate, Catalyst-View-JSON, CGI-Untaint-email, Class-DBI-AbstractSearch, Class-DBI-Extension, Class-DBI-Pager, Class-DBI-Replication, Class-DBI-SQLite, Class-DBI-View, Class-Trigger, Convert-Base32, Convert-DUDE, Convert-RACE, Date-Japanese-Era, Date-Range-Birth, Device-KeyStroke-Mobile, Dunce-time, Email-Find, Email-Valid-Loose, Encode-JP-Mobile, Encode-Punycode, File-Find-Rule-Digest, HTML-Entities-ImodePictogram, HTML-RelExtor, HTML-ResolveLink, HTML-XSSLint, HTTP-ProxyPAC, HTTP-Server-Simple-Authen, Inline-Basic, Kwiki-Emoticon, Kwiki-Export, Kwiki-Footnote, Kwiki-OpenSearch, Kwiki-OpenSearch-Service, Kwiki-TypeKey, Kwiki-URLBL, Log-Dispatch-Config, Log-Dispatch-DBI, Mac-Macbinary, MSIE-MenuExt, Net-DAAP-Server-AAC, Net-IDN-Nameprep, Net-IPAddr-Find, Net-YahooMessenger, NetAddr-IP-Find, PHP-Session, Plagger, POE-Component-Client-AirTunes, POE-Component-YahooMessenger, Template-Plugin-Clickable, Template-Plugin-Comma, Template-Plugin-FillInForm, Template-Plugin-HTML-Template, Template-Plugin-JavaScript, Template-Plugin-MobileAgent, Template-Plugin-Shuffle, Template-Provider-Encoding, Term-TtyRec, Text-Emoticon, Text-Emoticon-GoogleTalk, Text-Emoticon-MSN, Text-Emoticon-Yahoo, Text-MessageFormat, Time-Duration-ja, WebService-Bloglines, WebService-ChangesXml, WebService-Google-Suggest, WWW-Baseball-NPB, WWW-Blog-Metadata-MobileLinkDiscovery, WWW-Blog-Metadata-OpenID, WWW-Blog-Metadata-OpenSearch, WWW-Cache-Google, WWW-OpenSearch, XML-Atom, XML-Atom-Lifeblog, XML-Atom-Stream, XML-Liberal
2     Benjamin Trott (BTROTT)   (23) Apache-AuthTypeKey, Authen-TypeKey, Catalyst-Plugin-AtomServer, Catalyst-Plugin-Authentication-OpenID, Class-ErrorHandler, Config-FreeForm, Convert-PEM, Crypt-DES_EDE3, Crypt-DH, Crypt-DSA, Crypt-Keys, Crypt-OpenPGP, Data-Buffer, Data-ObjectDriver, Digest-BubbleBabble, Feed-Find, Filter-Handle, POE-Component-BlogCloud, URI-Fetch, WWW-Blog-Metadata, WWW-Blog-Metadata-Icon, XML-Feed, XML-FOAF
3     David Davis (XANTUS)   (18) Apache-Backend-POE, Device-MX240, Filesys-Virtual, Filesys-Virtual-Plain, POE-Component-Client-Asterisk-Manager, POE-Component-Client-MSN, POE-Component-Client-Telnet, POE-Component-DebugShell-Jabber, POE-Component-EasyDBI, POE-Component-NomadJukebox, POE-Component-Player-Xmms, POE-Component-Proxy-MSN, POE-Component-Server-FTP, POE-Component-Telephony-CTPort, POE-Component-XUL, POE-TIKC, WWW-GMail, WWW-Hotmail
4     Gene Boggs (GENE)   (14) Acme-Opish, Date-Baha-i, File-Backup, Games-Battleship, Games-Chess-Coverage, GD-Graph-radar, Graph-Weighted, GraphViz-Traverse, Lingua-TokenParse, Math-Counting, SETI-Drake, SQL-OrderBy, Statistics-RankCorrelation, URI-Collection
5     Arthur Bergman (ABERGMAN)   (12) Acme-Goto-Line, Alien, Attribute-Handlers, File-Find-Random, Hook-Scope, Net-LibNIDS, optimize, optimizer, RT-Authen-OpenID, SVL, Time-Duration-sv, types
5=     Brad Fitzpatrick (BRADFITZ)   (12) Brackup, Cache-Memcached, Danga-Socket, Data-SingletonManager, LWPx-ParanoidAgent, Net-LiveJournal, Net-OpenID-Consumer, Net-OpenID-Server, Perlbal, Perlbal-XS-HTTPHeaders, Sys-Syscall, Unicode-CheckUTF8
7     Nicholas Gerakines (SOCK)   (11) Audio-AMR-Decode, Config-Builder, Net-FeedBurner, WWW-Bookmarks, WWW-CloudCreator, WWW-NameGen, WWW-Search-Bookmarks, WWW-Search-Feedster, WWW-Search-ISBNDB, WWW-Search-UrbanDictionary, WWW-Yahoo-KeywordExtractor
8     Satoshi Tanimoto (TANIMOTO)   (7) Apache-AddReqHeader, Apache-DoCoMoUID, Mail-Address-MobileJp, Template-Plugin-KwikiFormat, Template-Plugin-String-Compare, Template-Plugin-TagRescue, Template-Plugin-TruncateJp
9     Jonathan Steinert (HACHI)   (4) Crypt-Salt, POE-Component-Client-LDAP, POE-Wheel-Null, Tie-Handle-HTTP
10    Paul Lindner (LINDNER)   (3) Apache-CacheContent, Apache-TaintRequest, HTML-Clean
11    Byrne Reese (BYRNE)   (2) SOAP-Lite, SOAP-MIME
11=    Masayoshi Sekimura (SEKIMURA)   (2) LWP-UserAgent-WithCache, Template-Provider-Encode
13    Brad Choate (BCHOATE)   (1) Text-Textile
13=    Garth Winter Webb (GARTH)   (1) SWF-Chart
13=    Mark Paschal (MARKPASC)   (1) XML-Atom-Filter
13=    Yann Kerhervé (YANNK)   (1) Catalyst-Plugin-MortalForward
 
Six Apart contributed :

214 of 10791 packages (1.98%) on CPAN
and constitute 17 of all 2919 authors (0.58%).

You can find the script on london.pm.org

Posted by miyagawa at 01:28 AM | Comments (0) | TrackBack (0)