2009年11月15日日曜日

最強のデバッグツール,その名は,,,

printf

Google App Engineが使えたのをいいことに,ajaxに挑戦したが,見事に玉砕した.
(いやプログラムできたけどね,時間かかり過ぎ)
幾度かJavaScriptは使っているがどうにも使いにくいしデバッグできない.

いや言語使用がどうのという話ではない.単純にデバッグプリントが使えないから,
調子が上がらないだけである.
Safariを使ったがBreak Pointも設定できるし,デバッガは問題ではない.
alert()を使うのが昔の方法だったが,いちいちOK押さないといけないのでメンドクサイ.

ちょっと調べたら,デバッグプリントをする方法があるようだ.
問題はブラウザ毎に違うようだ.orz

http://diaspar.jp/node/92

あと,jQueryを使ったがこいつはすごく楽だ.

組込みエンジニアはもういらない。

最近、Androidが流行のようだ。
Androidはgoogleの組込みOSだ。無料なのが素晴らし。
これから日本でもDoCoMoやSoftbankから新しい機種がでるという話だし、海外を含めれば数十機種発売されるようだ。
日本では、Androidを入たれフォトフレームなるものも発売される。

「これからはAndroid」と言う、バズワードに弱い人たちもいるが、
これからは組込みソフトウェアエンジニアがいらなくなる前兆のように思える。

今までは組込み機器(デジタル家電や携帯電話など)は、それぞれCPUや周辺回路、OSからドライバ全て自前で用意していた。そのため、その上で動作するプログラムは1製品毎に開発ということになっていた。よって多くの技術者がそこでご飯を食べていた訳だ。

しかし、組込み機器でも汎用OSが使えるようになると、1回作ったプログラムが延々と使い続けることができるため、開発がすごく少なくなるのではないだろうか?
(多くの技術者がお払い箱になるのではないか?)

実際、Windowsが普及し、PCが各家庭に1台くらいあるような状況になったが、
うちの会社でも、PCアプリの開発は激減している。
(今は、ほとんどがWebアプリということもあるが、、)

PCと同じ道を、組込み機器も進むのではないだろうか?

GoogleがなぜAndroidを無料で配っているか考えてみよう。
自身のWebサービスを携帯などでも使えるようにして、
ユーザを囲い込みたいに違いない。
まあ、ユーザとしてはGoogleのサービスで大体問題ないが、
しかし、他の会社のサービスは撃沈だろう。

特に若いソフトウェア技術者は、今後どこを頑張るべきかよく考えた方がよいのではないか?

2009年11月14日土曜日

Google App Engine

今までWebアプリを作るためには、レンタルサーバを借りるなりして、自分で環境設定やプログラムを配置したりといろいろ手間が掛かった。

しかし、時代は変わった。(遠い目)

Google App Engineを使えば、簡単に自分のサービスを立ち上げることができる。
テストなど小トランザクションなら無料だ。

いい時代になったものだ。

でちょっと立ち上げてみた。

http://bad-workers.appspot.com/

いわゆるHello Worldだが、

Google App Engine詳解:さっそくHello Worldから作ってみた

を見て作った。(というかコピペ)

注意点をいくつか

Mac版SDKで試したが

SDKをダウンロードして中のランチャーアプリを適当なフォルダ(アプリケーションとか)にコピーダブルクリックしてランチャーアプリを起動。

なんかコピーするらしい。(/usr/local/google_appengine/が作られる)
パスを設定。(tcshの場合)

set path = ($path /usr/local/google_appengine/)

とか

アプリケーションの作成(Create)するのに携帯のアカウント(SMSなど)
を入力する必要がある。docomoの場合、i-modeメールアカウントでOK。
あとは、携帯宛にメールが届くので、それを入力して作成完了。

日本語などを使う場合、.pyファイルの先頭に、


# -*- coding: utf-8 -*-

をいれutf8で保存する。

ファイルの先頭のutf-8宣言がないと、テストサーバでは動いても、実環境(appspot.com)で
エラーが発生した。

ってな感じ。1時間くらいでできるので、お手軽だ。

今後、Big Tableなんかを使ってみたい。

追記:

スタートガイドを参考に、ユーザ情報(Googleアカウント)、永続化、テンプレートエンジンを試してみた。

簡単だ。。。

Big Table のキーの管理がちょっと特殊である。
Big TableはKey-Value Storeの一種で、1つしかキーがない。
PythonのO/RマッパーであるModelクラスでは、key_nameという特殊な変数でアクセスする。

たとえば、E-Mailアドレスをキーにしてオブジェクトを取得する場合、

    note = Note.get_by_key_name("key:"+users.get_current_user().email())

というようにした。

Modelオブジェクトを生成するときにキーを指定しないと、キーはユニークな値で自動生成される。
GQLという問い合わせ言語(SQLの親戚)で検索(SELECT)する場合、このキーを含めるない方がよいようだ。(いろいろ制限がある)

あと、Google App Engineでは静的なファイル(.cssや画像など)を置けるので、
次回は、静的なHTMLからAjax的なアクセスをやってみたい。



2009年11月8日日曜日

Win-WinよりLose-Lose

よく偉い人が好きな言葉にWin-Winの関係とかいうものがある。
相手(顧客)も儲かる(Win)し、うちも儲かる(Win)ようにするっていうことらしい。

まあ、100%計画通りに儲かるなら、そういうのもありかもしれないが、
今回のような不景気だと、計画が下ぶれして、Win-Lose/Lose-Winとなりやすい。

だいたい、IT企業なんて、Win-Winとかいいながら、
リスク管理とかいって如何にリスクを顧客に負わせ、
いかに自分が危ない目にあわないかしか考えてない。

本当に顧客から信用されるためには、実は、
相手が損(Lose)したら、自分も損(Lose)する関係が必要なのではないだろうか?

例えば、あるIT企業が、顧客からシステムを受注したとすると、
まあ巧く開発が成功してたとして、
顧客が納品されたシステムが、使い勝手が悪い、性能が十分でないなので、
使えなかったとする。
でも、契約上検収しちゃったら、お金は払わないといけなくて、
顧客はガッカリってことはよくあるのではないか?

まあ、IT企業としては、とりあえずお金貰えりゃOKって感じだろうけど、
それでは、次の受注に繋がらないし、
顧客はIT化が遅れ市場競争力を失ってしまったりする。

ではどういう契約形態が理想か考えてみる。
例えば、
 - システムの開発費はIT企業側が負担する。
 - 顧客は、そのシステムの使用料を払う。
という形はどうだろう?

使えないシステムを作った場合、IT企業側も損するわけだ。
当然使えないシステムは作れない、非常にリスクを追うことになるが、
顧客がトンチンカンなこと言ってきても、開発費は自分たちで出しているので、
断ることもできる(はず)。
かなり厳しい開発になるが、こういうのが理想ではないだろうか?

2009年11月5日木曜日

もう,若者は車に乗るな!

最近,残業も少なく収入も減っている(ような気がする)
ので,外食を控え,自炊を始めたのだが,大学時代に自炊していたころに比べ,
あらゆるものが安い!
肉類,野菜などなど,大学時代と比べずいぶん安い.
(アメリカ産だったり,産地不明だったりするが...)

薄型テレビもどんどん安くなっているし,デフレが進行しているように思えるが,
値段が上がっているものがある.

「自動車」である.

昔,若気の至りでCivic Type R(初代)という車を買ったことがある.
車両本体価格199万だったはずだ.



Type Rという車は特別な車だが,
Civicなんか100万ちょっいで,若者向けの安い車という認識だ.
Type Rとはいえ,H社の中では,お子ちゃま(初心者)向けスポーツカーの位置付けだったはずだ.

あれから,xx年(正確な年数が分かるが書きたくない)
今のCivic Type Rは2,835,000円だ!
あれから,xx年(正確な年数が分かるが書きたくない)
知らない間にずいぶん値段が上がった.ドアが4枚になったり,
「かっこよさ」や「スポーティさ」はダウンしまくりなのに,値段だけずいぶんになったじゃない.

もう若者はフィットに乗るしかないね.

と思ったら,フィットベースのType Rが出たらしい.

ホンダ・シビックタイプR

http://response.jp/article/2009/11/05/132023.html

価格は298万円!
orz


「もう若者は車に乗るな!」と言っているようなものだ.

いや,若者に買える価格のスポーツカーを出さないと,
日本で車買う人いなくなるよ.

昔は,トヨタとかが(かっとび!)スターレットを69万8千円とかで売って,
若者に車を買わせるようにしていたが,
そういう若者が大人(中年)になると,高い車を買うようになるのであって.
若いうちに車乗らなかったら,「一生乗らないでもいいじゃん!」ってことになりかねない.

ちょっと,日本の自動車メーカー(とくにH社)はよく考えた方がいいんじゃない?

2009年11月4日水曜日

Mercurial(TortiseHG)でWinMerge(日本語版)を使う

マージツール・Diffツールを設定する.
(MercurialHGは0.8.3 環境変数LANG=jaで日本語化,コンテキストメニューはそのまま英語)

参考:
http://d.hatena.ne.jp/Wacky/20080503/1209817242

http://www.02.246.ne.jp/~torutk/mercurial/intro.html


まず日本語版WinMergeをインストール

WinMerge

右クリック→TortoiseHG→Global Settings
で設定ダイアログを出す.



ダイアログの「ファイルを開く」 をクリックして設定ファイルを開く(HOMEフォルダに設定ファイル「mercurial.ini」が作られる.

 

赤字の部分を追加 

# Generated by tortoisehg-config

[ui]
username = Miura

[merge-tools]
winmergeu.args=/e /ub /dl other /dr local $other $local $output
winmergeu.regkey=Software\Thingamahoochie\WinMerge
winmergeu.regname=Executable
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=True

[extensions]
extdiff =

[extdiff]
cmd.wmdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.wmdiff = /r /e /x /ub


一旦,Global Settingを閉じ,再度Global Settingを開く.
3-wayマージツールに「winmergeu」
GUI差分表示コマンドに「wmdiff」を設定する.

 




あとは,右クリック→TortiseHG→Visual Diffをクリック
ダイアログから修正ファイルをクリックすると,






WinMergeが起動し,日本語もちゃんと出る(泣)



2009年11月3日火曜日

ソースコードの管理

たいがいソフトウェア開発では、バージョン管理ツールが使われるが、
うちとかだと、Microsoft のVisual Source Safeとかしか使っていない。

しかし、こいつでは、分散開発とかがやり難い。
(もっともVisual Source Safe 2005あたりから、Webアクセスとかできるようになってだいぶ改善しているようだ。使ったことないけど)

いまは、Microsoftももっと進んだ製品を出していて、Visual Studio Team Foundation Serverというのがあるらしい。

でも高いので買いたくないです。*1

やりたいことは、客先と自社で分散で作業し、自社で開発したソースを客先のリポジトリに格納したい。で客先のリポジトリからお客や他社が作ったソースとともに統合作業ができればOK。
「パッチファイルをメールで送る」でできれば万々歳なのだが、

git/Mercurialでなんとかならないか考え中

とりあえずMercurialを使ってみるか(←いまここ)

*1:

参考価格

・Team Foundation Server : 380,000 円
・Team Foundation Server CAL : 68,000 円
・Visual SourceSafe 2005 : 88,800 円
・git                                       : 0 円
・Mercurial                          : 0 円


Google codeでMercurial(TortoiseHG)

やっと念願のGoogle code Hostingにソースを上げることに成功した(ので記念カキコ)

参考にしたページ:

Mercurial の利用

Mercurial の使い方のチュートリアル


Mercurialは,WindowsのTortoiseHGを使用した.
インストールしただけで,特に設定はしていない.

1.とりあえずclone

サーバのソースをローカルリポジトリにコピーする.
作業開始前のおまじないみたいなもの.
作業フォルダの上で右クリックして,「Clone a Repository」を選ぶ



 以下のようなダイアログが表示されるので,
Source PathにGoogle Codeのリポジトリを,
Destination Pathにローカルのフォルダ(新規)を入れる.



Destination Pathのフォルダ(以下,作業フォルダ)が生成され,
中に.hgフォルダ(Mercurialのローカルリポジトリ)が作られる.

2.add - ファイルを追加

最初にcloneしたとき,プロジェクトにファイルは1つもないので,追加から始める.
ファイルを作成(今回はすでにあるファイルを作業フォルダにコピー)し,
 作業フォルダ内で右クリック「TortoiseHG」「Add Files」を選択.



以下のダイアログが表示されるので,
ファイルをチェックして「add」ボタンをクリックする.



これで,追加完了.
編集とかは,そのままエディタで編集すればいいはず.

3.commit

追加・削除・編集に一区切りついたら,commit.
commitしてもローカルのリポジトリにしか反映されない.
作業フォルダ内で右クリックし,「HG Commit」を選択.




以下のようなダイアログが表示されるので,上部の空欄にコメントを入れる.
Mercurialはバージョン番号とか無いはずなので,このコメントは後から見るとき重要.
(ここでは,「First Version」とだけ記載.ダメじゃん)

Commitボタンをクリックする.



結果が表示される.まあここで問題になることは多分ないよね.

 

ローカルリポジトリはネットに繋がっていないときでも,
使えるので頻繁にコミットすればいいのではないだろうか.

重要なのは,サーバ(大元のデータ)に上げることである.


4.pull

サーバのリポジトリに上げる準備として,pullを行う.
ほかの人が修正していたら,それを取り込むことになる.
今回,自分以外開発者がいないので,現状おまじないにしか過ぎない.

いつかマージとかそこら辺も試さないといけないが,今回はサボる.

作業フォルダで右クリックして,「TortoiseHG」「Synchronize」を選択


以下のダイアログが表示されるので,Pullボタンをクリック.
今回は特になにも言われない.



5.push

でローカルリポジトリの更新をサーバに上げるため,pushを行う.

作業フォルダで右クリックして,「TortoiseHG」「Synchronize」を選択.(Pullと同じ)


以下のダイアログでPushボタンをクリック.
ダイアログが出てくるので,ユーザ名,パスワードを入力する.(省略する方法は調査中)



気をつけないといけないのは,ユーザ名はgoogleのアカウント(xxx@gmail.comのxxxの部分)だが,
パスワードは,google codeのパスワードで,自動生成されるものを使う.

英語を読まないだめだね.(Google CodeのSourceのページのリンクをクリックすると表示される.)



追記:TortoiseHGのバージョンは0.7.3
            最新版は0.8.3で日本語化されているらしい。
            インストール中。

2009年11月2日月曜日

ダイエット

最近,余りに仕事が暇なので,ダイエットを開始した.
私はお腹がすくと仕事にならないので,仕事の無いときでないとダイエットできない.

それはともかく,不景気になっているため,
偉い人は不景気からの回復とか,成長戦略がどうのこうのと言っている.

りっぱな車や高い家(大きいとは限らない)を持つことが人生の目標の世代の方々には申し訳ないが,
そろそろ身の丈にあった経済にするという考え方ができないものだろうか?

経済が好景気と不景気を繰り返すのは,教科書と(残念なことに)実体験ですでに学習しているのだから,
大きな好景気は,その後に大きな不況を起こすのは分かりきっている.
なら,好景気にならないようにセーブすればいいと思う.つまり経済のダイエット.

そこそこの暮らしが維持できればいいので,日本全体でワークシェアリングでもして,
そこそこの経済を維持すりゃいいじゃん.

お金があってもお腹一杯食べられない人もいるのだから...

とお腹がすいたので,書いてみる.

定年前に週休3日にならないかな?

バーチャ社員

PMPの研修のとき習った遠隔地のメンバーと仕事をするときの用語。


をど忘れして、バーチャルオフィスとか検索してしまった。

備忘録的にblogに残す。

バーチャル社員という用語はない見たい。(ぐぐったら結構ヒットしたが)
一人の人間が複数の仕事を掛け持ちして、複数のお客に対応することで、
仮想的に人月を増やすこと。(1件のお客からは1人月働いているように見せる)
バーチャルサーバの人間版。(仮想化技術は不要)
部課長が大好き。(儲かるから)

たいがい担当者はMになるが。。。


バーチャル会社というものを考えてみた。

とある派遣中心の会社では、社長も派遣で他の会社に常駐しているそうだ。
それなら、オフィスいらないじゃん。
上述のバーチャルオフィス借りて、インターネットとかで社員と情報交換して、
リモートで会社運営すれば、固定費がかなり削減できる。
素晴らしい。

と、自社が東京の一等地にあるが故に、固定費がバカ高い会社の社員は思うわけです。
多分、バーチャル会社で困るのは、新卒クンが入ってくれないよね。ってとこですかね、、、


2009年11月1日日曜日

perlでExcel

日本人はロボットが大好きだ.

ガンダム,鉄人28号,だだんだん,ナナちゃん(名古屋).



それはともかく,アシモとかアイボとか大人気だった.

しかし,ダメ人間としては,人間を癒してくれるロボットより,
代わりに仕事してくれるロボットの方がありがたい.
理想のロボットとは,コピーロボット(パーマン)

大体最近の仕事はパソコンでExcelとかWordを使うものばかり,
2足歩行や画像認識,人工知能も不要ではないか?(機械的な単純作業とバレバレ)
とはいえ,Excelマクロ(VBA)とかでは,ちと心もとない.

パソコンにボットを数匹飼って置けば、自動的に仕事をしてくれる。
そんな時代にならないだろうか?(小人さんでもよい)

そんな夢のために、perlでExcelを操作する方法をちょっと調べたので,
備忘録的にリンクを張っておく.
(前置き長すぎ)

Win32::OLE で Excel を操る perl スクリプト


Spreadsheet::WriteExcelおよびSpreadsheet::ParseExcelモジュールの使い方

一応,ちょっとやって見たいのは,状態遷移表をExcelで作って,
それをコード(C/C++とか)に変換するとか.

政府はバブルを抑止しない

最近、アメリカとか日本とか財政赤字が大変なことになっています。
そもそも、サブプライムローンに端を発する今回の金融危機ですが、
アメリカでバブルが発生してのは明白だったのに、なぜ政府はなにもしなかったのでしょうか?

そもそも私の短い人生の間でもバブルはすでに何度も崩壊しています。
1990年代の日本の不動産バブル、.comブームのITバブル、そしてサブプライムローンの金融バブル。
多分近いうちに、エコカーとかのエコバブルも崩壊するでしょう。(但し、バブルにまでなればの話)
そもそも、環境を考えたら壊れるまで今の車を使うのが正しいと思います。

政治や経済には詳しくないですが、財政赤字(国の借金)を返すには、
「一発ドカンとバブルで税収を増やして」という考え方が優勢なのでしょう。
地道に税金で返す(=増税)は不人気ですか?

さて、民主党はどうするのでしょうか?
無茶やってボロボロにしてから自民党に政権を返すとか

焼きそば

名古屋のお土産にコーミソースを貰った。
焼きそばを作ってみた。

ついカッとなってやってた。今は反省している。
あと2玉残っているし、





- Posted using BlogPress from my iPhone

追記:レシピ

重機動社員

なぜ「飲みニケーション」重視の会社は儲からないか

会社の組織が複雑で,意思決定が簡単にできない重い会社では,社内のローカルネットワークが重要だ.
私が会社にいたころも大切な情報は喫煙所の中でしか出回らなかった.(私は非喫煙者だが)
会社に知り合いが少ないと,組織の中でサバイブするのが難しい.

とりあえず,技術とかそんなものよりコミュニケーション能力が物を言う.
日本の会社はそんなものです.
偉い人は「モノ作り」の能力とか言うが,騙されてはいけない.
ネゴシエーション力で重い会社を動かす重機動社員(ロボ)が必要とされているのです.



とはいえ,コミュニケーション能力0ですが何か?

2009年10月30日金曜日

備忘録

やってみたいことがあるが、時間(と気力)がないので進んでいない。
とりあえず、メモ程度に書いて置こう。

  • Google gearsでWebベースのローカルアプリ(でいいのか?)を作ってみたい。
  • Google App Engineでサービスを作ってみるのもいいかも(お試しは只みたい)。
  • 画像認識でなんかできないか?(OpenCVの本買ったが開けてもいない)

フリーのOCRエンジンがある.

HPが開発したOCRエンジン「Tesseract」、グーグルの支援で公開に

tesseract-ocr - google code

例えば,デザイナーが出してきたデザイン(ビットマップ)をOCRで読み込んで,
自動的にHTMLなんかに変換するツールとかを作れないだろうか?

あるいは,テストツールで自動的に画面のスナップショットからOCRして,
テスト結果を照合するとか?

今は技術は只で手に入る.あとはなにをやるかだけ.

おまけ:perlで画像処理もできる



2009年8月5日水曜日

User Interface

iPhoneやMacOSX、Google Apps など、リッチなユーザ体験を提供するプログラムを作りたいとする。ターゲットとしては、Web App,Local App,携帯電話,カーナビ,デジタルTVなんかを想定する。

どういう技術が使える?というと、
Web Appだと、
DHTML+Javascript,Flash,Sliverlightなどが考えられる。
組み込みブラウザが使えれば、組み込み系でも行けるかもしれない。

PC/組み込み系だと、直でグラフィックドライバを叩く必要があるが、
最近では、OpenGL ESなんかが使えるかもしれない。
しかし、単にアプリ(not Game)で、OpenGLは扱い憎そうだ。

Clutterなるライブラリがあるらしい。Intelが後援しているらしいが、詳細不明。
NetBook向けのLinuxであるmoblinのGUI(シェルといかWMみたいなもの)を作るのに使われるみたい。(moblinもIntelサポートだし)
ちょっとサンプルコードをみたが、GTK+みたいなコードを書くようだ。
ようするにコードで画面を作るイメージだ。

なんにせよまだ、Ver1.0なので、情報なさ過ぎ。
なかなか簡単にiPhoneみたいな画面は作れそうにない。

2009年6月14日日曜日

Google Code Hosting(その後)

登録したはずなのだが、待てど暮らせどGoogleから連絡なし。
登録の仕方がまずかったのだろうか?
なにしろ正直に、開発者1名(自分のみ)、開発経験なし(仕事はITなんでプロジェクト管理はやってるけどOpen Sourceなんかはないので)としたのが問題だったのだろうか?

っていうかSubversionとMercurial好きに選べるようにしておいてくれよ。>Google
と思っています。

しょうがないのでSubversionでやるか?

と思って検索していたら、

新規プロジェクトや既存プロジェクトで使えるようになっているとのこと
早速、Administer → Source と見ていくと、Repository typeが設定できるではないか!

というわけで、無事Mercurialが使えるようになった。

あとはソースを上げるだけか(ここからが本番だけどね)

2009年5月23日土曜日

Google Code Hosting

Google Code HostingがMercuralに対応したらしい。


勉強を兼ねてProjectを作ってみた。


WikiやIssue Tracking Systemもある。
物置としても使えそうだ。


レンタルサーバを借りようかと悩んでいるが、また理由が無くなった。
あとは、自分でサービスを立ち上げる場合位か?

2009年4月22日水曜日

フローチャート(3)雑記

なぜ、フローチャートを書く必要があるのか?今時、プログラマがフローチャートを書くことは稀である。UMLとかで、クラス図やシーケンス図を書くことはあっても、旧世紀の遺物のようなフローチャートなど見向きもされない。オブジェクト指向全盛の時代にあってアルゴリズムは軽視されがちである。

設計のためにフローチャートを書くことは多分今後もないだろう。しかし、アルゴリズムや設計思想を他者に説明する場合には、PADとかよりも直感的だろう。とくに最近の開発では、プログラマ以外と話をする場合が多い。

SVGではなく、PowerPointの図にできると一番嬉しいのだが。

フローチャート(2)

bloggerで添付ファイルをあげる方法が不明(できない?)なので、Wikiの方にあげておく。
ソースは結構汚い。


http://www.wikihouse.com/marukomex/index.php?flow.pl

2009年4月19日日曜日

フローチャート


perlを使い擬似言語からフローチャートを作るプログラムを作成した.
リファレンスは慣れると快適.再帰なんて使ったのは,何年ぶりだろう.
以下のようなテキストから右のような図(SVG)を生成する.いまどきフローチャートなんか使わないという話はある.


採点処理 {
while(未処理件数>0) {
マークシート処理;
if (午前得点 > 70点) {
午後1採点;
if (午後1得点 > 70点) {
午後2採点;
}
}
[合計処理];
if (合計点数>70点) {
[合格処理];
} else {
[不合格処理];
}
次の人;
}
}

(4/19のコーディング量585行)