短期記憶をトレーニングする3つの理由

最近、Androidアプリで短期記憶をトレーニングしてたら効率があがったので、みんなにも知ってもらいたくてブログに書く。誰もこれをみていないことは置いといて。

短期記憶を鍛えるメリット

  • 忘れ物がなくなる
  • 話が上手になる
  • 集中力が上がる
  • 作業効率が嘘のように上がる

自分が感じているのはこんな感じ。なんでそういう結果が得られるんだろうか。考えてみたのは以下の3つの理由から。

記憶の定着率の向上

なんか当たり前のことのようだが、それだけではない。
例えば、以前の私は話の途中で話のキーワードを忘れることが多々あった。それを思い出すために、ひとつ、ふたつ前の文章を思い出し、あぁ、そうだ、このキーワードについて話しているんだった、と、キーワード自体を思い出す作業が発生していた。短期メモリに記憶しておけば、その作業はせずに話の筋/構成を見渡すことができる。

理解の速度の向上

上で述べたことは、そのまま理解の向上につながる。毎回毎回話の構成を構築しなおす必要がないのだ。文章の組み立てを記憶しながら話を聞くことができ、それは聞くことだけではなくて話すときにも効果は発揮される。
例えば、話がまとまらない、何について話をしているかわからない人だった私は、実は長い話をする時には話をしている自分自身が何について話をしているか忘れていたのだ。話す目標を記憶することで、きちんとオチをつけられる話になる。

並列処理ができるようになる

短期メモリに記憶することで、他の作業も同時並行で行えるようになる。
例えば、英語の文章を読むときに知らない単語が出てくると、必然的に辞書を引く作業が発生する。以前までの私だと、文章の構成を忘れ、話の筋を忘れて単語の意味を調べる作業に没頭し、元に戻る時にはすっかり筋を忘れてしまい、またいくつか戻ったところから話を読むことが多かった。(完全なパラレルではないが、短期記憶が悪いとそこまでひどくなる)


以上、なんか私がここまで書くとひどいアルツハイマー一歩手前みたいなイメージがあると思うが、実はそうかもしれないw
でも、日常はみなさんと同じように過ごせているし、そこまで忘れ物がひどいわけでもない。ただ、話は下手だし、作業効率は悪いし、理解も遅かった。短期記憶って、それだけ大事だなーと、実感したのであります。

どうやって短期記憶を鍛えるか

Android のアプリを見つけたのがきっかけ
Androidアプリ ゲーム編 記憶力トレーニング「Memory Trainer」|NIFの楽園(ビギン)
これ、英語だけどそれさえ乗り越えれば、だいぶ良い鍛錬になった。
毎朝1回から2回トレーニングするだけ。


オススメ。

Node.js インストールしてみた

いまさらながら Node.js をインストールしてみた。いまさらすぎて、世間に出てる記事の通りに書いても、仕様が変わったりバージョンが違ったりでうまく動かなかったので、現時点(2011/07/15)で動くようになったところまでのメモ。
OS: MacOSX 10.6.7

Node.js 本体のインストール

どうやらMacPortsに登録されているっぽいので、MacPorts経由でインストール。
まずは ports の更新から

$ sudo port selfupdate
$ sudo port upgrade outdated

んで、node 本体のインストール

$ sudo port install nodejs

ここで v0.4.9 がインストールされた。一応 which で確認。

$ which node
/opt/local/bin/node

動作確認

こんな感じのスクリプトを書いて hello.js で保存する。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

そして、下記のコマンドでサーバー起動。

$ node hello.js  # ちなみに、 "node hello" みたいに拡張子なしでも動くっぽい
Server running at http://127.0.0.1:1337/

これで、1337 ポートで待ち受けることに成功。ブラウザで http://127.0.0.1:1337/ にアクセスして "Hello World" が表示されたら成功。終了は Ctrl+C で。


パッケージの導入

このへんが一番はまった。
どうやら npm っていうパッケージ管理コマンドをインストールするのに、nodejs が 0.4.1 以下じゃないとインストールできないと言われる。なので、nave という、nodejs の実行環境を切り替えられるパッケージをまず導入する。


nave のインストール
$ git clone http://github.com/isaacs/nave.git

このとき、nave ディレクトリの中にある nave.sh にパスを通しておくと楽。自分は /usr/local/src に展開して /usr/local/bin にシンボリックリンクをおいた。

$ sudo ln -s /usr/local/src/nave.sh /usr/local/bin/nave

この nave というコマンドは nodejs のバージョンの管理をしてくれる。例えば、最新の nodejs を使いたい場合は

$ nave install latest
$ nave use latest

とやると、今後 node コマンドを使用したときはその時の最新バージョン(今回は 0.5.0 あれ・・・、stableは0.4.9じゃないん・・・?)が使用される。
さて、今回は npm のインストールに 0.4.1 以下である必要があったので、0.4.1 を導入する。

$ nave install 0.4.1
$ nave use 0.4.1

これで、きっと nodejs のバージョンは 0.4.1 が使われるはず。ちょっと確認。

$ node -v
v0.4.1

うん、OKですね。


npm のインストール

そのへんのブログとか記事とかのとおり、

$ curl http://npmjs.org/install.sh | sh

ってやっても sudo つけても自分の環境では動かなかったので、段階的にやってみた。
まずは install.sh をダウンロードする

$ wget http://npmjs.org/install.sh

権限みてみる。

$ ls -l install.sh
-rw-r--r--  1 root      staff  3902  7  7 10:03 install.sh

実行できなさそう。権限変更する。ローカル環境だし、777でいいかな。

$ sudo chmod 777 install.sh

それで実行してみる。

$ ./install.sh
fetching: http://registry.npmjs.org/npm/-/npm-1.0.15.tgz
0.4.1
1.0.15
prefix=/Users/katsuren/.nave/installed/0.4.1

This script will find and eliminate any shims, symbolic
links, and other cruft that was installed by npm 0.x.

Is this OK? enter 'yes' or 'no' 
yes

All clean!
! [ -d .git ] || git submodule update --init
node cli.js cache clean
node cli.js rm npm -g -f --loglevel error
node cli.js install -g -f
npm ERR! Could not create /Users/hoge/.nave/installed/0.4.1/lib/node_modules/___npm.npm
npm ERR! error installing npm@1.0.15 Error: EACCES, Permission denied '/Users/hoge/.nave/installed/0.4.1/lib/node_modules'
npm ERR! Error: EACCES, Permission denied '/Users/hoge/.nave/installed/0.4.1/lib/node_modules'
npm ERR! 
npm ERR! Please use 'sudo' or log in as root to run this command.
npm ERR! 
npm ERR!     sudo npm "install" "-g" "-f"
npm ERR! 
npm ERR! or set the 'unsafe-perm' config var to true.
npm ERR! 
npm ERR!     npm config set unsafe-perm true
npm ERR! 
npm ERR! System Darwin 10.7.4
npm ERR! command "node" "/private/var/folders/QJ/QJ8FnYySGnyW-huwb0AqP++++TI/-Tmp-/npm.87904/package/cli.js" "install" "-g" "-f"
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /private/var/folders/QJ/QJ8FnYySGnyW-huwb0AqP++++TI/-Tmp-/npm.87904/package/npm-debug.log
npm not ok
make: *** [install] Error 13
npm WARN Not installed in /Users/hoge/.nave/installed/0.4.1/lib/node_modules npm
npm ERR! Could not create /Users/hoge/.nave/installed/0.4.1/lib/node_modules/___npm.npm
npm ERR! error installing npm@1.0.15 Error: EACCES, Permission denied '/Users/hoge/.nave/installed/0.4.1/lib/node_modules'
npm ERR! Error: EACCES, Permission denied '/Users/hoge/.nave/installed/0.4.1/lib/node_modules'
npm ERR! 
npm ERR! Please use 'sudo' or log in as root to run this command.
npm ERR! 
npm ERR!     sudo npm "install" "." "--force" "--global"
npm ERR! 
npm ERR! or set the 'unsafe-perm' config var to true.
npm ERR! 
npm ERR!     npm config set unsafe-perm true
npm ERR! 
npm ERR! System Darwin 10.7.4
npm ERR! command "/Users/hoge/.nave/installed/0.4.1/bin/node" "/private/var/folders/QJ/QJ8FnYySGnyW-huwb0AqP++++TI/-Tmp-/npm.87904/package/cli.js" "install" "." "--force" "--global"
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /private/var/folders/QJ/QJ8FnYySGnyW-huwb0AqP++++TI/-Tmp-/npm.87904/package/npm-debug.log
npm not ok
It failed

んー、なんかパーミッションがおかしいらしい。sudoつけちゃえ。

$ sudo ./install.sh
fetching: http://registry.npmjs.org/npm/-/npm-1.0.15.tgz
0.4.1
1.0.15
prefix=/Users/hoge/.nave/installed/0.4.1

This script will find and eliminate any shims, symbolic
links, and other cruft that was installed by npm 0.x.

Is this OK? enter 'yes' or 'no' 
yes 

All clean!
! [ -d .git ] || git submodule update --init
node cli.js cache clean
node cli.js rm npm -g -f --loglevel error
node cli.js install -g -f
/Users/hoge/.nave/installed/0.4.1/bin/npm -> /Users/hoge/.nave/installed/0.4.1/lib/node_modules/npm/bin/npm.js
/Users/hoge/.nave/installed/0.4.1/bin/npm-g -> /Users/hoge/.nave/installed/0.4.1/lib/node_modules/npm/bin/npm.js
/Users/hoge/.nave/installed/0.4.1/bin/npm_g -> /Users/hoge/.nave/installed/0.4.1/lib/node_modules/npm/bin/npm.js
npm@1.0.15 /Users/hoge/.nave/installed/0.4.1/lib/node_modules/npm 
It worked

お、ちゃんと入りましたね。一応確認

$ which npm
/Users/hoge/.nave/installed/0.4.1/bin/npm
$ npm -v
1.0.15

npm のバージョンは 1.0.15 ですね。


パッケージのインストール

とにもかくにも、俺は WebSocket が使いたいんじゃあああ!!!ということで、Socket.io を入れる。ついでに express も。

$ npm install socket.io
socket.io@0.7.7 ./node_modules/socket.io 
├── policyfile@0.0.3
├── redis@0.6.0
└── socket.io-client@0.7.4
$ npm install express
express@2.4.3 ./node_modules/express 
├── mime@1.2.2
├── qs@0.2.0
└── connect@1.6.0
動作確認

とりあえず、require した時点でエラーがでてないか確認する。test.js に下記のソースを書く。

var io = require('socket.io');
var express = require('express');

動かす。

$ node test.js

ここで、エラー吐いて落ちるようであれば、インストールに失敗している。


懸念点

ここで、npm 使ってパッケージをインストールしたら、npm 使ったカレントディレクトリに "node_modules" っていうディレクトリができて、そこにパッケージがインストールされちゃうらしい。nave つかってるからだと思うんだけど、このへんをうまく解決できなかった。別に設定ファイルかなんかがあるのかな。



パッケージを使ってみる。

node.jsはじめました - KAYAC engineers' blog
このへんのソースを参考にやって見た。
この記事が書かれた当初からバージョンが変わってるっぽくて、いろいろ動かなかった。ソース自体は記事を参考にしてもらうとして、変更した箇所だけ抜粋する。
GitHub - socketio/socket.io: Realtime application framework (Node.JS server)
このへんに Socket.io のバージョン 0.6 -> 0.7 の変更点もあったので、参考にした。

まずはサーバー側。ソケットの扱いが変わってるっぽいので、編集。

var io = require('socket.io');
var socket = io.listen(app);
socket.on('connection', function(client) {
    client.on('message', function(msg) {
        client.send(msg);
        client.broadcast(msg);
    });
});

var io = require('socket.io').listen(app);
io.sockets.on('connection', function(client) {
    client.on('message', function(msg) {
    	client.broadcast.emit('message', msg);
    });
});

そしてクライアント側。

var socket = new io.Socket();
socket.on('message', function(msg) {
  var div = document.createElement('div');
  div.appendChild(document.createTextNode(msg));
  document.body.appendChild(div);
});
socket.connect();

var socket = new io.connect();
socket.on('message', function(msg) {
  var div = document.createElement('div');
  div.appendChild(document.createTextNode(msg));
  document.body.appendChild(div);
});

こんな感じで動くようになった。

MAMP 使わずに Mac で Apache/PHP を動かしてみる

今転職活動をしていて、Flash しか経験した言語がないとかだとゲームとかデザインとか微妙な職種しか募集してないので、募集が多いPHPとかひさしぶりに勉強してみた。VMWare とか Linux のイメージディスクをダウンロードしてると3時間とか言ってるので、我慢できずにすでにMacにプリインストールされてるPHPApacheで動かすところまで頑張ってみた。

Apacheの起動

MacはデフォルトでApache2.2がインストールされているっぽい。こいつは /usr/sbin/apachectl ってやつをstart/stop/restartすると起動したり停止したりできる。ただし、root権限が必要なので、下記のようにsudoとか、suとかしないとダメ。

$>sudo /usr/sbin/apachectl start

起動したら、ブラウザで
http://localhost/ とか、
http://localhost/~ユーザー名 とか
とかを確認してみて、動いてたら成功。失敗してたらログを見て原因を探る。
ログは、/private/var/apache2/log/ あたりに access_log とか error_log とかがあるので、それを見る。 また、動いたかどうかは sudo ps aux | grep httpd とかでも確認できる。起動に失敗したら httpd プロセスが動いてない。

PHPを有効にする

デフォルトではPHPが有効になってないので、

<?php
print("Hello, World!\n");
?>

とかって書くと、"Hello, World!" っていう文字列だけが表示されて欲しいところ、このスクリプトがそのまま表示されてしまう。.php拡張子のファイルは、phpとして処理してもらうようにApacheの設定を書き換える。Apache の設定ファイル、いわゆる "conf" ファイルは、/etc/apache2/ にある httpd.conf を書き換える。編集したあと、文字コードが云々のエラーでApacheが起動しなくなったら悲惨なので、必ずバックアップをとってから作業すること。このファイルも編集にはroot権限が必要なので、sudoをつけつつviとかemacsとか好きなエディタで編集する。
phpで検索して、
#LoadModule php5_module libexec/apache2/libphp5.so
って書かれてる場所をさがして、そこの行頭の"#"を削除する。これだけ。
編集した後はApacheを再起動して、
http://localhost/
にアクセスできるか確認する。できてなかったらなんかおかしいのでもういっかい最初からやり直す。アクセスできていたら、/Library/WebServer/Document/ に、index.php というファイルを作成し、

<?php
print("Hello, PHP!");
?>

という内容を書きこむ。
そして http://localhost/index.php をブラウザで開き、"Hello, PHP!" が表示されたら成功。

バーチャルホストを切る

バーチャルホストとはなんぞや、というと簡単にいえば今まで "localhost" という名前でアクセスしてきたけど、開発環境が色々ごちゃごちゃしてきたら、ホスト名を変えて管理したくなってくる。たとえば、www.katsuren.com というのがあったとして、これをテストする環境は test.katsuren.com で、開発は dev.katsuren.com とか。田中さんからの発注があって、そのホストは www.tanaka.com なんだけど、ローカルで開発するときは local.tanaka.com だとか。そんな感じ。
この設定も、Apache の conf ファイルを編集する。すでにこの設定ファイルが外部に出されているので、これを編集することにする。具体的には /etc/apache2/users/"ユーザー名".conf だ。こいつに以下の記述を追記する。

<Directory "/Users/ユーザー名/works/dev.katsuren.com">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all 
</Directory>

<VirtualHost *:80>
    ServerAdmin あなたのEメール
    DocumentRoot "/Users/ユーザー名/works/dev.katsuren.com"
    ServerName dev.katsuren.com
    ServerAlias dev.katsuren.com
    ErrorLog "/private/var/log/apache2/dev.katsuren.com/error_log"
    CustomLog "/private/var/log/apache2/dev.katsuren.com/access_log" common
</VirtualHost>

ここで、ドキュメントルートとなる
/Users/ユーザー名/works/dev.katsuren.com とか、
ログ出力先となる
/private/var/log/apache2/dev.katsuren.com は、
ディレクトリがないとApache再起動のときにエラーで起動ができなくなってしまうので、先にディレクトリを作成しておく。
次に"dev.katsuren.com"をhostsに登録しておく。

127.0.0.1 dev.katsuren.com

そしてApache再起動。/Users/ユーザー名/works/dev.katsuren.com/ に上で作った index.php あたりをコピーして、
http://dev.katsuren.com/index.php にブラウザからアクセス、"Hello, PHP!" が表示されたら成功。


こんな記事かいてるうちにディストリビューションのダウンロードが終わったー!Linuxの構築しよう♪

UML4AS 導入してみた

インストールメモ。
ActionScriptUML を作成できる Eclipse ベースのプラグイン

ユーザー登録

http://www.uml4as.com/forum/index.php?action=register
このあたりからユーザー登録する。(英語)

ダウンロード

UML4AS - UML for ActionScript and Flex - Download
このページの uml4as_site_1.0.0.M2u2_2011-01-12.jar をダウンロードする。新しいほうの M3 っていうバージョンはライセンスキーがまだリリースされていないらしい。なんか誤解されるとイヤなので一応書いておくと、オープンソースにはフリーライセンスらしく、ライセンスキーリクエストするといいらしい。それは下記のURLとかを参考にすると幸せなのかも。何もしないと30日トライアル。
http://www.uml4as.com/forum/index.php?topic=220.0
ダウンロードが完了したら、FlashBuilder の plugin フォルダとかにおいておく。

インストール

FlashBuilder を開き、メニューの [ヘルプ] -> [新規ソフトウェアをインストール] を選択。
ダイアログが表示されるので、追加ボタンをクリック。
アーカイブボタンをクリックし、先ほどダウンロードした jar ファイルを選択する。
操作対象に「ローカルサイトのみ」を選択すると、「Flower Modering Platform - UML4AS」っていうのがリストに表示されるので、そいつをチェックして「次へ」をクリック。
あとはEclipseにしたがって作業をすすめていき、再起動したら完了。

チュートリアル

UML4AS - UML for ActionScript and Flex - Getting Started Tutorial
このへんのヤツを超絶簡易和訳してみる。

1. モデリングファイルを作成
  1. 新規に Flex プロジェクトを作成し、「MyFirstUML4ASProject」と名前をつける。
  2. そのプロジェクトフォルダ直下に、「model」というフォルダを作成する。
  3. modelフォルダを右クリックし、
    1. 「新規」->「その他」->「Flower Modeling Platform」->「UML4AS」を選択、
    2. ファイル名は「model」にし、
    3. ソースフォルダは「src」フォルダを選択する。

これで、model/model.uml4as ファイルができあがる。

2. プロジェクトエクスプローラー/自動同期

とりあえずパースペクティブバーに「Flower Modeling」パースペクティブを追加し、切り替える。すると、プロジェクトエクスプローラーの model.uml4as の左側に+マークがでてくるはず。こいつを展開することでいろいろ編集/確認とかができるみたい。
自動同期の設定は Eclipse の環境設定から「Flower Modeling Platform」を選択し、「Enable automatic synchronization」にチェックを入れればいいらしい。これはデフォルトではオンだそうだ。

3. ソースファイルの追加と修正

適当にファイルを追加する。

  • com.url4as.example.MyInterface と適当な関数
  • com.url4as.example.MyClass と適当な属性/関数

このとき、モデリングファイルが修正されていることを確認すべし。

・・・って書かれてるけど、なんかすごく適当すぎるので、それぞれのファイルは下記のようにする。
MyInterface.as

package com.uml4as.example
{
	public interface MyInterface
	{
		public function get value():String;
		public function myMethod1(param:int):String;
	}
}

MyClass.as

package com.uml4as.example
{
	public class MyClass implements MyInterface
	{
		public function MyClass()
		{
		}
		
		private var _value:String;
		
		public function get value():String
		{
			return _value;
		}
		
		public function myMethod1(param:int):String
		{
			return param.toString();
		}
	}
}
4. ダイアグラムの扱い

ダイアグラムの編集方法は下記の2パターン

  • モデルツリーの編集の反映
  • ダイアグラムから直

とりあえず、ダイアグラムを作ってみる。

  1. Flower Modeling パースペクティブで、「model.uml4as」直下のRootフォルダを右クリック、
  2. 「Create Element」->「Package」を選択
  3. 作成されたフォルダを「Diagrams」にリネームする
  4. Diagramsフォルダを右クリックし、
  5. 「Create Diagram」->「Class Diagram」を選択する

これで、ダイアグラムファイルができあがるので、それを編集していく。(ここまでが上記の前者の話かな?)

  1. 作成されたDiagramファイルをダブルクリック
  2. プロジェクトエクスプローラーの model 内のクラスやインターフェイスワークスペースドラッグアンドドロップする
  3. すると、クラスやインターフェイスのダイアグラムが作成される。(上記で記述した内容はすでに反映されているはず)
  4. MyClass ダイアグラムを選択してマウスオーバーすると、編集メニューが出てくるので「Add Related Elements and Display Relations」を選択。(MyInterface との関係を示す矢印が表示される)
  5. MyFirstUML4ASProject ダイアグラムを選択し、attribute の右にある四角のマークをクリックして属性を追加する
  6. 「+myClass:MyInterface」と入力する
  7. 追加された「myClass」を選択し、「Create Association for Attribute」をクリックする。(MyInterfaceとの関係が表示される)
  8. 追加された関係の「Association1」、「attribute1」その下の「1..1」をそれぞれ選択し、「Hide Label」で非表示にする。
  9. これでダイアグラムを保存すると、mxml 側にも反映されている(myClass)ことが確認できる(自動同期している場合)

(これは後者の話っぽい)

5. ActionScript and Analysis Elements, SrcDirs

モデルには二つのタイプのエレメントがある。

  • analysis elements
    • 例えば、パッケージ、クラス、オペレーションなど。これらはソースコードと同期しない。
  • language specific elements(この場合はActionScript
    • ツリーから編集したり、ダイアログを編集したときに作成され、ソースコードに影響するエレメント。
6. ダイアグラムにて新しいタイプの追加

これも二つの方法がある。
一つ目はエレメントをツリーから作成し、ダイアグラムにドラッグアンドドロップする。具体的には、

  1. モデルツリーのcom.uml4as.exampleフォルダを右クリックする
  2. 「Create ActionScript Element」-> 「Class」を選択
  3. 「MyClass1」 にリネーム
  4. 追加したエレメントをダイアグラムにドラッグアンドドロップする

この場合、UML4AS上ではクラスエレメントを作成して保存しても、ソースコードには反映されなかった。(これでいいのかな・・・?)
別の方法はダイアグラム上からクラスエレメントを作成する。こっちもソースコードには反映されなかった。謎。

7. モデルプロパティビュー、ドキュメンテーションビュー
  • モデルプロパティビュー
    • モデルプロパティビューは選択したモデルエレメントのプロパティが有効かどうかを表示する。このビューを表示するには、「ウィンドウ」->「ビューの表示」->「Model Properties」を選択。
  • ドキュメンテーションビュー
    • ドキュメンテーションビューは選択したモデルエレメントのドキュメントを表示する。このビューを表示するには「ウィンドウ」->「ビューの表示」->「Documentation」を選択。
8. 次のステップ

フォーラムに参加したらいいじゃない。




これ入れたら設計楽になるかなー。

ASのSoundクラスをいじってみた

アプリを作ろうとSoundクラスをいじってみたのでログ残す。

まずはSoundクラスにある例をそのまま書いてみた。sin波をそのまま出力するサンプルらしい。

Sound sample - wonderfl build flash online


おー、音が鳴った!

しかし、イマイチ仕組みがよくわからんのでもう少し調べてみる。

音とは?

まずは音とはなんぞやと考えてみる。
音とは、波である。こいつは1秒間に何回か振動している。単純なサイン波であれば、0から始まって1まで緩やかにカーブして-1まで落ち、また0に戻る、アレ。この波のY軸の値をスピーカーに渡すと、スピーカーがそれに沿って振動して音を出してくれるらしい。

デジタル化すると?

その音を処理するためには、アナログのままだとコンピューターが認識できない。ので、数値で表さなければならない。この処理のことをクオンタイズ(量子化)というらしい。つまり、f(x) = sin(πx/2) で表せる連続な点の集まりを、コンピューターは式のままでは認識できないので、f(0) = 0、 f(1) = 1、f(2) = 0、f(3) = -1 .... という風に、不連続な点として書きだしてく必要がある。この波形のデータはPCMデータと呼ばれ、これに適切なヘッダ情報を付けた場合にWAVファイルとなる。
サンプリングレートっていうのは、いわゆるこのPCMデータの数のことで、例えば 44.1 KHz ならば1秒間に 44100 ものデータを処理する。

ActionScript で書くと?

flash.media.Sound クラスは play() すると、SampleData を要求するので、SampleDataEvent の data に PCM データを書きこんでいく。そうすると音が出てくるっていう仕組みらしい。ドキュメントを読むと、その PCM データのバッファは 2048〜8192 までで、2048 未満の場合はそれ以降は出力終了ステータスになり、SampleData を要求しなくなる。
Sound クラスのサンプリングレートは 44.1 KHz っぽいので、ちょうど 0.1 秒だけ音を鳴らすために必要なデータの個数は 4410 個となる。それが本当かどうか、ちょっと試してみた。

Sound sample rate test - wonderfl build flash online


うん、10〜100ミリ秒あたりでちょっと揺らぎはでるものの、概ね1秒おきに音が鳴ってるみたい。自分でBPM等を計算して音を出力したい場合は、このあたりを参考にしてバッファの数を調整するか、カウントをどこかで保持しておいて、それにそって音を出力するといいのかも。

Redmine とリポジトリをひもづける

Redmineバージョン管理システム(以下SCM)と連携することができる。今は、下記のシステムとの連携が可能のようだ。

利点

SCMとの連携での利点は下記のような感じ

  • SCMへのコミットとチケットをひもづけることができる
  • そのチケットに関連したコードの修正が確認できる

例えば 「チケット#7 - ボタンをクリックできません」というチケットがあるとする。普通、svnでコミットする場合にはコメントを書くだろう。たいていは下記のような感じ。

$svn commit -m "hogehoge"

これを、チケット#7 に関連するコミットだとしたら

$svn commit -m "ボタンを見える位置に修正 refs #7"

という風にコミットすると、自動的にRedmineにもひもづけられる。

$svn commit -m "ボタンの挙動を修正 fixes #7, #8 @3h"

こんな感じにすると、チケットのステータスを終了に、なおかつ作業時間は3時間というところまで反映できるようだ。そしてついでにチケットを複数指定することもできる。このように開発者はコミットとチケットの更新という二度手間を省くことができる。
また、コミットの履歴をRedmine上で閲覧でき、ソースコードの場合はその内容、差分もチェックできるため、文章でわからなかった修正内容も、Redmine上でレビューできる。

設定方法

  1. 管理者でRedmineにログイン
  2. 設定→リポジトリへ進む
  3. 希望のSCMを選択し、必要な情報を入力する

これだけ!
svnsvn+sshプロトコルでもいけるっぽい。セキュリティに気をつけてね
git はローカルにリポジトリをクローンして、なおかつそれが bare である必要があるみたい。


バージョン管理システムとの連携 — Redmine.JP
ここを参考にした。

Redmine 環境を構築する

今やっていること/やりたいことを管理したくて、redmine を構築することにしたので、その時のメモ。

OS は MacOSX 10.6.8 (64bit)、redmine-1.2.0.0 をインストールすることにした。なにやら自力でガリガリやると開発環境との両立するための設定とか時間かかるし労力が半端なかったので、インストーラー使って作業をすすめた。

まずはここからインストーラーをダウンロード
Redmine Cloud Hosting, Redmine Installer, Docker Container and VM
このサイトの Redmine-1.2.0.0 Mac x86 用を落とす。
落としたzipを展開して、インストーラーにしたがってポチポチ設定していけば完了。超簡単!

自力でガリガリ ruby やら rubygems やら apacheMySQL を設定する必要なし!全部自分のディレクトリに必要なそれらのミドルウェアをパッケージしてOSが利用するミドルウェアには依存しないようになってるようだ。
インストールされるミドルウェアは下記の通り。

Redmine1.2.0
Apache2.2.17
ImageMagick6.5.8
MySQL5.1.56
Subversion1.6.15
Ruby1.8.7-p334
Rails2.3.11
RubyGems1.6.2

んで、localhost:8080 とかでアクセスするのはちょっとカッコ悪いので、サーバーネームを変える。この Apacheredmine 専用なので、バーチャル切らずにそのまま ServerName に書きかえちゃう。

$cd /Applications/redmine-1.2.0-0/apache2/conf  # デフォだとこの位置にインストールされるっぽい
$cp -p httpd.conf{,bak} # バックアップをとっておく
$vi httpd.conf

んで、この httpd.conf の中にある

ServerName localhost:8080

localhost を好きなドメインに書き換える。そして /etc/hosts ファイルに

127.0.0.1 書き換えたドメイン

を追記すれば、
http://hogehoge:8080/
でアクセスできるようになる。ポートは自分の Apache 動かすときに 80 使いたいので、8080 のままにしておく。80 使う場合は httpd.conf の Listen 8080 を Listen 80 とかにすれば OK。このとき、文字コードがおかしかったり、改行コードがおかしかったりすると Apache が起動しなくなるので気をつけること。

メールで Gmail を使う場合には
/Applications/redmine-1.2.0-0/apps/redmine/config
あたりにある

  • environment.rb
  • email.yml

を編集する。
environment.rb の一番最後にこの2行を追記

require "tlsmail"
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

email.yml の設定例(production のところだけ)

production:
  delivery_method: :smtp
  smtp_settings:
    address: smtp.gmail.com
    port: 587 
    domain: smtp.gmail.com
    authentication: :login
    user_name: hogehoge@gmail.com
    password: *******

こんな感じ。こちらも改行コードや文字コードでインターナルサーバーエラー起こすので、必ずバックアップとってから編集すること!
それから、デフォルトでは入っていないライブラリも追加する。

$cd /Applications/redmine-1.2.0-0/ruby/bin
$./gem install tlsmail

こんな感じ。これでアプリケーションの再起動を行う。

起動/終了はこんな感じで行う

$cd /Applications/redmine-1.2.0-0
$./ctlscript.sh start # スタートするとき
$./ctlscript.sh stop # 終了するとき
$./ctlscript.sh restart # 再起動するとき

これは、全体の起動/終了処理だけど、個別に処理することもできる。

$./ctlscript.sh start mysql
$./ctlscript.sh start apache
$./ctlscript.sh start redmine
$./ctlscript.sh start subversion

これでガリガリ予定書きまくるぞー