はてなキーワード: ソースコードとは
私は昨年度、ゲーム系専門学校を卒業したが、内定なしでの卒業だった。
就職活動は見かけ上は頑張っていた。見かけ上は。
しかし、これは就職課の言う「受けろ受けろ受けまくれ!」という言葉を実践していただけで、今思うと受かることより受ける事に比重を置いていたのが良く解る。
受ける会社に入る気はあったのだが、入ってから何をしたいかとかは一切考えず、とにかく受けられるから受けていた状態である。
良く書き損じていたので履歴書は何枚書いたかも良く解らないけど、中身のない履歴書だなとは活動中常々思っていた。
正直なところ、活動中は自分は何も持っていない人間だと思い込んでいたし、今でもそう思う
というわけで、今までの人生を振り返ってみることにする
幼稚園児の頃は普通に友達を作り良く遊んでいたが、基本いじめられっこであった
家では偶にMS-DOSを触ってインベーダーゲームだのブロック崩しだのをやっていた
小学校に入ってからも低学年の頃は大方似たようなことをしていたが、PCはWindows95になっていた
CUIとはおさらばして、GUIでレーシングゲームとかをやっていた記憶がある
中学年くらいでネットとエロサイトを覚え、Yahooでアダルトサイトを探していた
この頃にはWindowsの基本操作はマスターしていて、ローマ字も当たり前に知っていたので小学校のローマ字の授業は楽ちんだった
当時の私は非常に馬鹿だったので、毎回「ア」とだけ入れて検索して、何ページもめくって「アダルト」のカテゴリにたどり着いていた
勿論使っていたのは親のパソコンだったので、ばれないように履歴を消したり、Q2ダイアルのアプリを消す方法も身に付けた
誰からも教わっていないのにQ2ダイアルのソフトが出ないように始末できた自分は凄かったと思う
この頃は文系である社会と理系である理科の成績だけが妙に高かった
中学生活が始まると親からお古のノートパソコンを貰うことが出来た
この為、非常にインターネットに入り浸る最悪の生活が始まった
これが非常に楽しく、社会人や主婦を相手にし良くお喋りをしていた物である
あちらからしたら、こんな年少者がいるなど驚愕の沙汰であったのは間違いがない
そうこうしていると、親からはネットの禁止令が出たが、幸いにもパソコンと回線だけは奪われなかったので、ありとあらゆる手段を使い隠れてネットをしていた
丁度自室の真上の部屋にモデムがあったので、親がトイレに行った隙などを見計らい電源を入れて、水が流れた音がしたら電源を切るなどの姑息な事を良くしていた
最後はモデムのある部屋に南京錠を掛けられたが、ばれないように錠前そのものを外して部屋に入ったりしていた
勿論、勉強などしているはずもなかった
自体はどんどん悪い方向へしか行かなかった
因みに部活はテニス部に入ったのだが部活は性に合わないという事で三ヶ月で抜けている
中学2年になるとゲーム系のコミュニティサイトに入りびたりはじめ、そこでの交流に嵌ってしまう(そこの年齢層は小5~高1程度)
そうこうしている内に自分のWebサイトを立ち上げようと思い、HTMLの勉強を始めた
リファレンスサイトは殆ど見ることなく、正直ソースコードの改変で知識を蓄えていた
ぶっちゃけ中身のないサイトだったが、毎日日記だけは書いていた記憶がある
このサイトを運営していく中で色々な事もあった
他人のサイトで迷惑を掛けたり、こっちが掛けられたり
まぁ中2らしいと言えばらしい、そんなネットライフを送っていた
そして中3になり、更に事態は悪化した
リアル友人の勧めや、ネットで知り合った人たちの勧めなどで人生は素敵な方向へねじ曲がる
まずラグナロクオンラインとかいうタイトルを知ってしまう
まだこの頃プレイできる環境にはなかったのだが、プレイしたいという強い願望にかられた
それとはまた別にシスタープリンセス、灼眼のシャナ、Kanon、AIR、みずいろ、月姫、水月などと言った作品と出会ってしまう
いわゆる萌え系作品への出会いだ
高校に入ると新しいノートパソコンを親から買ってもらい、ラグナロクオンラインを始めた
これのおかげで高校の成績は常にカスだった
高校時代やったことなんてラグナロクオンライン以外にいう事がないくらいだ
しいてもう一つ言えば、小遣いと昼飯代とお年玉を全てエロゲーとエロサイトに回して3年間で20万くらい使ったこと
イーバンクはやばかった
そして上京してまで専門学校のゲーム学科に入った、今思えばソフト学科に入るべきだったと思う
理由は座学より実践でしょ!とソフト科の教師に言われたというそれだけ(ゲーム学科は実践、ソフト学科は座学が基本だった)
心機一転ネトゲは辞めようという事でアカウントまで消したのだが、勉強への熱意は半年で消え
その後はネトゲのアカウントを消したという後悔の念に苛まれて何もやる気が起きなかった
二年目にして、ネトゲへの復帰を果たし、再びネトゲ廃人になった
就活もしていたが、冒頭で述べた通り芳しくはなかった、そもそもやる気がなかった
ただ、そんな中でも真面目に受けていた授業がなかったわけではない
1年~3年にかけ、ゲームプログラミングはクソだと思っていたのだが、ゲームと関連性のない授業はまともに受けていた物が一部にあった
特に3年のアーキテクチャとアプリケーション開発は大分真面目にやっていた
最初はフリーターにでもなろうかと思ったが、決心が固まらず新卒者就職応援プロジェクトに応募した
そして、もうそろそろ一年が経とうとする今、結果として3社回った
専門学校での就活は40社受けたのだが、業種は絞らずありとあらゆる業界、業種を受けていた
働ければ何でもいいと思っていた
でもインターンをしてみて思ったのは、働ければ何でもいいなんてことは全くなかった
始めの工業系は仕事がなかった、楽ではあったのだが何か違うように感じた
営業系は仕事はあるが、とてもじゃないがモラルも糞もないし、その内訴えられて潰れそうなことばかりしている
少なくとも社会貢献と言うより、社会を破壊する業務しかしていない
客を欺き、金が落ちた後なら客がどうなろうと知った事ではない
とてもじゃないがこんな思想の元で働きたくはないと思った
ニコニコスマイルで限りなく詐欺に近いか、正真正銘の詐欺である営業をさせられるのは辛い
そう、働ければ何でもいいなんて言うことはなかった
そりゃ座ってるだけでお金がもらえるなら、それに越したことはないんだろうけど、それだと将来が不安過ぎる
もし会社が潰れたらどうなるのかなんて考えた日には転職先がありゃしない
気が付いたら、もうネトゲはしていなくって、むしろほとんど遊んでいない状態だ
今はまだその詐欺営業の会社に身を置いているのだが、業務上でも色々考える事が合ったりして、それを考えたり
後はPHPでTwitterのAPI叩いたりするものを作ったり、Perlでファイルフォーマットの変換スクリプトを組んだりしている
最近こういう事をしてて思うのは、プログラミングっておもしれーなってことだ
正直今の私の技術力なんてミジンコレベルなのだけれども、今更やっと進みたい道が見えた気がした
人生の本当に長い間、多分私は寝ている時間を除けばパソコンに触れている時間が最も長かったかもしれない
今まで散々遊んできた分際でいうのも生意気だろうが、IT系の会社に行きたい
やりたくもない事をやっても仕方がないし、やる気が出ないからどの道何も進まない
ITならやる気が出るのか?と聞かれたら、少なくともほかのよりは出るとしか答えられないけど、でもやりたい
就活でも最終面接まで二度も行けたのはIT系だけで、一般職の結果は散々たるものだった
正直、そこらの人よりはITが好きだし、技術に興味もある
ネトゲやつまらない事しか書いて無かったBlogやTwitterも今では更新頻度が減り、技術勉強ノートと化しているし、Pukiwikiを立ててノート代わりに使ってもいる
自分が長く接してきたのはWebだから、特にWebのシステムやサーバーの運用に興味がある感じ
あとは、Tweenみたいにな多くの人に利用される一般アプリも作ってみたいって願望もあったりはしますね
今までは情熱の欠片もない就活ばかりしてたけれども、今度からはもっと上手くいきそうな気がします
ここ最近まで大して就活する気がなかったけれど、今になってようやく就職する目的、情熱が見つかった感じです
一体ここまで遊んできた私に何ができるのかは謎ですが、出来る限り今後は頑張って行きたいと思います
ぶっちゃけ遊ぶだけならもう散々遊んできたしね
そこで置き忘れてきたものを今からでもなんとかして取り戻す
あー、オシイなぁ、すごい優秀なんだけどなぁ・・・
それとも、これってあんた自身の話だったの?
難しいねぇ。うかっとすると、ネットにオープンソースが落ちている時代。
自分で書くべきなのか・・・どうなのか?
って書いてあるから
って返したんだよ。
それが長話につきあってみるとどうだい。「どうなのか?」も何も無いんじゃん。あんたの中で結論出てるんじゃん。
しかも何で未来とか再発防止だとかそういう話にしちゃってんの?
それでも敢えて「じゃぁ、何をどうすればいいのか?という未来が全く見えてこない。」
と言うなら、下記の点だね。
私の指示が悪く、調査をしないで書かせてしまったために、不当なコードが上がってきたためにやり直しを命じた。
かかねーよ、そんなレビュー書。
書こう。
原因工程を明確にしよう。
「責任はわたしにございます、わたしが悪うございました」なんて言わなくていいから。
ようするに未来に起きる自称の再発防止として、ネタとして書いているものに、俺がオシイといわれても
じゃぁ、何をどうすればいいのか?という未来が全く見えてこない。
なぜならば、指示するほうが悪いから次回から指示しなおしをしなければいけないというのは、自明の理であり、わざわざ指摘することではないから。
うん、それが自明なのはさぁ、前提として「オープンソース使わない事=ダメな事」って事が自明な場合だよね。
だから、「オープンソースがそんなに大事なら」と仮定した上で、「事前に指示しろ」って書いてるわけ。
仮定が必要で無いなら、お前の中で結論出てんじゃんの下りに戻れ。
別にあんたの行動を制御しようって話じゃない。
ここでは、それ以前の話しか求めていない。
どんどんおかしな方向に行くから、「おかしいよ」ってレスが続くだけ。
さっきの「レビュー書を書け」って話もさ、厭ならやらなくていいよ。
でも、おかしな理屈はつけなくていい。
「厭だ、やりたくない」で充分だよ。
バッファロー製品お問合せ受付の件 : お問合せID No.xxxxxxxxxxxxxxxxxx
平素は弊社製品をご愛顧賜り、誠にありがとうございます。
バッファローE-Mailサポートよりご質問いただいた件についてご連絡いたします。
※今回頂戴しましたお問い合わせに対するご返信、追加のご質問は、
下記URLよりお問い合わせいただきますようお願い申し上げます。
http://buffalo.jp/php/lon.php?to=webx&id=xxxxxxxxxxxxxxx
===========================================
とともに深くお詫び申し上げます。
おりません。
通常は下記ページにて公開を行っておりますが、
また、今後同様のことがなきよう再発防止に
尽力して参ります。
===========================================
[ご質問内容]
オープンソースソフトウェアやGPL関連の質問の対応がこの窓口でで
きないのであれば対応できる窓口を案内していただけるとありがたい
です。
よろしくお願いいたします。
[ご質問内容]
DWR-PGに使用されているAndroid OSはGPLとApacheライセンスのデュ
アルライセンスですが、カーネルなどのLinux由来な部分はGPLとなる
ため、GPLが適用される部分のソースコード開示をお願いいたしま
す。
質問が2個になってしまうのは私が1つにまとめそこねたため。
結果としては、担当者の間違いでした。DWR-PGのGPL適用部分は通常のソースコード公開ページに公開されるそうで、解決ですね。
これは、質問送付先からして無理筋だと思う
そもそも
Buffaloにソースコード請求したら大変困ったメールが返ってきた
ではなく
Buffaloのサポートセンターにソースコード請求についての質問をしたら大変困ったメールが返ってきた
が正しい
バッファロー本社には1ミリも伝わってないし、本社の意向は1センチも反映されてないぞたぶん
https://online.buffalo.jp/toiawase/mail/modem.html
という一行質問を送ったら
続き:http://anond.hatelabo.jp/20110119132547
DWR-PGのソースコードのGPL由来部分を請求したらこんなのが返ってきた。
バッファロー製品お問合せ受付の件 : お問合せID No.xxxxxxxxxxxx
xxxx様
平素は弊社製品をご愛顧賜り、誠にありがとうございます。
バッファローE-Mailサポートよりご質問いただいた件についてご連絡いたします。
※ご返信や追加のご質問は、お手数ではございますが
必ず下記の返信用「お問合わせフォーム」にてご連絡ください。
ご返信できかねます。
※mel_support@melcoinc.co.jp宛にお問合せ頂いてもご返信できかねます。
▼返信用お問い合わせフォーム▼
【下記をクリックして返信してください】
弊社製品のご利用にあたり、ご不便をおかけして誠に申し訳ございません。
■大変恐れ入りますが、GPLソフトウェアのソースコードにつきまして
誠に申し訳ございませんが、社外秘情報のため、公開することができかねます。
【無線】
http://buffalo.custhelp.com/app/answers/list/p/1,2
●ユーザー登録をいただいたお客様へは新製品や製品のアップデートを含む
ぜひご登録ください!
http://buffalo.jp/support_s/mel-line/
●ユーザ同士のコミュニティサイトSAK2の仲間になりませんか?
[ご質問内容]
・DWR-PGに含まれるGPLソフトウェアのソースコードを公開していた
だけないでしょうか。
質問が悪かったのはまぁ認めるが、GPLってなんなのかわかってんのかこいつ
http://opensource.buffalo.jp/ に公開されてるぞ、という指摘がありますが、無線LAN機器の一覧であるhttp://opensource.buffalo.jp/gpl_wireless.html では公開されていません。
Webの問い合わせからたどった先がここだったのでここに送ったわけですが、文面も送信先も不適なのでまぁしかたない結果ではありますね。
いちおう、昔のこの産業はウォーターフォールで、ソースコードは全レビューというのにより、そういう腐ったコードは入らないようになっていたんだけどね。
アジャイルだなんだと、さわいだあげく、ろくに試験しない、ろくにレビューしないで この様さ。
いちおう 自分のチームは 全レビューを維持している。 あとで発覚するよりも コーディング中に発覚するほうが、はるかに安くつく。
後ろのほうで上の方にコードが積み上がって、もうどうにもならなくて破綻したプロジェクトなんて、いくらでも知ってる。
部下のコードをレビューしない上司は害悪だと思い始めているし、こういう酷いコードを下の方に入れる奴はマイナスの稼働だと思っているが・・・
そんな事関係ない、兎に角人を突っ込めばプロジェクトは成功するんだ。 そして、今はオープンソースの時代でコードはいっぱいあるから、単価は安くていいんだ。
みたいなのは、日本のソフトウェア産業。 安いコードで安い奴で、他国と競争しようっていうんだから、終わってる。
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ソースを入手可能。
完全に一致を作るための勉強法
コメントもたくさん頂いてまして、それにお答えするのに「ブログでもつくろうかいな」とのぼせましたが、そんなテーマで続くわけもないので、やはりアノニマスダイアリーにしました。
【製作期間について】
まず、皆さん仕事しながらたった4ヶ月で!と褒めて頂いてますが、たったじゃないですよ。4ヶ月って。
仕事が終わって、毎日2~3時間。土日関係無くやると、多分300時間くらいになります。
専門学校の2年間の授業時間がこのくらいだったりするんじゃないですかね。結構長いです。
【モチベーションの維持について】
モチベーションを保つのがすごいというのも褒めてもらいましたが、私は一回やり始めると、意外に長く続きます。
コツがあるんです。
毎年、日々の単純作業が続かない新入社員が入ってきますが、そんな新人に言います。
「息をするように続けるんだよ。」
毎日やるんです。土日関係無く。毎日。
前回の日記で「勉強した」と何度も使ってしまった為、誤解をされている方が多くいらっしゃいます。
正確には、「調べ」ました。
職業柄「調べる」という事が多い為、WEBサービスを作るという事に関してはそれが訳に立ちました。
追記でも書いているのですが今回のシステムはほとんどが、先人達が作った既存のシステムがベースになっています。
ぱくりと言われてしまえばそれまでなんですけど、丸ごとはやってないですよ。というか、丸ごと合うモノがなくて、いろんな所からソースコードを拝借させてもらいました。
なので、中身はぐちゃぐちゃです。けど、検索システムはそれでも200行くらいしかありません。クローラーは80行くらいでしょうか。
【HTMLについて】
というか、それすら途中で挫折してAdobe社のDreamWeaverというソフトを使いました。
適当に書けばソースは綺麗にしてくれるし、CSSの体裁はプロパティを設定しながら見た目のまま調整すれば良いし、一番助かったのはテンプレート機能でした。
最初は全部のHTMLファイルをコピーしながら作っていたのですが、ヘルプを見るとテンプレートとライブラリという機能があるのをしってライブラリがいまいち分らなかったのでテンプレートを使いました。
■Dreamweaver便利
■テンプレート便利
【Javascriptとの出会い】
最初に本やで立ち読みした本に、「プログラムをやってみよう」ということでJavascriptの事が書いてありました。
なので、自然とプログラムの最初のさわりがコレになっただけなんですね。
でも、アラートを出したりとかばっかりで、面白くありませんでした。
インターネット黎明期からのネットユーザーなのですが、「最近よく見るページが移動しないのにページの中身が切り替わるやつかっこいいよな」と思って「ページ遷移しない 読み込み」で検索をすると、Ajaxという文字を見つけ、「ajax 入門」で検索してトップに出たサイトでAjaxの概要だけ調べて、「ajax 簡単」でprototype.jsとjQueryの文字を見つけて「ああ、jQueryってよく見るな」というのがjQueryとの出会いでした。
「最近よく見るページが移動しないのにページの中身が切り替わるやつ」は、非同期通信という名前でした。
jQueryを使うと、下記のように1行コピペするだけで外部のHTMLを読み込む事ができました。
--------------------------------------------------------------------------
var http = $.get("abc.html",null, function(data) {$("#main").html(data);});
--------------------------------------------------------------------------
すごい簡単。最初は意味は分りませんでしたが、目的の事ができればそれで良いので次に進みました。
■jQueryすごい
■非同期通信かっこいい
【Perlとの出会い】
jQueryがちょこっと書くとダイナミックに色々変わってくれるので、日々いろんなプラグインを探して遊んでいました。
でも、作りたかったのは検索システムだったのを思い出し、また近くの大きな本屋に。
検索するパソコンで”プログラム 検索”で探しだした棚に行くと、「CGI/Perl」の本棚でした。
大量にありすぎてどれをかって良いか分らなかったので、いくつか立ち読みして家に帰り、「CGI/Perl 入門」で検索すると
このページにたどり着きました。
Windowsだった為、ActivePerlを入れていくつかプログラムをやりましたが、これがまた面白くないんですね。
すごい地味で。このPerlをさわった最初の1日は正直かなり苦痛でした。
その後、”AV女優の検索システムって不動産の検索システムに似てるな”って思って「CGI/Perl 不動産検索 無料」で検索したら、http://www.yumemaboroshi.net/ってサイトが引っかかって、ここのおかげでかなり進みました。
先人が作った大量のプログラムがダウンロード出来るサイトなんですね。
【PHPとの出会い】
いくつもダウンロードしては、サンプルと中身を見てを繰り返してたら、Perl/CGI以外にPHPがたくさんありました。
どう違うのかと思い検索したら、PHPはすごい叩かれてて、Perlがえらいみたいに書いてあったのですが、叩かれてる理由がいまいち理解できませんでした。
結果PHPを使う事になったのですが、その大きな理由は、DreamweaverでPHPが開ける。なおかつHTMLファイルをそのまま使うテンプレート機能のプラグインがあったという事でした。
PHPでテンプレートを使うには、Smartyというプラグインを使えば良いということが分って、「Smarty 入門」で調べて、いくつかのタグを覚えました。
実際にSmartyで使ったタグは、{$変数}と{if}{/if}と{foreach}{/foreach}の3つだけだと思います。
色々高機能らしいのですが、まあ目的は達成できたのでいいか。と。
PHPの検索プログラムは、HTMLファイルでボタンを押すと、テキストファイルに書いてある内容を、表示してくれる簡単なものを作って、そこに肉付けしました。
(最終的にテキストファイルがSQLサーバーになりましたが。)
■PHPはDreamweaverと相性がいい
■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以外は。なんであんなに読みづらいんでしょう。
と、またもや長くなりすぎたのでこの辺で。
DMMのクリックが10万クリックほどあり、その結果、購入された金額が、なんと!
報酬額が245円。
----------------------
今回のサーバーダウンは結構深刻でなかなか復旧が出来ていません。。。
申し訳ないです。
----------------------
http://twitter.com/#!/kanzen21_com
----------------------
RubyでうどんげQuine(とAA型Quineの作り方講座)
perl - Quine.pm で(ほぼ)あらゆるPerl Scriptをquineに
Ruby、Perlと来たら、次はもうPHPしかないでしょう。
そもそもQuineとは何か?Wikipedia先生にご登場願いましょう。
コンピュータプログラムにおけるメタプログラミングの一形態であり、自身の完全なソースコードだけを出力するプログラムである。
なるほど。
くくく。実はこの分野であればRubyやPerlなんぞ足元にも及ばない。
PHPはまさしく最強なのだ
a
なんと一文字!
$ php quine.php > q.php $ diff quine.php q.php
自身の完全なソースコードだけを出力するプログラム、ここに極まり!!!!!さすが天下のPHPだ!
汚い言語仕様や、高度なテクニックなど、必要ない!過程や方法なぞどうでも良いのだ!
・・・・・・・・・・・・さて、そろそろ本題に入ろう。
上記の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だったのでとりあえずパスした。それにそもそも関数を使うよりもコード量が減るのか甚だ疑問であり、結局この形に落ち着いたわけなのだ!
おわり。
ブログに書くと、一発で仕事バレするようなニッチなネタなのでここにメモっとく。
http://www.atmarkit.co.jp/fsys/zunouhoudan/091zunou/xmos_cpu.html
ここではボロカスに書かれていたが、やっと安い評価キットが出はじめた。
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言語を混ぜたような感じ。
・小規模な組み込み向けの用途において、安価なチップで、並列処理とかイベントドリブンな処理が可能、という点が画期的。並列処理は大規模コンピューティングだけのものじゃないよ!という熱いメッセージ。
・ハードウエアの動作をソフトでエミュレーションする処理は、いわゆる「ワンチップマイコン」よりは得意&楽。
・XCは言語仕様としてポインタが削除されてる(!)。XCをC言語の派生言語と呼んでいいのか迷う所。
・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に取り組めば、あっという間に国内のこの界隈では有名人になれるかもしれない。強いて言うならそこが唯一の魅力。
http://anond.hatelabo.jp/20090220065041
大量のアクセスによりシステムがダウンしたら、新しいシステムと交換してくれる。
アクセスした人には、「君は一個人だからお金があまりないでしょう? 今回はおじさんが直してあげるから、今後は取り扱いに注意してね」と頭をなでなでしてくれる。
と説明した上で、
「他の会社のものでも同じ。どこにでもある問題」
と競合他社が同じ問題を抱えてることを説明。
どうしてもお客が納得しない場合はサーバ用のカバーを送ってくる。
このシステムの不具合のみならず、他のシステムでも次々に不具合が発覚。
それどころか、ソースコードのリファクタリング不足によるスパゲティコードの濫造、不具合の出たシステムを、名前だけ変えてそのまま再出荷などの偽装が発覚。
その件について社長にインタビューすると「私だって寝てないんだよ!」と切れられる。
飽きたのでこの辺でやめとく。
ウィルスの製作者を犯罪者として逮捕するために、わざわざ新しい罪を定義するらしい。
ウィルス製作の能力を持っている事は簡単に証明できてしまうが、ウィルスを作ったかどうかは、本人の自白や捜査への協力が無ければ証拠は取れない。そして、ウィルスを作っていない事を証明することはprobatio diabolicaであり、不可能である。
やばいデータは暗号化しているのが普通であるから、ウィルスのソースコードや資料も、当然、暗号化されているであろうし、そのデータにしても、一定時間ごとに、所定のパスワードでアクセスしなければ、自動で全データを抹消する。間違ったパスワードでアクセスしたら、ポルノ動画等の、まるっきり別のデータを渡しながら、裏で指定しておいたデータを消去する。所定の手続きをせずにシャットダウンしたり、立ち上げてから、あるいは、HDDに通電してから一定の時間内に所定の操作をしないと、やっぱり指定したデータを消去するといった自爆型トラップを仕掛ける位は、まともなウィルスを作れる程度の能力があるならば、普通にやっているであろう。
ソースコードや開発資料を証拠物件として押さえられなければ、作れる能力がある事は判明しているが、本当にウィルスを作っていたか、そのウィルスの本当の作者なのかどうかは、自白剤でも使わなければわからないとなる。
この話の出発点が、入手した人が、その人の権限でクリック等の作動開始を命じて動作しない、いわゆる拡張子偽装型破壊プログラムをウィルスとして、それを取り締まる法律を作ろうという話なので、話の筋が悪くなっている。こういった下らないプログラムをウィルスと主張している時点で、間違っているのである。
拡張子偽装型破壊プログラムの場合、入手した人が作動を命じない限り何も被害を発生させないのだから、悪意をもって偽装した破壊プログラムでしかなく、虚偽説明による詐害行為であって、被害者がマヌケなだけでしかないし、その作成者も、盗んだデータを直接自分の支配下に送りつけているという時点で、確実に足がつく行為をやっているマヌケでしかない。
ウィルスとは、ターゲットマシンに侵入し、システムアカウントを乗っ取って踏み台にしたり、データをコピーし、所有者に気付かれないまま、証拠を消して消えるというところまでやるものである。そして、そういうウィルスが存在している事を前提に、インターネットに繋がったマシンの中の情報を加工しておくというのが、情報戦の攻防となる。
本物のウィルスを作ろうとして、バグのあるままでリリースしてしまい、異常アクセスを発生させてしまったり、侵入先の所有者に気付かれたりといったドジを踏んで、ウィルスの存在が表沙汰になるのである。人々に知られているウィルスは、ウィルスとしては,すべて、失敗作といえる。
インターネットは情報戦の戦場であり、平和ボケしたマヌケを過保護する前に、平和ボケを治療するのが先である。戦場には、良く訓練された兵士だけが供給されなければならない。
ウィルス作成者は、捕まるようなドジは踏まないし、証拠を消す所までやる。拡張子偽装型破壊プログラムごときをウィルスと法によって定義するのは、恥を晒す行為なので名称を変えるべきであろう。せいぜい、迷惑プログラム作成罪ぐらいであろう。勝手に送りつけてくるという点では、迷惑メールの方がはるかに被害が甚大である。
それがやりたいなら、ボタン1個で勝手にネストしてくれる開発環境のエディタ使ってくれ。
viしかつかえない?いや、今時、windows側でnfsなりsmbなりで、マウントしてwindowsのツールでエディットせいや。もしくは、マクロぐらいくめや。
いや、うん。プログラマ自体はさ、たかだか数Kか、十数Kしかみないから、それでいいんだろうけど。
それを組み合わせて、数百Kとかのソースコードをメンテナンスする身になってくれ。
世の中には、アプリ全部を端から端まで、みているアーキテクトという人間もいるんだよ。
え?アーキテクトはコードは見ない?いやいや、ご冗談を。メインリポジトリ配下は全部見なきゃアーキテクトなんてやってられないよ。
もちろんマクロにではあるけど。何かあったらミクロに見ることもあるわけで、そんときに検索していてif 0とかだと、イラッと来る。しかも広域。
http://anond.hatelabo.jp/20100725025127
"どうすればいいか"を教わって、プログラミングが身につく人は多くありません。"なにをやりたいのか"を自分で生み出せないと、詰まってしまうし、なにより楽しくありません。
やりたいことがあれば手段は後からついてきます。これは物作り全般に言えることです。特に学び始めにおいてモチベーションを維持し勢いをつけるのに大事なのは"やりたいことがあるか"、もっと具体的に言うなら"作りたいものは何か"です。これがないと始まりません。それがどうしてもないなら、そういう状況に自分を追い込むのも有効です。仕事でどうしてもやり遂げなければならない状況に追い込まれれば人間 0 からでも身につきます。実際自分がそうでした。
とかく、プログラミングというのは手段さえ知れば、あとはだれがやっても同じ結果が出る生産業だと誤解されがちです。そういう認識で学ぼうとしても楽しくありませんし、本質を掴みにくいので応用が利かなく上達しにくいです。
本質は絵や音楽と同じです。言語を覚えるということは道具の使い方を覚えることでしかありません。音楽の理論や絵筆の使い方を知っているだけで、すぐに素晴らしい音楽や絵ができるでしょうか。殆どの人がそうは思わないはずです。プログラミングもそれと同じです。作りたいものがある人が圧倒的に強いのです。
んー、ここまで読んでも「やりたいことはないけどとりあえず勉強したい」というなら、すぐに動くものをつくりやすい言語がお勧めかなあ。
Google App Engine で Python をやるとか。 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 で刺激的な知り合いをつくるとかしていて、そういうところでめっちゃ差がつきます。
学校に行くなとまでは言いませんが、学校いかないで身に付ける人は本当に多いし、学校いって身につかない人も本当に多いということは考えて下さい。
元増田さんがどの言語をやれば・・という方だったので仕方なくこのような書き方になってしまいましたが、作りたいものが既にある人はあまり”どの言語をやるか”には拘らなくてよいと思います。
そんなことよりも、今必用で/気軽に/すぐ結果がわかることをやるのが、始めてのプログラミングには大事。だから本当は、どの言語をやるかよりも何を作りたいのかを先に見つけてほしい。
目の前の意外なところにプログラミングは生かせます。できるだけ身近な、すぐ効果がわかるところからとりかかった方がプログラミングの楽しさにはやく気付けるはず。
みたいな導入口でもいいんだ。
例えば C++ でのプログラミングを初心者が 0 からやるのは難しいだろうけど、既存のアプリケーションのプラグインなら開発のためのテンプレートや目的に近い作例があってコードも短いからそれを改造するところから始められる。需要があるから楽しいよ。
オブジェクトのシリアライズツールであるプロトコルバッファについて書きます。
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
プロトコルバッファは異種言語間でオブジェクトのやりとりをするための規格です。
独自の言語によりオブジェクトのインターフェースを規定することで、多言語対応を行っています。
例えばこんな感じ。
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用のライブラリが作成されましたが、他の言語に対応したサードパーティー製のライブラリがいくらでもあるので、実質的にほぼすべての言語で使えると言っても過言ではありません。
数字が多きければ大きいほど、長いバイト長で保存されます。ただし、負数の場合は符号ビットが立つ関係で、ほとんど常に変換後のバイト数が最長バイト数(10)になってしまいます。フィールドの型をsint32, sint64で宣言しると、各数値にzig-zags変換が行われるため、負数であってもその値の絶対値で使用バイト数が決まるようになります。
バイナリに保存されるデータは各メッセージのID/型/値のみです。なので、同じ定義の二つのメッセージ型は、プロトコルバッファ上では全く同じように扱うことが出来ます。例えば、片方からシリアライズしたデータを、もう片方の型でデシリアライズすることが可能です。
またオブジェクトを連続でシリアライズ/デシリアライズすることもできます。
すでに存在する継承関係のあるクラスを、Protocol Buffersでシリアライズ/デシリアライズしたい場合は次のようにします。
(ソースコード中になぜか日本語が書けないので、コメントはすべて英語になっています)
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;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;pbobj) { // Set the fields of 'pbobj', } ... }; class Derived { ... virtual void Base::SerializeTo(PbBase &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; }