Javascript には trim 関数が無いらしい。代わりに replace を用いる。
target = target.replace(/(^\s+)|(\s+$)/g, "");
SVN のバックアップを取ったり、不要なリビジョンやディレクトリを削除したりロードしなおしたりしたい時がある。
そんな時は svnadmin や svndumpfilter を利用する。
移動中にオフラインでもメールくらい読めるようにしたいなと思って、 Google Gear を入れて gmail のオフライン設定をしてたら、普通の gmail アカウントではあっさりできたものの、 google apps 上の会社のメールの設定ができない。
調べてみたら以下のように google apps の設定を変更する必要があるらしい。
1. Domain Settings の General タブにいく
2. Enable pre-release features を有効にする
3. hit Save
以上。
ちなみにこの Labs の設定で何度 Mac の Safari がクラッシュしたことか。。 Google Gear ってそんなに安定してないんだね。
早く HTML5 がもっと実装されるの待った方がいいかな。
Zend_Form を使ってよく Wysiwyg の出力コードを生成するようなカスタムエレメントを生成したいことがよくある。
昔のバージョンでは Zend_View クラスの addHelperPath() をしただけだった記憶があったんだけど、今は少し違うっぽい。
なので一通り調べて実装しなおしてみた時のメモ。
Zend Frameowrk のバージョンは 1.8.1。
ディレクトリ構成は以下の通り。
+--- application ---+--- controllers | +--- modles | +--- forms --- elements | +--- layouts | +--- views ---+--- helpers | +--- scripts | +--- incude --- Zend | +--- public_html
php Zend Framework で構築されたアプリケーションで、定期的に Cron から実行される処理をフレームワークの一部として実装した時のメモ。
手順としては、 php コマンドラインで呼び出した際のオプションを取得し、コントローラ、アクション、モジュール、パラメータを適切に設定してリクエストを構築、ルーター、レスポンスを指定してフロントコントローラを実行する。
Safari は自動的に独自の highlight 機能でページ上でフォーカスされているコントロールに水色のボーダーを付けてくれる。これがたまに邪魔なときがある。
これを CSS で無効化するには以下の定義を追加すればよい。
:focus
{
outline: 0;
} 何か知らないけど、パッケージを用いてない Linux を使ってるせいで apache とか手動インストールされていた。
しかも時々必要なモジュールが追加されてないので、後からどうやって追加するのか調べと時のメモ。
一応環境
Apache/2.0.59
OS: ??
以前 centos で構築したサーバが壊れ、新しく ubuntu サーバを導入したので、これに subversion をセットアップした。その時のメモ。
以前構築したときよりいくから良くなってると思う。前回の記事は
CentOS に Subversion を導入する
と
CentOS で svn+ssh 環境の構築
環境は以下の通り。
この前 MySQL をパッケージでインストールしたら、 Mac 起動時に mysqld が勝手に起動する。これを起動しないようにするには、 /etc/hostconfig を修正すれば良い。
$ sudo vi /etc/hostconfig
AFPSERVER=-NO- AUTHSERVER=-NO- AUTOMOUNT=-YES- NFSLOCKS=-AUTOMATIC- NISDOMAIN=-NO- TIMESYNC=-YES- QTSSERVER=-NO- WEBSERVER=-NO- SMBSERVER=-NO- SNMPSERVER=-NO- MYSQLCOM=-NO-
ちなみにスタートアップスクリプトの場所は、
/Library/StartupItems/MySQLCOM/MySQLCOM
/usr/local/mysql/support-files/mysql.server
なので、これを使って起動したいときは、
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
$ sudo /usr/local/mysql/support-files/mysql.server start Mac/MacBook 特有のショートカットキーで、 Windows と違うものだけとりあえず書いておく。少しずつ慣れてきた。
覚えちゃえば見ないだろうけど。
Windows の CTL 系ショートカットは CMD キーを代わりに使えば効くことが多い。
あと、 Terminal はコントロールキーがそのままコントロールキーとして働く。で CMD キーを併用すればコピーアンドペイストもできて便利。
ブラウザは Safari 。
Mac の標準ではドットファイルやシステムファイルが Finder 上に表示されない。これを表示させるコマンドは以下の通り。
$ defaults write com.apple.finder AppleShowAllFiles TRUE $ killall Finder
戻すには TRUE を FALSE にして実行すればよい。
実は safari には標準で firebug のような機能がついていて、標準ではこれが無効になっているだけだったりする。これを有効にするには、 com.apple.safari プロパティに WebKitDeveloperExtras を追加してやれば良い。
$ defaults write com.apple.Safari WebKitDeveloperExtras -bool true
もしくは Finder で ~/Library/Preferences/com.apple.Safai.plist を開いて、さっきのプロパティを追加しても OK 。
これで確認したいエレメントを右クリックすれば、Inspect Element っていうのが確認できるはず。
たまに blog を書いていて、自分の環境が分からないときがある。そんなときに便利なコマンドをいくつかメモ。
とりあえずディストリビューションの名前だけでも知りたい時は
# cat /proc/version # cat /proc/version_signature
バージョンも知りたい時は
# cat /etc/issue
最近は ActionScript 3 に移行中、色々と 2 と違う点があって、その度に色々と調べてる。最近さりげなくはまったのがこの flashvars の扱い方。
ActionScript 2 では勝手にスクリプト内の変数に値が代入されたが、 3 では少し違うらしい。
ActionScript 2 で使われていた getURL() 関数は廃止になり、代わりに navigateToURL() を AS3 では使うことになったみたいです。
navigateToURL(new URLRequest("javascript: alert('hoge');"), "_self");
最後の "_self" をつけないとブラウザによっては動作しません。
prototype から jquery に全面的に移行中、どうしてもどっちも使いたいときがある。そんな時に問題になるのは $ を使ったショートタグの扱いだが、以下のようにすればどっちも使える。
var $j = jQuery.noConflict();
// jquery
$j(document).ready(function(){});
$j("#hoge").html("fuga1");
// prototaype
$("hoge").innerHTML = "fuga2"; 以下は同等の値を代入する。
var hoge = document.getElementById("hoge");
var hoge = $("#hoge").get(0);
var hoge = $("#hoge")[0];
PDF などを Web サーバに配置して配布した際に、ブラウザのプラグインで PDF を開いてしまい、ダウンロードダイアログを表示させる事ができない事がある。
色々やり方はあるが、こんなことに一々 php などのスクリプトを書くのもバカらしいので、 apache の headers module であっさりとやってしまう方法のメモ。
とりあえず環境は apache2 系。
引き続き ActionScript 3 関連ですが、これは 2 と大分異なり、 2 の時は XML オブジェクトの load() を呼んだりしてたけど、 3 ではこの手のロード関連は、 Loader/URLLoader に集約する感じになっているんじゃないかと思う。
このブログでは SQLite を使ってるんだけど、先ほどサーバ以降後に始めてブログを更新しようとしたら、表題のエラーが出てできない。データファイルのパーミッションを確認しても 777 だし、そもそも読み込みはできてる。
調べてみると SQLite は更新時に dbfilename-journal というファイルを一時的に作成するらしく、ディレクトリの書き込み権限がないと更新できないらしい。
もう少し親切なエラーメッセージならなー、と思った。
Apache で SSL のテストをする際に certificate を作成する方法をいつも探しているのでメモ。
とりあえず openssl だけ yum とか apt-get でインストールしておく。
Slicehost で VPS を借りて ubuntu を使い始めました。とりあえず色々と設定中で、 ssh で protocol 1 を有効にしたら
Disabling protocol version 1. Could not load host key
と言われたので、
# ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
とホストキーを作成し、
# vi /etc/ssh/sshd_config
# HostKeys for protocol version 1 HostKey /etc/ssh/ssh_host_key
を追加。
Linux コマンドに chattr コマンドという chmod とかよりちょっと細かめにファイルのパーミッションを設定できるコマンドが存在知ることを今日知ったのでメモ。
きっかけは以下のコマンド結果。
[root@latte ~]# id uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) [root@latte ~]# chmod 755 /usr/bin/wget chmod: changing permissions of `/usr/bin/wget': Operation not permitted
root が削除できない??
これは chattr +i で root すら削除できないように設定されていたためらしい。 cpanel のセットアップスクリプトにこの手のものが含まれてる事があるっぽい。
解決するには +i したものを -i する。
# chattr -i /usr/bin/wget
先のポストに引き続き、 IIS x PHP 絡みで、 Zend Framwork を IIS 上の PHP で動かす時のメモ。特に rewrite モジュールが apache のようにはいかないので、それについて。
とりあえず今回の環境は以下の通り
IIS6 上で php が動作してる場合に、 php.ini の変更を IIS の再起動無しで反映させるには、アプリケーションプールをリサイクルすればいいらしい。
IIS Manager を開き、ツリービューのホスト配下の [Application Pools](アプリケーションプール?) を開き、 DefaultAppPool (デフォルトアプリケーションプール?)を右クリックして Recycle (リサイクル?)を実行する。
PHP の is_null() だとなんだのやったついでに SQL の NULL 比較についても書いておく。
よく論理削除を制御するためのカラムを作って、 0 か 1 で削除されてるかの判断したりするけど、初期値で NULL がセットされちゃったりして deleted = 0 も deleted = 1 とかやっても条件がマッチしなかったりする。
これは NULL を判別するには deleted IS NULL か deleted IS NOT NULL にしないと駄目だから。
でもじゃあ
deleted = 0 OR deleted IS NULL
とかはちょっとかっこ悪いので、 IFNULL() 関数なんかを使って
IFNULL(deleted,0) = 0
とやると、中々見た目がいい。
今回は PHP を理解する中でもっとも難しいとされている isset() 関数や is_null() 関数や、false や NULL に対する == や === 演算子の結果についてまとめてみた。
何が難しいかって別に分かれば難しくないんだけど、はっきり言ってややこしすぎる。
俺はこの PHP の実装があまり好きじゃない。
でもとにかくこれは理解しておかないと、後々よく分からないバグではまったりするので一応まとめてみた。
Zend Framework には Zend_Controller_Router_Route っていうのがあり、これで URL のパスの制御ができる。
例えば、 enjoitech.jp/help っていう URL を実装したい時に、 Zend の標準の設定では /help は helpController の indexAction に通じるわけだけど、これを Router でうまい事変更してやれる。
ここの例では staticController っていう static なコンテンツを全部管理するコントローラーを作っておいて、そこに helpAction っていうアクションをつくり、/help をそこに通じるようルーティングする方法を説明する。
MySQL は CSV をインポートしたりエクスポートしたりできる。またバージョン 5.0 からはそのままデータテーブルとして扱ったりすることができるらしいんだけど、 CentOS-4.4 の MySQL5 では configured されてないっぽい。その内されたら試す。
SELECT * FROM table_name INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',';
LOAD DATA INFILE 'data.txt' INTO TABLE table_name FIELDS TERMINATED BY ',';
INTO の前に REPLACE とか IGNORE とかをつけると、重複キーが見つかった場合のアクションを指定できる。
ゼブラ柄、ストライプ柄のテーブルを描写します。cycle 関数を使うと便利。
<table>
{foreach from=$hoges name=hoge item=h}
<tr style="background-color: {cycle values="#ccc, #fff"};">
<td>{$h.name}</td>
<td>{$h.value}</td>
</tr>
{/foreach}
</table> mod_rewrite を使って特定の IP のみアクセスさせる、もしくはアクセスさせないようにするには以下のようにする。
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$ [OR]
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.2$
RewriteCond %{REQUEST_URI} !^error\.html
RewriteRule .* error.html
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.1$
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.2$
RewriteCond %{REQUEST_URI} !^error\.html
RewriteRule .* error.html
久しぶりに最近ネットセキュリティについて触れることが多くなり、 iptables だの chkrootkit だの snort だの tripwire だの nessus だのと色々いじってる。しかも結構楽しい。
今後のブログネタはしばらくこの線で行こうかな。
その第一弾ってことで mod_security のインストールから設定までのメモ。
modsecurity はフリーの Web アプリケーションファイアーウォールで、 Apache のモジュールとしてインストールする。
Apache のリバースプロクシにインストールしてもいいし、 Web サーバと共存させて動作させてもいいっぽい。
とりあえず今回は Web サーバと共存の形で CentOS 4 にパッケージでインストールした。あとで CentOS 5 にもソースからインストールする予定。
環境
毎回調べてる気がしたので、メモ。
Proftpd の認証に時間がかかる場合、以下の二行を proftpd.conf に追加。
UseReverseDNS off IdentLookups off
最近 Safari の Windows バージョンが出て、ものすごくいかすんだけど、なんか知らないけど、言語が強制的に日本語にされてしまい、それを変える方法がメニューには見当たらない。
ネットを探したらやり方がのっていたのでメモ。
Safari のバージョンは 3.1 です。
Salesfoce のオブジェクト View ページは、デフォルトでアイテムを選択するチェックボックスは付いているものの、それに対するアクションが全くない。選択したアイテムを全削除したかったのにそれすらできない。
これを実現するには Custom button を作成して、 JavaScript で処理しないと駄目らしい。
とりあえず、初めの一歩という事でメモ。
環境は以下の通り。
Salsforce 8 Enterprise
ajax toolkit 11.1
vsftpd でドットファイルを表示させるには、 /etc/vsftpd/vsftpd.conf で force_dot_file を有効にすればいい。
例は CentOS-5.1 。
# vi /etc/vsftpd/vsftpd.conf
force_dot_file=YES
PHPでアップローダーを作るときに、プログレスバーをどうにか実装できるか調べたら、どうやらできるっぽかったので試してみた。
ちなみにできると言っても制約がいくつかあるみたい。まず第一に、 PHP 単体ではファイルのアップロード状況を把握したりすることはできない。そのため PECL APC エクステンションをインストールする必要がある。
また PHP のバージョンは 5.2 以上。 PECL APC エクステンションのバージョンは 3.0.13 以上。
そのため、うちの CentOS5 も FC6 もパッケージでは対応できなかった。
環境は以下の通り。
php-5.2.5
PECL APC-3.0.16
※追記
実はこの APC はスレッドセーフじゃないらしく、一つのアップロードが完了する前に次のアップロードが開始されると、現在進行中のキャッシュがクリアされるらしいので注意。
<asp:TextBox> コントロールは動的に <input> と id 属性を生成してしまうため、 <label> の for 属性には静的な値は指定できない。
これに対応するにはやり方は二つ。
<asp:Label ID="lblName" AssociatedControlID="tbName">Label name</asp:Label> <asp:TextBox ID="tbName" runat="server"></asp:TextBox>
<label for="<%=tbName.ClientID %>">Label name</label> <asp:TextBox ID="tbName" runat="server"></asp:TextBox>
PHPでファイルアップロードのプログレスバーを実装するにはに関連して、 Ajax を使ってファイルアップロードを実装してみた。
今までは Ajax 関連は prototype.js を使っていたんだけど、 multipart なデータの post に対応していないので、パッチを当てたりしないと実装できないらしい。
そんな面倒くさいことはしたくないので、ちょっと探していたら YUI(The Yahoo! User Interface Library) は対応しているっぽいのでそれを使ってみた時のメモ。
YUI は何気に cool だ。