season 2 ってなんですか?

東京脳内マップを作るべく、昨年から本格的に始めた東京散歩。今年もそろそろ暖かくなってきたので、season2 的な勢いでウォームアップを始めようと思った。
また一眼をぶら下げての徘徊が始まるわけですね。ええ。


とりあえず単純に散歩する感じで、適当に写真を撮りながら徘徊の感覚を呼び起こそうと思った。ので、東日本橋辺りから歩き始めてみました。


日本橋の位置は、浅草橋と人形町の中間。隅田川を越えると両国があります(そういえば両国まだ散歩してない。。)。街の雰囲気としては静かなオフィス街という感じもするし、ほんのり下町テイストな生活臭も漂うような落ち着いた感じです。


個人的に、京浜東北線隅田川に挟まれた地域を『東京搗ち合いベルト』と勝手に呼んでます。新と旧がぶつかり合っているのに、なぜか調和のとれた不思議な地帯という印象が理由で、写真の様なオフィスに囲まれた寺社がいきなり現れたり、路地に入るといきなり下町、という場面に相当な頻度で出会う事ができるのです。大好物です。


と、そんな感じでぶらぶら歩いていると、馬喰横山周辺に入りました。ここら辺は織物問屋街で、服飾関係のお店がずらーっと並んでいます。
東搗ベルトには問屋街が多く、やっぱり江戸時代からの名残なんだろうな、と思います。


で、やっぱりオフィスの森の中に神社がひっそり存在する。すばらしい!


で、ぶらぶら歩いていると小伝馬町をかすめて、人形町まで歩いてきました。甘酒横丁で一休みしようかと思ったのですが、浅草線も通っていることだし、と言う事で浅草に向かう事にしました。


浅草はいつでも元気ですな。夢の国です。台東区のディズニーランドですわ。ディズニーぽくない写真載せるけどね。
浅草線の地下街とかは、宮崎駿監督が映画の舞台にしそうなくらいの雰囲気もってるし。


コーヒーでも飲んでまったりしよう。
と言う事で、隅田川ほとりにあるカフェムルソーへ。
(このページに良い写真がのってた)
ここは意外とみんなが知らない気がするんだけど、オープンテラスから隅田川をゆっくり見渡せる景色のよいお勧めスポットです。ケーキも美味しいし。
浅草という事もあり、アルバイトの店員さんがどこの国の人か分かりませんが、だからこそ男一人でも入れれんですよね。サンクス!
アイスカフェオレ注ぐの驚くほどヘタで、結構こぼした。店員さんすみませんでした。。


で、まあ一息ついた事だし散歩を続ける。
歩いて合羽橋道具街方面へ向かい、そのまま入谷方面へ。ぶらぶら歩いていると小野照崎神社という神社に遭遇。ものっそい数の猫いた。

なにしてはるの?(笑


めちゃくちゃ猫いる。


ねこにからかわれつつもお参りをしました。
で!今日テレビ見ていたら、人志松本の○○な話で、島田秀平がパワースポットとしてここ紹介してた。ビックリした。全然感じなかった。気とか。石像壊されてんなーくらいの感想だったな・・・。すみませんでした。(何か、良い事ありそうだよ!うん!


で、鴬谷まで歩いて帰りました。




最近週末は開発まみれだったので、気分転換になったかもしれません。今年2か月過ぎたけど、もの凄く技術的に向上している感じがします。いえ、それは多分気のせいです。

最近買った本
美しく、しかけのあるデザイン事務所の名刺
デザイナーの名刺って、やっぱりそのデザイナーの最高レベルのデザインセンスが詰まってると思います。そういうのを見て勉強します。

週末が終わったらしいよ

土曜日のブラッディーマンデーを見ながら「鳥とか飛ばないよね」と声を出して突っ込んでしまったよ。


最近は温暖化を喧伝する科学者を素っ裸で渋谷のスクランブル交差点に立たせたいほど寒いので、写真を撮りに行っていないのですが、5月に歌舞伎座が取り壊される前に、銀座へ写真を撮りに行こうと思っています。
なのでこのうんこ寒い時期を利用して家に籠ってしこしこ開発というか設計を行っています。


とは言っても普通の散歩はしていて、設計とかそっち系の本を読みにカフェ巡りをしています。よく言うよね「家にいるとやらない」って。その通り。なのでカフェへ行く。


今日は 江田珈琲店 いった
http://haku-design.shopmake.jp/?mode=works_view&ID=8
http://gourmet.livedoor.com/restaurant/304106/


本駒込にあるカフェで、おばあちゃんとその娘さんかな?二人でやっていました。一人用の読書机とかもあるのでゆっくり本を読んだり出来ます。お店の人も本を読みに来てくださいスタイルらしいです。

ヘタレ的にホットカフェオレを頼んだのですが。苦みと酸味の少ない飲みやすいカフェオレでした。チョコレート付いてきます。うれしい。


読んでいた本はこれ。
PHPによるデザインパターン入門
フレームワークとかあまり使わない方なので、今作っているものに何か使えないかと思い買ってみました。参考になりました。



あと、先週は イリヤカフェプラス いった
http://www.imadoworks.com/iriyaplus/


入谷にあります。東東京の古民家をカフェにした、落ち着きすぎのゆるカフェでした。無線LANも無料で開放してくれているので、ここで開発出来そうです!いいところ見つけました。
チーズパンケーキも美味しかったです。美味しい食べ物。美味しいコーヒー、無線LAN。無敵。


読んでいた本はこれ。
グラフィックデザイナーのサインデザイン
最近サインデザインとダイアグラム関連のデザイン本をよく見ますが、プロのデザイナーはやっぱりすごいと思った。上手くつくるのな。すごい。


来週はどこ行こうかな(うんちうんちー

UI を考える

インターフェースデザイン


Microsoft Sustainability : Productivity, future vision

Microsoftが考える未来のインターフェースについて製作された動画。コンテンツとサインデザインとが混ざり合い、その境界が画然とされていない印象を受ける。将来のUIとしての云々は別として、個人的にこのデザインが好き。


Microsoft Surface - The Possibilities

これもMicrosoftのUI。突き抜けない。


New Android User Interface Design Sneak Peak

AndroidのUI。これも突き抜けない。



最近、配色やサインデザインの本を買ったり、丸善ジュンク堂でそこら辺を漁っています。最近見つけた配色作成のサイトが良かったのでご紹介。


kuler
http://kuler.adobe.com/#
(説明に関しては http://gihyo.jp/design/serial/01/kuler/0002?page=1 こちらをご覧ください。)

MySQL 文字化けについのてまとめ

MySQLの文字化けに関して、ネットとかに散らばっている情報をかき集めたりした自分用メモ。


1.文字化けに関わる何か

MySQL4.1を境に
追加・変更された幾つかの機能によって発生しやすくなったらしい。
・[新規]Unicode(utf-8およびucs2)のサポート
・[新規]文字コードの自動変換機能の追加
・[変更]カラム,テーブル,データベース単位のキャラクタセット指定


MySQLのサポートする日本語文字コード

Shift-JIS EUC-JP Unicode
4.0 sjis ujis
4.1 sjis/cp932 ujis utf8/ucs2
5.0 sjis/cp932 ujis/eucjpms utf8/ucs2

※4.1->5.0 の変更で2種類から6種類に文字コードが増えた


捕捉1) cp932(IANA登録名:Windows-31J)
シフトJISを拡張したWindowsに置ける正しい文字コード。基本的にShift-JISと文字コードとしての違いはないが、他の文字コードに変換する場合に一部の文字が異なる挙動を引き起こす。


・「〜」sjis (0x81, 0x60) => Unicode(0x301C)
    CP932(0x81, 0x60) => Unicode(0xFF5E)
・「−」sjis (0x81, 0x7C) => Unicode(0x2212)
    CP932(0x81, 0x7C) => Unicode(0xFF0D)


sjisとして変換するか、CP932として変換するかで異なってくる。文字化けする文字から「WAVE DASH - FULLWIDTH TILDE問題」とも言う。また「①」(CP932では0x87,0x40、Unicodeでは0x2460)等は、sjisには存在しない。従って、sjisよりもCP932を文字コードとして利用した方がアプリとして良いかも。


捕捉2) eucjpms
EUC-JPの亜種。Microsoftが策定したWindows-31JEUC-JP互換表現。通常のEUC-JPには無いWindows-31Jの拡張漢字や外字領域が用意されている。使わない方が良いかも。というか多分使わない。


捕捉3) ucs2

Unicodeの拡張が進んだ今日では、BMP部分のみしか符号化出来ないUCS-2の出番はUTF-8にその座を譲っています。

意識する必要はないのかと思ったが、サーバ上の自動文字変換処理に於いて、中間コードとして利用されているらしい。


2.要注意機能

1.で挙げた機能のうち、最も文字化けに関わっているのが「文字コードの自動変換機能」。便利ではあるが、文字化け誘発の温床となっているらしい。


・システム
クライアントからDBへデータを投入するフローに、全部で5箇所の文字コード設定ポイントがある。

1)[client]クライアント文字コード
2)[server]サーバ全体文字コード
3)[server]対象DB文字コード
4)[server]対象テーブル文字コード
5)[server]対象カラム文字コード

サーバサイドの文字コードの決定フローは、カラム文字コードが未設定ならテーブル文字コード、テーブル文字コードが未設定ならDB文字コードというように、5)から2)に向かってバブル。


3.文字コード変換処理
文字コードの変換はダイレクトに行われる訳ではなく、いったんUCS2を経由して行われる。


■変換テーブル(みづらい)

クライアントサイド サーバサイド
binary エスケープ
処理
エスケープ解除処理を行う 変換なし binary
サーバと同一文字コード クライアントと同一文字コード
サーバと異なる文字コード エスケープ処理 中間コードUCS2に変換 UCS2からサーバ上の設定文字コードへ変換
エスケープ処理は必要に応じて行われる


捕捉) エスケープ処理
文字コードの変換処理とは別に「エスケープ処理」と「エスケープ解除処理」が行われる(「0x5C」の付与・削除)。


エスケープ対象

対象文字 コード
NULL 0x00
LF 0x0A
CR 0x0D
Ctrl+Z 0x1A
0x5C
" 0x22
' 0x27

クライアントとサーバの文字コードが一致すると文字コードの変換が発生しないので文字化けが起こらないと思われているが、それとは関係なくエスケープ処理や解除処理が自動的に行われるので、文字化けが発生する事がある。「表」はsjisで「0x955C」であるが、エスケープ解除処理によって「0x95」となってしまう。
エスケープ解除処理では、クライアント側の文字コードsjisやcp932などのマルチバイト文字の場合「0x5C」を削除しない。


=> これを防止するには skip-character-set-client-handshake を指定して、自動変換機能を切ってしまう事。


4.文字コード設定法
文字コード設定表

内容 実施タイミング 変更対象
クライアント側の文字コードを指定 クライアント クライアント set names cp932
サーバ側の文字コードを指定 サーバ サーバ default-charactes-set=cp932
データベース,テーブル
カラムの文字コードを設定
サーバ サーバ
DB,table,col
SQLステートメントで実施
接続時のクライアント側
文字コードを指定
サーバ クライアント init_commect='set names cp932'
サーバ側と同じ文字コードに設定(文字コード自動変換防止) サーバ クライアント skip-character-set-client-handshake

※init_commectによって、クライアント接続時にクライアント側の文字コードの初期値を指定出来るが、全てのクライアントに適用されるので、クライアントによって文字コードが異なる場合には、結局クライアント個別に設定する必要が発生する。


■/etc/my.conf

                                                                                              • -

[client]
default-character-set = utf8


[mysqld]
default-character-set = utf8
character-set-server = utf8
collation-server   = utf8_general_ci
init-connect     = SET NAMES utf8
skip-character-set-client-handshake

                                                                                              • -


5.ちなみに


文字コードの確認(show variables like 'char%')

mysql> show variables like 'char%'
+--------------------------+-----------------+
| Variable_name            | Value           |
+--------------------------+-----------------+
| character_set_client     | latin1          |
| character_set_connection | latin1          |
| character_set_database   | latin1          |
| character_set_filesystem | binary          |
| character_set_results    | latin1          |
| character_set_server     | latin1          |
| character_set_system     | utf8            |
| character_sets_dir       | /usr/local〜〜  |
+--------------------------+-----------------+
8 rows in set (0.00 sec)


=> character_set_client, character_set_database, character_set_serverが全てlatin1なので、文字コード変換は行われない環境である。

latin1:アルファベットに英語以外のラテン系欧州語で使われるアルファベットを集めた文字セット

・character_set_client

クライアントから実行されたSQL文を指定された文字コードで解釈する

・character_set_connection

基本的には、character_set_clientからこの設定文字コードへ変換してDBへ格納する。より正確に言うなら、文字セットイントロデューサ要素が省略された場合にSQLに含まれる文字列の文字コードとして利用される。
・・・・・
INSERT INTO hoge(huga) VALUES('日本語');
これは普通にcharacter_set_connectionの文字コードで格納される。
INSERT INTO hoge(huga) VALUES(_sjis'日本語');
こんな感じに「_文字コード」を値の前に付けてやると、その文字コードで格納される。

・character_set_database

デフォルトのサーバキャラクタセット

・character_set_results

クライアントへ返す文字列(クエリの結果)のキャラクタセット

・character_set_server

デフォルトのDBキャラクタセット

・character_set_filesystem

LOAD DATA INFILE や SELECT ..... INTO OUTFILE などのステートメントや LOAD_FILE()関数に対して、この変数でファイル名とリテラルの文字列を読み取る。ファイルを開けようとすると、ファイル名が character_set_client から character_set_filesystem に変わる。デフォルトはbinaryである。
マルチバイトのファイル名を利用できるシステムでは、異なる値を使用する事が好ましい。例えば、UTF-8でファイル名を表示しているシステムの場合は、character_set_filesystem を'utf8'にセットする(MySQL 5.1.6 実装)

・character_set_system

テーブルやカラム名などの識別子の書出しにサーバが使用するキャラクタセットで常にutf8固定

・character_sets_dir

MySQLで使われる文字コードファイルが保存されているディレクトリパス

validation


クライアントととのデータ受渡しの際に行う必要があるバリデーションについての自分メモ。

一般的なvalidation関数

htmlspecialchars
  htmlspecialchars
  @param  string 処理対象文字列
  @param  int    処理オプション(default ENT_COMPAT)
  @param  string 変換文字セット(default true)
  @param  bool   気にしない
  @retval string

&, ', ", <, > をHTMLエンティティに変換する事が出来る


第2引数

  • ENT_CMOPAT(2)  :シングルクウォートを変換しない
  • ENT_QUOTES(3)  :全て変換する
  • ENT_NOQUOTES(0) :シングルクウォート、ダブルクウォートを変換しない

  ※ PHPのコアな定義済み定数で、()の中は実体値
    => get_defined_constant で定義済み定数を取得可能。
    基本的には ENT_QUOTES を使う。


第3引数
不正な文字エンコーディングを利用した攻撃を防ぐためにも指定した方が良い。

htmlspecialchars ( $str, ENT_QUOTES, 'UTF-8' );

もしくは

htmlspecialchars ( $str, ENT_QUOTES, mb_internal_encording() );


■ htmlspecialchars 変換表

変換前 htmlspecialchars ($str) htmlspecialchars ($str, ENT_QUOTES)
& &amp; &amp;
&lt; &lt;
> &gt; &gt;
" &quot; &quot;
' ' &#039;
htmlentities
  htmlentities
  @param  string 処理対象文字列
  @param  int    処理オプション(default ENT_COMPAT)
  @param  string 変換文字セット(default true)
  @param  bool   気にしない
  @retval string

htmlspecialchars よりも詳細にHTMLエンティティ化を行う。
htmlspecialchars が5つ程度の変換なのに対して、htmlentities は100個の文字を変換する
※ get_html_translation_table で変換テーブルを取得可能

=> 逆変換は html_entity_decode

addslashes
  addslashes
  @param  string 処理対象文字列
  @retval string

バックスラッシュ(¥), NULL(¥x00), ', "  をエスケープ処理する。

mysql_real_escape_string
  mysql_real_escape_string
  @param  string   処理対象文字列
  @param  resource DBリンク
  @retval string

MySQLにデータを投入する場合は基本的にこれを通した方が良い
¥00, ¥n, ¥r, ¥, ', ", ¥x1a(EOF)  をエスケープ処理する。


■ addslashes, mysql_real_escape_string 変換表

変換前 addslashes mysql_real_escape_string
¥x00 ¥0 ¥0
   
' ¥' ¥'
" ¥" ¥"
¥n   ¥n
¥r   ¥r
¥x1a   ¥Z

validation の一般関数化

function v ($str) {
    if (is_array($str)) {
        return array_map("v", $str);
    } else {
        return htmlspecialchars($str, ENT_QUOTES);
    }
}

こんにちは ぶひ

こっちでブログを書いていきます。最初のうちは旧ブログのエントリーをこっちに移すターンが続くんだー!ぱんだが好きです。本物のパンダはそんなに好きじゃないです。デフォルメしたキャラぱんだが好きです。あとエロ動画探す自分に萌える!

銀座っぽくない東銀座

ブログデータを移動するの巻 その6

_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


カルピスー飲んで カンカン娘
いつの時代も小学生レベルだな。という深読み。
銀座カンカン娘の歌ですけど、絶対狙ってる気がする。

こんにちは銀座。の隣の東銀座!
銀座のへそ「4丁目交差点」から築地方面へ疾走する事約2分。以前は木挽町采女町と呼ばれた東銀座地区に、この上ないニワトリのモノマネをしながら入りましたよ。(声は出していないのでセーフ。)
4丁目交差点付近のコアな銀座に比べれば、東銀座は静かな老舗の色合いが感じられます。
「僕はエコプー。この堕落した世の中に産み落とされたエゴの化身!」そんな事は絶対に言わないであろう生カワイイキャラクターです。これはキャップを入れたくなりますし、友人にも伝えたくもなりますね!東銀座では中学生による強力なバイラルマーケティングが行われているようです。
地下駐車場に中華料理屋があるらしいですよ。・・・?
うわ、本当にあるなー
地下駐車場に降りて2分ほど辺りを探すと、中華料理屋「帝里加」がありました。惜しくも営業時間外でしたが、定食の安さには驚きです。銀座にありながら500円台の定食はインパクト大です。銀座の歩道橋にはエスカレーターが付いている!(しかも4基)
ここでピクニックとかやったら怒られるだろうなー
レジャーシートを広げて何分で警官がやってくるかを確かめる!そんな企画をやってくれる人募集したら結構いそう。募集中止!
トーキョーハート的な何か。
東銀座と言えば歌舞伎座が有名ですが、老朽化のため来年5月に建替え着工し、平成25年春に29階建のビルに生まれ変わるそうです。今の姿が見られるのもあとわずかで、建替えまでに沢山写真に残しておきたいです。
歌舞伎座の横から一丁目方向へ。
東銀座の銀座2、3丁目はだいぶ下町が残っている!カキフライ定食って銀座の名物だったんだ―。浅草橋辺りの通りに似ているな、と思っているとレトロなビルを発見。岩瀬博美商店。昭和4年竣工の建物で、昭和初期から残る貴重な建築物だそうです。いま、東東京に多く残るレトロな建物が注目されていて、お洒落なカフェや飲食店として生まれ変わっている、と先日どこかで聞きました。こういったレトロな建物がカフェになったら、そりゃあ入ってくつろぎたいですわい。(自分はお洒落な場所へ行くと肩がこるんですけどね!いってみてー!)「わんわんお!」
犬めっちゃこっちみてるー!しかも超さそってるー!
格子の隙間から気持ちよさそうな鼻を出してくるので、なでまくってやりましたよ。いぬかわいい。しっぽいい。じゃあまた。銀座を歩いた事がある方だと分かると思うのですが、とにかく銀座はギャラリーが多いんです。企業が管理しているギャラリースペースから、個人のギャラリー部屋まで、周りを見回せば必ずどこかにギャラリーを見つける事が出来ます。なにしろ、全国の5分の1にあたるギャラリーが銀座に密集しているそうですから。和服リフォームを生業にしているお店、あひるの学校。「アヒルつかまえた!」「おまえアヒルだよな!な!」
「ぎゃーっ!!」ここ、ホテル銀座ラフィナートには、鳥にさば折りをぶちかましている裸の少年と、自動電話交換機発祥の地という彫刻があります。かつての旧京橋電話局が存在した場所で、これはその記念碑だそうです。
昭和。昭和通りと中央通りの間に入ると、やや銀座っぽさが出てきた。
すごい所みつけた!
ビルとビルの隙間からチラッと光が見えたので「あれ?」と思い入って行くと、まさかのルノアールの入口が。昼間だというのにこの暗さ。ビルの間の路地の奥。なんだこの秘密基地は。ルノアールのサイトで調べてみると、銀座昭和通り店という名前らしいです。ただ、今思えば通りの反対側にちゃんとした入口があって、これは裏口的なものだったのかなー、と思います。
ストリートビューで確認しようとしたのですが、ちょうど昭和通り側のデータが切れている!陰謀だぜ!今度銀座行く時に、ちゃんと確認してこようと思います。これにはビビった。石「そこのお若い方や。すしでも喰うていかんかえ?」
自「お寿司ですか!(ヒャッハー)」
石「1貫500円じゃがのう」
自「でなおしてきます!」顔「・・・・」
自「あの・・・」
顔「銀座なめんなよ」
自「東銀座ですよね?」
顔「ええ・・・」歩道橋の下に、江戸時代の名残が残る東銀座。宝町に近い銀座一丁目に、ドラマに出てきそうなマンションを発見。
部屋から電球色が漏れ出して、ベランダには自由な植物がワサついています。このマンション自体が小さなギャラリーの集合体のようになっている様でした。部屋毎に全く違ったギャラリーなのでしょう。東銀座といえば、歌舞伎座とシネパトス。
銀座地球座と銀座名画座の2つの劇場を統合して出来たこの映画館は、晴海通りを地下で横切るように作られています。
地下通路には銀座とは思えない光景を見る事が出来ます。
銀座シネパトスに守られた味のあるお店が、銀座というソドムの町で光り輝いて見える!さいごにおまけの一枚。
東銀座ではなく、これは2丁目付近の中央通り。
週末は歩行者天国なので、4丁目に向かう程人の波が大きくなります。はるか向こうに人の壁がうごめいているのですが、突っ込む勇気がありません。
それはまたの機会に。

東銀座は良い町です。
レトロとモダンが上手い具合にぐっちゃりしているエリアでした。若干モダンが押し気味ではありますので、今のうちに素晴らしい東銀座を堪能しておきたいです。