home ホーム search 検索 -  login ログイン  | help ヘルプ

find 検索

671 - 680 / 1320    [|<]  [|<]  [<]  61  62  63  64  65  66  67  68  69  70   [>]  [>|][>|]
タイトル/名前 更新者 更新日
日記/2010/09/08/「確認」画面が必要な時 msakamoto-sf 2010-09-08 10:08:28
日記/2010/09/08/Webアプリの状態遷移と「戻る」ボタン msakamoto-sf 2010-09-08 09:57:58
日記/2010/09/06/「デバッガによるx86プログラム解析入門」読み終わった。 msakamoto-sf 2010-09-06 21:53:21
Emacs msakamoto-sf 2010-09-05 13:12:24
日記/2010/09/05/「やさしいEmacs-Lisp講座」読書メモ msakamoto-sf 2010-09-05 13:11:03
技術/vim/メモ2, ウインドウ, タブ msakamoto-sf 2010-09-04 13:43:46
C言語系/memos/VC++/11, 構造化例外処理と"/SAFESEH"リンカオプション msakamoto-sf 2010-09-02 18:23:02
技術/Windows/Matt Pietrek氏MSJ私家版PDF msakamoto-sf 2010-09-01 23:16:55
日記/2010/08/30/黒歴史の撲滅 msakamoto-sf 2010-08-30 22:08:19
PHP/Tips/parse_ini_fileで値に記号を使う時のPHP4<>5間の相違点 msakamoto-sf 2010-08-26 22:44:47
ソート項目 / ソート順     1ページ 件ずつ表示

日記/2010/09/08/「確認」画面が必要な時  

所有者: msakamoto-sf    作成日: 2010-09-08 09:59:39
カテゴリ:

・入力フォームと、表示形式が大きく異なる時、「今入力した値が、実際はどう表示されるのか?」を確認してから保存したいので、「確認」画面が欲しい。
・入力内容を確認出来る、1クッションが欲しい。
・お金や個人情報のやり取りなどで、最終確認出来る1クッションが欲しい。

いずれにせよ、利用者の「不安感」を低減するためにも「確認画面」は有った方が良いと自分は思います。

最も、Twitterやチャットみたいな場面で「確認」画面を用意するのは冗長ですし利用者的にも煩わしさが先立つと思いますので、何が何でも「確認」画面が必要、というわけでは無いと思います。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-08 10:08:28
md5:b6b5fbb05c6ec6b9e1abb475b0aae1b2
sha1:8db996c770347331a855f52a83850e71d751251c

日記/2010/09/08/Webアプリの状態遷移と「戻る」ボタン  

所有者: msakamoto-sf    作成日: 2010-09-08 09:31:06
カテゴリ: PHP Xhwlay 

Event-Drivenな状態遷移を管理する目的でXhwlayを作ったが、Webアプリケーションで使う上で一点だけ未解決の領域があります。
それはブラウザの「戻る」ボタンです。

「戻る」ボタンが押された時ですが、サーバーがクライアントキャッシュが効くようなHTTPヘッダーを送信していれば、ブラウザはHTTPリクエストは送信せず、自分で保存していたキャッシュを表示します。もしサーバーがキャッシュ無効なHTTPヘッダーを送信していれば、ブラウザはHTTPリクエストを再送信するでしょう。

ところがXhwlayの場合、「今どのページを表示しているのか」をサーバー側で保持することになります。
5画面に分かれたウィザード形式の入力フローを想定し、例えばユーザーが画面4まで進んだ後に画面2まで「戻る」ボタンで戻って入力をやり直したい、と思っても、Xhwlayの管理上はユーザーが今居る画面は画面4のままです。従って、画面2まで「戻る」で戻ったユーザーが入力値を修正して画面2の「次へ」ボタンをクリックしたとしても、Xhwlayの管理上では画面4に対して無効なイベントがリクエストされ、おそらくは無視され、ユーザーには画面4が表示されてしまいます。そのため、「前の画面に戻って入力をやり直す」イベントやそのためのボタンをアプリ側で用意する必要がありました。

これをどうやって解決するかですが、以前触ったAppleのWebObjectsにヒントがありました。
WebObjectsではURL構成要素の最後、fragment("#"以降)を使い、画面の履歴を裏側で保持しています。正確には画面表示に使う値をオブジェクトとして、fragmentの値に紐づけることが出来るようになっていて、WebObjectsが自動で管理してくれます。
これと「キャッシュ無効」を併せると、「戻る」ボタンでURLが再リクエストされると、そのfragmentから以前の画面表示に使われた値を取り出すことができ、以前の値を再表示可能になるという仕組みです。
・・・えっと、確かそんな感じでした。大筋は間違ってないと思います。とりあえずfragmentを履歴管理のIDとしているアイデアは間違ってないはず(;´Д`)。

もちろん、無限に履歴を保持することは出来ないので、上限数も設定出来るようになっていました(たしか50とかそれくらい。50ページも「戻る」で戻るのはレアケースなので実用上はこれでOKではないでしょうか。それ以上越えると、「これ以上戻れません」的なページが表示された記憶があります)。

つまり、「巻き戻し再生用のID」を用意すれば解決出来そうです。格好つけて「セーブポイント」と名付けてみましょう。この「セーブポイント」にその時点での「今居るページ」を保存しておけば、巻き戻しも出来るようになります。
さらにXhwlayの場合、ページフロー遷移中にフロート紐づけたいデータを「Bookmark Data」として保持していますので、これをその時その時の「セーブポイント」に履歴として保存しておく。
こうすれば、「戻る」で任意の「セーブポイント」まで戻り、その時点でのState, Bookmark-Dataに巻き戻し、なおかつそこから進め直す事が出来るようになる・・・筈、です。多分。

「セーブポイント」についてはBookmark-IDとは別でHTTPリクエストに含ませることになりますが、fragmentは避けたいです。JavaScriptや画面ナビゲーションで"#"以降を使いたい場合も有ると思いますので。
Bookmark-IDの後ろに、"."とか","で区切ってセーブポイントのIDを入れておくのが分かりやすいと思います。

しかしXhwlay単体だとやはり使いにくいです。毎回アプリ毎に作り込みが発生してしまう。
そろそろ、XhwlayのアイデアをCakePHPやSymfonyなど他のフレームワークに、プラグイン等の形式で移植するべきかも知れません。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-08 09:57:58
md5:2e1f8c68fe1237aa9ac8cd6bbbb9f830
sha1:05594b764b1d3195507b77990398489e28af7f49

日記/2010/09/06/「デバッガによるx86プログラム解析入門」読み終わった。  

所有者: msakamoto-sf    作成日: 2010-09-06 21:39:19
カテゴリ: Assembler 読書 

ようやく読み終わりました。

OllyDbgなどデバッガを使ってWindows上のx86プログラムを解析するための入門書、まさしく名前の通りの内容です。一応前提知識についても網羅的に書かれていますが、個別の詳細までは解説されていません。本文中で詳解されている参考資料などを読み込んでおく必要があります。
少なくともPE/COFFフォーマットを理解し、アセンブラもある程度読むことが出来、Win32APIプログラミングの素養がないとキツイかも。というか自分は、そこまで勉強して、ようやく本書を読み終えることが出来ました。

Windows x86でのプログラム解析にまつわるトピックを広く浅く取りあげているので、さらにディープな領域に進みたいときの案内書として手元に置いておこうかと思います。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-06 21:53:21
md5:e4ddc0708f7399fa71b66f851fae99ec
sha1:bc97b3194ae7cac41297327ca539b590092ae181

Emacs  

所有者: msakamoto-sf    作成日: 2009-04-26 12:50:33
カテゴリ: Emacs 
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2010-09-05 13:12:24
md5:24dc1ab200cc3e626214ed8882b24eaa
sha1:40954d586eac894be39de583c6dac62e29a9eea0

日記/2010/09/05/「やさしいEmacs-Lisp講座」読書メモ  

所有者: msakamoto-sf    作成日: 2010-09-05 12:48:42
カテゴリ: Emacs 読書 

「やさしいEmacs-Lisp講座」をさっくりと読み終えた。

これを最初に読んでいれば、Emacsを嫌いにならずに済んでいたと思う程の良書。

簡潔かつ明快に、Emacs-Lispの書き方のエッセンス、ポイント、基本的な概念を流れるようにスマートにコンパクトに学べる。
特に嬉しいのは、マニュアルやInfoだけでは分からない関数や構文の「つなげ方」を示してくれている点。
例えば"while"の説明では、「C言語のforやwhileのような繰り返しを行う時は~」で

(let ((i ?a))
 (while (<= i ?z)
   (insert i)
   (setq i (1+ i))))

のような実践的なパターンを示してくれている。
個々の関数一つ一つの使い方を知るだけでは学べない、"Emacs-Lispならではの「お作法・パターン」"が随所に散りばめられており、ページ数に対する内容の濃さ・読みやすさは格別のものがある。

"Emacs-Lisp"というLisp言語の方言を解説してくれているのみならず、「Emacsというプラットフォーム」におけるEmacs-Lispの書き方のコツ・要点までを実にスマートに明快に示してくれている点が素晴らしい。

もしEmacsのカスタマイズ目的でEmacs-Lispの学習を始め、ASCIIやオライリーの分厚いEmacs(-Lisp)マニュアルに辟易しているのであれば、まずはこちらの一読をお奨めしたい。「なんだ、Emacs-Lispってこんなにコンパクトに学べるものだったんだ。」と目から鱗になるだろう。

Emacs-Lispを好きになりたい人全てにお奨め出来る、ピカイチの良著。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-05 13:11:03
md5:d99340c75002f48b46947996d08fb0e6
sha1:9261c88c1c62a82bc422ab3fdda66f9fd01c2b67

技術/vim/メモ2, ウインドウ, タブ  

所有者: msakamoto-sf    作成日: 2010-09-04 13:24:46
カテゴリ:

参考

ウインドウ分割・ウインドウ間移動

・とりあえず編集中のウインドウを分割したい。

C-w s → 垂直方向
C-w v → 水平方向

・新しいファイルを開く時にウインドウを分割したい。

垂直方向
:new ファイル名
水平方向
:vnew ファイル名

・空っぽのウインドウで分割したい。

C-w n

個人的には「空っぽ」よりかは、":new ."でディレクトリ(Netrw)を開く方が好み。

・ウインドウを移動

C-w h/j/k/l

個人的には次の"C-w w"の方が単純で好き。

C-w w 次のウインドウに移動

基本的に垂直分割しか使ってないので。

・現在のウインドウを最大化

C-w _

・全てのウインドウサイズを揃える

C-w =

タブ分割・タブ移動

・新しいタブを開く

:tabnew (ファイル名)
:tabedit (ファイル名)

・タブ切替

:tabnext or "gt"
:tabprevious or "gT"
:tabfirst
:tablast

・タブ一覧と移動

:tabs
:tabmove タブ番号

・オプション
set tabpagemax=15 ; 同時タブ表示数
set showtabline=0 ; タブバー非表示

Netrw directory listing からの便利操作

(ファイル or ディレクトリ上で) "o"
→ ウインドウを分割し、新しいウインドウでファイル or ディレクトリを表示
(ファイル or ディレクトリ上で) "t"
→ 新しいタブでファイル or ディレクトリを表示


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-04 13:43:46
md5:5d797f6f371b0053fb1bcc77d8bd497d
sha1:ab81956a15363a660bc66c99b11c19ca91b096cf

C言語系/memos/VC++/11, 構造化例外処理と"/SAFESEH"リンカオプション  

所有者: msakamoto-sf    作成日: 2010-09-02 18:04:32
カテゴリ: C言語 Windows セキュリティ 

参考リンク

参考リンクのまとめメモです。

初級:構造化例外処理の使い方を学ぶ

  • MSDNの基本情報
    • "MSDN Library" > "Windows Development" > "Diagnostics" > "Debugging and Error Handling" > "Structured Exception Handling"
  • SEHのサンプル
    • "MSDN Library" > "Windows Development" > "Diagnostics" > "Debugging and Error Handling" > "Structured Exception Handling" > "Using Structured Exception Handling"
  • "Windows の内部動作 - Web/DB プログラミング徹底解説" : 例外処理の一通りの日本語解説
  • VC++構造化例外メモ(Hishidama's VC++2005 SEH Memo)

中級:構造化例外処理の実装とC++の例外処理の関係について学ぶ

アセンブラ知識が必要。内容も非常に濃厚。

上級:"/SAFESEH"とセキュリティ関連の話題

なぜ"/SAFESEH"を使うべきなのか?それはバッファオーバーフローを使ってスタック上に展開された例外ハンドラのアドレスを書き換える"SEH Overwiting Expoit"という攻撃を防止するためである。しかしロードされる他のモジュールの"/SAFESEH"有無やSoftwareDEPの有効・無効によって回避される場合もあり、万能ではない。
また"/SAFESEH"はx86のみ有効である点も注意が必要である。x64におけるSEHの仕組みについての解説記事へのリンクも載せているので、参照されたい。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-02 18:23:02
md5:150dec004e925a949a6e060c9fb69bc0
sha1:93ab1150a42155c86a8f89bc669ecbdc340fbbd5

技術/Windows/Matt Pietrek氏MSJ私家版PDF  

所有者: msakamoto-sf    作成日: 2010-09-01 23:08:03
カテゴリ: Windows プログラミング 

Matt Pietrek氏のMicrosoft System Journalの記事で、個人的にPDFに変換した記事:

MSJのサイトは、フォントサイズが小さい/一行の幅が狭い/図やソースコードの一部が別ウインドウに開くなど、印刷してじっくり読みたい人には不向きなデザインになっています。tableタグを使ったレガシーHTMLなため、CSSを弄って全体のデザインを修正することも難しいです。

そこでOpenOffice Writerにコピペし、別ウインドウで開かれていた図やソースコードも本文に取り込み、印刷向けに整形してPDFに変換してみました。

著作権はMicrosoftにあるため、公開はしません、あくまでも私家版のPDFです。欲しい方はmsakamoto-sfまでその旨メール下さい。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-09-01 23:16:55
md5:faf98052b700899437c944892e2a6bb2
sha1:13760eed6afd4274867020339ab9518750a5953b

日記/2010/08/30/黒歴史の撲滅  

所有者: msakamoto-sf    作成日: 2010-08-30 21:28:23
カテゴリ:

思い出すだにおぞましい。
大学時代、2002年~2003年にかけてアルバイトで作成した某NPOサイトの某コンテンツ。

  • prepared statementを使っていない。SQL Injection ? なにそれ?おいしいの?
  • 硬直化したオブジェクト指向とフレームワーク。HTMLをカスタマイズしたいだけなのに、オブジェクトを派生してメソッドをオーバーライドしなければならない。
    • "HTMLテンプレート"という概念を知らなかった。最後の方でぎりぎり、PEARのHTML_Template_ITとそれを適当に見よう見まねでコピーしたオレオレテンプレートクラスを使ってた程度。
  • 連想配列のキーを、ダブルクォートで囲んでいない。(多分PHP3時代の何かの本で覚えてしまったのだろう)
    • undefined constant が大量に出力されていることに気づいていない。
      • それでもちゃんと意図したとおりに動く不思議。PHPの気の利かせ具合はNIPPON-JIN並みだとつくづく思う。
  • というか、そもそもerror_logの存在自体を知らなかった。
  • htmlspecialchars()の存在を知らなかった。XSSヒャッホウ!!
  • N:M関係を、片方のテーブルのフィールドにCSV形式で押し込めた。
    • しかも、implode()を使わず、ループ回して","で連結した後、末尾の","を手動で取り除いている始末。

もう酒の席でのネタにしかならない、悪夢のような・・・いや、実際黒歴史のサイトが、つい一ヶ月前まで現役で動いていた。

ところが8月一杯でサイト全体がVPSに引っ越しとなり、ニート状態を良いことに二つ返事で引き受け、自分の黒歴史を滅殺せんがため、過去の自分の亡霊とおよそ3週間に渡り対峙してきたが、この度目出度く殲滅せしめた。

なんというか・・・こう、精神的に、いろいろ、疲れた。↑で書いたようなコードを直していくと、フレームワークを導入して、CSVで片づけていたN:M関係の管理もちゃんとテーブル切って・・・となって、「アレ?黒歴史のままの方が、汚いけど規模は小さくて済んでた?」という思いがわき上がってきて、「自分、「綺麗にする」とかいいつつ、規模を大きくしていくだけで何か下世話な事してる?」という疑問というか無力感というか単に自己満足なだけじゃねぇの的な厭な感情がわき上がってきて辛かった。

もう、Web開発に対して「ワクワク感」を感じられなくなってしまった。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-08-30 22:08:19
md5:5f225d30790587f4624a724124aa1137
sha1:b3d8ebd0600b53af1aa921da989d1451334a4b1b

PHP/Tips/parse_ini_fileで値に記号を使う時のPHP4<>5間の相違点  

所有者: msakamoto-sf    作成日: 2010-08-26 22:25:18
カテゴリ: PHP 

parse_ini_file()の挙動がPHP4とPHP5の間で微妙に変わったりしています。自分は、値に記号(特に"$")を含んでいるケースで挙動の差異に遭遇しました。

php.netのマニュアル上では、「ini ファイル上の値に英数字ではないものがある場合、 ダブルクォート(")で囲う必要があります。」と記述されています。ところがPHP4の場合、特にダブルクォートで囲まなくとも読み込めるケースがあるため、マニュアルの記述に気づかずそのまま書いてしまい、PHP5に移行して上手く読めなくなりトラブルの原因となりました。

例:
test.ini:

key1 = value1
key2 = %value2% abc
key3 = %1$s %2$s [%3$s] %4$s
key4[] = E_USER_WARNING
key4[] = "foo bar"

parse_ini_file.php:

<?php
$r = parse_ini_file('test.ini');
var_dump($r);

PHP 4.4.9 (WinXP SP3):

> php parse_ini_file.php
array(4) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(12) "%value2% abc"
  ["key3"]=>
  string(21) "%1$s %2$s [%3$s] %4$s"
  ["key4[]"]=>
  string(7) "foo bar"
}

※PHP4ではまだ配列形式のkeyがサポートされていない

PHP 5.2.10 (WinXP SP3):

> php parse_ini_file.php
bool(false)
↓エラーメッセージ
[26-Aug-2010 22:36:35] PHP Warning:  Error parsing test.ini on line 3 \
                                   in parse_ini_file.php on line 3

マニュアルの記述に従い、key3の値を""で囲めば、PHP5でも正常に読み込めます。

key1 = value1
key2 = %value2% abc
key3 = "%1$s %2$s [%3$s] %4$s"
key4[] = E_USER_WARNING
key4[] = "foo bar"

PHP 4.4.9 (WinXP SP3):

> php parse_ini_file.php
array(4) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(12) "%value2% abc"
  ["key3"]=>
  string(21) "%1$s %2$s [%3$s] %4$s"
  ["key4[]"]=>
  string(7) "foo bar"
}

PHP 5.2.10 (WinXP SP3):

> php parse_ini_file.php
array(4) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(12) "%value2% abc"
  ["key3"]=>
  string(21) "%1$s %2$s [%3$s] %4$s"
  ["key4"]=>
  array(2) {
    [0]=>
    string(3) "512"
    [1]=>
    string(7) "foo bar"
  }
}

お察しの方もおられると思いますが、pear/LogのFileHandler、lineFormatをINIファイルで設定出来るようにしていたのです。PHP4の時代に作成したのをこの度PHP5に移し替えていたのですが、PHP4環境では問題なく出力されるのに、PHP5環境に移すとエラーになる、ということで調べてみた次第です。

他の言語と設定ファイルを共有したい場合はINIファイルが便利であることは確かですが、値のフォーマットについて今後のバージョンアップ時に何かしらトラブルが発生するかも知れないというリスクを考慮する必要がありそうです。
CakePHPやsymfonyなど、有名どころのフレームワークはいずれもINIファイルを使っていません。PHPだけで使うのであれば素直にPHPの配列を使うか、次点でYAMLなどを使う方向で今後は考えていきたいです。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-08-26 22:44:47
md5:55c3aa6b0247d7a1e0748e740979b6bf
sha1:0c8f6ff7357b607e1c366dc573b3a2dd944a1a64