2010年11月30日火曜日

mb_convert_encoding()の 第3引数は指定しても意味が無いらしい

2007-04-15 - T.Teradaの日記
ネット上には「不正な文字を利用したXSS攻撃*1を防ぐために、第三引数を指定する方がよい」というような記述もありましたが、これは日本語用の文字コードを使う限りは正確ではありません。文字コードを指定したところで、関数の出力結果は何ら変わりません。攻撃を防ぐ効果はないのです。

そうなのか。

どこかでセキュリティの専門家っぽい人が指定しないと脆弱性になるって書いてた気がする...探してみよう。

Web SQL Databaseの仕様策定が中止になったらしい

Web (SQL) Databaseについてのこれまでの経緯については下記が詳しい。

ブラウザ上のデータベースに関して - JavaScriptで遊ぶよ - g:javascript
現状の Web Database には Mozilla、Microsoft、Oracle が反対してる。
すなわち、生の SQL をそのまま触らせる現在の仕様には色々と問題がある (これは僕の意見) と。

SQLの方は中止になって、Indexedの方はどうなるんだろう?

ChromeやSafariやOperaは今まで実装してきたものはいいとしても、これからどうするんだろう?フォークして別の仕様としてやってくのかな。

Excel 2007で「読み取り専用」の切替ボタンを表示する方法

Excelじゆうちょう 読み取り専用の設定/解除
■Excel2007の場合
[Microsoft Office ボタン]→[Excelのオプション(I)]→Excelのオプションのダイアログボックスの表示→[ユーザー設定]→[リボンにないコマンド]

こんなところで設定できたのかー。
セルの枠線の表示/非表示を切り替えるボタンもあればいいのに。

DokuWikiはプラグインを入れなくても RSSフィードをリスト表示する機能を備えているらしい

RSSフィードを表示させる方法 [okoze-esca.net]
DokuWikiにはどうも標準でRSSフィードを表示させることができるようなのまとめてみました。

これは優秀。

2010年11月26日金曜日

PHPで Exceptionをログに残すには

よくサンプルにあるように $exception->getMessage() するよりも、Exceptionをそのまま出力してしまい、暗黙の文字列変換した方がスタックトレースとかも出力されて分かりやすい。

例外の文字列表現 - PHP 5.3 日本語マニュアル
public string Exception::__toString ( void )
例外を文字列で表現したものを返します。

PHPで UTF-8から SJISに変換して CSV出力する

PHPでCSVだけSJISで出したいと思ったとき - 近況
PHP5.1以降なら、php://memoryという便利なものがある。

便利なような、そうでもないような。とりあえずメモ。

PHPの json_decode()で 整数がfloatになる問題の解決方法 (Twitter API編)

TwitterのAPIをjson_decodeするときに、idの値がオーバーフローする - OOMORI.lunch
とりあえず、今回の場合は整数なのはidの部分だけなので、下記のようなコードを加えることで対処できる。
なるほど!JSONの段階で文字列扱いにしてしまえばいいんだ!

PHPの json_decode()は大きな整数を floatにしてしまう

Twitterのid(TwitterのTweet全てで連番になっている)が16桁になり、もうすぐ17桁になりそうな昨今、32bitのIntでは対応できない。
なので文字列として扱いたいが、PHP標準関数のjson_decode()ではこれをなぜかfloatに変換してしまう。

PHP: json_decode - Manual
JSON デコードオプションのビットマスク。現在サポートしているオプションは JSON_BIGINT_AS_STRING のみです (デフォルトでは、大きな整数値を float に変換します)。

この変更は 開発版 の PHP に含まれています。 おそらく 5.3 より先のバージョンになるでしょう。
このJSON_BIGINT_AS_STRINGというオプションを指定出来れば良いのだろうけど、現在最新のPHP5.3.3でもまだ未実装だった。(まあPHPの本家マニュアルはUpdateが速いのでマニュアルで先のバージョンと言われたらそうなんだろうけど。)

2010年11月25日木曜日

Excel 2007で複数の図形(オブジェクト)を選択状態にする方法

複数のオブジェクトを一気に選択する:Excel2007即効テクニック
 「ホーム」タブ右端にある「検索と選択」ボタンをクリックしてサブメニューを表示する。下から二番目にある「オブジェクトの選択」を実行すると、ワークシート上に配置したオブジェクトを選択できるようになる。

Excel2003以前は簡単にクリックできた白矢印君が居なくなったと思ったら、こんなとこに追いやられていたとは!

2010年11月22日月曜日

PHPで 自動採番(serialとか)した IDを取得する

最後に挿入された行の ID あるいはシーケンスの値を返す - PHP 5.3 日本語マニュアル
string PDO::lastInsertId ([ string $name = NULL ] )

最後に挿入された行の ID、 あるいはシーケンスオブジェクトから次の値をを返します。 これは、構成しているドライバに依存します。例えば PDO_PGSQL() の場合、name パラメータにシーケンスオブジェクト名を指定する必要があります

たしかこれで、同一DBセッション内の最後に自動採番したID(PostgreSQLの場合はserialかbigserial)が取得できる。
PostgreSQLの場合はSequenceオブジェクト名をパラメータとして指定しないと空振りする(エラーは出ない)ので注意。

PHPで 全角1文字を半角2文字に換算して文字数を取得する方法

文字列の幅を返す - PHP 5.3 日本語マニュアル
int mb_strwidth ( string $str [, string $encoding ] )

文字列 str の幅を返します。
マルチバイト文字は、通常はシングルバイト文字の倍の幅となります。

そうそう、これこれ。

2010年11月18日木曜日

XML Web Serviceの標準化団体が活動終了

SOAP、WSDL、UDDIといったXML Web Serviceの標準化団体WS-Iが活動を終了するらしい。

時代はRESTへ。SOAPの終わりを象徴する、Webサービス標準化団体のWS-Iが活動終了 - Publickey
なぜWS-*が成功できず、RESTが成功しているのでしょうか。それはWebのアーキテクチャにとってRESTがより自然なものであり、WS-*はそうでなかった、という見方が一般的です。Webがすべてを飲み込んでいく。WS-*もそれに逆らえませんでした。

思えば昔はWeb Serviceと言えばXML Web Serviceだった。
それがAmazon Web Serviceのブレイクスルーにより、「RequestにXMLを使うWeb Service」と「RequestにはXMLを使わないWeb Service」に分かれた。
さらにJSONの台頭により、Web Serviceと言えばXMLを使うという認識は無くなった。XMLは選択肢の1つにすぎない。
さらに、今日ではWeb Serviceと言えばWebを通じて提供される何らかのサービスのことを指すようになり、かつてWeb Serviceと呼ばれたものはWeb APIなどと呼ばれるようになった。Amazon Web Serviceはまだあるが、かつてのAmazon Web ServiceはAmazon Production Advertising APIと名を変え、Amazon Web ServiceはEC2、S3等を含むより大きなものになっている。

XML Web Serviceが普及しなかったのはWebというアーキテクチャの上にもう1つレイヤーを必要としたのが一番の原因。RESTはWebよりも下のレイヤーだから、Webでやる限りRESTが使いやすいのは当然。
SOAPはRESTよりもきめ細かな仕様があるが、そのきめこまやかさ自体が不要だったのが最大の敗因か。
今の「クラウド」と同様に、かつてIBM等のベンダーがSOAP SOAPと連呼していたのは敗因ではないだろうけど、結局失敗に終わった今となってはその落差を感じる原因にはなっている。

縁の下(特にエンタープライズ向け)では重要な技術として使われてるし、これからもすぐにはなくならないだろうけど、それってかつてMicrosoftが力を入れていたWindowsのCOM+くらいの認識しかされないようになるのだろう。

はてなブックマークで自サイトに付けられたブックマークを新着順に表示する

自分のサイト内のページで、はてなブックマークにブックマークされたページの一覧を見る方法は知っていた。下記のページで、「URLで絞り込み」のところにドメイン等を入力すれば表示される。
これらはRSSで取得することもできて便利。

でもこれだとページの一覧なので、既に被ブックマーク済みの過去のページにブックマークが追加されても知ることができない

もう自分で(Google AppEngineあたりで)作っちゃおうかと思ったが、実は「はてなブックマーク - 新着ブックマーク」で「URLで絞込み」すれば新着のブックマークの表示&RSS取得ができることを知った。
(via hxxk.jp - 被ソーシャルブックマーク状況をチェックする方法のまとめ)

作らないで良かった…

難点はコメントありのみの絞り込みなんかができないことだが、Pipesに喰わせればなんとかなるだろう。

CakePHPの SecurityComponentに 任意のPHPコードを実行できる脆弱性

CakePHPのSecurityComponentに深刻なセキュリティホールが見つかりました - Shin x blog
SecurityComponentの実装に問題があり、結果、外部から任意のコードを実行させることができるという深刻な内容です。

CakePHP1.2.9 / 1.3.6では解消済みらしい。
古いCakeをバージョンアップせずに使ってるところ多いと思うけど、大丈夫なのかな?
WordPressみたいに気軽にUpdateできるといいんだけどね。(無理か。)

2010年11月17日水曜日

Adminer バージョン3.1がリリースされた

Adminer
Download
v 3.1.0, 2010-11-16

この間3.0が出たと思ったら、もう3.1が出た。
普通は3.0の直後は3.0.1とかが出るもんだけど、速い段階から3.1を準備してたのかな。

2010年11月15日月曜日

PHPのセッションの有効期間

sessionのタイムアウトについて。 - Leilaの超初心者メモ。
でも、セッションにはもう1つ
 「設定した時間が過ぎたら、一定確率でサーバ側のセッション削除するよ♪」
という設定がある。

php.iniのsession.cookie_lifetimeでブラウザに対していつまでセッションを有効にするかを設定する。
そしてsession.gc_maxlifetimeでは、サーバ側でセッションのガーベッジコレクト対象外にする期間を設定する。

上記サイトのようにphp.iniではなくini_set()等で設定した場合、サーバ側のセッションファイル保存ディレクトリが他のPHPと同じ場合は、他のPHPのガーベッジコレクト時に消される可能性があるので注意。
.

2010年11月12日金曜日

Twitterで議論をすると収集がつかなくなる (Google App Engine編)

Togetter - 「Google AppEngineについて思うところ」
@makotokuwata 氏による Google AppEngine についてのまとめ

Togetterで読めば@makotokuwataさんの意見は(少なくともある立場からは)まともだけど、Twitter上でこの一部を見た人には極論に見えるんだろうな。@makotokuwataさんは前のTweetを前提に次のTweetを書いてるけど、見てる人は前のTweetを見てるとは限らないわけで。その上、Twitterでは思いついたことを適当につぶやいてしまうという文化もあるし。

@makotokuwataさんの意見に対して@higayasuoさんが反論してて、でもその反論が@makotokuwataさんの言ってることと同じ内容なのが印象的だった。
「AはBです。」「それは間違ってる。AはBだよ。」的な。

2010年11月11日木曜日

DokuWikiで綺麗な「ホームページ」を作った例

あいちトリエンナーレ2010を2010倍楽しむ! トリウィキ | ToriWiki
ToriWiki(トリウィキ)は町ぐるみで開催されるアートイベント、「あいちトリエンナーレ2010」についての情報を共有するクチコミ情報サイト(非公式)です。

DokuWikiはプログラミング寄りのイメージが強いが、ここまでDokuWiki臭を消したDokuWikiも珍しい。すごいなあ。

JavaScriptでページ内の CGMコンテンツへのリンクを埋め込み用コンテンツに変換してくれるサービス

コンテンツリンクを埋め込みコードに変えるサービス「Embed.ly」の導入方法-swordsmith
コンテンツへのリンクを貼るだけで、そのコンテンツサービスの埋め込みコードに変更してくれるサービスです。

これはいいかも。今のところ使いどころがないが。

2010年11月10日水曜日

64bit版 Windowsの System32フォルダ

64ビットの互換性と移行 - Windows Server 2008 R2テクノロジ入門:ITpro
Windows Server 2008 R2のシステムファイルは、32ビットOSと同様にC:\Windows\System32フォルダーにインストールされる。ただし、「32」と付いていても、ここには64ビットのネイティブコンポーネントが格納されている。user32.dll、shell32.dll、gdi32.dllなどもすべて64ビットコンポーネントだ。

これは勘違いしそう。

それはそうと、この解説はなかなか良く書かれていてありがたい。

サンプルとして適切なIPアドレスの例

Geekなぺーじ : IPアドレスにまつわるチョイネタ
そこでは、ドキュメンテーションやサンプルで利用するためのIPv4アドレスとして、以下のものが定義されています。

192で始まるとプライベートIPかと見間違えそうだから、203.0.113.2あたりを使っとけばいいのかな。

2010年11月9日火曜日

Google Tool Bar 6.6が存在しない URLにアクセスしてくる問題

しばらく前から、Webサーバに対してdataスキームっぽい謎のURLへのアクセスがたまにある。
dataスキームならアクセスは不要なはずだが、間違えて相対パスか何かにしてしまってるっぽい。
分からないのが、パターンが特定できないこと。User Agentを見ても、どうも特定のユーザーのみではないらしい。

しばらくログを溜めて分かったのは、どれもIE8+Google Tool Bar6.6を使っていること。
で、調べてみたら見つかった。

What is this: url(data:image/png;base64 Website Analytics - Tracking and Logging forum at WebmasterWorld
Looks like it is actually something Google related. Probably Google Toolbar (GTB6.6).
I embedded the whole thing in html (see example below), and what you then see is a picture of a question mark, a minus sign, a check box and then the small square Google logo (like the favicon) with a magnifying glass.

Google Tool Bar 6.6のバグっぽい。迷惑だなあ。

でもそれにしてはサイト内の特定の箇所で起きやすいという謎が残るが...

Google AppEngineでは静的ファイルはレスポンスが速いらしい

AppEngine/Jのspin-upを劇的に改善する方法 - ひがやすを blog
AppEngineでは、HTMLをstaticファイルとして登録しておくと、App Serverまで処理がわたらず手前の専用のstaticファイルサーバーで処理されるので高速です。(JSPだとstaticファイルとして登録できない)

実は、App Serverに処理がわたらないとspin-upも起きないので、最初のHTMLの描画はspin-upなしで行われます。これがちょっとしたトリック。

静的ファイルにしては遅いからきっとApp Serverまでいっちゃって時間かかってるんだろうなと思ってたけど、App Serverまで行ってないらしい。
純粋にStaticサーバの段階でもう遅いのか。(他のGoogleが提供しているインフラと比べて。)

日本のCloudの真打ちは Niftyでも Sakuraでも NECでもなくこれだ!

仮想化(かそうか)だけに「貸そうか」なんて...!

仮想化ホスティングサービス サーバー貸そうか | 株式会社オージス総研
多くの実績と経験から生まれた仮想化ホスティングサービス、
それがオージス総研の”サーバー貸そうか”です。
安定性とセキュリティレベルの高い環境をご用意。
運用の柔軟性とTCO削減を両立し、価値の高いサービスをご提案いたします。

2010年11月5日金曜日

PHP 5.3の主な仕様変更

PHP 5.3の新機能と変更点:第3回 PHP 5.3の追加機能と仕様変更 (1)|gihyo.jp … 技術評論社
PHP 5.3では,目玉機能として説明した仕様の追加以外にも多くの変更が行われています。PHP 5.2とPHP 5.3の互換性はかなり高いですが注意が必要な変更もあります。

名前空間を除けば、PDOやSimpleXMLのような強力な変更は無し。
でも「HTTPストリームラッパーのステータス処理」はけっこう重要かも。

Yahoo!(香港|台湾)でも手書き入力機能が実装された

Yahoo!台湾や香港で手書き検索がリリース|今日のニッパウ
Yahoo!タイワンや香港で手書きで文字入力ができるインターフェイスが
実装されたようです。

Naverにあったあれですね。ハングル分かんないので繁体字のこっちの方が少し気軽に使える。

2010年11月2日火曜日

WordPressで metaタグの WordPressのバージョンを消す方法

下記の1文を wp-content/themes/[使っているテーマ]/functions.php に追記すると、meta要素によるバージョン情報の出力が無くなる。
(wp-includes/functions.php ではないので注意。)

WordPressのfunctions.phpに書いておくといいかもしれないコードいろいろ
remove_action('wp_head','wp_generator');

上記参考サイトは他にもAdSenseやGoogle Analyticsやその他について、状況によっては参考になりそう。
.

Googleの 埋め込み用ガジェット(JavaScript)の取得ページが一新された

Google Web Elements
Google Web Elements allow you to easily add your favorite Google products to your website.

Googleカスタム検索、Googleカレンダー、Googleマップなど、いろんなWebページ埋め込み用のガジェットを一覧で見られて動かせて分かりやすい。
埋め込み用のスクリプトもここで取得できる。

ブログ アーカイブ

カテゴリー