きぬろぐ
携快電話でメール本文が文字化け
投稿者: kinusati, カテゴリー: Windows
今まで古い携快電話を使っていたのですが、このたびWindows7に対応した携快電話にバージョンアップしました。
(バージョンアップしないと使えませんと宣言された・・商売うまいな、ソースネクスト)
で、早速バージョンアップして携帯からメールを吸い出してみると、ほぼすべてのメール本文が文字化け!!
99%のメールが文字化けなんだが、1%のメールが文字化けしていないから意味不明。あとサブジェクトやFromは文字化けしないんだよねー。
DPE年賀上への宛名印刷
投稿者: kinusati, カテゴリー: Windows
カメラのキタムラで写真付き年賀状印刷をお願いして、綺麗な年賀上が届きました。
さて、これを印刷しようとHP PhotoSmart C7180 All Oneで印刷しようとすると、紙詰まりで印刷できません・・・
「紙が堅くて分厚いから印刷できねー!!」
もう一台あるEPSONの古いプリンタ(PM-G730)を利用したら何とか印刷ができました。まとめると、家のプリンタではDPE印刷の物は印刷しづらいという状況のようだ。
- HPのプリンタは下のトレイから回す形式なので硬くて分厚い紙は無理
- EPSONのPM-G730は上のトレイから紙を落とす方式だから何とか印刷可能(でもよく詰まる)
年賀上自体は非常に綺麗で大満足だったのですが、こんな落とし穴があるとは。宛名シールを用意することが必要ですね。
Windows7でのファイルロック対策ソフト
投稿者: kinusati, カテゴリー: Windows
Windowsでファイル操作を行っていると、ファイルがロックされていて削除できない・移動できない場合があります。ある特定のプロセスがファイルを開いていることが原因なのですが、ファイル操作ができなくなるのは大変ストレスです。
そこで、LockHunterというソフトがあります。Windows7 対応です(x86/64とも)
このソフトを使えばファイルロックがかかっていた場合でもロックを外したりプロセスを終了できたりしますので、ファイル操作のストレスを軽減できる可能性がありますね。
WordPressを2.9.0にバージョンアップしたら、Ktai Style (携帯対応プラグイン)が原因でInternal Server Errorが発生!
投稿者: kinusati, カテゴリー: freebsd
2009/12/19付でWordPress 2.9がリリースされています。
2.9の新機能には以下があるようです。
- 「ゴミ箱」機能
- 投稿サムネイル
- 画像の編集機能
- メディア埋め込みの高機能化
- プラグインからのテーマ変更
- カスタム post_type
- スラッグベースのカテゴリー・タグテンプレート指定
- 他
で、早速バージョンアップしてWordPressのページにあくせすすると、、、Internal Server Errorがでます!!久しぶりに視たよ・・この文字列。
Apacheのエラーログを見てみると以下のログが。
[Tue Dec 22 10:30:47 2009] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error: Call to undefined function ks_header() in /usr/local/document/wordpress/wp-content/plugins/ktai_style/themes/classic/single.php on line 1
携帯対応プラグインのKtai Styleが原因の模様・・・。Ktai Styleの詳細はこちら。
対策
1. プラグインを無理矢理他ディレクトリに移動の上Apacheを再起動
# cd /usr/local/document/wordpress # cd wp-content/plugins/ # mv ktai_style /tmp # apachectl stop # apachectl start
これで一旦表示ができるようになります。
2. 上記実施後、Ktai Styleの最新バージョン(1.8.0)をプラグイン登録
これで修正できました。古いKtai Style(1.7.2)を使っていたのが原因なんでしょうか・・・突き止めていません。
2009/12/29追記
1.8.0でもInternal Server Errorがでたので、1.8.1をインストールして様子見です。1.8.0 => 1.8.1への変更点は以下。「WP Super Cache への対応方法を変更しましたが。これにより、Ktai Style 1.80 において、WP Super Cache と併用したときに発生していた不具合が解消されます (チケット#19919)。」が今回の不具合に関連するんだろうか。。。
- ver 1.81 (2009-12-25)
- 携帯対応ブログの URL として、新たに ドリコムブログ、忍者ブログ(blog.shinobi.jp ドメインのみ) の URL を認識するようにしました。これらのブログは中継ページを出さずに直接リンクします。
- WP Super Cache への対応方法を変更しました。これにより、Ktai Style 1.80 において、WP Super Cache と併用したときに発生していた不具合が解消されます (チケット#19919)。
- サーバーの PHP が 5.1 以降、かつ、タイムゾーンの設定が世界標準時よりもプラス (グリニッジ子午線より東の地域) の場合、WordPress 2.9 において携帯管理機構にログインできないことがある不具合を改善しました。
- Ktai Style 1.80 において、ビジュアルエディタで img 要素の class 属性が消えることがある問題、<!?more?> が挿入できない問題を修正しました。(チケット#19918)
- Ktai Style 1.80 において、携帯の管理パネルからコメント返信ができなかった不具合を修正しました。
- Ktai Style 1.72?1.80 において、コメント投稿で携帯端末情報 (iモードID、EZ番号等) を必須と設定した場合、携帯端末情報が送信されなかったときのエラーが日本語化されていない不具合を修正しました。
- WordPress 2.8 以降において、コメントとトラックバック・ピンバックを混在表示させているとき、コメント種別がローカライズされず [Comment] と表示される不具合を修正しました。
- Classic テーマのコメント表を WordPress 2.7 以降の見た目を WordPress 2.6.5 以前の見た目に似せるようにしました。(従来は Default テーマのコメント表示に似てしまっていました)
- redir.php テンプレートの仕様を変更し、KS_ALWAYS_RELAY_PAGE を true に設定した場合、携帯サイトの URL と PC サイトの URL が違うにかかわらず「訪問先のサイトは同じ URL で携帯表示があります」という表示になる不具合を修正しました。
- Ktai Style 1.80 において、ks_content(), ks_get_content() で文字数指定したとき、「続きを読む…」ではなく単なる […] が出力されるようにした仕様変更をやめて、Ktai Style 1.74 までの挙動に戻しました。(チケット#19917)
- 定数「KS_なんちゃら」の一部を「KTAI_なんちゃら」に変更しました。自作テーマに関するものは KS_ALWAYS_RELAY_PAGE → KTAI_ALWAYS_RELAY_PAGE, KS_ADMIN_MODE → KTAI_ADMIN_MODE のみです。
FreeBSD で submin
投稿者: kinusati, カテゴリー: freebsd
FreeBSD サーバに Subversion の管理UI「submin」を導入しました。
- 公式サイト : http://supermind.nl/submin/
- moongifhtでの紹介 : http://www.moongift.jp/2009/01/submin/
Subversionのレポジトリ・ユーザ・グループ管理にはなかなか便利なWebUIです。コマンドラインでできることばかりですが、一度触ると楽ちんですね。
インストール
以下にインストール方法を書きます。残念ながらこのsubmin, FreeBSD の ports に登録されていないんですよね・・・手でインストールしました。
前提として、python/Apache 2.2/Subversionが必要です。
# portinstall python
次に、Apache 2.2とSubversionが必要です(当然)。連携させるため、MOD_DAV_SVNオプションは有効にしてください。
# portinstall www/apache22 # portinstall subversion
なお、注意点として、pythonからsubversionを利用するモジュール py-subversion を追加インストールする点です。
# postinstall devel/py-subversion
これをインストールしておかないとレポジトリ操作時に以下のエラーが出ますので注意してください。
Error We're very sorry, but an error occured: Failed to import python 'svn' module, please install. Please tell the administrator this error message and what caused it. Technical details (if any):
では、subminのインストール方法です。
まずはソースをダウンロードして展開しましょう。
# wget http://supermind.nl/submin/current/submin-1.2.9.tar.gz # tar xvzfp submin-1.2.9.tar.gz # cd submin-1.2.9
次に、インストール作業を行いましょう。INSTALLドキュメントにはsh bin/install.sh /usr/local と書いているのですが、bin/install.shファイル、ないし・・・いい加減だな。
# python bin/install.py /usr/local # chmod 755 /usr/local/bin/submin-admin
/usr/local/bin/submin-adminはpythonのパスが/usr/bin/pythonになっていて、FreeBSDの/usr/local/bin/pythonになっていないので修正します。
# vi /usr/local/bin/submin-admin 先頭行を修正 #!/usr/local/bin/python
subminの設定ファイル、レポジトリパスを作成します。今回は/usr/local/etc/subminに設定ファイルを作成することにしました。
なおデフォルトでは/etc/subminに設定ファイル、/var/lib/subminにレポジトリファイルを作成します。
# /usr/local/bin/submin-admin create default -e /usr/local/etc/submin --apache-user www
subminのコンフィグとなる/usr/local/etc/submin/default.confにtrac_base_urlオプションを追加しましょう。これはtracを利用していなくても必要です!!
trac_base_url = /trac
上記修正が漏れていると、レポジトリ操作時に以下のエラーが出ます・・・
Error We're very sorry, but an error occured: Missing config option trac_base_url in file /usr/local/etc/submin/default.conf. Please tell the administrator this error message and what caused it. Technical details (if any):
Subversionのレポジトリディレクトリには、Apacheのユーザ(www)でアクセス到達できることを確認しておきましょう。FreeBSDの場合、/var/libがroot:wheelで700なので755に変更しておきました。
chmod 755 /var/lib
subminのコンフィグをApacheに読み込ませましょう。httpd.confに以下を追加しておけば大丈夫です。
Include /usr/local/etc/submin/default-apache-cgi.conf
これで完成です。apacheを再起動後、/subminにアクセスしてください。初期IDはadmin, パスワードはadminです。
hibernate の id generatorについて
投稿者: kinusati, カテゴリー: Java
hibernateを使ってアプリを書いているのですが、主キーの自動採番にアプリで実装するのが面倒くさかったので(かといってDBでシーケンスを使うのもいや)hibernateのgenerator機能を使ってみました。
書き方は簡単。generatorクラスには”uuid”を指定して、hibernateがランダム生成するようにしました。昔はuuid.stringやuuid.hexという定義名だったらしいですが、hibernate 3.0系からuuid.stringの廃止、及びuuid.hex -> uuidに名称変更があった模様です。
uuidの特徴は以下
- 128ビットのUUIDアルゴリズムを利用し、長さが32の文字列IDを生成
- Hibernateによって自動的生成されるので、id値セットが不要
xmlの書き方は以下
<hibernate-mapping> <class name="net.kinusati.hibernate.test" table="testtable" catalog="testdb"> <id name="primaryKey" type="string"> <column name="PRIMARY_KEY" length="32" /> <generator class="uuid" /> </id> </class> </hibernate-mapping>
実際生成された値は”297eea25258866420125886932070006″という文字列でした。
注意点としては、uuidを利用する場合は32バイトのカラム長が必要であること。最初VARCHAR(20)にしていたので、原因判明まで時間がかかりました・・・
ちなみにuuid.stringと指定した場合、以下の例外が出ます・・
org.hibernate.MappingException: could not instantiate id generator at org.hibernate.id.IdentifierGeneratorFactory.create(IdentifierGeneratorFactory.java:98) at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:152) at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:192) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294) at org.hibernate.console.ConsoleConfiguration$3.execute(ConsoleConfiguration.java:492) at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:64) at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:94) at org.hibernate.console.ConsoleConfiguration.buildSessionFactory(ConsoleConfiguration.java:487) at org.hibernate.eclipse.console.workbench.LazySessionFactoryAdapter.getChildren(LazySessionFactoryAdapter.java:43) at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.getChildren(BasicWorkbenchAdapter.java:99) at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.fetchDeferredChildren(BasicWorkbenchAdapter.java:105) at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:234) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) Caused by: org.hibernate.MappingException: could not interpret id generator strategy: uuid.string at org.hibernate.id.IdentifierGeneratorFactory.getIdentifierGeneratorClass(IdentifierGeneratorFactory.java:109) at org.hibernate.id.IdentifierGeneratorFactory.create(IdentifierGeneratorFactory.java:92) ... 12 more !SUBENTRY 2 org.hibernate.eclipse.console 4 150 2009-12-04 08:06:18.760 !MESSAGE org.hibernate.MappingException: could not interpret id generator strategy: uuid.string !STACK 0 org.hibernate.MappingException: could not interpret id generator strategy: uuid.string at org.hibernate.id.IdentifierGeneratorFactory.getIdentifierGeneratorClass(IdentifierGeneratorFactory.java:109) at org.hibernate.id.IdentifierGeneratorFactory.create(IdentifierGeneratorFactory.java:92) at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:152) at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:192) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294) at org.hibernate.console.ConsoleConfiguration$3.execute(ConsoleConfiguration.java:492) at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:64) at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:94) at org.hibernate.console.ConsoleConfiguration.buildSessionFactory(ConsoleConfiguration.java:487) at org.hibernate.eclipse.console.workbench.LazySessionFactoryAdapter.getChildren(LazySessionFactoryAdapter.java:43) at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.getChildren(BasicWorkbenchAdapter.java:99) at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.fetchDeferredChildren(BasicWorkbenchAdapter.java:105) at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:234) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
携帯へのメール着信通知 Mail Messenger
投稿者: kinusati, カテゴリー: コンピュータ
携帯にメールを転送する際にそのまま転送すると本文途中で切れたりするので、From/Subjectだけを送信できるツールがないか調べていたら、ありました。「Mail Messenger」。
これを利用するとFrom/Subjectだけを携帯に転送できそうです。いわゆる着信通知機能ですね。maildropでの着信通知はこのページの記事が参考になりました。
FreeBSD portsnap
投稿者: kinusati, カテゴリー: freebsd
FreeBSDのportsバージョンアップを行う方法としてcvsupを利用してきましたが、最近はportsnapを使うようになっていますね。
portsnapとは以下の特徴を持っています。
- プロトコルには HTTP を使用する
- スナップショットには OpenSSL を用いて電子書名を行う
- スナップショットの配布のために、より洗練されたデルタ圧縮(Binary diff)を使用する
実際利用する場合は以下のコマンドを実行するだけでいいです。
初回実行時
# portsnap fetch # portsnap extract # portsnap update
最新portsとの差分チェック
# portversion -vL= bsdpan-Digest-SHA1-2.11 < [held] needs updating (port has 2.12) bsdpan-IO-Socket-SSL-1.16 < [held] needs updating (port has 1.31)
二回目以後同期に必要なコマンド
# portsnap fetch # portsnap update
使った感想です
- cvsupより差分がわかりやすくて簡単
- 差分チェック後の転送も早い
今後はこれを使っていくようにします。
参考ページ :
Struts 1.x / Struts 2.xでのスレッドセーフ(thread safe)について
投稿者: kinusati, カテゴリー: Java
Javaについてあまり詳しくなかったので、フレームワークと言語勉強をかねてStruts2 + hibernateでお勉強用Webアプリを制作していますが、なれない言語のため正直手こずっています(C/Perlの方が簡単・・)
でJavaといえば気になるのがスレッドセーフ(thread safe)。他言語でのスレッドセーフの作り方はわかるので、共用変数にステータスを持たせる等を行わなければスレッドセーフになることはわかるのですが、Struts2のサンプルプログラムを見ていて疑問に思ったことが。
import com.opensymphony.xwork2.ActionSupport;
public class indexAction extends ActionSupport {
public String execute() throws Exception {
return "success";
}
public String message;
public String hello() throws Exception {
message = “いえいえこちらこそこんにちは。”;
return "hello";
}
}
上記はatmarkitの記事で@いう間にWebアプリを作れる「Struts 2」入門から抜き出した物ですが、ActionSupportのサブクラスにインスタンス変数を持たせた上、インスタンス変数にメッセージを代入した物を、JSPにはき出すようにしています。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<s:property value=”%{message}”/>
</body>
</html>
ふと思ったのが、そういえばStruts1系だとActionサブクラスは一つだけインスタンス化されるという記事。
- http://www.itmedia.co.jp/enterprise/0310/06/epn03_4.html
- http://rutake.ddo.jp/blog/techmemo/2007/07/strutsaction.html
atmarkit記事掲載のstruts2のサンプルだと、スレッドセーフではないのでは?と思っていたら、以下の記事が。
- Struts 1.x : Actionサブクラスはsingletonだから、スレッドセーフ or synchronizedにしないとだめ。Actionサブクラスにインスタンス変数を持たせてリクエスト毎の状態やメッセージを管理してはいけないということですね。
- Struts 2.x : ActionSupportサブクラスはHTTPリクエスト毎に生成されるため、スレッドセーフ問題は発生しない。ActionSupportサブクラスにインスタンス変数を持たせて、リクエスト毎のメッセージを代入しても、問題なくスレッドセーフです
struts 1.x系と違ってstruts 2.x系のサンプルがActionSupportサブクラスにインスタンス変数を持たせた上で、それをJSPに出力する物しか見つけられなかったのでどきどきしましたが、問題なしということですね。ほっとしました。
7.2-RELEASE-p5
投稿者: kinusati, カテゴリー: freebsd
2009/12/3付で7.2-RELEASE-p5がリリースされています。
SSLの再ネゴシエーションによる中身がのぞける問題の対策等のアップデートですね。
FreeBSD 7.2-RELEASE系からのアップデート方法は以下。簡単ですね。
freebsd-update fetch freebsd-update install chmod 0700 /var/db/freebsd-update

