かなりお世話になっている WordPress ですが、昨日 9 歳のお誕生日だったみたいですね!
2003 年 5 月 27 日の記事です。
http://wordpress.org/news/2003/05/wordpress-now-available/
Happy birthday WordPress !
かなりお世話になっている WordPress ですが、昨日 9 歳のお誕生日だったみたいですね!
2003 年 5 月 27 日の記事です。
http://wordpress.org/news/2003/05/wordpress-now-available/
Happy birthday WordPress !
SQL Server の日付フィールドを php で select して
MySQL へ insert する処理を行ったら
日付が 00-00-00 00:00:00 になってしまった ❗
どうも select するときにフォーマットを指定する必要があったようです。
SELECT CONVERT(VARCHAR, DATE, 120) FROM hogetable; |
めんどいですねー
あるお客様のサーバで httpd のログローテーションに失敗していました 😥
logrotate が access_log を olddir/access_log.1 に move してくれる
のですが、httpd が olddir/access_log.1 にログを書き込み続けてしまう
現象です。
本来は新しく作成された access_log にログを書きこんで欲しいのです。
調べたところ、同じ httpd に対する logrotate の設定ファイルが 3 つありました。
/etc/logrotate.d/httpd /etc/logrotate.d/httpd1 /etc/logrotate.d/httpd2 |
それぞれ postrotate で SIGHUP を httpd に送っているのですが、
httpd1, httpd2 の SIGHUP を httpd が受信していないのが原因っぽいです。
多分 3 つのローテーションが一瞬で行われるので、一瞬の間に
3 回 SIGHUP が httpd に対して送られます。
しかし、httpd は立て続けにシグナルを受信できないようで、
最初の SIGHUP を受信後、httpd1, httpd2 の
SIGHUP は無視されているっぽいです。
実際に以下のようにやって httpd のログを見てみると最初の
シグナルしか受信していないのがわかります。
kill -HUP httpd_pid; kill -HUP httpd_pid; kill -HUP httpd_pid |
そして、間に sleep 1 をいれて試してみたところ 3 回シグナルを受信しました。
そんな訳で、postrotate に sleep 1 を入れて様子見中です。。。
Google App Engine で静的ファイルを表示してみました 🙂
携帯のメールアドレスを使ってアカウントの認証を行います。Send をクリックすると指定した携帯のメールアドレスに verification number が届きます。
携帯に届いた番号を入力して Send をクリック。
続いて Application の作成を行います。
ここで指定する Application Identifier は一度登録すると変更できないみたいです。
Application Title は後から変更可能。
GAE では ftp や scp でファイルをアップロードする事ができません。
python で動作するツールを使ってアップロードします。
その為に python 2.X が必要になりますので、ダウンロードします。
http://www.python.org/download/releases/2.7.2/ から
Windows X86-64 MSI Installer (2.7.2) [1] をダウンロードしました。
インストールはダウンロードしたファイルをダブルクリックして Next で進んでいくだけです。
http://code.google.com/intl/ja/appengine/downloads.htmlからWindows用をダウンロードしました。
こちらもインストールはダウンロードしたファイルをダブルクリックして Next で進んでいくだけです。
最初に python 2.5.X をダウンロードするように指示が出ますが、先ほど既に 2.7.2 をダウンロード済みですので、無視して Next しました。
最初に Google App Engine Launcher を起動すると Warning が出ました ❗
どうも python が見つからないのが原因みたいです。
Google App Engine Launcher の Edit>Preferences…で Python Path を指定するれば解決します。
Google App Engine Launcher の File>Create New Application… でアプリケーションを作成します。
Application Name に yonageya を指定して、プロジェクトを保存するディレクトリを Parent Directory に指定して、Port はデフォルトのままで Create をクリックします。
すると、Parent Directory の中に yonageya という名前のフォルダが作成され、その中に以下のファイルが作成されます。
app.yaml index.yaml main.py |
Google App Engine Launcher の Edit をクリックして app.yaml を編集します。
(エディタが起動して app.yaml が編集できます)
app.yaml の先頭は Application Identifier の定義や version の情報が記述されているのが分かります。
Google App Engine にはバージョン管理を行う機能があるみたいなので、その為の記述なのでは? 😎
handlers セクションではスタイルシート用の設定、- url: /.* というのはスクリプトハンドラというみたいで、指定した URL パターンとマッチするファイルがあったら、ファイルの拡張子の MIME タイプを使用して処理をしてくれるみたいです。
詳しくはPython アップリケーションの設定で説明されています。
表示する HTML を yonageya/index.html に作成します。
GAE testGAE test. |
それと、スタイルシート yonageya/stylesheets/yng.css を作成します。
body { font-family: Verdana, Helvetica, sans-serif; background-color: #DDDDDD; } |
作成した index.html を表示できるかテストしてみます。
Google App Engine Launcher の Run をクリックします。
そして、ブラウザで http://localhost:8080/ へアクセスすると作成した HTML が表示されます。
表示されなければ Google App Engine Launcher の Logs をクリックしてエラーメッセージを確認すると解決できるかもしれません
実際に GAE にアップロードします。
Google App Engine Launcher の Deploy をクリックします。
すると、メールアドレスとパスワードを聞かれるので、それぞれ入力して OK をクリックします。
ログが表示されますので、エラーが無ければOKです。
ブラウザで http://yonageya.appspot.com/ へアクセスすると Deploy した HTML が表示されます ❗
お名前.comでセカンダリ DNS の無料サービスがあったなんて知りませんでした 😮
当然ですが、お名前.comで登録したドメインしか指定できませんが 😎
さっそく利用開始しました
DNS サーバに bind を利用している事がバレますが。。。
named.conf で以下のように zone 転送を許可します。
※210.172.129.81 はセカンダリネームサーバの IP Address
zone "yonageya.com" IN { type master; file "yonageya.com.zone"; allow-update {none;}; allow-transfer { 210.172.129.81; }; }; |
zone ファイルにセカンダリネームサーバを追加して、serial を上げます。
$TTL 3600 @ IN SOA ns1.yonageya.com. webmaster.yonageya.com. ( 2011103101; Serial 1800; Refresh 900; Retry 86400; Expire 900); Minimum ; IN NS ns1.yonageya.com. IN NS 2nd.dnsv.jp. 以下省略 |
IP フィルタなどで通信を制限している場合には、セカンダリ DNS サーバから tcp の 53 番ポートへのアクセスを許可します。
ウチの環境ではルータで IP フィルタの設定と NAT の設定を追加しました。
そして、named を再起動します。
OS が CentOS なので、以下のように実行します。
root# service named restart |
以下のようなログが記録されていれば OK です
※一部ログを省略しています
Oct 31 12:37:44 ns1 named: named startup succeeded Oct 31 12:37:44 ns1 named[29132]: running Oct 31 12:37:44 ns1 named[29132]: zone yonageya.com/IN: sending notifies (serial 2011103101) Oct 31 12:41:17 ns1 named[29132]: client 210.172.129.81#49506: transfer of 'yonageya.com/IN': AXFR started |
新しくコーヒーマシンを買い換えしました 🙂
一応全自動なので、豆と水を入れておけばスイッチを押すだけでコーヒーができます 😎
Delongi 社の ESAM1000SJ という製品です。
ネットの評判では音が大きくてうるさいという書き込みが多いですが、思ったより静かで私は気になりません 🙂
色々とコーヒーライフを楽しみたいと思います!
一週間前の日曜日に箱根で陶芸体験を行いました 🙂
あまりネットに情報がありませんが、「陶芸工房早雲箱根焼」という陶芸工房みたいです。
てびねりと電動ろくろが選べて、電動ろくろに挑戦しました。
最初先生がセッティングしてくれるので、素人でも簡単に作る事ができ、
すごく楽しかったです。
多分この最初のセッティングが難しいのではないでしょうか?
そして、できあがったのがこれです。
2~3か月後に焼きあがったら郵送してくれるそうです。
楽しみだな~ 🙂
Google Maps API Version3 の infoWindow についてです。
という要件があり、色々やってみたところなんとかできました。
忘れないようにメモです
まずは地図の表示です。
...色々... <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> </head> <body> <div id="gmap" style="width:500px; height:500px;"></div> <script type="text/javascript"> var latlng = new google.maps.LatLng(35.710126,139.810665); var myOptions = { zoom: 10, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("gmap"), myOptions); つづく... |
次にマーカーと各マーカー用の infoWindow の指定です。
...つづき var infoWindow; var content; //marker1 var myLatLng1 = new google.maps.LatLng(35.810126, 139.610665); var marker1 = new google.maps.Marker({ position: myLatLng1, map: map }); google.maps.event.addListener(marker1, 'click', function() { if (infoWindow) infoWindow.close(); infoWindow = new google.maps.InfoWindow({ content: '<div style="width:200px;height:100px;"><p>マーカー1</p></div>' }) infoWindow.open(map, marker1); }); //marker2 var myLatLng2 = new google.maps.LatLng(35.710126, 139.610665); var marker2 = new google.maps.Marker({ position: myLatLng2, map: map }); google.maps.event.addListener(marker2, 'click', function() { if (infoWindow) infoWindow.close(); infoWindow = new google.maps.InfoWindow({ content: '<div style="width:200px;height:100px;"><p>マーカー2</p></div>' }) infoWindow.open(map, marker2); }); //marker3 var myLatLng3 = new google.maps.LatLng(35.710126, 139.810665); var marker3 = new google.maps.Marker({ position: myLatLng3, map: map }); google.maps.event.addListener(marker3, 'click', function() { if (infoWindow) infoWindow.close(); infoWindow = new google.maps.InfoWindow({ content: '<div style="width:200px;height:100px;"><p>マーカー3</p></div>' }) infoWindow.open(map, marker3); }); </script> |
vsftpd でファイルサイズに制限をかける方法です。
元々 vsftpd にはファイルサイズに制限をかける機能はありませんので、
無理矢理制限をかける方法です。
自己責任でお願いいたします。
方法は簡単で、vsftpd を起動するシェルスクリプトで ulimit するだけです
CentOS など linux の場合、/etc/rc.d/init.d/vsftpd がシェルスクリプトになりますので、
先頭の方で ulimit -f 制限するサイズ(キロバイト単位) を追加します。
~省略~ ulimit -f 20 #← 20 キロバイトに制限 start() { # Start daemons. ~省略~ |
そして vsftpd を再起動します。
root# service vsftpd restart |
実際に制限を超えたサイズのファイルをアップロードしてみたところ
以下のエラーとなりました。
500 OOPS: child died
たとえば 10KB の制限をかけて、1MB のファイルをアップロードすると、
10KB の壊れたファイルが作成されます
あまり良い方法ではありませんが、どうしても他に手段が無い 😥
という場合には使える手かもしれません 😎