ようこそゲストさん

mitc - 日記

メッセージ欄

2007年4月の日記

一覧で表示する

2007/04/28(土) [JavaScriptメモ] 正規表現

はてブ 2007/04/28 18:47 JavaScriptmiff
正規表現の便利さは異常ですね
//という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];
baseURIhttp://www.sample.com/~foo/bar/
baseNumber2080
正規表現は普通.
括弧の指定で抜き取り対象を指定.
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");
replacedhttp://www.sample.com/~foo/bar/2080

2007/04/28(土) GreaseMonkeyスクリプト作成クイックスタート

はてブ 2007/04/28 16:57 雑記miff

GreaseMonkey

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

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

続きを読む


2007/04/22(日) DataGridViewでエンターキーにより右方向に移動する

はてブ 2007/04/22 16:34 .NETmiff
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と区別が付かないので他を変える必要は無さそうです.
特殊なことをやっているならば違ってくるのかもしれませんが.

1: 名無し 『フォームのKeyPreviewプロパティをTrueにして(つまりフォームでキーイベントをフックして)、 フォームのキーイベントで...』 (2009/06/06 18:41)

2: miff 『情報提供ありがとうございます. わざわざユーザコントロールを作成するより簡単にできそうですし,応用範囲も広そうです.』 (2009/07/08 17:18)

2007/04/21(土) xreaでadiaryを設置する

はてブ 2007/04/21 24:15 雑記miff
ずっと気付かなかったんですが,
どうもコメント機能が動作していなかったみたいです.

見てみると,
/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でも,他のサーバだと全然違うことをやらないといけないかもしれませんね.
難しい…….

2007/04/21(土) PortableFirefoxを使ってみる

はてブ 2007/04/21 22:44 雑記miff

PortableFirefox

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

続きを読む


2007/04/17(火) Visual Studio 2005でOpenGLプログラミング

はてブ 2007/04/17 21:23 雑記miff

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やそのヘッダファイルなど


2007/04/16(月) Transact-SQLでパスワードをマスクする

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

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

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

Transact-SQLの文字列関数群

使う関数を次の表に示します.
関数名用途
REPLICATE文字列を指定回数繰り返す
LEN文字列の長さを返す

続きを読む


2007/04/16(月) 掲示板作成練習 そのver0.01b

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

外見

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

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

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