投稿

2010の投稿を表示しています

Windows7 64bits command prompt hereのレジストリ位置

HKCR/Directory/Shell/内 ここに書きこむと右クリックのコンテキストメニューがカスタマイズできる。 また、誤って古いWindowsのDos prompt hereをインストールしてしまい、 アンインストールしたいときにもここを編集すればよい。  

GO言語勉強会

先日、GO言語の勉強会に出席 チュートリアルは一部目を通していたが、今回、面白かったのは "_ = チャンネル" の使い方。 またflagがよかった。 これについては勉強不足だった。

cygwin gitの問題はgit bash(mingw32)で回避

  windowsではgit cygiwnは多くのファイル(ボクのreposではobjects 5万)が変更されているときに正常にgit pullなどができない。 git fetchをかけてもfailする。   オフィシャルgit bash(mingw32)はさすがに正常に動作しhangはしない、git bashにpormpt hereをつければcygwin内でもほぼシームレスに操作出来る。 しかし、ファイルモード(chmod)が異なるとdiff表示される。 cygwin:100755 git bash(mingw32) :100644 したがって、以下を実行することにより、diffとしてみなさない。  git config core.filemode false ただし、unix系でソースをfetchした際、矛盾が生じる可能性がある。   尚、ボクたちのgit bash(mingw32)インストール時はcommit as-isにし、CRLFがあればLFに自動変換されるようにインストールされている。 PS gitやgitkなどのglobal configは... c:/Users/ユーザー名のフォルダに     .gitconfig を置けばよい。 e.g. [user] name = 名前 email = メールアドレス [color] ui = auto [core] autocrlf = false [gui] encoding = utf-8 尚、gitkは[gui]のエンコードを使う。   #cygwinを使う理由はemacsとteraterm(cygterm)が簡単に使えるという利点があるためである。 emacsはともかくとして、teratermをmigw32に繋げられないのだろうか? #migw32で%HOME%を指定するとcygwinのhomeと同じに出来ますが、実際はmingw32実装が最低限なのでエラーがて使い物にならなかった。 #git bash起動時、ウインドウが英語フォントになっていた場合、管理者権限で一度起動し、左上右クリック->プロパティからフォントを選び、MSゴシックからラスターフォントにすること。  #migwin32をインストールすると、Google Testなどのcmd.exeが日本語を表示できなくなることがあるそのときは

gdbとXCode

gdbはVer7.00より日本語表示が強化され、ワイド文字、マルチバイト文字等の表示がサポートされる。 しかし、Xcode 3.2.4(5はバグがあり、すぐにアンインストールしたので未確認)はgdb 6.3.5と古い。 ubuntu 10.10はgdb7.2が入っているのでちょと不満だ。  TestingやMockなどだけではなくやはり、日本語がすくに表示出来る環境は開発の効率が上がるので、日本人としては急いで対応してほしい。

GoogleTestとiOS4.2

XCode3.2.5付属IPhone Simulatorにバグがあり、GoogleTestは動作しない。  おそらくQtest もだろう。 しばらくはXCode3.2.4を使うことにする。 これを発見するのに半日潰れた。 ちなみに、Google Testを使う理由はクロスプラットフォーム対応だからである。

単体テスト、おすすめの本

1年ほどGoogle Testなど使っていますが、 単体テストおすすめの本があります。 「レガシーコード改善ガイド」 Working Effectively with Legacy Code Michael Feathers レガシーコードに気をとられますが、現代のコードでも重要な知識です。 いまさらですがw

OpenGL ES2.0

シェーダー記述言語が特徴的と感じた。 尚、OpenGL ES2.0プログラミングガイド 訳松田 晃一氏、 日本語と英語を並行して読んでいますが、最近購入した本では翻訳が良いです。  原本にない補足などもとても便利かつ安心感がでて読みやすいので、おすすめ。

Qt SIGNALとSLOT

SIGNALは発行するだけ、 どこに届くかなどは一切関係ないし、知る必要もない。   SLOTはSIGNALからトリガーがかかるメソッド、同期で実行されるときもあるし、 Eventによって非同期に実行されるときもある。 どこからシグナルが来るかは知らない。   以上の「知らない」ことによって部品化がより強くなっている。 

オリジナルでは発見されないバグ

MFC版のソフトウェアをQt版へ移植する際、 驚いたのは2個重大なバグが発見されたこと。 それも普通に実行して止まるのである。 ところがそのコードはC++で.hや.cc(.cpp),.cを含め、 800個以上(ちなみに全てをGoogle C++ Styleに変更中)の ソースファイルだが8年以上MFC で動作していたものだ。 それがQt版となり、メモリアロケーションの位置が変わったために、 発見できたのである。  ここには我々がおこなっている、 テストに問題が存在するということを証明している。 尚、バグは以下ことがらだった Bitmapのメモリ算出でバグがあり、メモリオーバーランしていた。 rectの初期化を忘れいた。 さて、これを自動に発見させるにはどう対処したらよいか。。。

QtとMFC

MFCからQtヘ移植する際、戸惑うのは。。。  CObjectとQObject     これらは、見た目は同じようだが内容は、まったくことなる。 CObjectはオブジェクトの型チェックやシリアライズを提供するもの。 QObjectは、誤解を恐れずに書くとOSのプロセス管理とおなじような機能がある。 したがって、移植する際は注意するべき。  なお、最近はまったのはQThreadとCWinThread、両者はともイベント(メッセージ)キューをもち、イベント(メッセージ)ループがあるが、Notifyの方法がことなる。 前者はsignal and slotを使い、後者はMessageを使う。 その際、connectのsignal  and slot関数の引数部はQtのプリミティブな型しか受け付けないので注意すること、たとえば移植移行期にはWPARAMやLPARAMなどを使って試すと思われるが、slotを呼んでくれない。 しかも、コンパイルエラーや実行時にエラーメッセージなどは表示されない。 ただ、呼ばないのである。 (補足:これは出来るだけ アプリケーションが強制終了 しないようにと考慮されているため)

クロスプラットフォームについて

本格的なアプリケーション制作で、 自由なクロスプラットフォームを求めるのならば、以下の優先順位で使うこと。 標準ライブラリ Boost wxWidget NSPR Qt 避けたいもの、 MFC Cocoa GTK+ 基本的な考えとしては、そのライブラリのライセンスに依存する。 書いていないがJAVAに関してはモバイル環境では遅いのが難点。 ��もちろん、これは時代と共に良くなる) Pythonも有力だが、もう少し、 時間がひつようかもしれない。 .NET向けに作っても結果的にはWindows系のOSしか使えないので、 無理がある。 また、 その互換なものがあってもJAVAのように、 邪魔されたりライブラリが不安定な状況だ。 これは基本的にMSが 強力にライセンスを保持しているので先がみえてると、 多くの開発者が感じるからだろう。 尚、これは作成するコア部に関してであり、GUI部にたいしては、 wxWidgetやQtなどがある。 しかし、iOSなどで使用禁止、 になる可能性が高いため、いまのところ専用に作るしかなさそうである。

iOS系リンク

Bigginning iPhone 2 Developmentなどから抜粋したもの+アルファ フォーラム http://devforums.apple.com/ http://www.iphonedevsdk.com/ http://discussions.apple.com/category.jspa?categoryID=164 http://discussions.apple.com/category.jspa?categoryID=201 WEBサイト http://www.mosa.gr.jp/ http://www.cocoa-study.com http://www.iphonedevbook.com/ http://www.cocoadevcentral.com/ http://nscodernight.com/ http://cocoablogs.com/ http://www.iphonedevcentral.org/ http://www.iphonesdkarticles.com/ http://stackoverflow.com/ ブログ http://theocacao.com/ http://www.wilshipley.com/blog/ http://rentzsch.com/ http://eschatologist.net/blog/ http://cocoacast.com/ http://iphonedevelopment.blogspot.com/ http://www.davemark.com/

C++をMacOSやiOSへ移植するときに読みたいテックノート

ADCへ飛ぶ: Techniclal note TN2185  (English版は ココ ) この資料にはGCC Visiblity(VisualStudioでいうDLL)のことが記載され、 その宣言などのテクニックが書かれている。 注目すべきは、複数あるVisiblity制御方法の優先順。 また、 throwやdynamic_castを行う際はそのオブジェクトはVisibleにすること。    

iPhone開発のおすすめ本

Beginning iPhone3 developmentがオススメ。 英語版ですが、日本語版は古いのと難しいところにさしかかると訳がへんになっているため、読む側は2重苦なります。 eBook版も登場しているのでKindle版が手持ちのiPadやPCで読むことができるのでとても重宝します。 購入はwww.amazon.comからになります。 尚、この本で物足りなくなった場合はMore iPhone3 Developmentがよいでしょう。ただ残念ながらeBook版がまだありません。

cpplint.pyのプチハック

最近、よくつかうツールにGoogleからオープンソースで公開されているcpplint.py。 関心に思うのはHeaderファイルのガードでラベルがほぼ正確に提案されること。 なぜこんなことができるかとソースを覗いたら、予想通りリポジトリのフォルダーを基準にしていた。 ただ.gitも対応しているのか少し気になったが、それも探しているようであった。 考えることは皆同じであるw .svnを優先に探し.gitや.hgを探している。

QStringとUtf-8

MFCからQtへの移植で注意しなければならないのは、 CStringをQStringへダイレクトに置換してはいけないこと。 実は、ローケールを設定しても、 QStringはもともとある日本語をUTF16に変換した際、 クセがある。 1 パス指定である「\」これを、 「/」には変えず、日本語に存在しない似た「¥」に変換してしまう。 2 utf-8のファイルはQByteArrayへ読み込むこと、 これもQStringへ読み込む際、意図しない日本語コードへ、 変換されてしまう。 その後、toLocal8Bit()で戻しても、 ムダである。 FormatやTRACE()などでも、そのままでは動作しない。 前者はsprintfではなくargへ。 後者はいちいちtoLocal8Bit().constData()などを、 つけなければならない。

クロスプラットフォームの鬼門 wchar_t

Unicode wchar_tの説明を読むと、これさえあれば各OSで動くと希望的観測を、 つい、してしまうのが、プログラマーの悲しさです。 むろん、うまくいくわけではなく、 wchar_tは Unix系では4バイト Windows系では2バイト です。 これがクロスプラットフォームで泣かせます。 Qtなどはこれにハマらないよう設計を工夫しているのが使っているとわかります。 したがって、WindowsのプログラマーはLPTSTRとかTCHARを使っていれば大丈夫というのは迷信に過ぎないのです。 参考:   wchar_t: Unsafe at any size http://en.wikipedia.org/wiki/Wide_character

QtとMFC Serialize互換について

MFCからQtを移植する再、問題になるのはファイル関係です。 MFCとQt、Serializeフィイルの互換性を維持するには、ちょとした工夫が必要です。 *Little Endianにします。 e.g.  ar.setByteOrder(QDataStream::LittleEndian); *CStringとQString。 MFC CStringは長さをかなり持てる機能があります。 その部分を読み込んでQStringへ入れるにはMFCのソースを参考にすると良いでしょう。 通常はQStringの最大値まで使うことはないのでコンバーターを作成すれば互換性を維持できます。 *COleDateTime(CTime)とQDateTime これもコンバーターを作成することにより解決可能です。 上記などを一気に移植するにはQDataStreamを継承したクラスがあると便利です。 CArchiveクラスのようにIsStore()などを作成することにより、もとのソースに対して少ない変更で移行可能です。 この継承したクラスにはEndianの自動変更、QString、QByteArrayやQStringListなどのインターフェースを作成すると使いかっても良くなります。

QtとAndroid

QtアプリをAndroid上で実行するには、 Qt For Android を今のところ活用します。 ただしQtGUIを組み込むと10MBほどになり、 3MBほどが現在のAndroidアプリの平均的な限度だとすると、 大きすぎるようです。 参考  Qt on Android ep 2 ボクの場合はGUIをAndroid GUI javaで書き、アニメーションエンジンと言語解析部分をQt(Nativeなので場所によっては10倍以上高速)にします。 したがって、QtCoreさえあればよく、必要に応じてQNetwork,QXml等を組み込む予定で、この場合は参考のリンク先内に書かれているように3.5MBほどになるそうです。 QtはNDKを通して使いますが、描画の速度によっては、QADKを使うことになるでしょう。ただし、QADKを使うとNDKに対して変更されているため正式なアプリとは認められない可能性があるため見極めが必要です。

MFCとQtとGoogle Test

MFCアプリをQtへ移植する際、Google Testを活用しながらだと、 足場を固めつつ前へすすめるので便利です。 ボクは以下のように活用しています。   DLLに対しては外部console MFCアプリからQtを利用しつつテストする。 結果はconsoleへ出力。 EXEに対しては内部にUnit testを組み込んで以下のようにWinApp::InitInstaince()内からコールし、テスト。 結果はOsanpo project内にGTestOutput.xmlが出力される。 時にはGuitarを利用する。       {// Google Test 10-06-02         int argc=2;         char *comm="Mfc2Qt.exe";         char *comm1="--gtest_output=xml:GTestOutput.xml";         char *argv[3];         argv[0]=comm;         argv[1]=comm1;         argv[2]=0;         testing::InitGoogleTest(&argc, argv);          int nRetCode=RUN_ALL_TESTS();         if( nRetCode ){             return false;         }     }    

品質がおちていくMSのVisual Studio

MS-IMEの品質が中国へ拠点が移ってから、使いにくくなったのは有名な話。 今はGoogle日本語入力が人気になっている。実はVisual Studioも、少しずつだがはしごを外されたような機能低下が起きている。 プロジェクト内のファイルが検索できなくなった。 .NETのヘルプを外しているのに関わらずMFCのヘルプが素直に表示されなくなり、一発で参照できない。 QtプラグインのHELPのほうが同じHELPブラウザ内なのに使いやすい。 キーバインドが次々とかわり、いちいち慣れることを億劫にさせるユーザーインターフェース哲学の欠如。 Eclipseをまねたようなアウトラインが表示が完璧でないため、逆に使いにくくなっている。 最近のEclipseの機能アップからみると時代遅れな機能。 Visual Source Safeの使いにくさ いまだに残る多くのバグ 次々に入れ替わる、各エディションの構成

GCF

Google Chrome Frame (GCF) http://code.google.com/intl/ja/chrome/chromeframe/

雑貨

世界一の職人といわれる岡野さんの本で、これ以上かわりようのない技術を「雑貨」と呼ぶと書いてあった。 昔、当たり前だったコンパクトやライターの金属の加工職人が失われているが、実は現代その技術が必要とされている。 みんな安直に開発できるものに移ったため、出来る人がいないという訳だ。 ではソフトウェア・エンジニアリングの分野はどうか、今、盛んにPyhton, RubyやJavaといわれているが、例えば実際にGoogleのエンジニアから伺うと使っているのはC++、高速に実行するけど作るのは難しく時間がかかる。 表の部分はPythonやJavaを使っているけど中身はC++が多いという具合だ。 それを聞くとC++は雑貨に近い技術かもしれないが、ほっておいてはいけない言語だと岡野さんの本からヒントを得た。

いろいろなブラウザ

ボクは最近、いろいろなブラウザを交互につかっている。 Google Chrome 一番ありがたいのはブックマークが同期してくれること、欠点は印刷がダメ、多くの時間と紙を浪費するだけである。 ハングが多く、Ubuntu上ではフォントが安定しない。  Firefox Unixの世界では一般的なブランザ、安定している。 が、起動が遅い。  Opera。 Qtを使って作られているが、これが高速に動いてくれる。 ただPC上ではマイナーか。 上の3つのブラウザはHTML5の仕様が組み込まれとても便利である。  最後にIEであるが、どこのHPでも使える安定したブラウザ、特に印刷はずば抜けて正確、他のブラウザを使っていても、印刷のために何度立ち上げたことか! 欠点はクローズドなMSが支配していて壁を感じる。 HTML5がほとんど対応されていない。 ずば抜けて早くない。(IE8) PS SafariはiPhone以外ではあまり使っていません。 Chromeに近かったり、WinではUpdateがちょと強引であったりするのが原因。

Ubuntu 10.4 Netbook edition EeePC900HAへインストール

USBメモリ(SDメモリ)を準備 1G以上 Ubuntuからインストール、netbook-edition.isoをDL( WindowsでUSB転送できたがインストーラ起動失敗) usb-creator-gtkから作成、一度USB(SD)の内容を消してから、転送 EeePCのBIOS(900HA)はBootシーケンスにくせがあり、HDDでUSB Memoryを1、HDDを2した後、ブートシーケンスにUSBが現れるのでそれのみにする。 起動するとインストーラーが立ち上がる。 e.g ex4:65G sqa:1.6G インストール後、BIOS:HDD設定でHDDを1にし正常に戻す。 起動後 Language Supportで日本語をインストール

QtとMFC

1年前からライセンスの変更を元に使い易くなったQt。 DesktopアプリでWindows用をつくる。 もしくはMFCを使うという開発を過去のものにしたのかもしれない。 まぁ、時勢でしょう。(それに.NETは将来不安かも!?) ところでMFCで作られたソースをQtへ移植したい、という要望があると思います。 テストをしながら少しずつ移行するのが一番安全な方法でしょう。 以下のQtのサイトにひとつのアプリケーションでMFCやWin32とQtが使えるフレームワークが提供されています。 もちろん、MFCやWIN32が存在する限りLinuxやMacOSX(将来はandroidやiphone?)では動作しませんが、移行期間としては仕方がないでしょう。 Qt/MFC Migration Framework

Qtについて

ディスクトップ向け開発でクロスプラットフォームといえばNokia  Qt(キュート) 興味ある開発フレームワークだが、しかし、現時点ではホットなプラットフォームであるAndroidやiPhoneに対応していないのが残念である。 iPhoneはある程度実現できても(AppleやNokia自身が邪魔しなければ、だが)、JAVA VM上であるAndroidへの開発は時間がかかるかもしれない。(あるとすればNDK経由か?) 参考:Qt for android (NDK使用) ついでだが。。。。   Qt CreatorというQt専用の軽いIDEがあるがTutorialをおこなうときに   英語で実行したい。 そのときはQtCreatorの実行コマンドラインの頭にLANGを英語に、   指定するといつも英文で開発ができる。ただし、現時点1.3.1(64bits)では日本語入力ができなくなる。 e.g.   env LANG=en /home/develop/qtsdk-2010.02/bin/qtcreator PS1 QtをINSTALLの際、コンパイルで2,3度止まることがあるが、エラーをサーチするとコンパイルを再開する方法がみつかるので焦らないこと。 コンパイルは2,3時間かかる。 PS2   クロスプラットフォームでは wxWidgets も有力

Goolge Testを3プラットフォームへ

Windows, Linux, MacOSXでGoogle Testを試した。 (すべてOS64bits環境) Google Test 1.5.0 WindowsはVisual Studio 2005 Linux(Ubuntu)はautomake MacOSはXcode3.2.2 で動作した。 しかし、それぞれプロジェクトに組み込むのには癖がある。   ボクはWindowsに慣れているため、比較的スムーズにいき、   automakeも、あまりハマることもなる組み込めた。が、   Xcodeには苦労した。 理由はドキュメントが英文なのだが、   肝心のXcodeは日本語表示のため、ドキュメントがすんなりと、   わからない。また、Xcode特有のライブラリ管理を理解するのに、   苦労したためである。 解決の糸口はXcodeを英語化した     (OSの言語を英語を最優先へ)のが大きかった。  やはり、どんな環境でも開発ツールの表示は英語が一番と、 再認識した。 3つの開発環境で、JavaのようにUnitテストが、 しやすいのはXcode(動作するのに一番手間取ったがそれは僕の無知)の、 印象があるが、これは使いこなしていく上で印象がかわるかもしれない。  

開発言語を知る

「開発言語」知るというのは、そのまわりのライブラリや開発環境をある程度使いこなせて、初めて知った。と言える。 条件文やテンプレート、抽象化クラスを覚えたって、単に土台を知っただけのことである。 そこからが長い。 ボクはJAVAやPAYTHONの文はある程度覚えたが、単に土台だけである。 JAVAでいうとantなどのTaskカスタマイズができるかといえば、できないし、UnitTestを組み込むのもテンプレートなしではままならない。 mavenなどもモノマネの範囲である。 そのため、深く理解する時間が欲しい、休日が少ないのは当たり前。

GoogleTestとVisual C++ (VC++)

Google TestをVC++と使う上で注意。 DLLとして利用する場合、staticとして利用する場合、linkerよって、それぞれ破棄されないように注意。 see   staticとして利用する場合、 参照されないデータを保持する (/OPT:NOREF) を設定せよ。 シンボルが破棄されない。 gtestのライブラリをDLLとしたら、使う側もDLLとする。  gtestのライブラリをstaticとしたら、使う側もstaticとする。 以下はついで、プロジェクト->プロパティ->構成プロパティの全般->共通ランタイムサポートを使用しない /clrオプションを無効にし、  C++ -> コード生成、ランタイムライブラリ(/MT or /MTd)を指定。 移植性と管理の簡単さのため、C++のオプションに/FI stdafx.hを追加し、各ソースから#include "stdafx.h"を取り除く      PS  gtest.slnとgtest-md.slnの違いは、 両者はともにスタティックライブラリとして作られるが、コンパイル・コード生成の違いで、 Cランタイムライブラリを前者はスタティックライブラリ、後者はDLLライブラリとして使用するようだ。

SWIGとpython2.6.5

SWIGのサイトにあるtutorialがそのままでは動作しなかったのでメモ  gcc -fPIC -c example.c example_wrap.c  -I/home/userp/develop/Python-2.6.5 -I/home/userp/develop/Python-2.6.5/Include/  ld -shared example.o example_wrap.o -o _example.so 以上で動作した。 PS OS Ubuntu 10.4Beta2(64bits) SWIG  1.3.40

PythonをremoveしたらUbuntuが壊れた

Pythonを最新版にするためにapt-getでアンインストールしたところ、ためらいもなしにYを押し続けたら、需要なlibなどがアンインストールされてしまった。 それ以後、Ubuntuは動作しなくなり、PCを落としたところBootが不可能になった。 回復には以下のサイトを参考にした。 Ubuntuサイト  LiveCDRecovery My PCは/dev/sda5がrootだった。

SWIG

各、プラットフォームへいこうする際、 Glue Codeを出力する SWIG を使うことにした。  Ubuntu 10.4Beta2(64bits) $sudo apt-get install swig 最新版1.3.49(64bits)がインストールされた。 Androidには Android NDK をかして使う予定。

stupid backoff

Googleが使う技術にstupid backoffがある。 計算がシンプルで大量データ向きであり、多少の誤りは許容することによって、大幅に使いかってを良くする。 考えて見れば、人間の頭もエラーを許容し、複雑なことを高速に処理しているので、自然にあったアプローチであろう。 Googleの論文 これを利用しGoogle日本語入力を作成、またMeCabの製作者でもある工藤氏のトークを先日伺うことができたが、とても興味深い内容であった。 現在、この分野は製作中のソフトウェアに応用できるのではないかと吟味している。

Pythonスクリプトを使ってリファクタリング

ご存知のようにPythonはマルチプラットフォームのソフトウェア製作者には重宝する道具、DRY思考に基づくソースの統一や、リファクタリングなどに役に立つ。 しかも、エディタのマクロと違い各プラットフォームで再利用しやすいのも貴重である。 例えば1000個以上のファイルの#include行にあるコメントを削除することなどは簡単にできてしまう。 pythonにfindやxargsを組み合わせれば実現できる。(Windowsはcygwinを利用)

邪魔なPCサポートツール

仕事のPCは、自作品を使わないことにしている。 理由はカンタンで自作品は仕事の現場では耐久性が低いためである。 ようはケースも含め総合的に冷却や消費電力を考えた設計を安い費用で作成するのは難しいためだ。 これをパーフェクトに考えると自作品のコストが跳ね上がってしまうのである。 尚、仕事用PCとは、おおまかに書くと365日平均12時間以上稼働しているぐらいの使用頻度のこと。   そこでDELLなり、HPなりのガラパゴス化(?)していないPCを買うことになるのだが、それでも仕事に邪魔になるツールがプリインストールされている。 それを本日アンストールした。 具体的には現在使用中はHPだが、ハードウェア診断ツール(pcdrcui.exe等)というもので、仕事で頻繁に使うショートカットに割り当てられているため、仕事にならなかった。

Ubuntu10.4Beta1(64bits)とandroid開発環境

Ubuntu10.4Beta1にてAndroid開発環境が動作。 Eclipse 3.5 64bits java-6-sun-1.6.0.19 ia32-libs ( apt - get install ia32 - libs) android-sdk_r05-linux_86 Dev Phone1 (Android1.6) Hard CPU i7 920/6G RAM/500GHDD/GeForce GT220 PS Ubuntu10.4はハングが多かったのだが、先週あたりから安定し始めた感触

Android Dev Phone 1 Update

しばらく使っていなかったDev Phone 1調子がわるいため、 以下の手順でリセットを行った。 ゆうずうがきかずいろいろ行った。 1 電池をはずして、5秒以上待って、またはめる。 2 家のマーク HOMEキーを押しながら電源ボタンを押す。 3 キーボードを開き Alt+I,Alt+s 4 電源を切る(電池をはずす) 5 矢印キー  BACKキーを押しながら電源ボタンを押す 6 USB接続をして、 fastboot-mac erase userdata fastboot-mac erase cache 7 ノーマル起動。 一応、これで動いた。 参考 HTC

GWT JSNI

ご存知のようにGWTにはJSNI(Java Script Native Interface)というブラウザ固有のJavaScriptを実行できる環境が存在する。 おそらくボクが使うとしたら、GWTを使っていてHTML5の機能など、実装される予定はあるだろうが、それがGWTから使えないときに利用することになると思われる。  かゆい所に手が届く的なもので、保険みたいなものである。 また別の書き方ではインラインアセンブラのような存在である。 参考(GWTは現在発展し続けているため、本も含め、古いドキュメントがそのまま使えないのが辛いw) GWT Coding Basics:Hava script Natibve Interface(JSNI) Google GWT Blog IBM レガシーなやり方を高度な GWT コントロールに導く Google Plugin for Eclipse:Woking with JSNI

GWT meets HTML5

やっとこのようなサンプルが出てきた、という感じである。  次のステップへ進むプラットホームができつつある証拠ではないか? さえ思う。 Quake2-gwt-port ゲームはともかくとして、GWTが本格的なCanvasに対応にならないかと、 待っていた(?) ボクにとって、IE9によって、本格的に進みたいプラットホームに、 なってきた。 自分のソフトウェアの2D部分を移植スタートしてもリスクが、 少ない時代へとかわりつつあるかもしれない。 コンパイル&ラン Ubuntu 10.5Beta(64bits)で、コンパイル成功し、サーバーも動作した。 クライアントはWindowsにNightly-buildのChromeによって、 ゲームが動作(僕の環境ではMAX40fpsぐらいで普通にプレイ可能)した。  ただし、サウンドが鳴らない。(これはサイトの コメント でも報告されている) そして、読んで面白いのは、作者のブログ。 From Ray From Joel

Ubuntu と Eclipse ショートカット

Eclipseでよく使うショートカット。 例えば Ctrl+Alt+Down Ubuntuで試すと動作しない。 理由はUbuntuのシステム・ショートカットのほうにフックされてしまっているためである。 システム->設定->キーボード・ショートカットを開き、 下の方にあるCtrl+Alt+Downを無効にすれば、Eclipseのほうへキーダウンイベントが、 ポストされるようになり、動作する。 WindowsやMacOS, Ubuntuを並行で使う人はできるだけ統一したキー操作をしたいのが本音。 不要と思われるショートカットは無効にしておこう。  PS 試したのはUbuntu 10.4Beta1 (64bits版)。

Ubuntu10.4Beta1 (64bits) Firefox Flushplayer

以下のサイトから利用可能である。 flush player 10 for linux 64bits.  adobe    以下のアドビのサイトからダウンロードし、解答したsoファイルを~/.mozilla/pluginsへ置く。 Firefoxを再起動すれば動作。 

Ubuntu 10.4 Beta1(64bits)にsun java 6

Ubuntu 9.10では ココ に示すようにインストールすればubuntu全体をsun java 6で動作させることができた。 しかし、まだベータ1の10.4ではこの方法でインストールできなかった。 修正:10-04-05 そのため、sunのサイトからJDKをダウンロードし、 任意のフォルダに置き、その後以下のパスを設定して、 無事に動作することを確認した。 一部のSDKはjvm 32bits対応なものがある。 そのときは64bit jvmを32bitで動作させるオプション -d32を設定するといい。 eclipse.ini内 -vm <配置したパス>/jre/bin/java   を指定するだけでOKだった。 念のため、使わないopenjdk系はアンインストールした。  .bashrcでは。。。 PATHとJAVA_HOMEを設定。 以上の設定で、Google Web ToolkitのサンプルやANTLRのプラグインが動作。    PS なお、sun javaにこだわる理由はGoogle開発キットの一部がopenjavaに未対応なため。 オフィシャルなJavaのリソース(Ubuntu10.4Beta1では動かない可能性有) https://help.ubuntu.com/community/Java https://help.ubuntu.com/community/JavaInstallation  

コンパイラコンパイラ

作成ソフトウェアでコンパイラコンパイラは、とても重要な位置を占めている。 その中で ANTLR というソフトウェアで古くからあるのだが、今だに開発が、 活発で好感が持てる。 また、Google App Engine(Python)などで使われていて、 知っている方も多いと思う。 今、 ANTLR を使いこなそうと四苦八苦しているところであるが、 このEclipseプラグインが素晴らしい出来栄えでとても気に入っている。 さらに4ヶ月ほど前から公開された JavaDude.comのVideoチュートリアル がわかりやすく、 Scott Stanchfieldに感謝している。 参考:Wikipedia ANTLR

makeに代わるツール

makeに代わるツールでクロスプラットフォームに強いビルドツールが欲しいところだ。 Javaの場合は、 ant maven があり、なかなか充実した環境に発展している。 それ以外の言語で目立、とくにクロスプラットフォームとなると。 gyp と scons の組み合わせが実用であろうか?  Windows向けにはVisualStudio(.vcproj/.sln)、MacOSX向けにはXCode(.pbxproj),Linux向けにはディフォルトのsconsを出力する。 現在はHammerというコマンドで GoogleのブラウザであるChromeのコンパイルで、   使われている 。 尚、個人的にはandroid,iPhone(MacOSX),Windowsのクロスプラットフォームで、利用できないかと調査しているところである。しかし、JAVAは他のC言語系とはプラットフォームの考えが大きく異なるため敷居が高いのではないかと思っている。 gypとsconsがeclipse向けのprojctファイルを出力してくれれば助かるのだが。。。

NSListはどこ?

 iPhone/MaxOSXのプログラミングを調べていて驚いたことはNSListがFoundationに存在しないこと。 代わりにListを自作するか、NSArray、NSEnumeratorを使うことになりそう。 PS MacBook ProをRAM 4Gにした。

コードスタイル

コードスタイル、コードを書くときに、その書式をグループ内で統一し、プログラムを読みやすくすることである。 少なくないプロジェクトに関わってきたボクからするととても大切なことだと思うし、このスタイルは時代とともに変化する。 Windowsだけの時代では、やはりマイクロソフト社のスタイルに合わせた方が仕事や勉強は進めやすかった。 しかし、今はオープンソース全盛期。 出来る限り、それに慣れた方が便利である。 自分でまとめてもよいのだが、そんな暇があれば創造部分に使いたい。そこで、Googleの規約に乗ることが、現時点では最良の選択だと思う。 (また10年後は変わっているだろう) Google コードスタイル規約 C++ 、 日本語訳 Objective C 、 日本語訳 Android ( JAVA言語 )、 日本語訳 Python 尚、各ドキュメントを読んで面白いのは、それぞれの言語の欠点が書かれている点である。 移植性を重視する者にとってはタメになる。

今日はGAEとデバック

朝はGAEを徹底的に勉強し、 午後はユーザからの報告のバグを1FIX その他、前からあったバグ4つほど修正

冪等(べきとう) idempotent

プログラムで重要な概念。 idempotent 1回おこなっても、複数行っても結果が同じ。 s*s=s ということであり、HTTPのGETとDELETEは、この冪等性が求められる。 そのため、キャッシュには有効である。 尚、POSTは冪等性がないため、キャッシュできない。 C++の#pragma once(Google規約では使用禁だが)も冪等性のためであるといえなくもない。 JavaのHttpServlet.doGet()のインプリメントはは冪等性が求められる。   参考: wikipedia

Ubuntu 9.1 Tomcat native コンパイル

Tomcat6 native をコンパイル eclipseでtomcat使って開発する際、ubuntuではtomcat6がバラバラに任意のディレクトリへインストールされる。 Ubuntu標準に沿って行われていると思われるが、 Sysdeo tomcat plugin 利用者からは不便 である。 そこでapt-get等ではtomcatを取得せずに、直接取得して、plug-inへパスを設定すると、 動作する。 しかし、UnixではNativeが含まれていない(Windows版は有)ため、 パフォーマンスを必要な方はコンパイルする必要がある。 ソースを取得して、 以下の方法でコンパイルできる。 ./configure --with-apr=/usr/bin/apr-config --with-ssl=/usr/lib/ssl make ./libs/*を /usr/lib/jniへコピーした。 eclipseでtomcat-pluginを実行すると。。。 情報: Loaded APR based Apache Tomcat Native library 1.1.20 とConsoleに表示され、Native Libraryが動作していることを確認できる。

ubuntu 8.04 LTSへTomcat

Tomcat5.5インストールメモ $ sudo apt-get install sun-java6-bin sun-java6-jre $ sudo update-alternatives --config java $ sudo apt-get instal tomcat5.5 $ sudo apt-get install tomcat5.5-admin tomcat5.5-webapps /etc/default/tomcat5.5を設定 JAVA_HOME=/usr/lib/jvm/java-6-sun/jre CATALINA_BASE=/var/lib/tomcat5.5 メモリ 256に。 JAVA_OPTS="-Djava.awt.headless=true -Xmx256M" その他、ユーザー名など設定 $ sudo /etc/init.d/tomcat5.5 restart http://<host>:8180/

git The remote end hung up unexpectedly

うちの開発ではgitを中心に使っているが、 Windowsでエラーが出て使い物にならないPCが2台ある。 git clone をする際、  The remote end hung up unexpectedlyが連発するのだ。 PCの性能は WindowsXP SP3(クリーンインストール状態で、アンチウィルスは入れていない) 2GRAM Pentium4 2.80GHz HDD500G 10%使っているのみ。 cygwin 1.7.1 git 1.6.6.1 が動作しない。 そこで。。。 msysgit 版(Git-1.7.0.2-preview20100309)を、 使ってみたところ、 一発でCloneが成功 した。 理由は不明であるが、 どうもPCとの相性が悪ようである。   参考: cygwin(1.7.1)上git(1.6.6.1)で問題なく動作しているPCのリスト これよりもパフィーマンスが悪い、 WindowsXP Atom EeePC(時々、同じエラーがでるが、5回も実行すれば動作) MacOSX MacBook Pro Ubuntu 9.10 Dual Core NotePC 性能が上のPCであるが。。。 Windows7 Dual Core NotePC、 WindowsVista Desktop Dual Core PC WindowsXP Desktop Dual Core PC 尚、全PCとも40GB以上HDDが空いており、 2GRAM以上搭載している。    

Ubuntu標準Javaをsun-java6へ

  標準インストール Ubuntu(9.10)で Android plug-in(ADT Plugin for eclipse) を使う場合、 Plug-inのインストールに失敗する。 理由は標準JAVAはOpenjavaになっているため。 確かめるには以下のコマンドを実行 $sudo update-alternatives --config java 結果がopenjdkになっていれば× sun-java6-sdkをインストールして、 # aptitude install sun-java6-jdk (sdk?) 上のコマンドで指定する。 参考サイト

Ubuntu カーネルをアンインストール(Grub2)

以前のubutuでは、apt-get autoremoveで消えたようだが、 ubuntu9.10現在、以下の理由でやめている。 KernelTeam/removing-old-kernels ということで、危険が伴うので消す必要がない。 といっても、Net-pcの小さな画面ではGrub2のメニューが増えていって、 使い辛い。 そこで/boot内のファイルを手動で消す。 とても危険な作業なので慎重に行うことは書くまでもないだろう。(自己責任) 例: Sysytem.map-2.6.31-17~ abi-2.6.31-17~ config-2.6.31-17~ initrd.img-2.6.31-17~ vmcoreinfo-2.6.31-17~ vmlinuz-2.6.31-17~ これで17が消える。  過去の1,2個のカーネルは残しておくのが賢明である。 最後にgrub2のメニューを生成させる。 # sudo update-grub を実行。 grab2のカスタマイズは 過去の記事 を参考

cygwin git diffを日本語表示

$ git diff | nkf -w で表示された。 cygwin(1.7.1)上で。

ロングマン

* i の英英辞書* iAppの英英辞書、Longman Dictionary of Contemporary English (LDOCE5)を購入。 かなり使いやすくて、いままで購入した辞書ではナンバー1。 これで資料が、少しでも、 楽に読むことができれば嬉しいのですがw

技術力のないプログラマ作ったソースを...

技術力のないプログラマ作ったソースを自分のものにするのは、 まず大げさにわかりやすいフォルダ名、ファイル名、クラス名、 メンバー名に徹底的にする。 ASSERT等できるだけ入れる。 理由のないコメントを削除する。 トレース実行する。 理由がわかればコメントを書く、動作確認したら、 修正し、必要ならば設計し直し、作り直す、動作確認、デバック。 そして、リファクタリング。。。 上記でわかりやすく、長く書いたフォルダ名、ファイル名、クラス名、 メンバー名を速読しやすくシンプルにしてメンテや拡張しやすくする。 これを機能単位(単位が滅茶苦茶ということが多い)ごとに行う。 この5年間ぐらいはこれをやっていた気がする。  時間がかかるわけだ!

Cygwin 1.7.1 rxvtよりXtermか?

Cygwin1.7.1になり、標準のプロンプトは、 正常にファイル名などが表示できるようになった。 しかし、カット&ペーストやemacsで便利なrxvt.exeは、 古いままで、どうも日本語があやしい。 そこでXウインドウ版cygwinを試すことにした。 setup.exeにてxinitをインストール インストール終了後、cygwin上で $ startxwin xtermが立ち上がるので、その中でemacsを試すと正常に動作した。 しばらく、これを試してみたい。 詳細は http://x.cygwin.com/

Cygwin 1.7.1 nkf istall

Cygwin 1.7.1から日本語対応がさらに強化された。が、 古くからあるnkfをinstallしたい。 残念がらnkfはsetup.exeに、 現時点では含まれていないようなので以下からダウンロード http://sourceforge.jp/projects/nkf/releases/ $tar zxvf nkf-2.1.0.tar.gz $cd nkf-2.1.0 $make test $make install 以上でインストール完了、詳細はINSTALLを参照 $ nkf -v Network Kanji Filter Version 2.1.0 (2009-11-17) Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa). Copyright (C) 1996-2009, The nkf Project. $  

容赦のないテスト

昨日は作成しているソフトウェアのベータリリースだった。 精神的に余裕ができたので以下の本を読んだ。 「Maven2.0入門」 「達人プログラマー」 前者はJavaプログラムのベースを知ることができ、 後者はプログラマーとして、いつも悩んでいることに関して、いくつかの回答が書いてある。 WEBが優れた知識を提供してくれているのは間違いないのだが、本という汚せるメディアで勉強するのはやはり心地よいものがある。

Eclipse プラグイン制作初心者

自作コンパイラを#eclipseで使いたいのですが、どのplug-inのサンプルが参考になるのでしょうか?

Twitterへ告知

自作のブログクライアントから投稿が成功すると、Twitterへ公開告知するテスト。

Buzz

GoogleがリリースしたBuzzについて。 リアルタイムなTwitterをもう一歩進めたのがBuzzであり、各メディア情報にもアクセスできるようになっている。また、Subscriber Callback URL, EventやNotificationなどの仕組みがそろっているようである。 Google Buzz API PubSubHubbub 購読と投稿(pubsub)、Atom/RSSの拡張プロトコル。 クライアントは、サーバーに最近の更新があれば、そのNotfiyを受け取ることができる。  

Ubuntu 8.04 LTSに最新のgit

僕のgitサーバーは、Ubuntu 8.04 LTS 32bits版を使っている。 LTSは長期にわたってサポートされるため、安心だが、 gitのバージョンがapt-getからでは少々古いものになる。 これで安定して動作していれば問題ないのだが、 不安定なところがあったため、最新のバイナリをインストールした。 尚、ソースからのインストールは不精な僕には、無理である。 http://git-scm.com/download からdebパッケージのstable版のリンクをクリック。 $ wget  url+ファイル名を指定 $ sudo dpkg -i  ファイル名 これで最新のgit-coreがインストールされる。 尚、将来役に立たないがついでにかくと、現在、git version 1.6.5。

Gitと数千単位のファイル管理

2,3時間時間を無駄にした。 実はVSSで管理していたスクリプトファイルをGitへ移行する際、 うまくgit pullができずにハマってしまった。 結論としては、 多いファイルを転送する場合、セキュリティソフトが、 微妙に悪影響を与えているらしい。 gitローカルから、git push origin masterをした。 ファイル数は約1900。 pushが終わったので、早速、別のgitローカルにて、git clone。 ところが、以下のエラーが出てしまい。 戸惑ってしまった。 $ git clone ssh://****@**********/var/repos/scripts Initialized empty Git repository in /home/****/repos/scripts/.git/ ******'s password: remote: Counting objects: 1923, done. remote: Compressing objects: 100% (867/867), done. fatal: The remote end hung up unexpectedlyMiB | 1887 KiB/s   fatal: early EOFs:  95% (1827/1923), 1.04 MiB | 1887 KiB/s   fatal: index-pack failed Notonなどのセキュリティソフトが入っていた場合に 、 一時的に無効にして行うと上手くいく可能性が高いようだ。 特に 数千単位のファイル管理では有効 だ。 高速で、痒いところに手が届くGitだが、いろいろな、 癖があるので、しばらくは時間を浪費する覚悟が、 必要かもしれない。 ついで、以下の方法でリモート(origin)側を作成すると、 ユーザー、グループ権限について正確に作成できるらしい。 $ sudo -u git mkdir -m 775 /u/git/plugins/plugin_name.git $ cd /u/git/plugins/plugin_name.git $ sudo -u git git --bare init --shared=group 僕の環境ではgitユーザーを自分のユーザー名にして、 他の開発者と同じグループにして

Yahoo Mail, Google MailのSMTP認証

DKIM、DomainKey,SPFについて、現在わかっていることを、まとめる。 Google Mail (gMail)) DKIM対応 Yahoo Mail DomainKey対応 当たり前かもしれないが両方SPFもあわせてチェックしてくれる。 尚、メールクライアントは必ずSMTP Authで送る必要がある。

BootCamp 3.1と日本語入力

BootCampを3.1にアップグレードしたところ、 KbdApple が使えなくなってしまった(MacBook Pro 2009)。 そのため、漢字入力トグルキーが使えなくなってしまった。(Alt+ESCが使えるが副作用がある) そこで CmdSpace にしたところ、動いたので、 それを使うことにした。 尚、日本語入力はMS-IMEを使わずに、 Google 日本語入力 (無料)を使っている。 Beta版だが評判が良いようないので、 インストールしてみたがなかなかよい。    

Gnome内 Twitterクライアント・ソース・ハック

C言語 開発プラットフォーム GTK+2 通信 Soup(返信は非同期のコールバックか) 送信 http、基本はGET、特殊でPOST 返信通信プロトコル xml (Twitterはxml,json,rss,atom選択可能らしい) 認証方法はBASIC認証、OAuthは未対応 GnomeにはKeyringというものがあり、   そこにサーバーとパスワードを結び付けている仕組みがあるようだ。 twitux_keyring_get_password()によって、保存さているパスワードを取得する。 2か所で使っている。一つは設定用ダイアログともう一つは通信用。 twitux_account_dialog_show() app_login()      request_username_password() TwituxAppが肝 TwituxAppPriv   username ,password   twitux_network_login() ログイン app_retrieve_default_timeline() ディフォルトのタイムラインを取得 *ログイン処理と認証*          /* HTTP Basic Authentication */ g_signal_connect (soup_connection, "authenticate", G_CALLBACK (network_cb_on_auth), NULL); /* Verify cedentials */ network_get_data (TWITUX_API_LOGIN, network_cb_on_login, NULL); network_get_data()がTwitterのAPIラッパーらしい。(GET method) BASIC認証     "https://twitter.com/account/verify_credentials.xml"  *タイムライン* twitux_network_get_timeline()  タイムラインのコア部 友達のタイムライン取得     "https://twitter.com/statuses/friends_timeline.xml" network_cb_on_timeli