2010年6月20日日曜日

英語プレゼン練習支援ツール

国際会議等で英語の発表をすることがしばしばあります.
僕は英語が苦手なので,毎回台本を作って練習していますが,発音をいちいち辞書引いて調べたり覚えたりするのが大変なので,自分用に英語プレゼンテーション練習支援ツールを作りました.
興味のある人は使ってみてください.

ppt2ipod


機能
  • PowerPoint のノート部分を Windows の音声合成機能で読み上げた wav ファイルを出力します.発音の参考になります.
  • PowerPoint のスライドを画像形式で出力します.iPodや携帯に入れておくと,どこでも発表の練習が出来ます.
  • ノート部分をテキストファイルに出力します.Mac で音声合成したい人向けです.

スクリーンショット



システムの必要用件


  • .NET Framework 4.0
    大半の人は未インストールのはずなので Microsoft のページからインストールしてください.「.NET Framework 4 Client Profile」が最低限必要です.
  • 英語がしゃべれる音声合成エンジン
    Windows 7 / Vista には標準で入ってました.XPは未確認ですが,7 / Vistaより流暢さで劣るものの入っているらしいです.
  • PowerPoint
    対象となるプレゼンテーションファイルを開けるPowerPointがインストールされている必要があります. PowerPoint 2007 / 2010 で動作確認しています.

ダウンロード
  • ppt2ipod.exe
    実行ファイルです.インストール不要なので,適当な場所に置いて実行してください.
  • test.ppt
    とりあえず試してみたいけど,台本付きの PowerPoint ファイルを作るのが面倒な人のために置いておきます.

その他コメント

  • 出力されたスライド画像とスピーチを iPod と同期しておくと電車や飛行機の中での練習・暗記に便利です.僕は iPod touch に入れてますが,スライド画像の表示が速いので不意に研究の説明を求められたときなんかにも便利です.
  • Mac の音声合成のほうが流暢な気がするので,Mac持ってる人はそっちで音声合成した方が良いとおもいます.その際に便利なテキストファイルもscriptフォルダに出力しています.
  • このソフトは無保証です.利用は自由ですが自己責任でお願いします.
  • ご意見・ご要望・質問などはこの記事にコメントしていただけると助かります.

2010年2月12日金曜日

小型で安価な回転角を検出する装置

ホビーでロボット系の工作をする際に,モーターの回転角や回転速度の検出が良く問題になると思います.RCサーボがこの手の工作で頻繁に使われている理由として,角度の検出部を自分で工作することが困難なことがあげられると思うのですがどうでしょう?

アナログ型光学式ロータリーエンコーダ


そこでここでは,アナログ型の光学式ロータリーエンコーダによって角度を検出する方法を提案してみます.通常光学式のロータリーエンコーダにおいては下の図のようなスリットを持った回転円板を用います.
このような円板は手作りすることが困難であり,高精度の物は高価になります.また,絶対値型のエンコーダはスリットやセンサーの数が多く,自作は非常に困難で大型になってしまいます.そこで,ここでは以下のようなグレースケールを持つ円板
を用いて,以下の図のように配置されたセンサーを用いることを考えます.


グレースケールを持つ円板はプリンタで簡単に作成できますし,センサの組み付け精度などもそれほど必要とされないのでこのような装置は比較的簡単に作成することが出来ます.

試作機

次に実際に試作品を作ってみた結果を示します.
円板はプリンタで印刷したもので,後ろの田宮の小型ギアボックスは回転軸の固定&テスト用です.


センサー部は適当に買ってきた反射型のフォトインタラプタを2個,回転軸について90度対称な位置に配置しただけです.


組み合わせると下の写真のような感じになります.


動作テストの様子です.


動画で使っている円板は黒い部分の半径を変化させてグラデーション円板の代用とした物です.透過型のフォトインタラプタを用いる場合やグレーが使えない場合に有用なのではないかと思います.
いい加減な工作ですが,それらしい波形が出ていることが確認できます.もう少し真面目に作れば,実用的な角度センサになるのではないでしょうか.

2010年2月8日月曜日

『英辞郎 on the WEB』整列・頻度集計

ALCが『英辞郎 on the WEB』整列・頻度集計というのを始めてたんですね.

実は昔,与えられた単語の前後に来る単語の統計を表示するアプリをこっそり作ってたりします.
画面はこんな感じ.

熟語だと

こちらはwikipedia英語版のデータを突っ込んでいます.
そこそこおもしろかったので公開しようかとも思ったのですが,
なにぶんデータが大きすぎて手頃なサーバーがなかったので公開するに至りませんでした.

需要がありそうならもう一度作って公開しようかなぁ・・・
結局置き場所が問題になるわけですが.

2010年2月6日土曜日

MATLAB が出力する図を PowerPoint 向けに自動調節

MATLAB で描いた図やグラフを PowerPoint に貼り付けるときに
一番簡単な方法はFigure のメニューから [編集]-[Figureのコピー] を使って
PowerPoint 上でペーストすることだと思います.

しかし, MATLAB がデフォルト設定で作成するグラフには
以下のような問題があります.

  • プレゼン用には字が小さい
  • グリッドが出ない
    • 無いよりある方が無難だと思うのだけど・・・
  • コピー&ペースト時にサイズが変わる
    • グリッドまで変えられるので意図しない結果になることが多いですね
  • 線が見にくい
    • 細い&プロジェクターで見辛い色が使われます

丁寧に設定すればこれらの問題を解決することは可能ですが,
そこそこ面倒ですし,ミーティングなどで MATLAB による実演を行う際に
これらを逐一設定するのはテンポを損ねます.

というわけで,これらの設定を自動化するプログラムを作りました.
このプログラムは MATLAB のデフォルト設定を書き換えて,
以降に描かれるグラフをプレゼン用に見やすくします.

いまのところ MATLAB を再起動する以外に元に戻す方法はありません.

ちなみに得られるグラフは以下のようになります.

使用前


使用後
コード
function [] = prettify_figure_presen()
%PRETTIFY_FIGURE_PRESEN グラフのフォントをプレゼン用に最適化
% この関数を呼び出すと
% 以降に描かれるプロットの見た目がプレゼン向けになります.
% 元に戻すにはMATLABを再起動するしかないです.
%
% ※ ボード線図は別口(prettify_bodeplot_presen参照)
%    なので注意してください.


%% フォント
set(0,'defaultAxesFontSize',20);
set(0,'defaultAxesFontName','メイリオ');
set(0,'defaultAxesFontWeight','demi'); % normal/demi/bold
set(0,'defaultTextFontSize',20);
set(0,'defaultTextFontName','メイリオ');
set(0,'defaultTextFontWeight','demi');

%% 線の幅
set(0,'defaultAxesLineWidth', 1.5); % 軸
set(0,'defaultLineLineWidth', 2); % プロット

%% プロットの色
clorder = ...
    [  0,   0, 255; % 青
       0, 128,   0; % 緑
     255,   0,   0; % 赤
     204,   8, 204; % 紫
     222, 125,   0; % 茶
       0,  51, 153; % 紺 (青と区別しづらい,注意!)
      64,  64,  64];% 濃い灰色  
set(0,'defaultAxesColorOrder',clorder/255);

%% 最初からgrid on & box on
set(0,'DefaultAxesXGrid','on');
set(0,'DefaultAxesYGrid','on');
set(0,'DefaultAxesBox','on');

%% コピペ時にサイズを変更しない
set(0,'DefaultFigurePaperPositionMode','auto');

end

2010/2/17 追記
17行目の間違いを修正しました&reset(0)で設定を初期化できるそうです.
atsu-kan さんありがとうございます.

2010年1月27日水曜日

SyntaxHighlighter に貼り付けるコードのエスケープ

このブログでは SyntaxHighlighter を使ってソースコードを表示していますが,コードを<pre>タグの中に描くときに '<' や '>' などを&gt; &lt; などにエスケープする必要があります.

これを手でやると面倒なのでスクリプトを書いてみました.
http://maru.bonyari.jp/code2html/code2html.html
処理はブラウザの JavaScript で処理されるので prototype.js があれば
ローカルに保存しても使えます.

MATLAB で半透明の plot を作る

データが大量にあって,グラフ上で密度を表現したい場合などで
MATLAB で半透明の線を書きたいことがたまにあります.

なぜかMATLABのplotで生成される線は半透明をサポートしていないので
半透明をサポートしているpatchで線を描く関数を作ってみました.

function [ p ] = pplot(x,y,z)
%PPLOT Draw line as patch

if nargin==2
    z=0;
end

x=reshape(x,[],1);
y=reshape(y,[],1);

p=patch([x;flipud(x)],[y;flipud(y)],z*ones(2*size(x,1),1),'b');

end

使うときは以下のように使います.
x=0:1e-2:pi/2;
clf
hold on
for k=linspace(0,1,25)
    p=pplot(x,(1-k)*sin(x));
    set(p,'EdgeAlpha',0.1);
    set(p,'EdgeColor','b');
    set(p,'LineWidth',2);
    p=pplot(x,k*cos(x));
    set(p,'EdgeAlpha',0.1);
    set(p,'EdgeColor','r');
    set(p,'LineWidth',2);
end
得られる結果はこんな感じ
このように,半透明の線を描くことができ,線が集中している部分は濃い色で表示されます.
ただし,複雑な線を大量にプロットするとすごく遅いので注意してください.

2009年12月12日土曜日

カメラを買ってみた


携帯のカメラが壊れたのでデジカメを買ってみました.
いろいろ設定を変えて撮ったり画像処理で調整したりして遊んでいますが,
同じ景色でも肉眼で見るのとは違う印象になっていて,おもしろいです.
意外と星が撮れることに特に驚いています.