Tagged: プログラム RSS

  • fifnel 16:30:27 on 2009/4/28 Tuesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: プログラム, 時事, 中国   

    中国のソースコード開示義務づけに対抗するには、スパゲッティコードしかない。
    書いた本人ですら解読不能なスパゲッティがIT業界を救う!かもしれない!!

    中国のソースコード強制開示義務付け、麻生首相が見直し要請へ直談判

     
  • fifnel 21:30:49 on 2008/10/9 Thursday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: , , , , プログラム   

    色々な言語でGoogle Protocol Buffers 

    Google謹製のバイナリシリアライズライブラリ「Google Protocol Buffers」を色々と調査中。

    データ構造をC言語の構造体っぽい書式で書くと、それを元に色々な言語のシリアライズ/デシリアライズのプログラムコードを自動生成してくれるという素敵なライブラリです。

    しかし、「色々な言語」と書きましたが、現状ではC++、Java、Pythonの3言語しか対応していません。

    というわけで、それ以外の言語に対応させているプロジェクトをざっくり検索してみたのでメモっときます。

    オリジナル(C++,Java,Python)
    protobuf – Google Code

    C言語(not C++)
    protobuf-c – Google Code

    Perl
    protobuf-perl – Google Code

    protobuf-perlxs – Google Code

    Ruby
    ruby-protobuf – Google Code

    PHP
    pb4php – Google Code

    JavaScript
    protobuf-js – Google Code

    ActionScript
    protocol-buffers-actionscript – Google Code

    Common Lisp
    common-lisp-protobuf – Google Code

    cl-protobuf – Google Code

    .NET Framework
    protobuf-net – Google Code

    protosharp – Google Code

    Mercury
    protobuf-mercury – Google Code

    PHPが使いたいのでソースはPHPしか読んでませんが、parser/pb_parser.phpでシリアライズ用のコードを生成して、それを使うのに必要なライブラリがmessage以下に詰まってる感じですかね。

     
  • fifnel 18:00:15 on 2008/7/30 Wednesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: プログラム, 仕事   

    「汎用的」を逃げに使うな 

    「ここは汎用的に作ってください」

    よく仕事でプランナーから言われる台詞です。
    時々プログラマーからも言われたり、自分で言っていることもあります。

    この「汎用的」という言葉ですが、良く言えば「どんな状況にも柔軟に対応出来る」という事です。

    しかし、悪く言えば「具体的なことは現時点で決まっていない」という事でもあります。

    「汎用的」というのは究極的には直接プログラミング言語を書くのが一番汎用的なのですが、おそらくそんなことは誰も求めていなくて、もっと限定された機能を手軽に利用したい、というのがニーズでしょう。

    となるとプログラマーの作業はプログラミング言語から手軽に利用する手段へと各機能をコンバートするという事になります。

    ここで具体的なことが決まっていない場合、どの機能をコンバートすればいいのかが曖昧になってきます。
    後々使ってみると、アレが足りない、コレはこうじゃなかった、なんて事もあります。
    結局プログラマーがわざわざ機能をコンバートするよりは、最初からプログラミング言語でベタで作った方が早くて楽だった、って事もあります。

    要するに何が言いたいかというと、具体的なことが決まっていない段階で「汎用的」を持ち出すのは問題先延ばしの逃げでしかなく、しかも無駄な作業が増える可能性も孕んでいるのでやめましょうってことです。

    「汎用的」のコストはベタで作るよりも多くかかります。
    確かに汎用的にした方がメリットが出てくる損益分岐点のようなものは存在しますが、そこを精査するためには「では汎用的にしたシステムで具体的に何を作るのか」をハッキリさせないといけません。

    私の経験則から言えば、何か汎用的なものを作る場合は、具体的なものを作った上で、少しずつ汎用的にするのがうまく行く方法だと思っています。

    最初から汎用的に設計したものほど、実際に使ってみると抽象的すぎて役に立たない、ということは多いものです。

     
    • みけねこ 15:22:04 on 2008/7/31 木曜日 パーマリンク | 返信

      私、プランナーという立場に長年いましたが、とても恐ろしくて「汎用的」等という言葉は使えませんでした。
      事細かく、仕様の指示をしておりました、ええ。
      だって、任せておくと、プログラマってどんな仕様で作るか信用ならないのですもの。
      済みません、全く信用していなくて済みません。
      (加賀愛風に読むこと)

    • fifnel 13:20:51 on 2008/8/1 金曜日 パーマリンク | 返信

      みけねこさん、仕事してますね!

  • fifnel 21:13:47 on 2008/3/9 Sunday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: Haskell, プログラム   

    Haskellの理解が急激に進みそうになったきっかけ 

    しばらく前からプログラミング言語のHaskellをチマチマと勉強してるんですが、いまいち分かったようで分かっていないという期間が続いていました。

    しかし、先日、「ふつうのHaskellプログラミング」の「部分適用」を読んで急に何か理解が開けたような気がしました。

    引数が複数あるような関数でも、結局は一つの引数を取る関数がさらに関数を返して、関数が次から次へと繋がっていくような感じなんですね。

    Haskellの特徴を示すには「部分適用」を真っ先に説明しちゃうのもアリなんじゃないかと思いました。

    というわけで、次はいよいよクラスとかモナドとかその辺に着手します(`・ω・´)

     
  • fifnel 2:14:45 on 2008/2/10 Sunday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: , , プログラム   

    81行から成るWordPressの自作投稿フォーム 

    モバイルからの投稿を最終目標に色々調べていますが、WP投稿用のAPIがあるので楽ですね。
    難点はAPIに関するドキュメントが少ない‥‥というか現行バージョンのタグ周りに関しては皆無に近いので、コードを読んで使い方を調べないと‥‥ってくらいですが、PHPのコードを読む勉強になるので良しとしましょう。

    んで、とりあえず投稿だけするスクリプトをテストで作りました。
    ユーザー認証もサニタイズも文字コード変換もしてないですが、テストなのでその辺はご愛敬。

    WPへの投稿は基本的に配列に色々つっこんで、wp_insert_post()の呼び出しでOK。
    成功すればポストID(管理ページで見られる各記事の番号)が帰ってきて、失敗したら0。

    iG:Syntax Hiliterのテストをかねてソースを貼ってみる。

    PHP:
    1. <?php
    2. // これをするだけでWordPressのAPIが呼び出し放題!
    3. require_once '../../wp-config.php';
    4. ?>
    5. <html>
    6.   <head>
    7.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    8.   </head>
    9.   <body>
    10.     <h1>WP投稿テスト</h1>
    11.     <form method="post" action="index.php">
    12.       <table border="0">
    13.         <tr>
    14.           <td>タイトル</td>
    15.           <td><input type="text" name="title" value="" /></td>
    16.         </tr>
    17.         <tr>
    18.           <td>内容</td>
    19.           <td><textarea name="content"></textarea></td>
    20.         </tr>
    21.         <tr>
    22.           <td>投稿者名</td>
    23.           <td><input type="text" name="author" value="" /></td>
    24.         </tr>
    25.         <tr>
    26.           <td>タイプ</td>
    27.           <td><input type="text" name="type" value="post" /></td>
    28.         </tr>
    29.         <tr>
    30.           <td>ステータス</td>
    31.           <td><input type="text" name="status" value="publish" /></td>
    32.         </tr>
    33.         <tr>
    34.           <td>閲覧パスワード</td>
    35.           <td><input type="text" name="password" value="" /></td>
    36.         </tr>
    37.         <tr>
    38.           <td>カテゴリ</td>
    39.           <td>
    40. <?php
    41. $categories = get_categories();
    42. foreach( $categories as $category )
    43.     echo '<input type="checkbox" name="categories[]" value="'.$category->cat_ID.'" />'.$category->cat_name . '<br />' . "\n";
    44. ?>
    45.           </td>
    46.         </tr>
    47.         <tr>
    48.           <td>日付</td>
    49.           <td><input type="text" name="date" value="" /></td>
    50.         </tr>
    51.         <tr>
    52.           <td>タグ</td>
    53.           <td><input type="text" name="tags" value="test,foo" /></td>
    54.         </tr>
    55.       </table>
    56.     <input type="submit" value="送信">
    57.     </form>
    58.  
    59. <?php
    60. // とりあえずタイトルと本文は必須ってことにしとく
    61. if( $_POST['title'] == '' ||  $_POST['content'] == '' )
    62.     exit;
    63.  
    64. $postarr['post_status']     = $_POST['status'];    // publish, draft, private, inherit, future
    65. $postarr['post_type']       = $_POST['type'];      // post, page, attachment
    66. $postarr['post_author']     = get_profile('ID', $_POST['author']);
    67. $postarr['post_password']   = $_POST['password'];
    68. $postarr['post_category']   = $_POST['categories'];
    69. $postarr['post_content']    = $_POST['content'];
    70. $postarr['post_title']      = $_POST['title'];
    71. $postarr['post_date']       = $_POST['date'];
    72. $postarr['tags_input']      = split(',', $_POST['tags'] );
    73. $postarr['post_excerpt']    = ' '// とりあえず空っぽにしとく
    74.  
    75. if( wp_insert_post($postarr) == 0 )
    76.     echo '<div style="color:#ff0000">投稿失敗!!</div>';
    77. else
    78.     echo '<div style="color:#ff0000">投稿成功しました</div>';
    79. ?>
    80.   </body>
    81. </html>

     
  • fifnel 8:09:29 on 2008/2/5 Tuesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: プログラム, 言語   

    ゲームプログラマー向け、最もタメになる「初心者用言語」はやっぱりC++です 

    最もタメになる「初心者用言語」まとめ - UK is not Britonish - ハチロク世代

    誰もマジメにBASIC系言語を挙げてないのが悲しいようなはてな村らしいような‥‥w

    ちなみに、ゲームプログラマーを目指す人に対しての「初心者用言語」はC++だと思うよ。

    C#とかJavaはダメ。
    自分で出したもの(new)は自分でお片付けする(delete)クセは子供のウチにしつけしないとね。

    そういや、大昔に初心者はA、B、Cの順で学べとか言われたなぁ。
    アセンブリ言語、BASIC、C言語ということらしいけど‥‥アセンブリの後にBASICは無いだろって気もしたけど、アセンブリやっとけばコンピューターの低レベルなところが分かるからタメになるんだと。

     
c
新規投稿作成
j
次の投稿 / 次のコメント
k
前の投稿 / 前のコメント
r
返信
e
編集
o
コメントを表示する / 隠す
t
トップへ移動
l
go to login
h
show/hide help
esc
キャンセル