Monthly Archives: 4月 2007

[JavaScriptメモ] 正規表現

正規表現の便利さは異常ですね

//というURLからベースのURLと数字を取得
//http://www.sample.com/~foo/bar/ref2080.htm
// 現在のURLをゲット
var pageURI = 'http://www.sample.com/~foo/bar/ref2080.htm';
var matches = pageURI.match(/^(.+\/)ref([0-9]+)\.htm$/);
var baseURI = matches[1];
var baseNumber = matches[2];
baseURI http://www.sample.com/~foo/bar/
baseNumber 2080

正規表現は普通.
括弧の指定で抜き取り対象を指定.
0番目はマッチした全体が入るので,
1番目からが指定した対象が入ってます.

置換だったらこんな感じ

//というURLからベースのURLと数字を取得
//http://www.sample.com/~foo/bar/ref2080.htm
// 現在のURLをゲット
var pageURI = 'http://www.sample.com/~foo/bar/ref2080.htm';
var replaced = pageURI.Replace(/^(.+\/)ref([0-9]+)\.htm$/,"$1$2");
replaced http://www.sample.com/~foo/bar/2080

GreaseMonkeyスクリプト作成クイックスタート

GreaseMonkey

GreaseMonkeyは,任意のウェブページに対して任意のJavaScriptを追加することができる拡張機能です.
これによって種々の機能を任意のウェブページに追加できます.
それでどんないいことがあるのかって,とりあえずGreaseMonkeyをインストールして,
Firefox Greasemonkey ScriptsでGoogleAutoPager Customをインストールして,Googleで検索してみて下さい.

詳しくは,このページがわかりやすいかもしれません.
Greasemonkey – Mozilla Firefox まとめサイト
スクリプト作成のドキュメントは,上記サイトにあるDive Into Greasemonkey日本語訳を参照すると良さそうです.

Read more »

DataGridViewでエンターキーにより右方向に移動する

2009/07/08 コメント欄にてより簡単な方法についての情報提供がありました

DataGridViewは,デフォルトで編集確定時などでのEnterキー押下に対する動作をカレントセル直下のセルにカレントセルを移動するようになっています.
しかし,例えばExcelでは,そのような状況での動作を直下ではなく右方向のセルに移動するように変更でき,その方が便利な時もあります.
DataGridViewでそのような動作を実現するには,どうしたらいいんでしょうか.
調べてみたところ,プロパティの変更ではなくDataGridViewを継承したコントロールを自分で作成するしかないようです.

こことか,Enterキーで下に移動しないで右に移動,こことか,DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばすを参照.

そもそもユーザーコントロールを作ったことがほとんど無いんですが,
プロジェクトの作成で「Windowsコントロールライブラリ」を選択し,
そのプロジェクトにクラスを追加して継承コントロールのコードを書き,
ビルドするとできるDLLを参照の追加で取り込めばツールボックスに現れるようになるようです.

しかし,既にフォームに配置しているDataGridViewを置き換えるのは色々と大変です.
例えば,新たにカラムを追加しないといけないし種々のプロパティも元に戻すために弄らないといけません.
もっと楽な方法を…….

そんなわけで,フォームの初期化をしているコード(FormName.Designer.vb)を直接弄ってDataGridViewを新たに作成したUserDataGridViewに置き換える方法を採用するのが良さそうです.
やり方はいたって簡単.

Private Sub InitializeComponent()
前略
Me.dataGridViewName = New System.Windows.Forms.DataGridView
後略
End Sub

となっているところを,

Private Sub InitializeComponent()
前略
Me.dataGridViewName = New UserControlNameSpace.UserDataGridView
後略
End Sub

とするだけ.
イベント処理などは全て上書きしていて,
外見には通常のDataGridViewと区別が付かないので他を変える必要は無さそうです.
特殊なことをやっているならば違ってくるのかもしれませんが.

xreaでadiaryを設置する

ずっと気付かなかったんですが,
どうもコメント機能が動作していなかったみたいです.

見てみると,

/diary/adiary.cgi/09?なんたらかんたら

となるべきところが

/diary/09?なんたらかんたら

になってしまっていて,クエリが空振りしていました.

それで,調べてみると次のページに回等らしきものが載っていました.
特殊なサーバでのadiaryの動作 – adiary開発日誌
しかし……この通りにadiary.conf.cgiの頭に記述してこんな感じにしてみても全然だめでした.

--------------------------------------------------------------------------------
○adiary のディレクトリ設定(通常は変更不要)
--------------------------------------------------------------------------------
・すべて相対パスで指定してください。
・ディレクトリを変更する場合は、配布物中のファイルの置き場も変更してください
・ディレクトリは / で終えてください
XREA用の特別なコマンド
<$ENV.PATH_INFO   = substr(ENV.PATH_INFO,   length(ENV.PATH_INFO)/2)>
<$ENV.SCRIPT_NAME = substr(ENV.SCRIPT_NAME, 0, length(ENV.SCRIPT_NAME) - length(ENV.PATH_INFO))>
公開のデータディレクトリ
<$constant(public_dir) = 'public/'>
<$constant(theme_dir)  = 'theme/'>

何がだめかって,スタイルシートへのパスがこんなことになってしまっていたのです.

/diary/adiary.cgi/theme/satsuki/satsuki/satsuki.css

勿論,本当はこうです.

/diary/theme/satsuki/satsuki/satsuki.css

で,結局試行錯誤した結果

<#$ENV.PATH_INFO   = substr(ENV.PATH_INFO,   length(ENV.PATH_INFO)/2)>
<$ENV.SCRIPT_NAME = substr(ENV.SCRIPT_NAME, 0, length(ENV.SCRIPT_NAME) - length(ENV.PATH_INFO))>
パス自動解析に失敗し、リンクなどがうまく辿れないときに設定する
<$Basepath='/diary/'>

とやると正常に動きました.
理由は,謎です.
同じxreaでも,他のサーバだと全然違うことをやらないといけないかもしれませんね.
難しい…….

PortableFirefoxを使ってみる

PortableFirefox

現在私は,ノートパソコンが壊れていて
代替措置として色々な環境を外付けハードディスクに入れて持ち歩いています.
具体的には,メーラー,テキストエディタ,IDE,SSHクライアント,パスワード管理ソフト,圧縮解凍ツールなどなど.
ブラウザに関しては,PortableSleipnirを入れていて,それはそれで満足していたんですが,
メインPCに入れているSleipnir2の設定ファイルを移行するのに失敗したのと,
知人のFirefoxが色々なプラグインで便利に使えてそうなので入れてみることにしました.

Read more »

Visual Studio 2005でOpenGLプログラミング

Visual Studio 2005 Express Edition

Visual Studio 2005 Express Editionでは,Win32APIを使ってWindowsネイティブなプログラムを作成できません.
OpenGLでは,Win32APIを使って描画などを行っているので,インストールしたままの状態では,OpenGLを用いたプログラミングができない状態です.
そこで,これを可能にする機能セットをVisual Studio 2005 Express Editionに追加します.
これは,PlatformSDKという名前です.

導入方法は,MSDNのPlatformSDK解説ページに詳しく載っているので,参照して下さい.

Visual Studio 2005のProfessional Edition

Visual Studio 2005のProfessional Edition*1では,最初からPlatformSDKが入っています.
OpenGLの基本機能*2は,PlatformSDKに含まれているので,これにGlutを追加すれば入門には十分です.

まず,Glutのダウンロードページで,glut-*.*.*-bin.zipをダウンロードします.
このファイルを展開し,glut32.libをPlatformSDKのLibディレクトリに,glut.hをInclude/glディレクトリにコピーします.
glut32.dllは,実行ファイルと同じ場所かC:\WINDOWS\system32ディレクトリに入れます.
開発段階では,自分のパソコンのsystem32に入れておくのが便利ですが,配布時には実行ファイルと共に配布する必要があります.

通常の設定でインストールした時のPlatformSDKが配置されるディレクトリを次に示します.

C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK

あとは,Visual Studio 2005で新しいプロジェクトからVisual C++,全般から空のファイルを選択してプロジェクトを作成すると,普通にOpenGLを利用できます.

新しいプロジェクト→Visual C++→全般→空のファイル

*1 : というより製品版Visual Studio 2005

*2 : GlU32.LibやOpenGL32.Libやそのヘッダファイルなど

Transact-SQLでパスワードをマスクする

[言い訳]
普通はパスワードなんて表示することは無いと思うし,
そもそも生パスワードをDBに入れるものなのかはわかりませんが,
そこら辺の事情は下に感知できるところではないのです.

パスワードの文字数分マスク文字列を被せる

プログラム側で操作するのが一番簡単ですが,
Transact-SQLでやっちゃうのが応用が利いていいです.

Transact-SQLの文字列関数群

使う関数を次の表に示します.

関数名 用途
REPLICATE 文字列を指定回数繰り返す
LEN 文字列の長さを返す

Read more »

掲示板作成練習 そのver0.01b

とりあえず書いて見れるという,最低限の機能を作ってみました.
外見は動いてますが,中身はスカスカです.
中身については後日のエントリで.

外見

ファイル構成
mibbs
┣lib
┃┣BBSData
┃┃┣IndivisualLog.pm
┃┃┗IO.pm
┃┗Utility.pm
┣bbs.cgi
┣data.txt
┗default.css

適切な英語はわからなかったので機械翻訳です.ごめんなさい.
IndivisualLog.pmが個々の書き込み,IO.pmがログファイルへのアクセスを担当しています.
ファイルロックはまだかけていません.
まだログが新しいログが下に表示されます.

改善点としては,とりあえず
・ファイルロック
・ログは新しいログが上に表示されるのをデフォルトに
・IDとパスワードを使ったログの編集,削除
・パスワードを暗号化して保存(MD5が使えればそれがいいんですが……)
・スレッド形式に対応
この辺を実装すれば,10年前の掲示板に機能的に追いつくんじゃないでしょうか.
最近もこういう掲示板ってまだ使われてますしね.

何をどうしたいか

Perlで掲示板を作るというだけでは,漠然としすぎていてどうしたいか自分でもよくわかりません.
単に掲示板を作る,というだけでも解決しなくてはならない大きな問題がいくつもあるわけですが.

そこで,当面の目標を決めておきます.

まず,トライアンドエラーで掲示板っぽく動くものを作ります.
ここでは,排他ロックや危険文字の排除などは「とりあえず」程度で妥協します.
次に,そこら辺の掲示板にある機能を色々取り込んでみます.
ある程度実装できたら,一段階は終了します.

次のステップでは,それぞれの機能についてもう少し詳しく調査して,
できるだけ安全な動作ができるように試みようと思います.

その後は,それらの経験を踏まえて全体を設計し直してまともなプログラムにしたいとは思ってますが,
そこまで続くかはわからないので,とりあえず夢ということにしておきます.

日記書き込みテスト

XREA+サービスを申し込む前のお試し無料7日間でこの日記を設置していたんですが,
うっかり期間を過ぎてしまって消滅してしまいました.
今度は最初からXREA+で行きます.
というわけで日記再設置テスト.