CEATEC JAPAN 2011 出展の事前準備できた〜

来週の CEATEC JAPAN 2011 の長崎県ブースに出展させて頂きます。

本日、展示パネルの発送など事前準備が一通り終わりました。
相変わらずギリギリって感じです。

弊社は今年もOpenCOBOLメインの展示です。
OpenCOBOL大好きっコは幕張メッセにあつまれ〜。

特別招待日 10月4日(火)
公開日 10月5日(水)~ 7日(金)
無料公開日 10月8日(土)

ですよ。

公開日は当日登録だと入場料が一般1,000円・学生500円ですが
Web事前登録してると無料だそうですよ。 おとく。

Facebooktwitterlinkedintumblrmail

Windows 64bit版でAccess2000を使った時のODBC

先月、開発用のマシンが壊れてWindows7の64bitになりました。
この64bitで苦戦したので忘れないうちにメモ。

現在やっている作業でAccess2000の環境を整えることになり、PostgreSQLのODBCが必要に。
ドライバをインストールしてODBCアドミニストレータでDSNを作成し、
テーブルのリンクをしようと一覧から作成したDSNを選択したのですが、エラーが出て出来ない…。

その場で作成したらどうなるか?と思って新規作成をしてみると、
そもそもドライバ一覧の中にPostgresSQLがない…。

原因はドライバが64bit、Accessが32bit対応だからでした。

対処方法としては32bit版のドライバをインストールすれば良いのですが、
ODBCアドミニストレータを普通に起動すると64bit版が立ちあがってしまうので

C:\WINDOWS\SysWOW64\odbcad32.exe

から32bit版を起動してDSN作成。

先ほどと同じようにテーブルのリンクをしてみると、エラーもなく出来ました。

Facebooktwitterlinkedintumblrmail

Flash Builder 4.5でのBlackBerry Tablet OS Pluginの認証

Flash Builder 4.5 Premiumを導入しました。
ビルドが3系の頃に比べ随分早くなり、開発効率が上がったのを実感しています。

でたまにアップデート通知が出てくるわけですが、下記プラグインのアップデートで認証を求められます。

BlackBerry Tablet OS Plugin for Adobe Flash Builder

 

BlackBerry向けに何か開発する予定は今のところないので放置していたのですが、このプラグインだけずっとアップデート通知が残っているのが気持ち悪くなってきたので、
ちょっと調べてみました。

Configuring Flash Builder 4.5 to build apps for BlackBerry Tablet OS

 

BlackBerry Developer Zoneっていうのに登録しないといけなかったようです。ということで下記からユーザ登録し、認証を通すことができました。

Developer Zone Login

 

BlackBerry向けにアンテナ貼っていない(私)人は、意外と見つけにくい情報だったのエントリーしておきます。

Facebooktwitterlinkedintumblrmail

BootCampでインストールしたWindowsをVMware Fusionで動かしてたら気をつけよう

BootCampでインストールしたWindowsをVMwareで動かしてるときにBootCampのアップデートするのはやめよう。

普通はやらないとは思う。

ところがやっちゃったんだ。 ウッカリ

どうなったか。

  • もともと不安定になっていたせいもあってか動作させてるMakBookがハングアップ。
  • 仕方がなく電源を強制断。
  • 祈りながら再起動。かなり待たされたがOSX起動。ホッ。
  • BootCampに切り替えて起動。無理。
  • セーフモードで再起動。Explorer落ちる。デバッガも落ちる。冷汗。
  • 再起動。Windows正常起動。セーフモード偉大。
  • BootCampアップデート。
  • Windowsでの作業があったのでバージョン管理ソフトのUI、Bazaar Explorerを起動、できない!うぁ
  • アンインストール後再インストールを繰り返すも回復せず。
  • AppData¥Roaming¥bazaarを削除して再インストール。Bazaar Explorer起動!作業中に電源落とされたのが原因?
  • BootCampで使うWindowsでのキーバインドがおかしい。KbdAppleがキーボードをみつけられなくなってるっぽい。
  • KbdAppleの再インストールで回復。

という目にあって午前がまるっと潰れた。

あと経験上、BootCampのWindowsをVMware上で動かしているときはWindows Updateするのもやめたほうが良い。

これもわかってるのに何度もウッカリやってしまってたりする。私の環境だと結構な確率で正常起動しなくなる。これもBootCampでセーフモードで起動すると直る事が多い。

いろいろと積み上がってきて精神的に追われてるんだけど、トラブルで時間とられてたら逆に落ち着いてきたので書いてみた。

Facebooktwitterlinkedintumblrmail

GOTO

先日、五島にちょっと帰ったりしてました。

本当は海に行ってそうめん食べたりする予定だったんですが、ものすごい雷雨に襲われまして、いろんな約束がパァになりました。


しばらく帰ってない間にいろいろとできてたようで。
「五島がうまい 農家レストラン」

地元産の食材を使った料理が食べられるそう。1,000円のバイキングに行ってきました~

盛りつけ方が下手くそなんでちょっとアレですが・・・美味しかったです!


五島牛のサイコロステーキが一番美味しかった。食べ放題でいいのだろうか本当に・・・

そして、

これは3年くらい前の画像ですが、ちゃんここです。
今年も雷雨の中、やってくれてました。雨が本当酷すぎて、いい写真撮れなかった・・・

ちゃんここ(治安孝行)は、霊を慰めるための念仏踊りだそうです。
同じ五島内でも、地域によって踊りとか歌とか微妙に違います。

大体地元の青年がやってるんですが、同級生の男子がいたりして、発見すると面白いですね。笑
踊ってる最中は顔が見えないので誰が誰だかですが、いやー、真面目に踊ってる姿は、かっこいいです。

最後に。

大雨の中、家の洗濯干場で雨宿りしてた野良ネコ。(ブレた)

Facebooktwitterlinkedintumblrmail

WordPressで記事に挿入するタイミングで画像のサイズを制限する

WordPressでこんなシチュエーションに出くわしました。

  • アップロードする画像のサイズには制限をかけたくない。
  • というのも画像クリック時にはなるべく大きな画像をthickboxとかで表示したい。
  • ただそれだと、投稿にフルサイズ指定で挿入されるとdivをはみ出したりしてしまう。
  • たくさんのユーザが投稿するサイトなので、いちいちミディアム指定を説明したくない。

ありました、投稿に挿入する時のサイズを制限するためのeditor_max_image_sizeというフィルタフックが。
というわけで

function filter_editor_max_image_size() {
  return array(500, 500);
}
add_filter('editor_max_image_size', 'filter_editor_max_image_size');

これでフルサイズを画面から指定されても、最大で500までのwidthとなりますのでOKです。
困った時はWordpressのソースを追って、apply_filterやdo_actionを探せば、本体に手を入れずに拡張できますね。

Facebooktwitterlinkedintumblrmail

正規化しないと駄目かな

PostgreSQL8.1を使ったあるシステムでのお話しです。

まずユーザデータのテーブルが有り、そのユーザはID(連番)で管理されています。
そしてユーザが登録するデータテーブルには、データごとにそのデータを共有するユーザのIDが複数登録されています。
これはユーザIDをCSV形式の文字列で格納をしているんですが、条件文でLIKEとORを連発するのでデータ量が多くなると検索が非常に重くなります。

正規化しないと駄目かなと考えたんですが、対象となるテーブルが複数有るので修正に必要な箇所が散在していて、そのうえデータ量が多くなるテーブルは1つか2つしかないので、構造を変えずにどうにかならないかと別の方法を探しました。

結果として一応、postgresql-contribに含まれるtsearch2が、分かち書き形式の全文検索が出来るので良い感じかなと言う事でやってみました。
日本語には対応していませんが、今回は不要なので構いません。
(GINインデックスは対応が8.2からだったのでパスしました)

postgresql-contribは既にインストールされているので、postgresユーザになって、
psql dbname -f /usr/share/pgsql/contrib/tsearch2.sql

次にpsql dbnameでログインして、GRANTを掛けます。
GRANT ALL ON pg_ts_cfg TO PUBLIC;
GRANT ALL ON pg_ts_cfgmap TO PUBLIC;
GRANT ALL ON pg_ts_dict TO PUBLIC;
GRANT ALL ON pg_ts_parser TO PUBLIC;

とりあえずテスト。
CREATE TABLE test_tb(testts tsvector);
CREATE INDEX test_tb_testts ON test_tb USING gist (testts);

何事もなく作成されたので、データを入れてみて、SELECT。
データ中に2と4の含まれるデータを検索します。
SELECT * FROM test_tb WHERE testts @@ to_tsquery('default', '2&4'); -- and検索
SELECT * FROM test_tb WHERE testts @@ to_tsquery('default', '2|4'); -- or検索

EXPLAINすると、INDEXを使用しているようです。
Bitmap Heap Scan on test_tb (cost=4.10..108.72 rows=27 width=32)
Filter: (testts @@ ”’2” & ”4”’::tsquery)
-> Bitmap Index Scan on test_tb_index (cost=0.00..4.10 rows=27 width=0)
Index Cond: (testts @@ ”’2” & ”4”’::tsquery)

これを応用して、対象となるhogeテーブルのcol列にtsvector型に対応させたインデックスを作成します。
一応カンマからスペースに変更して、格納するようにreplaceしています。
CREATE INDEX hoge_col ON hoge USING gist (to_tsvector('default', replace(col,',',' ')));
SELECT * FROM hoge WHERE to_tsvector('default', replace(col,',',' ')) @@ to_tsquery('default', '2|4');

これで一応インデックスは効いているようです。
今までのクエリはインデックスを使わないでそのまま使えるし、インデックススキャンが必要なところは都度対応する事が出来ます。
とはいえ、かなり強引かなと思える方法なので、今後見て行かないとこれでOKかは分かりませんが・・・。
それと、どちらも許容範囲では有りますが、メモリ上に一度乗るとインデックス使わない検索の方が早い事も有ります。

何か他に良い方法は無いものか。

Facebooktwitterlinkedintumblrmail

WordPressをGitで管理する時の.gitignore

現在進行中のプロジェクトにて、WordpressをGitで管理しているのですが、
その際の.gitignoreを晒しておきます。
基本的にはwp-contents/uploads(投稿画像など)以下を除外しておけばOKです。

wp-config.php
wp-content/uploads/*
!wp-content/uploads/wptouch/

最後の行がミソで、uploads以下は除外したいけども、プラグインWPtouch用のカスタムアイコンがここに置かれるので、
それはコミットしたい。そういう時は「!」で否定してあげればOKです。

敢えて今回はwp-content/plugins等はGitで管理下においていますが、シチュエーションに合わせましょう。

Facebooktwitterlinkedintumblrmail

CORESERVERからdotCloudにWordPressをお引っ越し

dotCloudがプライベートベータから正式リリースに至り、ベータの頃からのユーザには1年間のProアカウントを発行してくれるということで、PaaSの運用テストを兼ねて、引っ越してみることにしました。個人ではお高いのでずっとは使えませんが。。。

CORESERVERでやること

まずは、CORESERVER側のWordpressを本体、プラグインともに最新にアップデートしました。
この状態でCORESERVERの管理画面からWordpressデータベースのダンプを取ってローカルに持ってきます。
また、CORESERVER上のWordpressディレクトリもごっそりローカルに持ってきました。

dotCloud基本設定

ここからがdotCloudに対して行う作業です。
ここではアプリケーション名をwordpressとしています。

dotCloudにアプリケーションを作成します。

dataich:dev dataich$ dotcloud create wordpress
Created application "wordpress"

ローカルにディレクトリを作成します。

dataich:dev dataich$ mkdir blog.dataich.com

ここにサービスの設定や、ソースコード等を置いていきます。

WordPressに必要なサービスPHP、MySQLの設定を行います。dotcloud.ymlに記述します。

dataich:dev dataich$ vi blog.dataich.com/dotcloud.yml

まずはこの状態で動きを確認してみます。 dotcloud pushコマンドでアプリケーションのソースコード(とはいってもこの段階ではdotcloud.ymlのみ)をPushします。

dataich:dev dataich$ dotcloud push wordpress blog.dataich.com
# upload blog.dataich.com ssh://dotcloud@uploader.dotcloud.com:21122/wordpress
# rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added '[uploader.dotcloud.com]:21122,[184.73.14.49]:21122' (RSA) to the list of known hosts.
building file list ... done
./
dotcloud.yml

sent 188 bytes  received 54 bytes  9.88 bytes/sec
total size is 52  speedup is 0.21
Deployment for "wordpress" triggered. Will be available in a few seconds.
2011-08-01 23:04:54 [api] Waiting for the build. (It may take a few minutes)
2011-08-01 23:04:54 [www.0] Deploying...
2011-08-01 23:04:54 [data.0] Deploying...
2011-08-01 23:05:25 [www.0] Service booted
2011-08-01 23:05:35 [data.0] Service booted
2011-08-01 23:05:35 [api] All the services are ready. Beginning the build.
2011-08-01 23:05:36 [data.0] The build started
2011-08-01 23:05:36 [data.0] This service type does not support build method, ignoring...
2011-08-01 23:05:36 [data.0] The build finished successfully
2011-08-01 23:05:36 [www.0] The build started
2011-08-01 23:05:36 [www.0] Fetched code revision rsync-1312214692.31
2011-08-01 23:05:37 [www.0] Updating channel "doc.php.net"
2011-08-01 23:05:37 [www.0] Update of Channel "doc.php.net" succeeded
2011-08-01 23:05:37 [www.0] Updating channel "pear.php.net"
2011-08-01 23:05:38 [www.0] Channel "pear.php.net" is up to date
2011-08-01 23:05:38 [www.0] Updating channel "pecl.php.net"
2011-08-01 23:05:38 [www.0] Update of Channel "pecl.php.net" succeeded
2011-08-01 23:05:38 [www.0] -su: line 0: cd: current: No such file or directory
2011-08-01 23:05:39 [www.0] -su: line 0: cd: current: No such file or directory
2011-08-01 23:05:39 [www.0] Reloading nginx configuration: nginx.
2011-08-01 23:05:42 [www.0] php5-fpm: stopped
2011-08-01 23:05:42 [www.0] php5-fpm: ERROR (abnormal termination)
2011-08-01 23:05:42 [www.0] The build finished successfully
2011-08-01 23:05:42 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://xxxxxxxx.dotcloud.com/

最後の行にサービスwww(PHP)のURLが発行されているので、アクセスしてみます。当然何のリソースもPushしていないので、404が返ってくるかと思います。

データの移行

CORESERVERからとったデータベースダンプをdotCloud上のMySQLにロードします。そのためにdotCloudにデータベース、ユーザの作成をしておきます。

まずは、dotcloud infoでMySQLサービスの情報を取得します。ここでは書きませんが、rootパスワードその他情報が表示されるはずです。

dataich:dev dataich$ dotcloud info wordpress.data

次のコマンドでMySQLのシェルにログインします。

dataich:dev dataich$ dotcloud run wordpress.data -- mysql -u root -p
# mysql -u root -p
Warning: Permanently added '[xxxxxxxx.dotcloud.com]:12428,[174.129.17.131]:12428' (RSA) to the list of known hosts.
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.1.41-3ubuntu12.10-log (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

DBを作成します。

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

ユーザを作成し、権限を与えます。

mysql> GRANT ALL ON wordpress.* TO 'dataich'@'%' IDENTIFIED BY 'XXXXXXXXXX';
Query OK, 0 rows affected (0.00 sec)

念のため

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

では、データをロードします。 データをアップし

dataich:dev dataich$ dotcloud run wordpress.data "cat > data.sql" < ~/Desktop/mysql_wp.dump # cat > data.sql
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added '[xxxxxxxx.dotcloud.com]:12428,[174.129.17.131]:12428' (RSA) to the list of known hosts.

SSHログインし

dataich:dev dataich$ dotcloud ssh wordpress.data
# $SHELL
Warning: Permanently added '[xxxxxxxx.dotcloud.com]:12428,[174.129.17.131]:12428' (RSA) to the list of known hosts.
mysql@wordpress-default-data-0:~$

ロードします。

mysql@wordpress-default-data-0:~$ mysql -u dataich -p wordpress < data.sql

WordPressソースの移行

アプリケーションのディレクトリにwwwというディレクトリを作り、そこにCORESEVERから持ってきたソースを置きます。

DBの設定を行うため、wp-config.phpを編集します。
dotcloudでは/home/dotcloud/environment.jsonに各種サービスの設定が書かれます。それを読むようにしてあげればOKです。

dataich:dev dataich$ vi blog.dataich.com/www/wp-config.php

nginxの設定

パーマリンク設定をp=123の形から変えている場合は、nginxの設定が必要になります。それにはnginx.confを置いてあげればOKです。

dataich:dev dataich$ vi blog.dataich.com/www/nginx.conf

wp-contentディレクトリの扱い

このままだと1回目以降にPushした際にwp-content以下が消えてしまいます。それではまずいので、すでにwp-contentディレクトリが存在する場合は何もしないようにpostinstallスクリプトを書いておきます。(dotcloudのヘルプそのまんま)

dataich:dev dataich$ vi blog.dataich.com/www/postinstall

dataich:dev dataich$ chmod +x blog.dataich.com/www/postinstall

dotCloudへWordpressソースをPush

これで、動くはず!さあ、Push!!!

dataich:dev dataich$ dotcloud push wordpress blog.dataich.com
# upload blog.dataich.com ssh://dotcloud@uploader.dotcloud.com:21122/wordpress
# rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added '[uploader.dotcloud.com]:21122,[184.73.14.49]:21122' (RSA) to the list of known hosts.
building file list ... done
./
www/

..
..
..

www: http://xxxxxxxx.dotcloud.com/

上記、URLに正しくアクセスできました。

カスタムドメインの設定

まずはdotCloud側を設定します。aliasコマンドを使います。

dataich:~ dataich$ dotcloud alias add wordpress.www blog.dataich.com
Ok. Now please add the following DNS record:
blog.dataich.com. IN CNAME gateway.dotcloud.com.

CNAMEでgateway.dotcloud.com.を設定するように言われるので、VALUE-DOMAIN側のドメイン設定を行います。

http://blog.dataich.com/
上記にアクセスし、動作確認。無事上記ブログをdotCloudで動かすことに成功しました。
ざっと確認したところ問題なし。これで暫く運用テストしてみます。

ここまでやっといてアレなのですが、そう負荷のない個人ブログを運用するにはちょっとお値段が辛いです。
もう少しリーズナブルなプランがあればいいのですが。。

Facebooktwitterlinkedintumblrmail

OSC2011 Kansai@Kyoto ありがとうございました

帰路の新幹線からこんばんは。
セミナーも無事(?)おわり、長崎に向けてひた走っております。

私の力不足でお答えできなかった技術的な質問などもあり、申し訳ありませんでした。

汎用機ダウンサイジング特設サイト
のメールフォームから質問していただけると詳しいものからお答えできるかと思います。

ぜひご活用ください。

マイナーな題材に関わらず足を運んでくださった方々、運営の方々、関係するすべての方々、ありがとうございました。

またお会いしましょう。

Facebooktwitterlinkedintumblrmail