2008-07-26[n年前へ]
■Simulinkで”日焼け対策”を最適化 Vol.1 [はじめに 編]
先日、Mathematicaで肌の色や日光の色スペクトルを表現するためのライブラリを作り、いくつか計算をしてみました。また、昨日は、「日焼けに影響を与える日照時間」の変化・「気温の変化」「化粧品の商品切り替え時期」「日焼け対策を行う時期」について考えてみました。
そんなことを考え出すと、究極の”日焼け対策”・至高の”日焼け対策”はどういう風にすれば良いだろうか、という技術的な興味が湧いてきます。もちろん、外に一切出ない・顔には紫外線反射膜をコーティングする、といったような対策もあるわけですが、そんな対策をしても「そんな毎日でいいのか?」という疑問を感じるに違いありません。やはり、色々な観点を含めた上で、それらの観点を少しづつ満たすような”日焼け対策の最適化”を考えなければならないように思われます。
そこで、Simulinkを使って、(動的なシステムのモデル化・制御システム構築・プロトタイピングを簡単に行うことができる)MATLAB社のSimulinkで”日焼け対策”を最適化に挑戦してみたくなりました。そこで、今日はまず[はじめに]ということで、平均日照時間と平均気温をSimulinkでグラフ表示してみました。
とりあえず、下の微分方程式のように平均気温(TEMP)の変化は平均日照時間(SUN)に比例するとおくと、
d TEMP /dt = SUN平均気温は平均日照時間を積分したもの、ということになります。そんな関係をSimulinkでモデル化し(数値はまだ合わせていません)、グラフ表示してみたのが下の図です。気温が日照時間に対する「位相遅れ」を持っていることがわかります。
・・・と、ここまでは当たり前の結果ですが、こんな感じで「日焼け対策の最適制御」について色々考えていこうと思います。
2008-09-19[n年前へ]
■[読者年齢 vs. 購買額]と「着回し」
「雑誌DE流行マップ」を始めたわけですが、この雑誌DE流行マップを作った動機は、「見えにくいけれど実は当たり前のように存在していることを見えるようにしたい・・・そしてそれをどう思うかということを考えてみたい」という気持ちが一番大きいように思います。
たとえば、[読者年齢 vs. 購買額]散布図を使うとこんなことが見えてきます。まず、トップページで[読者年齢 vs. 購買額]散布図を眺めてみたのが右上の図です。大雑把には読者年齢が上昇するにしたがって、購買額が増える・・・という傾向になります。そこにはもちろん、大きなバラツキがあります。
そこで、バックナンバー検索ページから「着回し」を検索した結果が着回し(右図)になります(検索回数が多いキーワードは自動的にタグとして登録されます)。その「着回し」を含む雑誌の[読者年齢 vs. 購買額]を散布図にしたものが次の右の図になります。
「着回し」という言葉を含む雑誌が、右下の方に分布していることが一目でわかると思います。この図を一言で言い表せば、「着回し」を気にする読者はファッション購買額が全体平均より低い・・・という風になるように思えます。逆に家は、ファッション購買額が全体平均より高い読者層の雑誌には、「着回し」の記事など載っていないのです。
たとえば、これが「見えにくいけれど実は当たり前のように存在していることを見えるようにしたい・・・そしてそれをどう思うかということを考えてみたい」ということの示す題材の一つだと思います。
「」という3文字のキーワードから、ライフスタイルの違いが見えてきます。そういった見えにくいけれど実は当たり前のように存在していることを見えるようにしたい・・・そしてそれをどう思うかということを考えてみたい、というのが何よりも「雑誌DE流行マップ」を作った動機です。
2008-09-21[n年前へ]
■コミック調動画処理ソフトを作る
以前作ったコミック調動画処理ソフトを少し手直ししたものを、ここ (comicmovie.20090921.lzh) に置いておきます。たとえば、下の動画はラトルバック動画にコミック調動画処理をかけてみたものです。"Video"ボタンを押してAVIファイルを開くと自動的に処理が始まり、元AVIファイルと同じ場所に"hoge.avi.result.avi"という処理結果動画を出力します。
"Open"ボタンを押すとJPEGファイルを開くことができて、"Save"ボタンで処理後ファイルを保存することができます。つまり、静止画に対するコミック調処理も行うことができます。
2008-11-02[n年前へ]
■「雑誌DE流行マップ Lite」と月刊「理系ファッション」
「雑誌DE流行マップ Lite」をメンテナンスしました。Javascriptコントローラが度データ遅延・動的読み込み・各種表示を行う「雑誌DE流行マップ Pro」のような解析機能は持っていませんが、「あぁ、こんなものが流行っているんだなぁ。こんな付録に惹かれる時代なんだな、そして、こんな人が流行っているんだな」と、時折時代の流れを眺めてみるには良いかもしれません。
自分の作ったページ群を眺めているうちに、制御回路を上手く動かすことも難しいけれど、ファッションよりは簡単かもしれないなぁ、とふと感じてしまいました。まず、ファッション用語のボキャブラリが足りないように思います。つらつら眺めてみたら、いつの間にか詳しくなったりするのでしょうか。
月刊「理系ファッション」という雑誌でもあれば、定期購読するのに…(その必要すらないかもしれませんが)。
2008-11-19[n年前へ]
■Rubyで「シリアル通信スレッドクラス」を作る
Rubyで「(Rubyシリアル通信ライブラリ(Windows用)TEXCELL を使った)シリアル通信スレッドクラス」を作りました。ソースコードとサンプルはここに置いておきます。”Microsoft Windows VISTAではほとんど見捨てられているような”シリアルポートでの送受信をRubyでスレッドを使って行うクラスです。Queueにデータを突っ込めば「シリアル通信スレッドクラス」から自動的に送信されます。また、受信した文字列が「(指定した改行コードで)一行になるたびに」receiveイベントが呼ばれるので(また、その際にQueueを指定しておけば受信行が自動的にそのQueueに追加されていきます)、読み込みのタイミング・必要な情報がまだ途中までしか読み込まれていない場合などの処理を気にすることなく使いたい、と考えながら作ってみた「シリアル通信スレッドクラス」です。
たとえば、COM3で受信した内容をコンソールに出力するだけであれば、このようなコードで動くはずです。
require 'comThread' receiveComThread=ComThread.new({:icomno=>3}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sleep 60 receiveComThread.stopシリアル通信モニタプログラム(シリアルポート間で送受信されている内容を眺めるプログラム)も、多分10行くらいで書けると思います。チェックせずに書いてしまうと、こんな感じになると思います。
require 'comThread' q=Queue.new receiveComThread=ComThread.new({:icomno=>3,:rq=>q}) sendComThread=ComThread.new({:icomno=>4,:sq=>q}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sendComThread.start({:send=>true}) sleep 60 sendComThread.stop receiveComThread.stop
「計測・解析ソフトウェア/ハードウェアのハック」が実験系技術者の一番のLifeHackかもしれない…と思っています。その思いを逆に言うならば、実験系技術者が費やす多くの時間を、計測・解析処理が消費していると思っているからです。そして、一番時間を消費している部分の高速化をすることが、全体の高速化に効果的だろう、と思っているわけです。というわけで、先週末はこの「Perlでシリアル通信とユーザインターフェース自動制御のやり方を整理しておくことにしました」の部分を「Rubyでシリアル通信とユーザインターフェース自動制御を書いて整理しておくことにしました」ということをしてみたわけです。この「シリアル通信クラス」と「ユーザインターフェース自動制御」があると、結構便利な実験屋さんもいるかもしれません。
そんなこんなで、何を今更…という、Perlで「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に(既成機器をを使わざるえないことが多い)「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できる、からです。