タグ:IT ( 110 ) タグの人気記事
配列の先頭要素
JavascriptやPHPの配列や関数などで配列の最初の要素がary[0]に格納されたりsubstring()関数の起点がゼロであったりしますがゼロでなく1ではダメなのでしょうか。

 あー、わかるわかる。僕も、プログラムを書き始めたばっかりのときは、これがすごく気持ち悪かったのを覚えている。特に、日本語で「0番目」はまだギリギリ理解できるんだけど、英語で「0番目」ってどう呼ぶのよ??ってところが、すごく納得いかなかった気が(zeroth とか 0th なのか?今でも分からん)。

では、JavascriptなりPHPなりのC系の言語ではなぜ配列の底が0に固定されているのか?
これは、Cの実装の問題に行き着きます。
JavascriptやPHPの配列や関数などで・・・(略) Sampoさんの解答

 正直に言うと、ちょっと前までは、この辺をちゃんと分かってなかった。最近、C を勉強し始めたので、やっと分かり始めたところ。C言語ってのは、コンピュータを理解するのには欠かせないね(まぁ、当たり前なんだけど)。頭では理解していたつもりだけど、肌では分かっていなかった。C言語超重要。
[PR]
by fkmn | 2008-05-24 23:55 | 日記
Perl-users.jp: 日本の Perl ユーザのためのハブサイト
YAPC::Asia 2008 で Michael Schwern は「SEO に有効な独自ドメインを取って、もっと Perl 初心者が集まりやすい nice な Perl の情報を集めたサイトを作れ!」といったので Perl-users.jp ドメインを取って、ここに Perl-users.jp を開始します。
Perl-users.jp - 日本の Perl ユーザのためのハブサイト

素晴らしすぎる取り組み。Yappo++

SEO支援のため、リンク貼っておきます。
http://perl-users.jp/
[PR]
by fkmn | 2008-05-20 23:55 | IT
Super Mario Bros. on Ruby
スーパーマリオブラザーズをRubyで作ってみた - I am Cruby!

Ruby/SDL で動くスーパーマリオを作ったとの事。すげー。

これはぜひとも動かしてみたい!、ということで、Mac (10.4) で 動かそうとしてみました。
が、うまく動かず・・・。

実行したコマンドは以下のような感じ。

まず、SDL まわりで必要な者を、MacPorts でインストール。

% sudo port install libsdl
% sudo port install libsdl_image
% sudo port install libsdl_mixer
% sudo port install libsdl_ttf
% sudo port install rb-opengl

そのあと、gem で rubysdl をインストール。

% sudo gem install rubysdl

例のファイルをチェックアウトして、以下のページを参考にちょっと修正。
% svn co http://svn.coderepos.org/share/lang/ruby/mariobros
参考:SUPER NARIOをプレイしてみた(最速レビューをめざして) - きみのハートを8ビットキャスト

そして、main.rb を実行すると、なぜか sdl の require でこける・・・。

% ruby main.rb
main.rb:9:in `require': no such file to load -- sdl (LoadError)
from main.rb:9

しょうがないので、ソースを落としてきてインストール。

% tar zxvf rubysdl-1.3.1.tar.gz
% cd rubysdl-1.3.1
% ruby extconf.rb&& make && sudo make install

これで、sdl の require は通るようになった。
が、しかし、main.rb を実行すると、盛大にエラーが発生・・・。
%  ruby main.rb
2008-04-23 23:48:38.360 ruby[13393] *** _NSAutoreleaseNoPool(): Object 0x375650 of class NSLock autoreleased with no pool in place - just leaking
2008-04-23 23:48:38.361 ruby[13393] *** _NSAutoreleaseNoPool(): Object 0x3760c0 of class NSCFNumber autoreleased with no pool in place - just leaking
(中略)
./mario/gamestart.rb:135:in `main': uninitialized constant SDL::Mixer (NameError)
from ./mario/gamestart.rb:169
from main.rb:17:in `require'
from main.rb:17

というか、マリオ以前に、rubysdl のサンプルコードが動かないっす。
動かすまでには、ちょっと時間がかかりそう・・・。
[PR]
by fkmn | 2008-04-23 23:55 | IT
プログラム仕様書についてあれこれ
他の人たちのエントリにかこつけて、自分の言いたいことを言うテスト。

例えば、誰が書いても同じコードにするために、プログラム設計書(内部設計書)を今、書かせているとしたら、そんな無駄なものはやめたほうがいいと思う。

浜口さんに贈るSI業界を良くする方法 - ひがやすを blog

 うーん、本当に「誰が書いても同じコードにする」ためにプログラム設計書を書いているようなところがあるんだろうか?寡聞にして僕はそういう現場を知らないです。でも、もし本当にそういうことをやっているのであれば、確かにそれは無駄以外の何者でもないなぁ。

プログラム設計書は、自然言語で書きます。プログラムは、プログラミング言語で書きます。どっちの言語が、プログラムを書くのに適しているかといえば、誰が考えても、プログラミング言語ですよね。

浜口さんに贈るSI業界を良くする方法 - ひがやすを blog

 でも、プログラム設計書も、あまり自然言語でだらだら書くのは良くないですよね。図なり表なりを活用して、自然言語の部分はなるべく少なくするべきかと。

プログラム設計書を作るのは「誰が書いても同じコードにするため」だけでなく、元請けがレビューするためでもあります。元請けがプログラミング言語を読めないので、日本語に落としてレビューします。コードを書いてからプログラム設計書を作ることもあります。

仕様書やプログラムを書く大変さ - __int128 Geek Not Found

 これこそ無駄。日本語とコードが1対1で対応するようなドキュメントなんか必要ない。
 あぁ、そういえば、僕の周りでも、こういうドキュメントとコードの対応作業に追われているところがあったなぁ。当然のように、そこは泥沼化してるけど。

今のうちのえらい人の考えは、技術力(プログラミングを含む)は、うちの会社の足腰だから、技術力をきちんと持ったSEを育てることが強いISIDをつくるという考えです。

プログラミングできない元請けがプログラム設計書をレビューするという矛盾 - ひがやすを blog

 そうそう、「足腰」ですよねぇ、技術力って。腕ばっかり使っているように見える野球のピッチャーも、実際には、足腰が重要な役割を果たしているわけで、つまり、そういうことだと思う。
[PR]
by fkmn | 2008-04-15 23:55 | IT
わーい、SICP 第3章終了したよー
 SICP を第3章まで、練習問題を解くのを含めて、読了。慣れのせいもあったのかもしれないけど、第2章よりは、すんなり進める事が出来た。第3章に入ったのが2月の前半だったので、まぁまぁよいペースといったところ。

 第3章「標準部品化力,オブジェクトおよび状態」の内容をざっくりまとめると、以下のとおり。
  1. 代入と局所状態
     ここでやっと「代入」が出てくるのが SICP の恐ろしいところ(笑)。普通のプログラムの本だったら、まず真っ先に代入だよなぁ。でもここで、「バグの90%には変数が関わってるから、変数を無くせばバグはなくなるんだ!」という(ネタ)話が、あながち馬鹿に出来ない事を知る。状態を管理するには代入があった方が良いけれど、代償も少なくはない、ということを刷り込まれる。副作用コワス。

  2. 環境モデル
     変数がどの空間に束縛されるのか、とか、あとはポインタ周りの話。この辺は、最初からある程度理解出来ていたので、問題無し。

  3. 遅延評価とストリーム
     第3章の山場。代入や可変データを持たずに,状態を持つシステムを作るための一つの解。遅延評価と言うと、なんとなく難しい印象があるけど、実際には、lambda で包むだけのごく単純な話。けど、それだけで、ストリームのような面白い事が出来る。
     Perl や Ruby でも簡単に出来そうだなぁ、と思ったら、すでにやっている人がいたので、そちらにリンク


 第4章からは、いよいよ、Scheme による Scheme の実装らしい。楽しみ。
[PR]
by fkmn | 2008-03-22 17:37 | IT
三項演算子の書き方と FizzBuzz
三項演算子?:の正しい書き方
プログラマの思索: 三項演算子?:の正しい書き方 経由)
条件演算子は、正しくは以下のように書く。

condition ? true-expression
: false-expression

(中略)

条件演算子には、以下の表記方法もある。この表記は、 switch文や else-if構文と同様に使える。

case1 ? expression1:
case2 ? expression2:
case3 ? expression3:
...
default-expression

 すごく分かりやすい三項演算子の書き方の説明。「プログラマの思索」さんのエントリでも触れられてるとおり、三項演算子は Lisp の if式 や cond式 に発想が近い気がするので、インデントもそれ(if式やcond式)に近くすると、読みやすくなると思う。

RubyでFizzBuzzかけたよ!+いろいろ考えてみた - バイオ研究者見習い生活 with IT
このような記述を見つけたので適用してみると

for i in 1..100  do
puts((i % 15 == 0) ? "FizzBuzz" :
(i % 3 == 0 ) ? "Fizz" :
(i % 5 == 0 ) ? "Buzz" :
i)
end

こうなろうか。

僕だったら、もうちょっとレイアウトを整えて、こうするかなぁ(あと、for は rubyっぽくないので、あんまり使いたくない)。
(1..100).each do |i|
puts i % 15 == 0 ? 'FizzBuzz' :
i % 3 == 0 ? 'Fizz' :
i % 5 == 0 ? 'Buzz' :
i
end


これ、もっと短くできる人居たら教えてくれませんか?
for i in 1..100 do puts(i%15==0?"FizzBuzz":i%3==0?"Fizz":i%5==0?"Buzz":i)end

僕はゴルファーじゃないんでよく分かんないですが、短く書こうとするとこんな感じ?(63バイト)
1.upto(100){|i|p i%15==0?:FizzBuzz:i%3==0?:Fizz:i%5==0?:Buzz:i}
シンボルのコロン(:)と三項演算子のコロンを、Rubyがちゃんと区別してくれるのが嬉しい。
[PR]
by fkmn | 2008-03-20 22:52 | IT
gauche.night 行ってきた
a0057891_0502710.jpg


 SICP もまだ読み終わってない中途半端Schemerの僕ですが、gauche.night に行ってきました。先行発売された「プログラミングGauche」もしっかりゲット。

 以下、それぞれ感想をば。

・第1部: 座談会
(前編)
 川合史朗さん、オライリーの伊藤さん、山下伸夫さん、えんどうやすゆきさんによる「プログラミングGauche」出版に当たっての裏話等についての座談会。
 ラクダ本(「プログラミングPerl」)をかなり意識していた、とか。

(後編)
 笹田耕一さん、ひげぽんさん、zickさん、黒田寿男さん、えんどうやすゆきさんによる「R6RS」についてのお話。
 始めの方で黒田さんが話していた内容がチンプンカンプンでした(笑)(フルの continuation(継続)があるとナントカカントカ、といった感じの話)。


・第2部: gauche.gong
「そうだ Scheme もどきを作ってみよう!」amachang(天野 仁史) (サイボウズ・ラボ)
 カッとなって、JavaScript で Scheme を実装しました、という話。
 結構、シームレスに JavaScript から Scheme を使えるようになっているみたいで面白かった。

「Cyber Earth」横田裕思
 Google Earth と国土地理院のデータを組み合わせるソフト。普段からデータをキャッシュして、非常時にも使えるとか。時間切れで、途中で発表が終わってしまったのが残念。

「Gaucheで作るPIC電子工作」naoya_t
 SICP を読むのにとても参考にさせてもらっているサイト(素人くさいSICP「独」書会)の naoya_t さん。「自分でアセンブラ書いてるんで」とか、随所にすごい発言が。

「Gauche on Rails」吉田裕美(EY-Office)
 時代は「RubyからLispへ」ということで、Rails を Gauche に移植したという話。デモで見る限りでは、Rails そのものが gauche 上で動いてました。すげー。

「Gauche *で* 本を作る」k16.shikano(鹿野桂一郎)(オーム社)
 見えない文字から Gauche への愛が伝わってきた発表。「原稿をハックする」というセリフが印象的でした。

「OldType」西山清香
 オールドタイプ向けのWikiエンジン。編集中のページが無くなってしまうのがいやなので、subversion を直接いじれば良いじゃない、という話でした。

「PHPはGaucheの夢を見るか?」hogelog(小室直)
 libgauche (Gauche のC言語バインディング機能) でPHPを改良しちゃおう、という話。いろいろネタが満載の発表でした。

「BiwaSchemeでAjax&Comet」yhara(京大マイコンクラブ)
 こちらも、JavaScript で実装した Scheme の話。Ajax とか Comet も OK となかなか完成度が高かった。

「glint - Gauche用コードチェックツール」小黒直樹
 個人的には、一番興味引かれる発表でした。今すぐ使ってみたいんだけど、どこにあるんだろう・・・?ググったけど、見つからなかった・・・。

「Gaucheで誤植共有」tabe(安部武志)
 誤植共有のためのWebアプリケーションの話でした。

「ステップ実行eval-sv」山田淳雄
 動画での発表。無限ループするような式は途中でそれを検知して停止するという、特殊なeval の話。

 という事で、gauche.night の感想は以上。会場が、TOKYO CULTURE CULTUREという、今までにあまり経験した事ない場所だったのが新鮮でした。

 さて、いい加減 SICP も終わらせないとなー(もうすぐ4章)。
[PR]
by fkmn | 2008-03-08 23:50 | IT
Joel はそんなこと言ってないよ
404 Blog Not Found:その影は装飾か?
私はその場に居合わせたわけではないのだけど、Joel、わかってねえなあ。

デブサミ - ひげぽん OSとか作っちゃうかMona-
建築に無駄な装飾をとりのぞくモダンアーキテクチャという流派があるが、ソフトウェアはまだその段階に達していない。ユーザーは装飾を好む。ウィンドウのありえないところに影があったり、金属でもないのに金属の見た目だったり。

 スルーしようかとも思ったけど、あまりにも誤解が甚だしいので、一応訂正しておく。

 Joel が意図していたのは、「建築業界には無駄を省くという流れがあるけど、ソフトウェアはそれとは違う(その段階に達していない)」ということであって、ウィンドウの影に意味が無いなんて言ってない。むしろ、その全く逆で、無駄に見えるけど必要だというのが実際に話していた内容。

「Joel on Software」の筆者が語る“人を幸せにする”ソフト開発のポイント:ITpro


 別に事実誤認するな、とは言わないけど、せめてもう少し裏をとってからポストして欲しいなぁ。弾さんぐらいのレベルになると、影響力も半端ないんだし。
[PR]
by fkmn | 2008-02-14 23:13 | IT
デブサミ2008に行ってきた
デブサミ2008は13日と14日の2日間の開催だけど、僕自身は今日だけの参加。
というわけで、参加したセッションの感想。

【13-E-1】Microsoft Presents 「Joel on Developers Summit」:素晴らしいソフトウェアを作るということ
 今日一番の目当てのセッション。Joel が来るというのでデブサミに来たと言っても過言ではない。

 やっぱり、プレゼンが上手だというのが第一印象。導入の雑談なのかな?と思っていると、いつの間にか本題に入っているのはさすが。他にもMS製品を使ったジョーク(?)とか、音楽とか、聴衆をリラックスさせる術を心得ているようだった。プレゼン技術そのものだけでも十分に楽しめた。

 実際の話の内容も、かなり納得感のある内容。個人的には、「ユーザーにコントロールを渡す」という部分が印象に残った。確かに、僕自身、好んで使ってるソフトっていうのは、カスタマイザビリティが高いものが多い印象がある。Emacs とか Firefox とか Perl とか Ruby とか。ユーザ側でカスタマイズできる領域が大きいと嬉しい。でも、開発者側の視点から見ると、ついつい、ユーザー側にコントロールを渡して、不確定要素を入れ込みたくない、とか考えてしまいがち。今後は、もうちょっと「ユーザにコントロールを渡す」っていう事を考えていきたい。

 あと、個人的には、同時通訳はいらないなぁ、と思った。同じ内容を2回聴かされるのもイライラするし、話のテンポが途切れてしまって、ちょっと残念な感じ。英語が苦手な人の事も考えると、全体としては、無いよりはあった方が良いのかもしれないけど。


【13-B-2】CodeGear Presents 「David Intersimoneと日本のRubyのコミュニティが、オープンソースの現在と未来について語る会」
 「Ruby に対して出来る事は何か?」というテーマでのパネルディスカッション。参加者の皆さんが、Ruby という共通軸を持ちながらも、それぞれ異なる立場を代表していて、良いパネルディスカッションだった。

 個人的には、前田さんが「Ruby は Rails だけのためにあるわけじゃない」と言いつつも、「でも、Rails がないと、みんな使ってくれないし・・・」と発言したりして、微妙なジレンマを醸し出していたのが微笑ましかった。ガンガってください。


【13-B-3】ふつうのRubyプログラマに贈るRubyプログラミング講座
 ホントに、ふつうのRubyプログラミング(若干初級寄り)の内容だった。ちょっと、僕自身は対象から外れていたかな?という印象。あ、でも pp は初耳だった。
pp - Rubyリファレンスマニュアル


【13-E-4】継続的インテグレーションとテストによるソフトウェアリリースの迅速化
 題目のとおり、継続的インテグレーション(Continuous Integration, CI)いいよ!という内容。CI の世界では、CruiseControl というオープンソースのプロダクトが有名らしい(Martin Fowler作なんだとか)。
CruiseControl Home
Agitar Software: Automated Unit Testing for Java Applications


【13-A-5】反復開発とテスト - 7年
 遅い昼食を食べに外に出ていたので半分しか聴けなかったんだけど、もったいない事した!XP的な手法を、きちんと自分たちの手法として確立させて開発を進めている、という話。こういう形態のプロジェクトが増えてくれば、もっとエンジニアも楽しく仕事できるんだろうになぁ。

 あ、でも、現実的な話、7年も同じプロジェクトが続くというのも、それはそれで、結構なレアケースな気がした。


【13-B-6】インターネット・アプリケーションを素早く作る - Project Zero
 最近、ちらほらと周りで Project Zero の名前を聞く機会が増えてきたので、どんなもんじゃろ?と思って、聴いてきた。まぁ、単純な話、Webアプリケーションフレームワークですよね、という事だった。

 他のフレームワークと比べて、圧倒的に優位な部分があるか、と言われると、正直微妙。ただ、Groovy を使って、Java のコンポーネントをシームレスに呼び出すことが出来る、という話だったので、講演の中でもあったように Java の資産が多くあるようなところでは、他と比べて優位性が出てくるのかもしれない。


【13-E-7】CodeZineスペシャルセッション みんなまとめて面倒見よう~真のDBエンジニアになるために必要なこと~
 この時間帯(18時〜)は、セッション内容的に、かなり悩ましかった。できることなら、全部のセッションに参加したかったんだけど、そうもいかないので、いろいろ考えたあげく、今まで一度も話を聞いた事が無かったミックさんのセッションへ。

 本を出されたという事で、その本の紹介をしつつ、DBエンジニアの現在の状況や SQL の考え方についての話などがセッションの内容。特に、DBエンジニアのスキルレベルの分布について危機感を持たれていたのが印象的だった。確かに、周りを見ても、DB中心で仕事をしている人間っていないわけで、そういう意味では、中級以上のDBエンジニアが育ちにくい土壌ではあるのかもしれない。



 全体的には「お祭り感」が全体的に出ていて楽しかった。ただ、会場の広さと来場者の数が見合ってなかったのが、ちょっと問題だったかな。でも、それだけ盛上がってるってことで、まぁ、良い事なんでしょう。
[PR]
by fkmn | 2008-02-13 23:55 | IT
HUNTER×HUNTERの念六性図にみるプログラミング言語
プログラミング言語とプログラマーを、HUNTER×HUNTER の念と念能力者に置き換えてみるとどうなるか。
HUNTER×HUNTER が再開するらしいので考えてみた。

各系統についての解説

・強化系
特徴:コンピュータの能力を効率よく引き出す事が出来る。
例:C言語、Java

・変化系
特徴:ある入力を加工(変化)させて、他のコンポーネントと結合させる事を得意とする。いわゆるグルー言語などがこれにあたる。
例:Perl、Ruby、Python

・操作系
特徴:操作(関数)を主体とした記述を得意とする。いわゆる関数型言語。
例:Lisp、Haskell

・具現化系
特徴:より物質に近いレベル(低レイヤー)で動作する言語。
例:アセンブラ

・放出系
特徴:特定の環境にとらわれず、あらゆる言語と連携して動作する特徴を持つ。
例:正規表現、SQL

・特質系
特徴:上記のどれにも当てはまらない特徴を持つ言語。操作系プログラマーや具現化系プログラマーが、後天的にこの能力に目覚める事が多い。
例:Brainf*ck、Whitespace、Grass


系統別性格分析(そのまんま)

・強化系:単純で一途
・変化系:気まぐれで嘘つき
・操作系:理屈屋・マイペース
・放出系:短期で大雑把
・具現化系:神経質
・特質系:個人主義者・カリスマ性あり


習得のコツ

自分の特性を理解し、それにあった言語を選択することが重要。さらに、一つの系統を軸として、系統の異なる言語をバランスよく習得する事で、応用の効くプログラマーとなる事が出来る。


*注:このエントリーの内容は、完全にネタなので、真に受けないように。といいつつ、実は意外としっくり来てるんじゃないか?と思ってたり。


参考サイト:
HUNTER×HUNTERの念六性図に見る個人サイト - 最終防衛ライン2
六性図
[PR]
by fkmn | 2008-02-08 23:55 | 日記


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX