メイン

2008年12月24日

Skypeで絵文字のメリークリスマス

中国の女性の方からSkypeで絵文字のメッセージをいただきました。

Merry Christmas!

突然のことでびっくりしました。

ちなみに、種明かしですが、以下の文字列をSkypeで入力すると・・・

(clap)(pi)(clap)(clap)(inlove)(envy)(envy)(inlove)(clap)(clap)(pi)(clap)
(pi)(clap)(pi)(inlove)(envy)(envy)(envy)(envy)(inlove)(pi)(clap)(pi)
(clap)(h)(inlove)(envy)(envy)(*)(envy)(envy)(envy)(inlove)(h)(clap)
(h)(inlove)(envy)(envy)(envy)(envy)(envy)(envy)(*)(envy)(inlove)(h)
(inlove)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(inlove)
(h)(u)(h)(u)(h)(envy)(envy)(h)(u)(h)(u)(h)
(u)(h)(u)(h)(envy)(envy)(envy)(envy)(h)(u)(h)(u)
(h)(u)(h)(envy)(*)(envy)(envy)(*)(envy)(h)(u)(h)
(u)(h)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(u)(h)
(h)(envy)(envy)(*)(envy)(envy)(*)(envy)(envy)(*)(envy)(h)
(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)
(h)(u)(h)(u)(h)(envy)(envy)(h)(u)(h)(u)(h)
(u)(h)(u)(h)(envy)(envy)(*)(envy)(h)(u)(h)(u)
(h)(u)(h)(envy)(envy)(envy)(envy)(envy)(envy)(h)(u)(h)
(u)(h)(envy)(envy)(*)(envy)(envy)(envy)(envy)(envy)(u)(h)
(h)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(*)(envy)(envy)(h)
(envy)(envy)(*)(envy)(envy)(*)(envy)(envy)(envy)(envy)(envy)(envy)
(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(envy)(*)(envy)
(envy)(envy)(envy)(envy)(hug)(hug)(hug)(hug)(envy)(envy)(envy)(envy)
(dance)(skype)(skype)(skype)(hug)(hug)(hug)(hug)(skype)(skype)(skype)(dance)
(skype)(dance)(skype)(skype)(hug)(hug)(hug)(hug)(skype)(skype)(dance)(skype)
(skype)(skype)(dance)(skype)(hug)(hug)(hug)(hug)(skype)(dance)(skype)(skype)
(skype)(skype)(skype)(dance)(hug)(hug)(hug)(hug)(dance)(skype)(skype)(skype)
(F)(F)(F)(F)(hug)(hug)(hug)(hug)(F)(F)(F)(F)

2007年09月05日

ついカッとなってGopherサーバを立ててみた

gopherは非常に簡単なプロトコルのため、 telnetでGopherサーバにアクセスする方法 もお手軽です。HTTPと比べて、バイク小屋の議論となるようなサーバシグネチャもありません。

そういうのの相手するくらいならhttpdはぜんぶ捨ててgopherに戻りたい…。
(gopher対ゲイツ様 : ひろ式めもちょう)

今日はなぜか空前のGopherブームでしたので、「昔のgopher時代に戻ったらどうなるのか」を真剣に考えるため、実際にGopherサーバを立ててみました。

gopher://wafful.org/

gopher://wafful.org/ (※ Firefoxやlynxでアクセスできます)

どう見ても時代に逆行していますが、 私達が今JavaScriptを弄っているのも10年前の技術の再発見に他なりません。 もしかしたらそこに新しい未来が開けている可能性があるのかもしれません。

追記:Web2.0時代のGopher新サービス

GopherSnake

Gopher専用ソーシャルブックマークサイト「GopherSnake」が早速ローンチしてました。tokuhiromさん、相変わらず仕事が速すぎです。


■ GoFish - Gopher/Web Server

2005-10-21 に最新版 1.1 がリリースされている GoFish Gopher Serverを使ってみることにしました。他のGopherサーバソフトウェアは既に配布を終了していたり、10年に更新を停止してたりするので、非常に危険です。でも、GoFishなら./configureもついてます。今でも十分通用しそうです。 sourceforge.netから最新のgofish-1.1.tar.gzをダウンロードできます

CentOS 4.xでビルドしたソースRPM

自分が今メインで使っているサーバがCentOSなLinuxのため、RPMパッケージが欲しかったのでした。 rpmfind.netでgofishを検索すると0.29のバージョンまでしかでてきません。 1.0以降のspecファイルがメンテナンスされていないようでしたので、 最新の gopher-1.1 に対応したRPMパッケージを作成しました。

gopher経由で配布していますので、gopher対応クライアントより入手してください。

残念ながらrpmコマンドやwgetコマンドはgopherプロトコルをサポートしていませんが、lwpのGETコマンドやlynxはgopherに対応しています。 w3mはgopherに対応していません。 追記: w3mは./configure時に --enable-gopher を付けてコンパイルすれば gopher 対応になるとのことでした。(ukaiさん、yshlさん、ご指摘ありがとうございました。)

gofishサービスの再起動

$ service gofish stop
$ service gofish start

インストール時の注意事項などのBKは、すべてgofish.specファイルに記述しております。

■ gofish.spec ファイル(抜粋)

Summary: GoFish Gopher Server
Name: gofish
Version: 1.1
Release: 1
License: GPL
Group: Networking/Daemons
Source: %{name}-%{version}.tar.gz
URL: http://gofish.sourceforge.net/
BuildRoot: %{_tmppath}/%{name}-%{version}-root
AutoReqProv: no
Conflicts: gopher, gopherd

%description
GoFish is a simple gopher / web server. It is designed with security
and low resource usage in mind. GoFish uses a single process that
handles all the connections. This provides low resource usage, good
latency (no context switches), and good scalability.

GoFish runs in a chroot(2) environment. This means that GoFish can
only serve files from the root directory or below. While GoFish must
run at root privilege to be able to use port 70, it drops to a normal
user while accessing files.

%prep

%setup -n %{name}
%configure

%build
%{__make}

%install
%{__rm} -rf $RPM_BUILD_ROOT
perl -p -i.bak -e 's{(daemon /usr/sbin/gofish).*$}{mkcache -r -c /etc/gofish.conf && $1 -d -c /etc/gofish.conf};' init-gofish
perl -p -i.bak -e 's{^;(root|logfile|pidfile|port)}{$1};s{gopherd\.}{gofish.};' gofish.conf
%{__make} DESTDIR=$RPM_BUILD_ROOT install
%{__mkdir} -m 0755 -p $RPM_BUILD_ROOT/etc/rc.d/init.d
%{__install} -m 0755 init-gofish $RPM_BUILD_ROOT/etc/rc.d/init.d/gofish
%{__mkdir} -m 0755 -p $RPM_BUILD_ROOT/etc/logrotate.d
%{__cat} <<EOF> $RPM_BUILD_ROOT/etc/logrotate.d/gofish
/var/log/gofish.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}
EOF
%{__rm} -f $RPM_BUILD_ROOT/etc/gofish-www.conf
%{__rm} -f $RPM_BUILD_ROOT/usr/bin/check-files

%clean
%{__rm} -rf $RPM_BUILD_ROOT

%post
if [ "$1" = 1 ] ; then
    %{__chown} gopher /var/gopher
    /sbin/chkconfig --add gofish
    /sbin/service gofish start 2>&1 >/dev/null
fi

%preun
if [ "$1" = 0 ] ; then
    /sbin/service gofish stop 2>&1 >/dev/null
    /sbin/chkconfig --del gofish
    /sbin/chkconfig --del gofish
fi

%files
%defattr(-,root,root)
%doc COPYING README INSTALL NEWS AUTHORS ChangeLog
/usr/sbin/gofish
/usr/bin/mkcache
/etc/rc.d/init.d/gofish
/etc/logrotate.d/gofish
%{_mandir}/man1/*
%{_mandir}/man5/*
/var/gopher/icons/*
/var/gopher/.gopher+
/var/gopher/.cache
/var/gopher/Configure_GoFish
%config(noreplace) /etc/gofish.conf

どうぞご利用ください。

2007年05月01日

Multi-USB::MissileLauncher for Win32

YAPC::Asia 2007 Tokyo で大人気だった USB::MissileLauncher をマルチに制御するパッチを作りましたので公開します。

Multi-USB::MissileLauncher for Win32 binary package
http://namazu.org/~takesako/pub/usblauncher-20070501.zip

Triple USB Missile Launcher

■ ctlmissileコマンド使用法

Usage: ctlmissile [ up | down | left | right | fire | stop ] [ 3000]

オリジナルからの変更点

http://www.earth.li/~noodles/files/usblauncher-0.0.3.tar.gz からの変更点

* ctlmissile.c.patch

  1. コンパイルオプション -DLINUX -DWIN32 の追加
    (Linux以外のWindows、Mac OS X の環境でも動作するように)
  2. msec秒でコマンドを発行するコマンドライン引数 [ 3000 ] を追加
  3. 複数のUSBミサイルランチャーの接続に対応
    同時制御と逐次制御が可能

■ インストール方法

Windows の場合

事前にLibUsb-Win32からダウンロードできるlibusb-win32-filter-bin-0.1.12.1.exeをインストール

$ gcc -DWIN32 ctlmissile.c -o ctlmissile -lusb

Linux の場合

ディストリビューション付属のlibusbパッケージをインストール

$ gcc -DLINUX ctlmissile.c -o ctlmissile -lusb

Mac OS X の場合

libusbをインストール

$ gcc ctlmissile.c -o ctlmissile -lusb

■ 応用

POE::Component::Server::TCPを使って、USBミサイルランチャーを制御するTCPデーモンを1時間で書く。

missile_server.pl

#!/usr/bin/perl
use POE qw(Component::Server::TCP);
use strict;

sub main {
  my $bind_port = $ARGV[0] || 6969;

  my $kernel = POE::Component::Server::TCP->new(
    Port     => $bind_port,
    Error    => \&error_handler,
    Concurrency => -1,

    ClientInput        => \&handle_client_input,
    ClientConnected    => \&handle_client_connect,
    ClientDisconnected => \&handle_client_disconnect,
    ClientError        => \&handle_client_error,
    ClientFlushed      => \&handle_client_flush,
    ClientShutdownOnError => 0,
  );

  POE::Kernel->run();
}

sub accept_handler {
  my ($socket, $remote_address, $remote_port) = @_[ARG0, ARG1, ARG2];
}

sub error_handler {
  my ($syscall_name, $error_number, $error_string) = @_[ARG0, ARG1, ARG2];
}

sub exe {
  my ($cmd) = @_;
  $cmd =~ s/[^\s\d\w]//g;
  system split(/\s+/, $cmd);
}

sub handle_client_input {
  my $heap = $_[HEAP];
  my $kernel = $_[KERNEL];
  my $input_record = $_[ARG0];
  my $msg = "yes sir, $input_record";
  if ($input_record =~ m/(shutdown|quit)/i) {
    $kernel->yield("shutdown");
    $msg = "connection closed...";
  } elsif ($input_record =~ m/help/i) {
    $msg = "Ugage: [ up | down | left | right | fire | stop ] [ 3000 ]";
  } elsif ($input_record =~ m/^\s*$/ims) {
    $msg = "help";
  } else {
    exe("ctlmissile $input_record");
  }
  $heap->{client}->put($msg);
}

sub handle_client_error {
  my ($syscall_name, $error_number, $error_string) = @_[ARG0, ARG1, ARG2];
}

sub handle_client_connect {
  my $heap = $_[HEAP];
  $heap->{client}->put("connected on USB-Missile-Launcher 200 OK");
}

sub handle_client_disconnect {}

sub handle_client_flush {}

main();

1;

POEのプログラミングは初めてでしたが、perldoc POE::Component::Server::TCP 見ながら簡単に書けました。

■参考URL

YappoLogs: ミサイルは国境を越える 
http://blog.yappo.jp/yappo/archives/000504.html

Google Maps: ミサイルが本当に国境を越えてる???
http://maps.google.com/maps?q=38.22657,-112.299&z=18&t=k

Tilting Google Maps and MissileLauncher - SlideShare (miyagawa-san at osdc.tw)
http://www.slideshare.net/miyagawa/tilting-google-maps-and-missilelauncher/

throw new CybozuLabsException() - libusbを使うPHP Extensionを作りました
http://labs.cybozu.co.jp/blog/tsuruoka/anubis/blog_show/43

TokuLog 改め Perl を極めて結婚するブログ - missile on ruby. 
http://d.hatena.ne.jp/tokuhirom/20070407/1175935832

西尾泰和のブログ @ Cybozu Labs: PythonワンライナーでUSBミサイルランチャーを制御 
http://labs.cybozu.co.jp/blog/nishio/2007/04/pythonusb.html

*BSDでのUSBデバイスドライバーの実装
http://www.ofug.net/~yamajun/presentation/2003/usb.html

ToDo

ctlmissile.cで複数のミサイルランチャーを制御する拡張コマンドを追加したので (ひ)メモ - Assurer::Plugin::Notify::Missileの概要設計の実装が待たれるところです。

2007年04月01日

日本“[”の会が発足・活動を開始しました

本日、日本[の会設立準備会 (事務局: 岡山県岡山市、代表: 中地史歩) は、 任意団体日本[の会 (英文名称: Japan [ Association,略称: J[A) を 設立し、活動を開始しました。

日本[の会 - Japan [ Association
[は古くからUNIX系OSに存在し,システム起動に欠かすことができないコマンドです。 このようにいわばIT社会を支える根幹のような立場にありながら,多くのユーザにその存在を忘れ去られているのが[の現状です。

zophosさんの紹介で、私も会の設立に関与させていただくことになりました。
しかし、イマドキ[やλだって言ってもモテるわけありません。これからはπの時代です。

今後ともよろしくお願いいたします。

[ for Win32(πは地球を救うバージョン)開発者 TAKESAKO