3月
Sub-archives
2007年03月31日
django-0.96
django-0.96がリリースされたました。
psycopg2に変更になったので、データベースのバックエンドをpostgresql_psycopg2に変更する必要があった。
Xenとjp106
XenでJP106での入力がおかしいのを調べてみると。
qemu-dmあたりの問題ですか、そうですか。
apt.confメモ
testing(stable)環境からunstableを一部インストールする方法。
apt-lineにsidを追加する。それだけではsidが無分別に入るので、/etc/apt/apt.confにこう書く。
APT::Default-Release "testing";
2007-04-19修正
コードネーム(etch)では駄目。
Collective SVN report
- ATBiblioStyle - GS
- Vice - Base interfaces and classes for pluggable syndication
- Maps - Google Maps用か
- FCKEditor - 2.4.1にtag
- ZPTDebugger - 新規 - 名前の通りのもの
- ZPTDebugger - いきなり1.0.0
- PartnerProfile - 新規
- ARFilePreview - 2.0rc2
- HSCustome - theme?
- takeaction - new - 0.1 release
- ImageRepository - 0.7 release
- PloneSmoothGallery - 0.3beta
Xnest + gdm
Xnestを使ってgdmを使いたいとき。
$ gdmflexiserver --xnest気付かなかったよ。ああ、これで楽になる。
Plone-3.0 SVN report
まで
- wickedが一緒に入るようになった
- kssが壊れていたのが直った
- 共有の設定が変わった。Roleを与えるのではなくて、[Can edit]を与えるとかになっている。
- Iterate - checkout・checkinの編集ができるようになった。
- email_charsetプロパティ?イヤの予感がしないでもない。
- plone.app.*が 1.0b1.1 のタグを打たれている
- 3.0-beta1のtag
- CMFPlone/branches/jfroche-6201-locking-improvements
- CMFPlone/branches/laz-5887-cmfplone-search-users-fix/
Debian Etch installer
Debian Etch Installer rc2をテストしてみた。
2007年03月28日
PerlでKerberos5
Authen::Krb5::Simpleを使ってみようと思った。
2007年03月25日
Bicycle Repair Man
Pythonのrefactoringツール
- 名前の変更
- インライン化
- あるいはメソッド化
ペルー戦
ペルーにやる気があったのかという話は無視して。
高原はいったいどうなったんですかね?あのゴールは。このままブンデスで得点王になってチェルシーに移籍して下さい。
Tikal
Eclipseのpluginの管理ツールのTikalを使ってみる。
練習開始
2ヶ月以上ほうりだしてあったロードバイクに乗る。
久しぶりに乗ってみたらハンドルが遠かった。いかんな、体がMTBに慣れすぎている。
しばらく走ってみたら体が思い出したようで、きちんと乗れるようになってきた。だけど、まだまだ本気の練習ではない。来週こそ本格的に走りたいものだ。
JasperReportに挑戦
やっとこさJasperReportを使ったプログラムを書けた。
public static void main(String[] args) {
String templatePath = "./template/AircraftReport.jrxml";
String destPath = "./JasperSample1.pdf";
try {
JasperReport jasperReport = JasperCompileManager
.compileReport(templatePath);
JRDataSource dataSource = createReportDataSource();
JasperPrint print = JasperFillManager.fillReport(jasperReport,
new HashMap(), dataSource);
JasperExportManager.exportReportToPdfFile(print, destPath);
System.out.println("done");
} catch (Exception e) {
e.printStackTrace();
}
}
てな具合です。
ThinkITの記事はデータソースがデータベースとの接続を前提とした記事になっていたので別のコードを見なきゃデータソース変更の方法がわからなかっただけです。一回書いてみると別にデータソースの変更に面倒な話は何もない。Eclipseを使ったから勝手に補完にヘルプで楽だった。
JasperReportsで日本語を使う
次は日本語だね、って適当にやってみるとエラーが出る。
次にJavaのコードの変更。コード中に適当に日本語のデータを埋め込む。よし、これで実行…、あれ?
net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font :
pdfFontName : HeiseiMin-W3
pdfEncoding : UniJIS-UCS2-H
isPdfEmbedded : false
at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:1465)
at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:1368)
at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:1351)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:1708)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:590)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:554)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:519)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:306)
at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:126)
at MapArrayDSReport.main(MapArrayDSReport.java:68)
というようなエラーが。調べてみるとiTextがデフォルトでCJKに対応してないからということが原因だった。iTextAsian.jarをダウンロードしてきてCLASSPATHに追加すると見事表示された。ここはまるので注意。
- http://www.lowagie.com/iText/faq.html#asianfonts
- http://itextpdf.sourceforge.net/ - 本当は上のFAQのリンクがあるんだけど、Not Foundなので直接こっちから
2007年03月24日
OpenDSでMulti-master
SunがOpenDSというDirectory Serverを開発している。これは既にMulti-masterを実装しているので試してみた。
現在のOpenDSはあくまで開発中という位置付けではあるが既にMulti-masterを実装しておりなかなか意欲的な仕上がりを見せている。OpenDSを使
うにはサイトからダウンロードしてインストーラに適当に打ち込めばいいので省略してMulti-masterの実験をしよう。
なお、これはOpenDS-0.1-build-032に基いている。
まず、OpenDSを2箇所に展開する。便宜上OpenDS1とOpenDS2と呼ぶことにする。それぞれの初期セットアップをすませる。LDAPのポートは10389と20389とでもしておく。もし、別のサーバが用意できるのなら別のサーバで動かしてもよい。OpenDS1とOpenDS2の両方にdc=example,dc=comのbaseDNを作っておくこと。OpenDS1には適当にデータを入れておく。
次にOpenDS1のconfig/config.ldifを編集する。syncronization.ldifを後にくっつける。
dn: cn=example, cn=Multimaster Synchronization,cn=Synchronization Providers,cn=cds-cfg-changelog-portが自分自身の同期に使うポート、ds-cfg-changelog-serverはMasterになるサーバーを指定する。OpenDS1とOpenDS2のことですな。ds-cfg-directory-server-idがMaster毎に違う番号を割り振る。OpenDS1には1番を割り振る。
onfig
objectClass: top
objectClass: ds-cfg-synchronization-provider-config
cn: example
ds-cfg-synchronization-dn: dc=example,dc=com
ds-cfg-changelog-server: localhost:18989
ds-cfg-changelog-server: localhost:28989
ds-cfg-directory-server-id: 1
ds-cfg-receive-status: true
dn: cn=Changelog Server, cn=Multimaster Synchronization, cn=Synchronization Prov
iders, cn=config
objectClass: top
objectClass: ds-cfg-synchronization-changelog-server-config
cn: Changelog Server
ds-cfg-changelog-port: 18989
ds-cfg-changelog-server: localhost:18989
ds-cfg-changelog-server: localhost:28989
ds-cfg-changelog-server-id: 1
次はOpenDS2の設定だが、ds-cfg-changelog-portは当然変えておくこと。28989ですね。ds-cfg-changelog-server-idは2にする。以上で設定はおわり。OpenDS1とOpenDS2の両方を起動させる。あとは適当にデータをいじってみよう。LDAP Studioでやれば二つのサーバを同時に参照できるので楽だろう。片方の変更が即座に両方に反映させるのがわかるだろう。もちろんMulti-masterなのでどちらを変更しても大丈夫。
そして片方のサーバーを停止させて、もう片方で変更を加えたとしても、次に起動させるときちんと同期が取れている。
OpenLDAPに苦労している身にとってはもう使ってしまおうかしらんと思うような素晴しいソフトウェアである。
参考
2007年03月19日
Plone SmoothGallery
Plone SmoothGalleryの紹介
2007年03月16日
MRTG
久しぶりにmrtgを使ったのでメモ
# cfgmake 192.168.0.1 > /etc/mrtg.cfg
# indexmake /etc/mrtg.cfg > /var/www/mrtg/index.html
2007年03月07日
りんかい線
大崎駅で乗り換えをいつもするんだが。
2007年03月06日
sshで内部へのトンネル
sshを使って外から内側へのトンネルを作る
GenericSetupを使う(2)
続き
GSに対応させる方法ですが、試行錯誤で今のところこんな感じかな。
__init__.py: profile_registr.registerProfile()を実行する。これでGSのprofileを使うことを実行。
profile_registry.registerProfile(で、実際にprofileを書いてく。
name='default',
title='ATAmazon',
description='Profile for ATAmazon',
path='profiles/default',
product='ATAmazon',
profile_type=EXTENSION,
for_=IPloneSiteRoot)
profiles/default/import_steps.xml: 必須ではないが…。GSの実行順序に依存関係があるときに必要らしい。
<?xml version="1.0"?>profiles/default/types.xml: まあ、こんなファイルをずらずら書いていくわけですよ
<import-steps>
<import-step
id="ATAmazon_various"
version="0.3.20070303"
handler="Products.ATAmazon.setuphandlers.setupVarious"
title="ATAmazon: miscellaneous import steps">
Import steps that couldn't be mapped to other handlers.
</import-step>
</import-steps>
<?xml version="1.0"?>profiles/defaults/type/ATAmazon.xml: content typeへ与えるパラメータを書く
<object name="portal_types" meta_type="Plone Types Tool">
<object name="AmazonItem" meta_type="Factory-based Type Information"/>
</object>
<?xml version="1.0"?>つくりかけなのでこれが動かんとか言われても困る。いままではATAmazon.pyに書いていたコードをこっちに全部引っ越してくることになる。
<object name="AmazonItem" meta_type="Factory-based Type Information"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title">AmazonItem</property>
<property name="description">
</property>
<property name="content_icon">document_icon.gif</property>
<property name="content_meta_type">AmazonItem</property>
<property name="product">ATAmazon</property>
<property name="factory">addAmazonItem</property>
<property name="immediate_view">base_view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">False</property>
<property name="allowed_content_types"/>
<property name="allow_discussion">False</property>
<alias from="edit" to="base_edit"/>
<action title="view" action_id="view" category="object" condition_expr=""
url_expr="string:${object_url}/amazon_item_view" visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
url_expr="string:${object_url}/base_edit" visible="True">
<permission value="Modify portal content"/>
</action>
<action title="Properties" action_id="metadata" category="object"
condition_expr="" url_expr="string:${object_url}/base_metadata"
visible="True">
<permission value="Modify portal content"/>
</action>
</object>
setuphandler.py: 何か実行する必要があるときに書くらしい。
def setupVarious(context):
site = context.getSite()
logger = context.getLogger('atamazon')
logger.info("atamazon_various: Nothing done")
return
Extension/Install.py: QuickInstllerを使うのに必要
from Products.CMFCore.utils import getToolByNameそれからconfigure.zcml
def install(portal):
setup_tool = getToolByName(portal, 'portal_setup')
setup_tool.setImportContext('profile-ATAmazon:default')
setup_tool.runAllImportSteps()
setup_tool.setImportContext('profile-CMFPlone:plone')
return "Ran all import steps."
<genericsetup:registerProfile
name="default"
title="ATAmazon"
directory="profiles/default"
description="Extension profile for default ATAmazon setup."
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
まあ、短かくなったものだ。
あくまで作りかけのコードなので、これをそのまま参考にしても駄目ですよと。

