Technicalの最近のブログ記事

CMSのconcrete5を使ってみた

| | Technical | コメント(0) | CMSのconcrete5を使ってみた

MOONGIFTさんのところで紹介されていたCMS「concrete5」をインストールして軽く使ってみた。

とりあえずLAMPの環境ということでUbuntu Serverに。

PHPはGDサポートが必要なので、apt-get install php5-gd しておく必要あり。

あとはconcrete5のREADMEにあるように、MySQLに空のデータベースとそれにアクセスできるユーザーを登録しておく。

あとはconcreteにアクセスして、サイト名やMySQLの設定情報などを入力すると、MySQLにテーブルが作成されて、すぐにインストールが完了。

concrete5

どうも、サイト名のところは日本語が通らないで文字化けした。それ以外のテキスト部分は日本語はきちんと表示されるけど、日本語ファイル名をアップロードすると文字化け。

使い勝手から言うと、これはすごい。

大まかなレイアウトを決めて、そこにテキストや画像、Flashやビデオ、RSSなどのコンポーネントを置いていくような感じでサイトを作ることができる。

管理画面ではアクセス状況がグラフで表示されるし、コンポーネント(Block)の管理などすべてブラウザ上からできる。

ただ日本語が正しく表示されないところがあるので、日本語向けに何らかの修正をしないといけないだろう。

それから管理画面や編集画面を日本語化すれば、これはかなり普及しそうな雰囲気。

例えば簡単な社内イントラネットのサイトとか、編集がWYSISYGなので、ちょっとした仲間内や組織内でサイトを立ち上げる場合で、HTMLやWiki書式を知らない人が関わるようなケースには良さそうな気がする。

あとから考えたら、できて当たり前、だったんだけど。

事前にコミットユーザーを認証登録しておくのが当たり前だと思っていたので、認証なしでコミットできるってすっかり忘れていた。

社内の他チームにソースをリリースすることになって、SVNのリポジトリパスを教えてもらったけど、コミットユーザー名は何も言われなかった。なので「認証のためのユーザー登録して欲しいんだけど」と言いに行ったら「そんなことするんだっけ?何もしなくてもウチのチームは使ってるけど」と。

ふと、「認証が無いときのコミットユーザー名は何になるんだろう?」と思って調べて見ると、その時にクライアントマシンにログインしているユーザー名になるみたいね。

そこのチームは、Windowsのファイル共有を使って、file:/// の形式でリポジトリを共有していたというわけ。svnserveもapacheも使ってなかったというわけで...。

今までApacheでBasic認証する環境でしかSVN使ったこと無かったので、ある意味新鮮ではあったな。

私の周りで起きてきたトラブルプロジェクトを見てみると、コード内の状態管理が破綻してしまってバグ多発、というケースがほとんどのような気がする。

  • 仕様変更が入る
  • 仕様変更分を新たな「状態」として定義を増やす
  • すでにコーディングした場所の修正を最小限にしようとして、「フラグ」を追加したりする
  • そういうのを繰り返すうちに意味合いのよく分からない「フラグ」が増えてくる
  • バグが発生した時に修正しづらい、修正してもデグレードする

...という悪循環。

こういうケースはウチだけでは無くてどこにでもある話しなんだろうけれど、他機能の状態まで判定して処理分岐しないといけない、なんてなるともっと話しがややこしくなる。

管理する状態の数が少なければ、テーブル化するなりという手があるんだろうが、数十にも渡る場合はどうすればいいんだろう?

ときどき聞く設計時の「モデル検査」の手法でも状態マトリクスを作成して検査するわけだけど、状態の数が増えると二次関数的にマトリクスが増えていくわけで...

根本は、「状態」を減らすことなんだろう。

「状態A=n かつ 状態B=m かつ 他機能状態C=x の場合は」というような複合条件を、一つ下のレイヤで判断させ、上位レイヤにはそれ自体の判定結果を返すようにするとか。そうすると少なくとも上位レイヤのコードは見やすくなるはず。

ただ判定処理のレイヤは気をつけないとすぐに「状態判定関数A()、状態判定関数A_forXXX()」のようにイタズラに関数が増えていって収拾が付かなくなることになりかねない。

特に仕様変更が入りやすいプロジェクトは設計時にすべてを洗い出せない分、「あとから追加」のワナに嵌りやすい。

業務アプリにしろ組み込みソフトにしろ、この辺をいかにうまく作れるかでトラブルになるかならないかの分かれ目になるんだろうな。ちょっといろいろ調べてみよう。

昔はVirtualPC、そしてここ最近はVMware Playerを使っていたのだけど、VirtualBoxもバージョンが2.x系になったというのでインストールしてみた。

たしか1年半以上前に一度使ってみようとしたのだけど、不安定だったのと速度が遅くて使うのを止めた気がするのだけど、新しくなってどうなったんだろうか...

Windowsホストで使ってみた場合

速度的にはVMwareと変わらない感じ。ベンチマーク取ったわけではないけど。ただ一つ残念なのは、ネットワークの設定。NATもBridgeも仮想NICを手動で追加して、さらにコンパネのネットワークから既存の物理NICと「ブリッジ接続」しないといけない。

VMwareはそんなことせずにNATもブリッジも使えたし、設定ツールでNAT時のポートフォワーディングまで設定できる。ネットワークに関しては明らかにVMwareのほうが上かなぁ。

VirtualBoxのほうが優れているのは、仮想マシンをGUIから作成できること。VMware Playerはあくまで"Player"なのでできないからね...。あとは見た目がすっきりしてることかな。VMware Playerはウインドウの縁が太くてデザイン的にどうかなってところ。


OSXホストで使ってみた場合

続いて初代Macbookにインストール。すでにParallelsにXPを入れて使っているので、Gentoo Linuxをインストールしてみた。

ネットワークの設定はOSX版のほうが断然良く、Windows版のように自分で仮想NICを追加したりしなくても、物理NICの一覧から接続したいものを選択するだけであっさりと完了。

こちらも動作速度はXP同士で比較したわけではないけど、Parallelsと遜色ない感じ。Gentooをちょっと動かしただけだけど、安定しているしけっこう使えるかも。ただUSBやサウンド、共有フォルダまで試してない。


ちょっとUnixをインストールしてみたいという用途ならVirtualBoxは使える。ヘビーに常用するレベルに耐えられるかはわからないけど、それでもけっこういい線行ってそうな感じがした。

ちょっと興味が出てきたので軽く調べてみようと思う。

コーディング前の設計を手厚くして仕様の漏れや抜けを無くすってことなんだと思うんだけど、先入観で「手間かからないかなぁ」という思いはある。

あと頻繁な仕様変更に耐えられるのか、とか、とにかくマイルストーンの短いプロジェクトに適用できるのか、とか。

そのまま適用は無理でも、いいとこ取りできないかなと思ってみる。

社内のとあるところから聞いた。こんなのがあるんだな。

http://julius.sourceforge.jp/

本格的に認識させようとしたら辞書の精度上げたりとかしないといけなさそうで、ちょっと知識が無いとハードルが高そうだけど、標準で配布されてる辞書でもそれなりの認識をしてくれるのかな?

ぜんぜん試してないけど、ちょっと面白そうではある。

社内に立てた「しゃべる」。

使っていたユーザーから「画面の色が目立つので、仕事中にページを開いているとサボってると思われるw」と言われたので、背景色を目立たない色とかに変えたりしていたのだけど*1、たしかTwitter APIをサポートしてるとか書いていたよなぁ...と。

なのでWebからではなくてTwitterクライアントツールを用意すればいいんだと気づき、ソースが公開されているものの中から、TwitterIrcGateWayからの接続にチャレンジしてみることに。

ソースのAPIエントリのURLを変更して、しゃべるに接続してみたのだけどタイムラインが取れていないっぽい。

ちょっとデバッグしてみると、TwitterIrcGateWayからは以下のような要求を出していた。

http://127.0.0.1:8080/statuses/friends_timeline.xml?since=%4d%6f%6e%2c%20%30%31%20%4a%61%6e%20%30%30%30%31%20%30%30%3a%30%30%3a%30%30%20%47%4d%54

どうも、sinceオプションがついていると

  <?xml version="1.0" encoding="UTF-8" ?> 
- <hash>
  <request>/statuses/friends_timeline.xml</request> 
  <error>処理を中断しました。</error> 
  </hash>

と、なるようだ。ちなみにsinceオプションを付けないとちゃんとデータが返ってきている。

まだ未サポートなのかバグなのかわからないけど...

  • *1: 作者のtechmonkeyさん、ごめんなさい

なんども中途半端になって放置してたRubyの勉強をまた少し初めて見た。

たまに仕事中に「これLLでさっと処理できるんじゃないかなぁ」みたいなシチュエーションがあるんだけど、PerlもRubyもそれ以外のLLも「さっと書ける」レベルには無く、作るのに言語リファレンス引きながら時間かかってしまう。

そういうシチュエーションを最近何度も経験してたので、今回はRubyを、まずはごくごく簡単なスクリプトが書けるところまで勉強しようかと。

基本的には、いつも使っているC言語や、ちょっとしか使えないPerlとの「書き方」の差を覚える感じ。言語によって、配列の初期データ指定が()だったり[]だったり、{}だったりとか、そういう差を。

あとRubyなのでClassまわりも。


たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング高橋 征義

ソフトバンククリエイティブ 2006-08-05
売り上げランキング : 19544

おすすめ平均 star
starRuby入門書としてはこれが一番お薦め。
starプログラミング初心者にとっては少し難易度が高いかも
star変数のスコープと寿命について詳しく書いて欲しかった

Amazonで詳しく見る
by G-Tools

何十回も設定しなおして、ようやくポストが上手くいったみたい。

LouidTwitterはXMLRPCだとぜんぜんポストされなかったので、Atom APIを使うようにしてみたらあっさりと。

Movable TypeでAtom APIを使うやり方ってググってもほとんど出てこなかったんだけど、URLは

http://ドメイン/mtの場所/mt-atom.cgi/weblog/blog_id=1/

っていうような指定をするらしい。blog_idは書き込みたいブログの番号。MTを自前で立てていて、ブログを1つしかやっていないならおそらく1で良いと思う。

ユーザー名とパスワードは、XMLRPCの時と同じ。パスワードはMT4の場合はユーザー設定の画面に出ている「Webサービスパスワード」のほうを指定する。

とりあえず4時すぎに一日分のTwitterログをポストするようにしてます。しばらくやってみて鬱陶しかったら止めるかも...。

Windows上でのビルドは環境構築がややこしいかと思っていたけど、日本語の公式ページや、綾川版のページを見ながらやったら、すぐに構築できた。

とりあえずあまりオプションをいじらないで、SSE2最適化をかけた自前ビルドは完了。ちょっとだけ速くなったような気がしないでもない。

本命はPGI/PGUのオプションを使ったプロファイルデータを使った最適化だけど、PGUでリンク中にLNK1257のリンカエラーで異常終了してしまう。メモリが足りないのか、元のプロファイルデータが多すぎたのか...。

いまはコンパイルオプションを少しずつ変えながら、リンカエラーが出ない組み合わせを模索中。

mozillaのWindows版はVisual C++のコンパイラを使っているので、SSE3とかマルチコアCPUに最適化しきれてないような気がする。Intelのコンパイラ(有償)とか、gccでコンパイルできればまた少しは違ってくるんだろうけどね...。

特定の色を透過色として、その色だけマスクして描画する方法がわからない...。

アルファブレンディングを工夫すればできないかなぁとは思っているけど、OpenGL ESなのもあって、フル機能じゃないんだよね。

iPhone SDKのドキュメントを見たりxcodeをいじってみたりしていたんだけど、どうにも私の頭では理解が進まない。

beta7になってxibファイルが2つになったり、delegateが増えたりしてるようで、これだけで少し混乱中。

xcode起動して、適当にプロジェクト新規作成して*1、それから何すればいいのか途方に暮れる。...10何年前にVisualC++ 4.0を初めて触ったときと全く同じ感じ。

Interface Builderで部品を配置したあとに、何か関連づけるはずなんだけどそのあたりがやっぱりパッとわからない。ドキュメントも英語だし、初心者向けでは無いのか分かったような分からないような。

OSX、iPhone、Objective-Cと、まったくの素人が手を付けようとしたときに、まず何から勉強すれば良いんだろう。Objective-Cからかなぁ。

  • *1: 新規作成の時に出てくるプロジェクトの種類の違いもよく分かってない

数年ぶりにCOMポートなんぞを触ることに。

シリアルポートをどんな形式のデータが流れているかを調べるのに、SysInternalsのPortMonというツールが重宝する。

4年くらい前にUSBシリアルポートのドライバを作ったときに知ったツールなのだけど、COMポートのパラメータ設定から送信、受信の流れに至るまでログ取りできてデバッグにずいぶんと役に立った。

今回は仕様が公開されていないプロトコルの解析をして、そのエミュレータっぽいものを作ろうとしているので、そのデータを見るのに久しぶりに活躍してもらった。

SysInternalsのツールはけっこうお世話になっているなぁ...

MovableType4に入れ替えてから、MacBookのFirefoxでMT4の編集画面からエントリが入力できずに困っていた。

ちょうどFirefoxも3.0betaを使っていたのでそのせいかと思っていたのだけど、ググってみたらこういうことだったらしい。MT4内のドメインの設定と、実際にアクセスしているドメインが違うと編集画面はほとんど動かなくなってしまうらしい。

たしかに、自分のブックマークを旧ドメインのfindup.dyndns.orgのままにしていて、www.swingingblue.netにしてなかった。ブックマークを修正したらきちんと動くようになった。

参考にさせていただいたサイト:BLOG × WORLD ENDING

Fedora6から9にアップグレードするテストで、手元のPCのVMWare Playerで環境を作ろうと思いvmxファイルを作ってくれるツールがあったよなぁ...とググっていたら、EasyVMX!というサイトを見つけた。

ここは必要事項を入力すると、vmxファイルに加えて空のディスクイメージファイルまでをzipにまとめてダウンロードできるようにしてくれる。なんだか至れり尽くせり。

もうディスクイメージをどこかからダウンロードしてきたり、qemuのツールで作ったりしなくていいのが楽で嬉しい。

FedoraCore9がリリース。会社で管理しているサーバでFedora6相当のマシンがあるんだけど、順番にyumしていってFedora9までアップグレードできるのかなぁ...。

古いままだとセキュリティFIXのパッチもでなくなるし、かといってOSから再インストールする暇も無いしそんなに長い時間サーバを止められないし。

検証環境を作って試してみるのがいちばん良いのかも。そのサーバはFedora5でインストールしたものを6にあげている環境なので、Fedora5から順番にアップグレードのテストをやってみるかな。

iPhoneでアプリを作るところまでできるかどうかわからないけど、自分のiPod touchで自作アプリを動かしてみたいという欲望だけで99ドル払ってみた。

まだOSX用のアプリ開発チュートリアルを終わらせたばっかりで、iPhone向けの勉強はまだ全然していないんだけどね。とりあえずXcodeを使ったMVCの開発の手順は何となく理解したかな。アウトレットの辺りがちょっとあやふやなところがあるけど。

この払った99ドルが無駄にならないようにiPodのほうも時間を見つけてサンプルコードとかを動かしていきたいなぁ。

「たのしいCocoaプログラミング」の本を読みながらXcodeを触ってみたのはいいんだけど、これってXcode2.0向けだったのね。LeopardはXcode3.0。なんかIntefaceBuilder周りの使い方がけっこう変わっていて本に載っている通りには進められないみたい。

ADCのドキュメントはXcode3.0対応なんだけど、英語も日本語も分かりづらい(特に日本語訳はイマイチ)。

語句もレスポンダ、とかアウトレット、とか違うところがあるので脳内変換できるまでは戸惑いそう。なんかViewとControllerのあたりのXcodeとIntefaceBuilderの操作がスッと頭に入ってこない感じ。

  • AppController(というか、コントローラクラス)はXcode上でクラスを作るのか?それともIntefaceBuilder上で作るのか?
  • 画面部品とコントローラクラスを関連づける方法は?アウトレットを使う?
  • Xcodeでコントローラクラスには何を記述すればいい?

などなど、超基本的なところでつまずいている。

もう少しサクッといけるかと思ったけど、頭悪くなったのかなぁ...

とあるきっかけでOpenGL ESを少しだけやることになるかもしれないのだけど、開発環境がそのデバイス用のものだといろいろ手順が多くてコンパイルして実行確認、というサイクルに時間がかかる。

OpenGL ESならAPIは決まっているんだし、Windows上でエミュレートできれば、ある程度の実装はWindows上で行ってしまって、Cのソースをそのデバイスに持って行ってコンパイルできれば開発も楽になるだろうなぁと。

それでWindowsでも動くOpenGL ES実装を探していたのだけど、なんとなく使えそうなのが

と2つあったけど、まだ実際に試してないのでシステム要件が何かあるかもしれないね…。

iTRON

| | Technical | コメント(0) | iTRON

iTRONを少し調べたほうがよくなってきた。

オープンソース実装でTOPPERSというのがあるらしいので、それを見てみるか…

iPhoneSDK

| | Technical | コメント(0) | iPhoneSDK

ベータながら出たね…。

早速ダウンロード中だけど、2GBもあるのか。

でも正式版SDKが出るときには有料会員にならないといけないのか。

しかもアプリはAppStore経由でとあるけど、たとえば自分だけで使いたいアプリなんかはどうするのか?デバッグ用に本体に転送できそうではあるからそれをそのまま使う形になるんかな。

ちょっとまだ謎が多い。

社内の新しいWikiに、DekiWikiを使ってみようと思い立ってインストールしようと格闘したけれどけっきょく失敗。

本家サイトのXAMPP環境向けのインストールチュートリアルのとおりにやってみたのだけど、インストーラまでは動作するものの、Wikiにアクセスしようとすると

Site settings could not be loaded

Your site settings could not be loaded. This is most likely the result of misconfiguration of your API (or your API's location)

とエラー。HTTPエラーは504。

エラーを出している周辺のソースも見てみたんだけど、要するにDekiServerに接続できていないか、DekiServerが504を返しているんだろうとは思うんだけどなぁ。ただ、DekiServerもブラウザから直接アクセスするときちんと動作しているようだし、原因不明お手上げ。

本家サイトのフォーラムも見てみたけど、同じような症状になっている人はいるけど解決しているような風ではないし。

高機能なWikiの分、ソフトの構成も複雑っぽいね。.NET Framework使ってたりとか、mod_rewriteとかが必要だったりインストールは難しいね。時間があればまたいずれチャレンジしてみるけど、社内WikiはすぐにインストールできるPukiWikiPlusにしてしまった。

JavaのWEBアプリからLAN内のIPMessengerへメッセージが送信できるライブラリがないか探していたら、Project Amaterasにあった

封書で送るかどうかも選べるし、とりあえずの目的は達成できそう。

受信ログをため込むようにすれば、全体に流れているメッセージのログを取って公開することも可能だな…。たまたま受け取れなかった人にはちょうどいいかもしれない。

Javaプログラムからコミットログを取得して加工したかったので、Javaから扱えるSVNライブラリを探してみたら、SVNKitというのがあった。

サンプルを見る限り、コミットログの取得も簡単にできそうなので明日ちょっと試してみる。

会社で使っているGroupSessionというフリーのグループウェア。StrutsベースのWebアプリでソースも公開されているのでちょっとした改造やプラグインの作成もできる。

開発環境を整えるためにいろいろ試行錯誤したけど、できてしまえばなんてことはなかった。ただ、公式サイトを見てもこのあたりの情報は無かったような…。使うのがメインで自分で手を入れるようなことをしている人は少ないのかも。

まず環境。

1.GroupSession2のWARファイルをEclipseにインポート

WARファイルをインポートすることでプロジェクトも新規作成される。自分でプロジェクト作っていろいろ設定するよりかなり楽。

ピクチャ 1

Tomcatの設定もこのときに。基本的にはTomcatのインストールディレクトリの位置を指定するだけ。

ピクチャ 2


2.プロジェクトにソースディレクトリの追加

インポートしたままの状態では、すべてのソースファイルがプロジェクトに認識されていない。認識されていなかった、WEB-INF/plugin以下のディレクトリにあるソースディレクトリをプロジェクトに追加していく。

必要なディレクトリを追加すると以下のようになる。

ピクチャ 3


3.JUnitのjarをプロジェクトに組み込み

JUnitの単体テスト用のソースでビルドエラー表示が出るので、JUnitのjarをプロジェクトに設定。ここまでの設定を行うと、Javaソースのエラー表示はすべて消えるはず(JSPのエラー表示は残るが特に問題ないようだ)。

ピクチャ 4


4.Tomcatをデバッグ起動してデバッグ

あとは適当な場所にブレークポイントを張ってJavaソース、JSPともデバッグすることができる。


GroupSessionは便利ではあるのだけど、かゆいところに手が届いていないような仕様もあって少しの改造でなんとかなりそうなら、要望を出すより自分でいじったほうが早い。

あと、上記の方法でプロジェクトを作るとGroupSessionに付属のantビルド用のbuild.xmlは使えないかも。ソースやclassファイルの格納場所が変わってしまうので。

build.xmlを修正すれば大丈夫だと思うけど、そこまでやれてない。もしかすると本番環境向けのビルド設定を別にしないといけないと思う。ここに書いたのはあくまでローカルでTomcat起動してデバッグするためのやり方。

やっぱりTomcatのデーモンは自動起動はしてなかったようだ。

ターミナルでコマンドを叩いたときに起動していたらしい。コンソールにはエラーで途中終了したように見えていたけど。

あと、MacPortsでTomcatをインストールした場合は、/opt/local/share/java/tomcat5/conf以下にある.sampleの設定ファイルをそれぞれリネームしておかないといけない。とりあえずそれぞれの設定ファイルの中身はいじらなくても動かすことはできる。

初めてのMacPorts。

EclipseとTomcatの連携がしたかったんだけど、何にも見ずにMacPortsからTomcat5をインストールしたら、Tomcatの管理者パスワードが不明。admin/なし、じゃなさそう。

あとはインストールすると勝手にデーモンとして起動してしまっているようだ。でも実際のplistファイルを見ていると、disableに見えるんだけど…謎。

新規の仕事で使うSVNリポジトリのフォルダ構成を考え中。

複数のサブチームがそれぞれ分担して開発するわけだけど、サブチームどうしの結合開始まではそれぞれのサブチームごとにTrunkのようなものを用意し、結合開始時点で結合用のTrunkを用意したほうがいいのか、最初から結合向けのTrunkを一つだけ用意してそこにそれぞれコミットしてもらうほうがいいのか…

それぞれのチームの開発ペースやコミットポリシーが異なるという前提なら結合前と後でTrunk的フォルダを分けたほうがいいだろうけど、その分結合は誰かもしくはツールで毎回やらないといけないんだよなぁ。

開発序盤から一つのTrunkというのもお互いのコミットが干渉しているようで嫌かな。実際ソースファイルは基本的にチーム間で分離しているので共有するファイルはほとんどないはずではあるのだけど。

今のところ結合前後でTrunkを分ける方向にしようかと思っているけど、とりあえず明日周りの人に聞いてまわってみるかなぁ。

C#でアプリを作っていて、

  • Webページのような、文字や画像を表示してリンクをクリックできる表示領域
  • ただし、通信はHTTPを使わず独自形式
  • リンクをクリックするとURLではなく独自形式のコンテンツに遷移

というようなことをしたかった。

MSDNヘルプでWebBrowserコントロールの説明を読んでいると、やりたかったことが実現できそう。

HTMLをプログラムから、WebBrowserコントロールのDocumentTextプロパティに流し込めば通信をしなくてもWebページが表示できるし、Javascriptでwindows.externalクラスを使うと、.NETアプリの特定の関数を呼ぶことができ、onClickと組み合わせるとHTMLのリンクのクリック処理を完全に制御できるっぽい。

これは使い方によっては使い道のありそうなコントロールのような気がする。単純にHTTPを使ったWeb表示ではなくて、アプリローカルに閉じたコンテンツの表示にも使える。文字や画像やスクリプトも使えるしHTMLを少しローカルアプリ用に作ればHTMLの表現はほぼすべて使えるわけだし…。

明日以降もちょっとこのコントロールでいろいろ遊んでみるつもり。

.NET FrameworkからWin32APIを叩くのが面倒すぎる。

いちおうC++/CLIを使ってネイティブAPIをラップするクラスを作っているのだけど、まともにマネージ型との型変換を考えると面倒で…。String型からchar*の配列にするのもすんなりできないっぽい*1し、ネイティブのGUID型とマネージのGuid型とやりとりする仕組みもないし、バイナリデータを扱うのでネイティブのbyte配列をどう扱えばいいかというのもあるし…

.NET Framework上だけで全ての事が済めば苦労しないんだろうけど、実際はネイティブのAPIでしかできないこともまだまだあるし、既存のC/C++のコードを読んだりするシチュエーションはあるからなぁ。

たしかにC#とかからマーシャリングの定義をいちいち書くのに比べればC++/CLIのほうが柔軟性はあるんだろうけど…。最近、このへんの相互変換でハマりまくっているので愚痴。まぁ私のスキルも全然足りてないんだけれど。

  • *1: pin_ptr使えばいいのかな…

本当に今さら感というか時代遅れというか、Strutsを少しだけかじってみようかと。しかもバージョン1系。

なぜかというと、チーム内でGroupSessionというフリーのグループウェアツールを使っているのだけどそのプラグインを作るために必要なのです。要はGroupSessionがStruts1.xベースのツールだから。

ちょうどStrutsのようなJavaのWebフレームワークが広まり始めるかどうかというときに、仕事でJavaから離れてしまってはや数年。なのでStrutsやらRailsやらフレームワーク系が盛り上がっているときにぜんぜん仕事で触れてないのを復習しようかと。すでにその頃は組み込みっぽいほうをやっていたし。

できればあまり学習時間をかけずにグループウェアの拡張ができるようになれればいいんだけどね…

とりあえずダウンロードしただけ。動かしてない。

会社の休み時間にちょっと触ってみようとダウンロードを試みたけど、なんかプロキシか何かにひっかかってダウンロードできなかった。

アプリを作るためにどれくらいのコード量を書かないといけないのか、また画面まわりを制御するのにアプリレイヤでどれくらいコードが必要なのかが興味あるところ。記事などを見た感じではAPIがかなり高レベルまでまとまっていそうな感じだけど、どうなんだろう。

PDC時代からのソースをずっと拡張、また拡張で来ている日本の携帯メーカーの開発に比べて、すごく効率の良い開発ができるのなら、日本メーカーも安い大量のPGを抱えて根性でソースを保守し続ける開発もアホらしくてやってられないというふうになるのかも。

最近、Bluetoothアダプタを買ったので、WindowsプログラムからBluetoothを制御できるか調べていたんだけど、面倒というかいろいろ思ったようにいかないのね。

まず、BluetoothスタックがMicrosoft純正のものと、ベンダ製のが存在すること。買ったプリンストンのPTM-UBT3Sという小さなデバイス。これにはドライバとしてToshiba製のBluetoothスタックがついている。

このスタックだと、Microsoftが用意しているBluetooth APIも、Winsockを使ったBluetoothデバイス制御もできない*1。Microsoft純正ドライバで認識させないとプログラムから制御はできないということ。*2

Bluetooth APIが使えたところで、できるのはデバイス認識とリモートデバイスの検索とペアリングまで。実際に各プロファイルを使ってデータ通信したりするのには自力で作らないといけないようだ。OBEXを使ってファイルのやりとりをしたくても、標準のライブラリが無いので自作するか商用のライブラリかフリーのライブラリを探さないとダメ。

おおげさかもしれないけど、なんとなくBluetoothが垢抜け無いというか広まらないのはこういうところにあるんじゃないのかな。単純に製品付属のアプリでファイル転送したりするという普通の使い方をするには問題ないのだけど、独自にアプリケーションから制御できればもっといろいろ使い道が出ると思うんだよね…。USBと違って無線なわけだし。

ベンダのドライバではAPIが使えない、Microsoftのドライバだとプロファイルが少ない、APIが使えても実際のプロトコルは用意されていない…。このままだとWireless USBとかあの辺の新しい規格に持って行かれたりしないのかな。

けっこう開発者泣かせなBluetoothです。

  • *1: そもそもデバイスとしてAPIが認識せず、デバイス未接続と返ってくる
  • *2: WIDCOMMスタックだと別のAPIがあるらしいけど、仕様書を見つけられず

こうして見てみると、主要なものはあるんだなぁといった感じ。

東京のように大物ギークがいるとか、しょっちゅうイベントや集まってるとかいうところまでは無いかもしれないけど、それでも活動している方々がいるだけでも福岡も捨てたものじゃないかもと思ってしまう…けど自分は何にも力になっていなかったりするのがね。

Java:Javaコミュニティ@九州

Ruby:Rubyビジネス・コモンズ

PHP:PHP in Fukuoka

Web系(Lightweight Language):福岡で働くWebの人々

組み込み:九州組込みソフトウェアコンソーシアム

人材交流:AIPコミュニティ

セキュリティ:セキュリティとんこつ - ばりかた

エントリするほど難しくは無いんだけど。

ソースをダウンロードしてきて、configure,make,make installで良い。

あとはOSXの起動時にデーモンとして自動起動させるだけなんだけど、/etc/init.d/ なんてものは無い。OSXの場合はlaunchdというものらしいんだけど、その設定をGUIで行うツールがLingonMAC REVIEWというサイトで見つけた。

これで設定ファイルを直接触ることなく、デーモンとして追加。常にローカルで起動するようにしておき、プライマリDNSを127.0.0.1に向けることでDNSキャッシュを使うようにした。

VMWare PlayerでNATを使ってネットワークにつないでいる場合、デフォルトではホストPC意外からの接続はできない。

でもWMWare Playerに付いてくるvmnetcfg.exeを使うと、ホストPCとの間でポートフォワーディングの設定ができる。

たとえば、ホストPCのIRCポートへの要求をNAT上のWMWareにフォワーディングしたい場合は、VMWare側のIPアドレスと、IRCのポート番号6667を以下のように設定する。

VMWare_03

これでWindows上にUnix系のOSをWMWareで立てて、両方のサービスをネットワーク上に提供することが可能。どうしてもWindows環境をベースにしないといけない場合とかには使えるかも。

LDAPの内容を表示するrubyスクリプトをrubyの勉強がてら作成中。

ネットを調べてみるとrubyでLDAPを扱うにはruby/LDAPを使っているケースが多かった(RailsだとActiveLDAPらしい)。

ただこれ、Windows環境だと自分でコンパイルするのが面倒。MinGWでもMSVCでもできるらしいんだけど…

さらにググってみるとすでにコンパイル済みのバイナリを置いてくれているサイトを発見。ありがたく使わせてもらうことにした。

とりあえず、zImageの作成までできたのでまとめ。

ポイントとしては、buildrootはなるべく最新版を使うこと。どうも前回環境構築したときのsnapshotと昨日今日あたりのバージョンでは動作が違う。snapshotを新しいのにしたらすんなりと行った。

とりあえず手順をおさらい。

  • ubuntuは標準では開発環境がインストールされていないので、sudo aptitude install build-essentialで開発環境をインストール。
  • buildrootのsnapshotを本家サイトからダウンロード。もしこの後の手順やビルドでうまくいかないときは、svnからチェックアウトしてくるか次のsnapshotが出るのを待つのが吉かもしれない
  • buildrootをコンパイルするために必要な、flex、gettext、bison、texi2html、libncurses-devをインストール
  • 作者Wikiサイトには、binutilsなどをあらかじめダウンロードしておくように書いてあるが、実際はこの後のmake中に勝手にダウンロードしてくれる
  • buildrootを解凍したディレクトリで make menuconfig
  • Linuxカーネルと同じようなコンフィグ画面が出るので、CPUをarm(xscaleサポート)など、作者Wikiサイトに書いてあるように設定
  • 設定が済んだら、make。クロスコンパイルに必要なbinutilsやgccは勝手にダウンロードしてくれる
  • 途中、binutilsのmake中にmakeinfoが見つからないというエラーで止まる場合は、buildroot/toolchain_build_arm/binutils-2.17/missing を以下のように修正する

--- missing.old 2007-07-08 22:18:09.000000000 +0900
+++ missing     2007-07-08 01:04:28.000000000 +0900
@@ -106,9 +106,9 @@
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
 # the program).
 case "$1" in
-  lex|yacc)
+  lex|yacc|makeinfo)
     # Not GNU programs, they don't have --version.
     ;;

   tar)

  • buildrootのmakeがエラー無くすべて通ったら、buildroot/build_arm/staging_dir/usr/bin 以下にarm-linux-gcc など、ターゲット環境(ARM用Linux)向けのコマンドがいろいろと作られていることを確認
  • buildroot/ 以下にrootfs.arm.cpioファイルが出来ていることを確認。 
  • buildroot/build_arm/staging_dir/usr/bin を環境変数PATHに追加

buildroot関係の手順はここまで、以下はLinuxカーネルのビルド

  • buildroot/build_arm/に、linux-2.6.21あたりのカーネルがあるのでシンボリックリンク"linux"を張る
  • cd linux
  • 作者Wikiにあるとおりにコマンドを打つ
  • make ARCH=arm CROSS_COMPILE=arm-linux- mrproper
  • make ARCH=arm CROSS_COMPILE=arm-linux- allnoconfig
  • make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
  • コンフィグ画面では作者サイトにあるとおりに設定。もしかするとConsole Display Driverの設定で"VGA text console"をはずし、"Frame buffer console support"を入れた方が良いのかも?
  • カーネルのビルド。make ARCH=arm CROSS_COMPILE=arm-linux-
  • ビルドがエラー無く終わったら arch/arm/boot/ にzImageが生成されていることを確認。

あとは、[es]にコピーしてloaderから起動!

…だけど、作者曰くの"カーネルを一部修正する必要あり"というのと、LCDドライバの調整をしていないのでそのままでは100%?起動しないのでは。私の[es]だと画面が真っ白になってフリーズした。

カーネルデバッガが使えれば、こういう起動時のデバッグもできるんだろうが、kgdbを組み込んでもシリアルポートが使えないからリモートデバッグもできないだろうし…。

環境構築は時間が取れないので進展なし。

もうひとつ、自分がハマったところをメモ。

buildrootのmake中に↓のような感じのメッセージが出て、cpコマンドのエラーでビルドが止まる場合…。

cp: missing destination file operand after `./buildtool/toolchain_build_arm/xxxxx'

cpコマンドの引数が足りない。コピー元の指定が無いままcpコマンドを実行している。

こんなときは、make menuconfigでbinutilsやgccなどビルドエラーが出たツールのコンフィグファイルを設定している箇所に変な文字が入っていたりする可能性を疑うと良い場合がある。

--- Binutils Options
     Binutils Version (binutils 2.17)  --->
    ()  Additional binutils options      ←こんな感じの場所

たとえばbusyboxのコンフィグファイル指定で見ると、buildroot/.config に空白の設定項目があったら、思い切ってコメントアウトしてみると上手くいくことがある。でも上手くいかないことも。きっと別の原因があるものと…

BR2_PACKAGE_BUSYBOX_CONFIG=""

しかし、こんなところの殴り書きでも読んでくれる人がいるものだ…。

VirtualPC 2007にUbuntuなど、2.6.20あたりのカーネルを使っているディストリビューションをインストールすると、キーボードやマウスが効かなくなる現象があったのだけど、これがたぶん2.6.22で直っているのではないかと思われる。まったくの未確認だけれど。
commit d2ada5597d33a9108acb2caf912f85cbc9caab1e
Author: Roland Scheidegger 
Date:   Tue May 8 01:31:40 2007 -0400

  Input: i8042 - fix AUX port detection with some chips
    
  The i8042 driver fails detection of the AUX port with some chips,
  because they apparently do not change the I8042_CTR_AUXDIS bit
  immediately. This is known to affect at least HP500/HP510 notebooks,
  consequently the built-in touchpad will not work. The patch will simply
  reread the value until it gets the expected value or a retry limit is
  hit, without touching other workaround code in the same area.
    
  Signed-off-by: Roland Scheidegger 
  Signed-off-by: Dmitry Torokhov 
いちおう、2.6.22以外での回避策としてカーネルのブートパラメータに"i8042.noloop"を追加してブートすると良いらしい。これも未確認。

ubuntuでarm(xscale)向けのbuildroot環境作り。

binutilsのコンパイル途中、makeinfoが見つからないと怒られてエラーになっていたのを、binutilsに入っているmissingスクリプトを書き換えて回避。makeinfoコマンドの終了コードがエラーになっているっぽいので強引に無視するように修正。makeinfoコマンド単体ではちゃんと動作していたようだったので。

--- missing.old 2007-07-08 22:18:09.000000000 +0900
+++ missing     2007-07-08 01:04:28.000000000 +0900
@@ -106,9 +106,9 @@
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
 # the program).
 case "$1" in
-  lex|yacc)
+  lex|yacc|makeinfo)
     # Not GNU programs, they don't have --version.
     ;;

   tar)

途中、busyboxのビルドでエラーが出たりしながら、なんとかbuildrootのmakeはすべて通ったっぽい。

…でも、よく見てみると build_arm/staging_dir/bin の下にarm用gccが無い…。make中にgcc本体のビルドが通っていたのは見たので何でできていないんだろう。またハマり。

W-ZERO3でLinuxをポーティングしている作者のサイトで、開発環境のメモが公開された。

それによると、クロスコンパイル環境はbuildrootというのを使っているらしい。

この間、Gentooでcrossdevを使って環境を作ろうとしてうまくいかなかったので、今度はUbuntuでチャレンジ。

  • Ubuntuに開発環境をインストールする。aptでbuild-essentialを。
  • buildrootのsnapshotを本家サイトからダウンロード
  • buildrootをコンパイルするために必要な、flex、gettext、bison、texi2html、libncurses-dev、texinfoをaptでインストール
  • buildrootを解凍したディレクトリで make menuconfig
  • Linuxカーネルと同じようなコンフィグ画面が出るので、CPUをarm(xscaleサポート)など、作者サイトに書いてあるように設定
  • 設定が済んだら、make。クロスコンパイルに必要なbinutilsやgccは勝手にダウンロードしてくれるっぽい

…ということで今日はここまでの手順をやってみた。

けど、make中にmakeinfoが無いって警告が出た後ビルドが失敗する。makeinfoはtexi2html、texinfoのパッケージをインストールして、パスも通っているんだけどね…

こういうガジェットでLinuxが動くと言うだけで、使い道が無くても面白そうだと思う自分はいったい…

W-ZERO3[es]でLinuxPSPでLinuxとちょっと自分の中でブームです。

両方ともベース環境はuCLinuxという組み込み機器向けのコンパクトな?Linuxカーネルのようです。クロス開発環境を揃えればソースはあるので開発しようと思えばできるし、知識のある人ならドライバ解析にチャレンジしてみるのもいいかも。

特にW-ZERO3のほうは毎日のようにリリースされていて、周辺機器がちょっとずつ動くようになってきているみたい。

スラドを読んで初めて知って、帰宅してからまとめWikiからダウンロード。どうも人によってうまくいったりいかなかったりするようで。

私の環境ではハズレ。ただソフトもいろいろ入れてるし、プレーンな環境では無いからかも。

もとは、Virtual PC 2007にubuntu linux 7.04 Feistyをインストールしようとして、マウスが効かないのに気づいた。

ググって見ると、ubuntuの本家フォーラムにもあるように、linux2.6.20、正確には2.6.19あたりからi8042ドライバの挙動が変わったらしく、マウスの動作がおかしくなっているようだ。

kernel.orgを覗いてみると、現在はlinux2.6.21が出ているのだけどこれでfixされているのかな…。どちらにしてもubuntuなどのディストロがカーネルをアップデートしないとインストールし辛いわけだけど*1

  • *1: ubuntuのフォーラムでは、マウスキーの設定をすることでとりあえず回避する方法が書いてある

ちょっとした理由で、Windows上で動作するIRCサーバソフトを探していたのだけど、意外と設定が楽ですぐに使えそうなのが少ない気がした。

UnixのIRCDをWindowsに移植したものは海外製を中心にけっこうあったけど、設定ファイルの記述が分かりづらかったりして、なんとなく取っつきにくい。サンプルを少し書き換えればいいだけではあるんだけど…

最近になってもUPDATEしているものという点で、ignitionServerを試しに立ち上げてみた。これも設定ファイルを少しいじらないと起動しないが、簡単な管理コンソールもついていてけっこう良さげ。

初pythonプログラミングということで、feedparserを使ってTracのRSSを取得するようにしたいのだけど、Tracの吐くRSSの文字コード(エンコーディング)解析に失敗するときがある。

基本的にはUTF-8で出力しているのだけど、svnのチェンジセットやチケットの概要で日本語の長いコメントが入っていたりすると、RSSを出力するときに変な場所で文字を切ってしまうっぽい。

そうすると、UTF-8のRSS文書の中にUTF-8エンコードでは解析できない文字コードの並びが発生して、判別がうまくいかずに、「ISO8859-2/Latin2」なんて変なコードでencodeされてしまう。

feedparser.parse()で文字コードを強制的に指定できればいいんだろうけど、その方法は無さそう。一応、feedparserがどのような優先順で文字コード判別するかというドキュメントがあるのだけど、parseした後で認識した文字コードを変えられるんだろうか…。

ちなみに、UTF-8のRSSをLatin2と誤認識してしまうと、print する際にencode('shift_jis')では、エラーになる。なので、encode()のオプションに'ignore'や'replace'を付けてみるのだけど、

  • encode('shift_jis','ignore') → ASCII文字以外(漢字)が消える
  • encode('shift_jis','replace') → ASCII文字以外(漢字)部分が"??"で出力される

となってしまい、正しい文字が取れない…。本当はTrac側を修正してちゃんとしたRSSを出すようにすべきなのかもしれないけど、私が触れるものではないし、RSSの受け側でなんとか回避したいんだけどなぁ。

PythonでRSSを取得して扱うにはどうしたらいいのか、ググっていたら簡単にできてしまうモジュールがあった。

Python使いな人には常識なのかもしれないが、"Universal Feed Parser"というもの。

import feedparser

d = feedparser.parse("http://findup.dyndns.org/mt/index.xml")

print d.feed.title

print d.entries[0].title

こんなコードで、RSSのタイトルと最新記事のタイトルが取れてしまう。簡単。

とあるソフトのプラグインで、RSSを取得してするようなのを簡単に作ろうと考えた。

ただ、プラグインはC++が前提なので、RSSを処理しようとするとおそらく

  • HTTPサーバとの通信部分(Socket?HTTPプロトコルを簡単に喋れる?)
  • 受け取ったRSSの処理(C++で使えるXMLパーサってMS純正のがある?)

という部分があまり簡単にできそうに無かった(.NETのライブラリとか使えるんだろうか?.NETはほとんど知らないし)ので、実際に通信したりRSSを処理したりするのはそういうのに強いPerlあたりでできないかなぁと考えた。プラグインのC++部