Tsukuba.R#7 で RWebUI について話してきました

Tsukuba.R#7 - Tsukuba.R - livedoor Wiki(ウィキ)
Tsukuba.Rはつくば周辺(半径40万キロくらい)をターゲットとしたGNU RおよびR言語の勉強会です。

レポート:「Tsukuba.R#7」活動報告|gihyo.jp ... 技術評論社
Tsukuba.Rは,奇数回を都内,偶数回をつくばで行うのが慣例となっており,第7回の今回は東京大学理学部での開催となりました。

5/9 (日) に、統計分析環境 R ユーザーのための勉強会、Tsukuba.R#7 のLT (Lightening Talks) で発表してきました。内容は、Webブラウザからサーバ上の R を実行するインターフェース (というか Web アプリ) の、RWebUI を紹介しました。

今回は、技術評論社様の協力で高品質な Ustream 中継が行われました。ありがとうございます。


Tsukuba.R#7 Vol.8, Tsukuba.R#7 Vol.8 gihyojp on USTREAM. Conference
・発表資料 (PDF) : Presentation (Tsukuba.R#7 @ Tokyo, 2010.05.09)

RWebUI は、以下のような機能があり非常に便利で有用なアプリケーションです。
・プロジェクト管理機能、複数人での作業支援
・ソース+へルプ+実行結果の同時表示
・R 専門検索エンジン、seekR との連携
・強力な編集機能
・サーバの状況をリアルタイムで表示
・iPhone, iPad 対応
・計算終了時に Twitter やメールでお知らせ
・日本語・英語をはじめ幅広くの言語に対応

RWebUI はまだ全く実装していないのですが、会場や Twitter、懇親会などで予想していた以上に反応が大きくて驚きました。ちなみに、まだ未完成のソフトをあたかも完成しているかのようにハメコミ画面の機能紹介で釣っておいて、「みなさんで頑張って開発しましょう」と締めくくる一連のプレゼン手法は、Firefox Developer's Conference 2009 での yumilcy 氏の LT のパクリです。

開発に協力して頂ける方は、ぜひ私まで、メールか Twitter か Skype で連絡ください。アドバイスや新機能の提案、バグレポートなども歓迎ですので、よろしくお願いします。

<関連リンク>

Tsukuba.R#7 - Tsukuba.R - livedoor Wiki(ウィキ)
tsukuba-r7 on USTREAM: Tsukuba.R#7
RWebUI
RWebUI official (RWebUI) on Twitter
RWebUI | Get RWebUI at SourceForge.net

発起人の @syou6162 先生, 運営の @wakuteka さん, @yag_ays さん, @y_benjo さん, @mickey24 さん、ありがとうございました。また、発表者の皆さん、会場にお越しくださった皆様、Ustream 経由でご覧になった皆様、お疲れ様でした。

Tsukuba.R #5 で LT してきた

Tsukuba.R #5 @DBCLS ライフサイエンス統合データベースセンター
つくば周辺のR userのためのコミュニティ

R に最初から入っているのサンプルの便利な探し方、アニメーションを使ったグラフ理論 (Kruskal 法) の発表など、大変勉強になりました。

#4 に続いて、#5 では Lightening Talks で話してきました。
R 使いは Mac 信者が多いそうだけど、Windows ユーザも積極的に使おう、というネタ的な発表でした。

発表途中、Firefox で拡大縮小を繰り返していたら、最初のスライドに戻ってしまって流れを乱してすみませんでした><

下記、資料へリンク
Windows ユーザも賢くRを使おう
発表資料はこちら。

TeraPad で R を実行する - CMOSにっき
TeraPad の設定の仕方

秀R
秀丸マクロの設定の仕方

リンク
Tsukuba.R#5お疲れ様でした - 聖糞
Tsukuba.R#5の発表資料 - Seeking for my unique color.
Tsukuba.R#5! - ぬいぐるみライフ(仮)

Tsukuba.R #4 で話してきました

Tsukuba.R #4
Tsukuba.Rはつくば周辺(半径40万キロくらい)をターゲットとしたGNU RおよびR言語の勉強会です。

R の勉強会というわけで、Rを使った項目応答理論、別名:「やる夫で学ぶ項目応答理論」について話してきました。意外にも参加者の全員が、項目応答理論を初めて耳にした、といった人ばかりだったので、もう少し配慮した発表にすれば良かったですね。

壇上?では、ノート PC の無線 LAN の電波が悪くて IRC のログが取れなかったので、IRC からの反響がいまいちわからなかったのが残念。しかし、項目応答理論に興味を持ってくれた方が増えたことは良いことです。

プレゼン資料は、下記からどうぞ。(コードの部分は削除してあります)
http://thira.plavox.info/docs/tsukuba.r/
内容にあやしい点などがあったら教えてください><

参考
Rで項目反応理論 (RjpWiki)
kosugitti 先生が書かれたそう。R の潜在特性モデル (ltm) パッケージを使ったパラメータ推定などについてはここ。念のためだけど、項目応答理論=項目反応理論 ですので。

項目応答理論 - Wikipedia, Item response theory - Wikipedia, the free encyclopedia
基本的なことはここと同じ。

SSI - Scientific Software International, Inc.
BILOG について。パラメータの推定には、みんな BILOG 使うよ、みたいな言い方するのは誤解を招くから良くなかったかも。

Tsukuba.R#4の感想とコミュニティ活動のありかたについて - Seeking for my unique color.
「発表したい内容 かつ 聞きたい内容」っていうのが理想ですね。R だと、R 自体の用途からか、JS や Ruby 系の勉強会・カンファレンスなどと比較して、ついつい学問的な内容になりがち、だと資料を作りながら思いました。

PostgreSQL で大文字を含む列名や表名を扱う SQL

某管理システムで使っているデータベースのメンテナンス作業中だけど、一般的に PostgreSQL では半角英数の小文字やアンダースコアのみで列や表の名前を付ける。
MySQL か何かから移行のときにそれを忘れてて、大文字が混じったままの列名がたくさんあって、UPDATE できなくて焦ったのでメモ。

そういうときは、列名や表名にダブルクォーテーション (") をつけておけばよい。
一方、イコールの右辺 (値) には、シングルクオーテーション (') を付ける。

具体的には、以下のようにすればよい。

SELECT * FROM user order BY "idNo";
SELECT * FROM item where "itemId">=2000 ORDER BY "itemNo";
INSERT INTO subjects VALUES (5,'タイトル'));
UPDATE subjects SET "subName"='件名' WHERE "subNo"=5;

PHP だとこんな感じ。

$query = "SELECT * FROM user order BY \"idNo\";";
$query = "SELECT * FROM item where \"itemId\">=2000 ORDER BY \"itemNo\";";
$query = "INSERT INTO subjects VALUES (5,'タイトル'));";
$query = "UPDATE subjects SET \"subName\"='件名' WHERE \"subNo\"=5;";

よく考えたら 3 番目のはあまり関係ないな。

学生ケータイあわ~ど 2008 のページに「tabWallPaper」が掲載されました

学生ケータイあわ~ど2008
広島大学で表彰式 | BlueSky Lab.

昨年、i アプリを作ってプレイステーション 3 を頂いた、大変おいしい企画 「学生ケータイあわ~ど 2008」が約束通り今年も開催されるようだ。
それで、「学生ケータイあわ~ど 2008」のサイトに昨年度の受賞作品として、私が作った「tabWallpaper」が掲載されている。(学生ケータイあわ~ど2008 ―サンプル―)

この企画がなぜ「おいしい」かというと、
・参加条件が「中国地方の大学・小中高・高専・専門学校の学生」
これだけでもかなり限定される上に、(昨年の場合) 始まったばかりで認知度が低く応募者が少ない。
大学院生はダメっぽいけど、去年の表彰式では大学院生が普通に受賞してた。

・副賞がやたらとよい
今年も「パソコン」、「プレイステーション 3」、「iPod」など、総額で 50 万円弱はあるのではないかと思う。

・アイデアだけでも応募可能
コードを書けなくても、もちろん OK。そう簡単に実現できないようなアイデアでも、もちろん OK というかむしろ歓迎な雰囲気。(昨年の場合)

・表彰式で他大学・高専と交流
これをきっかけにしてネットワーク (?) を広げることができるかも。
去年の私の場合、プレゼンの用意を全くしていなかったせいで最悪だったけど。

9 月 30 日まで応募を受け付けているみたい。今から i アプリの作り方覚えても全然間に合う。
ちなみに、ドコモの HP「あわ~ど」のサンプルが大変参考になった。

おいしい企画なので、ぜひ。

行列式の値の求め方、逆行列の作り方の C 言語プログラム

本業だけじゃ生活できないので、ときどき他学科のプログラミング演習の課題を受託開発をすることで、見返りに唐揚げ定食とかうまかっちゃんとかよくおごってもらっている。

なぜかこの時期に「行列式の値」と「逆行列」を作成するプログラムを毎年書いている気がして、その都度作るのが非常に面倒臭いので、今後も困らないようにアップしておく。

行列式の値の求め方

・2 次の場合
たすきがけで簡単に解ける。

double a[2][2]={{1,2},{4,-1}};
double det=0.0;
det=a[0][0]*a[1][1]; det-=a[0][1]*a[1][0]; printf("%f\n",det); // -> -9.000000


・3 次の場合
サラスの方法で簡単に解ける。

double a[3][3]={{1,8,9},{-3,2,1},{4,1,5}};
double det=0.0;
det=a[0][0]*a[1][1]*a[2][2]; det+=a[1][0]*a[2][1]*a[0][2]; det+=a[2][0]*a[0][1]*a[1][2]; det-=a[2][0]*a[1][1]*a[0][2]; det-=a[1][0]*a[0][1]*a[2][2]; det-=a[0][0]*a[2][1]*a[1][2]; printf("%f\n",det); // -> 62.000000


・4 次以上の場合
通常の計算では 3×3 以下の余因子行列を作成して、符号を掛けた上で足し合わせるやり方を使うと思う。
これをプログラムで実装するには、再帰または多段ループが必要になり計算量も多い。
特に 5 次以降になると面倒。

でも、上三角行列を作って、対角部分 (左上から右下) を掛け合わせれば、簡単に行列式の値を求めることができる。
このやり方だと非常に簡単。

double a[4][4]={{2,-2,4,2},{2,-1,6,3},{3,-2,12,12},{-1,3,-4,4}};
double det=1.0,buf;
int n=4;  //配列の次数
int i,j,k;
//三角行列を作成 for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i<j){ buf=a[j][i]/a[i][i]; for(k=0;k<n;k++){ a[j][k]-=a[i][k]*buf; } } } } //対角部分の積 for(i=0;i<n;i++){ det*=a[i][i]; }
printf("%f\n",det); // -> 120.000000


逆行列の求め方

何といってもやはり掃き出し法が簡単。
2 次から n 次まで対応。

double a[4][4]={{1,2,0,-1},{-1,1,2,0},{2,0,1,1},{1,-2,-1,1}}; //入力用の配列
double inv_a[4][4]; //ここに逆行列が入る
double buf; //一時的なデータを蓄える
int i,j,k; //カウンタ
int n=4;  //配列の次数
//単位行列を作る for(i=0;i<n;i++){ for(j=0;j<n;j++){ inv_a[i][j]=(i==j)?1.0:0.0; } } //掃き出し法 for(i=0;i<n;i++){ buf=1/a[i][i]; for(j=0;j<n;j++){ a[i][j]*=buf; inv_a[i][j]*=buf; } for(j=0;j<n;j++){ if(i!=j){ buf=a[j][i]; for(k=0;k<n;k++){ a[j][k]-=a[i][k]*buf; inv_a[j][k]-=inv_a[i][k]*buf; } } } } //逆行列を出力 for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf(" %f",inv_a[i][j]); } printf("\n"); }
/* 出力 2.000000 2.000000 -1.000000 3.000000 -4.000000 -5.000000 3.000000 -7.000000 3.000000 4.000000 -2.000000 5.000000 -7.000000 -8.000000 5.000000 -11.000000 */

プログラムは Microsoft Visual Studio 2008 および Fedora 9 の gcc で実行確認済み。
手元に Linux のマシンがなかったので、稼働中の Web サーバを使って動作確認した。

Microsoft DreamSpark を早速試してみた

Visual Studio Professional 版などをタダで使えるらしいので国際学生証を申請した | BlueSky Lab.

国際学生証が届いたので、さっそく Microsoft DreamSpark を試してみた。
国際学生証は、樹脂製のカードに名前や生年月日がプリントされ、写真は提出したものをそのまま貼り付け、専用のシールで封印されたものだった。
写真は、デジカメで撮影したものを加工してインクジェットプリンタで光沢紙に印刷したものだったので、光や水に弱そう。

DreamSpark のサイトは全て英語。
Windows Live のアカウントでログインしたあと、ISIC 番号を書かされるので、国際学生証の右下の S で始まる番号をスペース抜きで書く。最後の文字は書かなくてよいらしい。

選択した EULA (License Agreement) の言語によってダウンロードされるソフトウェアの言語が変わるみたい。
Visual Studio は DVD 版の ISO イメージとシリアル番号 1 つを与えられる。
Expression Studio は ZIP で与えられるので、解凍して CD-R に焼けばよい。
Windows Server は CD-ROM 版の ISO イメージ 2 枚分とシリアル番号 1 つを与えられる。

シリアルナンバーは決まったものを 1 つしか与えられないので、1 台分しかインストールできないようだ。
ところで、Visual Studio のイメージをマウントしたり、DVD に焼いたものを挿入すると、explorer.exe が「応答なし」になってフリーズする。何度やっても同じ。ISO イメージは 2 度ダウンロードしてみたけど同じ。他の PC でも試してみる。

追記 (2008.05.25)
フリーズの原因は DVD のライティングソフト (Record Now) だった。一時的にプロセスを終了させるか、アンインストールすれば OK。

Visual Studio Professional 版などをタダで使えるらしいので国際学生証を申請した

ソフトウェア開発製品やアプリケーションデザインツールを学生に無償提供、 「Microsoft(R) DreamSpark(TM) (ドリームスパーク)」を5月13日(火)より開始
国際学生証ISICカード>Microsoft Dreamspark

昨日から、マイクロソフトが Visual Studio 2008 Professional 版や、Windows Server 2003、Expression Studio などを学生なら無償で使えるという、太っ腹な企画、「Microsoft DreamSpark」を始めた。(詳しいことは上記サイトを参照)
「Expression Blend 欲しいな~」って思ってた矢先に、なんと Expression Studio も対象だったのでビックリ。

申込に国際学生証が必要なので、大学生協で申請しておいた。
必要な書類は、
・申請書 (大学生協のサイトからダウンロード可能)
・証明写真 (3.3×2.8cm、裏に記名)
・学生証のコピー
・手数料 ¥1,430
吉田キャンパスなら即日発行なんだけど、工学部常盤キャンパスは 2 日かかるそうだ。とはいっても早いと思う。


最近、アップルのパクリなのか知らないけど、学生にやさしい企画が多い気がする。しかし、この MS の場合は大学生だけでなく、高校生や中学生にも無償で提供するべき。むしろ、高校生や中学生、できれば小学生に無償提供するべき。

という理由は、私が小学校 6 年くらいの頃でプログラミングに興味を持ち始めた頃、どうしても Microsoft Visual Basic 6.0 が高額すぎて自力では購入できないし周りに買ってくれる人もいなかったので、Windows アプリケーションのプログラミングをなくなく諦めた思い出がある。

その時、たまたま HTML でホームページを作ってたこともあって Perl に出会った。必要なものがサーバとエディタと FTP ソフトだけで全て無料で揃うので、それ以来ずっと Web 一筋で勉強してきた。
Perl の書籍とか持ってなかったけど、ネットサーフレスキューや KENT WEB のスクリプトがサイトから自由にダウンロードできたので、そのコードを見よう見まねで書いてた。

もしあの頃、DreamSpark のような企画や Express Edition のような無償版があったならば、間違いなく今も Windows アプリケーションばかり生産していただろう。
以上の理由で、Visual Studio を愛用する学生や技術者を増やしたいならば、大学生よりもっと若い世代に提供するべき。


全角と半角の間に入れるスペースの入力規則

このブログではどうしてもマニュアルのような文章を書くことが多いので、少し前から読みやすいように全角と半角の間にスペースを空けるよう心がけている。

でも、全ての全角と半角の間に入れていいのか、疑問に思うときがあって迷ってしまうんだけど、偶然マイクロソフト社のサイト (Microsoft Language - Download Page) で、「日本語スタイルガイド 公開版 (第 1 版)」という素晴らしいファイルを見つけたので、それを参考に紹介する。


1. 原則として全角文字と半角文字 (記号を含む) の間には半角スペースを入れる。
半角で書ける文字は基本的に全て半角を使用する。
"。、「」『』・~" の記号は全角を使用する。それ以外の記号は半角を使用する。

2. 例外としてスペースが不要な場合
・句読点 (、。) と隣接する半角文字の間
・数値と角度の単位記号 (°) の間
・かっこの内側
・スラッシュ (/) と隣接する文字の間
・疑問符 (?) や感嘆符 (!) と、その前の全角文字との間
・アクセス キーを表す文字を囲むかっことその直前の文字の間 [例: 開く(O)]

3. 全角どうしの間でもスペースが必要な場合
・欧文地名以外の複合語をカタカナ表記するとき
・参照先として他の章を本文中で示すとき

以上、大きく 3 点。これだけで技術系の文章はより読みやすくなるだろう。
このマニュアルには、記号の使い方やキーの表記、文体の使い分けなども掲載されていて参考になる。Microsoft GJ!!

Patio-FU の改良版が作られていた!

Patio-FU(改)
この掲示板スクリプトは、KENT-WEB の Web Patio の改造版である Patio-FU を更に改造した改造スクリプトです。

2 年くらい前に、KENT-WEB の WebPatio にアップローダーをくっつけたものはないかな?、と質問があったので「だったら作ってやるよ」と軽い返事で作ってしまったソフトが Patio-FU

本家の WebPatio がファイルのアップロードに対応しちゃったみたいで、更新せずに放置していたら、いつの間にか、改良版が作られていました。
Patio-FU(改) という名前で、サムネイル機能が付いているみたいです。

とりあえず、サイトデザインだけでも更新しておこうかな。

CSS デザインのボックスの無難な色の組み合わせ

スタイルシートを使用した、ボックスの背景と枠線の色の組み合わせ。
全て Yahoo! JAPAN のトップページから拝借した。

background-color: #edf2ff; border-color: #9fb7d4;
background-color: #ffecf7; border-color: #d49fc9;
background-color: #ffeac8; border-color: #ffbc6d;
background-color: #d9f5cd; border-color: #4ec346;
background-color: #f6f6f6; border-color: #b9b9b9;
background-color: #edf4f8; border-color: #c4defa;

「宅配便の配達状況 API / iGoogle ガジェット」を更新しました

宅配便の配達状況 API / 宅配便の配達状況 iGoogle ガジェット

CS MSMS さんのコメントを参考に、日通航空に対応しました。

コメントやソーシャルブックマークは定期的にチェックしておかないと。
はてブでは、「Yahoo pipesで作ると面白いかも」などと有益なアドバイスも頂けるので。

名鉄運輸も追加しようとしたけど、セッションをかましているせいでうまくいかなかった。
同様の理由で、福山通運の新バージョンのページにもジャンプできなかった。

使っているうちに「配達記録郵便」も「郵便書留」で検索可能だということがわかった。
たくさん伝票を扱う人は バーコードリーダー が便利。宅配便の伝票のバーコードは幅が大きめなので、小型の機種は避けておくべき。

宅配便の配達状況 iGoogleガジェットを作ってみた

宅配便の配達状況 Googleガジェット
宅配便の配達状況を確認できるiGoogleのガジェットを探してみたけど、なかったので自作した。
screenshot

以下、思ったこと。


ガジェットを作るのは予想以上に簡単である

Google ガジェット API 開発者向けガイド
上のマニュアルを見ながら、XMLファイルを作るだけ。
作りたいガジェットによっては、JavaScriptを記述する必要があるが、JavaScriptが苦手な人はFlashをEmbedするだけでもガジェットになる。例えば、CO2 CalculatorはFlashで作られているっぽい。


なぜ、宅配便ガジェットがないのか?

→運送業者がAPIを公開していないから。また、仕様がバラバラで、意図的に再使用しにくくしている会社もあり、システム更新のたびに仕様変更しなくちゃならず、手間がかかる。

・素直にGETで飛ばせる
日本郵政・DHL・UPS・FedEx

・POSTしなくちゃいけない
クロネコ・佐川・西濃・福通 (佐川は古い画面ならGETできるみたいなんだけどね)

・例外
日通は"s8fid"という謎のパラメータでトークン(?)を得てからPOSTしないと、配達状況を表示できない。そのため、古いバージョンの画面を見つけてきて無理やり飛ばすことにした。日本郵政と合併したらどうなるんだろう?
クロネコもトークンのようなものがあったが、POSTする時はなくても大丈夫みたいだった。

どの会社も早くAPIを公開して欲しい。例えば、ショッピングサイトの注文確認画面から配達状況を確認できるようになるはず。Amazon.co.jpでは日通の場合表示できるみたいだけど。


伝票番号の仕様がいいかげんな運送業者

動作確認のために適当に入力した伝票番号がなんと「配送済みです」と表示された。びっくり。
UPS「123456789」
西濃「1234567890」

日本郵政は、最後の桁がチェックディジットになっている。
しかし、連番検索で、手持ちのお問い合わせ番号から100通指定すれば、次の伝票、その次の伝票も見放題。そして最後の伝票からまたさらに100件分検索できる!


おねがい

うちじゅうの段ボールや配送伝票の控えを探しましたが、郵便書留、福通、DHL、UPS、FedExの伝票がなかったので、誰か伝票持ってる人はうまくいくか教えてください!

「宅配便の配達状況」をiGoogleに追加

広島大学で表彰式

ノートパソコンが欲しくて「学生ケータイあわ~ど2007」に応募したところ、「技術賞」を頂くことができ、今日はその表彰式ということで広島大学へ行ってきた。広大に行くのは初めて。

表彰式は「電気・情報関連学会中国支部連合大会」という学会で行われる。
午前中は学会で講演を聴講したり、キャンパス内を徘徊したり...。

午後から表彰式。
作品部門からは私1人だったが、アイデア部門のレベルの高さに驚いた。
文系学部の学生によるアイデアで、思わずアプリをコーディングしたくなっちゃうくらい影響されたものもあった。
せっかくの機会だからとダメ元でも「一緒に作らないか?」と声をかけようかな、と思ってみたりするも、あきらめてしまったことは帰ってから後悔している。

その原因として、私の発表は用意が不十分だったため、ほとんどぶっつけ本番で言いたかったことをうまく伝えられずお粗末な発表になってしまったことが挙げられる。結果、緊張と悔やしさによって、思考が低下してしまい、極度のシャイ状態になったのではないかと感じた。

ちなみに、副賞は「プレイステーション3(60GB)」だった。

certificate.jpg

入賞作品と入賞者一覧
入賞作品 - 学生ケータイあわ~ど2007

表彰式の様子
表彰式 - 学生ケータイあわ~ど2007

来年も開催するらしいですよ。
tabWallpaperはそのうち公開します。

Perlの復習

perlbooks.jpg

時間が空いたので、Perlでシステムを作ってみることにした。 Perlを使うのは、どうしてもPHPを使えないという理由から。 ここ2~3年ずっとPHPばかり使っていたので、Perlの御点前をすっかり忘れてしまった。

まずは復習。とりあえず保有している以下の4冊を読んでみる。 ・初めてのPerlPerl/CGI職人気質CGI/Perl Handbook 2nd edition (絶版。続編は↓) ・CGI/Perlハンドブック正規表現辞典 (Powered by Amazonリンク作成)

だいぶ思い出してきた。ついでに知らなかったことも習得。 例えば今更、シングルクォーテーションとダブルクォーテーションの違いを知る。メールアドレスだとこんな感じ。

$email1 = "foo@example.com"; # error
$email2 = "foo\@example.com"; # ok
$email3 = 'foo@example.com'; # ok

早速ながら、インクルードファイルの最後に 1; をつけるのを忘れて3時間もsyntax errorに悩まされる。

何を作っているかはまだ内緒だけど、そのうち公開できそう。 しばらくは慣れないPerlと格闘だ。