言語関連の書籍売り上げから何か見えるか?

O’Reilly Radarの「State of the Computer Book Market 2008, part 4 — The Languages」というエントリでプログラミング言語別の書籍売り上げが分析されていますね。

一番面白いと思ったのは、以下に引用したマップかな。

占める領域の大きさと色で表現されているわけですが…色は赤いほど縮小傾向、緑なほど成長傾向にあることを表しています。領域の大きさはそのままですね ;)

C#とJavaの領域が大きいですね~これは、日本も同じような傾向かな :?: 意外にも領域が大きいのがPHP(失礼)。

次に色に着目すると、やはり目を惹くのは明るい緑なObjective-Cですね。これは、Appleの勢い以外の何ものでもないでしょう :)

一方落ち込みが激しい赤色はRubyなんですよね。これは少し意外な印象。Railsブームがひと段落したのと、よい書籍がでなかったのが原因と思いたいところです :arrow:

よくわからないのが、C/C++が落ち込んでるのにCが明るい緑なこと。C/C++って、C++と考えればよいのかな :?: でも、Cの復権はなんでだろう。

まだまだ領域は小さいですけど…LuaやF#、Haskell辺りの伸びが要注目なのかな。

まぁ、若干違うだろうけど日本も同じような傾向なんじゃないかなぁ。

入門Luaプログラミング 入門Luaプログラミング
上野 豊

スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践 (GAME DEVELOPER) スクリプトエンジン プログラミング ゲームプログラマになる前に覚えておきたい技術 プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~ ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books) (Software Design Books)
by G-Tools

TrackBack URL :

CでGetPrivateProfile*を使わずにINIファイルを扱う

以前、『Slashcolon /: » C#でGetPrivateProfile*を使わずにINIファイルを扱う』というエントリで超適当なコードを晒したわけですが…今回は、そのC言語版です ;)

要するに客先指定で、C#ではなくC/C++で書くのが命題なので仕方ない。フラットホームは前回同様WindowsCEなので、GetPrivateProfileStringとかのWinAPIはありません。WindowsCEでもMFCを使うのであれば、AfxGetApp()->GetProfileString(…)とか使えるんですけど…今回はMFCもなし。

最初、CodeProject辺りで誰か作ってくれてないか検索してみたのですが…見たものは全て内部でGetPrivateProfileStringを使ってました。要するにWinAPIをラップしてC++のクラスとして公開してるものがほとんど :|

残念ながら、WindowsCEじゃ使えないので前回同様に超適当にでっち上げてみた。

今回のは、空白とかも無視しないしINIファイル形式をガチガチに規定してるので使用は運用でカバーできる場合のみ、さらに問題があっても前回のC#版同様自己責任ってことで。もちろん、コメント、バグ報告、改善要望etc.は歓迎します ;)

#define BUFSIZ 512
 
TCHAR *GetString(TCHAR *Section, TCHAR *Key, TCHAR *Default, TCHAR *IniFile)
{
    TCHAR    buffer[BUFSIZ];
    TCHAR    token1[BUFSIZ], token2[BUFSIZ];
    TCHAR    section[BUFSIZ];
    TCHAR    *p;
    BOOL      sectionFound = FALSE;
    FILE        *fp;
 
    if ((fp = _tfopen(IniFile, _T("r"))) == NULL) {
        return(_tcsdup(Default));
    }
 
    _sntprintf(section, sizeof(section), _T("[%s]"), Section);
 
    while (_fgetts(buffer, BUFSIZ, fp) != NULL) {
        if ((p = _tcschr(buffer, L'=')) != NULL) {
            *p = L' ';
        }
        _tcscpy(token1, _T(""));
        _tcscpy(token2, _T(""));
        _stscanf(buffer, _T("%s %s"), token1, token2);
        if (_tcscmp(token1, section) == 0) {
            sectionFound = TRUE;    // 指定セクション発見
        } else {
            if (*token1 == L'[') {
                sectionFound = FALSE;    // 別セクション発見
            }
        }
        if (sectionFound == TRUE) {
            if (_tcscmp(token1, Key) == 0) {
                // 指定セクションの指定キーを発見
                fclose(fp);
                return(_tcsdup(token2));
            }
        }
    }
    fclose(fp);
    return(_tcsdup(Default));
}
 
int GetInt(TCHAR *Section, TCHAR *Key, int Default, TCHAR *IniFile)
{
    TCHAR    *p;
    TCHAR    *endp;
    long    l;
 
    p = GetString(Section, Key, _T(""), IniFile);    // 文字列として取得
    if (p != NULL && _tcscmp(p, _T("")) != 0) {
        // 指定のセクションとキーが見つかった
        l = _tcstol(p, &endp, 0);
        if (*endp == L'\0') {
            free(p);
            return((int)l);    // long値をintへ
        }
    }
    free(p);
    return(Default);
}

GetString関数の戻り値領域は_tcsdupで確保されるので、厳密に言えばfreeで解放が必要です。でも、たいていの場合は初期時に読み込んで終了まで保持しておくことが多いと思うので神経質になるほどでもないかと思いますが…。

━超適当な作りだなぁ~ :oops:

もっと、効率的でスマートな方法があると思うので教えていただければうれしいです。

TrackBack URL :

N700系初体験

昨日は日帰りで東京へ。どうせなら、N700系に乗りたいと言うことで余裕のある1本前ではなく、ギリギリの列車で :)

個人的には、あまり700系と変わらないってのが正直な感想。細かな点が色々と改善されてる気はするんですけど。

によると無線LANが今年の春から使えるようになるらしいんですけど…そろそろですかね :?: そうなると、断然N700系だな。

乗り物で寝るのが得意じゃないので…読むものがなかったり、かと言ってパソコンの画面も見たくない時に行き先案内板でニュースが流れるのを結構ボケッと眺めてることが多いんですけど…N700系の案内板はわたしには輝度が高すぎて眩しかったです :|

帰りの時間は明確に決まってなかったわけですが…結局帰りもN700系でした。

そういえば、山陽九州直通新幹線は「さくら」になったようですね。

どうせなら、ボディの色とかもさくら色にしてくれれば面白かったのになぁ ;)

TrackBack URL :

ThinkPad W700ds 発売記念モニタープログラム

各所で話題になってるデュアル・スクリーン搭載のThinkPad W700dsですが…発売を記念してモニタプログラムを実施してるようですね。Lenovoからのメールマガジンで知りましたが誰でも参加できるみたいです ;)

モニタに参加して、ちゃんとレポートを提出すれば以下のような価格でW700dsが手に入るようです。

ダイレクト価格: 897,225円 (税込)
モニター価格: 399,840円 (税込)
送料: 1円 (税込)

もとの価格が高いので、約50万も安く手に入れることができますが…モニタ価格でも高いですね :|

ThinkPad自体は大好きなんですが…わたしは、Xシリーズで良いです :)

TrackBack URL :

週刊少年ジャンプ 13号

まず、NARUTO…やはり、今週はペインの語りでしたね :)

忍界大戦の話とかをする際に説教臭くなるんですよねNARUTOって。しかも、その説教が薄っぺらいので…個人的にはあまり好きではないパターンでした。

いのいちが思いついたことは…凡庸なことでしたね。と言うかホンモノハイナイ+雨隠れに塔がある時から、大体わかっていたことですよね。

新連載のべるぜバブは読んで思い出しました~嫌いな設定ではないのでガンバッテ欲しいかも。なぜかマモーがツボに入っちゃって通勤バスの中でニヤニヤしちゃいましたよぉ :arrow:

ネウロがいよいよ佳境を迎えつつありますが…やはり、この戦いが終わると連載も終了なんですかね :?: 少し気になってます。

魔人探偵 脳噛ネウロ 1 [DVD] 魔人探偵 脳噛ネウロ 1 [DVD]
子安武人

魔人探偵 脳噛ネウロ 2 [DVD] 魔人探偵 脳噛ネウロ 3 [DVD] 魔人探偵 脳噛ネウロ 4 [DVD] 魔人探偵 脳噛ネウロ 5 [DVD] 魔人探偵 脳噛ネウロ 6 [DVD]
by G-Tools

TrackBack URL :

下請け奴隷根性に反吐がでそう

以下の記事を見て激しく気分を害した。まぁ、元々違うことで虫の居所が悪いのもあるかも知れないけど…。

以下一部引用。

1月に社内規定を変更し、自家用車で会社に通う従業員に支給していた通勤手当を「トヨタ系列」と「トヨタ系列以外」の二つに分割。トヨタ自動車、ダイハツ工業、日野自動車の3社の車に乗る従業員にはこれまでの金額を支払う一方、それ以外のメーカーの車に乗る従業員は半額とした。

:?: 何なのコノ下請け奴隷根性丸出しの社内規定は :shock:

で、トヨタ本体の反応は…。

トヨタ自動車広報部は「コメントする立場にありません」としている。

と、これまた当たり前の反応。

部品工場や下請けの辛さがわからないわけじゃない。ほんとに死活問題のところも多いだろうし…藁にもしがみつきたいのかも知れない。

でも、この制度を導入して何かこの会社が得るものはあるんだろうか :?:

担当者は「トヨタがあってうちの社が成り立っていることを従業員一人ひとりに意識してほしかった。自社製品があれば『うちの製品を買って』と言えるのだが……」と話す。

もうダメ押し。そりゃ今から業態を急に変更するのも無理だろうし、実態はこの担当者が語ってる通りなんだろう。で、でも、プライドはないのかい。

どの程度の従業員を抱えてる会社か知らないけど、もし全員がトヨタ車に乗り換えたら仕事が増えるのかな :?: それとも大トヨタへのアピールのつもりなのかな :?:

もし、わたしがトヨタ側の立場ならこんな下請けは優先して斬ります :roll: でも、お偉い人はイエスマンや露骨にすがってくるモノのが好きなので…この会社の業績も少しは伸びるかも知れませんね :mrgreen:

ほんと最近、経団連とかを牛耳っている経営者って、紳士面したゲスな野郎が多いように思えるのは気のせいですか :?: 立場を利用して脅しをかけたり、胡散臭い人物とつながってたりね :arrow:

4344410289 銭ゲバ 上 (1) (幻冬舎文庫 し 20-4)
ジョージ秋山
幻冬舎 2007-10

by G-Tools

B001P3POVQ 銭ゲバ (松山ケンイチ 出演) [DVD]

by G-Tools

TrackBack URL :

Ktai Style 1.70リリース

Yuriko.Net » 携帯対応プラグイン Ktai Style バージョン 1.48, 1.70 リリースと言うことで、正式リリース版が登場したので早速本サイトも対応させていただきました。感謝 ;)

WordPressのバージョンによって、サポート対象が以下のようになるようです。

今回のバージョンから、WordPress のバージョンごとにサポート対象の Ktai Style のバージョンが分かれます。バージョン 1.70 は WordPress 2.5 以降が対象で、旧安定版の 1.48 は WordPress 2.0〜2.3.3 が対象となります。

1.4系はセキュリティ修正のみと考えた方が良いでしょう。色々なシガラミでWPのバージョンを上げれないケースでなければ、Ktai Style 1.7系への移行を理由にWPのバージョンを上げることを検討しても良いんじゃないでしょうか :)

なお、今回は1.48、1.70共にセキュリティ修正が含まれてますのでバージョンアップは必須ですね。

細かな変更点は作者のYurikoさんのページを参照してください。結構な量ですね :roll:

各社携帯キャリア対応 USB充電ケーブル GH-USB-3MK 各社携帯キャリア対応 USB充電ケーブル GH-USB-3MK

バッファローコクヨサプライ Arvel USB 2口出力 ACアダプタ ワールドワイド仕様 AGP5V2 ELECOM フェライト内蔵USBケーブル USB(A)オス-USB(miniB)オス 0.3m USB-FSM503 レノボ・ジャパン ThinkPad 65W ウルトラポータブルACアダプター 40Y7699 SANYO eneloop 充電器 単4形2個セット (単3形・単4形兼用) N-MDR0204S PLANEX Bluetooth Ver2.1+EDR対応 Microサイズ USBアダプタ (Class2/10m) BT-MicroEDR2X
by G-Tools

まったくKtai Styleと無関係ですが…携帯電話の充電インタフェースがMicro USBに統一されるようですね。

これは素直にウレシイです。

TrackBack URL :

ULONG(const ULONG &)の罠

一緒に仕事している人がハマってた。昨日まで動いていたコードが少し変更したら動かなくなったと…まぁ、この世界じゃよくある話ですよね ;)

言語はVC++、墜ちるところは一見DBアクセスの関数内。まぁ、CやC++はメモリ管理は自己責任なんで実際に墜ちる場所と原因の場所が異なることが多く原因が見つけにくい時が良くあります。まぁ、今回もそんなケースですかね。

以下のコードは、実際とは異なるわけですが…やりたいことはULONG型の領域をn個確保したいと言うことです。

ULONG *a = new ULONG(n);

1行だけであれば、すぐに変だとわかりますよね~まぁ、考えてみればあたり前なんですが…コンパイルエラーにはなりません :| 単にULONGで初期値が10の領域が1個だけ確保されて、そのアドレスがaに代入されます。

ULONG *a = new ULONG[n];

これなら、n個のULONGの領域が確保されます。()と[]で大違いですね~まぁ、実際のコードはもう少し入り組んでるので、この間違いを探すのに結構な時間を要してしまいました…二人がかりで :oops:

しかし、ULONGって以下のように定義されてるだけのはずなのにVSでインテリセンスが働くのが不思議なんですよね :roll: 理由がわかる人は教えてください。

typedef unsigned long ULONG;

以下のような感じで…でも、newを前に置くと効かないんですけどね。

ULONG

で、わたしが今まで同様の罠に引っかからなかった理由を考えてみました。

ULONG *a = (ULONG *)malloc(n * sizeof(ULONG));

まったく、C++風じゃないんですけど…mallocで確保してましたとさ。わたしの場合newはインスタンスを作るものってイメージが強いので、基本型の領域を確保したい場合はmallocの方が好きなんですけどどうなんでしょうね。

VC++だとnewでメモリ領域が足りなかった場合try…catchしてないとデフォルトのメッセージボックスが表示されちゃうんですよね(Releaseモードの場合)~かと言って、newに例外書くのも気持ち悪いし…まぁ、mallocでもNULLチェックしなくちゃいけないので同じと言えば同じなんですけど。

ひと目でわかるMicrosoft Visual C++ 2008 アプリケーション開発入門 (マイクロソフト公式解説書) ひと目でわかるMicrosoft Visual C++ 2008 アプリケーション開発入門 (マイクロソフト公式解説書)
増田 智明

プログラムを作ろう! Microsoft Visual C++ 2008 Express Edition 入門 (マイクロソフト公式解説書) これからはじめるVisual C++2008―Visual C++2008 Express Edition対応 ひと目でわかるMicrosoft Visual Basic 2008 アプリケーション開発入門 (マイクロソフト公式解説書) ひと目でわかるMicrosoft Visual C# 2008 アプリケーション開発入門 (マイクロソフト公式解説書) Visual Studio 2008 Standard Edition
by G-Tools

あ、typedefにミソがあるのかぁコレ :idea:

TrackBack URL :

ErrorProviderの自分メモ

.NET Frameworkの流儀に従うならば、バリデーションチェックはErrorProviderクラス(System.Windows.Forms)を使うのが粋ってものらしい。

ならば一度使ってみるかと思い初体験してみた :) え、今まで何で使ってないんだって…C#でバリデーションの必要なUI作るの初めてだし、Compact Frameworkにはないしね~と言い訳 ;)

デモプログラムなんで、入力は一箇所だし非常に簡単なので以下のあたりを参考に適当に実装してみた。

ほぉ、簡単にできるなぁ~入力異常時に表示されるデフォルトのアイコンがちょっとウザイけど…まぁ、こんなもんだろうと。

ところが…エラーがある状態だとウィンドウクローズでプログラムの終了ができない罠 :shock:

フォームのAutoValidateプロパティがデフォルトでEnablePreventFocusChangeになっているためのようです。かと言って、他のに変えるのも面倒だし…と言うことで検索。

おぉ、すごいちゃんとカスタムコントロール化してる人が居るじゃないですかぁ。

ちょっとソースを拝見…ここまでのものは今は要らないけどテストプログラムも付いてるので動きを見るのに最高です :!:

で、少し追ってみると :idea: なるほど、エラーがある状態でもプログラム終了できるようにしたければ…フォームのCloseingイベントでe.Cancelをfalseにしちゃえば良いみたいですね ;)

C#クックブック 第3版 C#クックブック 第3版
鈴木 幸敏

絶対現場主義Visual C#実践講座―開発の現場から生まれた実践テクニック&TIPS集 LINQテクノロジ入門~Microsoft Visual Studio 2008による新たなクエリ構築技法~ (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) Microsoft Silverlight 2テクノロジ入門 (マイクロソフト公式解説書) C#エッセンシャルズ 第2版 プログラミングMicrosoft ASP.NET 3.5 (マイクロソフト公式解説書 Microsoft Visual Studi)
by G-Tools

TrackBack URL :

自動アップデートでAutoPagerizeが無効になってた

またまたやっちゃいましたぁ :oops: 数日前に『WordPress | 日本語 » WordPress 2.7.1 日本語版リリースのお知らせ』にあるようにWP 2.7.1日本語版がリリースされてました。今回は便利そうなので…先のページに書いてある以下の方法で自動アップデートを試してみました。

2.7.1 英語版へすでにアップグレードを済ませたにも関わらず更新のお知らせが管理画面に表示されている場合、自動アップグレード機能を使って 2.7.1 日本語版に更新する事ができます。ツール>アップグレードのパネルで、「2.7.1–ja をダウンロード」というボタンの左にある「自動アップグレードを実行」ボタンをクリックすれば、日本語版の最新ファイルへアップグレードされます。

やっぱり、自動アップデートはお便利だよなぁ~と喜んでいたのですが…ふと、エントリを確認するために表示してみると。ありゃ、右上にあるはずのAutoPagerizeが有効になってる四角(■)が表示されてないじゃないですかぁ :shock:

まぁ、当たり前なんですけど…wp-includes/link-template.phpを編集してAutoPagerizeに対応していたのが、自動アップデートで元に戻ってしまったわけです。以前、AutoPagerizeに対応するプラグインを入れてもうまく動作しなかったのでlink-template.phpを編集するという邪道な方法で対応しているツケですね :cry:

WP 2.7.1でlink-template.phpがかなり変更されてますね~強引な対応ですが…パッチを公開(自分用に :) )しておきます。

自動アップデートは要注意ですね~自分のサイトをそんなに眺めないので、AutoPagerize非対応になっててもすぐには気づかないし :arrow:

基本からしっかりわかる WordPress 2.7 カスタマイズブック (Web Designing BOOKS) 基本からしっかりわかる WordPress 2.7 カスタマイズブック (Web Designing BOOKS)
大藤 幹

WordPressレッスンブック―ステップ・バイ・ステップ形式でマスターできる WordPressサイト構築スタイルブック―デザイナーのためのテンプレートタグリファレンス+サイトデザインテクニック 基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ) 携帯サイト コーディング&デザイン PHP×携帯サイト デベロッパーズバイブル
by G-Tools

TrackBack URL :