2008年12月26日金曜日

[ CSS ]スタイルシートで中央配置の段組を作る方法

今どきテーブルでごりごりサイトをデザインするのは時代遅れー、なんて言いますが。


わりと面倒なんですよねスタイルシート。
最近マシになってきましたが、ブラウザによって挙動違いますし。


スタイルシートはそれぞれの設定単体でできることが限られています。
複雑なことをしようとすると、いくつかのプロパティを組み合わせる必要があります。


わー面倒。


でもまあ、コツをつかめばそんなに面倒じゃないですよってことで。


今日は今時のサイトならどこでもやっている段組表示をやります。
で、ついでに段組表示を丸ごと中央に表示してみます。

段組の中央揃えは意外と取り上げられていないので。


とりあえず完成品のソースを。

ややこしそうなことやって見えますが、実際に表示されているのは下から10行分くらいですよ。



これをそのままどこかのHTMLファイルにコピペして、ブラウザで見てください。



上のスクリーンキャプチャ画像と同じような表示になっていると思います。


では説明。内容を順番に見ていきます。



上は、Web DeveloperというFirefoxブラウザの追加機能で表示した要素の解析です。
全部「DIV」要素だけで構成されているのが分かると思います。

1番外側のdivが、superWrapという名前で宣言されているDIV要素です。
これは、ただtext-alignをcenterに設定して、内容を中央揃えにするだけのものです。

ちなみにこのsuperWrap、FirefoxやSafariでは不要です。
実は、IE6のバグのために、mainFrameの体裁指定が言うことを聞かないんです。
まあ、IE8ではちゃんと動作するんじゃないかな。たぶん。

外側から2番目のdiv、mainFrame。こいつは、段組全体の体裁を指定しています。
幅が400px。text-alignをleftに戻して、内容の文字は左詰めにしています。

普通の段組ならこれだけでいいのですが。
段組全体を中央揃えするための設定がここに入っています。「margin: auto auto;」という設定です。
autoというのは「とりうる最大の」という意味だそうで。外側のdivで中央揃えにされている今の場合、左右両側に一杯の余白(マージン)を取ります。これで、段組全体が中央揃えされるのです。

あとの2つのdiv、leftFramerightFrameはその名の通り、段組の左側と右側のフレームです。
それぞれfloatプロパティにrightとleftを指定して、ぴったりmainFrameの枠に収まるように幅を調整しておきましょう。

これで、中央揃えの段組は完成です。

[SQL] SQLでのページング(Oracle)

Oracleでデータベースを利用したページング。

ページングは面倒。
SQLもなかなか綺麗にならないです。



とりあえず作ってみたけども。


…すごく不満。美しくない。なんかこう、つまらない。


特に2番目のSELECTのところは、カラムの名前全部書かないとOracleははじいてくるらしい。
何かいい方法ないかなぁ…。


あ、ちなみに簡略化して書いていますが。
$PageMaxとか$PageNumberとかには、値を入れますので念のため。



あーーーっっ!!(不満のオーラ)

[VC++] VC++で複数コントロールに対する個別のドラッグアンドドロップを受け付ける方法

やたら細かいネーミング。汗


D&D対応のサンプルはWebでも色々あるんだけど。
あのやり方だと、ウィンドウのどこにドロップしても同じになってしまう。


たとえばこんなウィンドウ。


この二つのエディットボックスがそれぞれD&Dを受け付けるようにしたいときの方法。
あくまで一つの方法ですけど。一番簡単なので使っています。


作成環境はVC++6.0なので、.NETとはウィンドウの構成とかはかなり違いますが、基本的に仕組みは同じはず。


まず、リソースエディタでエディットボックスをD&D対応にします。

リソースエディタを起動して、



各対象アイテムの拡張スタイルで「ドラッグドロップを許可」にチェックをつけます。



次に、ウィンドウ画面上でクラスウィザードを表示。



オブジェクトIDでウィンドウのIDを選択すると、PreTranslateMessageという関数名が表示されます。
これをダブルクリックして、下の「メンバ関数」に追加された、PreTranslateMessage関数をダブルクリック。

ソースファイルが開きます。画面が黒いのはほっといてください。


この関数(PreTranslateMessage)は、ウィンドウに飛んでくるすべてのメッセージが実行される前に必ず通る場所です。

なので、ここでメッセージを取得すれば、ウィンドウに飛んでくるほぼすべてのメッセージを取得できます。いじりようによってはウィンドウを閉じられなくも出来る強力な関数ですのでご注意を。


ここに、こんなソースを挿入します。



処理を簡単に箇条書き。
  1. 受け取ったメッセージがWM_DROPFILESの場合
  2. wParamに格納されているパス名データを解析用APIに渡してファイル名を取得
  3. hwndに格納されているメッセージ送信先IDを、対象の2つのEditBoxのID情報と比較し、該当するEditBoxにパス情報を書き込む

と言うものです。

DragQueryFileというAPIは、ファイルの名前を指定したバッファに書き込んでくれる解析用APIです。

これでファイルをD&Dすると、各エディットボックスにファイル名が設定されますよ。

[ VC++ ] たまにインテリセンス(コード補完)やツールチップ表示がされなくなったときの対処法

さすがに.NET以降は起きないかも。

ちなみに私は仕事で6.0を使用しているのでたまーに起きます。


対処法。
  1. VC++を終了して、エクスプローラでプロジェクトフォルダ内を表示。
  2. F3キーかCtrl+Fを押下します。
  3. サイドバー(エクスプローラバー)にファイル検索が表示されます。
  4. 「ファイル名のすべてまたは一部」に、「*.ncb;*.opt;*.clw;*.aps」と入力して検索を実行します。
  5. 検索されたファイル(4つ)を全部ゴミ箱に移動します。

以上。わー簡単。

これでVC++を起動しなおすと、キャッシュが消えて正常にインテリセンスが動作するようになります。

Javaで配列の要素を数える(配列のカウント)

※かなり昔の記事なんですが、移転したので転載します。


Javaは動的配列を管理してくれるクラスが充実しているので、純粋な配列って余り使うことは(私は)ないんですが、使う必要が出てきて唖然としました。

「あれ?sizeofってどうやるんだろ?」

ちなみにC++/Cでは、配列の要素数を計算するのにこんな計算をします。


上のソースでは、配列の全体のデータ量を、T_DATAという箱のサイズで割っています。
こうすると、いくつ分の要素があるか分かるんです。

それが、JAVAだと、こういう感じでした。



うわみじかっ。


配列そのものに機能があるらしく、配列構造になっていると、そいつのlengthというパラメータに要素数が入っているようです。

Java使う人には当たり前すぎて取り上げるまでも無いんでしょうが、C++からきた人から見るとカルチャーショックです。笑

まあ、よくJavaを使うとプログラムを書く量が増える、とよく言われますが。
後発で開発された言語なので、色々機能はあるんですねー。for-eachとかね。

Javaでの文字列整形 (J2SE 1.4系)

私は元々C/C++開発者。

なので、「sprintf~」「printf~」構文は欠かせません。
printf、sprintf関数は、C/C++で文字列の整形を行うものです。

例えば、こんなことが出来ます。

(C++言語のソース)

(出力結果)
ただいまの値=0000200と、abcdefg

割と簡単に、色々整形しながら出力できます。しかも構文は一行。
sprintfを使えば、同じ形式で画面上ではなく、メモリ上の文字列データへ出力できますしね。

で、今の私は主にJava開発者です。
同じプログラムな訳で、当然値を整形して出力する事もあるわけですが。

実は、Java1.4にはこのsprintfに相当する機能が存在しないんですよ。
それも、同じことをするのに非常に面倒なコーディングが必要。

こんな感じ。

(JAVAのソース)

(出力結果)
ただいまの値=0000200と、abcdefg

…長い。
えらく面倒だってばさ。

たかだか2、3行と思うかもしれないけれど、実はそう簡単じゃないんですよ。
実は、加工する値と加工する形式が増えれば増えるほど、この2,3行の追加分が3倍、4倍、と膨れ上がっていくわけで。

C/C++では同じ1行で出来ることを、数百行のソースを書いてやっとできるんです。


はー。


ちなみに、最近リリースされた、J2SE5.0以降では、ほとんどC/C++のsprintf、printfと同じ機能、使い勝手の関数が実装されたらしいです。
他にもJ2SE5.0では、かなり色々とC/C++に似た便利な機能が移植されているそうですよ。


きっと相当要望があったんだろうなー。


ま、企業向け開発者の私がJ2SE5.0で開発できるようになる時代なんて、何年先になるのか分からないけれど。

…ああ、やだやだ。

2008年12月24日水曜日

[GAE] PILをjpegとzlibオプション付きでコンパイルする方法。(VC++ 2008 Express版)

VC2005でも使えるかも。

Python系って、今配布されている2008とかだとコンパイルしてくれない。
Visual Studio 2003じゃないと許せないから2003使ってね、みたいなメッセージが出る。…なんて心が狭(ry


で、無理やりコンパイルする方法があったので備忘録。2003は無料じゃ手に入らないし。

こちらの記事で、コンパイル環境を作ります。まぁインストールですが。
[nmake.exe&cl.exe]無料で作るコマンドラインからのコンパイル環境(Visual Studio Express 2008版)


で、3つのファイルをダウンロードしてきます。
下のリンクはそれぞれ今(2008年12月)の最新版です。

1.PIL本体
Python Imaging Libraryから、PIL最新版の「Source Kit」をダウンロードします。
1.1.6(クリックでダウンロード)です。

2.Jpeg Lib(Jpegサポート用)
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz(クリックでダウンロード)

3.zlib(PNGサポート用)
http://www.zlib.net/zlib-1.2.3.tar.gz(クリックでダウンロード)


ダウンロードしたら、全部解凍します。
それぞれフォルダが作成されますので、JpegとzlibのフォルダをどちらもImagingのフォルダに放り込みます。

+Imaging-1.1.6
 -jpeg-6b
 -zlib-1.2.3


こんな感覚です。

次に、setup.pyがはじいてしまうVC++2008を環境設定とレジストリで回避します。
てかそんなフラグ見てるんだ。

環境変数の設定。
下の変数を作って、どちらも「1」を設定します。
DISTUTILS_USE_SDK
MSSDK


次にレジストリエディタ。
「ファイル名を指定して実行」で「regedit」
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
をたどり、「新規」→「文字列値」で、
sdkInstallRootv1.1
を作っておきます。値は入力しなくてOKです。


さて、コンパイルします。


Imaging-1.1.6の中にある設定を下のように変更します。
JPEG_ROOT = 'jpeg-6b'
ZLIB_ROOT = 'zlib-1.2.3'

最初はどちらもNoneになってるはず。

カレントフォルダをJpeg-6bにします。
で、「jconfig.vc」ファイルのファイル名を「jconfig.h」に変更してから、以下のコマンドでコンパイル。
nmake -f makefile.vc


だーっとログが流れます。警告も多いですがFatal Errorってのが出なければOKです。



次。カレントフォルダをzlib-1.2.3にします。
以下のコマンドでコンパイル。
nmake -f win32\Makefile.msc


Jpegほどじゃないですがログが流れますので終わるのを待ちましょう。



最後。Imaging Library。
カレントフォルダをImaging-1.1.6にします。
以下のコマンドでコンパイル。
python setup.py build


ログの最後の方に、こんなメッセージが出てればOK。



最後に、
python selftest.py

この処理を実行して、
57 tests passed.

と表示されれば完了です。


出典
http://d.hatena.ne.jp/moriyoshi/20070518/1179490110
http://www.freia.jp/taka/blog/392

[nmake.exe&cl.exe]無料で作るコマンドラインからのコンパイル環境(Visual Studio Express 2008版)

超久しぶりに、まじめなプログラムの話。


…いつもまじめじゃないもんねー。(仕事しろ


色々なOSに対応したライブラリとかの多くは、コマンドラインからビルドする必要があります。
あれをコンパイルするのって、普通のGUI環境、VCとかEclipseとか統合開発環境で開発している人から見ると良く分からない世界なんですが(数年前の私とか)、あれの方法です。

最新版で環境を作り直したので、備忘録に書いておきます。
あ、ちなみにこれはWindows向け。私、開発はWindows専門なんで。


レシピ。


Microsoft謹製の無料開発ツールをインストールします。

Microsoftから、Visual Studio 2008 Express Edition(長い…)をダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/default.aspx

オフライン版は、シリーズが全部一緒くたになったISOイメージです。サイトにある方法でDVDに焼いてから実行します。


ちなみに私は、下のDAEMON Tools Liteというソフトを使って直接マウントして実行してます。これ便利。
http://www.disc-tools.com/download/daemon


さて。これを実行すると、
こんな画面が出ます。


一般的なライブラリはCで書かれているので、Visual C++ 2008 Express Editionというのをインストールしてください。
インストールには再起動が必要です。

通常は、ここで「パスを通す」という作業をするんですがー。下とか参考にしてください。
http://d.hatena.ne.jp/perlcodesample/20080602/1212315135

でも私は面倒っていうかそんなしょっちゅうビルドしないので、環境変数のいらないコマンドプロンプトを使います。
方法は簡単。「スタート」メニューから、「Microsoft Visual C++ 2008 Express Edition」の「Visual Studio Tools」にある、「Visual Studio 2008 コマンド プロンプト」というツールを開きます。


なんの変哲もないコマンドプロンプトに見えますがー。
ここで「cl」とか「nmake」と打ち込んでEnter押してみてください。

たとえばnmake。

赤いとこ。ちゃんと起動してるでしょう?
この方法で起動すると、環境変数の設定無しでnmakeとかclが使えるようになります。


ちなみに普通に起動したコマンドプロンプトだとこんな返事が返ってきます。


ま、しょっちゅうビルドする人は、環境変数追加したほうが楽でしょうけどね。ご参考にどうぞー。

2008年12月22日月曜日

QuickTime 7.4以降、SWFは非対応になりました

実は前から気づいていたのですが。ていうか困ってたし。
ちょっと細かく調べたので。

現在のQuickTime(7.4以降、08年12月現在は7.5)では、
SWF(Flashファイル)は再生できません。

ここで以前紹介したPerianも、FLV(YouTubeとかニコ動とか)形式には対応しているのですが、SWFには対応していません。

7.3では、設定でできたそうなのですが。
とうとう全面的にダメになりました。いい加減大変になったか。

…再生専用でいいから対応して欲しいなぁ。
多分大半のMacユーザは同じ思いかと。

ちなみにWindowsでは、Winamp使ってます。
…あれ、公式日本語版出たんだ。へぇぇ。

[GAE] PILはJPEG対応がなんか変。

これは別にGAE(Google App Engine)だけの話じゃないみたいなんですけど。

GAEでimages APIを利用する場合、PIL(Python Imaging Library)っていう外部ライブラリをインストールする必要があります。

ここ参照。
http://code.google.com/intl/ja/appengine/docs/images/installingPIL.html


まあ、PILはコンパイル済バイナリ(プログラム形式)で配布されているので、インストールすればちゃんと動…



動かないし。



そのままだとJPEGファイルがうまく扱えないらしいです。
ていうか標準ではサポートしないらしい。えー。


ちなみにJPEG対応オプション付きでソースからコンパイルすると読めるらしいです。

こことか。
http://www.freia.jp/taka/blog/392


てか、たまに読み込めるからハマりかけた。


…Pythonのくせにばかー。(ぁ

[ 超簡単Linux入門 ] XAMPP(LAMPP)上に簡単なサイトを構築してみる (Ubuntu)

割と続いてるこの入門編。
まあ自分ニーズなので続くわけですが。

今回は簡単なサイトを構築してみた記録。

まずは、XAMPP(LAMPP)で構築するサイトはどこに作ればいいか。
前回のサンプルがある場所を探してみました。


ここです。
/opt/lampp/htdocs/
にありました。

ファイルマネージャ(エクスプローラみたいなもの)でたどるとこんな感じ。



ここにあるindex.htmlを開いてみると、

こんな感じ。

この中にある、
<meta equiv="refresh" content="0;url=/xampp/">
という設定で、PHPで作成されたhtdocs/xamppディレクトリ内にあるサンプルサイトに飛んでいるようです。


元のデータを壊すのはちょっと嫌なので、このhtdocs内に新しいディレクトリを作って、その中で初歩的なサイトを作ってみます。

サイトが完成した後で、index.htmlのmeta情報を書き換えて自分のサイトに自動で飛んでくるようにする、という寸法です。


最初にまず、htdocsのパーミッションを変更します。
Linuxは権限設定が厳しいので、このhtdocsディレクトリへの書き込み権限を自分に許可します。

「アプリケーション」メニュー内「アクセサリ」にある「端末」を起動して、コマンドを入力。
sudo chmod og+w /opt/lampp/htdocs
です。

画面はこんな感じ。


これは管理者権限(sudo)で、権限変更(chmod)を実行し、グループとその他全員(oとg)に、書き込み宣言を追加(+w)します、という意味です。


実行すると、何のメッセージも出ず終わります。Linuxでは、便りが無いのは良い便り。
ま、WindowsやMac派の人には怖いかも。でも成功してます。

念のため、ちゃんと変更できたか確認してみましょう。
一度ファイルマネージャのウィンドウを×ボタンで消してから、もう一度開いてhttpdocのプロパティを表示します。


ファイルマネージャのウィンドウを一度消して開かないと、GUI側には反映されないようです。むーん。

まぁこれで、htdocsへのアクセス権限がフルコントロールになりました。
もちろん、このまま公開しちゃだめですよ。フォルダを作ったら戻します。


次。
自分のサイト構築用フォルダを作ります。

ファイルマネージャでhtdocsを開いた状態で右クリックし、「フォルダの生成」を選択します。これはパーミッションを変更する前はグレーダウンしていて選べなかったはず。

名前は半角英数字なら何でもいいのですが、site1に変更しました。


次に、もう一度「端末」に戻って、htdocsフォルダの権限を元に戻しておきます。
こんなコマンドを入力。
sudo chmod og-w /opt/lampp/htdocs
です。

もう分かると思いますが、これは管理者権限(sudo)で、権限変更(chmod)を実行し、グループとその他全員(oとg)から、書き込み宣言を削除(-w)します、という意味。また何も言わずに処理が完了します。

これで、site1フォルダのみ自由にアクセスできるようになります。
自分の権限で作ったフォルダの中は自由にアクセスできるので。Windowsよりは多少面倒だけど、代わりに安心できるかと。


次。ページのPHPファイルを作りましょう。

site1フォルダの中で右クリックします。
「ドキュメントの生成」から、「空のファイル」を選択します。
あ、ちなみにファイルを選択した状態でF2キーを押すと、ファイル名の編集ができますよ。Windowsと一緒ですね。

ファイルの名前を「index.php」に変更します。準備完了。
index.phpを右クリックして、「テキスト・エディタで編集」を選択します。


中身は当然空ですね。

このファイルに、こんなデータを入力しました。


わー単純。

文字コードの設定も何もありゃしませんが。まーテストですから。


さあ、確認してみましょう。

Firefoxを起動して、以下のアドレスにアクセスします。
http://localhost/site1/


こんな画面が出ましたか?




お疲れ様でした。
これで超単純なサイトの構築作業は一通り完了です。

このindex.phpを色々書き換えていけば、サイトが構築できますよ。

[ 超簡単Linux入門 ] Ubuntu開発用サーバー化計画(Lampp/Xampp)

今日はUbuntuデスクトップをサーバーマシンにします。

今回インストールするのは以下のソフトです。

・Apache with Open SSL
・PHP5と4
・Perl5.1
・MySQL

実はですね、WindowsもMacもLinuxで、一気にまとめてインストールできるフリーの超簡単パッケージがあるんですよ。

それがこれ。XAMPP。

apache friendsサイト

この団体が運営しているパッケージです。

XAMPPは、インストールするだけで、データベース機能を持ったサーバ環境をいきなり構築できるすごいソフトです。
セキュリティは甘めなので、公開するとなるとまた考えないといけませんが、とりあえず動いてくれないと勉強になりませんし。

さっそくUbuntuにインストールしてみます。

まずはXAMPP for Linuxの最新版をダウンロードします。

Ubuntuでは、標準でダウンロード先がユーザディレクトリになっています。


ダウンロードされましたね。今のバージョンは1.6.6です。

さて、インストールです。
Ubuntuでは圧縮ファイルの解凍をGUIからできますが、今回は解凍先フォルダの権限がrootのみなので、直接コマンドラインから行います。

ちょっとコマンドの説明。
要らない人は読み飛ばしましょう。一応入門なので。

「sudo」は、root権限で指定したコマンドを実行するという設定です。
今回は、「tar」という解凍コマンドに、「xvfz」オプション、展開と解凍を同時に行う設定を付け加えて実行しています。
「sudo tar -xvfz ファイル名 解凍先フォルダ名」
今回、-xvfzの前の「-」は無くても動いてました。おー。

ちなみにsudoは起動して初めて実行する前に、自分のパスワードを聞かれます。
答えてみましょう。

実行すると、ぐわーっと解凍のログが表示されます。


…たぶん終わったかと。これでインストールというか配置は完了です。

この手順の代わりに、GUIで解凍してから「sudo mv」コマンドで/optディレクトリに移動してもOKです。

これで配置は完了です。起動してみましょう。
これも管理者権限なので、「sudo」が必要です。配置したのが/optディレクトリなので、こんなコマンドになります。
sudo /opt/lampp/lampp start


実行すると自動で関連するプログラムが起動します。やー楽ですね。

XAMPP for Linux started.と表示されたら起動完了。
表示されなかったら、もう一度ダウンロードし直してみてください。ファイルが壊れているかもしれません。

Firefoxを起動して、アドレスバーに「http://localhost」と入力してEnterキーを押します。


xampp/splash.phpにリダイレクトされて、スプラッシュ画面が表示されます。

この画面自体、すでにPHPで動作しています。やーすごいっすね。
下の一覧から日本語を選択すると、ようこそ画面が表示されます。


左のメニューに、PHPやPerlとデータベースを使った色々なサンプルが並んでいますので、色々選んで試してみてください。

ちなみにXAMPPを終了させるときは以下のコマンドを使います。
sudo /opt/lampp/lampp stop


起動と同じコマンドに、stopというパラメータを投げています。

「XAMPP stopped.」と表示されたらOKです。これで一通り。ふー。

[ Ruby on Rails ] Ubuntu8.04にRuby on Railsをインストールする

…色々インストールしております。

この前XAMPPインストールしてましたが、Ruby on Rails使いたかったので、普通にapp-getでインストールしてみます。


レシピ。


まず、ApacheとMySQL。
Apacheはサーバシステム。MySQLは最近流行りのオープンソースデータベースです。

$ sudo apt-get update
$ sudo apt-get install apache2 mysql-server


途中でMySQLのパスワード聞かれるので好きなパスワードを設定してください。

ちなみにインストール終わるとApacheサーバが勝手に起動してくれるみたいです。
完了したらブラウザ起動して、
http://localhost
と入力してEnterを押すと、
という、見てくれもへったくれもない無骨な画面が表示されます。


あ、これで一応動いてますので安心してください。


ちなみにこのHTMLファイルは、

/var/www/index.html

として配置されています。

後々変更を加えていくフォルダなので、場所は覚えておいた方が良さそうです。ショートカット作るとか。


次。Ruby本体関連。

まとめてどかっと。MySQLへの追加機能なども入れています。

$ sudo apt-get install ruby ri rdoc libmysql-ruby

実行すると、またがーっとログが流れて終了します。


次。Ruby-Gem。
Ruby系のソフトインストール支援パッケージです。

sudo apt-get install rubygems


またログが流れてインストールが完了します。


最後。Ruby on Rails本体。

$ sudo gem install rails -y
$ sudo gem install rails -y

-yは、--include-dependenciesというオプションの別名です。
短いに越したことはない。

ちなみに2回同じ入力しているのは、1回目はなぜか必ず失敗するからです。何故だろう?


ではちょっと設定をします。ファイルシステム内の、

/var/lib/gems/1.8/bin

という場所を探してください。

もしかしたらバージョンが変わっているかもしれませんが。
このフォルダの中に、railsというファイルが表示されていれば、多分インストール完了です。

では、この場所を環境設定ファイルに設定します。

$ gedit ~/.bashrc

ちなみにsudoは不要です。
テキストエディタが開いて、.bashrcというファイルが開きます。

このファイルの一番下に行を追加して、以下の行を追加してください。

PATH="$PATH":/var/lib/gems/1.8/bin

変更したら、保存してgeditを終了します。

設定した環境ファイルを、

$ source ~/.bashrc

このコマンドで反映させます。

$ which rails rake

上のコマンドで、

/var/lib/gems/1.8/bin/rails
/var/lib/gems/1.8/bin/rake

と返ってこれば、インストールは完了です。お疲れ様♪

Adobe AIR 1.5 for Linuxが来ましたよ。

待ち焦がれてた人がたくさんいると思うLinux版AIR。とうとうやってきました。
カスタムフィルタとか3Dネイティブ対応とか、色々世界が広がってるので楽しみ。

…とはいえFlash10の機能だから、私のFlash CS 3じゃ使えないかな…><

JavaFX SDK 1.0正式版が来ました

とうとうSunも出しましたね!!やっと登場です。

Adobe AIRとかSilverlightとかと同じ路線。
ていうか元々Javaアプレットとかって、これ「そのもの」だよね。時代が早すぎて失敗してたのか。

私はたぶんAIR派になると思うけど(Adobe製品漬けなので)、データのコンバートできたりしたらいいな。
…て、Photoshopファイルとかワンクリックでコンバートできるのか。すごいな。

Javaはエンタープライズレベルでも安定してるし、まあ自分が使える言語ってのもあるけど。
先駆者(ていうか先駆者すぎて戦死してたけど)として、がんばって欲しいところ。

2008年12月10日水曜日

携帯サイトでの文字コード対応表

こちらにまとめサイトがありました。多謝!!
http://miniturbo.org/2006/12/29/034842

いまどきの携帯はほとんどUTF-8とかEUC-JPも対応しているんですね。
昔はShift-JISのみって言われていたのでしり込みしてたんですが。

jQueryがハンパないっす。

jQueryとは、Javascriptで組まれたAjax開発用の支援プログラムです。

このjQueryを読み込んで、jQueryが提供するAPIを利用して開発していくことで、1から作るよりかなり労力を削減できます。
…ていうかこれ凄すぎ。会社内で作ってるかなりのものをこいつに移行しました。

もちろんただのJavascriptなので、jQueryが提供していない部分は自分でゴリゴリ書けば実現できます。
あくまでライブラリ的な使い方をするためのフレームワークなので、読み込んだだけでは何もしてくれませんが。


参考資料を並べておきます。

本家サイト。
http://jquery.com/
jQuery最新版のダウンロードや、チュートリアルなども乗せられています。…英語ですが。

jQuery日本語リファレンス
http://semooh.jp/jquery/
非公式ですが、非常に便利な日本語リファレンスサイトです。
サンプルなども豊富で、私は首っ引きです。


ちょっとしたサンプルソースなんかも今後乗せていくかも?たぶん。

2008年12月9日火曜日

あれ?

そういえば、日本語版Adobe Media Playerって11月に出るんじゃなかったっけ?

探したけど英語版しか無かったんだけど。あれ?

…もしかしてタイアップしてくれる動画提供会社が見つからないとか?

Macでスリープに移行するキーボードショートカット

15年くらい使ってたくせに知らなかったYO!

「Option(Alt)+Command(アップル)+Eject」キーだそうです。

Eject関連はシャットダウンやスリープ、ログオフ系のショートカットになっているみたいですね。

今度調べてまた書きます。

2008年10月27日月曜日

体裁(ちょっと)変更

あんま変わってませんが。

リキッドスタイルにしてみました。
画面の横幅に合わせて伸びるページスタイルです。

広い画面なら、長いソースも読みやすいかも。

2008年10月22日水曜日

VC++.NETでCFileFindを利用したファイル検索

未だにWin32 APIをごりごり使っている古い人向けTips。
だって軽いし便利なんだよぅ…。

CFileFindを使用してファイル検索をする方法です。

ソース。
CFileFind fileFind;
BOOL bFlg = TRUE;
if( fileFind.FindFile( "C:\\*.*" ) ) // C:\直下のすべての拡張子付きファイル
{
do {
bFlg = fileFind.FindNextFile();

// カレント、パレントフォルダは除外
if( fileFind.GetFileName().Left(1).Compare(".") != 0 ) // .と..の事です
{
AfxMessageBox( fileFind.GetFilePath() ); // メッセージボックスで表示
}
} while( bFlg );
}


カレントフォルダと親フォルダまで検索に引っかかるのが謎だけど。
まあ、除外すれば良いので。

2008年10月21日火曜日

PythonならCGIの動くWebサーバが3行で書ける!?

インターネットの向こう側にある「ホームページ」を提供するサーバ。

実はサーバの中では「Webサーバ」というプログラムが動作しています。
このプログラム、IEとかのメッセージを受け取って、対応するページの情報を送ってくれたりする役割を担っているのですが。

実はPythonには、このWebサーバ機能がライブラリとして備わっています。
import cgi
import BaseHTTPServer,CGIHTTPServer

BaseHTTPServer.HTTPServer(( '127.0.0.1', 8080 ), CGIHTTPServer.CGIHTTPRequestHandler ).serve_forever()


以上。

これで、このスクリプトを例えば「server.py」とかのファイル名でUTF-8エンコードで保存して、コマンドラインから
python server.py

とか実行すると、8080ポートでこのサーバが起動するんですよ。

このライブラリと同じフォルダに「index.html」とか置いておいて、ブラウザに
http://localhost:8080/

って実行すると、index.htmlがサイトとして表示されます。
ファイル、たとえば「hoge.html」とかを増やして、ブラウザで
http://localhost:8080/hoge.html

とかってやると、そのファイルが表示されます。おー。


しかもこいつ、CGI機能もついてます。

Python CGIを置けるフォルダははいくつかデフォルトで指定されているらしく、「htbin」と「cgi-bin」。

なので、サーバ起動スクリプトのあるフォルダに新しく「htbin」フォルダを作って、
# -*- coding: utf-8 -*-
print """
HTTP Server(CGI) now serving.
"""

とか書いた新しいファイル、例えば「cgitest.py」を置いて、ブラウザから
http://localhost:8080/htbin/cgitest.py

とかアクセスすると、上の文章が表示されます。おー。

やるなPython。

出典(3行サーバスクリプト):http://python.g.hatena.ne.jp/faerie/20061114/p1

Windows環境にPython&DjangoフレームワークのCGI環境を作成する

えーと。私がやりたかったので。

Django(ジャンゴ)は強力なテンプレート機能を持つWebシステムフレームワークです。

なんだか調べてみたらDjangoには簡単なWebサーバ機能が付いているらしいので、どうやらPythonとDjangoだけ入れれば開発環境が作れそうです。


まずPythonを入れます。インストール済みなら飛ばしてください。

Pythonのインストール

まずPythonユーザ会のサイトへ行って、Pythonをダウンロードします。
http://www.python.jp/

画面左側のダウンロードページから、「Python標準リリース」を選択します。

今回はWindows用インストーラの「python-2.5.2.msi」をダウンロードしました。
最新版が出ていたら、そっちにしてくださいね。

ダウンロードしたmsiをダブルクリックして起動すると、インストーラが起動します。
とりあえず「Yes」連発してインストールしてください。

これでCドライブの直下にPythonがインストールされます。

次に、Djangoをインストールします。

Djangoのインストール

こちらがDjangoのダウンロードページです。
http://www.djangoproject.com/download/

「Get the latest official version」にあるダウンロードリンクからダウンロードします。
私の場合はバージョン1.0でした。

「Django-1.0.tar.gz.gz」というファイルが作成されたので、解凍します。
あ、これtar.gzをもう一回圧縮してるみたいですね。2回解凍が必要かもしれません。

思ったより解凍時間がかかって、「Django-1.0」というフォルダができます。
こいつの中を見ると、「setup.py」というファイルがあります。

コマンドプロンプトで解凍されたフォルダをたどり、
python setup.py
でセットアップを実行します。

んだーーーーーっとログが流れるのでしばらく静観。

完了すると、Pythonのインストールフォルダ内にDjangoがインストールされます。

実行してみる

Ruby on Railsと同じくDjangoも、コマンドでサイトの雛形を自動で生成する仕組みのようです。

ということで。

コマンドプロンプトでプロジェクトを作りたいフォルダに移動して、私の場合、
python C:\Python25\Scripts\django-admin.py startproject mysite
を実行しました。

これはPythonフォルダにインストールされた「django-admin.py」というスクリプトを使って、startproject(プロジェクト生成)コマンドを実行しています。

ちなみにmysiteというのはプロジェクトの名前です。お好きな名前を設定してください。
あ、ただしPythonとかDjangoのクラス名をプロジェクト名に使うと面倒なのでやめてくださいとかどっかに書いてありました。

startprojectコマンドは一瞬で完了します。
プロジェクトフォルダをエクスプローラで開くと、
  • __init__.py
  • manage.py
  • settings.py
  • urls.py

という4つのファイルが生成されています。これで準備は完了です。

サイトを実行してみる

早速実行してみましょう。
プロジェクトフォルダをカレントフォルダにして、
D:\django1\mysite>python manage.py runserver
と入力して実行します。
Validating models...
0 errors found

Django version 1.0-final-SVN-unknown, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
と出れば成功です。running at http://127.0.0.1:8000/と書かれているので、ブラウザを立ち上げてから、アドレスバーに、
http://localhost:8000/

と入力して実行してみてください。
It worked!
Congratulations on your first Django-powered page.
と祝福してもらえたら、成功です。ふー。


これで無事Python+Djangoフレームワークの環境が動作しています。
思ったよりサクッといきますねぇ。

もちろんリファレンスにもある通り、この環境はあくまで開発環境です。
PHPやPerlで言うXAMPPとおんなじ感覚と思ってください。

リファレンスにも、絶対に本番運用には使用しないで下さい!と書いてありました。
セキュリティとか色々面倒なんでしょうね。

とはいえ実際に運用する前に手軽に環境を構築できますし、しかも実際の運用環境と併用できるので、かなり便利です。

次回からは、この環境上でDjangoを利用した簡単なサイトの構築を行なってみます。

2008年10月18日土曜日

ubuntu 8.04にVMware Playerをインストールする

ubuntu8.04にVMware Playerを導入する方法です。

こちらを参考にしました。
Install VMWare Server in Ubuntu 8.04(英語)

上はVMware Serverの導入方法なので、ここではVMware Playerを。

仮想マシンの実行環境としては、Playerの方が使い勝手が良いんですよね。
Serverの方は、まあ気が向いたら導入するのでその時また。

レシピ。

1.必須ソフトウェアの導入

まず、画面の上にあるメニューから「アプリケーション」→「アクセサリ」→「端末」を起動します。

以下を入力して実行。
sudo apt-get update

「sudo」を忘れずに。自分のログインパスワードを聞かれますので答えてあげましょう。

このコマンドは、必要な関連ソフト最新一覧をインターネットから自動で(内部的に)取得するコマンドです。

次に以下の入力をして実行。
sudo apt-get install build-essential linux-headers-`uname -r` xinetd

さっき取得した最新ソフトの情報を元に、関連する必要ソフトを自動で導入ししてくれます。

途中で「続行しますか [Y/n]?」とか聞いてきたら「y」を入力してEnterを押下して下さい。

2.ディレクトリ(フォルダ)の準備とPlayerダウンロード

フォルダを準備して、PlayerをVMwareサイトからダウンロードします。
以下を入力。
mkdir -p ~/src/VMWare

ログインユーザのユーザディレクトリ配下にフォルダが作成されます。
これはsudoはいりません。

次に、VMware Playerダウンロードページから、最新のVMware Playerの「tar.gz」版をダウンロードします。

私のダウンロードしたファイルは「VMware Player 2.0.4 for Linux (.tar)」というものでした。rpm版は使いません。
ちなみにダウンロードには、E-Mailアドレスなどアンケートに答える必要があります。

ダウンロードしたファイルを「~/src/VMWare」に移動します。
画面の上にあるメニューからだと、「場所」→「ホームフォルダ」に「src」→「VMWare」があるはずです。
ファイルブラウザ上からマウスで放り込んでもOKですよ。

3.ファイルの解凍と展開

ダウンロードしたファイルは圧縮されているので、解凍します。

私は以下を入力しました。
tar xzf ~/src/VMWare/VMware-player-2.0.4-93057.i386.tar.gz

文字が緑色の部分には、ダウンロードしたファイルの名前を入力してください。

ちなみにコマンド入力の途中で「Tab」キーを押すと、自動で補完されますので便利ですよ。
うまくいけば、コンソール上は何も言わずに終了します。

解凍されたフォルダが「~/src/VMWare/vmware-player-distrib」として完成していればOKです。

4.インストール

これで準備はできました。
解凍したフォルダの中にある、インストールスクリプトを実行します。

以下のコマンドを実行します。
sudo ~/src/VMWare/vmware-player-distrib/vmware-install.pl

「sudo」を忘れずに。忘れると入力し直しです。

実行すると、インストールスクリプトが起動します。

英語の文章がずらずらと並びますが、元々一般的な設定が選択されているので、ずっと「Enter」を押し続けて下さい。
You can now run VMware Player by invoking the following command:
"/usr/bin/vmplayer".

Enjoy,

--the VMware team
と表示されたら設定完了です。


が、まだ起動してはいけません。喜ぶのは早い。


以下のコマンドを実行しておきます。
sudo cp /lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1
sudo cp /usr/lib/libpng12.so.0 /usr/lib/vmware/lib/libpng12.so.0
これで設定をコピーしておきます。


はい。これで画面の上のメニューに「システム」という項目が増えているはずです。
この中に、「VMware Player」があります。

お疲れ様でした。
実行の度にソフトウェア利用許諾書が英語で表示されますが、その後の動作は Windowsと同じですよ。

eclipseでJavaプログラムをダブルクリックで実行できるようにする(Jarファイル化)

eclipseで作ったソフトをjarファイルとして配布したい、と思った場合の手順。

MacOS Xでも、WindowsではJRE がインストールされた状態なら、jarファイルをダブルクリックするだけでそのまま実行できるので便利になります。
現状Javaプログラムを配布するには一番いい方法ですね。

今回Mac版eclipse使ってますが、Windows版でも方法は全く同じです。

レシピ。

まず、プロジェクトエクスプローラから、該当するプロジェクトを右クリックして「Export」(エクスポート)を選択します。


「Java」の「JAR file」を選択して「NEXT」を選択。


次に、出力したいプロジェクト(プログラム)を選択し、「Browse」をクリックします。


出力先のパス(どこの、どんな名前でもOK)を入力して「Save」を選択。
画面が元に戻ったら、出力先Jarファイル名が設定されていることを確認し、「Next」を選択します。


あまり気にせず「NEXT」を選択します。


ここがミソです。
「Select the class of the application entry point」の「Main class」で「Browse」を選択します。

これはアプリケーションのメインクラスを選択する項目です。
Javaでは各クラスそれぞれにMain関数を作れるので、どれがメインクラスか指定しないといけません。


クラスの一覧が出るので、最初に実行したいクラスとmain関数を選択して「OK」を選択します。
Main classに入力されたクラスを確認して「Finish」を選択します。


普通は数個の Warningがあるのでこんな完了メッセージが出ますが、私は放っておいてます。


指定したパスに、XXXX.jarファイルが出力されます。


こんな感じで。

トラックバック仕様まとめ

トラックバックについては他にも資料はあると思うのですが。

前のサイトに実装する時に色々調べたので、トラックバック自体の仕様もまとめておきます。
まあ誰かの役に立つかもしれないので。

トラックバック概要


トラックバックとは、「各ポスト(投稿)同士をつなぎ合わせる」機能を提供するものです。

例えば、自分が新しい記事を投稿するとき、他のサイトに関連した記事があれば、「トラックバック」を送信して、相手のサイトに自分の記事へのリンクを提供できます。
また、自分の書いた記事にトラックバック受信機能があれば、誰かが自分で書いた補足情報へのリンクを送信してきてくれたりするのです。

まあトラックバックスパムとか最近増えててあれですけどね。
それでもとても有用なブログ連携技術なのは確かです。

下に仕様を。

トラックバックには受付専用のURLを設ける事。


ブログなどでは通常、各記事ごとにトラックバック受付用のURL(トラックバック Ping URL)を設けます。

通常「http://hogehogehogeee.com/trackback/3」とかいうURLになります。
特に規定は無いようですが、トラックバックであることが分かるURLの後ろに記事IDが付くことが多いようです。

トラックバックPing(トラックバック)はREST アーキテクチャで動作する。


なにやら難しそうなこと言ってますが、要は普通のHTTPリクエストで動作しますよ、ってことです。
ブラウザにURL入力して実行するのもREST、Webフォームに入力して送信ボタンを押してもREST。普通のネットサーフィンはほとんどRESTアーキテクチャです。

リクエストメソッドはPOST。コンテントタイプは「application/x-www-form-urlencoded」とする。


このままですね。普通のHTMLの<FORM>タグで作るWebフォームと同じような形式ってことです。

つまり、
<form action="http://hogehogehogeee.com/trackback/3" method="post" enctype="application/x-www-form-urlencoded">
...
</form>

で送信されたと同じデータが飛んできます。
普通の掲示板とかと全く同じです。テストしやすいですね。

ちなみに一般的なブラウザのFORMでのコンテントタイプ(enctype)は特別指定しない限り元々これ(つまりデフォルト)なので、enctype="application/x-www-form-urlencoded"は省略しても動きますよ。付けるに越したことはないですが。

ちなみに昔はリクエストメソッド「GET」、つまりURLアドレスに内容も含めて送信する形式だったそうなのですが、5年前くらいに廃止されたそうです。
現在のほとんどのサイトはPOSTリクエストにしか対応していません。

受信パラメータは4つ。


これから増えるかもしれませんけどね。Pingなんかは活発に議論されてるとか。

とはいえ増えても受信側は無視する(というか気づかない)だけなので、開発者的には今から怖がる必要は無いかと。気が向いたら対応すればOKです。

内容です。
  • title (送信側サイトの記事タイトル)
  • excerpt (送信側サイトの記事概要。普通は最初の500文字程度)
  • url (送信側サイトの記事URL。サイトのトップページとかはダメです)
  • blog_name (送信側サイトの名前)


いちいち送信側サイトの、と書いているので気づいたかもしれませんが、この情報には、トラックバックを送信する「うちの記事関連してるから載せてくれ!」って言ってきた側の情報しか載ってません。

つまり受信者側(開発側)は、受け取ったトラックバックがどの記事に対して送られたかをちゃんと把握して、的確な記事と一緒に表示させてあげる必要がある、と言うことです。

基本的にトラックバックURLは記事ごとに作ることになっているので、URLからどの記事かを判断する必要がありますね。

ちなみにMovable Typeなどもそうですが、これら4つすべてのパラメータを要求するサイトは少ないようです。
私はMovable Typeと同じく、urlのみ必須にしています。


こんなところで。以上。

JavascriptでIEを判定する方法

1行でIE(インターネットエクスプローラ)かどうか判定する方法を聞きつけたので。

ソース。
if(/*@cc_on!@*/false){
...IE用の処理
}

超簡単!

ただしMac用IEは判定できないそうで。

ま、今でもIE使っているMacユーザはかなり少ないと思うけど。

VC++で文字列のトークンを手作業で取得する(Token/Tokenize)

VC++6.0ってCStringにTokenizeという関数がないんです。

トークンというのは、指定した文字で区切られた文字列を順に取得するもの。CSVファイルの解析とかで使います。7.0以上にはあるんだけど。

ってことで、できるだけ短い処理でトークンを取得してみます。

ソース。
int idx = 0, idxOld = 0;
CString strLine = "ABC,DEF,GHI";

// 最後の1つ以外
while( ( idx = strLine.Find( ",", idxOld ) ) != -1 )
{
MessageBox( strLine.Mid( idxOld, ( idx - idxOld ) ) ) );
idxOld = idx + 1;
}
// 最後の一つ
strLine.Mid( strLine.ReverseFind( ',' ) + 1 ) );

はてしなく美しくないですが。

ただ、VC++7.0以上のTokenize関数も、連続した区切り文字(たとえば",,")を1つの区切りとして扱ってしまうので、.NETを使っていても上のような独自関数を作らないといけないことがあります。

まあ、C標準関数のstrtok(トークン取得関数)も、VC++と同じ挙動なので仕方ないのですが。

うーん。

VB/VBAで指定ディレクトリ内のファイルを検索する

VBAで指定したディレクトリ内のファイルを検索する方法です。

下の例はExcel用。
Excelファイルと同じフォルダにあるファイル名を並べるサンプルです。

ソース。
Private Sub CommandButton1_Click()

Dim fileName As String
Dim index As Integer

fileName = Dir(ThisWorkbook.Path + "\\*", vbNormal)

index = 1
Do While (fileName <> "")
ThisWorkbook.Worksheets(1).Cells(index, 1).Value = fileName

fileName = Dir()
index = index + 1
Loop

End Sub

ファイルの検索にはDirコマンドというのを使います。

はじめの1回目はファイル名とパスを指定して、2回目以降は指定せずに回します。
vbNormalというのはディレクトリ(フォルダ)以外のファイル。
他に以下の指定が可能です。詳細はヘルプに乗ってますよ。
  • 「vbReadOnly」読み取り専用ファイル 。
  • 「vbHidden」隠しファイル 。
  • 「vbSystem」システム ファイル。Windowsのみ。
  • 「vbVolume」システムファイルも含めたすべてのファイル。Windowsのみ。
  • 「vbDirectory」フォルダ 。
  • 「vbAlias」エイリアス ファイル。Macintoshのみ。


ま、全部使ってみたわけではないのですが。

Javaでファイルのドラッグアンドドロップを受け付ける

備忘録。

Javaでファイルのドラッグアンドドロップを受け付けるプログラムです。

珍しくサンプルプログラムまで作りました。
eclipseで作ってましたが、下を適当な名前.javaとかにしてコンパイルすれば動くと思います。
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.io.File;

/**
* DandDクラス
* ドラッグアンドドロップテストプログラム
* @author Sakito Yumitsuka
*/
public class DandD extends Frame
{
TextField tf1 = new TextField("ここにドラッグアンドドロップ",30);

/**
* ドラッグアンドドロップウィンドウの設定
*/
public DandD()
{
// ウィンドウ上の設定
this.setTitle("Drag and drop");
this.setSize(350, 90);

// ウィンドウ終了時の動作を指定
this.addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent evt) {
System.exit(0);
}});

// 無名クラスでドロップ時の動作を指定
new DropTarget(tf1, new DropTargetAdapter(){
public void drop( DropTargetDropEvent e ) {
try {
Transferable transfer = e.getTransferable();
if ( transfer.isDataFlavorSupported( DataFlavor.javaFileListFlavor ) ) {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList = (java.util.List)( transfer.getTransferData( DataFlavor.javaFileListFlavor ) );
tf1.setText( ( (File)fileList.get(0) ).getAbsolutePath() );
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});

setLayout( new FlowLayout() );
add(tf1);

setVisible( true );
}

/**
* @param args
*/
public static void main(String[] args)
{
new DandD();
}
}

こんな感じで。

Access VBAでテーブル(クエリ)を検索する

テーブルを検索するような親切な関数はAccessにはありません。(らしいです)

んが、テーブルとクエリそれぞれのオブジェクトリストがあるので、こいつをぐるぐる回して名前検索ができます。

確認環境はAccess2003だけど、たぶんAccess97以上なら使えると思います。

下は「テーブル名」というテーブルを探すコードです。
'#### 支度 ####
Dim db As dao.Database

'#### DBオープン ####
Set db = CurrentDb

'#### 検索 ####
For Each tble In db.TableDefs
If tble.name = "テーブル名" Then
MsgBox "発見!"
Exit For
End If
Next

'#### 片付 ####
db.Close
Set db = Nothing

こんな感じ。

上のdb.TableDefsをdb.QueryDefsに置き換えると、クエリの検索ができますよ。

Access VBAでテーブルを生成、削除する

AccessのVBAには、SQLを実行できるADODB.Connectionなるものがあります。

んが、なぜかこいつ、SQLからのCREATE TABLE(テーブル作成)とかDROP TABLE(テーブル削除)とかができません。
ちゃんとしたDBではない、ってことか…。

テーブルの生成方法は何種類かありますが、一番簡単な方法で。
'#### 支度 ####
Dim db As dao.Database
Dim def As TableDef

'#### 接続 ####
Set db = CurrentDb

'#### テーブル情報作成 ####
Set def = db.CreateTableDef("テーブル名")
Call def.Fields.Append(def.CreateField("列1", dbInteger))
Call def.Fields.Append(def.CreateField("列2", dbText, 255))

'#### テーブル生成 ####
Call db.TableDefs.Append(def)

'#### 片付け ####
db.Close
Set db = Nothing

削除は簡単。1行ですみます。
'#### 支度はいらない ####
Call DoCmd.DeleteObject(acTable, "テーブル名")

全部SQLでできればわかりやすいんですけどね。
まあ、そういうものということで。

Access VBAでSQLを実行する

AccessのVBAで、好きなSQLを実行する方法。

でもCREATE TABLEみたいにテーブルを追加したり削除したりはできないっぽい。
主にSELECTとUPDATE、INSERTみたいな運用系(?)SQL専用だな。
'#### 支度 ####
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

'#### DBを開く ####
Set con = Application.CurrentProject.Connection

'#### SQL実行 ####
Set rs = con.Execute("SELECT * FROM テーブル WHERE ID = ""DXERW""")

'#### 後片付け ####
con.Close
Set con = Nothing

こんな感じ。

2008年10月14日火曜日

JAVAでフォルダ内のファイル名を一覧取得

指定したフォルダ内のファイルとフォルダ名を一覧で取得する方法です。

「C:\hogehoge」フォルダ内の全ファイル、フォルダ名を取得してみます。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list();

これでfileList[]にファイル名のリストが保存されます。

ちなみにこいつは取得時にファイル名で絞込みができます。
例として、下ではPDFファイルのみを抽出します。
File dir = new File("C:\hogehoge");
String[] fileList = dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".pdf");
}
});
案外単純。

VC++/VC++.NETでウィンドウのドラッグを禁止する

備忘録。
Visual Stuido.NETで表示されたウィンドウのドラッグ自体を禁止する方法。

// イベントを追加。(WM_SYSCOMMAND)
ON_WM_SYSCOMMAND()

// 対応する関数に、以下の処理を作成
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
if((nID & 0xFFF0) != SC_MOVE)
{
CMainFrame::OnSysCommand(nID, lParam);
}
}

nIDは下位4BitがSystemで使用されるため常にマスクしないといけないようです。
この比較ではSC_MOVE(ウィンドウ移動)を使用しています。

他にも、以下のパラメータが使用できます。
  • SC_CLOSE:ウィンドウをクローズ
  • SC_HOTKEY:ホットキーに対応したオブジェクトをアクティブにする時呼ばれます。lParam の下位ワードでアクティブになるオブジェクトのHWNDを識別します。
  • SC_HSCROLL:水平スクロールする時
  • SC_VSCROLL:垂直スクロールする時
  • SC_MAXIMIZE (または SC_ZOOM):最大化する時
  • SC_MINIMIZE (または SC_ICON):最小化するとき
  • SC_KEYMENU:キーボードからメニューを呼び出した時
  • SC_MOUSEMENU:マウスクリックでメニューを呼び出した時
  • SC_MOVE:ウィンドウの移動時(ドラッグも)
  • SC_NEXTWINDOW:次のウィンドウに移動する時
  • SC_PREVWINDOW:直前のウィンドウに移動する時
  • SC_RESTORE:通常の位置とサイズにウィンドウを戻す時
  • SC_SCREENSAVE:スクリーンセーバーを実行する時
  • SC_SIZE:ウィンドウのサイズ変更
  • SC_TASKLIST:タスクマネージャのアプリケーションを実行する時

どうやらそれぞれの処理をする直前に呼ばれるようです。

Blogger Syntax Highliter

ええと。便利なものがあるんですねここ。

主に開発屋なので、ソースコード載せたい時もあるじゃないですか。
でもそのまま載せると、全部黒い文字になってしまって、読みづらいんですよね。

やっぱり似たこと考える人多いみたいで。
ソースのハイライト表示をやってくれるBlogger用のガジェットがありました。

「Blogger Syntax Highliter」。ここです。
http://fazibear.googlepages.com/blogger.html

怪しげな画面が出ますが、ちゃんとしたインストールページです。
「+add to Blogger」というボタンを押すだけで、設定が開始できます。

ちなみに前のサイトで導入してたのと同じ。
設定でスタイルシートもいじれるので、表示や色分けもいじれます。便利便利。

前の感覚でそのまま導入したら、Bloggerが自動的に追加してしまう文字列が悪さをして困ってたんです。
Syntax Highliter自体のソースをいじろうと思ってたんですけど、思いついて検索したら即発見。即導入。

いや便利便利。

2008年10月10日金曜日

[ VC++ ] VC++でフォルダ丸をごとコピーする方法

Windows用のプログラムです。

C++でのフォルダ丸ごとコピーの方法。
私は以下のような関数を作って、fromに元のパス名、toにコピー先のパス名を入力するようにしています。

WindowsAPIを使っているので、CString部分をTCHARとかで書き換えればVC以外でも動くはず。

ソース。
int folderCopy( CString from, CString to )
{
SHFILEOPSTRUCT tSHFile;
tSHFile.hwnd = ::GetDesktopWindow();
tSHFile.wFunc = FO_COPY;
tSHFile.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;
tSHFile.fAnyOperationsAborted = TRUE;
tSHFile.hNameMappings = NULL;
tSHFile.lpszProgressTitle = "";

// パス名のCStringの末尾に\0をつけて設定
from += "0";
to += "0";
from.SetAt( from.GetLength()-1, NULL );
to.SetAt( to.GetLength()-1, NULL );
tSHFile.pFrom = from;
tSHFile.pTo = to;

return SHFileOperation( &tSHFile ); // 実行
}

こんな感じで。

2008年10月2日木曜日

スパム検出ボット

なんか公開した直後にいきなり引っかかったらしく。

おいおい。まだなんも書いてないんですけど。

非公開になったあげく、20日以内に自分で申請出さないと勝手に削除されるらしい。

まあ自動的に検出するならそういうこともあるんでしょうね。
何で引っかかったのかよく分からないけど。

移転中。。。

技術系はこっちに持ってこようかと思っているのですが。

うーん。何が良いのかはまだよく分かりません。