「ソースコード」を含む日記 RSS

はてなキーワード: ソースコードとは

2011-02-21

卒業して一年、やっと進みたい道が見えた

私は昨年度、ゲーム専門学校卒業したが、内定なしでの卒業だった。

就職活動は見かけ上は頑張っていた。見かけ上は。

試験を受けた会社は約40社。就職課にも褒められていた。

しかし、これは就職課の言う「受けろ受けろ受けまくれ!」という言葉を実践していただけで、今思うと受かることより受ける事に比重を置いていたのが良く解る。

受ける会社に入る気はあったのだが、入ってから何をしたいかとかは一切考えず、とにかく受けられるから受けていた状態である

良く書き損じていたので履歴書は何枚書いたかも良く解らないけど、中身のない履歴書だなとは活動中常々思っていた。

 

正直なところ、活動中は自分は何も持っていない人間だと思い込んでいたし、今でもそう思う

次に示すような空っぽ人生を送ってきたからだ

 

というわけで、今までの人生を振り返ってみることにする

幼稚園児の頃は普通に友達を作り良く遊んでいたが、基本いじめられっこであった

既にこの頃から陰気な性格だったように思う

家では偶にMS-DOSを触ってインベーダーゲームだのブロック崩しだのをやっていた

 

小学校に入ってからも低学年の頃は大方似たようなことをしていたが、PCWindows95になっていた

CUIとはおさらばして、GUIレーシングゲームとかをやっていた記憶がある

 

中学年くらいでネットエロサイトを覚え、Yahooアダルトサイトを探していた

この頃にはWindowsの基本操作はマスターしていて、ローマ字も当たり前に知っていたので小学校ローマ字の授業は楽ちんだった

当時の私は非常に馬鹿だったので、毎回「ア」とだけ入れて検索して、何ページもめくって「アダルト」のカテゴリにたどり着いていた

勿論使っていたのは親のパソコンだったので、ばれないように履歴を消したり、Q2ダイアルのアプリを消す方法も身に付けた

からも教わっていないのにQ2ダイアルのソフトが出ないように始末できた自分は凄かったと思う

 

高学年になると、流石にエロサイトの探し方もマスターした

この頃は文系である社会理系である理科の成績だけが妙に高かった

これは小学校理科には数学的要素が皆無だったからであろう

当時文系理系がこなせる天才だと自負していた物である

但し算数はガタガタで国語普通くらいだった

 

中学生活の始まり、これこそが人生を急変させる鍵になった

中学生活が始まると親からお古のノートパソコンを貰うことが出来た

この為、非常にインターネットに入り浸る最悪の生活が始まった

特にYahoo!Chatのボイスチャットである

これが非常に楽しく、社会人主婦を相手にし良くお喋りをしていた物である

あちらからしたら、こんな年少者がいるなど驚愕の沙汰であったのは間違いがない

そうこうしていると、親からネットの禁止令が出たが、幸いにもパソコン回線だけは奪われなかったので、ありとあらゆる手段を使い隠れてネットをしていた

丁度自室の真上の部屋にモデムがあったので、親がトイレに行った隙などを見計らい電源を入れて、水が流れた音がしたら電源を切るなどの姑息な事を良くしていた

最後モデムのある部屋に南京錠を掛けられたが、ばれないように錠前そのものを外して部屋に入ったりしていた

何が何でもインターネットしたかったのである

勿論、勉強などしているはずもなかった

しかも、チャットだけで全てが終わる筈がなかった

自体はどんどん悪い方向へしか行かなかった

因みに部活テニス部に入ったのだが部活は性に合わないという事で三ヶ月で抜けている

 

中学2年になるとゲーム系のコミュニティサイトに入りびたりはじめ、そこでの交流に嵌ってしまう(そこの年齢層は小5~高1程度)

そうこうしている内に自分Webサイトを立ち上げようと思い、HTML勉強を始めた

リファレンスサイトは殆ど見ることなく、正直ソースコードの改変で知識を蓄えていた

ぶっちゃけ中身のないサイトだったが、毎日日記だけは書いていた記憶がある

このサイトを運営していく中で色々な事もあった

他人のサイトで迷惑を掛けたり、こっちが掛けられたり

まぁ中2らしいと言えばらしい、そんなネットライフを送っていた

 

そして中3になり、更に事態は悪化した

リアル友人の勧めや、ネットで知り合った人たちの勧めなどで人生は素敵な方向へねじ曲がる

まずラグナロクオンラインかいタイトルを知ってしま

まだこの頃プレイできる環境はなかったのだがプレイしたいという強い願望にかられた

それとはまた別にシスタープリンセス灼眼のシャナKanonAIRみずいろ月姫水月などと言った作品と出会ってしま

いわゆる萌え系作品への出会いだ

こうした中でどんどんダメ人間度は上がっていく

 

高校に入ると新しいノートパソコンを親から買ってもらい、ラグナロクオンラインを始めた

これのおかげで高校の成績は常にカスだった

高校時代やったことなんてラグナロクオンライン以外にいう事がないくらいだ

学校は寝る場所だった

しいてもう一つ言えば、小遣いと昼飯代とお年玉を全てエロゲーエロサイトに回して3年間で20万くらい使ったこと

因みに銀行の出勤記録から計算した

イーバンクはやばかった

 

そして上京してまで専門学校ゲーム学科に入った、今思えばソフト学科に入るべきだったと思う

理由は座学より実践でしょ!とソフト科の教師に言われたというそれだけ(ゲーム学科は実践、ソフト学科は座学が基本だった)

心機一転ネトゲは辞めようという事でアカウントまで消しただが勉強への熱意は半年で消え

その後はネトゲアカウントを消したという後悔の念に苛まれて何もやる気が起きなかった

二年目にして、ネトゲへの復帰を果たし、再びネトゲ廃人になった

まさに人間クズである

そのまま3年になり、ネトゲ人生の生活に戻っていた

就活もしていたが、冒頭で述べた通り芳しくはなかった、そもそもやる気がなかった

学校ではゲームをするかアニメを見るという腐った状態であった

ただ、そんな中でも真面目に受けていた授業がなかったわけではな

1年~3年にかけ、ゲームプログラミングはクソだと思っていたのだがゲームと関連性のない授業はまともに受けていた物が一部にあった

特に3年のアーキテクチャアプリケーション開発は大分真面目にやっていた

この時、ソフト科に行くべきだったと確信した

 

そして内定のないま卒業した

最初フリーターにでもなろうかと思ったが、決心が固まら新卒就職応援プロジェクトに応募した

そして、もうそろそろ一年が経とうとする今、結果として3社回った

業種は工業系、ITベンチャー系、営業系の3つである

 

専門学校での就活は40社受けたのだが、業種は絞らずありとあらゆる業界、業種を受けていた

それは目的も何もなかったからだ

働ければ何でもいいと思っていた

でもインターンをしてみて思ったのは、働ければ何でもいいなんてことは全くなかった

始めの工業系は仕事がなかった、楽ではあったのだが何か違うように感じた

次のITベンチャー仕事が出来なかった、技量がなさ過ぎた

営業系は仕事はあるが、とてもじゃないがモラルも糞もないし、その内訴えられて潰れそうなことばかりしている

少なくとも社会貢献と言うより、社会破壊する業務しかしていない

客を欺き、金が落ちた後なら客がどうなろうと知った事ではな

とてもじゃないがこんな思想の元で働きたくはないと思った

ニコニコスマイルで限りなく詐欺に近いか、正真正銘の詐欺である営業をさせられるのは辛い

 

そう、働ければ何でもいいなんて言うことはなかった

そりゃ座ってるだけでお金がもらえるなら、それに越したことはないんだろうけど、それだと将来が不安過ぎる

もし会社が潰れたらどうなるのかなんて考えた日には転職先がありゃしない

気が付いたら、もうネトゲはしていなくって、むしろほとんど遊んでいない状態だ

はまだその詐欺営業の会社に身を置いているのだが、業務上でも色々考える事が合ったりして、それを考えたり

今更普通免許の講習を受けたりしている

後はPHPTwitterAPI叩いたりするものを作ったり、Perlファイルフォーマットの変換スクリプトを組んだりしている

最近こういう事をしてて思うのは、プログラミングっておもしれーなってことだ

正直今の私の技術力なんてミジンコレベルなのだけれども、今更やっと進みたい道が見えた気がした

パソコンに触って居たい

 

人生の本当に長い間、多分私は寝ている時間を除けばパソコンに触れている時間が最も長かったかもしれない

別に大した技術を持っているわけでもないが、パソコンは好きだ

今まで散々遊んできた分際でいうのも生意気だろうが、IT系の会社に行きたい

やりたくもない事をやっても仕方がないし、やる気が出ないからどの道何も進まない

ITならやる気が出るのか?と聞かれたら、少なくともほかのよりは出るとしか答えられないけど、でもやりたい

就活でも最終面接まで二度も行けたのはIT系だけで、一般職結果は散々たるものだった

 

正直、そこらの人よりはITが好きだし、技術に興味もある

ネトゲやつまらない事しか書いて無かったBlogTwitterも今では更新頻度が減り、技術勉強ノートと化しているし、Pukiwikiを立ててノート代わりに使ってもいる

やれることはまだまだ少ないけど、やりたいって気持ちはある

自分が長く接してきたのはWebから、特にWebシステムサーバー運用に興味がある感じ

ECサイトとかSEOの類はあんま興味ないけど…

あとは、Tweenたいにな多くの人に利用される一般アプリ作ってみたいって願望もあったりはしますね

 

今までは情熱の欠片もない就活ばかりしてたけれども、今度からはもっと上手くいきそうな気がしま

ここ最近まで大して就活する気がなかったけれど、今になってようやく就職する目的情熱が見つかった感じです

一体ここまで遊んできた私に何ができるのかは謎ですが、出来る限り今後は頑張って行きたいと思いま

ぶっちゃけ遊ぶだけならもう散々遊んできたしね

そこで置き忘れてきたものを今からでもなんとかして取り戻す

諦めたらそこで試合終了、今からでも頑張れば何か成果は出るはず!

2011-02-06

http://anond.hatelabo.jp/20110206034147

つまり、惜しいのは私だから元増田を書くわけだが

 

自分が書いた元増田を読んでみ。最初の奴。

ソースコードレビューした

あー、オシイなぁ、すごい優秀なんだけどなぁ・・・

http://anond.hatelabo.jp/20110122000048

これを受けての「惜しいのはあんただ」って話なんだけど?

それとも、これってあんた自身の話だったの?

ともあれ私は首尾一貫して、元増田しか問題にしていない。

 

しいねぇ。うかっとすると、ネットオープンソースが落ちている時代。

自分で書くべきなのか・・・どうなのか?

って書いてあるから

ケーズバイケースなのは大前提として。

能力があるなら自分で書けばいいと思う派。

って返したんだよ。

それが長話につきあってみるとどうだい。「どうなのか?」も何も無いんじゃん。あんたの中で結論出てるんじゃん。

しかも何で未来とか再発防止だとかそういう話にしちゃってんの?

元増田の話からずれまくってるぞ。

それでも敢えて「じゃぁ、何をどうすればいいのか?という未来が全く見えてこない。」

と言うなら、下記の点だね。

私の指示が悪く、調査をしないで書かせてしまったために、不当なコードが上がってきたためにやり直しを命じた。

かかねーよ、そんなレビュー書。

私の指示が悪かったから、やり直して・・・いいけど、人が育たないだろ。言われたことをやればいいわけじゃないんだから

書こう。

原因工程を明確にしよう。

責任はわたしにございます、わたしが悪うごいました」なんて言わなくていいから。

そもそもレビュー書は責任を問うものじゃないから。

から原因が指示の工程にあると思うなら、そう書こう。

増田じゃ無く、レビュー書に書こう。

 

ようするに未来に起きる自称の再発防止として、ネタとして書いているものに、俺がオシイといわれても

じゃぁ、何をどうすればいいのか?という未来が全く見えてこない。

なぜならば、指示するほうが悪いから次回から指示しなおしをしなければいけないというのは、自明の理であり、わざわざ指摘することではないから。

うん、それが自明なのはさぁ、前提として「オープンソース使わない事=ダメな事」って事が自明場合だよね。

から、「オープンソースがそんなに大事なら」と仮定した上で、「事前に指示しろ」って書いてるわけ。

仮定が必要で無いなら、お前の中で結論出てんじゃんの下りに戻れ。

 

自明の理ではない、次回から指示しなおしをする以上の何かを求めて、レスを続けているんだよねぇ?

別にあんたの行動を制御しようって話じゃない。

次回から指示しなおしをするとか、そんなの勝手にすればいい。

ここでは、それ以前の話しか求めていない。

あんたのお話、おかしいよ」って言ってるだけ。

どんどんおかしな方向に行くから、「おかしいよ」ってレスが続くだけ。

さっきの「レビュー書を書け」って話もさ、厭ならやらなくていいよ。

でも、おかしな理屈はつけなくていい。

主語を大きくしたり、後付けをしたりしなくていい。

「厭だ、やりたくない」で充分だよ。

2011-01-22

ソースコードレビューした

あー、オシイなぁ、すごい優秀なんだけどなぁ・・・

オープンソースの読み込みが足りないなぁ。それ、わざわざ自分で書かなくても、有名なオープンソースあるのに。

しいねぇ。うかっとすると、ネットオープンソースが落ちている時代。

自分で書くべきなのか・・・どうなのか?

2011-01-19

Buffaloメールした件の続き

前回の結果に返信をしたところ、次のようなものが返ってきた。

バッファロー製品お問合せ受付の件 : お問合せID No.xxxxxxxxxxxxxxxxxx

お客様

平素は弊社製品をご愛顧賜り、誠にありがとうございます

バッファローE-Mailサポートよりご質問いただいた件についてご連絡いたします。

※今回頂戴しましたお問い合わせに対するご返信、追加のご質問は、

下記URLよりお問い合わせいただきますようお願い申し上げます

 返信用メールサポート受付

 http://buffalo.jp/php/lon.php?to=webx&id=xxxxxxxxxxxxxxx

===========================================

いつもお世話になり有り難うごいます。

私はメール対応責任者でxxxと申します

この度は、GPLソースコードの開示について、

誤った回答を差し上げました事をご連絡する

とともに深くお詫び申し上げます

GPLソースコードにつきまして、社外秘情報として

おりません。

通常は下記ページにて公開を行っておりますが、

DWR-PGについて掲載が遅れている状況でございます。

http://opensource.buffalo.jp/

今週中にはご提供できる予定でございますので、

お待ちいただけますと幸いに存じます

準備でき次第、私からご連絡させて頂きます

また、今後同様のことがなきよう再発防止に

尽力して参ります

最後に誤案内の件、重ねてお詫び申し上げます

株式会社バッファロー

メールサポート責任者xxxx

===========================================

[ご質問内容]

オープンソースソフトウェアGPL関連の質問の対応がこの窓口でで

きないのであれば対応できる窓口を案内していただけるとありがたい

です

よろしくお願いいたします。

[ご質問内容]

DWR-PGに使用されているAndroid OSGPLApacheライセンスのデュ

アルライセンスですが、カーネルなどのLinux由来な部分はGPLとなる

ため、GPLが適用される部分のソースコード開示をお願いいたしま

す。

質問が2個になってしまうのは私が1つにまとめそこねたため。

結果としては、担当者の間違いでしたDWR-PGGPL適用部分は通常のソースコード公開ページに公開されるそうで、解決ですね。

http://anond.hatelabo.jp/20110118202429

ごめんなさい。

あなた製品には、GPLが含まれているはずだから、全てのGPLをください。っていう開示請求に答える義務ってあったんだったけ。

 

あなた製品には、GPLのXXという製品が含まれているからXXのソースコードをください。という聞き方なら答える義務がある気がする。

どのGPLが含まれているか?という質問に答える義務はないよね。どの製品で作られているかを答える必要はないんだから

2011-01-18

http://anond.hatelabo.jp/20110118183543

これは、質問送付先からして無理筋だと思う

そもそも

Buffaloソースコード請求したら大変困ったメールが返ってきた

はな

Buffaloサポートセンターソースコード請求についての質問をしたら大変困ったメールが返ってきた

が正しい

バッファロー本社には1ミリも伝わってないし本社の意向は1センチも反映されてないぞたぶん

こういう一般ユーザー問題解決用フォームから

https://online.buffalo.jp/toiawase/mail/modem.html

DWR-PGに含まれるGPLソフトウェアソースコードを公開していただけないでしょうか。

という一行質問を送ったら

大変恐れ入りますが、GPLソフトウェアソースコードにつきまして

誠に申し訳ございませんが、社外秘情報のため、公開することができかねます

というサポセンバイトの穴埋めテンプレ回答しか返ってこないのは必然かと…

http://anond.hatelabo.jp/20110118183543

GPLは公開しなければ”いけない”だからおかしいよね。

配布しているソフトウェアGPLが含まれてるだろうから

(特にルータとか)

ファームウェアソースコードは公開しなきゃいかんよね。

Buffaloソースコード請求したら大変困ったメールが返ってきた

続き:http://anond.hatelabo.jp/20110119132547

DWR-PGソースコードGPL由来部分を請求したらこんなのが返ってきた。

バッファロー製品お問合せ受付の件 : お問合せID No.xxxxxxxxxxxx 

xxxx様 

平素は弊社製品をご愛顧賜り、誠にありがとうございます

バッファローE-Mailサポートよりご質問いただいた件についてご連絡いたします。

※ご返信や追加のご質問は、お手数ではございますが

 必ず下記の返信用「お問合わせフォーム」にてご連絡ください。

 直接ご返信いただきますと、メールを確認できないため

 ご返信できかねます

※mel_support@melcoinc.co.jp宛にお問合せ頂いてもご返信できかねます

▼返信用お問い合わせフォーム▼

【下記をクリックして返信してください】

http://xxx

弊社製品のご利用にあたり、ご不便をおかけして誠に申し訳ございません。

■大変恐れ入りますが、GPLソフトウェアソースコードにつきまして

誠に申し訳ございませんが、社外秘情報のため、公開することができかねます

希望に添えない点もあるとは存じますが、

ご理解賜りますよう、お願い申し上げます

株式会社バッファロー サポートセンター

メール担当xxxx

http://buffalo.jp

お客様のご質問とその解決方法をご案内しています。

無線

http://buffalo.custhelp.com/app/answers/list/p/1,2

ユーザー登録をいただいたお客様へは新製品製品アップデートを含む

 サポート情報などバッファローの最新ニュースをお届けします。

 ぜひご登録ください!

 http://buffalo.jp/support_s/mel-line/

ユーザ同士のコミュニティサイトSAK2の仲間になりませんか?

 http://www.zqwoo.jp/sak/about

[ご質問内容]

DWR-PGに含まれるGPLソフトウェアソースコードを公開していた

だけないでしょうか。

質問が悪かったのはまぁ認めるが、GPLってなんなのかわかってんのかこいつ

追記

http://opensource.buffalo.jp/ に公開されてるぞ、という指摘がありますが、無線LAN機器の一覧であるhttp://opensource.buffalo.jp/gpl_wireless.html では公開されていません。

Webの問い合わせからたどった先がここだったのでここに送ったわけですが、文面も送信先も不適なのでまぁしかたない結果ではありますね。

2011-01-16

http://anond.hatelabo.jp/20110116160055

いちおう、昔のこの産業ウォーターフォールで、ソースコードは全レビューというのにより、そういう腐ったコードは入らないようになっていたんだけどね。

アジャイルだなんだと、さわいだあげく、ろくに試験しない、ろくにレビューしないで この様さ。

いちおう 自分のチームは 全レビューを維持している。 あとで発覚するよりも コーディング中に発覚するほうが、はるかに安くつく。

後ろのほうで上の方にコードが積み上がって、もうどうにもならなくて破綻したプロジェクトなんて、いくらでも知ってる。

 

部下のコードレビューしない上司害悪だと思い始めているし、こういう酷いコードを下の方に入れる奴はマイナスの稼働だと思っているが・・・

そんな事関係ない、兎に角人を突っ込めばプロジェクトは成功するんだ。 そして、今はオープンソースの時代でコードはいっぱいあるから、単価は安くていいんだ。

たいなのは日本ソフトウェア産業。 安いコードで安い奴で、他国と競争しようっていうんだから、終わってる。

 

天才プログラマでも、ダメプログラマでも1人月は1人月。 それが 日本

2011-01-14

いまのうちから娘に

ソースコードの行間には、それはそれは美しい

コンピュータの女神がおるんやで〜」と言っておけば、

将来一曲売れること間違いなしやで!

結婚相手をつれてきたときゃ、「わかった娘はくれてやるから、君を殴らせろ」と言えば、

ちょうだいませませだな。

2011-01-07

http://hibari.2ch.net/test/read.cgi/unix/1294308129/84

84 :名無しさんお腹いっぱい。:2011/01/06(木) 22:22:49

585 名前:sakurazaka.jpn.ph[] 投稿日:2011/01/06(木) 22:15:17 ID:B05NruFc0

今回のまとめ作ったけど横に長すぎた

東日本削除人の作業時のログを見つける。http://be.2ch.net/test/sss/hoop.datとか。

 これは誰がいつ削除したかがわかる程度。

だが、/test/sss/以下の全ファイルリストApache仕様で見れた。

 しかもbe鯖のsss/以下にはなぜかcgi拡張子なしで置かれてた。

・それを見つけたモペキチソースコードを入手。

 元の現在動いてるcgiスクリプトを探し出し、それに対してコマンド実行。

・そのcgiも糞で、パスワードなしで2chの全キャップが入手でき、他にもパスなしで板移転なども可能だった。

 ファイル一覧も取得可能だった。

・いろんな人がそれを実行した。板移転もやりたい放題、キャップも全部ばれたのでお止めも自由。

しかファイル一覧取得にもバグがあり、そこからOSコマンドを叩くことも可能。ここで全部のcgiソースを入手可能。

 もちろんバックドアcgiの権限レベルで作り放題。

・もちろんこのバグは全鯖共通で持ってるので過去の鯖でも実行可能。どこまでやられたかは不明。

FOX ★「わしゃ何も困っていないけど?」ってことで訴える気ゼロ。今はススキノタイムオフライン

2010-12-13

http://anond.hatelabo.jp/20101213155924

誰かが作ったソースコードを読んでどういう動きしてんのか見たけど、なんかそれ以来自分がパクッてんじゃないかという恐怖に襲われた

それ、業界的には全く普通の事だから心配しなくておk

プログラミングを独学で挫折した経緯

2010-12-06

http://anond.hatelabo.jp/20101203150748

完全に一致を作るための勉強法

たくさんのアクセスありがとうございました

コメントもたくさん頂いてまして、それにお答えするのに「ブログでもつくろうかいな」とのぼせましたが、そんなテーマで続くわけもないので、やはりアノニマスダイアリーしました





製作期間について】

まず、皆さん仕事しながらたった4ヶ月で!と褒めて頂いてますが、たったじゃないですよ。4ヶ月って。

仕事が終わって、毎日2~3時間。土日関係無くやると、多分300時間くらいになります

専門学校の2年間の授業時間がこのくらいだったりするんじゃないですかね。結構長いです。


モチベーションの維持について】

モチベーションを保つのがすごいというのも褒めてもらいましたが、私は一回やり始めると、意外に長く続きます

コツがあるんです

毎年、日々の単純作業が続かない新入社員が入ってきますが、そんな新人に言います。

「息をするように続けるんだよ。」

毎日やるんです。土日関係無く。毎日。


勉強したという言葉の誤り】

前回の日記で「勉強した」と何度も使ってしまった為、誤解をされている方が多くいらっしゃいます。

正確には、「調べ」ました

職業柄「調べる」という事が多い為、WEBサービスを作るという事に関してはそれが訳に立ちました

追記でも書いているのですが今回のシステムほとんどが、先人達が作った既存システムベースになっています。

ぱくりと言われてしまえばそれまでなんですけど、丸ごとはやってないですよ。というか、丸ごと合うモノがなくて、いろんな所からソースコードを拝借させてもらいました

なので、中身はぐちゃぐちゃです。けど、検索システムはそれでも200行くらいしかありません。クローラーは80行くらいでしょうか。


HTMLについて】

基本をやったのは、恐らくHTMLCSSだけです

というか、それすら途中で挫折してAdobe社のDreamWeaverというソフトを使いました

適当に書けばソースは綺麗にしてくれるし、CSSの体裁はプロパティを設定しながら見た目のまま調整すれば良いし、一番助かったのはテンプレート機能でした

最初は全部のHTMLファイルコピーしながら作っていたのですが、ヘルプを見るとテンプレートライブラリという機能があるのをしってライブラリいまいち分らなかったのでテンプレートを使いました

Dreamweaver便利

テンプレート便利


Javascriptとの出会い】

最初に本やで立ち読みした本に、「プログラムをやってみよう」ということでJavascriptの事が書いてありました

なので、自然プログラム最初さわりがコレになっただけなんですね。

でも、アラートを出したりとかばっかりで、面白くありませんでした

インターネット黎明期からのネットユーザーなのですが、「最近よく見るページが移動しないのにページの中身が切り替わるやつかっこいいよな」と思って「ページ遷移しない 読み込み」で検索をすると、Ajaxという文字を見つけ、「ajax 入門」で検索してトップに出たサイトAjaxの概要だけ調べて、「ajax 簡単」でprototype.jsjQueryの文字を見つけて「ああ、jQueryってよく見るな」というのがjQueryとの出会いでした

最近よく見るページが移動しないのにページの中身が切り替わるやつ」は、非同期通信という名前した

jQueryを使うと、下記のように1行コピペするだけで外部のHTMLを読み込む事ができました

--------------------------------------------------------------------------

var http = $.get("abc.html",null, function(data) {$("#main").html(data);});

--------------------------------------------------------------------------

すごい簡単。最初意味は分りませんでしたが、目的の事ができればそれで良いので次に進みました

jQueryすごい

■非同期通信かっこいい

プラグインいっぱいあって楽しい


Perlとの出会い】

jQueryがちょこっと書くとダイナミックに色々変わってくれるので、日々いろんなプラグインを探して遊んでいました

でも、作りたかったのは検索システムだったのを思い出し、また近くの大きな本屋に。

検索するパソコンで”プログラム 検索”で探しだした棚に行くと、「CGI/Perl」の本棚した

大量にありすぎてどれをかって良いか分らなかったので、いくつか立ち読みして家に帰り、「CGI/Perl 入門」で検索すると

http://www.kent-web.com/perl/

このページにたどり着きました

Windowsだった為、ActivePerlを入れていくつかプログラムをやりましたが、これがまた面白くないんですね。

すごい地味で。このPerlをさわった最初の1日は正直かなり苦痛した

その後、”AV女優検索システムって不動産検索システムに似てるな”って思って「CGI/Perl 不動産検索 無料」で検索したら、http://www.yumemaboroshi.net/ってサイトが引っかかって、ここのおかげでかなり進みました

先人が作った大量のプログラムダウンロード出来るサイトなんですね。

Perl面白くない

フリーソフトを集めたサイトソースがいっぱい見れる


PHPとの出会い】

いくつもダウンロードしては、サンプルと中身を見てを繰り返してたら、Perl/CGI以外にPHPがたくさんありました

どう違うのかと思い検索したら、PHPはすごい叩かれてて、Perlがえらいみたいに書いてあったのですが、叩かれてる理由がいまいち理解できませんでした

結果PHPを使う事になったのですが、その大きな理由は、DreamweaverPHPが開ける。なおかつHTMLファイルをそのまま使うテンプレート機能のプラグインがあったという事でした

PHPテンプレートを使うには、Smartyというプラグインを使えば良いということが分って、「Smarty 入門」で調べて、いくつかのタグを覚えました

実際にSmartyで使ったタグは、{$変数}と{if}{/if}と{foreach}{/foreach}の3つだけだと思います。

色々高機能らしいですが、まあ目的は達成できたのでいいか。と。

PHP検索プログラムは、HTMLファイルボタンを押すと、テキストファイルに書いてある内容を、表示してくれる簡単なものを作って、そこに肉付けしました

(最終的にテキストファイルSQLサーバーになりましたが。)


PHPDreamweaverと相性がいい

Smartyでやると見た目が壊れない


Rubyとの出会い】

簡単にPHPで動くプログラムが出来たので、実際に女優データを登録しようと思い、DMMに行きました

DMMサイトを見ていると、いったい何人いるんだってくらいAV女優が登録されています。

数人集めてみて「こりゃぁ。無理だな。」と途方にくれて1日を過ごしました(笑)

次の日、「ホームページ 自動 巡回 プログラム」とかで検索して、ボットクローラーという存在を知りました

自動巡回で拾ってくるのは、どちらかというとクローラーと呼ばれるそうで、「クローラー 作り方」で調べたホームページに、Perl+LWPモジュールで似たことができるということで、とりあえずペタペタとソースを貼ってうごかしてみたら、まあなんと簡単に取れました

しかし、取ってきた後に気がついたのが、HTMLファイルをそのまま取ってきても結局手動でコピペの必要があり、あんまり意味がない。と。

で、もう少し調べると、「WWW::Mechanize」を使うといいよって書いてあって、Mechanizeで調べたサイトをみるとrubyを使ったサイトが出てきました

rubyのサンプルがすっごい短くてわかりやすかったので、Perl苦痛だったのでRubyにしようと、このときRubyを始めました

設定が大変だったんですが、まあ面白くないので割愛。


Rubyきれい

■Mechanize簡単


デザインは・・・】

はてなブックマークコメントで、DoCoMoサイト元ネタと書いてありましたが、ハズレです

デザイナーの友人が居て世間話でどうやって作るの?って聞いたら、「まあ、パk、じゃない。参考にするよ。他社のを。」っていうもんでどうやって見つけるか聞いたら、あるんですね、綺麗なデザイン集めたサイトが。http://www.ikesai.com/ここでたくさん見ました

それからスライダーインターフェースは、「selectToUISlider」jQueryプラグインそのまま使ってます


■世の中のデザイン全てぱk(略

■selectToUISliderかっこいい


という感じで、ほんとにちょっとずつ進みました

しかったですね。Perl以外は。なんであんなに読みづらいんでしょう。


と、またもや長くなりすぎたのでこの辺で。





あ、ちなみに、アクセス数収益をご報告します。

金、土、日、月と約4日間爆発的にアクセスを頂きました

アクセス数は、4日間で約200アクセスほどありました

DMMクリック10クリックほどあり、その結果、購入された金額が、なんと!









700円でした

報酬額が245円。

ありがとうございました

http://www.kanzen21.com/


----------------------

12/8 12:00追記

アクセス過多でまたもやサーバーがダウンしました

今回のサーバーダウンは結構深刻でなかなか復旧が出来ていません。。。

申し訳ないです。


----------------------

12/8 12:10追記

全然起動しません。なんなんだこれは。

サーバー会社に問い合わせ中です

状況は、Twitterでお知らせします。

http://twitter.com/#!/kanzen21_com


----------------------

12/8 13:00追記

サーバー復活しました

サーバー会社の方、ありがとうございました

2010-10-18

オレが昔作ったプログラムが改変されて出回ってた。

VBで書いてたんだけど、ソースコード見てみたら、Sub が Function に直されてる。

何か返してるのかと思ったら何も返してない。

なんじゃこりゃ。

C言語プログラマーなのか?Void なのか?

意味わかんねぇ直しすんじゃねぇ。

2010-10-08

占いアルゴリズム

星座占いとか誕生日占いとかで,

アルゴリズム化されててソースコードが転がっているようなものってないのかな.

2010-09-21

PHPでQuineプログラミング

RubyでうどんげQuine(とAA型Quineの作り方講座)

perl - Quine.pm で(ほぼ)あらゆるPerl Scriptをquineに

RubyPerlと来たら、次はもうPHPしかないでしょう。

そもそもQuineとは何か?Wikipedia先生にご登場願いましょう。

クワイン (プログラミング)

コンピュータプログラムにおけるメタプログラミングの一形態であり、自身の完全なソースコードだけを出力するプログラムである。

なるほど。

くくく。実はこの分野であればRubyPerlなんぞ足元にも及ばない。

PHPはまさしく最強なのだ


a

なんと一文字!


$ php quine.php > q.php
$ diff quine.php q.php

自身の完全なソースコードだけを出力するプログラム、ここに極まり!!!!!さすが天下のPHPだ!

AAなんて、コピペするだけで動く!

汚い言語仕様や、高度なテクニックなど、必要ない!過程や方法なぞどうでも良いのだ!





・・・・・・・・・・・・さて、そろそろ本題に入ろう。

上記のPHPの出力機能を使わずにQuineプログラミングするにはどうするか?

Ruby文字列変数展開をしないし、Perlには文字列クォート記号を別の文字に指定することができるのでなんら問題なくQuineを実現できるが、PHPにはそのような機能がないので思ったよりも苦戦した。


<?php function a(){return'print"<?php function a(){return".var_export(a(),1).";}eval(a());";';}eval(a());

仕方なく関数戻り値とすることで文字列変数展開を避けた。これ以外良い方法が思い浮かばない。ヒアドキュメントでなんとか出来ないかと思ったのだが、変数を展開しないNowdocという機能が、PHP5.3だったのでとりあえずパスした。それにそもそも関数を使うよりもコード量が減るのか甚だ疑問であり、結局この形に落ち着いたわけなのだ!

おわり。

プログラ増田のあなぐら

2010-09-05

XMOSメモ

ブログに書くと、一発で仕事バレするようなニッチネタなのでここにメモっとく。

 

XMOS 2007年の記事

http://www.atmarkit.co.jp/fsys/zunouhoudan/091zunou/xmos_cpu.html

ここではボロカスに書かれていたが、やっと安い評価キットが出はじめた。

XMOS 2010年の記事

http://www.csp-consortium.org/apps/XMOS_training_kit%282010-08%29.pdf

ニコニコ技術部あたりが食いつきそうなネタではあるものの、今の所ニコ動でXMOS検索しても1本も出てこない。

デジキーですぐ買える。チップ1000円~3000円。小規模な評価キット2万~3万ぐらい。

ちなみに総産研にXMOSという名前を使った特殊なMOSトランジスタ研究発表があるが、それとは全く別物。

 

特徴:

普通にC言語でも使えるらしいが、チップの特徴を活かすためにはXC言語という専用の言語を使う。

昔、トランスピューターをやってた人達が作った。なので、XCの実態はトランスピューター用言語とC言語を混ぜたような感じ。

http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF

 

・小規模な組み込み向けの用途において、安価チップで、並列処理とかイベントドリブンな処理が可能、という点が画期的。並列処理は大規模コンピューティングだけのものじゃないよ!という熱いメッセージ

ハードウエアの動作をソフトエミュレーションする処理は、いわゆる「ワンチップマイコン」よりは得意&楽。

・XCは言語仕様としてポインタが削除されてる(!)。XCをC言語派生言語と呼んでいいのか迷う所。

 

現状の安価なXMOSチップボトルネック

・XCは、昔のトランスピュータを勉強した経験がある人じゃないと、上手には使いこなせないクセモノ。いい感じにガラパゴス化しとる。

・大容量のメモリをつなぐことを想定した専用ハードを持ってないので、自ずと用途は限られる。(DRAMのI/Fをエミュレータでやれ、なんて言われても絶対嫌だ。)

浮動小数点をサポートしてない。(裏技はあるらしい)

・XCの言語仕様は、「木に竹を接いだ」ような状態で、お世辞にも美しいとは言えない。ソースコード眺めてるだけでムカつく。(将来的に改善される可能性はある)

・「チャネル」というのが1つのキモだが、この帯域幅が今時のチップとしてはしょぼい。ただしこの欠点は大量のチップを並列に使えば、理論上はある程度補うことが可能らしい。

MMUを持たないので、Linux移植できないのか、と言われるとツラい。

 

XMOS応用例 Youtubeでもやっと数千再生しか行ってない。

http://www.youtube.com/watch?v=4gbFagvjSfU

http://www.youtube.com/watch?v=eLyn2Ghq_oE

http://www.youtube.com/watch?v=atAdpt5SZe8

今、XCとXMOSに取り組めば、あっという間に国内のこの界隈では有名人になれるかもしれない。強いて言うならそこが唯一の魅力。

 

2010-09-04

もし、あの会社図書館システムを作ったら

http://anond.hatelabo.jp/20090220065041

任天堂

大量のアクセスによりシステムがダウンしたら、新しいシステムと交換してくれる。

アクセスした人には、「君は一個人だからお金があまりないでしょう? 今回はおじさんが直してあげるから、今後は取り扱いに注意してね」と頭をなでなでしてくれる。

Apple

システムがダウンしたのではなく、画面表示のエラー

と説明した上で、

「他の会社のものでも同じ。どこにでもある問題」

と競合他社が同じ問題を抱えてることを説明。

どうしてもお客が納得しない場合サーバ用のカバーを送ってくる。

雪印

このシステム不具合のみならず、他のシステムでも次々に不具合が発覚。

それどころか、ソースコードリファクタリング不足によるスパゲティコード濫造不具合の出たシステムを、名前だけ変えてそのまま再出荷などの偽装が発覚。

その件について社長インタビューすると「私だって寝てないんだよ!」と切れられる。




飽きたのでこの辺でやめとく。

真面目に書くと、任天堂だったら間違いなく mixi と同レベルか、それ以上の素晴らしい対応をするだろうと思う。

2010-08-09

ウィルス製作者を犯罪者として逮捕するために、わざわざ新しい罪を定義するらしい。

ウィルス製作能力を持っている事は簡単に証明できてしまうが、ウィルスを作ったかどうかは、本人の自白捜査への協力が無ければ証拠は取れない。そして、ウィルスを作っていない事を証明することはprobatio diabolicaであり、不可能である。

やばいデータ暗号化しているのが普通であるから、ウィルスソースコードや資料も、当然、暗号化されているであろうし、そのデータにしても、一定時間ごとに、所定のパスワードアクセスしなければ、自動で全データを抹消する。間違ったパスワードアクセスしたら、ポルノ動画等の、まるっきり別のデータを渡しながら、裏で指定しておいたデータを消去する。所定の手続きをせずにシャットダウンしたり、立ち上げてから、あるいは、HDDに通電してから一定の時間内に所定の操作をしないと、やっぱり指定したデータを消去するといった自爆型トラップを仕掛ける位は、まともなウィルスを作れる程度の能力があるならば、普通にやっているであろう。

ソースコードや開発資料を証拠物件として押さえられなければ、作れる能力がある事は判明しているが、本当にウィルスを作っていたか、そのウィルスの本当の作者なのかどうかは、自白剤でも使わなければわからないとなる。

この話の出発点が、入手した人が、その人の権限でクリック等の作動開始を命じて動作しない、いわゆる拡張子偽装型破壊プログラムウィルスとして、それを取り締まる法律を作ろうという話なので、話の筋が悪くなっている。こういった下らないプログラムウィルスと主張している時点で、間違っているのである。

拡張子偽装型破壊プログラム場合、入手した人が作動を命じない限り何も被害を発生させないのだから、悪意をもって偽装した破壊プログラムでしかなく、虚偽説明による詐害行為であって、被害者マヌケなだけでしかないし、その作成者も、盗んだデータを直接自分の支配下に送りつけているという時点で、確実に足がつく行為をやっているマヌケでしかない。

ウィルスとは、ターゲットマシンに侵入し、システムアカウントを乗っ取って踏み台にしたり、データコピーし、所有者に気付かれないまま、証拠を消して消えるというところまでやるものである。そして、そういうウィルス存在している事を前提に、インターネットに繋がったマシンの中の情報を加工しておくというのが、情報戦の攻防となる。

本物のウィルスを作ろうとして、バグのあるままでリリースしてしまい、異常アクセスを発生させてしまったり、侵入先の所有者に気付かれたりといったドジを踏んで、ウィルス存在が表沙汰になるのである。人々に知られているウィルスは、ウィルスとしては,すべて、失敗作といえる。

インターネット情報戦の戦場であり、平和ボケしたマヌケ過保護する前に、平和ボケ治療するのが先である。戦場には、良く訓練された兵士だけが供給されなければならない。

ウィルス作成者は、捕まるようなドジは踏まないし、証拠を消す所までやる。拡張子偽装型破壊プログラムごときをウィルスと法によって定義するのは、恥を晒す行為なので名称を変えるべきであろう。せいぜい、迷惑プログラム作成罪ぐらいであろう。勝手に送りつけてくるという点では、迷惑メールの方がはるかに被害が甚大である。

2010-07-26

http://anond.hatelabo.jp/20100726121223

それがやりたいなら、ボタン1個で勝手ネストしてくれる開発環境エディタ使ってくれ。

viしかつかえない?いや、今時、windows側でnfsなりsmbなりで、マウントしてwindowsのツールでエディットせいや。もしくは、マクロぐらいくめや。

 

いや、うん。プログラマ自体はさ、たかだか数Kか、十数Kしかみないから、それでいいんだろうけど。

それを組み合わせて、数百Kとかのソースコードメンテナンスする身になってくれ。

世の中には、アプリ全部を端から端まで、みているアーキテクトという人間もいるんだよ。

 

え?アーキテクトはコードは見ない?いやいや、ご冗談を。メインリポジトリ配下は全部見なきゃアーキテクトなんてやってられないよ。

もちろんマクロにではあるけど。何かあったらミクロに見ることもあるわけで、そんときに検索していてif 0とかだと、イラッと来る。しかも広域。

 

ていうか、#if 0 をネストするようなソースコード、何かが間違ってるから、作り直せ

#if 0

#else

#end

ってなんでだろう

#if 1 又は defineマクロ

#else

#end

なんじゃなかろうか?

if 0 ってなんか 気持ち悪い。if は成立することを基本になんじゃなかろうか?

あと、バージョン管理システム使ってんだから、コミットするときにif 0 なら消しとけよif 1のelseもとか思わなくもない。

自分メモもいいけど、全ソースコードを読む方の身になれよと

いや、悪いとは言いにくいので、こっちで愚痴

2010-07-25

プログラミングを身に付けるには

http://anond.hatelabo.jp/20100725025127

"どうすればいいか"を教わって、プログラミングが身につく人は多くありません。"なにをやりたいのか"を自分で生み出せないと、詰まってしまうし、なにより楽しくありません。

やりたいことがあれば手段は後からついてきます。これは物作り全般に言えることです特に学び始めにおいてモチベーションを維持し勢いをつけるのに大事なのは"やりたいことがあるか"、もっと具体的に言うなら"作りたいものは何か"です。これがないと始まりません。それがどうしてもないなら、そういう状況に自分を追い込むのも有効です仕事でどうしてもやり遂げなければならない状況に追い込まれれば人間 0 からでも身につきます。実際自分がそうでした。

とかく、プログラミングというのは手段さえ知れば、あとはだれがやっても同じ結果が出る生産業だと誤解されがちです。そういう認識で学ぼうとしても楽しくありませんし、本質を掴みにくいので応用が利かなく上達しにくいです

本質は絵や音楽と同じです言語を覚えるということは道具の使い方を覚えることでしかありません。音楽理論や絵筆の使い方を知っているだけで、すぐに素晴らしい音楽や絵ができるでしょうか。殆どの人がそうは思わないはずですプログラミングもそれと同じです。作りたいものがある人が圧倒的に強いのです

また、やりたい分野によって向いている言語は違います

んー、ここまで読んでも「やりたいことはないけどとりあえず勉強したい」というなら、すぐに動くものをつくりやすい言語お勧めかなあ。

Google App EnginePython をやるとか。 Python のいいところは、明快で作法にあまり迷わなくていいところです自分がまったく言語やったことない知り合いにすすめるとしたらこれ。

レガシーではないちゃんとした JavaScript (http://www.crockford.com/javascript/ この辺にあるような) もいいですブラウザですぐ動きますし、 Firefox 環境なら本格的なデバッガまでありますJavaScript は非常に誤解の多い言語ですが、悪いものではありません。 お手軽にグラフィカルなものを扱える、結果がわかりやすいので初心者向けです。それでいて、拡張性が高く、プログラミングに必要な概念ロジック殆ど再現できる底力も秘めています

Perlレガシー作法がいまだに見受けられる (Perl って CGI のことでしょ的な解説が未だにある) のですが、初めから strict に慣れて、 CPAN にあるようなスタイルを参考にして、初めから OOP に突っ走るなら今からやってもいい言語ですCPAN 等のリソース豊富さとコミュニティの広さが強いです。ただ、懐の広さ、できることの多さゆえに初心者向きではないところもあります

PHPお勧めしません。理由は適当検索してください。 PHP5 でかなり良くなりましたが、逆に言えば 4 と 5 では別言語と言っても良いほどです。古い考え方と新しいスタイルがごったになりすぎていて、かつて同じような状況にあった Perl に比べても、洗練されたスタイルを学びにくいと思います。また、ロジック面白さに感動するような部分が PHP にはちょっと足りないです

MMORPG やそのエミュレーターの中には、 Lua を使って AIマクロイベントスクリプトなどを組めるものがあります。すぐに結果が出て自分の役に立つものが作れるので、既にその手のゲーム趣味ならお勧めです。こうした用途では、自分の望む世界を構築するために嫌でも物事をモデル化して考えるので、自然OOP 的な考え方やデザインパターンが身につきます

VB は簡単に GUI アプリケーションが作れるのでやる人が多いですが、癖が強いし応用がききにくいのでお勧めしません。また、公開されているソースコードが少ないことも学ぶには不便です

Ruby はそれほどやりこんでないのでコメントはしないでおきますが、悪くはないと思います

C++ は何をすればいいのか?を聞いてる人にはすすめにくいです。作りたいものが明確にあり、ロジックを見つけることで応用が利く人ならほっといても覚えるでしょう。自分は、必要に迫られて身につきましたが・・・

個人的には、作りたいものがあってそれにマッチしてるなら、関数型言語最初にやったっていいと思います。一度ロジックを掴み取る能力がついてしまえば、第二第三の言語は猛スピードで身につくので。

人に見せて使わせてレスポンスをもらうことが大事

作ったものを公開して、人に見せたり使わせたりして、レスポンスを得るというのはモチベーションの維持や上達に非常に有効です。むしろ、早く上達したいなら必須と言ってもよいですプログラミング場合はこれがおざなりにされがちです

絵を上達したいなら、 pixiv を薦められますよね。今下手かどうかは関係ない。上手くなりたい人が沢山投稿してる。歌が上手くなりたいなら、人前で歌う事は避けられない。ニコニコ動画などで公開してる人がいるよね。人の作品をみると刺激をうける。これはすごいパワーだってのはわかると思う。

プログラミングだって全く同じです。なのに、プログラミングは引きこもって一人で勉強する人が多すぎる。絵や歌は公開しても人に害を与えないけど、プログラミングバグセキュリティホールがあったら人に害をあたえるかもしれない、といった印象が強いのかもしれません。

それでも、もっとコミュニティに参加したり、作ったものを公開することが学び始めのうちから重視されていいのは事実。そういった面から考えると、バグセキュリティホールが出来にくく、安全で、危険な動作がしようもない実行環境があり、加えて Web に公開しやすい言語が学びはじめに向いています

こちらも参考にしてみて下さい

http://d.hatena.ne.jp/Hamachiya2/20090721

http://d.hatena.ne.jp/Hamachiya2/20080131

学校に行く必用があるのか

学校に行けば一人で学ぶよりは後押しや出会いがあるかもしれませんが、”やりたいこと””必用なこと””作りたいもの”が無い限り、殆どの人は身につきません。

また、残念なことに講師にも大変当たり外れが多いです自分専門学校にいったことはありませんが、講師の知り合いがいるのでよく学生さんの話を聞きます。結局の所、しっかり身につく人は、家に帰っても色々作りたいものを作って公開したり、著名なプログラマ達のブログを読みまくったり、フォーラムに出入りしたり、ML に入ってたり、 twitter で刺激的な知り合いをつくるとかしていて、そういうところでめっちゃ差がつきます

学校に行くなとまでは言いませんが、学校いかないで身に付ける人は本当に多いし、学校いって身につかない人も本当に多いということは考えて下さい。

26日追記

ブクマ増えてた!ありがとう

元増田さんがどの言語をやれば・・という方だったので仕方なくこのような書き方になってしまいましたが、作りたいものが既にある人はあまり”どの言語をやるか”には拘らなくてよいと思います

そんなことよりも、今必用で/気軽に/すぐ結果がわかることをやるのが、始めてのプログラミングには大事。だから本当は、どの言語をやるかよりも何を作りたいのかを先に見つけてほしい。

目の前の意外なところにプログラミングは生かせます。できるだけ身近な、すぐ効果がわかるところからとりかかった方がプログラミングの楽しさにはやく気付けるはず。

みたいな導入口でもいいんだ。

例えば C++ でのプログラミング初心者が 0 からやるのは難しいだろうけど、既存アプリケーションプラグインなら開発のためのテンプレート目的に近い作例があってコードも短いからそれを改造するところから始められる。需要があるから楽しいよ。

目の前に実用的な目標があるってのが大事

2010-07-24

google発のProtocol Buffersについて

オブジェクトシリアライズツールであるプロトコルバッファについて書きます。

プロトコルバッファって何って方はこちらへ

Protocol Buffers 本家

http://code.google.com/apis/protocolbuffers/

XMLはもう不要!? Googleシリアライズツール「Protocol Buffer」

http://journal.mycom.co.jp/articles/2008/07/18/protocolbuffer/index.html

Protocol Buffers (Protocol Buffers の内部解説記事。とても参考になります)

http://dodgson.org/omo/t/?date=20080712

内容

プロトコルバッファは異種言語間でオブジェクトのやりとりをするための規格です。

独自の言語によりオブジェクトインターフェースを規定することで、多言語対応を行っています。

例えばこんな感じ。

  • address.proto
package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person person = 1;
}

以上のようなprotoファイルから各言語ソースコード、または何らかのデータ操作ライブラリを使いオブジェクトの処理を行います。

googleによってC++, Java, Python用のライブラリ作成されましたが、他の言語対応したサードパーティー製のライブラリがいくらでもあるので、実質的にほぼすべての言語で使えると言っても過言ではありません。

以下はこのライブラリを使ってみた感想などです。

整数型はVarintという可変長型でバイナリに保存される

数字が多きければ大きいほど、長いバイト長で保存されます。ただし、負数の場合符号ビットが立つ関係で、ほとんど常に変換後のバイト数が最長バイト数(10)になってしまいます。フィールドの型をsint32, sint64で宣言しると、各数値にzig-zags変換が行われるため、負数であってもその値の絶対値で使用バイト数が決まるようになります。

保存されるデータは各メッセージID/型/値のみ

バイナリに保存されるデータは各メッセージID/型/値のみです。なので、同じ定義の二つのメッセージ型は、プロトコルバッファ上では全く同じように扱うことが出来ます。例えば、片方からシリアライズしたデータを、もう片方の型でデシリアライズすることが可能です。

またオブジェクト連続シリアライズ/デシリアライズすることもできます。

継承されたクラスマッピング

すでに存在する継承関係のあるクラスを、Protocol Buffersでシリアライズ/デシリアライズしたい場合は次のようにします。

(Base, Derived はすでに存在するとします)

(ソースコード中になぜか日本語が書けないので、コメントはすべて英語になっています)

message PbBase {
        require int32 id = 1;
        require int32 value = 2;

        require Derived derived = 10; // - Point !!!
}

message PbDerived {
        require string string_value = 1;
}

継承元のメッセージ定義に、継承先のメッセージを持たせます。Base継承するクラスシリアライズ/デシリアライズしたい場合は、PbBaseメッセージを中心に処理を行うことで、比較的簡単に処理を実装することが出来ます。

例えばこんな感じ

Base *Base_DeserializeFrom(PbBase &amp;amp;pbobj)
{
    // Arrange the classes which inherits from Base.
    if (pbobj.has_derived()) {
        return new Derived(pbobj);
    }
    else
    ...
}

class Base {
    ...
    virtual void Base::SerializeTo(PbBase &amp;amp;pbobj) {
        // Set the fields of 'pbobj',
    }
    ...
};

class Derived {
    ...
    virtual void Base::SerializeTo(PbBase &amp;amp;pbobj)
    {
        PbDerived *derived = pbobj.mutable_derived();

        Base::SerializeTo(pbobj);
        // Set the fields of 'derived',
        ...
    }
    ...
};

protoファイルを以下のように書くと、メッセージの扱いが非常に難しくなります。

message PbBase {
        require int32 id = 1;
        require int32 value = 2;
}

message PbDerived {
        required PbBase base = 1; // - Here is the point !!!
        require string string_value = 2;
}
ログイン ユーザー登録
ようこそ ゲスト さん