私的 Vim メモ(検索編)
Vim は大抵の環境で使える上に使いこなすと強力なのですが、vi として(というか h, j, k, l, i, a, ESC, x, dd, p, :w, :q, :q!, ZZ 大体これくらいで全てを済ますという vi としてもあまりつかいこなせてないスタイルで)しか使っていなかったので悔い改めて修行中です。
ちょっと慣れてもすぐに忘れてしまうということを繰り返して今がある。そんなわけで自分用にメモるのです。
検索
-
/[検索文字列]
下方向に、[検索文字列]を検索する。 -
?[検索文字列]
上方向に、[検索文字列]を検索する。 -
*
カーソル位置の単語で下方向に検索する。 -
#
カーソル位置の単語で上方向に検索する。 -
n
順方向に次の検索結果に移動する。 -
N
逆方向に次の検索結果に移動する。 -
:nohlsearch
検索結果表示のハイライトを消す。
Mac の Web 共有で Proxy
インターネットからは普段隔離しているお客様のサーバーに yum でソフトを入れたいという状況になりました。メンテナンスなどでインターネットに接続しなければならないときには別ネットワークのLANケーブルと差し替えるという運用なのですが、クライアントに影響が出るためお客様がクライアントを使用している時間帯には作業ができません。
しょうがないので「夜間に作業させてもらうようにお話しようかと思います」と弊社、峰松に相談したら「インターネットに接続したノートPCに Proxy 立ててネットワークに接続させてもらってそれ経由でインストールしたらどうかな?」と。
その手があったか!
ってなわけで、私の Macbook は3G回線でインターネットに接続できるのでコイツに Proxy を立てることします。Mac だと Web 共有で Apache2 が起動するのでこれを利用することにしました。
設定ファイル、/etc/apache2/httpd.conf を眺めるとProxy関係の module はロードされるようになっていました。
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
追加の必要はなさそう。
最後に他の設定ファイルを読み込む
Include /private/etc/apache2/other/*.conf
という記述がありましたので Proxy の設定、 /private/etc/apache2/other/proxy.conf を作成しました。/private/etc/apache2/ と /etc/apache2/ って同じ場所を指してるみていですね。
proxy.conf はこんな感じ。
ProxyRequests On
ProxyVia On
Order deny,allow
Deny from all
Allow from 192.168.1
192.168.1.* からフルオッケーという漢らしい設定です。「システム環境設定」→インターネットとワイヤレスの「共有」で Web 共有を起動(起動済みの場合は再起動)すると Proxy が有効になります。
漢らしすぎるので普段はこの設定が読み込まれないように proxy.conf_ とかにしておいたほうがいいですね。Web 共有自体普段は切っていますが 、念のため。
IronPython Console をもっと便利に(TABによる補完とか)
- 2010/02/11
- murave
- IronPython
IronPyhton の開発環境を構築しています。
お客様に .NET Framework 4.0 が必要な提案をしておりまして、しかも、コンパイルが必要な言語はイマイチ要件にあわない。初めは IronRuby でやろうかと思ったのですが、調べたところ日本語の扱いに不安がある。ここはそろそろ安定しているであろう IronPython かな?というわけ。
さて、本題。インタラクティブシェルを便利にする、ipy.exe おすすめの起動時オプションをご紹介。
どんなオプションがあるのかはこんな感じで確認できます。
C:\Users\murave>"C:\Program Files\IronPython 2.6 for .NET 4.0\ipy.exe" -?
Usage: ipy.exe Usage: ipy [options] [file.py|- [arguments]]
Options:
-3 Warn about Python 3.x incompatibilities
-c cmd Program passed in as string (terminates option list)
-D Enable application debugging
-E Ignore environment variables
-h Display usage
-i Inspect interactively after running script
-m module run library module as a script
-O generate optimized code
-OO remove doc strings and apply -O optimizations
-Q arg Division options: -Qold (default), -Qwarn, -Qwarnall,
-Qnew
-s Don't add user site directory to sys.path
-S Don't imply 'import site' on initialization
-t Issue warnings about inconsistent tab usage
-tt Issue errors for inconsistent tab usage
-u Unbuffered stdout & stderr
-v Verbose (trace import statements) (also PYTHONVERBOSE=
x)
-V Print the version number and exit
-W arg Warning control (arg is action:message:category:module
:lineno)
-x Skip first line of the source
-X:AutoIndent Enable auto-indenting in the REPL loop
-X:ColorfulConsole Enable ColorfulConsole
-X:CompilationThreshold The number of iterations before the interpreter starts
compiling
-X:Debug Enable application debugging (preferred over -D)
-X:EnableProfiler Enables profiling support in the compiler
-X:ExceptionDetail Enable ExceptionDetail mode
-X:Frames Enable basic sys._getframe support
-X:FullFrames Enable sys._getframe with access to locals
-X:GCStress Specifies the GC stress level (the generation to colle
ct each statement)
-X:LightweightScopes Generate optimized scopes that can be garbage collecte
d
-X:MaxRecursion Set the maximum recursion level
-X:MTA Run in multithreaded apartment
-X:NoAdaptiveCompilation Disable adaptive compilation
-X:PassExceptions Do not catch exceptions that are unhandled by script c
ode
-X:PrivateBinding Enable binding to private members
-X:Python30 Enable available Python 3.0 features
-X:ShowClrExceptions Display CLS Exception information
-X:TabCompletion Enable TabCompletion mode
-X:Tracing Enable support for tracing all methods even before sys
.settrace is called
Environment variables:
IRONPYTHONPATH Path to search for module
IRONPYTHONSTARTUP Startup module
お勧めは、TABキーでのキーワードの補完が有効になる「-X:TabCompletion」、自動でインデントしてくれる「-X:AutoIndent」、コンソールがカラーになる「 -X:ColorfulConsole」あたり。昔はTabCompletion と AutoIndent は設定すると問題もあったのですが(TabCompletion では日本語が文字化けするとか)なおっているようです。
これらのオプション、3年前に買った『オープンソース×Windowsスクリプティング IronPythonの世界』(荒井 省三)という本で知ったのですが、いまだにこの本ぐらいしか参考書がないみたい。
私は、スタートメニューの IronPython Console のショートカットをコピーしてリンク先に上記のオプションを追加したショートカットを作ってます。便利ですよ。
切れちゃってますが、リンク先の内容は「”C:\Program Files\IronPython 2.6 for .NET 4.0\ipy.exe” -X:TabCompletion -X:AutoIndent -X:ColorfulConsole」です。ipy.exe の Path については調整してくださいね。
UTF-8なCakePHP+EUC-JPなMySQL4.0
CakePHPは非常に良くできたPHPフレームワークです。
DBの種類等も設定ファイルに少し書いてやるだけで動いてくれます。
文字コードもそうで下記設定ファイルに書くだけです。
MySQLでEUC-JPを扱う場合も下記のようにするだけです。
/app/config/database.php
'mysql',
'persistent' => false,
'host' => 'localhost',
'port'=>3306,
'database' => 'dbname',
'login' => 'dbuser',
'password' => 'dbpassword',
'prefix' => '',
'encoding' => 'ujis',
);
}
?>
MySQLの場合はここで設定したencodingを使って、「SET NAMES ujis;」を自動的に発行してくれています。ここで問題が発生したのですが、MySQL4.0系にはSET NAMES構文がないので文字化けしてしまいます。CakePHP側もEUC-JPにしてしまえばいいのですが、今回はUTF-8である必要があり、DBとの入出力の際に、UTF-8⇔EUC-JPと変換することにしました。CakePHPはデータ操作の際に呼ばれるコールバック関数がありますので、そこで変換してやればOKです。
基本的に全ての生成されたModelはAppModelクラスを継承していますので、このクラスで変換してやります。
/app/config/app_model.php
data配列をEUC-JPに変換する処理
return true;
}
}
?>
もっと根っこのところで変換かけても良いのでしょうが、今回はCakePHPのライブラリには手を加えたくなかったので、こうしました。子クラスで上記関数をオーバーライドしている場合は親の関数を呼ぶのをお忘れなく。こうしたほうが良いというのがあればツッコミお待ちしてます。
複数テーブルをまたいで重複しないIDを自動的に振る(PostgreSQL)
- 2010/02/07
- aikawa
- PostgreSQL
CREATE TABLE test(id serial, hoge text, primary key(id));
CREATE TABLE test2(id int default nextval(pg_get_serial_sequence('test'::text,'id'::text)::regclass), hoge text);
INSERT INTO test(hoge) VALUES('hoge');
INSERT INTO test2(hoge) VALUES('hoge');
INSERT INTO test(hoge) VALUES('hoge');
PostgreSQL8.1.9で確認。
testのidには1,3が、test2のidには2が入ります。
立っているclassは親でも使えと言う感じです。
デフォルト値にはcurrvalも使えますが、setvalで初期値を忘れずに。
普通に使う機会が無さそうなものばかりで。
文字コードの話(EUC-JP)
- 2010/02/07
- aikawa
大体知ってるという人も多いと思うので、概略だけ。
EUC-JPは拡張としてマイクロソフトが規定したCP51932と 日本ベンダ協議会が規定したeucJP-msが有ります。何が違うかと言うと
前者はJIS X 0212が無い、NEC選定IBM拡張文字が有る、ユーザ定義文字が入らない
後者はJIS X 0212が有る、NEC選定IBM拡張文字が無い、ユーザ定義文字が入る
と言う事のようです。
因みにブラウザではIEはCP51932のみ対応で、FirefoxやOperaは両方対応しているようです(表示に関して)。
で、またややこしい話ですが、これらの3ブラウザ全て送信時はCP51932らしいんですが
FirefoxだけはJIS X 0212をエンティティ化(数値文字列化って言うのかな)しないで送るので、Firefoxで送信した文字だけはFirefox以外で見ると文字化けする事があるという。
追記:今もそうなのか時間があれば調べたいと思います。
またSQLサーバではPostgreSQLとMySQLはeucJP-msですので、同じEUC-JPでも微妙に違う文字が送られて来る事を意識しないといけないんですね。
PHPでは5.2.1以降でしかeucJP-msは対応していませんので、中間処理もこれより前のバージョンでは手で修正が必要になるようです。
あとは他の文字コードからの変換で微妙に違う字体になったりする事もあるらしいです。
まぁ、SJISもEUC-JPも色々と問題があるんですが、UTF-8も問題が無いわけではないんですね。
その辺はサロゲートペアで調べれば出ると思います。対応アプリとかメモ帳でバックスペースとか。
間違いに関して、突っ込みお待ちしております。