Myページ
ホーム
コミュニティの人々
ソフトウェア
技術紹介
適用分野
Tyzohとは
ご意見お問い合わせ

ワタナベのブログ

プログラミングの最近のブログエントリ

オンラインサービスは基本テーマ+追加CSSがいい

マイクロブログやミニブログと呼ばれている twitter や tumblr というサービスがありますが、その tumblr のカスタマイズの方法で、「これくらいがちょうどいいよね」と思ったインタフェースがあったので紹介します。

tumblr-custom-themes.png

実際の tumblr の画面は私のページを見ていただいたり、ほかの方のページをご覧いただくこととしますが、これらのページの見てくれはいろいろとカスタマイズすることができます。

具体的には自分の管理画面にログインして"Theme"を選ぶと、あらかじめ用意されていたり、他のユーザから投稿されたテーマが右図のように表示され、 「まぁ、これなら好みに近いかもなぁ」というものを選択することができます。

でもここは少しこだわりを見せてみましょう。

テーマを選んだ上で、"Use custom HTML" をクリックするとそのテーマのHTMLをベースにHTMLを編集する画面に切り替わりますので、HTMLを駆使して自分の好みのテーマに仕立てることができます。

ただ、、、これは少し面倒ですね。気になるのは些細な部分だけなんですが。

私がいいなと思ったのはこの辺りで、下の画面のように "Add custom CSS" として既成テーマをベースにスタイルだけ調整できるようになっています。

以下の例では、link として投稿した記事の h3 タグのフォントをテーマで規定されている 1.4em より小さめにしたくて、ベースのフォントサイズに合わせるようにしました。

tumblr-custom-advanced.png

私はよく Firefoxアドオンの Greasemonky Stylish を使ってサイトの見た目をいじったりしますが、やりたいことは実はちょっとスタイルを変えたいということだけだったりします。

オンラインサービスのつくりとして、基本テーマ+ユーザが追加可能なCSS というのは結構いいバランスだと感じました。

ワタナベ (2008-07-03 11:07) | コメント(3)| トラックバック(0)

Rinza RDF Repository ソースを Eclipse のプロジェクトに変換

先日 Rinza RDF Repository 1.1.4 がリリースされました。

以前にも書いていましたが、maven でパッケージ化されていて、依存関係を持つライブラリなどは自動的にダウンロードしてくれますので、利用者にはとても便利です。OSSとして配布する際にぴったりですね。

さて、この Rinza RDF Repository のソースコードを Eclipse で編集する場合も mavenを活用できます。 その場合の手順は

  1. Maven 2をインストール

    http://maven.apache.org/ から Maven をダウンロードして、適当なディレクトリに展開します。その際に展開されたディレクトリの bin にPATHを通しておくと便利です。

    なお、MavenはHTTPで外部に接続しますので、ファイアウォールの内側から利用する場合は、 conf/settings.xml 内の proxy の設定をしておいてください。

  2. Rinza RDF Repository 配布ファイルを展開

    Rinza RDF Repository をダウンロードして、適当なディレクトリに展開します。

  3. Eclipse プロジェクト構成を生成
    > cd
    > mvn eclipse:eclipse
    > mvn package ← 今のうちにやっておくとよい
    
  4. Eclipse をインストール

    ここは割愛させてください。

  5. Maven 2.x Plug-in for Eclipse (m2eclipse) をインストール

    Eclipse で [Help]->[Software Update]->[Find and Install] の [* Search for new features to install] を選び、[New Remote Site] で http://m2eclipse.codehaus.org/ を登録することで、ネットワーク経由でインストールできます。

  6. Eclipse にプロジェクトをインポート

    [File]->[Import] から

    General
     + Existing Projects into Workspace
    

    で Rinza RDF Repository を展開したディレクトリを指定してインポートする。

  7. m2eclipse を有効にする

    インポートされたプロジェクトで m2eclipse を有効にするために、Project Explorerでインポートしたプロジェクトを右クリックし、 [Maven2]->[Enable]を選択する。

以上でEclipseへのインポートは終わりです。

■ 参考URLhttp://www.techscore.com/tech/ApacheJakarta/Maven/4.html#maven-4-5

ワタナベ (2006-09-27 20:30) | コメント(0)| トラックバック(0)

Rinza RDF Repository更新しました

こんにちは。
本日、Rinza RDF Repositoryを更新しました。

以前書きましたが、Maven 2.0 に合わせてビルドできるようにしています。
依存ライブラリなどは簡単に揃えられますから、是非お試しください。

ワタナベ (2006-08-28 18:49) | コメント(0)| トラックバック(0)

Maven 2.0 のススメ

kkato さんの投稿に触発されて...
autoconf/automakeのすすめ

C/C++などでは定番の ./configure; make ですが、Javaの世界では、ビルドツールとして ant や Maven などがあります。

make の課題として人によってビルド環境が異なることがありましたが(それを解決するための ./configure スクリプトですね)、ant はそれらを解決するために生まれました。

Mavenについてはさらに推し進め、ビルド手順さえもベストプラクティスを再利用して環境依存、開発者依存を少なくしようとしています。

Javaで開発する場合にはこれらのビルドツールを活用してみてはいかがでしょうか。

ちょうど Maven 2.0 がリリースされたばかりで私もこれから勉強してみようと思います

JavaWorld Online - Maven 2.0を知る、使う

ワタナベ (2006-08-07 16:38) | コメント(0)| トラックバック(0)

WeakHashMap でハマリ

Java のWeakHashMapをご存知でしょうか。

通常のHashMapは、キーのハッシュを計算して値を高速に検索できる便利なクラスです。WeakHashMapは、HashMap実装のバリエーションのひとつで、弱参照によってキーを管理しています。Javaのガベージコレクション(GC)は誰からも参照されていないインスタンスを解放対象としていますが、弱参照をつかうことで「参照されていてもGCの対象」であるインスタンスを管理することが出来ます。

その結果、WeakHashMap以外の誰からも(強参照で)キーが参照されなくなったら自動的にGCの対象となります。これを利用しインスタンスのキャッシュのようなことが実現できます。

さて。
ここでハマリ。

StringLiteral {
private String value;

public StringLiteral(String value) { this.value = value; }
public Object getValue() { return value; }
}


というクラスのインスタンスをその値でキャッシュしようとして、

WeakHashMap cache = new WeakHashMap();

StringLiteral literal = new StringLiteral("Hoge");
cache.put(literal.getValue(), literal);

としていました。
ですが、一向にインスタンスが消えない。なぜ?

理由は上記APIリファレンスに書いてあります。
引用:

実装上の注意: WeakHashMap 内の値オブジェクトは、通常の強参照によって保持されます。このため、値のオブジェクトが直接的にも間接的にも強くそれ自体のキーを参照しないようにしてください。そうすれば、キーが破棄されないようになります。値のオブジェクトが WeakHashMap 自体を介してそのキーを間接的に参照するようにしてください。つまり、値のオブジェクトはほかのキーオブジェクトを必ず参照し、その関連付けられている値のオブジェクトが今度は最初の値のオブジェクトのキーを必ず参照します。この問題に対応する 1 つの方法は、値自体を m.put(key, new WeakReference(value)) のように、挿入前に WeakReferences にラップし、次に各 get でラップ解除することです。

今回の例は簡単な構造だったので、見つけやすいのですが、
コードの表面上はキーと値は独立しているように見えても内部の奥深くで参照関係があったりしますので、要注意です。

ちなみに「インスタンスが消えない」ことを発見するために Eclipse の TPTP を使いました。

使い方はここがイメージ豊富で分かりやすいです。

ワタナベ (2006-03-07 21:23) | コメント(0)| トラックバック(0)

PHPのセッションでハマリ

ここで出てきた PHPフレームワークのEthnaで作成したアプリなんですが、一部の携帯で動かないということが発覚。 というよりは私が持っている携帯では動いたのですが、他の人にはダメだったようです。

原因はセッションか維持されていなかったことです。PHPは言語自体がセッション機能を持っているので、session_start() を呼べば特に自分で苦労しなくてもセッション管理ができますが、今回のハマリは、「特に自分で苦労しなくても」に頼りすぎたのが原因でした。

Webアプリにおける一般的なセッション管理は、

  • クライアントからの一連のリクエストに対してユニークなセッションIDを割り当て、それをCookieやURLパラメータなどに埋め込んで持ちまわる
  • クライアントからのリクエストにセッションIDが見つかれば、セッションが開始されているということなので、セッションIDに関連付けられたデータを取り出してトランザクションを再開する

という仕組みになっています。

つまり、今回のようにセッションが維持されていない原因として、セッションIDがうまく持ち回れていないこと考えられます。PHPはセッションIDを持ちまわる方法として

  1. Cookieに入れてクライアントに持たせる
  2. URLのクエリー文字列として付加する

が利用でき、状況に応じて自動的に選択されます。ただし、セキュリティの観点から、php.iniの指定でどちらかしか利用できないようにもできます。

で、ようやく本題なのですが、今回のアプリが載っているホスティングサービスのPHPが 2 の方法をサポートしていなかったのです。これに気づくのに相当な時間を要しました。( phpinfo() にてPHPのコンパイルオプションを確認し、--enable-trans-sid が指定されていなかった )

携帯電話ではCookie が使えないと思っていたので、手元のau端末で動いた時点でOKだと思ってしまいました。いつのころからか EZWebでは Cookieがサポートされていたらしいです。

結果、Vodafone, iモード機では Cookie が使えず、URLへの埋め込みも行われないということで、セッションが維持できないという問題になってしまいました。携帯用のページ内のフォームにセッションIDをhiddenで持たせることで対策としました。

Ethnaではページの作成をテンプレートエンジン Smarty で行っているのでコードとしては, View クラスでセッションIDの名前と値をフォームに登録する

$this->af->setApp('session_name', session_name());
$this->af->setApp('session_id', strip_tag(session_id()));
テンプレート側でフォームから値を取り出す
...

というのを埋め込んでいます。

ワタナベ (2006-02-17 11:34) | コメント(0)| トラックバック(0)

Skype API for Java

Skype APIをJavaのクラスライブラリとしてラップする試みが進んでいます。
http://skype.sourceforge.jp/

引用:


* プロフィール、コンタクトリスト、チャット、ボイスチャットの機能をサポート
* Skype 2.0で追加されたグループ、ビデオチャットをサポート
* P2PフレームワークのA2Pをサポート
* 多くのテストが行われているeclipseプロジェクトのSWTライブラリを用いて実装

ということで、Hunterと連携させてみようかな。
Google Talks の APIもリリースされていますし、IMやIP Phoneの普及度がたかっくなっている中、人々にリーチする手段としてひとつの大きなドメインを作りそうです。

■ Google TalkのAPIとソースコードのリリース
http://japan.linux.com/desktop/06/01/16/0225204.shtml?topic=1

ワタナベ (2006-01-17 01:41) | コメント(0)| トラックバック(0)

MySQLの文字エンコーディング

今日のハマリどころ。

FreeBSD環境でMySQLを稼動しています。
そしてWebアプリケーションからのJDBCアクセス時に文字化け。

Webアプリの文字コード SJIS です。
フォーム送信後のページには正しく表示される(セッションに載っている文字列は正常)のですが、DBに書き込んだ文字列を再表示しようとすると化けます。なので、よくあるフォームの送信の際の文字化けではなく、DBとのエンコーディングが合っていないことが分かります。


通常はJDBCの接続パラメータである URL に

jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Shift_JIS

のようにエンコーディングを指定すれば万事OKなのですが...
Shift_JIS、EUC-JP、sjis、ujis とどれを指定してもエラーメッセージが表示され、接続に失敗してしまいます。

# 作業しているターミナルが日本語表示できず、
# エラーメッセージが読み取れないのが痛いところです

サーバのデフォルトのエンコーディングを調べてみると、
引用:


su-2.05b# mysqladmin variables -p | grep character_
| character_set_client | utf8 |
| character_set_connection | utf8 |
     :

やっぱり。

デフォルトのエンコーディングが utf8 になっています。
これでは多バイト文字の扱いに問題が生じます。

これに対応する手っ取り早い策は default-character-set を
設定して、mysqldを再起動することです。

しかし、、、

引用:


mysql> show character set;
     :
| utf8 | ISO 8859-1 West European | utf8_swedish_ci | 1
     :
| utf8 | UTF-8 Unicode | utf8_general_ci | 3

なんと sjis、ujis ともサポートしている言語に入っていません。
# 先ほどのエラーメッセージの理由がなんとなく分かりました。

結局 utf8 でDBを統一することに決め、
my.cnf をいじるのも面倒なので以下のように起動しました。

/usr/local/bin/mysqld_safe --default-character-set=utf8 &

あとはJDBCのパラメータを調整して

jdbc:mysql://localhost/test?useUnicode=true

すべて解決しました。
デフォルトで utf8 にしておいて欲しい。。。

ワタナベ (2006-01-12 16:34) | コメント(0)| トラックバック(0)

Javaのガベージコレクションの仕組み

メモ。
Javaのガベージコレクションは、生成されたオブジェクトを、その新しさに応じて世代管理されたヒープメモリに割り当てを移動させながら、いらなくなったオブジェクトを効率よく消すメカニズムが備わっています。

ヒープメモリはNEW領域、OLD領域に大きく分けられており、ガベージコレクションの対象ごとにScavenge GC、Full GCという2種類の処理を使い分けています。

Scavenge GC はNEW領域内に存在する不要オブジェクトを高速に収集するガベージコレクションで、頻繁に実行されます。一方、Full GCはNEW領域、OLD領域の両方を対象に、大規模な収集が行われます。

JVMのデフォルト設定では、NEW領域の起動時のサイズが2MB、最大サイズが16MBとなりますので、必然的にFull GCのスピードは遅くなります(収集基準も違う)。
なので、出来るだけ NEW領域に収まるようにメモリの確保量のチューニングを行うことが望ましいようです。

参考:
http://h50146.www5.hp.com/products/software/oe/hpux/developer/column/tuning_03/

ワタナベ (2005-12-06 22:55) | コメント(0)| トラックバック(0)

RDF Repository 効率改善にチャレンジ

ワタナベです。

この週末、RDF Repository の効率改善にチャレンジしてみます。
まずは、トリプルを格納するテーブルの分割。
結果はまた月曜日に。

ワタナベ (2005-11-25 23:40) | コメント(0)| トラックバック(0)

« ニュース/時事 | メインページ | 技術・論文紹介 »

プロフィール

ワタナベ

サーバ管理が趣味の渡邉充隆です。

仮想化やネットワーク構成に興味があります。
あとは、ウェブ系の技術(プログラミングからインフラまで)も好きで、特にデータの見せ方などを工夫することで情報の流通や再活用を促進する技術を研究しています。

dev.tyzoh.jp では ssdb の(コアではなく)周辺のコードをいじっています。

tumblr / del.icio.us

RSSフィード

コミュニティの人々 | ソフトウェア | 技術紹介 | 適用分野 | Tyzohとは | ご意見お問い合わせ

Copyright (C) 2004-2008 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source