2011年5月30日月曜日

まだあったコワイExcel!?

先日、「本当にあったコワイExcel」というエントリーが大きな反響をいただいた。

Twitterでこれについてやりとりしている中で、あらたな「コワイExcel」を発掘したのでご紹介しておこう。

■Excelフォトビューワー


元請けSIerから、あるとき障害発生につき、調査願いたし、という旨のメールが届く。

そこであなたは、画面のスクリーンショットやログなどを要求する。

しばらくして、xxx.logというファイルとともに送られてきたxxx.xlsという謎のファイル。

ん? スクリーンショットを要求したのになぜxlsなのか……。


これが、Excelフォトビューワーなのだ!!

※画面はあくまでイメージです。

どうしてjpegなりgifなりをそのまま送ってこないのか……。

なぜ、いちいちExcelに貼り付ける必要があるのか……。

Wordではだめなのか……。

っていうかPaintがあるやないか……。


信じるか信じないかは、あなた次第だ……。



※コワイExcel募集中!!
あなたが見たコワイExcelを募集します!!!
これぞ、というコワイExcelをお見かけになった場合は、TwitterID:@daiksyまでお願いします!!

2011年5月29日日曜日

本当にあったコワイExcel

我々SEという職種は、システム開発の現場で実に様々なドキュメントを作らされる。

Wordだったり、Excelだったり、西暦2000年代という時代において富士通のOASYSで設計書を書かされたこともある。

そんな中、もっとも奇っ怪なのは、やはりExcelで記述されたドキュメントであろう。

本来、表計算ソフトであるはずのExcelが、現場でどのような使われ方をされているのか。筆者の経験した、奇妙なExcelドキュメントのいくつかをご紹介したいと思う。

■Excel方眼紙

いわずとしれた、SI業界の伝統的手法。Excel方眼紙である。

いまやマイクロソフトの公式Tipsにも登場し、Mac版Excelでは標準のテンプレートとしても採用されているトンデモExcel界の巨人。筆者も毎日現場でこれと格闘している。

Excel方眼紙はその応用力の広さが半端ではない。

例示した図のように、クラス図はもちろんのこと、ER図、DFD、ユースケース図など、あらゆる図表を記述することができる。
ここに、「セル結合」というテクニックが加わることで、カオスさはさらに増幅され、エントロピーの増大はもはや誰にも止められなくなる。

筆者は以前、Excel方眼紙でシーケンス図を書かされる、という恐怖のドキュメント規約を目の当たりにし、設計工程の工数見積もりに苦心した記憶がある。
あの案件は、失注してくれて本当に良かったと心の底から思っている。

■Excel原稿用紙

なぜ、Wordの原稿用紙テンプレートを使わないのか?

これを編みだした人物は、おそらくデスマーチに追われ、まっとうな精神状態ではなかったのではなかろうか。

1セルにつき1文字、という常軌を逸したドキュメント。もはやコンピュータを使う意味すら放棄している。

このような記述は現実に存在するはずがない、と読者もお思いだろう。だが、このような例は現実の開発現場で存在する。

具体的な例としては下記のようなパターン。


そう! ホスト帳票の設計書なのだ!! 「プルーフファイル」などと呼ばれることもある。

COBOLerたちは上記の設計書を見ながら、

05  PRINT-RECORD  PIC X(42).
   10 KAISYA-CODE   PIC X(5).
   10 FILLER PIC X(2) .
   10 KAISYA_NAME  PIC X(11).

などとPICTURE句を記述するのである。

だからといってなんで1セル=1文字である必要があるのか……。
設計書にPICTURE句の定義をそのまま書けば良いではないか……。

この問いを考え始めると、宇宙の深淵を考えるのと同じくらい、眠れなくなるので、考えぬほうがよかろう。

■Excel画用紙

先日Twitterでつぶやき、歴代記録に迫る勢いのRT数を記録した問題作。

それがExcel画用紙である。


1ページ = 1セルという驚異の構成。セルにカーソルをあてると、Excel上部にある式を記述するフィールドがとんでもない事になるという、意味不明さである。

このフォーマットに関して、筆者の言いたいことは一言だけである。

……バカなんじゃないだろうか。

■Excelあqwせdrftgyふじこl


このExcelだけは、なんと命名すればいいのかもわからない。

もはや人知が及ぶ領域を超越している。

他の惑星からきた超文明を保有する宇宙人が書き残した、オーパーツなのではなかろうか。

このシートの謎が解き明かされるとき、人類は滅んでしまうのではなかろうか。

それが、これである!


セルの幅が画面に収まっていない!?

スクロールバーを横にずらすと、その隣のセルが画面の左端に位置するので、このセルの右端は永遠に見ることができないのである。

いったい、先人はどのような理由でこのようなものを残したのか?

なにかの暗号であろうか?

どなたか、このセルに名前をつけて謎を解いてはくれまいか。


世の中には、人間の認識では把握しきれない、様々な謎があるものである。

願わくば、あなたのドキュメント人生が、このような奇っ怪なものに邪魔されることなく、豊かなものであらんことを……。

■追記
最後のExcel。Twitterで「Excel京都銀行」と命名していただきました。
元ネタはこちら→http://www.youtube.com/watch?v=B4-gFE-liXE&NR=1
@backpaper0 さん、ありがとうございます!!

2011年5月22日日曜日

祝! Twitterデビュー1周年!!

Twitterデビューして1周年がたちました。

それを記念(?)して僕のTweetをここでひたすらダダ漏れします。

2011年5月17日火曜日

モクモク朝活してみました。

今朝、こんな事やってみました。

第1回 業務前モクモク会
http://atnd.org/events/15851

そもそもの経緯は、さいきんサボりがちだった朝活を復活させたいと
思い、たまたま @s_kozake さんが朝に勉強しようかな、と仰ってたので、
だったら出勤前に会社の近くで集まって勉強するとかいうイベントにしちゃえば
起きられるんじゃないか、と思い企画しました。

どうせやるなら、他にも興味を持つ人がいるかもしれないと思い、上記のATNDを
立てたところ、なんと総勢5名という予想外の結果になりました。
参加してくださった皆さん、本当にありがとうございました。

もともと2人で勉強しようという企画でしたが、皆さんと時間を共有できて楽しかったし、
ATNDで参加を表明してくださるのを見たときは、凄く嬉しかったです。

今回、出勤前に勉強して感じた事は、思ったより勉強がはかどるということでした。

理由はたぶん次のような事なんじゃないかと思います。

・他人の目があるからサボれないので、必然的に集中できる。
・これから出勤ということで適度に気が張ってるので、眠くならない。
・朝なので脳内リソースが整理されており、インプットしやすいステータスになっている。

特に、いつもの夜の勉強では2,3ページ読むと少しウトウトしてしまう技術書が、
まったく眠くならずに1時間連続して読めたのは驚きでした。

参加してくださった皆さんにもおおむね好評のようでしたので、ちょくちょく続けたいと思います。

そこで、さっそく第2回を企画しました。

第2回 業務前モクモク会
http://atnd.org/events/15953

今日の会場が分煙があまりハッキリしておらず、べつの意味でモクモクして少し
辛かったので場所を変更させてもらいました。
喫煙者の方は申し訳ありませんが、わずか1時間なので大目に見てください…。

興味のある方はお気軽にご参加いただけると嬉しいです。

2011年5月11日水曜日

bot_n_vengioの使い方

先日、新宿ロフトプラスワンに見に行ったイベント。『飯野賢治とヨシナガの「気になること。7」』にて、ヨシナガさんが「ブランド力測定」という面白いネタを披露されていた。

そもそも、ものの名前に「ヴ」が入っていたら、なんかカッコイイぞ、という思いつきから始まった試みらしい(例:ヴンコヴォン、ヴェンジョ)。

ヨシナガさんは海外の主要ブランド、及び109に出店しているすべてのブランドの名前を検証し、各文字がどのくらいブランド名に用いられているかを抽出。例えば、「イ」という文字は、今回対象としたブランド名に41回登場するらしい。

これをブランドのポイントとし、合計値を文字数で平均する(平均しないと長い名前が有利になるので)、という方式でものの名前におけるブランド力を測定するというのだ。

ブルガリならば、(ブ:12 + ル:45 + ガ:13 + リ:29) ÷ 4(文字) = 24.75 がブランド力だ!

大変面白い試みなので、これをシステム化したいと思い、このロジックを組み込んだTwitter botを作ってみた。

それがこちら。
bot_n_vengjo
http://twitter.com/#!/bot_n_vengio

このロジックを使ったシステムを何か作ろうと悩んでいたときに、どうしても「ヴンコヴォン」や「ヴェンジョ」というキーワードを使いたかった。そこでいろいろ考えていると、Twitter bot… ん? ボット!? ボット・ン・ヴェンジョ? …!!?

我、天啓を得たり!

というノリでTwitter botに決定し、実装してみた。

実装したあと、ヨシナガさんがイベントで使ってらしたデータが欲しいな、と思い、Twitterでお願いしてみた。


すると…。


ヨシナガさんからDM キタ━━━━(゚∀゚)━━━━ッ!!

と、いうことで見事いただいたデータを反映し、完成!!

使い方は以下のとおり。

まず、@bot_n_vengio宛にMentionする。
(※イインジとは、「イイノケンジ」をよりブランド力が高くなるように操作した名前)


すると3分に一回動くbotがMentionを検知し、ブランド力をつぶやく。


と、いう簡単なもの。

みなさんも是非、お試しくだされ。


ちなみにソースコードはこちらに公開してます。
https://github.com/daiksy/bot_n_vengio/blob/master/DaiksyBotServlet.java

急いで作ったのと、github使うの初めてなもので、データの持ち方がブサイクだったり、文字化けしてたりでかなり恥ずかしい事になっているが、まぁご愛嬌ということで。

ちなみにカタカナしか数値化できません。その他の文字を送っても、すべて0ポイントとして計測されます。
ひらがな対応は面倒くさい忙しくてそこまで手が回らなくて…。

追記:
僕秩でも紹介していただきました。
http://www.dfnt.net/t/photo/column/brand.shtml

2011年5月8日日曜日

僕が置いてきたものがすべてそこにあった〜飯野賢治とヨシナガの「気になること。7」



新宿ロフトプラスワンに行ってきた。

目的はこれ

生の飯野賢治さんに会える!? と思ってはるばる大阪から東京まで行ってきた。

飯野賢治さんは、僕の人格形成に多大な影響を与えてくれた人だと思う。元々はゲームクリエイターで、『Dの食卓』とか、『エネミー・ゼロ』を作った人。

ソニー・コンピュータエンタテインメントのイベントで、『エネミー・ゼロ』のプラットフォームをプレイステーションからセガサターンに移す、という発表をしてしまうというぶっ飛んだ人で、そういう感覚が高校生の僕にとって最高にクールだった。

当時は彼の名前がつくものはすべて目を通した。

雑誌のインタビュー、著作、そしてもちろんゲーム。たぶん、あの頃に世の中に出ていた飯野さん関連の物は、ほとんど押さえていたんじゃないかな。むさぼるように読んだり、遊んだりした。

『エネミー・ゼロ』はゲームをやりながらガチで泣いた唯一のゲームだし、『リアルサウンド〜風のリグレット〜』は細かい部分はもう覚えてないけれど、あのゲームをプレイしていた頃の匂いとか、空気感とか、そういうものは消えずに残っている。

僕が世の中のいろいろなものに対して、格好いいとか、面白いと思うための物差しを形成するうえで、飯野さんの影響は相当受けていると思う。

飯野さんの作品を知らなければ、マイケル・ナイマンの来日コンサートにはたぶん行ってななかっただろうな。

もう一つ、新宿ロフトプラスワンの話。

高校生の頃、「誠のサイキック青年団」という深夜ラジオが大好きで、リスナー向けのイベントなんかにも良く行っていた。
その番組のパーソナリティに竹内義和さんという方がいて、この人のセンスとかも僕の物差しに凄い影響を与えてると思うんだけれど、彼が良く新宿ロフトプラスワンでイベントをやっていたわけよ。
で、そのイベントが面白そうで、ムチャクチャ行きたいんだけれど、当時高校生だった僕がそんなに気軽に東京まで行けるはずもなく、新宿ロフトプラスワンといえば物凄い憧れの場所だった。

で、今回。飯野さんのTwitterでこのイベントの存在を知ったのだけれど、「飯野賢治 + 新宿ロフトプラスワン」ってもう僕にとっては冷静さを保てなくなるほどの組み合わせだったわけだ。なんでこんなイベントを第7回に到るまで知らなかったのかと、後悔するほどに。

だから本当に前の晩は興奮して眠れなかった。

こんなに幸せな空間は、ここ数年でなかったもしれないと思うほどに幸せだった。

新宿ロフトプラスワンの壁には、歴代の出演者のポラロイド写真が貼ってあるのだけれど、休憩時間にそれを見てリアルに泣いたよ。

竹内義和さんとか、中島らもさんとか(らもさんは大阪人にとって特別な人だからね)、僕が好きだった人たちの写真がたくさんあるし、振り返れば檀上に飯野さんがいるし、そしてここは新宿ロフトプラスワンだし…。

青春の頃に、僕が大切にしていたもの、そして少しずつ忘れたり、手放していったものが、あの瞬間、全部そこにあったから。

イベントのレポートを書こうと思ったら、ただのつまらない自分語りになってしまったけれど、このイベントに携わった全ての人達に感謝したいです。

本当に、本当にありがとうございました。

今、このタイミングでこういう経験ができて良かった。

2011年5月5日木曜日

Scalaで書いたコードをdllにしてC#から呼んでみる。

最近、Scalaが楽しくていろいろ勉強しているのだが、そもそもC#erな僕はJavaをよく知らないため、この「Javaを知らない」というのはちょくちょく学習のハードルになったりする。

いろいろScalaについて調べてみたところ、JVMだけでなく、.netでも動くということらしいので、勝手知ったる.net上で勉強したら、やりやすいかもしれないぞ、と思った。

そこで、Scalaで書いたコードをdllにし、C#で呼び出してみる。

前提条件として、JDKとScala2.7.7がすでにインストールされていること。OSはWindows 7。
(Scala2.8.1だと、後述するscala-msilの実行時にエラーになった)

まずは、ScalaのコードをMSILという.net framework 用の中間言語化するための"scala-msil"をインストールする。
これはsbazを使って簡単にインストールできる。

コマンドラインプロンプトを管理者権限で実行し、以下のコマンドを叩けば良い。

>sbaz install scala-msil

これでインストールできているはずだ(2.8.1でもここまでは上手く行った)。

続いて、C#から呼び出されることになるプログラムをScalaで書く。

package CalcUtil {
    class Calc {
        def hoge(num:Int): Int = {
            num * 10
        }
    }
}

ファイル名は「CalcUtil.scala」とした。
検証していないが、パッケージ名とファイル名が大文字小文字含めて一致しないといけない、という記事をどこかで読んだので、注意する必要があるみたい。

さて。このソースをMSILにコンパイルしよう。

>scalac-net CalcUtil.scala

これでOK

ちなみに、scala-msilが入っていれば、

>scalac -target:msil (以下略

でもできるみたい。

これで 「CalcUtil.msil」ができあがったはずである。

あとは、.net Frameworkのilasm.exeでdll化すれば良い。

コマンドは以下のような感じ。

>C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe /DLL CalcUtil.msil

Microsoft (R) .NET Framework IL Assembler. Version 2.0.50727.5420
Copyright (c) Microsoft Corporation. All rights reserved.
Assembling 'CalcUtil.msil' to DLL --> 'CalcUtil.dll'
Source file is ANSI

Assembled method CalcUtil.Calc::.ctor
Assembled method CalcUtil.Calc::hoge
Assembled method CalcUtil.Calc::$tag
Creating PE file

Emitting classes:
Class 1: CalcUtil.Calc

Emitting fields and methods:
Global
Class 1 Methods: 3;

Emitting events and properties:
Global
Class 1
Writing PE file
Operation completed successfully

これで「CalcUtil.dll」が完成!! ヽ(´ー`)ノバンザーイ

さあ、あとはこれをC#から呼び出すだけだ。

VisualStudioを起動し、参照設定でCalcUtil.dllを読み込もう。


で、以下のコードを書く。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CalcUtil;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Calc c = new Calc();
            Console.WriteLine(c.hoge(99).ToString());
        }
    }
}

ここでビルドを実行すると、エラーが出た。


Scalaのオブジェクトを理解できないようだ。

scala-msilのインストールが無事に完了していれば、 %SCALA_HOME%¥libの配下にこれを解決するためのdllが入っているはずである。

predef.dll と scalaruntime.dllである。

これらを参照に追加しよう。


これで問題なくビルドが通るはずだ。

実行すると……。


キタ━━━━(゚∀゚)━━━━ッ!!

これでミッション完了!!

しかし、これだけの手間をかけてnet上でScala動かしてゴリゴリ勉強しようとは思わんなー。

素直にJVM上でInteliJなどのIDEのお世話になりながら勉強しようと思う。

ScalaのソースコードをInteliJで読めるようにしてみる

Scalaの勉強のため、いつでもScalaのコードを読める環境を作ってみた。

先日参加させてもらった『Scala本読書会』で、InteliJがいいよと教わったので、やってみる。

まずはInteliJのインストール。

ここからダウンロードしてInteliJをインストール。

InteliJが起動したら、[File]-[Settings]の[Plugins]を選択

右側にあるTabの[Available]を選択し、選択エリアに「Scala」と入力。

下の表示エリアに出てきた[Scala]を選択し、右クリックでインストール。


続いて、Scalaのソースコードをダウンロードしよう。

ここから scala-2.8.1.final-sources.tgz をダウンロードし、展開。


あとはInteliJで開くだけ。


…でいいのかな?