2009年8月28日金曜日

PHPで定数を動的に指定

スズキです。

こちらで詳しく紹介されていますが、
http://www.res-system.com/weblog/item/607

下記のように、constant関数で可能です。

--------【PHP】--------
define("DAO_PASS_ALPHA", "alpha");
define("DAO_PASS_BETA" , "beta");

print(constant("DAO_PASS" . "_" . "ALPHA") . "\n");
print(constant("DAO_PASS" . "_" . "BETA") . "\n");
--------

久しぶりに、Dao.php、アップデートしよう。
(データ移行スクリプト作成のために…)

--
http://www.suz-lab.com

MySQLのユーザー追加/削除

スズキです。

以前、GRANT文でのユーザー追加をメモしましたが、
http://blog.suz-lab.com/2007/04/mysql.html

今回、CREATE文のほうです。

追加/削除はこんな感じです。

> CREATE USER suz IDENTIFIED BY 'suz!23';
> DROP USER suz;

※上記は'suz'@'%'扱いです。

localhostからの接続用のものはこんな感じです。

> CREATE USER 'suz'@'localhost' IDENTIFIED BY 'suz!23';
> DROP USER 'suz'@'localhost';

データ移行、今回の山だね…

--
http://www.suz-lab.com

FFmpegとフレームレート

スズキです。

下記のようにイメージシーケンスをムービーにしているわけですが、
生成ムービーの尺(長さ)をデフォルトのものから変えたいというリクエストがあり、
フレームレートを調整することで実現しました。

# ls
test00.jpg test01.jpg test02.jpg test03.jpg test04.jpg
# ffmpeg -i test%02d.jpg test.mov

フレームレートは、"-r"オプションで指定できます。
なので、下記のようにすると、1秒当たり、1枚の画像が表示されるので、
5秒のムービーが出来上がります。

# ffmpeg -r 1 -i test%02d.jpg test.mov

全体で1秒のムービーが欲しければ、下記のように指定すれば、
1秒当たり、5枚の画像が表示されるので、全体で1秒のムービーになります。

# ffmpeg -r 5 -i test%02d.jpg test.mov

動画関係は、イメージシーケンスまで落として、ImageMagickで加工して、
FFmpegで再び動画すのが、僕の得意技になってきました…

--
http://www.suz-lab.com

2009年8月27日木曜日

Sumatra PDF Portable 0.9.4

スズキです。

ポータブルPDFビューアー、また使い始めました。
現在のバージョンは、0.9.4です。
http://portableapps.com/apps/office/sumatra_pdf_portable

これも、ソフトウェア リリース情報(BBS)に書き込み…
http://jbbs.livedoor.jp/bbs/read.cgi/computer/41921/1247625425/

--
http://www.suz-lab.com

クリップボードの履歴を保存(金魚鉢)

スズキです。

近頃、コピペを多用するドキュメント制作の仕事があり、
クリップボードにコピーしたものの履歴を保存でき、
さらにその履歴が検索できたらいいなー、と思いながら探していたら、
いいものがありました。

【金魚鉢】
http://molmott.hp.infoseek.co.jp/hati/hati.html

レジストリを使わないので、ポータブルアプリケーションとしても利用できます。

ソフトウェア リリース情報(BBS)にも書き込んでおこう。
http://jbbs.livedoor.jp/bbs/read.cgi/computer/41921/1247625425/

--
http://www.suz-lab.com

2009年8月25日火曜日

Velocityのループでカンマ区切り

スズキです。

今、いろいろあって、Velocityを使っており、そのTipsとして
データをカンマ区切りで並べる方法です。

当然、最後のデータの後ろにはカンマは入って欲しくないので、
以下のようになります。

--------【VM】-------
#foreach(${item} in ${list})
  ${item}#if($velocityHasNext),#end
#end
--------

予約語の$velocityHasNextを上手に使いましょうってことです。

とりあえず、JiemamyのXMLモデルからの自動仕様書生成(HTML)ができたぞ!
(もっとCSS凝りたいけど…)

--
http://www.suz-lab.com

php.iniでupload_max_filesizeを増やしても…

スズキです。

PHPでアップロードできるファイルのサイズを増やすため、
"upload_max_filesize"のパラメータを増やしたのですが、効果がありません。

いろいろ調べてみると、パラメータの値が下記のようになってないといけないようで、

memory_limit > post_max_size > upload_max_filesize

案の定、

post_max_size < upload_max_filesize

となっていました。なので、

post_max_size > upload_max_filesize

と、再度調整したら、無事、容量の大きなファイルもアップロードできるようになりました。

PHPは、結構、片手間でやってきたけど、結構、詳しくなったなー。

--
http://www.suz-lab.com

2009年8月24日月曜日

PDOでシングルクオートなどがバックスラッシュでエスケープされる

スズキです。

本番環境のPDOまわりで下記のような問題が発生しました。
(開発環境では起きていない…)

> オンの場合、全ての' (シングルクオート), " (ダブルクオート), \ (バックスラッシュ)
> およびNULL 文字がバックスラッシュで自動的にエスケープされます。
> これは、addslashes() の機能と同じです。
(http://d.hatena.ne.jp/hoshikuzu/20060211)

解決方法は、"php.ini"の"magic_quotes_gpc"を"On"から"Off"にということで…

PHPでの問題はGoogleで全部解決するような気がする…

--
http://www.suz-lab.com

2009年8月20日木曜日

rsyncやscpをパスワード無しで利用

スズキです。

SSHのお話です。

まず、下記のようにパスワード無しで利用したいユーザーで鍵を作ります。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/suzuki/.ssh/id_rsa):
Created directory '/home/suzuki/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/suzuki/.ssh/id_rsa.
Your public key has been saved in /home/suzuki/.ssh/id_rsa.pub.
The key fingerprint is:
31:fa:71:70:73:88:a3:83:42:2b:62:a0:d3:1f:4a:80 suzuki@suz-lab.com

そして、作成されたid_rsa.pubをリモートサーバに転送します。
(/tmp/id_rsa.pubに転送されたとして)

最後にリモートサーバのパスワード無しで利用されたいユーザーのauthorized_keysに
下記のようにid_rsa.pubを追加します。

# cat /tmp/id_rsa.pub >> authorized_keys
(authorized_keysは$HOME/.sshにあります)

これで、サーバ設定側の山は越えたか!?

--
http://www.suz-lab.com

あるユーザーであるコマンドをパスワード無しで実行(sudo)

スズキです。

PHPからsuz-labユーザー権限で、rsyncを実行したい
ってのが、目的です。

まず、下記のようにsudoの設定です。

# visudo
--------
apache ALL=(suz-lab) NOPASSWD:/usr/bin/rsync
--------

そして、PHP内(apacheユーザー)で、下記コマンドを実行です。

# sudo -u suz-lab /usr/bin/rsync -h

次は、rsyncをパスワード無しで実効できるように...

--
http://www.suz-lab.com

2009年8月18日火曜日

"GAE/J & T2"でファイルアップロード

スズキです。

サンプル見ながら、一番シンプルな形で作ってみました。
http://www.suz-lab.com/jiemamy/

ポイントとなる"web.xml"、"HTML"、"Java"は下記となります。

--------【web.xml】--------
<filter>
  <filter-name>uploadFilter</filter-name>
  <filter-class>org.t2framework.t2.filter.MultiPartRequestFilter</filter-class>
  <init-param>
    <param-name>uploadMaxSize</param-name>
    <param-value>100m</param-value>
  </init-param>
  <init-param>
    <param-name>uploadMaxFileSize</param-name>
    <param-value>100m</param-value>
  </init-param>
  <init-param>
    <param-name>uploadThresholdSize</param-name>
    <param-value>100k</param-value>
  </init-param>
  <init-param>
    <param-name>t2.mutipart.handler</param-name>
    <param-value>org.t2framework.t2.spi.impl.StreamMultipartRequestHandlerImpl</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>uploadFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-apps/war/WEB-INF/web.xml

--------【HTML】--------
<form action="${t:url('/upload')}" method="post" enctype="multipart/form-data">
  <input type="file" name="file"/><br />
  <input type="submit" name="upload" value="upload"/>
  <span>${fileUploadResult}</span><br />
</form>
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-apps/war/jiemamy/index.jsp

--------【JAVA】--------
@Page("upload")
public class UploadPage {

  @Default
  public Navigation index() {
    return Forward.to("/jiemamy/index.jsp");
  }

  @POST
  @ActionParam
  public Navigation upload(UploadFile file, HttpServletRequest request) {
    request.setAttribute("fileUploadResult", file.getName() + " is uploaded.");
      return Forward.to("/jiemamy/index.jsp");
  }

}
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-apps/src/suz/lab/apps/page/UploadPage.java

次は、アップロードしたファイルを、データストアに保存できるようにしよう。

--
http://www.suz-lab.com

2009年8月14日金曜日

リポジトリを指定してインストール(yum)

スズキです。

追加リポジトリを"enable"にして"yum"を利用していると、
PHPが5.3.0になったりしてしまうので...

たとえば、

ImageMagickは標準のリポジトリを対象にインストール
# yum install ImageMagick

FFmpegはrpmforgeも対象にしてインストール
# yum --enablerepo=rpmforge install ffmpeg

といった具合です。

本番作業は緊張するなー...

--
http://www.suz-lab.com

Jiemamyプログラミングの"pom.xml"

スズキです。

前述したJiemamyプログラミングの依存ライブラリを
http://blog.suz-lab.com/2009/08/jiemamy.html
Mavenで管理するには、下記のように"pom.xml"を書けばOKです。

--------【pom.xml】--------
<pluginRepositories>
  <pluginRepository>
    <id>jiemamy</id>
    <name>Jiemamy</name>
    <url>http://maven.jiemamy.org/release</url>
  </pluginRepository>
</pluginRepositories>
<dependencies>
  <dependency>
    <groupId>org.jiemamy</groupId>
    <artifactId>jiemamy-core</artifactId>
    <version>0.2.0</version>
  </dependency>
  <dependency>
    <groupId>org.jiemamy</groupId>
    <artifactId>jiemamy-dialect-mysql</artifactId>
    <version>0.2.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.6.2</version>
  </dependency>
</dependencies>
--------

HTMLの仕様書はVelocityを使って作ろうと思っているので、
依存ライブラリにはVelocityも入れています。

次はVelocityの復習をしないと…

--
http://www.suz-lab.com

Jiemamyプログラミング

スズキです。

Jiemamyのモデル(database.jer)からDBの仕様書(html)を生成したいと思い、
ちょっとプログラミングしてみました。

--------【JAVA】--------
Jiemamy jiemamy = Jiemamy.newInstance();
// ファイルを読み込みモデルの作成
FileInputStream inputStream = new FileInputStream("database.jer");
RootModel rootModel = jiemamy.getSerializer().deserialize(inputStream);
// テーブルリストの取得
Collection<TableModel> tables = rootModel.findEntities(TableModel.class);
for(TableModel table : tables) {
  System.out.println(table.getLogicalName() + " " + table.getName());
}
--------

Jiemamyで作成したテーブルの論理名と物理名の一覧が表示されます。

よく考えたら、jQueryでHTML作るのもありかも!

--
http://www.suz-lab.com

2009年8月13日木曜日

FFmpegでイメージシーケンスから動画を生成

スズキです。

こちらに詳しい説明がありますが、
http://opensourceaki.blogspot.com/2007/10/ffmpeg_19.html

こんな感じでできます。
# ffmpeg -i test%03d.jpg test.mov

山は越えたかな!?

--
http://www.suz-lab.com

ImageMagickで画像の合成

スズキです。

ImageMagickで写真(back.jpg)と背景透過画像(golf.png)との合成方法です。

# convert back.jpg golf.png -composite out.png

こちらに詳しく書かれています。
http://gazouiriro.seesaa.net/article/98425863.html

次は、FFmpegで合成画像のムービー化だ!

--
http://www.suz-lab.com

2009年8月10日月曜日

PHPとImageMagickとFFmpeg

スズキです。

CentOS上にPHPとImageMagickとFFmpegが利用できる環境を作る必要ができたのですが、
下記コマンドで、簡単に必要なものがインストールできてしまいました。

# yum install php-pecl-imagick
# yum install ffmpeg

※yumのリポジトリにepel,remi,rpmforgeは登録済みです。

PHPは5.3.0がインストールされた…

--
http://www.suz-lab.com

2009年8月9日日曜日

vsftpdのPassiveモードで利用するポートの指定と確認

スズキです。

FTP(vsftpd)に関してFirewallの設定をするときに、
http://vsftpd.beasts.org/
Passiveモードで利用するポートを特定できる状態にしないといけないと思い、
その設定・確認の方法です。

まずは、vsftpdの設定です。下記のように設定ファイルに
利用するポートの最小値と最大値が指定できます。

--------【vsftpd.conf】--------
...
pasv_min_port=50000
pasv_max_port=50030
--------

そしてvsftpdを再起動して確認です。

FTPサーバに対してPASVコマンドを実行すると、下記のようなレスポンスが返ってきます。

227 Entering Passive Mode (10,102,1,92,195,106)

このレスポンスの最後の二つの数字がPassiveモードで利用するポートをあらわし、
実際には下記のような計算でポート番号がわかります。

195 * 256 + 106 = 50026

無事、上記で設定した範囲内のポート番号になっていることがわかります。

近頃、FTPに詳しくなったなー...

--
http://www.suz-lab.com

Webalizerの導入と利用

スズキです。

懐かしい作業シリーズ、最後はアクセス解析のWebalizerです。
http://www.mrunix.net/webalizer/

まずは準備です。
# yum install libpng-devel
# yum install gd-devel

次にWebalizerのインストールです。
# wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.21-02-src.tgz
# cd webalizer-2.21-02
# ./configure --with-language=japanese
# make
# make install

下記のように、Apacheの設定もしておきます。
--------【httpd.conf】-------
Alias /webalizer/ /home/suz-lab/webalizer/
<Location "/webalizer/">
  AllowOverride None
  Options None
  Order deny,allow
  Deny from all
  Allow from all
  AddDefaultCharset EUC-JP
</Location>
--------
※レポートはEUC-JPなので、念のためAddDefaultCharsetで指定しています。

最後に下記コマンドでWebalizerを実行します。
# webalizer -o /home/suz-lab/webalizer /home/suz-lab/log/access_log

懐かしいなー。

--
http://www.suz-lab.com

ApacheでCGIの設定

スズキです。

CGI、久しぶりです。

設定の仕方、すっかり忘れていますたが、有名なネタなので、
Google使えば、一発でした。

まずは、httpd.confの設定。

--------【httpd.conf】--------
ScriptAlias /cgi-bin/ /home/suz-lab/cgi-bin/
--------

そして、下記のテストスクリプトで実験。

--------【test.pl】--------
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Hello, world!\n";
--------

懐かしい作業も、あと一つ…

--
http://www.suz-lab.com

2009年8月7日金曜日

Apacheで"mod_proxy"を用いたリバースプロキシー

スズキです。

"/"にアクセスしたら、"http://www.suz-lab.com/"の内容を表示するようにするには、
下記のように設定します。

--------【httpd.conf】--------
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
...
<Location "/">
  AllowOverride None
  Options None
  Order deny,allow
  Deny from all
  Allow from all
  ProxyPass http://www.suz-lab.com/
  ProxyPassReverse http://www.suz-lab.com/
</Location>
--------

名前の解決は、hostsに書いておくと、幸せになれるかもしれません。

--------【hosts】--------
xxx.xxx.xxx.xxx www.suz-lab.com
--------

次は、久しぶりの、CGI設定...

--
http://www.suz-lab.com

MySQLのユーザー追加(スーパーユーザーっぽく)

スズキです。

昔、メモ的な記事で、簡単なMySQLでのユーザー追加を書きましたが、
http://blog.suz-lab.com/2007/04/mysql.html
今回は、スーパーユーザーっぽい、ユーザーの場合です。

まあ、下記のようにユーザーを作成します。
GRANT ALL PRIVILEGES ON *.* TO suz@"%" IDENTIFIED BY 'suz!23' WITH GRANT OPTION;

とりあえず、このユーザー作って、phpMyAdminにログインして、
他のユーザーを作ってく感じかな?

--
http://www.suz-lab.com

ApacheでLocationの最初の設定

スズキです。

自分メモです。

--------【httpd.conf】--------
<Location "/">
  AllowOverride None
  Options None
  Order deny,allow
  Deny from all
  Allow from all
</Location>
--------

ここから、必要なものを追加していく感じでしょうか?

今週、ブログ、全然書いてないなー...

--
http://www.suz-lab.com