2008-01-01から1年間の記事一覧

mbstring.func_overloadの罠

PHP

mbstringを愛用している日本のPHPerならphp.iniのmbstringセクションで必ずと言っていいほど目にする設定、mbstring.func_overload。 これを有効にするとmail()やstrほげほげ()がmb_send_mail()やmb_strほげほげ()にオーバーロードされて、mail()関数を呼び…

ストリームフィルタで文字コード変換してみる

PHP

PHPでもJavaやその他の言語のようにストリームにフィルタを挟むことが出来るようだ。 これを使うと透過的に圧縮処理を行ったり、Base64変換を行ったり、文字エンコーディング変換を行ったりできるとのこと。 公式マニュアルのストリーム関数をざっと眺めてみ…

ガベージコレクションの種類

今時の言語はだいたいガベージコレクションが備わってるんだけど、デストラクタが使える言語と使えない言語があったり、JavaはGCのタイミングが……などと言われたりするので、GCにはどんな種類があるのか調べてみた。 自分はGCに詳しいわけでもなんでもなくて…

PHPの内部では変数をどのように扱っているのか知る

PHP

PHPが内部的に変数をどのように保持していて、どのように処理しているのかをこれ以上にないぐらいわかりやすく解説している記事がある。 特にリファレンスがどのように扱われているのかが例を挙げながら詳しく書かれているので、(PHPが好きか嫌いかはさてお…

PHPはコマンド実行関数多すぎだろ

PHP

backtick演算子(バッククォートで実行するやつ) shell_exec() exec() passthru() system() pcntl_exec() popen() proc_open() このうちbacktick演算子とshell_exec()は等価らしい。 ……どれ使えばいいんだyp! といつも思うので、実際に試してみた。 shel…

日の出/日の入り時刻が標準機能とか……これだからPHPは(ry

PHP

PHPのマニュアルを眺めてたら日の出とか日の入りの時刻を取得する関数があったんだけど、こんなん誰が使うんだよ(;´Д`) 少なくとも標準で組み込まれてる必要ねーだろうよ。 そもそもどうやって計算してるんだ? どれだけの精度があるんだ? 日の出/日の入り…

コマンドライン引数の処理あれこれ

PHP

PHPといえば「ほーむぺーじ」を作るためにあるような言語なわけだが、何故か自分はコマンドラインアプリを作る機会が多い*1ので、引数のパースについて少し考えてみる。 対象ファイルとスイッチのオンオフ程度なら$argvを回しながら自前でパースしても事足り…

eeeUbuntuにJapanese TeamやMedibuntuのリポジトリを追加する

やはり日本語版特有のパッケージやマルチメディア系のパッケージとかも入れたいのでリポジトリを追加してみる。 Japanese Teamのリポジトリを追加 8.10(Intrepid)の場合 wget -q http://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-ke…

OpenOffice.orgのデフォルトフォントを変更する

会社のPCはLinuxデスクトップなんだけど、お客さんは圧倒的にWindowsが多いので、オフィス文書とそのフォントがアレでコレでどうにもこうにもな状態。 MSゴシック等のフォントがない*1のはもちろん、GNOMEのフォント設定をM+IPA系フォントに設定しているので…

register_globals()が無くなると聞いて

PHP

register_globals.php

Eee PC 901-16GにUSBメモリベースのeeeUbuntuを導入

本体のSSDには一切手を触れずに、USBメモリを挿したときだけeeeUbuntuを使えるようにしてみたので、その手順のまとめ。 最低限次のサイトは読んでおく。またはインストールしながら読む。 http://2.csx.jp/livecdroom/ http://2.csx.jp/livecdroom/eeepc_tip…

Eee PC 901-16Gを買った

今年は田んぼとミカン畑しかないド田舎に帰省することになったので、暇つぶしできるものをってことで流行りのULCPCを買ってしまった。 会社のディスプレイよりも解像度が高いヘビー級のノートPCは持ち運びできんよ……。 11月ぐらいからずっと情報を集めていて…

PHPスクリプトの文字エンコーディング

PHP

php.iniのmbstring.internal_encodingやmb_internal_encoding()はPHPスクリプト自体の文字エンコーディングとは関係ない。 これらはmbstring系の関数が内部で処理するためのエンコーディング指定だ。 なのでinternal_encodingにShift_JISを指定したからとい…

mb_regex_encoding()でJISが指定できない

PHP

少し前に「マルチバイト対応の文字列折り返し処理」というエントリを書いたけど、その中でpreg_split()だとうまくいくのにmb_split()だとうまくいかない処理というのがあった。 で、今日たまたま似たような処理を書いていたんだけど、何故かmb_split()でもう…

UbuntuにDebianパッケージを入れる際の注意

UbuntuにDebianのパッケージをそのまま入れてはいけない。 らしい。 たぶんほとんどはそのまま動くと思うんだけど、ディストリビューションが違う以上は構成も違うわけで、下手すると動かないどころか依存関係をぶっ壊してシステムオワタ\(^o^)/になるかも…

PostgreSQLで文字型カラムから数値型カラムへ変更する

DB

今までVARCHARで持っていたデータを、数値しか入れないってことでINTEGER型に変えることになったんだけど、ALTER TABLEがうまくいかなくてプチハマリ。 ALTER TABLE foo ALTER COLUMN bar TYPE INTEGER; 何の考えも無しにやってみたら案の定エラーになった。…

UbuntuでVMware入れるときのgccバージョン不一致の件

少し前にVMware-serverのバージョンが1.0.8になったのでアップデートしようと思ったら、vmware-install.plの途中で「カーネルコンパイルに使用されたgccのバージョンとインストールされてるgccのバージョンが違うよ」と言われてインストールできなかった(強…

新・はてなブックマークのブックマークレット

etc

ブクマしようと思ったら、新しいブックマークレットがリリースされました!みたいな表示が出てたので入れ替えてみたら、ブクマ画面がページ内にインラインで表示されて格好よくなった! んだけど、どうやら対象のページにcreateElementでscriptタグを生成し…

ArrayObjectで指定できるフラグ

PHP

SPLのArrayObjectはコンストラクタの第二引数やsetFlags()でフラグを指定できるのだが、これの意味がよく分からなかったので調べてみた……けどやっぱりよくわからなかったので実際に試してみた。 コンストラクタの説明を見ると「setFlags()を見ろ」と書いてあ…

マルチバイト対応の文字列折り返し処理

PHP

一行n文字で自動的に折り返しする処理が必要になったのでその辺から拾って済ませようと思ったら、マルチバイト文字をきちんと処理できないものばかりで困った。特に半角カナとか記号が鬼門。 というわけで仕方なく自分で作った。 業務で必要なものだったから…

parse_ini_file()は定数の影響を受ける罠

PHP

PHP: parse_ini_file - Manual定数も ini ファイル上でパースされます。 そのため、parse_ini_file() をコールする前に ini ファイル上の値として定数を定義した場合、返り値に統合されます。 ini ファイル上の値だけが評価されます。(from http://jp.php.n…

SPLでイテレータを使ってみる

PHP

PHPにはSPL(Standard PHP Library)という便利……というほどには充実してないライブラリがあるんだけど、いまいち知名度が低いようで、あまり使ってるのを見たことがない。標準で組み込まれてるのに。 ちなみにC言語からプログラムを覚えた身としては、どうし…

続・libx11をアップデートしたらCompizが激重&不安定になった

例の件について、Ubuntu日本語フォーラムを見に行くとこんなことが書いてあった。 Ubuntu日本語フォーラム / Xlib11をインストールしたらCompizの動作がカクカクにNVIDIAの特定のドライバを使っていると(さらに特定のアプリケーションを 動作させていると、…

libx11をアップデートしたらCompizが激重&不安定になった

昨日Ubuntuのアップデートを行ったらlibx11が新しくなったようなんだが、それと同時にCompizの2D描画がめちゃくちゃ重くなって不安定になった。 もっさりしてイライラするとかいうレベルじゃなくて、引っかかるような感じで描画が止まったり乱れたりすること…

Unicodeでの正規表現

http://kjirou.sakura.ne.jp/mt/2008/10/python_unicode.html例えば、ユニコード型文字列の内、漢字のみ("一"〜"龥")をマッチさせる場合 l = re.findall(u"[\u4e00-\u9fa5]+", "ひらがな漢字カタカナascii".decode("utf-8")) print l[0].encode("utf-8") #…

Ubuntuデスクトップのファイアウォールを設定してみた

注意:以下の内容はUbuntu Desktop版での話です。Server版はまた別です。 ポートは塞がれているというよりは開けてないだけ 「Ubuntuでは標準で全てのポートが閉じているのでファイアウォールの設定は不要」などという文章をよく見かけるのだが、これはもの…

PostgreSQLで日本語のソートがおかしい場合の対処法

DB

PostgreSQLで日本語が格納されているカラムをORDER BYでソートさせたら明らかにおかしい順序で返ってきた。 test=# select name from test_table order by name asc; name - 試験 てすと テスト てすとです 試験データ テストデータ test (7 rows) こんな感…

SSH X11 Forwardingで手元に呼び寄せる

sshにはX11 Forwardingというオプションがあって、これを使うと比較的安全にリモートのアプリケーションを手元で実行できる。いや実行してるのはリモート側だけど。 localhost $ ssh -X remotehost といった感じで-XをつけてやるとX11 Forwardingが有効にな…

ノートPCのUbuntuを入れてみた

すっかりUbuntu生活にハマってしまったので、3年前に買ったLaVie G type RXにもUbuntuを入れてみた。 120GBの2.5インチHDDに入れ替えて、Windows XPとUbuntuのデュアルブート環境を構築。 手順はこんな感じ。 LaVieの再セットアップディスクを使ってXPをイン…

キーボードレイアウトをいじるとATOKが自動起動しない

ハマったのでメモ。 Shift+Alt+Tabで逆回りできない UbuntuでもWindowsのようにAlt+Tabでウィンドウが切り替えられるわけだが、何故かShift+Alt+Tabで逆回りに選択することができない現象に出くわした。会社のPCではちゃんと逆回りで動いている。 Compizの場…