2008/12/11 (Thu)
ケータイで撮った写真を取り込むのが面倒。
メールで送ったり、ケーブル繋いだり、ActiveSyncも面倒。 SDだったらEye-Fiとかがいいんだろうけど、MicroSDなのでそれは無理。 というわけでLive Mesh。要はMS版Dropbox。
Dropboxとの違いは差分が取られない事、どのディレクトリをどのPCとシンクするかを細かく指定できること。 決まったディレクトリではなく全てのディレクトリが対象と出来ること、等々。サーバ上は5Gまでシンク可能。 あと、自分は許可してないけどWeb上から対象のPCをリモートコントロールできるみたい。
ストックコンテンツはLive Mesh、フローコンテンツはDropboxみたいにするといいかもしれない。
MSNメッセンジャー等のIDでSign in。 Add Deviceしてソフトをダウンロード&インストール。 Mac版もある。
WindowsMobile版も出てきたので早速インストール。
http://blogs.msdn.com/livemesh/archive/2008/12/09/expanded-live-mesh-for-mobile-ctp.aspx
これでMicroSDのDCIMディレクトリをシンク対象に追加。
そうすると自動でPCの方にもディレクトリが出来るので、シンク対象にする。
これで、WindowsMobileの方でシンクすれば、どんどんネットワーク経由でPCに転送される。
これでバシバシ撮っていけるな。
例えば、FFでSSを撮って保存されるディレクトリをシンク対象にしたらとか テキストログとかを共通管理したらとか。夢が広がるね。
UIはDropboxと比べるとそうとう煩雑。わかりにくい。けれど、 Eye-Fi, Dropbox, Live Meshの流れは、コンピューティングを変えるという意味では、ここ数年で一番のソリューションだと思う。まさにユビキタス。
2008/12/04 (Thu)
アプリケーションのインストール
各種ソフトウエアのインストール
Emacs22のインストール
$ wget ftp://ftp.gnu.org/pub/gnu/emacs/emacs-22.2.tar.gz
$ ./configure --prefix=/usr/local \
--build=i386-pc-linux-gnu \
--mandir=/usr/local/share/man \
--with-x
$ make
# make install
Anthyのインストール
http://sourceforge.jp/projects/anthy/
展開する。
$ ./configure
$ make
# make install
Apache
実行ユーザ/グループの作成
# /usr/sbin/groupadd -g 80 www
# /usr/sbin/useradd -d /dev/null -u 80 -g 80 -s /sbin/nologin www
ダウンロード
$ wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.10.tar.gz
$ tar xzvf httpd-2.2.10.tar.gz
# yum install openssl-devel
config とコンパイル
$ ./configure --prefix=/usr/local/apache2 \
--build=i386-pc-linux \
--localstatedir=/var \
--enable-so \
--enable-ssl \
--enable-usertrack \
--enable-rewrite \
--enable-proxy \
--enable-proxy_ajp \
--enable-proxy_balancer
インストール前にスーパユーザで以下の作業を行なう。
# cd /usr/local/
# mkdir apache2.2.10
# ln -s ./apache2.2.10 ./apache2
pid ファイルは /var/run/httpd.pid に配置するようにhttpd.confを変更しました。
PHPのインストール
依存関係のあるもの
下記パッケージを予めインストールしておく。
# yum install libxml2-devel.i386
# yum install libmcrypt-devel.i386
# yum install libjpeg-devel.i386
# yum install gd-devel.i386
# yum install mysql-devel
ダウンロード
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
config のオプション
$ ./configure --prefix=/usr/local \
--build=i386-pc-linux \
--mandir=/usr/local/share/man \
--disable-nls \
--with-libiconv-prefix=/usr/local \
--enable-shared --enable-static --with-pic
$ make
# make install
/usr/local/lib をライブラリの検索対象に追加
# echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
# /sbin/ldconfig -v
PHP本体のインストール
ダウンロード
$ wget http://jp.php.net/get/php-5.2.9.tar.gz/from/this/mirror
$ tar xzvf php-5.2.9.tar.gz
config のオプション
※ --with-gd より --with-jpeg を先に指定すること。そうしないと jpeg 未サポートになるとのこと。
$ ./configure --prefix=/usr/local \
--sysconfdir=/etc \
--with-mysql \
--with-jpeg-dir=/usr \
--enable-mbstring \
--with-gd \
--with-zlib-dir=/usr \
--with-freetype-dir=/usr \
--with-mcrypt \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-zend-multibyte \
--with-iconv=/usr/local \
--enable-shared --enable-static --with-pic
$ make
$ make test
# make install
# cp php.ini-dist /usr/local/lib/php.ini
パッケージでインストールしたソフトウエア
$ /bin/rpm -qa
で一覧が表示されます。
Install of CentOS5
インストール時設定
- linux text
- Choose a Language --> English
- Keyboard Type --> us
- Installation Method --> HTTP
- Configure TCP/IP --> Enable IPv4 support Dynamic IP configuration (DHCP)
- HTTP Setup --> ftp.riken.jp / Linux/centos/5/os/i386
- Welcome to CentOS
- Warning --> Yes
- Partitioning Type --> Remove all partitions on selected drives and create default layout.
- Warning --> Yes
- Review Partition Layout --> Yes
- Partitioning --> OK
- Low Memory --> Yes
- Boot Loader Configuration --> Use GRUB Boot Loader
- Boot Loader Configuration --> OK
- Boot Loader Configuration --> OK
- Boot Loader Configuration --> OK
- Boot Loader Configuration --> OK
- Configure Network Interface --> No
- Hostname Configuration --> automatically via DHCP / manually
- Time Zone Selection --> Asia/Tokyo
- Root Password --> **
- Package selection --> [*] Customize software selection
- Package Group selection --> [*] Editors
- Installation to begin --> OK
- Complete --> Reboot (デバイス->CD/DVD-ROMのマウント解除後)
- shutdown -h now
- ネットワーク -> アダプタ1 -> ホストインターフェース
Setting of CentOS5
インストール後設定
以下のパッケージをインストール。
# yum install yum-fastestmirror
yum updateする。
# yum check-update
# yum update
さらに以下のパッケージをインストール。
# yum install which
# yum install yum-utils
# yum install ntp
# yum install man
# yum install gcc
# yum install make
# yum install cvs
# yum install lynx
# yum install wget
# yum install unzip
# yum install ftp
日付設定
# ntpdate ntp.nict.jp
cronで定期実行
# vi /etc/cron.daily/ntpdate.cron
以下のファイルを作る
#!/bin/sh
/usr/sbin/ntpdate ntp.nict.jp
実行権限の付与
# chmod 755 /etc/cron.daily/ntpdate.cron
一般ユーザを追加。
# useradd -m <username>
# passwd <username>
New UNIX password: ********
Retype new UNIX password: ********
passwd: all authentication tokens updated successfully
2008/12/02 (Tue)
OpenPNE インストールまでの設定
Emacs22のインストール
UTF-8用
$ wget ftp://ftp.gnu.org/pub/gnu/emacs/emacs-22.2.tar.gz
$ ./configure --prefix=/usr/local/emacs-22.2
$ make
$ su
# make install
OpenPNEアカウントの作成
# useradd -m -s /bin/bash openpne
# chmod 755 /home/openpne
PHPのインストール
依存関係のあるもの # yum install libxml2-devel.i386 # yum install libmcrypt-devel.i386 # yum install gd-devel
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
$ ./configure
$ make
# make install
# ln -s /usr/local/lib/libiconv.so.2.4.0 /usr/lib/libiconv.so.2
/usr/local/lib をライブラリの検索対象に追加 $ cat /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/lib # /sbin/ldconfig
PHP本体のインストール $ wget http://www.php.net/get/php-5.2.6.tar.gz/from/a/mirror $ tar xzvf php-5.2.6.tar.gz
$./configure \
--with-mysql \
--enable-mbstring \
--with-jpeg-dir=/usr/local/lib \
--with-gd \
--with-jpeg-dir=/usr \
--with-zlib-dir=/usr \
--with-freetype-dir=/usr \
--with-mcrypt \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-zend-multibyte \
--with-iconv=/usr/local
iconvはディレクトリを指定するとこでエラーが出なくなった。 画像(jpg)関連がOpenPNEでUploadできなかった。 GDのjpeg関連の設定がおかしかったぽいのでオプションを追加した。
$ make
$ make test
# make install
# cp php.ini-dist /usr/local/lib/php.ini
Apache
ハンドラの追加 # vi /usr/local/apache2/conf/httpd.conf AddHandler application/x-httpd-php .php
VirtualHostの設定
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost 10.1.0.22:80>
ServerName xxxx.localnet
DocumentRoot "/home/openpne/work/OpenPNE/public_html"
DirectoryIndex index.html index.php
<Directory "/">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Apache2.2のデフォルトはDeny allなので権限ついて変更する
OpenPNE
$ wget http://downloads.sourceforge.net/openpne/OpenPNE-2.12.0.tar.gz
$ work/OpenPNE-2.12.0
$ ln -s OpenPNE-2.12.0 OpenPNE
$ cp config.php.sample config.php
$ chmod -R 0777 var
[openpne@ OpenPNE]$ diff config.php.sample config.php
7c7
< define('OPENPNE_URL', 'http://sns.example.com/');
---
> define('OPENPNE_URL', 'http://xxxx.localnet/');
13c13
< 'username' => '',
---
> 'username' => 'openpne',
16c16
< 'database' => '',
---
> 'database' => 'openpne',
22c22
< define('ENCRYPT_KEY', '');
---
> define('ENCRYPT_KEY', 'xxxxxxxx');
26c26
< define('MAIL_SERVER_DOMAIN', 'mail.example.com');
---
> define('MAIL_SERVER_DOMAIN', 'mail.localnet');
MySQLにテーブル作成
$ mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'openpne'@'localhost';
$ mysql -u openpne
mysql> create database `openpne` default character set utf8;
$ mysql -u openpne --default-character-set=utf8 openpne < setup/sql/mysql41/install/install-2.12-create_tables.sql
$ mysql -u openpne --default-character-set=utf8 openpne < setup/sql/mysql41/install/install-2.12-insert_data.sql
mysql> GRANT ALL PRIVILEGES ON *.* TO openpne@"%"
-> IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO openpne@localhost
-> IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
2008/11/25 (Tue)
Install of CentOS5
インストール時設定
- text install
- Server
インストール後設定
- SELinux と Firewall は無効化する。
以下のサービスは停止。
- apmd
- auditd
- autofs
- bluetooth
- cups
- firstboot
- gpm
- haldaemon
- hidd
- ip6tables
- kudzu
- mcstrans
- netfs
- nfslock
- pcscd
- portmap
- restorecond
- rpcgssd
- rpcidmapd
- xfs
- yum-updatesd
以下のパッケージをインストール。
# yum install yum-fastestmirror
yum updateする。
# yum check-update
# yum update
さらに以下のパッケージをインストール。
# yum install yum-utils
# yum install ntp
日付設定
# ntpdate ntp.nict.jp
cronで定期実行
# vi /etc/cron.daily/ntpdate.cron
以下のファイルを作る
#!/bin/sh
/usr/sbin/ntpdate ntp.nict.jp
実行権限の付与
# chmod 755 /etc/cron.daily/ntpdate.cron
一般ユーザを追加。
# useradd -m -p xxxxxxxx <username>
Software Install
# yum install gcc
# yum install cvs
# yum install lynx
NcFTPはCentOS5は入っていないので、ソースから。(lftpは入ってる)
# wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.2-src.tar.gz
CentOSのデフォルトのyum repositoryは少ないので dag 追加
# vi /etc/yum.repos.d/dag.repo
以下のファイルを作成
[dag]
name=Dag RPM Repository for RHEL5/CentOS5
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/$basearch/dag/
enabled=0
gpgcheck=1
鍵の登録
# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
確認
# yum --enablerepo=dag list | grep git
2008/11/19 (Wed)
2008/11/11 (Tue)
Macbook Setup
Installed Software
- LimeChat
- Firefox
- QuickSilver
- bathyscaphe
- CarbonEmacs
- KeyRemap4MacBook
- VLC
- Skype
- Eclipse
- Senebier
- Dropbox
- SIMBL
- InputSwitcher
- StartupSound.prefPane
- InsomniaX
- Books
- MacPorts
- VirutalBox
Setting config
- Swapping Caps Lock and Control
- sudo -H cpan
- install Bundle::CPAN
2008/11/06 (Thu)
Emacsのインストール
Emacs22のインストール
aptから
aptダウンロード先の編集
# vi /etc/apt/source.list
deb http://hype.sourceforge.jp/ ./
deb-src http://hype.sourceforge.jp/ ./
鍵の追加
# wget http://hype.sourceforge.jp/A7F20B7E.gpg
# sudo apt-key add A7F20B7E.gpg
インストール
# aptitude install emacs22 emacs22-el
ソースから
$ wget ftp://ftp.gnu.org/pub/gnu/emacs/emacs-22.3.tar.gz
$ tar xzvf emacs-22.3.tar.gz
$ cd emacs-22.3
$ ./configure --prefix=/usr/local/emacs-22.3
$ make
$ su
# make install
# ln -s /usr/local/emacs-22.3/bin/emacs /usr/local/bin/emacs
2008/08/21 (Thu)
SIPChange
実行するとSIPをtouchkeysipに変更するものを作ってみた。
Windowsプログラミングは初めてに等しいので、こんな簡単なのでも少々手間取った。
gesture10keyは便利なんだけど、SIPはデフォルトが変更できなかったので、ショートカットをスタートアップに入れとくとよいかも。
http://www5.big.or.jp/~tex/mobile/sipchange.zip
gesture10key:http://www.geocities.co.jp/lauhangwoo/zero3/gesture10key.html
2008/07/30 (Wed)
MixiAPIのテスト
atom/MixiTest.java
package atom;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
/**
* @author tex
*
*/
public class MixiTest {
private HttpClient client;
public MixiTest() {
this.client = new HttpClient();
}
public void post(String url, String username, String password)
throws HttpException, IOException {
PostMethod method = new PostMethod(url);
method.addRequestHeader("X-WSSE",
getWsseHeaderValue(username, password));
String body = ""
+ "<?xml version='1.0' encoding='utf-8'?>"
+ "<entry xmlns='http://purl.org/atom/ns#'>"
+ " <title>Test</title>"
+ " <summary>Post diary from Mixi API</summary>"
+ "</entry>";
StringRequestEntity re =
new StringRequestEntity(body, "application/atom+xml", "UTF-8");
method.setRequestEntity(re);
this.client.executeMethod(method);
System.out.println(method.getStatusLine().toString());
Header[] headers = method.getResponseHeaders();
int len = headers.length;
for (int i = 0; i < len; i++) {
System.out.print(headers[i].toString());
}
System.out.println(method.getResponseBodyAsString());
}
protected final String getWsseHeaderValue(String username, String password) {
try {
byte[] nonceB = new byte[8];
SecureRandom.getInstance("SHA1PRNG").nextBytes(nonceB);
SimpleDateFormat zulu =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
zulu.setTimeZone(TimeZone.getTimeZone("GMT"));
Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
String created = zulu.format(now.getTime());
byte[] createdB = created.getBytes("utf-8");
byte[] passwordB = password.getBytes("utf-8");
byte[] v = new byte[nonceB.length
+ createdB.length + passwordB.length];
System.arraycopy(nonceB, 0, v, 0, nonceB.length);
System.arraycopy(createdB, 0, v, nonceB.length, createdB.length);
System.arraycopy(passwordB, 0, v, nonceB.length
+ createdB.length, passwordB.length);
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(v);
byte[] digest = md.digest();
StringBuffer buf = new StringBuffer();
buf.append("UsernameToken Username=\"");
buf.append(username);
buf.append("\", PasswordDigest=\"");
buf.append(new String(Base64.encodeBase64(digest)));
buf.append("\", Nonce=\"");
buf.append(new String(Base64.encodeBase64(nonceB)));
buf.append("\", Created=\"");
buf.append(created);
buf.append('"');
return buf.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws Exception {
MixiTest test = new MixiTest();
test.post("http://mixi.jp/atom/diary/member_id=xxxx", "xxx@xxxxxxx",
"xxxxxxxxxxxx");
}
}
2008/07/08 (Tue)
CABviaActiveSync
PC上に保存されたCABファイルを右クリックからインストールするためのソフト。 1.2ぐらいの時はXPまでだったが、既に1.5にまであがっていて、Vistaにも対応していた。
これを使用するとWindowsMobile端末へのソフトのインストールが格段に楽になる。
.NET Framework 3.0とActiveSyncもしくはWMDC (Windows Mobile Device Center)が必要。
Download --> modaco
2008/07/07 (Mon)
OpenPNE
OpenPNE構成ディレクトリ
.
|-- config.php 設定ファイル
|-- bin/ Cron、メール処理等コンソールで行うスクリプト
|-- lib/ OpenPNE外ライブラリの格納場所
| |-- include/ PEAR等ライブラリの格納場所
| `-- smarty_plugins/ Smarty用プラグインの格納場所
|-- public_html Apacheで公開されるドキュメントルート
| |-- cmd/ 小窓用JS格納ディレクトリ
| |-- flash/ Flash格納用ディレクトリ。フレンドリスト用SWFのみ
| |-- img/ 公開画像ディレクトリ
| |-- js/ 公開JavaScriptディレクトリ
| |-- modules/ モジュール別公開ファイル
| |-- openid/ OpenID用コントローラ
| |-- skin/ スキン格納ファイル
| |-- cap.php キャプチャ作成PHP
| |-- config.inc.php 初期設定用PHP
| |-- img.php 画像用フィルタ
| |-- img_skin.php スキン用フィルタ
| |-- index.php フロントコントローラ
| `-- xhtml_style.php カスタムCSS用PHP
|-- setup セットアップ用
| |-- script
| `-- sql セットアップ用SQLファイル
| |-- mysql40 MySQL4.0用SQL
| |-- mysql41 MySQL4.1用SQL(大幅に変更があったため)
| | |-- install インストール用SQL、テーブル、初期データ
| | |-- option オプション等(Biz等)SQL
| | |-- update マイナーバージョンアップ用
| | `-- upgrade メジャーバージョンアップ用
| `-- postgres74 PostgreSQL用
|-- var 一時ファイル置き場(適時削除してもよい)
| |-- function_cache 関数キャッシュ用(ランキング等逐次実行の必要のないもの)
| |-- img_cache 画像キャッシュ用
| |-- log ログ用
| |-- rss_cache RSSキャッシュ用(cronから生成)
| |-- templates_c Smartyテンプレートコンパイル済みPHP用
| `-- tmp 一時ファイル用(ファイルアップロード用)
|-- webapp OpenPNEアプリケーション
| |-- lib/ アプリケーション用ライブラリ(OpenPNE用カスタム等)
| |-- modules/ モジュールディレクトリ
| | |-- admin/ 管理画面モジュール
| | | |-- init.inc 初期設定ファイル
| | | |-- do/ 処理実行系PHP格納ディレクトリ
| | | |-- lib/ 管理画面モジュール用ライブラリ格納ディレクトリ
| | | |-- page/ ページ系PHP格納ディレクトリ
| | | |-- templates/ Smartyテンプレート格納ディレクトリ
| | | `-- validate/ 妥当性検証用INIファイルの格納ディレクトリ
| | |-- api API用
| | |-- ktai 携帯用
| | |-- openid OpenID用
| | |-- pc PC用
| | |-- portal SNSポータル用
| | `-- setup セットアップ用
| |-- templates テンプレート
| |-- validate 妥当性検証
| |-- init.inc 初期設定用
| `-- version.php バージョン情報
|-- webapp_biz BIZ機能(予定表、グループウェア、施設管理、ToDo)
`-- webapp_ext 拡張モジュールの格納ディレクトリ
OpenPNEの基本構成
- public_html/index.php を使用したフロントコントローラパターン
テンプレート名とアクション名の規約 /{module}/{type}/{action}.php
- module モジュール名 例: admin, pc, ktai, api, openid, portal, setup 等 パラメータ: m
- type アクションタイプ名 例: page, do パラメータ a prefix
- action アクション名
例:
csv_member
,delete_c_admin_user
等 パラメータ a suffix
webapp_ext
による拡張モジュール対応webapp_ext
に置いたファイルは同名のwebappのファイルの代替ファイルとなり 優先的に実行される。Smartyによるテンプレートエンジンの使用 テンプレートファイルにSmartyを仕様。JavaScriptの括弧と競合するため デリミタを変更している {} -> ({})
ライブラリの内包 PEARやSmartyのライブラリを内包し環境依存をなくしているため、 OpenPNE外に依存するライブラリがほぼ存在しない。
小窓機能による他サイトAPIとのMashup 小窓機能と呼ばれるURL自動変換スクリプトにより 外部サイトのプレイヤー等をOpenPNE内にマッシュアップ可能となる
アクション
- OpenPNE_Actionを継承し、execute関数をオーバーライドする。
- 認証外のアクションを作りたい場合はisSecureがfalseを返すようにする。デフォルトtrue
page系 ページ遷移系のアクションの処理を定義する。画面遷移先はファイル名等同名の Smartyテンプレートによって処理される。 Smartyテンプレートで処理するパラメータはexecute($request)関数で作り、 処理に問題がなければ関数は"success"を返すようにする。
do系 処理実行系のアクションを定義する。画面遷移先が決まっていないので、 execute関数の最後で、openpne_forwardで遷移先を指定し、 ブラウザにLocationヘッダを返し、クライアントリダイレクトを指示する。
参考URL
2008/06/24 (Tue)
WILLCOME 03 に向けて
Today
QuicToday
Google検索Todayプラグイン
メール・電話
Offisnail Contact
アドレス帳
Google Map Mobile
地図ソフト
gmm_navi Auto
現在の位置を指定してGoogleMapを起動する
ネットワーク
ぽけギコ
2chブラウザ
q2chwm
2chブラウザ
- 保存先をSDカードにする。
PocketPuTTY
SSH Terminalソフト
- ctrl-F
EbIRC
IRCクライアント
EbIRC Custom
IRCクライアント
リコリス
コミック発売日チェッカ
NicoNavi
ニコニコ動画ダウンローダー
ffvp6
TCPMPプラグイン
Amazon Browser
アマゾン専用ブラウザ
http://shinn.boo.jp/blog/archives/2007/01/amazon_browser.html
日本語
AtokSetPlus
ATOK関連設定
画像カメラ
KTCapt
画面キャプチャ
MobileImageViewer
画像ビューア
[es]Silencer
カメラ無音化
TCPMP
メディアプレイヤー
http://forum.xda-developers.com/showthread.php?s=6ee11ef864a9207f6ec560a8e118dc72&t=367070
システム
SimpleHTTPntp
時計あわせ
WkTASK
タスクマネージャ
通信設定
EasyDial
一発ダイアルアップ
AutoConnect
自動接続切断
ファイル
WM5torage
直接ストレージファイルの読み書きを可能にする
tGetFile.dll
MyDocuments以外のアクセスを可能にする
File Explorer extension
エクスプローラを拡張する
ExPanda
アーカイバ
GSFinder for W-ZERO3
ファイルマネージャ
ドキュメント
ScratchView
テキストビューア
PocketHpte
テキストエディタ
2008/06/09 (Mon)
PostgreSQLの初期設定
$PGDATA/postgresql.conf を書き換える。
オートバキュームの設定
# AUTO VACUUM SETTING
autovacuum = on
stats_row_level = on
ログファイルの設定
# LOG FILE SETTING
redirect_stderr = on
log_line_prefix = '<%t %u %d %p>'
log_min_duration_statement = 3s
2008/03/14 (Fri)
VMWare でテスト環境構築
ダウンロード
http://register.vmware.com/content/download.html からダウンロードします。
インストール
カスタムインストールして vmware server のみチェック。
イメージのダウンロード
http://www.thoughtpolice.co.uk/vmware/ からDebian Etch minimal をダウンロード
torrent downloads の設定してない場合は、Opera で落とす。 イメージのzip を展開し、ディレクトリごと、C:\Virtual Machines\ にコピーする。
VMWareの起動
レジストレーションコードを取得して、入力する必要あり。 http://register.vmware.com/content/registration.html
Linuxの設定
root, notroot アカウントがあり、パスワードは thoughtpolice
- passwd root #パスワードの変更
- useradd -D -s /bin/bash #デフォルトのシェルをbashに
- dpkg-reconfigure console-data # キーボード設定。
- dpkg-reconfigure locales #ロケールのインストール
ja_JP.EUC-JP
,ja_JP.UTF-8
を追加、デフォルトをja_JP.EUC-JP
に - aptitude update # aptitude リスト更新
- aptitude upgrade # システムの安全なアップグレード
- aptitude install openssh-server # OpenSSH のインストール
- /etc/init.d/ssh start # OpenSSHd の起動
- useradd -m -p xxxxxxxx <username> # <username> をパスワードxxxxxxxx で追加。
これでSSHクライアントからゲストサーバにログインできる。
- aptitude install gcc
- aptitude install make
- aptitude install libreadline5-dev
- aptitude install zlib1g-dev
- aptitude install emacs
- aptitude install patch
- aptitude install cvs
- aptitude install unzip
- aptitude install lynx
- aptitude install ncftp
- aptitude install ftp
CPANの設定
適当にEnterですすめる。ftp.perl.orgに繋がらなかったらCtrl-Cで止めると 他のサイトを聞かれるのでkddilabsとかミラーを入力する。
Please enter your CPAN site: [] ftp://ftp.kddilabs.jp/CPAN/
$ perl -MCPAN -e shell
> install Bundle::CPAN
2008/02/16 (Sat)
簡単なHashの作り方。
RubyのHashを作るのは早くて簡単。
name = {"title", "mr", "first", "craig", "last", "davidson"}
Javaでは通常以下のようになる。
public void testBuildAHashNormally(){
Map slow = new HashMap();
slow.put("title", "mr");
slow.put("first", "craig");
slow.put("last", "davidson");
assertEquals("mr", slow.get("title"));
assertEquals("craig", slow.get("first"));
assertEquals("davidson", slow.get("last"));
}
それを以下のようにしてみたい。
public void testBuildAHashQuickly(){
Map quick = new Hash("title", "mr",
"first", "craig", "last", "davidson");
assertEquals("mr", slow.get("title"));
assertEquals("craig", slow.get("first"));
assertEquals("davidson", slow.get("last"));
}
それは以下のようにHashを拡張すればいい。
public class Hash extends HashMap {
public Hash(Object ... keyValuePairs) {
for (int i=0; i<keyValuePairs.length; i++)
put(keyValuePairs[i], keyValuePairs[++i]);
}
}
2008/02/13 (Wed)
Case Insensitive
PostgreSQLでの検索を大文字小文字区別なしで行いたいとの事なので、 対応する演算子を捜したところ、以下の文章が見つかったのでテスト。
http://www.postgresql.jp/document/current/html/functions-matching.html
SELECT * FROM entry WHERE title ILIKE '%TEST%';
SELECT * FROM entry WHERE title ~~* '%TEST%';
LIKE と ~~ は等価、ILIKE と ~~* が等価のようだ。
~を一つにするとPOSIX正規表現を使ったマッチングになるようだ。 今回は部分一致の検索のみでいいので、TESTの値はプログラム側で キーワード(_や%)をエスケープ処理してSQLInjectionを防ぎ、 ILIKEを使い前後へのマッチングのみに対応した。
2008/01/30 (Wed)
setlockを用いてバッチ処理の排他制御を行う。
daemontools
ダウンロード
/package ディレクトリが必要なので作成しStickyビットを立てる
# mkdir -p /package
# chmod 1755 /package
http://cr.yp.to/daemontools/install.html から daemontools-0.76.tar.gz をダウンロード
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
展開する
# tar xzvfp ./daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
パッチを当てる
http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ からパッチ(daemontools-0.76.errno.patch)をダウンロード
# cd admin/daemontools-0.76
# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
パッチを当てる。
# patch -p1 < ./daemontools-0.76.errno.patch
インストールする
# ./package/install
setlock の実行
setlock を用いて、排他制御を行う。http://cr.yp.to/daemontools/setlock.html
$ /usr/local/bin/setlock -nx /tmp/hoge.lock hogecommand
2008/01/29 (Tue)
Java Pretty Date
John Resig の記事のJavaScriptを移植した、ISO8601:2004の日付をParseするけれども、 commons-langを使うのが素直。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//import org.apache.commons.lang.time.DateFormatUtils
public class PrettyDate {
public static String prettyDate(String dateString) throws ParseException {
if (dateString == null)
return null;
// Date date = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(date);
Date date = parse(dateString);
return prettyDate(date);
}
public static String prettyDate(Date date) throws ParseException {
if (date == null) return null;
Calendar cal = Calendar.getInstance();
long diff = (cal.getTime().getTime() - date.getTime()) / 1000;
double dayDiff = Math.floor(diff / 86400);
if (dayDiff < 0 || dayDiff >= 31)
return null;
if (dayDiff == 0) {
if (diff < 60 ) return "just now";
if (diff < 120 ) return "1 minute ago";
if (diff < 3600 ) return (int) Math.floor(diff / 60) + " minutes ago";
if (diff < 7200 ) return "1 hour ago";
if (diff < 86400) return (int) Math.floor(diff / 3600) + " hours ago";
} else if (dayDiff == 1) {
return "Yesterday";
} else if (dayDiff < 7) {
return (int) dayDiff + " days ago";
} else if (dayDiff < 31) {
return (int) Math.ceil(dayDiff / 7) + " weeks ago";
}
return null;
}
private static final SimpleDateFormat DATE_FORMAT_MILLIS_ISO8601
= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
private static final String REGEX_DATE_FORMAT_MILLIS_ISO8601
= "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[-+]\\d{2}:\\d{2}";
public static Date parse(String dateString) throws ParseException {
Date date = null;
if (dateString.matches(REGEX_DATE_FORMAT_MILLIS_ISO8601)) {
int index = dateString.lastIndexOf(":");
StringBuffer sb = new StringBuffer(dateString).deleteCharAt(index);
date = DATE_FORMAT_MILLIS_ISO8601.parse(sb.toString());
}
return date;
}
public static void main(String[] args) {
String[] dateStrings = { "2008-01-29T20:38:17.123+09:00",
"2008-01-29T20:28:17.123+09:00",
"2008-01-29T10:28:17.123+09:00",
"2008-01-28T10:28:17.123+09:00",
"2008-01-25T10:28:17.123+09:00",
"2008-01-20T10:28:17.123+09:00", };
try {
for (String dateString : dateStrings) {
System.out.println(PrettyDate.prettyDate(dateString));
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
以下実行結果
prettyDate("2008-01-29T20:38:17.123+09:00")// =>21 minutes ago
prettyDate("2008-01-29T20:28:17.123+09:00")// =>31 minutes ago
prettyDate("2008-01-29T10:28:17.123+09:00")// =>10 hours ago
prettyDate("2008-01-28T10:28:17.123+09:00")// =>Yesterday
prettyDate("2008-01-25T10:28:17.123+09:00")// =>4 days ago
prettyDate("2008-01-20T10:28:17.123+09:00")// =>2 weeks ago
Mark Up 2 Down
構造化テキスト記法
仕事で、インストールマニュアルを作ることが多々あるのだが、
バージョン管理に入れるものはなるべくテキストフォーマットでありたい。
しかし、Wiki記法などでは他人(プログラマ外の人間)にわかりづらいので
出来るだけシンプルなものがいい。そしてなるべく簡単に他のフォーマットへ
変換できるものが欲しい。
Markdown というのがいいらしいので、その記法を採用することにした。
コンバータの導入
早速、インストールマニュアル等を書き直して、HTML に変換することに。 まずは、Windows用に簡単に変換できるコンバータを探したところ、 Pandoc なるものを発見。早速導入する。LinuxなりMacOSなりはもっと簡単に導入できそう。 文字コードが UTF-8 しか通らないようなので KaoriYa.net で配布している Windows 版の iconv を使用させてもらうことに。
上記の二つを展開し、pandoc.exe
, iconv.exe
, iconv.dll
をPATHの通ったディレクトリに。
(自分の場合は、c:\opt\bin
に配置)
バッチファイルの作成
1つのファイルに全てを書いてしまうと、後々管理が面倒なので
表示順に番号を振り、バッチ処理で一気に変換することに。
かなり適当ですが、以下を mark2html.bat
として c:\opt\bin
に配置。
@ECHO OFF
IF (%1)==() GOTO NoParams
IF (%2)==() GOTO ConvertAll
:ConvertOne
iconv -t UTF-8 %2 | pandoc.exe -s -S --toc -A footer.html -c pandoc.css -o %1
GOTO Bottom
:ConvertAll
CD . > tmptmp
FOR %%B IN (*.txt) DO copy /A tmptmp + %%B tmptmp
iconv -t UTF-8 tmptmp | pandoc.exe -s -S --toc -A footer.html -c pandoc.css -o %1
DEL tmptmp
GOTO Bottom
:NoParams
ECHO 使用方法 mark2html [作成するファイル名] [入力するファイル名]
ECHO.
ECHO 例 - mark2html output.html
ECHO カレントディレクトリにある全ての .txt ファイルを
ECHO 指定されたファイルに変換します。
ECHO 例 - mark2html output.html input.txt
ECHO input.txt を 指定されたファイルに変換します。
ECHO.
:Bottom
Blosxomを導入
一通り回ってやっぱりBlosxomに返って来た。テキストで管理したいというのがやはり最大の理由。というわけで再度設定することに。
- hail2u.net - Archives - blosxom starter kit から blosxom starter kit 1.1.3 をダウンロードし、展開。config.cgiを変更する。
- blosxom :: the zen of blogging :: plugins/general/flavourdir.txt から flavourdirプラグインをダウンロード pluginsディレクトリに入れる。
- entries以下にflavoursというディレクトリを作り、フレーバーファイルを全てその中に移す。
- blosxom.cgiの名前をblogに変更する。
.htaccess に以下の記述をする。
<Files blog> SetHandler cgi-script </Files>
Markdown からmarkdown.plダウンロードする。最新版はおそらく以下
http://daringfireball.net/projects/downloads/Markdown_1.0.2b4.tar.gz- markdown.pl を markdown に変更し、plugins フォルダに入れる。
- 投稿テキストはUTF-8、一行目がタイトル、あとはMarkdown記法で記述してアップロード
- 以上で http://www5.big.or.jp/~tex/blog にアクセスできるようになる。
追記
SPAM防止のために、story.rssから
(mailto:$rss10::email)
<trackback:ping rdf:resource="$url$path/$fn.trackback"/>
を削除した。
また、story.html, story.htm から Auto Trackback Discovery 用の記述も削除
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="$url$path/$fn.htm"
dc:identifier="$url$path/$fn.htm"
dc:title="$title"
trackback:ping="$url$path/$fn.trackback"/>
</rdf:RDF>
-->