vim勉強会#7&kanasan.coffeeに参加しました
5/7に尼崎でvim勉強会があるという情報を入手したので、帰省ついでに四国に渡り道後温泉に浸かって高松でうどんを食べたりしながら兵庫県に入ってvim勉強会#7&kanasan.coffeeに参加しました。
vim勉強会#7
席に着いてみるとMac率が非常に高い。9割くらいMacで圧倒される。
始まってみると、どなたかがTwitterで呟いていた「僕の知ってるvimと違う」状態。
SolarisやLinuxのスタートアップで触ることがほとんどでプラグイン無しの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
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/
CoffeeScriptはJavaScriptにコンバートできる小さな言語。セマンティックは同じ、シンタックスが異なる。
やりたいことをコードに落とし込む過程の、やりたいことをそのまま記述できる感じ。
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 !"
参考サイト
プログラミング言語から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の設定
CakePHPはmod_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が読み込まれず、下のような画面になります。
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
動作確認
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