vim勉強会#7&kanasan.coffeeに参加しました

5/7に尼崎でvim勉強会があるという情報を入手したので、帰省ついでに四国に渡り道後温泉に浸かって高松でうどんを食べたりしながら兵庫県に入ってvim勉強会#7kanasan.coffeeに参加しました。

vim勉強会#7

席に着いてみるとMac率が非常に高い。9割くらいMacで圧倒される。
始まってみると、どなたかがTwitterで呟いていた「僕の知ってるvimと違う」状態。
SolarisLinuxのスタートアップで触ることがほとんどでプラグイン無しのvi、vimは使っていたけどプラギンを入れてVimScriptを書いたVimは全然別物。
「vimrcの行数=戦闘力」と言われるのも分かる気がしました。

以下気になったプラギン達。

Unite

https://github.com/ujihisa/unite.vim

ソースを列挙して選択できるプラギン。

  • フォルダ・ファイルを選択して開く
  • colorschemeを選択して変更(unite-colorscheme)
  • フォントを選択して変更(unite-font)
:Unite colorscheme -auto-preview

のように-auto-previewを付けるとカーソルに合わせてプレビューできる。

Vundle

https://github.com/gmarik/vundle

vimプラグインのマネージャ。QuickStartに従って

git clone http://github.com/gmarik/vundle.git ~/.vim/vundle.git

でVundleをインストールし、.vimrcに

Bundle 'thinca/vim-quickrun'
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/unite.vim'
Bundle 'ujihisa/unite-colorscheme'
Bundle 'ujihisa/unite-font'
Bundle 'ujihisa/shadow.vim'
Bundle 'rails.vim'

のように書いておくと

:BundleInstall

でプラギンをインストールできる。すばらしい。
ぼくは出かける前に手動でプラギンを入れてました…。

rails.vim

https://github.com/tpope/vim-rails

:RでControllerとViewのソースを行き来できるのが便利。IDEでもファイルが増えてくると行き来が面倒。
CakePHPで使えるcakephp.vimを後で試してみたい。
NetBeans+CakePHPプラグインでViewにジャンプできて気持ちは若干NetBeansに傾いてたり。

kanasan.coffee

http://jashkenas.github.com/coffee-script/

CoffeeScriptJavaScriptにコンバートできる小さな言語。セマンティックは同じ、シンタックスが異なる。
やりたいことをコードに落とし込む過程の、やりたいことをそのまま記述できる感じ。

shadow.vim

https://github.com/ujihisa/shadow.vim

CoffeeScriptのためにあるようなvimプラギン。
例えばa.js、a.js.shdを作るとvi a.jsでa.js.shdの中身が編集できて、保存するとa.js.shdの一行目のコマンドを実行した結果がa.jsに保存される。
CoffeeScriptで書き進めながらリポジトリにはコンバート結果のみコミットするという使い方が可能。
CoffeeScriptに限らず汎用的に使えるのが良い。

まとめ

生ujihisaを見れた=D
vimの世界を知るには実際に使ってるところを見るのが一番でした。
早速、気になったプラギンを入れてプライベートなコーディングから使ってみようと思います。
参加された皆様、お疲れさまでした!

凡才人の春祭り vol.0 で「ピコピコ音楽と初音ミク」のプレゼンをしました

元同僚のさえきさん[twitter:@saekisms]が主催する「凡才人の春祭り vol.0」にskypeで参加して「ピコピコ音楽と初音ミク」というタイトルでプレゼンをしました。

参加者のジャンルは音楽×医療×若干ITで、初音ミクに馴染みのない方も多いだろうということで、前半は初音ミクについて広く浅く紹介、後半は音楽ネタに絡めてFM音源ファミコンの音作りについて話して、最後に耳コピ初音ミクの曲を流して締めました。

蓋を開けてみれば初音ミクは結構認知度が高くて半数以上、ファミコンネタも懐かしいという声がチラホラありました。即興で流したゴルフのSEが受けが良かったみたいですw

凡才人の春祭りの事の発端はさえきさんが山口県WEB勉強会USTREAMを見てて、東京でも気兼ねなく参加できて楽しいイベントをやりたい、と思って始めたそうで、そういった意味ではSkypeでこちらから見てて楽しそうだな〜と思ったので大成功ではないでしょうか。

USTREAM録画

スライド「ピコピコ音楽と初音ミク

気づきとまとめ

  • Skypeで繋いでたので、呼びかけたときにリアルタイムで反応があることに驚いた人が多かった。
  • プレゼン資料をプロジェクターに映した都合で私の姿が映ってなかったので、声だけの謎の人になっていた。

今回はリアルタイム性・解像度・音質を優先して、資料と曲データを先に現地に送って声とソフトシンセの音をSkypeで送ってプレゼンしました。カメラはSkypeで繋がっていて向こうの反応がリアルタイムに分かったのでプレゼンはしやすかったです。初音ミク知ってる人〜?とか。

こちらから全部まとめてUSTREAMで流すとスライドの画質が落ちる、現地の反応がリアルタイムにわからないというデメリットがあるのでここはトレードオフ。こちらの発表のUSTを流しておくと解決するかな?

懇親会にもSkypeでよばれて参加してましたが、途中でモバイルルーターのバッテリーが切れて放り出されてしまいましたw
WiFi付き飲み屋って一部方面に需要があるんじゃないかな!

あと自宅参加のメリットは、機材使いたい放題。ソフトシンセにMIDIキーボード、オーディオデバイスがフル活用できるので外でできないようなプレゼンもできてしまいます。これはこれでおもしろいですね。

UST見てSkypeの音声を聴きつつ、こちらから声とソフトシンセ、+αでPCの音、ミクの声などSkypeに送り出すのが頭を使って楽しいのでこれもLTネタになりそうです。

OpenOffice.orgとRubyを使ってWordファイルをバッチ処理する

RubyとCOM

WordやExcel*1はCOM(Component Object Model)を通して外部から操作することができます。

  • ファイルを開く
  • 文字列を置換する
  • 印刷する
  • 保存する
  • 別名で保存する
  • 形式を変更して保存する

これらの操作を組み合わせてフォーマットの一括変換や定型文書の差し込み処理を行うことができます。

RubyにはWin32OLEライブラリが付属していてCOMオブジェクトを操作することができます。RubyからWord・Excelを操作する場合、通常はMicrosoft OfficeのCOMを呼び出すことになります。

つまりRubyでWord・Excelバッチ処理したいマシンにはMicrosoft Officeがインストールされている必要があります。しかし、ここでMicrosoft Officeと互換性のあるOpenOffice.orgのCOMを使うことができます。

OpenOffice.orgのCOMを使うことのメリットはMicrosoft Officeのライセンスを用意しなくてもWordやらExcelバッチ処理用マシンを作れる点にあります。デメリットは互換性の低さで、保存する形式によっては罫線が崩れたりすることがあります。

サンプルプログラム

d:\document1.doc にHello World!と書いたWordファイルを置いて下記のスクリプトを実行するとGoodBy World!に置換されたdocument2.docが作成されます。

ソースコード

win32ole_ooo.rb

#! ruby -Ks
# -*- coding: shift_jis -*-
require 'win32ole' 

# OOoのCOMオブジェクトを作成
manager = WIN32OLE.new('com.sun.star.ServiceManager') 
stardesktop = manager.createInstance('com.sun.star.frame.Desktop') 

load_url = "file:///d:/document1.doc"
save_url = "file:///d:/document2.doc"

# ファイルを開く
doc = stardesktop.loadComponentfromUrl(load_url, '_hidden', 0, []) 

# テキストの取得(置換前)
text = doc.getText.string()
p text

# 置換
replace = doc.createReplaceDescriptor
replace.SearchString  = "Hello"
replace.ReplaceString = "GoodBy"
doc.replaceAll(replace)

# テキストの取得(置換後)
text = doc.getText.string()
p text

# 形式を指定して保存
opt = manager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
opt.Name  = "FilterName"
opt.Value = "MS Word 97"
#opt.Value = "MS Word 2003 XML"
#opt.Value = "text"

property = [opt]
doc.storeAsURL(save_url, property) 

# オブジェクトを破棄
doc.dispose()

実行結果

D:\>ruby win32ole_ooo.rb
"Hello World !"
"GoodBy World !"

参考サイト

RubyでWin32OLEの基本から
るびま

プログラミング言語からCOM経由でOOoドキュメントを操作するサンプルコード
http://www.oooforum.org/forum/viewtopic.phtml?t=9815

テキスト部位の置換
http://download.oracle.com/docs/cd/E19535-01/819-1332/faaki/index.html

OpenOffice.org BASIC プログラミングガイド
http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/StarDesktop

*1:PowerPoint、その他Windowsアプリケーション含む

CakePHP+PostgreSQLのセットアップ on Ubuntu 10.10

CakePHP+PostgreSQLの組み合わせで開発できるようにするメモ。

LAPP環境の構築、アクセス制御の設定が終わっていることが前提です。
LAMP/LAPP環境の構築 on Ubuntu 10.10 - mikage014の日記
PostgreSQLのアクセス制御 - mikage014の日記

CakePHPの配置

http://cakephp.jp/ から CakePHP 1.3.8 をダウンロードします。

ホームディレクトリの/work_php/cakephp に配置します。

$ mkdir work_php

$ cd ~/ダウンロード
$ unzip cakephp-cakephp-1.3.8-0-g33afe21.zip
$ mv cakephp-cakephp-41cd0e4 ~/work_php/cakephp

http://localhost/work_php/ で開発用ディレクトリにアクセスできるようにシンボリックリンクを作ります。

$ cd /var/www
$ sudo ln -s /home/mikage/work_php/

Apacheの設定

CakePHPmod_rewriteが有効になっていること、AllowOverrideが有効になっていることを期待しています。

デフォルトではmod_rewriteが無効になっているので有効にします。

$ sudo a2enmod rewrite
Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

デフォルトではAllowOverrideが無効になっているので有効にします。
sudo vi /etc/apache2/sites-available/default

     <Directory /var/www/>
         Options Indexes FollowSymLinks MultiViews
         DirectoryIndex index.php index.html
         #AllowOverride None			(変更)
         AllowOverride All			(追加)
         Order allow,deny
         allow from all
     </Directory>

設定の再読込み

$ sudo service apache2 reload

CakePHPの動作確認

CakePHPにブラウザでアクセスします。
http://localhost/work_php/cakephp/index.php

mod_rewriteとAllowOverrideが無効の時はcssが読み込まれず、下のような画面になります。

アクセス権の変更

tmp配下を読み書きできるようにします。

$ chmod -R 777 work_php/cakephp/app/tmp/

tmpのアクセス権を変更すると警告が減ります。

CakePHP - core.phpの設定

パスワードやCookieの暗号化に使うパラメータ(乱数)をデフォルト値から変更します。

$ cd ~/work_php/cakephp/app/config/
$ vi core.php
/**
 * A random string used in security hashing methods.
 */
    Configure::write('Security.salt', 'ランダムな英数字');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
    Configure::write('Security.cipherSeed', 'ランダムな数字');

さらに警告が減りました。

CakePHP - database.phpの設定

DBの作成

PostgreSQLでDBを作成します。

$ sudo su - postgres
$ createuser cakeuser -P
	新しいロールのパスワード: 【パスワード】
	もう一度入力してください: 【パスワード】
	新しいロールをスーパーユーザとしますか? (y/n) n
	新しいロールにデータベース作成権限を与えますか? (y/n) y
	新しいロールにロールを作成する権限を与えますか? (y/n) n
$ createdb -U cakeuser -O cakeuser cakedb
	パスワード: 【パスワード】
database.phpの設定
$ cd ~/work_php/cakephp/app/config/
$ cp database.php.default database.php
$ vi database.php
<?php
class DATABASE_CONFIG {

    var $default = array(
        'driver' => 'postgres',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'cakeuser',
        'password' => 'cakeuser',
        'database' => 'cakedb',
        'schema' => 'public',
        'prefix' => '', 
    );  

}
?>

すべての警告がなくなれば準備完了です。

PostgreSQLのアクセス制御

apt-getでインストールしたPostgreSQLはデフォルトではlocalhostからのみ接続を受け付けるようになっています。また、ホスト名を指定しないローカル接続(unixドメインソケット)ではOS上に存在するユーザーのみ接続が許可されています。

localhost以外からの接続

他のホストから接続を受け付けるには、postgresql.confとpg_hba.confを編集します。

'*'ですべてのホストからの接続を許可。

$ sudo vi /etc/postgresql/8.4/main/postgresql.conf
listen_addresses = '*'			(追加)
#listen_addresses = 'localhost'

接続したいネットワークアドレスを追加。

$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
host    all         all         192.168.1.0/24        md5	(追加)

ローカル接続時のパスワード認証での接続

OS上にユーザーが存在しなくても接続できるようにするにはident認証からパスワード認証に変更します。

$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf
# "local" is for Unix domain socket connections only
#local   all         all                               ident	(変更)
local   all         all                               md5	(追加)

設定の反映

設定ファイルをリロードします。

$ sudo service postgresql reload
 * Reloading PostgreSQL 8.4 database server                              [ OK ] 

LAMP/LAPP環境の構築 on Ubuntu 10.10

LAMP(Linux + Apache + MySQL + PHP), LAPP(Linux + Apache + MySQL + PHP)環境が動くようにしてみます。
CentOSと比べるとapt-getで自動起動設定までしてくれるので楽です。

PostgreSQL

インストール
$ sudo apt-get install postgresql

configファイルは /etc/postgresql/8.4/main/ に配置されています。pg_hba.conf, postgresql.confなどを変更する場合はここを編集します。

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/8.4/main/postgresql.conf

OS上のposrgresユーザーのパスワード設定

postgresはPostgreSQLの管理用ユーザーです。DBの作成、削除、ダンプ、リストアなどの操作を行うときはpostgresユーザーで実行します。

$ sudo passwd postgres
新しいUNIXパスワードを入力してください: 【パスワード】
新しいUNIX パスワードを再入力してください: 【パスワード】
passwd: パスワードは正しく更新されました
DB上のpostgresユーザーのパスワード設定

OS上のユーザーpostgresとは別に、DB上の管理者ユーザーとしてpostgresが設定されています。postgresユーザーの権限は強力で、操作ミスが他のDBに影響を及ぼすので、サービス毎にDBとそれを管理するユーザーを作ってそのDBだけに権限を与えるようにするのがベターです。

$ sudo su - postgres
$ psql
psql (8.4.7)
"help" でヘルプを表示します.

postgres=# alter user postgres with password 'パスワード';
ALTER ROLE
postgres=# \q

$ exit
動作確認

PostgreSQLに接続してDBの一覧を表示します。

$ sudo su - postgres
$ psql -l
		                                     データベース一覧
	   名前    |  所有者  | エンコーディング |  照合順序  | Ctype(変換演算子) |      アクセス権       
	-----------+----------+------------------+------------+-------------------+-----------------------
	 postgres  | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        | 
	 template0 | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        | =c/postgres
		                                                                      : postgres=CTc/postgres
	 template1 | postgres | UTF8             | ja_JP.utf8 | ja_JP.utf8        | =c/postgres
		                                                                      : postgres=CTc/postgres

MySQL

インストール
$ sudo apt-get install mysql-server

インストール途中でMySQL上のrootのパスワードを設定します。

動作確認

MySQLに接続してDBの一覧を表示します。

$ mysql -u root -p
	Enter password: ********
mysql> show databases;
	+--------------------+
	|     Databases      |
	+--------------------+
	| information_schema |
	| mysql              |
	+--------------------+

mysql> \q

Apache

インストール
$ sudo apt-get install apache2
動作確認
$ apache2 -v
Server version: Apache/2.2.16 (Ubuntu)
Server built:   Nov 18 2010 21:17:29

PHP

インストール

phpと一緒にmysql, postgresql用のモジュールをインストールします。php-gd, php-pearなどをここで一緒に入れてもいいですし、必要な時に後から追加することもできます。

$ sudo apt-get install php5 php5-mysql php5-pgsql
動作確認
$ php -v
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Apache+PHP

設定

ディレクトリ指定のURLでindex.phpを優先的に表示するようにします。

$ sudo vi /etc/apache2/sites-available/default

     <Directory /var/www/>
         Options Indexes FollowSymLinks MultiViews
         DirectoryIndex index.php index.html			(追加)
         AllowOverride None
         Order allow,deny
         allow from all
     </Directory>
設定の反映

configファイルをリロードします。

$ sudo service apache2 reload

Apache+PHPの動作確認

/var/www/phpinfo.php に以下の内容のファイルを作成します。

<?php
phpinfo();
?>

ブラウザで http://localhost/phpinfo.php にアクセスします。

phpinfoの結果が表示されればApachePHPが動作しています。


スクロールしていってmysqlの項目があればphp-mysqlモジュールが正しくロードされています。


pgsqlの項目があればphp-pgsqlモジュールが正しくロードされています。

NetBeans 7.0のインストール on Ubuntu 10.10

統合開発環境 NetBeans 7.0のインストールメモ。

ダウンロード

http://netbeans.org/downloads/ からLinux(x86/x64)用のパッケージをダウンロードします。


インストール

シェルからダウンロードしたインストーラーを実行します。

$ cd ~/ダウンロード
$ sudo sh netbeans-7.0-ml-php-linux.sh


ウィザードに従ってインストールを進めます。


インストール先の指定。そのままでOKです。


メニューからNetBeans IDE 7.0を起動します。


これでNetBeansが使えるようになります。