中国のソースコード開示義務づけに対抗するには、スパゲッティコードしかない。
書いた本人ですら解読不能なスパゲッティがIT業界を救う!かもしれない!!
Tagged: プログラム RSS
-
fifnel
-
fifnel
色々な言語でGoogle Protocol Buffers
Google謹製のバイナリシリアライズライブラリ「Google Protocol Buffers」を色々と調査中。
データ構造をC言語の構造体っぽい書式で書くと、それを元に色々な言語のシリアライズ/デシリアライズのプログラムコードを自動生成してくれるという素敵なライブラリです。
しかし、「色々な言語」と書きましたが、現状ではC++、Java、Pythonの3言語しか対応していません。
というわけで、それ以外の言語に対応させているプロジェクトをざっくり検索してみたのでメモっときます。
オリジナル(C++,Java,Python)
protobuf – Google CodeC言語(not C++)
protobuf-c – Google CodePerl
protobuf-perl – Google CodeRuby
ruby-protobuf – Google CodeJavaScript
protobuf-js – Google CodeActionScript
protocol-buffers-actionscript – Google CodeCommon Lisp
common-lisp-protobuf – Google Code.NET Framework
protobuf-net – Google CodeMercury
protobuf-mercury – Google CodePHPが使いたいのでソースはPHPしか読んでませんが、parser/pb_parser.phpでシリアライズ用のコードを生成して、それを使うのに必要なライブラリがmessage以下に詰まってる感じですかね。
-
fifnel
「汎用的」を逃げに使うな
「ここは汎用的に作ってください」
よく仕事でプランナーから言われる台詞です。
時々プログラマーからも言われたり、自分で言っていることもあります。この「汎用的」という言葉ですが、良く言えば「どんな状況にも柔軟に対応出来る」という事です。
しかし、悪く言えば「具体的なことは現時点で決まっていない」という事でもあります。
「汎用的」というのは究極的には直接プログラミング言語を書くのが一番汎用的なのですが、おそらくそんなことは誰も求めていなくて、もっと限定された機能を手軽に利用したい、というのがニーズでしょう。
となるとプログラマーの作業はプログラミング言語から手軽に利用する手段へと各機能をコンバートするという事になります。
ここで具体的なことが決まっていない場合、どの機能をコンバートすればいいのかが曖昧になってきます。
後々使ってみると、アレが足りない、コレはこうじゃなかった、なんて事もあります。
結局プログラマーがわざわざ機能をコンバートするよりは、最初からプログラミング言語でベタで作った方が早くて楽だった、って事もあります。要するに何が言いたいかというと、具体的なことが決まっていない段階で「汎用的」を持ち出すのは問題先延ばしの逃げでしかなく、しかも無駄な作業が増える可能性も孕んでいるのでやめましょうってことです。
「汎用的」のコストはベタで作るよりも多くかかります。
確かに汎用的にした方がメリットが出てくる損益分岐点のようなものは存在しますが、そこを精査するためには「では汎用的にしたシステムで具体的に何を作るのか」をハッキリさせないといけません。私の経験則から言えば、何か汎用的なものを作る場合は、具体的なものを作った上で、少しずつ汎用的にするのがうまく行く方法だと思っています。
最初から汎用的に設計したものほど、実際に使ってみると抽象的すぎて役に立たない、ということは多いものです。
-
みけねこ
私、プランナーという立場に長年いましたが、とても恐ろしくて「汎用的」等という言葉は使えませんでした。
事細かく、仕様の指示をしておりました、ええ。
だって、任せておくと、プログラマってどんな仕様で作るか信用ならないのですもの。
済みません、全く信用していなくて済みません。
(加賀愛風に読むこと)
-
-
fifnel
Haskellの理解が急激に進みそうになったきっかけ
しばらく前からプログラミング言語のHaskellをチマチマと勉強してるんですが、いまいち分かったようで分かっていないという期間が続いていました。
しかし、先日、「ふつうのHaskellプログラミング」の「部分適用」を読んで急に何か理解が開けたような気がしました。
引数が複数あるような関数でも、結局は一つの引数を取る関数がさらに関数を返して、関数が次から次へと繋がっていくような感じなんですね。
Haskellの特徴を示すには「部分適用」を真っ先に説明しちゃうのもアリなんじゃないかと思いました。
というわけで、次はいよいよクラスとかモナドとかその辺に着手します(`・ω・´)
-
fifnel
81行から成るWordPressの自作投稿フォーム
モバイルからの投稿を最終目標に色々調べていますが、WP投稿用のAPIがあるので楽ですね。
難点はAPIに関するドキュメントが少ない‥‥というか現行バージョンのタグ周りに関しては皆無に近いので、コードを読んで使い方を調べないと‥‥ってくらいですが、PHPのコードを読む勉強になるので良しとしましょう。んで、とりあえず投稿だけするスクリプトをテストで作りました。
ユーザー認証もサニタイズも文字コード変換もしてないですが、テストなのでその辺はご愛敬。WPへの投稿は基本的に配列に色々つっこんで、wp_insert_post()の呼び出しでOK。
成功すればポストID(管理ページで見られる各記事の番号)が帰ってきて、失敗したら0。iG:Syntax Hiliterのテストをかねてソースを貼ってみる。
PHP:- <?php
- // これをするだけでWordPressのAPIが呼び出し放題!
- require_once '../../wp-config.php';
- ?>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- </head>
- <body>
- <h1>WP投稿テスト</h1>
- <form method="post" action="index.php">
- <table border="0">
- <tr>
- <td>タイトル</td>
- <td><input type="text" name="title" value="" /></td>
- </tr>
- <tr>
- <td>内容</td>
- <td><textarea name="content"></textarea></td>
- </tr>
- <tr>
- <td>投稿者名</td>
- <td><input type="text" name="author" value="" /></td>
- </tr>
- <tr>
- <td>タイプ</td>
- <td><input type="text" name="type" value="post" /></td>
- </tr>
- <tr>
- <td>ステータス</td>
- <td><input type="text" name="status" value="publish" /></td>
- </tr>
- <tr>
- <td>閲覧パスワード</td>
- <td><input type="text" name="password" value="" /></td>
- </tr>
- <tr>
- <td>カテゴリ</td>
- <td>
- <?php
- $categories = get_categories();
- foreach( $categories as $category )
- echo '<input type="checkbox" name="categories[]" value="'.$category->cat_ID.'" />'.$category->cat_name . '<br />' . "\n";
- ?>
- </td>
- </tr>
- <tr>
- <td>日付</td>
- <td><input type="text" name="date" value="" /></td>
- </tr>
- <tr>
- <td>タグ</td>
- <td><input type="text" name="tags" value="test,foo" /></td>
- </tr>
- </table>
- <input type="submit" value="送信">
- </form>
- <?php
- // とりあえずタイトルと本文は必須ってことにしとく
- if( $_POST['title'] == '' || $_POST['content'] == '' )
- exit;
- $postarr['post_status'] = $_POST['status']; // publish, draft, private, inherit, future
- $postarr['post_type'] = $_POST['type']; // post, page, attachment
- $postarr['post_author'] = get_profile('ID', $_POST['author']);
- $postarr['post_password'] = $_POST['password'];
- $postarr['post_category'] = $_POST['categories'];
- $postarr['post_content'] = $_POST['content'];
- $postarr['post_title'] = $_POST['title'];
- $postarr['post_date'] = $_POST['date'];
- $postarr['tags_input'] = split(',', $_POST['tags'] );
- $postarr['post_excerpt'] = ' '; // とりあえず空っぽにしとく
- if( wp_insert_post($postarr) == 0 )
- echo '<div style="color:#ff0000">投稿失敗!!</div>';
- else
- echo '<div style="color:#ff0000">投稿成功しました</div>';
- ?>
- </body>
- </html>
fifnel
ゲームプログラマー向け、最もタメになる「初心者用言語」はやっぱりC++です
最もタメになる「初心者用言語」まとめ - UK is not Britonish - ハチロク世代
誰もマジメにBASIC系言語を挙げてないのが悲しいようなはてな村らしいような‥‥w
ちなみに、ゲームプログラマーを目指す人に対しての「初心者用言語」はC++だと思うよ。
C#とかJavaはダメ。
自分で出したもの(new)は自分でお片付けする(delete)クセは子供のウチにしつけしないとね。
そういや、大昔に初心者はA、B、Cの順で学べとか言われたなぁ。
アセンブリ言語、BASIC、C言語ということらしいけど‥‥アセンブリの後にBASICは無いだろって気もしたけど、アセンブリやっとけばコンピューターの低レベルなところが分かるからタメになるんだと。


みけねこ 16:42:16 on 2009/4/29 水曜日 パーマリンク | ログインして返信する
天才的発想ですwww