<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22952785</id><updated>2012-01-02T01:25:47.635+09:00</updated><category term='distributed filesystem'/><category term='粒子法'/><category term='lambda'/><category term='SICP'/><category term='MapReduce'/><category term='AppleScript'/><category term='iframe'/><category term='グルメ'/><category term='Hadoop'/><category term='HTML'/><title type='text'>kamonama@Blogger</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default?start-index=101&amp;max-results=100'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>239</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22952785.post-1880144759358827346</id><published>2012-01-02T01:24:00.001+09:00</published><updated>2012-01-02T01:25:47.648+09:00</updated><title type='text'>GHCにおいてモジュールを相互再帰させるには</title><content type='html'>&lt;br/&gt;ソフトウェアの設計において、モジュールを相互参照させたい状況があります。論理的にはモジュールを細かく分ければ相互参照が起きないようにできる場合でも、意味的に考えた場合にそれらを分割したくないようなときです。&lt;br /&gt;&lt;br /&gt;このエントリでは、GHCでHaskellのコードをコンパイルする際にモジュールを相互参照させる方法を紹介します。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;The Haskell 98 Reportにおける記述&lt;/h5&gt;Haskellの言語仕様である"The Haskell 98 Report"では、&lt;a href="http://www.haskell.org/onlinereport/modules.html"&gt;モジュールは相互再帰をしても良い&lt;/a&gt;とされています。&lt;br /&gt;&lt;pre&gt;"5. Modules" in The Haskell 98 Report&lt;br /&gt;... Modules may be mutually recursive. ...&lt;br /&gt;&lt;/pre&gt;ところが、GHCでHaskellのコードをコンパイルする場合、そのままではモジュールを相互参照させることができずエラーとなります。&lt;br /&gt;&lt;br /&gt;そうご参照させたモジュールをGHCでコンパイルする場合、追加の記述が少しだけ必要になります。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;GHCで相互再帰モジュールをコンパイルするには&lt;/h5&gt;GHCは相互再帰モジュールをサポートしていますが、それをコンパイルするには、インポートグラフの循環参照回避のために、以下が必要となります。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SOURCEプラグマ&lt;/li&gt;&lt;li&gt;hs-bootファイル&lt;/li&gt;&lt;/ul&gt;SOURCEプラグマは、import宣言においてのみ使われるプラグマです。インポートグラフが循環しないようにコンパイラにヒントを与えるためのものです。&lt;br /&gt;&lt;br /&gt;hs-bootファイルは、対応する.hsファイルのモジュール宣言や型宣言のみを抽出して記述したファイルです。.hs-boot拡張子を与えてプログラマが用意します。上述のSOURCEプラグマが付与されたモジュールをインポートする場合、インポートされる側のモジュールについては、.hsファイルではなく.hs-bootファイルから生成される情報を参照することになります。&lt;br /&gt;&lt;br /&gt;具体的にどのように実装するかについては、GHCユーザガイドの&lt;a href="http://www.haskell.org/ghc/docs/latest/html/users_guide/separate-compilation.html#mutual-recursion"&gt;4.7.9. How to compile mutually recursive module&lt;/a&gt;にて詳しく記述されています。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1880144759358827346?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1880144759358827346/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1880144759358827346' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1880144759358827346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1880144759358827346'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2012/01/ghc.html' title='GHCにおいてモジュールを相互再帰させるには'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8625150875460207921</id><published>2011-12-31T23:17:00.000+09:00</published><updated>2011-12-31T23:17:27.468+09:00</updated><title type='text'>ケーパビリティを使ったリソース保護機構「Capsicum」</title><content type='html'>&lt;br/&gt;このエントリでは、ケーパビリティを使ったリソース保護機構である「Capsicum」を紹介します。Capsicumは、まもなく正式リリースされるFreeBSD 9に搭載される予定です。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Capsicumとは？&lt;/h5&gt;タネンバウムの「モダンオペレーティングシステム」では、オペレーティングシステムのリソース保護機構について、以下の３つを紹介しています。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;保護ドメイン&lt;/li&gt;&lt;li&gt;アクセス制御リスト&lt;/li&gt;&lt;li&gt;ケーパビリティ&lt;/li&gt;&lt;/ul&gt;これらのうち、ケーパビリティとは、改竄不可能なトークンを使ったアクセス制御ですが、これまでごく一部の研究用OSでしか実装されてきませんでした。&lt;br /&gt;&lt;br /&gt;Capsicumとは、そのようなケーパビリティを使ったリソース保護機構を一般的なUNIXに導入しようというプロジェクトです。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Capsicumによるメリット&lt;/h5&gt;オペレーティングシステムのリソース保護機構については、DAC（Discretionary Access Control）やMAC(Mandatory Access Control)が広く使われていますが、これらは、１つのアプリケーションが様々な形式のリソースを扱う場合のリソース保護に向いたようには設計されていません。ここでいう様々な形式のリソースとは、たとえば、ウェブブラウザの場合、画像、動画、Flash、JavaScriptなどといったデータです。信用を受けたリソース元ではない可能性もあります。&lt;br /&gt;&lt;br /&gt;そのような様々な形式のリソースを扱う局面おいてデータを保護するために、ウェブブラウザのChromiumでは、プロセスを複数に分けることでコンパートメント化を実現しています。ところが、この方法をとる場合、プラットフォームによってプロセス周りの仕様が変わるため、プログラマがそれぞれの環境に合わせてそれなりの量のコードを書いて実装しなければならないという問題があります。&lt;br /&gt;&lt;br /&gt;この問題への解決策として、一般的なUNIXにケーパビリティを使ったリソース保護機構を補完的に導入しようというものが、Capsicumです。たとえば、Chromiumへのテスト実装では、わずか100行のコード追加で、コンパートメント化を実現できたといいます。&lt;br /&gt;&lt;br /&gt;Capsicumは、FreeBSD 9に導入される予定です。12月9日にFreeBSD-9.0 RC3が公開されたので、来年の早いうちには正式リリースされるでしょう。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8625150875460207921?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8625150875460207921/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8625150875460207921' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8625150875460207921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8625150875460207921'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/capsicum.html' title='ケーパビリティを使ったリソース保護機構「Capsicum」'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-319545183493517181</id><published>2011-12-28T22:24:00.002+09:00</published><updated>2011-12-28T22:27:13.954+09:00</updated><title type='text'>コンピュータシステムのアクセス制御における、２つの文脈</title><content type='html'>&lt;br/&gt;システムのアクセス制御といったとき、大きく２つの文脈に分けられます。オペレーティングシステムの分野における伝統的なアクセス制御と、企業内の情報システムにおけるアクセス制御の２つです。&lt;br /&gt;&lt;br /&gt;後者は前者からの派生でありもちろん両者には関係性があるのですが、前者は悪意を持った攻撃者への対策という観点が主である一方、後者は複雑な組織内での適切な権限割当てという観点が大きくなっています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;オペレーティングシステムにおけるアクセス制御&lt;/h5&gt;タネンバウムの「モダンオペレーティングシステム」では、オペレーティングシステムのファイル保護機構は以下の３つが紹介されています。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;保護ドメイン&lt;/li&gt;&lt;li&gt;アクセス制御リスト&lt;/li&gt;&lt;li&gt;ケーパビリティ&lt;/li&gt;&lt;/ul&gt;保護ドメインは任意アクセス制御(Discretionary Access Control; DAC)、アクセス制御リストは強制アクセス制御(Mandatory Access Control; MAC)ともいわれます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;DACとMAC&lt;/h5&gt;従来のオペレーティングシステムにおけるアクセス制御として、DACとMACがあります。&lt;br /&gt;&lt;br /&gt;DACはもともと、ユーザをお互いから守るように設計されていました。ファイルのようなオブジェクトの所有者が、そのオブジェクトへのパーミッションを指定できるという仕組みです。パーミッションは、そのオブジェクトがアクセスされるときに、OSによってチェックされます。&lt;br /&gt;&lt;br /&gt;ところが、DACには脆弱性があります。root権限のような特権がアクセス制御を迂回できてしまうため、システムをクラックされて特権を取得されると重要なファイルを書き換えられてしまう可能性があるのです。これは、リソースの所有者とそのリソースへのアクセス権限設定者が分離されていないことによる問題です。&lt;br /&gt;&lt;br /&gt;MACは、そういったDACの弱点を補い、システムのセキュリティポリシーを強化するよう設計されました。システム管理者がポリシーを決め、そのポリシーがOSのカーネルのあちこちに埋め込まれたフックによってチェックされます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;ケーパビリティ&lt;/h5&gt;DACやMACは、リソースに対してセキュリティレベルを設定するという考え方に基づく仕組みです。一方、プロセスに対して最小限のアクセス権限を与えることでシステムの安全性を高めるという考え方があります。それがケーパビリティです。&lt;br /&gt;&lt;br /&gt;たとえば、UNIXにおけるプロセスには、一般ユーザ権限で動くものと特権で動くものがあります。もし、特権で動いているプロセスに脆弱性があった場合、不正な操作によりプロセスが持っている権限を取得されてしまう可能性があるのです。&lt;br /&gt;&lt;br /&gt;この問題を解決する方法がケーパビリティです。特権をさらに細分化したケーパビリティと呼ばれる単位で取り扱えるようにし、プロセスに最小限のケーパビリティのみを与えて必要な処理のみを行わせるというものです。&lt;br /&gt;&lt;br /&gt;この仕組みにより、もしプロセスに脆弱性がありそれが悪用されたとしても、そのプロセスが必要とする最小限のケーパビリティしか奪われないため、被害の範囲を狭めることが可能になります。プロセスが自らジェイルに入るようなものです。&lt;br /&gt;&lt;br /&gt;ケーパビリティはこれまで、一部のセキュアOSでのみ使われていましが、最近の動きとして、Capsicumというケーパビリティ機構がFreeBSD 9に搭載されます。あらゆるシステムがインターネットに繋がれるようになる中、予期せぬ脆弱性からシステムを守るため、ケーパビリティのような保護機構の必要性が高まっているといえます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;企業内の情報システムにおけるアクセス制御&lt;/h5&gt;1990年ごろまで、軍事システムでMACが利用される一方、企業や行政組織ではMACではなくDACが適しているとされていました。しかし、DACには上述の脆弱性が存在します。企業や行政組織でITシステムが広く使われるようになるにつれ、それらの組織でも情報セキュリティがより重要となりました。&lt;br /&gt;&lt;br /&gt;そんな中、DACの脆弱性を補いつつも、企業や行政組織でも運用が可能なアクセス制御の仕組みとして、ロールベースアクセス制御(Role-based Access Control; RBAC)が考えだされました。&lt;br /&gt;&lt;br /&gt;DACやMACでは、アクセス制御の主体は個々のユーザやグループ、対象はファイルのような具体的なリソースでした。一方、RBACでは、パーミッションはユーザやグループではなく「役割（ロール）」について付与され、ユーザやグループはそれらの「役割」に紐づけられます。また、対象も具体的なリソースではなくそれらのリソースに対して一連の操作を行う「オペレーション」となります。&lt;br /&gt;&lt;br /&gt;このように、「役割」や「オペレーション」といった、一段抽象度を上げた概念に対してアクセス制御を行うことで、RBACでは、企業および行政組織のポリシーや構造に合わせた柔軟な、しかし集中的なコントロールを可能としています。企業や行政組織での実運用が重視されているのがポイントです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-319545183493517181?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/319545183493517181/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=319545183493517181' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/319545183493517181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/319545183493517181'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/blog-post_28.html' title='コンピュータシステムのアクセス制御における、２つの文脈'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1046065450025178089</id><published>2011-12-28T02:46:00.000+09:00</published><updated>2011-12-28T02:46:09.442+09:00</updated><title type='text'>Compiling the Particle-based Simulation Description Language</title><content type='html'>&lt;br/&gt;On &lt;a href="http://kamonama.blogspot.com/2011/12/n-body-simulation-using-particle.html"&gt;the former entry&lt;/a&gt;, I described simple N-Body simulation in the Particle-based Simulation Description Language as a embedded DSL and executed it with interpreter. In this entry, I introduce compiling and demonstrate it.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Implementation&lt;/h5&gt;The Particle-based Simulation Description Language is compiled to Haskell using Template Haskell, a GHC extension to Haskell that adds compile-time metaprogramming facilities.&lt;br /&gt;&lt;br /&gt;With this transformation, a code corresponding to the N-Body simulation code written in plain Haskell on &lt;a href="http://kamonama.blogspot.com/2011/12/n-body-simulation-using-particle.html"&gt;the former entry&lt;/a&gt; is produced, then it is compiled with GHC Haskell compiler.&lt;br /&gt;&lt;br /&gt;In other words, the host language is the Particle-based Simulation Description Language and the target language is Haskell, though there is no clear line between the host and target languages because it is a embedded DSL.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Codes&lt;/h5&gt;&lt;a href="https://github.com/takagi/SimulationDSL"&gt;Here&lt;/a&gt; the codes are, with the interpreter introduced on &lt;a href="http://kamonama.blogspot.com/2011/12/n-body-simulation-using-particle.html"&gt;the former entry&lt;/a&gt; together, arranged as a module.&lt;br /&gt;&lt;br /&gt;The structure of the module is as below:&lt;br /&gt;&lt;pre&gt;- Examples/&lt;br /&gt;- SimulationDSL/&lt;br /&gt;  - SimulationDSL.hs&lt;br /&gt;  - SimulationDSL/&lt;br /&gt;    - Compiler/&lt;br /&gt;    - Data/&lt;br /&gt;    - Interpreter/&lt;br /&gt;    - Language/&lt;br /&gt;    - Test/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;Execution&lt;/h5&gt;To execute, compile CompilerRun.hs in Examples directory and run the output file as below:&lt;br /&gt;&lt;pre&gt;$ cd Examples&lt;br /&gt;$ ghc -i../SimulationDSL --make -O2 CompilerRun.hs&lt;br /&gt;$ ./CompilerRun&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;Performance&lt;/h5&gt;Comparing performance on three codes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;with compiler - CompilerRun&lt;/li&gt;&lt;li&gt;in plain Haskell - NBody&lt;/li&gt;&lt;li&gt;with interpreter - InterpreterRun&lt;/li&gt;&lt;/ul&gt;The performance:&lt;br /&gt;&lt;pre&gt;$ time ./CompilerRun &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real 0m0.949s&lt;br /&gt;user 0m0.927s&lt;br /&gt;sys 0m0.011s&lt;br /&gt;&lt;br /&gt;$ time ./NBody &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real 0m0.972s&lt;br /&gt;user 0m0.950s&lt;br /&gt;sys 0m0.011s&lt;br /&gt;&lt;br /&gt;$ time ./InterpreterRun &amp;gt; /dev/null&lt;br /&gt;real 0m2.932s&lt;br /&gt;user 0m2.906s&lt;br /&gt;sys 0m0.022s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As chart:&lt;br /&gt;&lt;img width=400 src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dHFGZ0VkTWNpMkZXZFhsVXlQQUxWVHc&amp;amp;oid=1&amp;amp;zx=r2qdztnbcle0" /&gt;&lt;br /&gt;&lt;br /&gt;As intended, the same performance to the code in plain Haskell is given with compiler, which is 2x-3x faster than with interpreter.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Conclusion&lt;/h5&gt;In this entry, I introduced compiling the Particle-based Simulation Description Language to Haskell and showed improvement in performance of simple N-Body simulation.&lt;br /&gt;&lt;br /&gt;While this time I chose Haskell as the target language for this embedded DSL, it is also possible to compile it to C adapting OpenMP or CUDA with parallel computation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1046065450025178089?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1046065450025178089/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1046065450025178089' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1046065450025178089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1046065450025178089'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/compiling-particle-based-simulation.html' title='Compiling the Particle-based Simulation Description Language'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-919010606026291451</id><published>2011-12-13T00:35:00.002+09:00</published><updated>2011-12-20T01:33:39.993+09:00</updated><title type='text'>粒子ベースシミュレーション記述言語のコンパイル</title><content type='html'>&lt;br/&gt;&lt;a href="http://kamonama.blogspot.com/2011/12/n-body.html"&gt;前回のエントリ&lt;/a&gt;では、粒子ベースシミュレーション記述言語を使ってN-Body（多体問題）シミュレーションを記述し、それをインタプリタとして実行しました。&lt;br /&gt;&lt;br /&gt;今回は、それをコンパイルして実行するようにしたので紹介します。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;実装方針&lt;/h5&gt;実装の方法としては、Template Haskellを使ってDSLをHaskellのコードに変換しています。この展開によって、前回のエントリでHaskellで直接書いた場合と同様のコードを生成し、さらにghcでコンパイルしています。&lt;br /&gt;&lt;br /&gt;つまり、ホスト言語が粒子ベースシミュレーション記述言語、ターゲット言語がHaskellということになります。もっとも、組み込みDSLなので明確な線引きがあるわけではありませんが。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;コード&lt;/h5&gt;コードは&lt;a href="https://github.com/takagi/SimulationDSL"&gt;こちら&lt;/a&gt;に置いてあります。前回のインタプリタとあわせて、モジュールとして整理しました。&lt;br /&gt;&lt;br /&gt;モジュールの構成は以下のようになっています。&lt;br /&gt;&lt;pre&gt;- Examples/          実行例をまとめています&lt;br /&gt;- SimulationDSL/&lt;br /&gt;  - SimulationDSL.hs   モジュール外へのエクスポート&lt;br /&gt;  - SimulationDSL/&lt;br /&gt;    - Compiler/        コンパイラに関するコード&lt;br /&gt;    - Data/            基本的なデータ構造&lt;br /&gt;    - Interpreter/     インタプリタに関するコード&lt;br /&gt;    - Language/        シミュレーション記述言語の構文と解釈&lt;br /&gt;    - Test/            テストを追加していく予定&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;実行方法&lt;/h5&gt;以下のように、ExamplesフォルダのCompilerRun.hsをコンパイルし、ファイルを実行します。&lt;br /&gt;&lt;pre&gt;$ cd Examples&lt;br /&gt;$ ghc -i../SimulationDSL --make -O2 CompilerRun.hs&lt;br /&gt;$ ./CompilerRun&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;実行効率の確認&lt;/h5&gt;実行速度を、以下について比べてみます&lt;br /&gt;&lt;ul&gt;&lt;li&gt;コンパイラを使った場合 - CompilerRun&lt;/li&gt;&lt;li&gt;Haskellで直接書いた場合 - NBody&lt;/li&gt;&lt;li&gt;インタプリタを使った場合 - InterpreterRun&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;実行速度は以下のようになりました。&lt;br /&gt;&lt;pre&gt;$ time ./CompilerRun &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real 0m0.949s&lt;br /&gt;user 0m0.927s&lt;br /&gt;sys 0m0.011s&lt;br /&gt;&lt;br /&gt;$ time ./NBody &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real 0m0.972s&lt;br /&gt;user 0m0.950s&lt;br /&gt;sys 0m0.011s&lt;br /&gt;&lt;br /&gt;$ time ./InterpreterRun &amp;gt; /dev/null&lt;br /&gt;real 0m2.932s&lt;br /&gt;user 0m2.906s&lt;br /&gt;sys 0m0.022s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;グラフにすると以下のようになります。&lt;br /&gt;&lt;br /&gt;&lt;img width=400 src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dHFGZ0VkTWNpMkZXZFhsVXlQQUxWVHc&amp;amp;oid=1&amp;amp;zx=r2qdztnbcle0" /&gt;&lt;br /&gt;&lt;br /&gt;狙い通り、コンパイラを使った場合は、インタプリタのx2〜x3の速度、つまり、Haskellで直接書いた場合と同等の速さで動いています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;まとめ&lt;/h5&gt;このエントリでは、粒子ベースシミュレーション記述言語をHaskellにコンパイルしました。その結果、実行速度が改善されたことを示しました。&lt;br /&gt;&lt;br /&gt;今回は組み込みDSLとしてターゲット言語をHaskellにしましたが、Cにコンパイルすることや、さらにOpenMPやCUDAに対応させて並列計算を可能にすることも検討しています。&lt;br /&gt;&lt;br /&gt;また、HackageDBにAccelerateという配列をCUDAで計算するライブラリがあるようなので、これを使う方法もありそうです。&lt;br /&gt;&lt;br /&gt;逆の方向として、粒子ベースシミュレーション記述言語の表現力を強化することも考えられます。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;境界条件の指定&lt;/li&gt;&lt;li&gt;効率的な近傍探索のサポート&lt;/li&gt;&lt;li&gt;例外処理&lt;/li&gt;&lt;li&gt;デバッガ&lt;/li&gt;&lt;li&gt;プロファイラ&lt;/li&gt;&lt;li&gt;階層構造の導入（剛体シミュレーション）&lt;/li&gt;&lt;li&gt;ドメインの導入（固液連成） &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h5&gt;ラグランジュ的表現とオイラー的表現&lt;/h5&gt;この言語はラグランジュ的な表現を記述することができます。一方、オイラー的な表現を記述することはできません。&lt;br /&gt;&lt;br /&gt;有限差分法や有限要素法、あるいは格子ガス法や格子ボルツマン法といった、格子およびメッシュをベースにした表現を使ったシミュレーションを記述するには、また別の言語モデルを設計することになるでしょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;関連エントリ&lt;/h5&gt;このエントリに関連するページです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/12/n-body.html"&gt;粒子法シミュレーション記述言語によるn-Body(多体問題)シミュレーション &lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post_25.html"&gt;粒子法シミュレーションを記述するための言語を設計中&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl.html"&gt;【まとめ】埋め込みDSL関係の論文(1)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl2.html"&gt;【まとめ】埋め込みDSL関係の論文(2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;まとめページ&lt;/h5&gt;&lt;br /&gt;&lt;div&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s1600/sph2.png" /&gt;粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/sph.html"&gt;粒子法(SPH)のプログラム一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-JTwKlgn_pyw/TqpPFx79pUI/AAAAAAAAAWQ/wCe19TGHiCo/s200/movies2.png" /&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post.html"&gt;動画の一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://sports-family.jp/amagasaki-night-runners/image/no_image.gif" /&gt;&lt;a href="http://kamonama.blogspot.com/2010/12/cg.html"&gt;【まとめ】CG、シミュレーション関係の論文 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/particle-based-fluid-simulation-for.html"&gt;【論文】Particle-Based Fluid Simulation ...&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/two-way-coupling-of-fluids-to-rigid-and.html"&gt;【論文】Two-way Coupling of Fluids to ...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="gray"&gt;&lt;b&gt;そのほかの論文まとめ（準備中）&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-919010606026291451?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/919010606026291451/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=919010606026291451' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/919010606026291451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/919010606026291451'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/blog-post.html' title='粒子ベースシミュレーション記述言語のコンパイル'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s72-c/sph2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6157886005810454145</id><published>2011-12-02T23:33:00.000+09:00</published><updated>2011-12-02T23:33:05.770+09:00</updated><title type='text'>N-Body simulation using the Particle Simulation Description Language</title><content type='html'>&lt;br/&gt;On &lt;a href="http://kamonama.blogspot.com/2011/10/blog-post_25.html"&gt;the former entry&lt;/a&gt; (in Japanese), a free-fall simulation on point mass is shown as a starting point towards designing a language to describe particle simulation, or SPH.&lt;br /&gt;&lt;br /&gt;On this entry, I introduce a improved Language and demonstrate N-Body Simulation on point mass using it.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Describing N-Body Simulation&lt;/h5&gt;N-Body simulation is represented in mathematical formula as below:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="262" src="http://3.bp.blogspot.com/-uv9Kz5rq9p0/TtZVbKMmJMI/AAAAAAAAAWo/og-FHbuZJRU/s320/formula.png" width="280" /&gt;&lt;br /&gt;&lt;br /&gt;where xi, vi, ai and fi are position, velocity, acceleration and force on point mass i, respectively.&lt;br /&gt;&lt;br /&gt;With the introduced language, as embedded DSL in Haskell, this simulation can be described as below:&lt;br /&gt;&lt;pre&gt;nBody =&lt;br /&gt;  do define         "x" (integral (var "v" &amp;lt;*&amp;gt; dt))&lt;br /&gt;     define         "v" (integral (var "a" &amp;lt;*&amp;gt; dt))&lt;br /&gt;     defineWithType "a" (var "f" &amp;lt;/&amp;gt; m) ExpTypeVector&lt;br /&gt;     define         "f"&lt;br /&gt;                    (let r = norm (var' "x" &amp;lt;-&amp;gt; var "x")&lt;br /&gt;                         k = m &amp;lt;*&amp;gt; m &amp;lt;*&amp;gt; g &amp;lt;/&amp;gt; r &amp;lt;/&amp;gt; r&lt;br /&gt;                         n = (var' "x" &amp;lt;-&amp;gt; var "x") &amp;lt;/&amp;gt; r&lt;br /&gt;                     in sigma (k &amp;lt;*&amp;gt; n))&lt;br /&gt;     initialConditionV "x" x0&lt;br /&gt;  where dt = constantS 0.01&lt;br /&gt;        m  = constantS 1&lt;br /&gt;        g  = constantS 9.8&lt;br /&gt;        x0 = V.fromList [ (0,0,0), (2,0,0), (0,2,0) ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;Explanation&lt;/h5&gt;&lt;b&gt;define&lt;/b&gt; declaration defines an equation on physical amount on point mass i.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;defineWithType&lt;/b&gt; declaration also defines an equation on physical amount, instructing type with it. When we use &lt;b&gt;define&lt;/b&gt; declaration, the type of the equation we define is inferred with other equations. On the other hand, if the type can not be inferred, we must instruct it using &lt;b&gt;defineWithType&lt;/b&gt; declaration. The types we can use are Scalar and Vector for now.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;initialConditionV&lt;/b&gt; declaration is to give the initial condition of the physical amount defined with a "integral" expression. The last letter "V" means that the physical amount has Vector type. As the argument of it, an array of Vector is given as the initial condition of the position "x". Besides, the initial condition of the velocity "v" can be omitted, and an array of zero vector is given implicitly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;integral&lt;/b&gt; expression means integration, calculated explicitly inside the module.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;var&lt;/b&gt; expression and &lt;b&gt;var'&lt;/b&gt; expression are variables indicated by the symbol given as its argument. &lt;b&gt;var'&lt;/b&gt; expression must be in a sigma expression. The difference in &lt;b&gt;var&lt;/b&gt; and &lt;b&gt;var'&lt;/b&gt; is described in the next paragraph.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;sigma&lt;/b&gt; expression means summation of the calculated result of its operand expression on point mass j excluding itself. In the operand, &lt;b&gt;var "x"&lt;/b&gt; means xi and &lt;b&gt;var' "x"&lt;/b&gt; means xj.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;dt&lt;/b&gt;, &lt;b&gt;m&lt;/b&gt; and &lt;b&gt;g&lt;/b&gt; are constant values lifted with the &lt;b&gt;constantS&lt;/b&gt; function. The last letter "S" shows that the constant has Scalar type.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Execution&lt;/h5&gt;The nBody defined in the code can be evaluated as below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;main = mapM_ (printRow . flip machineRegisterValueV "x")&lt;br /&gt;     $ take 100 $ runSimMachine nBody&lt;br /&gt;&lt;/pre&gt;* for the whole code, see &lt;a href="https://github.com/takagi/blog-codes/blob/master/20111201/Simulation.hs"&gt;Simulation.hs&lt;/a&gt; in GitHub&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;About performance efficiency&lt;/h5&gt;For now, this language is implemented as interpreter, so the performance of codes written in it is not very fast. I've compared it with the similar N-Body simulation code written in plain Haskell (see &lt;a href="https://github.com/takagi/blog-codes/blob/master/20111201/NBody.hs"&gt;NBody.hs&lt;/a&gt; in GitHub). The result is below. Simulation is in the language and NBody in plain Haskell.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ time ./Simulation &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m2.900s&lt;br /&gt;user    0m2.869s&lt;br /&gt;sys     0m0.020s&lt;br /&gt;&lt;br /&gt;$ time ./NBody &amp;gt; /dev/null &lt;br /&gt;&lt;br /&gt;real    0m0.846s&lt;br /&gt;user    0m0.829s&lt;br /&gt;sys     0m0.011s&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The program in the language is x1/3 - x1/4 as fast as in plain Haskell.&lt;br /&gt;&lt;br /&gt;To improve the performance, using Template Haskell, we can compile, in the broad sense, the language to plain Haskell and make it work more efficiently. Also, compiling it to generate C or CUDA code would be pretty nice :)&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6157886005810454145?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6157886005810454145/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6157886005810454145' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6157886005810454145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6157886005810454145'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/n-body-simulation-using-particle.html' title='N-Body simulation using the Particle Simulation Description Language'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-uv9Kz5rq9p0/TtZVbKMmJMI/AAAAAAAAAWo/og-FHbuZJRU/s72-c/formula.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7476372261043221332</id><published>2011-12-01T02:12:00.001+09:00</published><updated>2011-12-02T16:17:17.921+09:00</updated><title type='text'>粒子法シミュレーション記述言語によるn-Body(多体問題)シミュレーション</title><content type='html'>&lt;br/&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post_25.html"&gt;以前のエントリ&lt;/a&gt;では、粒子法シミュレーションを記述するための言語として、まず１つの質点についての自由落下を記述できるようにしてシミュレーションする例を示しました。&lt;br /&gt;&lt;br /&gt;今回は、それを進めて、複数質点についてのn-Bodyシミュレーションを記述できるようにしたので紹介します。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;n-Bodyシミュレーションの記述&lt;/h5&gt;n-Bodyシミュレーションを、数式で以下の様に表現した場合を考えます。&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="262" src="http://3.bp.blogspot.com/-uv9Kz5rq9p0/TtZVbKMmJMI/AAAAAAAAAWo/og-FHbuZJRU/s320/formula.png" width="280" /&gt;&lt;br /&gt;&lt;br /&gt;ここで、xi, vi, ai, fiは、それぞれ、ある質点iの位置、速度、加速度、力です。mは質点の質量、gは重力定数です。質点の質量はすべての質点について同じとします。&lt;br /&gt;&lt;br /&gt;提案する言語を使うと、このシミュレーションを、以下のようにHaskellの組み込みDSLとして記述できます。&lt;br /&gt;&lt;pre&gt;nBody =&lt;br /&gt;  do define         "x" (integral (var "v" &amp;lt;*&amp;gt; dt))&lt;br /&gt;     define         "v" (integral (var "a" &amp;lt;*&amp;gt; dt))&lt;br /&gt;     defineWithType "a" (var "f" &amp;lt;/&amp;gt; m) ExpTypeVector&lt;br /&gt;     define         "f"&lt;br /&gt;                    (let r = norm (var' "x" &amp;lt;-&amp;gt; var "x")&lt;br /&gt;                         k = m &amp;lt;*&amp;gt; m &amp;lt;*&amp;gt; g &amp;lt;/&amp;gt; r &amp;lt;/&amp;gt; r&lt;br /&gt;                         n = (var' "x" &amp;lt;-&amp;gt; var "x") &amp;lt;/&amp;gt; r&lt;br /&gt;                     in sigma (k &amp;lt;*&amp;gt; n))&lt;br /&gt;     initialConditionV "x" x0&lt;br /&gt;  where dt = constantS 0.01&lt;br /&gt;        m  = constantS 1&lt;br /&gt;        g  = constantS 9.8&lt;br /&gt;        x0 = V.fromList [ (0,0,0), (2,0,0), (0,2,0) ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;記述の説明&lt;/h5&gt;"define"によって、ある質点iの物理量について方程式を定義しています。&lt;br /&gt;&lt;br /&gt;"defineWithType"は、"define"と同じように物理量を定義しますが、併せて型を指定する点が異なります。"define"を使った場合には、その式の型は他の式から推論されますが、他の式から型を推論できない場合には、"defineWithType"を使って型も併せて指定します。現在使える型は、スカラーとベクトルの２種類です。&lt;br /&gt;&lt;br /&gt;"initialConditionV"は、integralを使って定義された物理量の初期条件を与えるためのものです。最後の"V"は、その物理量の型がベクトルであることを示しています。引数として、ベクトルの配列を渡しています。速度vについては初期条件が省略されており、その場合は0ベクトルが使われます。&lt;br /&gt;&lt;br /&gt;"integral"は、積分を表します。内部では陽解法で計算しています。&lt;br /&gt;&lt;br /&gt;"var", "var'"は、引数で与えたシンボルで表される変数です。var'はsigmaの中でのみ使うことができます。varとvar'の違いについては、以下のsigmaの中で説明します。&lt;br /&gt;&lt;br /&gt;"sigma"は、自身を除いた質点jについてオペランドの式を計算した値の合計です。オペランド中の var "x" がxiを、var' "x" がxjを表します。iが一定で、jをi以外の各質点について変えた場合の値を合計したものを返します。&lt;br /&gt;&lt;br /&gt;dt、m、gといった定数は、constantS関数でリフトさせて使います。最後の"S"は、その定数がスカラーであることを示しています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;実行&lt;/h5&gt;上記で定義したnBodyを、以下のようにrunSimMachine関数に渡すことで計算します。&lt;br /&gt;&lt;pre&gt;main = mapM_ (printRow . flip machineRegisterValueV "x")&lt;br /&gt;     $ take 100 $ runSimMachine nBody&lt;br /&gt;&lt;/pre&gt;※コード全体については&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111201/Simulation.hs"&gt;こちら&lt;/a&gt;を見てください&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;実行速度について&lt;/h5&gt;現時点では、この言語はインタプリタとして実装されているため、実行速度はあまり速くありません。&lt;br /&gt;&lt;br /&gt;同じシミュレーションをHaskellで直接書いた場合(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111201/NBody.hs"&gt;ソースコード&lt;/a&gt;)と速度を比較すると、以下のようになりました。SimLangがこの言語、NBodyがHaskellで直接書いた場合です。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ time ./SimLang &amp;gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m2.900s&lt;br /&gt;user    0m2.869s&lt;br /&gt;sys     0m0.020s&lt;br /&gt;&lt;br /&gt;$ time ./NBody &amp;gt; /dev/null &lt;br /&gt;&lt;br /&gt;real    0m0.846s&lt;br /&gt;user    0m0.829s&lt;br /&gt;sys     0m0.011s&lt;br /&gt;&lt;/pre&gt;Haskellで直接書いた場合に比べて、1/3〜1/4の速度になっています。&lt;br /&gt;&lt;br /&gt;実行速度については、Temlate Haskellを使って、Haskellで直接書いた場合と同等のコードに（広義の）コンパイルすることで効率化できます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;課題&lt;/h5&gt;現時点での実装には、以下のような課題があります。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;0割算などの例外処理&lt;/li&gt;&lt;li&gt;デバッグのしやすさ、記述にエラーがあったときのメッセージの改善&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h5&gt;ロードマップ&lt;/h5&gt;今後のロードマップとして以下のようなことを考えています。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;より強力な型推論&lt;/li&gt;&lt;li&gt;Template Haskellによる（広義の）コンパイル&lt;/li&gt;&lt;li&gt;テスト&lt;/li&gt;&lt;li&gt;設計の解説&lt;/li&gt;&lt;li&gt;組み込みDSLや言語抽象についての解説&lt;/li&gt;&lt;li&gt;SPHの記述（分岐や近傍探索の導入）&lt;/li&gt;&lt;li&gt;剛体シミュレーションの記述（階層表現の導入）&lt;/li&gt;&lt;li&gt;固液連成シミュレーションの記述（ドメインの導入）&lt;/li&gt;&lt;li&gt;ベンチマーク&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h5&gt;関連エントリ&lt;/h5&gt;このエントリに関連するページです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post_25.html"&gt;粒子法シミュレーションを記述するための言語を設計中&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl.html"&gt;【まとめ】埋め込みDSL関係の論文(1)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl2.html"&gt;【まとめ】埋め込みDSL関係の論文(2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;まとめページ&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s1600/sph2.png" /&gt;粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/sph.html"&gt;粒子法(SPH)のプログラム一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-JTwKlgn_pyw/TqpPFx79pUI/AAAAAAAAAWQ/wCe19TGHiCo/s200/movies2.png" /&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post.html"&gt;動画の一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://sports-family.jp/amagasaki-night-runners/image/no_image.gif" /&gt;&lt;a href="http://kamonama.blogspot.com/2010/12/cg.html"&gt;【まとめ】CG、シミュレーション関係の論文 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/particle-based-fluid-simulation-for.html"&gt;【論文】Particle-Based Fluid Simulation ...&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/two-way-coupling-of-fluids-to-rigid-and.html"&gt;【論文】Two-way Coupling of Fluids to ...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="gray"&gt;&lt;b&gt;そのほかの論文まとめ（準備中）&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7476372261043221332?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7476372261043221332/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7476372261043221332' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7476372261043221332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7476372261043221332'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/12/n-body.html' title='粒子法シミュレーション記述言語によるn-Body(多体問題)シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-uv9Kz5rq9p0/TtZVbKMmJMI/AAAAAAAAAWo/og-FHbuZJRU/s72-c/formula.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5209246159094243713</id><published>2011-11-29T01:07:00.003+09:00</published><updated>2011-11-29T01:13:17.700+09:00</updated><title type='text'>このブログのGitHubレポジトリを作りました</title><content type='html'>&lt;br/&gt;このブログのGitHubのレポジトリを作りました。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/takagi/blog-codes"&gt;blog-codes@GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これまでのブログエントリで公開していたコードを、GitHubのレポジトリに移しました。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法のプログラム第１回（概要）&lt;/h5&gt;sph.cpp - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20090223/sph.cpp"&gt;GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エントリは&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;こちら&lt;/a&gt;。粒子法のプログラムを解説しています。論文や本の数式をプログラムに落とすところやパラメータの設定が分かるよう、ソースコードも合わせて公開しています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Haskell、OCamlでSPH法&lt;/h5&gt;sph.hs - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/haskell/sph.hs"&gt;GitHub&lt;/a&gt;&lt;br /&gt;sph.ml - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/ocaml/sph.ml"&gt;GitHub&lt;/a&gt;&lt;br /&gt;sph.cpp - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/cpp/sph.cpp"&gt;GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エントリは&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;こちら&lt;/a&gt;。粒子法のコードを、Haskell、OCaml、C++で書いて比較しています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;【OCaml】スタンフォードバニーの読み込みライブラリ&lt;/h5&gt;PlyReader.ml - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20101226/PlyReader.ml"&gt;GitHub&lt;/a&gt;&lt;br /&gt;PlyReader.mli - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20101226/PlyReader.mli"&gt;GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エントリは&lt;a href="http://kamonama.blogspot.com/2010/12/ocaml.html"&gt;こちら&lt;/a&gt;。OCamlで、スタンフォードバニーの読み込みライブラリを書きました。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法シミュレーションを記述するための言語を設計中&lt;/h5&gt;Simulation.hs - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20111025/Simulation.hs"&gt;GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エントリは&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post_25.html"&gt;こちら&lt;/a&gt;。粒子法シミュレーションを記述するための言語を考えており、それを紹介しています。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;CPUキャッシュによるプログラム高速化の例&lt;/h5&gt;code1.c - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code1.c"&gt;GitHub&lt;/a&gt;&lt;br /&gt;code2.c - &lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code2.c"&gt;GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エントリは&lt;a href="http://kamonama.blogspot.com/2011/11/cpu.html"&gt;こちら&lt;/a&gt;。CPUのキャッシュメモリを使うで、プログラムの実行性能をあげることができます。キャッシュメモリを活用することでどの程度性能が向上するのかを紹介しています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5209246159094243713?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5209246159094243713/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5209246159094243713' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5209246159094243713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5209246159094243713'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/11/github.html' title='このブログのGitHubレポジトリを作りました'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4839921268608213689</id><published>2011-11-24T21:13:00.003+09:00</published><updated>2011-11-29T01:11:03.719+09:00</updated><title type='text'>Acceleration of programs using CPU caches effectively</title><content type='html'>&lt;br/&gt;Effective use of CPU caches make the performance of programs improved. This entry shows how much improvement is given with effective use of CPU caches.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Motivation&lt;/h5&gt;Computer data storages have hierarchy which consists of registers, cache, main memory and so on, distinguished by response time. Registers and cache memory are smaller but faster than main memory.&lt;br /&gt;&lt;br /&gt;CPUs can directly operate registers only. So, between registers and main memory, there is about x100 gap in access speed, and to fill the gap, CPUs have cache memory inside. With effectively using CPU cache, we can improve the performance of programs.&lt;br /&gt;&lt;br /&gt;However, programmers can not make CPUs directly to use the cache memory in the way they want, so they must write programs considering how the CPUs read/write the data on the memory to indicate CPUs indirectly how to use the cache.&lt;br /&gt;&lt;br /&gt;&lt;font color="gray"&gt;* SPARC64 VIIIfx used in the K computer of RIKEN in Japan has "sector cache" functionality and programmers can directly indicate it how to use the cache. With sector cache, the cache in a CPU is divided in two sectors and programmers can instruct which sector they use to store data.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;This entry demonstrates an example of performance improvement using CPU cache effectively.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Example&lt;/h5&gt;I show the optimization in efficiency of a program which computes the multiplication of 1000x1000 matrices using cache blocking technique.&lt;br /&gt;&lt;br /&gt;The code before optimized (&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code1.c"&gt;code1.c&lt;/a&gt;):&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt; &lt;br /&gt;#define N 1000&lt;br /&gt; &lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;  double A[N][N], B[N][N], C[N][N];&lt;br /&gt;  int i, j, k;&lt;br /&gt;  &lt;br /&gt;  // initialize the matrices&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      {&lt;br /&gt;        A[i][j] = 1.0;&lt;br /&gt;        B[i][j] = 1.0;&lt;br /&gt;        C[i][j] = 0.0;&lt;br /&gt;      }&lt;br /&gt;  &lt;br /&gt;  // matrix multiplication&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      for (k = 0; k &amp;lt; N; k++ )&lt;br /&gt;        C[i][j] += A[i][k] * B[k][j];&lt;br /&gt;  &lt;br /&gt;  printf ( &amp;quot;%f\n&amp;quot;, C[0][0] );&lt;br /&gt;  &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I rewrite this code as below with cache blocking (&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code2.c"&gt;code2.c&lt;/a&gt;). Of course, the result of multiplication is same as to that of code1.c.&lt;br /&gt;&lt;pre&gt;$ cat code2.c&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt; &lt;br /&gt;#define N 1000&lt;br /&gt; &lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;  double A[N][N], B[N][N], C[N][N];&lt;br /&gt;  int i, j, k;&lt;br /&gt;  &lt;br /&gt;  // initialize the matrices&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      {&lt;br /&gt;        A[i][j] = 1.0;&lt;br /&gt;        B[i][j] = 1.0;&lt;br /&gt;        C[i][j] = 0.0;&lt;br /&gt;      }&lt;br /&gt;  &lt;br /&gt;  // matrix multiplication&lt;br /&gt;  int ibl = 100;&lt;br /&gt;  int ib, jb, kb;&lt;br /&gt;  for (ib=0; ib&amp;lt;N; ib+=ibl)&lt;br /&gt;    for (jb=0; jb&amp;lt;N; jb+=ibl)&lt;br /&gt;      for (kb=0; kb&amp;lt;N; kb+=ibl)&lt;br /&gt;        for (i=ib; i&amp;lt;ib+ibl; i++)&lt;br /&gt;          for (j=jb; j&amp;lt;jb+ibl; j++)&lt;br /&gt;            for (k=kb; k&amp;lt;kb+ibl; k++)&lt;br /&gt;              C[i][j] += A[i][k] * B[k][j];&lt;br /&gt;  &lt;br /&gt;  printf ( &amp;quot;%f\n&amp;quot;, C[0][0] );&lt;br /&gt;  &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;Demonstration&lt;/h5&gt;The times taken to execute the unoptimized code and the optimized code are as below respectively:&lt;br /&gt;&lt;pre&gt;$ gcc -Wl,-stack_size,1000000000 -O2 -o code1 code1.c&lt;br /&gt;$ time ./code1 &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m7.595s&lt;br /&gt;user    0m7.494s&lt;br /&gt;sys     0m0.035s&lt;br /&gt;&lt;br /&gt;$ gcc -Wl,-stack_size,1000000000 -O2 -o code2 code2.c&lt;br /&gt;$ time ./code2 &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m2.509s&lt;br /&gt;user    0m2.462s&lt;br /&gt;sys     0m0.030s&lt;br /&gt;&lt;/pre&gt;* The -Wl option is to designate ld to allocate large arrays on the stack&lt;br /&gt;&lt;br /&gt;The result represented as a chart:&lt;br /&gt;&lt;br /&gt;&lt;img width="400" src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dFpNcHQyajlsYUJ5QWZNUHVuRTJsOUE&amp;oid=1&amp;zx=wo4vunrnp5tp" /&gt;&lt;br /&gt;&lt;br /&gt;Cache blocking improve the performance by about x3.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Comparing the performance as the size of cache blocking&lt;/h5&gt;Next, I show how the performance changes as the size of block. I changed the size of the block to 100, 200, 250, 500, then timed to calculation.&lt;br /&gt;&lt;br /&gt;As a chart:&lt;br /&gt;&lt;img width=400 src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dFpNcHQyajlsYUJ5QWZNUHVuRTJsOUE&amp;oid=2&amp;zx=su6xrjj45n8h" /&gt;&lt;br /&gt;&lt;br /&gt;With the block size of 500, the performance degrades massively, which represents that the expansion of the block size leads to overflow of data from the cache.&lt;br /&gt;&lt;br /&gt;The bytes of the 500x500 sized block is 2MB, with double typed array, so, considering other programs running in background, it agrees with the CPU cache size of my computer :)&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4839921268608213689?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4839921268608213689/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4839921268608213689' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4839921268608213689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4839921268608213689'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/11/acceleration-of-programs-using-cpu.html' title='Acceleration of programs using CPU caches effectively'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2362115138057816172</id><published>2011-11-23T19:15:00.002+09:00</published><updated>2011-11-29T01:10:06.344+09:00</updated><title type='text'>CPUキャッシュによるプログラム高速化の例</title><content type='html'>&lt;br/&gt;CPUのキャッシュメモリを使うで、プログラムの実行性能をあげることができます。このエントリでは、キャッシュメモリを活用することでどの程度性能が向上するのか見てみます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;動機&lt;/h5&gt;コンピュータの記憶領域は、レジスタ、キャッシュメモリ、メインメモリなどからなる階層構造になっています。レジスタやキャッシュメモリはメインメモリより容量が小さいものの、非常に高速です。&lt;br /&gt;&lt;br /&gt;CPUが直接触れるのはレジスタのみです。レジスタとメインメモリでは、データアクセスの速度に約100倍の差があり、その差を埋める目的で、CPU内部にキャッシュメモリがあります。キャッシュメモリを活用できれば、プログラムの実装性能を大きく高めることができます。&lt;br /&gt;&lt;br /&gt;ただし、基本的に、CPUがどのようにキャッシュメモリを使うのかをプログラマが直接指示することはできません。なので、キャッシュメモリを活用するには、CPUがどのようにメモリ上のデータを使うのかを考慮したプログラムを書くことで間接的にキャッシュメモリを使うことになります。&lt;br /&gt;&lt;br /&gt;※理化学研究所の京で使われているSPARC64 VIIIfxにはセクタキャッシュという機構があり、プログラマがキャッシュを制御できます。セクタキャッシュを使うと、キャッシュメモリを２つの領域に分割し、データごとにキャッシュに使う領域をプログラマが指定できます。&lt;br /&gt;&lt;br /&gt;このエントリでは、キャッシュメモリを活用することで、実際にどの程度性能が向上するのか、一例を見てみます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;サンプルコード&lt;/h5&gt;1000×1000行列の積を求めるプログラムについて、キャッシュブロック化によって実行性能を最適化します。&lt;br /&gt;&lt;br /&gt;以下が、最適化前のCのコードです。(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code1.c"&gt;code1.c&lt;/a&gt;)&lt;br /&gt;&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt; &lt;br /&gt;#define N 1000&lt;br /&gt; &lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;  double A[N][N], B[N][N], C[N][N];&lt;br /&gt;  int i, j, k;&lt;br /&gt;  &lt;br /&gt;  // initialize the matrices&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      {&lt;br /&gt;        A[i][j] = 1.0;&lt;br /&gt;        B[i][j] = 1.0;&lt;br /&gt;        C[i][j] = 0.0;&lt;br /&gt;      }&lt;br /&gt;  &lt;br /&gt;  // matrix multiplication&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      for (k = 0; k &amp;lt; N; k++ )&lt;br /&gt;        C[i][j] += A[i][k] * B[k][j];&lt;br /&gt;  &lt;br /&gt;  printf ( &amp;quot;%f\n&amp;quot;, C[0][0] );&lt;br /&gt;  &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これを、キャッシュブロック化によって以下のコードに書き換えます(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111123/code2.c"&gt;code2.c&lt;/a&gt;)。もちろん、計算の結果そのものは変わりません。&lt;br /&gt;&lt;pre&gt;$ cat code2.c&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt; &lt;br /&gt;#define N 1000&lt;br /&gt; &lt;br /&gt;int main ()&lt;br /&gt;{&lt;br /&gt;  double A[N][N], B[N][N], C[N][N];&lt;br /&gt;  int i, j, k;&lt;br /&gt;  &lt;br /&gt;  // initialize the matrices&lt;br /&gt;  for ( i = 0; i &amp;lt; N; i++ )&lt;br /&gt;    for ( j = 0; j &amp;lt; N; j++ )&lt;br /&gt;      {&lt;br /&gt;        A[i][j] = 1.0;&lt;br /&gt;        B[i][j] = 1.0;&lt;br /&gt;        C[i][j] = 0.0;&lt;br /&gt;      }&lt;br /&gt;  &lt;br /&gt;  // matrix multiplication&lt;br /&gt;  int ibl = 100;&lt;br /&gt;  int ib, jb, kb;&lt;br /&gt;  for (ib=0; ib&amp;lt;N; ib+=ibl)&lt;br /&gt;    for (jb=0; jb&amp;lt;N; jb+=ibl)&lt;br /&gt;      for (kb=0; kb&amp;lt;N; kb+=ibl)&lt;br /&gt;        for (i=ib; i&amp;lt;ib+ibl; i++)&lt;br /&gt;          for (j=jb; j&amp;lt;jb+ibl; j++)&lt;br /&gt;            for (k=kb; k&amp;lt;kb+ibl; k++)&lt;br /&gt;              C[i][j] += A[i][k] * B[k][j];&lt;br /&gt;  &lt;br /&gt;  printf ( &amp;quot;%f\n&amp;quot;, C[0][0] );&lt;br /&gt;  &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;実行&lt;/h5&gt;最適化前、最適化後それぞれについて、実行にかかる時間は以下のようになりました。&lt;br /&gt;&lt;pre&gt;$ gcc -Wl,-stack_size,1000000000 -O2 -o code1 code1.c&lt;br /&gt;$ time ./code1 &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m7.595s&lt;br /&gt;user    0m7.494s&lt;br /&gt;sys     0m0.035s&lt;br /&gt;&lt;br /&gt;$ gcc -Wl,-stack_size,1000000000 -O2 -o code2 code2.c&lt;br /&gt;$ time ./code2 &gt; /dev/null&lt;br /&gt;&lt;br /&gt;real    0m2.509s&lt;br /&gt;user    0m2.462s&lt;br /&gt;sys     0m0.030s&lt;br /&gt;&lt;/pre&gt;※大きな配列をスタック上に確保するために、ldにオプションを渡してスタックサイズを大きくしています&lt;br /&gt;&lt;br /&gt;グラフにすると以下のようになります。&lt;br /&gt;&lt;br /&gt;&lt;img width=400 src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dFpNcHQyajlsYUJ5QWZNUHVuRTJsOUE&amp;oid=1&amp;zx=y284l8bmpcib" /&gt;&lt;br /&gt;&lt;br /&gt;キャッシュブロック化によって、約３倍の性能向上が得られました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;ブロックサイズによる性能比較&lt;/h5&gt;次に、ブロック化のサイズによって性能がどのように変わるかを調べてみます。ブロック化のサイズを100、200、250、500に変えて、実行時間を計ると、以下のようになりました。&lt;br /&gt;&lt;pre&gt;100 : 2.311s&lt;br /&gt;200 : 2.390s&lt;br /&gt;250 : 2.509s&lt;br /&gt;500 : 6.588s&lt;br /&gt;&lt;/pre&gt;※ブロック化のサイズの単位は、配列の要素数です。バイト数に直すと、double型の配列なので8を掛けたものになります&lt;br /&gt;&lt;br /&gt;グラフにすると、以下のようになります。&lt;br /&gt;&lt;img width=400 src="https://docs.google.com/spreadsheet/oimg?key=0AuAdJAcp4Uw2dFpNcHQyajlsYUJ5QWZNUHVuRTJsOUE&amp;oid=2&amp;zx=su6xrjj45n8h" /&gt;&lt;br /&gt;&lt;br /&gt;ブロック化のサイズが500になると、急激に性能が悪化しています。このことから、ブロック化のサイズが大きくなりキャッシュにデータが収まらなくなった様子が分かります。&lt;br /&gt;&lt;br /&gt;500×500のブロックのデータ量が2MBなので、このプログラム以外が動いていることも勘案すると、使っている環境のCPUの持つキャッシュメモリサイズと一致した結果といえます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2362115138057816172?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2362115138057816172/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2362115138057816172' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2362115138057816172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2362115138057816172'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/11/cpu.html' title='CPUキャッシュによるプログラム高速化の例'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1499969205813021306</id><published>2011-11-22T23:53:00.000+09:00</published><updated>2011-11-22T23:53:28.035+09:00</updated><title type='text'>Common Lispでの、依存関係を考慮したファイルロード</title><content type='html'>&lt;br/&gt;Common Lispにおいて、asdfを使って、依存関係を考慮してプロジェクトの構成ファイルをロードする方法をまとめました。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;動機&lt;/h5&gt;よっぽど小さなプログラムでない限り、プログラムの規模が大きくなってくると、ファイルを複数に分けることになります。&lt;br /&gt;&lt;br /&gt;困ったことに、Common Lispには、依存関係をみて必要なファイルをロードする機能がありません。なので、ファイルを複数に分けると、必要なファイルを１つ１つロードするはめになります。&lt;br /&gt;&lt;br /&gt;asdfを使うことで、ファイルの依存関係をみて必要なファイルを１度にロードすることができます。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;asdfとは？&lt;/h5&gt;asdfは、"Another System Definition Facility"の略で、Common Lispプログラムを１つの「モジュール」として管理し、読み込むことができるツールです。現在はASDF2が広く使われています。&lt;br /&gt;&lt;br /&gt;makeや、JavaのAntに相当するもので、PerlのCPANやRubyのRubyGemsの１つ下のレイヤに位置づけられます。CPANやRubyGemsにあたるものとしては、asdf-installがあります。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;例&lt;/h5&gt;以下のような「sample」プロジェクトがあるとします。&lt;br /&gt;&lt;pre&gt;sample&lt;br /&gt; - caller.lisp  ;; callee.lispで定義されている関数を使う&lt;br /&gt; - callee.lisp  ;; caller.lispから呼ばれる&lt;br /&gt; - sample.asd   ;; asdfモジュール定義ファイル&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;各ファイルの内容は以下のようになっています。&lt;br /&gt;&lt;pre&gt;$ cat caller.lisp&lt;br /&gt;(in-package :common-lisp)&lt;br /&gt;&lt;br /&gt;(defpackage sample.caller&lt;br /&gt;  (:use :common-lisp&lt;br /&gt;        :sample.callee))&lt;br /&gt;(in-package :sample.caller)&lt;br /&gt;&lt;br /&gt;(hello-world)&lt;br /&gt;&lt;br /&gt;$ cat callee.lisp &lt;br /&gt;(in-package :common-lisp)&lt;br /&gt;&lt;br /&gt;(defpackage sample.callee&lt;br /&gt;  (:use :common-lisp)&lt;br /&gt;  (:export :hello-world))&lt;br /&gt;(in-package :sample.callee)&lt;br /&gt;&lt;br /&gt;(defun hello-world ()&lt;br /&gt;  (print "Hello, World!"))&lt;br /&gt;&lt;br /&gt;$ cat sample.asd &lt;br /&gt;(defsystem "sample"&lt;br /&gt;  :components ((:file "callee")&lt;br /&gt;               (:file "caller"))&lt;br /&gt;  :serial t)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;sample.asdがasdfから参照されるように設定し、common lispを起動します。&lt;br /&gt;&lt;br /&gt;以下の関数を評価することで、sampleプロジェクトをロードすることができます。sample.asdの:serialオプションによって、ファイルの依存関係を考慮した形でファイルがロードされます。&lt;br /&gt;&lt;pre&gt;(asdf:load-system 'sample)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1499969205813021306?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1499969205813021306/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1499969205813021306' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1499969205813021306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1499969205813021306'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/11/common-lisp.html' title='Common Lispでの、依存関係を考慮したファイルロード'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6586670255862964466</id><published>2011-11-07T02:29:00.004+09:00</published><updated>2011-11-07T02:36:12.744+09:00</updated><title type='text'>TPPと混合診療の関係を簡単にまとめ</title><content type='html'>&lt;br/&gt;TPPと混合診療の関係を簡単に調べてみたので、そのまとめ。&lt;br /&gt;&lt;br /&gt;重要なポイントとして、TPPによるアメリカの狙いの最も大きなものの１つが、サービス（金融）の自由化によって日本の個人資産を喰うこと。これは間違いない。わざわざサービス（金融）を後から捩じ込むだけのボリュームがあるターゲットは、日本だけだから。&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;アメリカ観点（混合診療を解禁しろ派）&lt;/h5&gt;混合診療解禁&lt;br /&gt;→皆保険枠と混合診療枠ができる&lt;br /&gt;→混合診療枠が医療保険のターゲット&lt;br /&gt;→医療保険のノウハウを持っているのはアメリカの保険会社&lt;br /&gt;→アメリカの保険会社はウマウマ&lt;br /&gt;&lt;br /&gt;ref. http://haetarou.web.fc2.com/TPP/TPP_Kaisetu.html&lt;br /&gt;&lt;br /&gt;※サービス（金融）はもともとTPPには入っておらず、アメリカが後から追加したもの。間違いなく、日本の個人資産を喰おうと狙っている&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;医師会観点（混合診療を解禁するな派）&lt;/h5&gt;混合診療解禁&lt;br /&gt;→「政府は、財政難を理由に、保険の給付範囲を見直そうとしている」&lt;br /&gt;→「混合診療を認めることによって、現在健康保険で見ている療養までも『保険外』とする」&lt;br /&gt;→高額な診療が保険外になる&lt;br /&gt;→高額な診療を受ける患者が減る&lt;br /&gt;→医者の取り分が減る。困る&lt;br /&gt;&lt;br /&gt;※医者は、国の医療費からたくさん診療費をもらいたい&lt;br /&gt;&lt;br /&gt;ref. http://www.med.or.jp/nichikara/kongouqa/&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;厚生労働省観点（混合診療を解禁しろ派）&lt;/h5&gt;建前上、財政健全化したい&lt;br /&gt;→医療費を減らしたい&lt;br /&gt;→混合診療を解禁することによって、保険対象を減らすことで、医療費を減らす&lt;br /&gt;&lt;br /&gt;※現状では、混合診療を認めていないため、その分手厚く保険対象にしてある&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6586670255862964466?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6586670255862964466/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6586670255862964466' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6586670255862964466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6586670255862964466'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/11/tpp.html' title='TPPと混合診療の関係を簡単にまとめ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1001208927097340469</id><published>2011-10-25T01:05:00.003+09:00</published><updated>2011-11-29T00:42:16.232+09:00</updated><title type='text'>粒子法シミュレーションを記述するための言語を設計中</title><content type='html'>&lt;br/&gt;粒子法シミュレーションを記述するための言語を考えている。&lt;br /&gt;&lt;br /&gt;最初のステップとして、質点の自由落下を表現できるようになったので、紹介する。&lt;br /&gt;&lt;br /&gt;いま考えている言語を使うと、自由落下は以下のような記述で表現できる。Haskell上のEDSLとして実装されており、質点の座標の時間変化を出力する。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import Simulation&lt;br /&gt;&lt;br /&gt;main = print $ take 100&lt;br /&gt;             $ map (flip machineRegisterValue "x")&lt;br /&gt;             $ runMachine (freeFall 0 0)&lt;br /&gt;&lt;br /&gt;freeFall x0 v0 = do&lt;br /&gt;  define "x" (constant x0 + integral (var "v" * constant dt))&lt;br /&gt;  define "v" (constant v0 + integral (var "a" * constant dt))&lt;br /&gt;  define "a" (constant g)&lt;br /&gt;&lt;br /&gt;g  = -9.8&lt;br /&gt;dt = 0.01&lt;/pre&gt;&lt;br /&gt;上でインポートしているSimulationモジュールは&lt;a href="https://github.com/takagi/blog-codes/blob/master/20111025/Simulation.hs"&gt;こちら&lt;/a&gt;からダウンロードできる。まだまだ作りかけのプロトタイプである。&lt;br /&gt;&lt;br /&gt;言語の設計にあたって狙いとしているのは、「数式を記述すると、それがそのままシミュレーションとして動く」ことである。freeFallの定義において、数式に近い形で宣言的にシミュレーションを記述できていることに注目して欲しい。&lt;br /&gt;&lt;br /&gt;位置x, 速度v, 加速度aの定義の順番は任意である。プログラマは、計算の順番ではなく、数式の意味に従って定義を記述できる。計算の順番は、モジュールが自動的に判断する。このような「表現と計算の分離」がこの言語の基本となるコンセプトである。&lt;br /&gt;&lt;br /&gt;数式を記述するという点では、Mathematicaに代表されるようなシンボル計算と似ているが、そういったソフトウェアはナンバークランチングな数値計算のためというよりは、数式を正確に解くためのものである。その意味で、ここで考えている言語はMathematicaのようなものとは異なる。&lt;br /&gt;&lt;br /&gt;現時点では、記述したシミュレーションはHaskellプログラムとしてインタプリタ的に実行されるが、将来的にコンパイラを作ることも可能である。コンパイラを作れば、たとえば、記述したシミュレーションをCUDAを使って実行するといったことができる。&lt;br /&gt;&lt;br /&gt;いったん、上記では質点１つのシミュレーションとなっているが、直近の拡張として、物理量を集合として扱うことで、多粒子のシミュレーションを記述できるようにする予定である。多粒子のシミュレーションを記述できるようになれば、このブログでこれまで行ってきたようなシミュレーションを、この言語で改めて記述し直すことができる。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1001208927097340469?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1001208927097340469/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1001208927097340469' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1001208927097340469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1001208927097340469'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/10/blog-post_25.html' title='粒子法シミュレーションを記述するための言語を設計中'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7752010341111373349</id><published>2011-10-19T21:58:00.035+09:00</published><updated>2011-10-28T15:43:12.387+09:00</updated><title type='text'>シミュレーション動画一覧</title><content type='html'>&lt;br/&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。動画は随時追加されていきます。&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2011/09/falling-rigid-bunnies.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://2.bp.blogspot.com/-npoVF4KzTs8/Tp7E_Zvk3XI/AAAAAAAAATo/eF4DnI--bs8/s200/result00001213.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2011/09/falling-rigid-bunnies.html"&gt;Falling Rigid Bunnies&lt;/a&gt;&lt;br /&gt;たくさんのスタンフォードバニーを落下させる剛体シミュレーションを行い、結果をレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/09/falling-rigid-bunnies.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2011/04/bunny-shaped-fuluid-simulation.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-Sh9RsqMWCFI/Tp7FgzV4WGI/AAAAAAAAAT0/Wr6sERd6cPk/s200/result00000023.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2011/04/bunny-shaped-fuluid-simulation.html"&gt;Bunny-shaped fluid simulation &lt;/a&gt;&lt;br /&gt;スタンフォードバニーの形をした流体を落下させて、結果をレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/04/bunny-shaped-fuluid-simulation.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/09/blog-post.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://2.bp.blogspot.com/-66rsP8fhxzE/Tp7HAJBxS6I/AAAAAAAAAUA/OJK-i_cND58/s200/result00000075.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2010/09/blog-post.html"&gt;粒子法による固液連成シミュレーション &lt;/a&gt;&lt;br /&gt;粒子法で固体と液体の連成シミュレーションをおこない、結果をレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/09/blog-post.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://3.bp.blogspot.com/-jhC5YaSm5wU/TqbAddvF9MI/AAAAAAAAAUM/t6kOrifjYdc/s1600/coupling.jpg" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;粒子法で固体と液体の連成シミュレーションをおこない、結果を粒子でレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_26.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-lOHt8mxX4Wc/TqbCZyyREjI/AAAAAAAAAUY/UryVN3ws2UQ/s1600/fallingcube.jpg" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_26.html"&gt;傾斜平面への剛体落下シミュレーション&lt;/a&gt;&lt;br /&gt;傾斜平面への立方体の落下を、粒子ベースの剛体シミュレーションとして計算しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_26.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://3.bp.blogspot.com/-GfxiG34SOHU/TqbCyG8GQgI/AAAAAAAAAUk/UqOkTKW3jSQ/s1600/fallingcube2.jpg" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;粒子ベースの剛体シミュレーションとして、平面への立方体の落下を計算しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-sqDs2lDEN_8/TqbC-QIGOUI/AAAAAAAAAUw/TDCO0Z0Mtuk/s1600/cubes.jpg" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;粒子ベースのアプローチで多体衝突の剛体シミュレーションをしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-vqEJM2Qq7yg/TqbDILyswvI/AAAAAAAAAU8/l69mXMeGjjw/s1600/result00000060.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;SPHによる巻き波のシミュレーション第３回&lt;/a&gt;&lt;br /&gt;粒子法シミュレーション(SPH)によって、巻き波のシミュレーションをしてみました。砕波の様子が見られます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://3.bp.blogspot.com/-mmCeMJFLJlU/TqbDailsvXI/AAAAAAAAAVI/Nb9fR4hzKEw/s1600/result00000092.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;３次元の粒子法シミュレーションを、スケールを２倍にして実施し、結果をレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://3.bp.blogspot.com/-6mkUR-2AI-8/TqbDh293M_I/AAAAAAAAAVU/7dAGBRNeUdQ/s1600/result00000049.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;粒子法シミュレーションを３次元で行い、結果をレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="border-bottom: dashed 1px #808080;"&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-lH5BybJyXOQ/TqbDovyaolI/AAAAAAAAAVg/C6156Hhbfi8/s1600/result00000069.png" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;2次元の粒子法シミュレーションの結果を、流体としてレンダリングしました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;動画を見る&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法(SPH)のプログラム&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s1600/sph2.png" /&gt;粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/sph.html"&gt;粒子法(SPH)のプログラム一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;論文まとめ&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://sports-family.jp/amagasaki-night-runners/image/no_image.gif" /&gt;&lt;a href="http://kamonama.blogspot.com/2010/12/cg.html"&gt;【まとめ】CG、シミュレーション関係の論文 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/particle-based-fluid-simulation-for.html"&gt;【論文】Particle-Based Fluid Simulation ...&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/two-way-coupling-of-fluids-to-rigid-and.html"&gt;【論文】Two-way Coupling of Fluids to ...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="gray"&gt;&lt;b&gt;そのほかの論文まとめ（準備中）&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7752010341111373349?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7752010341111373349/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7752010341111373349' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7752010341111373349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7752010341111373349'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/10/blog-post.html' title='シミュレーション動画一覧'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-npoVF4KzTs8/Tp7E_Zvk3XI/AAAAAAAAATo/eF4DnI--bs8/s72-c/result00001213.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2303556161519678753</id><published>2011-10-08T22:45:00.073+09:00</published><updated>2011-10-28T15:44:35.462+09:00</updated><title type='text'>粒子法(SPH)のプログラム　解説エントリ一覧</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RAWLzWyxqvU/TpBTr5JqGfI/AAAAAAAAATg/d-yAk28whG8/s1600/result00000060.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="150" width="200" src="http://4.bp.blogspot.com/-RAWLzWyxqvU/TpBTr5JqGfI/AAAAAAAAATg/d-yAk28whG8/s200/result00000060.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;粒子法(SPH)のプログラムを解説したエントリです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;まずプログラムの概要を示し、その後部分ごとに詳細な説明をしています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;SPHによる巻き波のシミュレーション１&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;SPHによる巻き波のシミュレーション３&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;動画&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-JTwKlgn_pyw/TqpPFx79pUI/AAAAAAAAAWQ/wCe19TGHiCo/s200/movies2.png" /&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post.html"&gt;動画の一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;論文まとめ&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://sports-family.jp/amagasaki-night-runners/image/no_image.gif" /&gt;&lt;a href="http://kamonama.blogspot.com/2010/12/cg.html"&gt;【まとめ】CG、シミュレーション関係の論文 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/particle-based-fluid-simulation-for.html"&gt;【論文】Particle-Based Fluid Simulation ...&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/two-way-coupling-of-fluids-to-rigid-and.html"&gt;【論文】Two-way Coupling of Fluids to ...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="gray"&gt;&lt;b&gt;そのほかの論文まとめ（準備中）&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2303556161519678753?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2303556161519678753/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2303556161519678753' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2303556161519678753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2303556161519678753'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/10/sph.html' title='粒子法(SPH)のプログラム　解説エントリ一覧'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RAWLzWyxqvU/TpBTr5JqGfI/AAAAAAAAATg/d-yAk28whG8/s72-c/result00000060.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1952726857648418343</id><published>2011-09-24T19:04:00.004+09:00</published><updated>2011-10-04T05:13:42.218+09:00</updated><title type='text'>Falling Rigid Bunnies</title><content type='html'>&lt;br/&gt;Falling rigid bunnies, with particle-based simulation.&lt;br /&gt;&lt;br /&gt;400 bunnies are falling, which consist of about 100 particles respectively.&lt;br /&gt;&lt;br /&gt;&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/je-5djOjQzw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法のプログラム&lt;/h5&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;SPHによる巻き波のシミュレーション１&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;SPHによる巻き波のシミュレーション３&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;固液連成シミュレーションに関するエントリ&lt;/h5&gt;&lt;a href="http://kamonama.blogspot.com/2010/09/blog-post.html"&gt;粒子法による固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;流体シミュレーションに関するエントリ&lt;/h5&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/04/bunny-shaped-fuluid-simulation.html"&gt;Bunny-shaped fluid simulation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;剛体シミュレーションに関するエントリ&lt;/h5&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/09/falling-rigid-bunnies.html"&gt;Falling Rigid Bunnies&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1952726857648418343?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1952726857648418343/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1952726857648418343' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1952726857648418343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1952726857648418343'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/09/falling-rigid-bunnies.html' title='Falling Rigid Bunnies'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/je-5djOjQzw/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3404966861526412029</id><published>2011-08-04T23:31:00.000+09:00</published><updated>2011-08-04T23:31:05.197+09:00</updated><title type='text'>L-systemでのモデル生成</title><content type='html'>&lt;br/&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://prideout.net/blog/p72/Art.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="132" src="http://prideout.net/blog/p72/Art.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;新しくPixarの中の人になったらしい人のエントリが面白かった。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://prideout.net/blog/?p=72"&gt;Homage to Structure Synth&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;L-systemでモデルを生成して、RenderManでレンダリングしている。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3404966861526412029?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3404966861526412029/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3404966861526412029' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3404966861526412029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3404966861526412029'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/08/l-system.html' title='L-systemでのモデル生成'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3958695868481455449</id><published>2011-07-31T02:28:00.007+09:00</published><updated>2011-07-31T02:40:47.199+09:00</updated><title type='text'>構文チェックツールのFlymakeを、Haskell用に設定する方法</title><content type='html'>&lt;div class="separator" style="float: right; margin: 10px"&gt;&lt;img border="0" height="132" src="http://3.bp.blogspot.com/-sG9a1oWaaPI/TbbF4w-L4vI/AAAAAAAAATQ/IYWSnHpVWCM/s200/haskell.png" width="150" /&gt;&lt;/div&gt;&lt;br /&gt;Emacsでは、Flymakeを使うことで、コードを書くと随時文法チェックが行われ、エラーのある行がバッファ上に表示されるようになる。&lt;br /&gt;&lt;br /&gt;Haskell用にFlymakeを設定したので、その設定を書いておく。.emacsを編集するだけでOKだ。&lt;br /&gt;&lt;br /&gt;Flymakeでは、基本的にコードと同じディレクトリにあるMakefileを使って文法チェックを行う形になっているが、いちいちMakefileを用意するのは煩わしいので、Makefileなしでも動作するようにした。特定のパラメータが必要な場合などは、Makefileを用意すれば自動的にそちらを使って文法チェックが行われるようにしてある。&lt;br /&gt;&lt;h4&gt;.emacsの設定&lt;/h4&gt;&lt;br /&gt;以下のelispを.emacsに追加するだけでOK。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;※Emacs21以前の場合は、flymake.elが標準で付属していないので、自分でインストールする必要がある。Emacs22以降であれば、標準で付属している。&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;;; Flymake Haskell&lt;br /&gt;&lt;br /&gt;(require 'flymake)&lt;br /&gt;&lt;br /&gt;(defun flymake-haskell-make-command (temp-file)&lt;br /&gt;  (list "make"&lt;br /&gt;        (flymake-haskell-make-parameters temp-file)))&lt;br /&gt;&lt;br /&gt;(defun flymake-haskell-make-parameters (temp-file)&lt;br /&gt;  (list "-s"&lt;br /&gt;        "-C"&lt;br /&gt;        "."&lt;br /&gt;        (concat "CHK_SOURCES=" temp-file)&lt;br /&gt;        "SYNTAX_CHECK_MODE=1"&lt;br /&gt;        "check-syntax"))&lt;br /&gt;&lt;br /&gt;(defun flymake-haskell-default-ghc-command (local-file)&lt;br /&gt;  (list "ghc"&lt;br /&gt;        (flymake-haskell-default-ghc-parameters&lt;br /&gt;          (file-name-nondirectory local-file))))&lt;br /&gt;&lt;br /&gt;(defun flymake-haskell-default-ghc-parameters (local-file)&lt;br /&gt;  (list "-fno-code" local-file))&lt;br /&gt;&lt;br /&gt;(defun makefile-exists-p (path)&lt;br /&gt;  (file-exists-p (concat path "Makefile")))&lt;br /&gt;&lt;br /&gt;(defun flymake-haskell-init()&lt;br /&gt;  (let* ((temp-file  (flymake-init-create-temp-buffer-copy&lt;br /&gt;                       'flymake-create-temp-inplace))&lt;br /&gt;         (local-file (file-relative-name&lt;br /&gt;                       temp-file&lt;br /&gt;                       (file-name-directory buffer-file-name))))&lt;br /&gt;    (if (makefile-exists-p (file-name-directory buffer-file-name))&lt;br /&gt;        (flymake-haskell-make-command temp-file)&lt;br /&gt;        (flymake-haskell-default-ghc-command local-file))))&lt;br /&gt;&lt;br /&gt;(push '(".+\\hs$" flymake-haskell-init) flymake-allowed-file-name-masks)&lt;br /&gt;(push '(".+\\lhs$" flymake-haskell-init) flymake-allowed-file-name-masks)&lt;br /&gt;(push '("^\\(\.+\.hs\\|\.lhs\\):\\([0-9]+\\):\\([0-9]+\\):\\(\.+\\)" 1 2 3 4)&lt;br /&gt;      flymake-err-line-patterns)&lt;br /&gt;&lt;br /&gt;(add-hook 'haskell-mode-hook&lt;br /&gt;    '(lambda ()&lt;br /&gt;       (if (not (null buffer-file-name))&lt;br /&gt;           (flymake-mode))))&lt;/pre&gt;&lt;h4&gt;説明&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;flymakeの有効化&lt;/b&gt;&lt;br /&gt;add-hookによって、haskell-modeに入ったときに(flymake-mode)が実行される。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;拡張子の対応付け、エラーメッセージの正規表現の定義&lt;/b&gt;&lt;br /&gt;add-hookの上でpushしているのは、Haskellの.hsファイル、.lhsファイルとflymakeの初期化関数との紐付け、及び、ghcの出力から行番号やエラーメッセージを抽出するための正規表現である。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;flymake haskellの初期化&lt;/b&gt;&lt;br /&gt;flymake-modeに入ると、flymake-haskell-initが実行される。flymake-haskell-initでは、構文チェック用にコードをコピーし、そのコードを構文チェックするためのコマンドをflymake本体に返している。このとき、チェック対象のコードと同じディレクトリにMakefileがあるかどうかでコマンドを変えている。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;チェック対象のコードと同じディレクトリにMakefileがある場合&lt;/b&gt;&lt;br /&gt;この場合、構文チェックのコマンドはflymake-haskell-make-command関数によって生成される。flymakeがデフォルトで使用するmakeコマンドと同じものを生成している。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;チェック対象のコードと同じディレクトリにMakefileがない場合&lt;/b&gt;&lt;br /&gt;一方、この場合は、Makefileなしで構文チェックを行うよう、GHCを使ったコマンドを、flymake-haskell-default-ghc-command関数で生成している。生成するコマンドの形式は、&lt;br /&gt;&lt;pre&gt;("ghc" ("-fno-code" 構文チェック用ファイルの名前))&lt;/pre&gt;となる。外側のリストのcarがghcコマンド、cadrがghcコマンドに渡すパラメータのリストである。これがflymakeに渡され、実行される。&lt;br /&gt;&lt;h4&gt;補足&lt;/h4&gt;&lt;br /&gt;flymakeではエラーメッセージも表示してくれるのだが、ghcが複数行にわたるエラーメッセージを返す場合にはうまく処理できない。&lt;br /&gt;&lt;br /&gt;flymakeは、それだけで完全にコンパイルをとおすためではなく、コードを書くときのタイポ回避程度に位置づけると良いだろう。&lt;br /&gt;&lt;h4&gt;参考&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://www.emacswiki.org/emacs/FlymakeHaskell"&gt;http://www.emacswiki.org/emacs/FlymakeHaskell&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=4274068242" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3958695868481455449?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3958695868481455449/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3958695868481455449' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3958695868481455449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3958695868481455449'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/flymake-haskell.html' title='構文チェックツールのFlymakeを、Haskell用に設定する方法'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sG9a1oWaaPI/TbbF4w-L4vI/AAAAAAAAATQ/IYWSnHpVWCM/s72-c/haskell.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3226522106526896018</id><published>2011-07-23T23:51:00.000+09:00</published><updated>2011-07-23T23:51:40.615+09:00</updated><title type='text'>【まとめ】埋め込みDSL関係の論文(2)</title><content type='html'>&lt;br&gt;引き続き、埋め込みDSL(Domain Specific Language)関係の論文をまとめたので書いておく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Template Meta-programming for Haskell&lt;/b&gt; (2002) - Tim Sheard, and Simon Peyton Jones&lt;br /&gt;→Haskellでコンパイル時メタプログラミングを行うTemplate Haskellの論文&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Special-Purpose Language for Picture Drawing&lt;/b&gt; (1997) - Samuel N. Kamin, and David Hyatt&lt;br /&gt;→MLを使って、２次元の絵を表現するための組み込みDSLを作る&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Compiling Embedded Languages&lt;/b&gt; (2000) - Conal Elliott, Sigbjorn Finne, and Oege de Moor&lt;br /&gt;→Kaminのプログラム生成のアイデアを元に、組み込みDSLの最適化コンパイラを示す。計算効率が重要な分野の応用例として、この方法を画像合成・操作のための言語Panに適用する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Functional Implementations of Continuous Modeled Animation&lt;/b&gt; (1997) - Conal Elliott, and Paul Hudak&lt;br /&gt;→連続的アニメーションのモデルを設計し、それを試作として実装してみせる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Programming Graphics Processors Functionally&lt;/b&gt; (2004) - Conal Elliott&lt;br /&gt;→3Dグラフィクスのための組み込みDSLであるVertigoを紹介する。VertigoはHaskellで書かれている。Vertigoは、GPUのコードを生成する最適化コンパイラである。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Functional Reactive Animation&lt;/b&gt; (1997) - Conal Elliott, and Paul Hudak&lt;br /&gt;→インタラクティブでリッチなアニメーションを構築するためのフレームワークFRAN(Functional Reactive Animation)を紹介する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Building Domain-Specific Embedded Languages&lt;/b&gt; (1996) - Paul Hudak&lt;br /&gt;→良いソフトウェアを書くには抽象化が重要であり、最も"理想的"な抽象化は問題に合わせて設計されたプログラム言語を作ることであるとして、その障害である言語設計と実装の困難さを、組み込みDSLというアプローチで回避することを提案する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Applicative programming with effects&lt;/b&gt; (2008) - Conor McBride, and Ross Paterson&lt;br /&gt;→副作用を持つプログラムの抽象化の方法として、Monadよりも弱いため広く使えるApplicativeファンクタを紹介する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Arrows, Robots, and Functional Reactive Programming&lt;/b&gt; - Paul Hudak, Antony Courteny, Henrik Nilsson, and John Peterson&lt;br /&gt;→FRP(Functional Reactive Programming)の実例として、Haskellによる組み込みDSLであるYampaを紹介する。Yampaではモナドの一般化としてアローを使用する。Yampaによって、時間変化を扱うプログラムを宣言的なスタイルで実現できる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■関連エントリ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl.html"&gt;【まとめ】埋め込みDSL関係の論文(1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3226522106526896018?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3226522106526896018/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3226522106526896018' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3226522106526896018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3226522106526896018'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/dsl2.html' title='【まとめ】埋め込みDSL関係の論文(2)'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2114600539263150710</id><published>2011-07-08T23:55:00.002+09:00</published><updated>2011-07-23T23:52:53.013+09:00</updated><title type='text'>【まとめ】埋め込みDSL関係の論文(1)</title><content type='html'>&lt;br&gt;埋め込みDSL(Domain Specific Language)関係の論文をまとめたので書いておく。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Plugging Haskell in&lt;/b&gt; (2004) - Andre Pang, Don Stewart, Sean Seefried, and Manuel M. T. Chakravarty&lt;br /&gt;→Haskellをプラグインとして使う方法を紹介している。紹介されているプラグインは、HaskellでもHaskell FFIがサポートしている他の言語でも使用できる。GHCで提供されている仕組みを使って、プラグイン、実行時コンパイル、動的リンクを実現する方法を示している。また、サンプルも紹介されている。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Standard ML as a Meta-Programming Language&lt;/b&gt; (1996) - Samuel Kamin&lt;br /&gt;→Standard MLをメタプログラミング言語として使うことを提案し、４つの実例を示している。Standard MLのコードからCのコードを生成。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Building program generators the easy way&lt;/b&gt; - Samuel Kamin&lt;br /&gt;→関数型プログラミング言語で簡単にプログラムジェネレータを作ることができることを紹介している。この方法によって、ソフトウェア開発に関数型プログラム言語を便利に応用できる可能性を示している。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Effecient Image Manipulation via Run-time Compilation&lt;/b&gt; (1999) - Oege de Moor, Conal Elliott, and Sigbjorn Finne&lt;br /&gt;→DSLとして定義したイメージ操作システムを、実行時に最適化・コンパイルすることで、その効率化する方法を紹介している。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Optimizing Embedded DSLs using Template Haskell&lt;/b&gt; (2004) - Sean Seefried, Manuel Chakravarty, and Gabriele Keller&lt;br /&gt;→コンパイル時メタプログラミングによってEDSLの実行効率を改善する方法を示している。EDSLとしてのシンプルさを保ったまま実行効率を改善する。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GPU Kernels as Data-Parallel Array Computation in Haskell&lt;/b&gt; (2009) - Sean Lee, Manuel M. T. Chakravarty, and Vinod Grover&lt;br /&gt;→HaskellにGPUカーネルを埋め込んでデータ並列の配列計算を行う方法を示している。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Accelerating Haskell Array Codes with Multicore GPUs&lt;/b&gt; (2011) - Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, Trevor L. McDonell, and Vinod Grover&lt;br /&gt;→GPUコーンピューティングの抽象度を上げるために、配列計算の高レベルDSLを提案する。HaskellにこのDSLを埋め込み、NVIDIAのCUDAのためのコードを実行時に生成する。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■関連エントリ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/07/dsl2.html"&gt;【まとめ】埋め込みDSL関係の論文(2) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2114600539263150710?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2114600539263150710/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2114600539263150710' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2114600539263150710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2114600539263150710'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/dsl.html' title='【まとめ】埋め込みDSL関係の論文(1)'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4101235073141441397</id><published>2011-07-06T21:26:00.001+09:00</published><updated>2011-07-06T21:27:11.426+09:00</updated><title type='text'>Language-oriented programming</title><content type='html'>&lt;BR&gt;A kind of programming that's quite common in Common Lisp and relatively uncommon in non-Lisp Languages.&lt;br /&gt;&lt;br /&gt;Rather than provide an API built primarily out of functions, classes and macros, language-oriented programming provides language that you can embed in your Common Lisp programs.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4274067211" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4101235073141441397?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4101235073141441397/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4101235073141441397' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4101235073141441397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4101235073141441397'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/language-oriented-programming.html' title='Language-oriented programming'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-998287640523845841</id><published>2011-07-05T23:10:00.002+09:00</published><updated>2011-07-05T23:15:57.774+09:00</updated><title type='text'>LispマクロとTemplate Haskellの違い</title><content type='html'>&lt;BR&gt;LispマクロとTemplate Haskellには違いがある。&lt;br /&gt;&lt;br /&gt;LispのマクロはS式を変換する。一方、Template Haskellが変換するものはHaskellのAST(Abstract Syntax Tree)である。&lt;br /&gt;&lt;br /&gt;従って、Template Haskellで変換できる式は、まずASTとして有効でなければならない。ASTとして有効な式でなければTemplate Haskellに渡せない。Lispの場合はS式でさえあれば良い。シンボルをただ並べたリストでも良い。&lt;br /&gt;&lt;br /&gt;制限が小さい分、Lispマクロの方が強力だといえるだろう。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4274066371" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-998287640523845841?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/998287640523845841/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=998287640523845841' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/998287640523845841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/998287640523845841'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/lisptemplate-haskell.html' title='LispマクロとTemplate Haskellの違い'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4894561654443268607</id><published>2011-07-04T22:19:00.004+09:00</published><updated>2011-07-04T23:50:40.905+09:00</updated><title type='text'>【書評】実用Common  Lisp</title><content type='html'>実用Common Lisp では、人工知能(AI)、コンピュータプログラミング技術、Common Lispを扱っている。原題はParadigms of Artificial Intelligence Programming : Case Studies in Common Lisp。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;「第7章 STUDENT:代数の文章題を解く」&lt;/b&gt;&lt;br /&gt;代数の文章題を解く。方法は、文章題を代数の数式に変換してそれを解くというもの。自然言語（英語）と数式の翻訳表をプログラムとして持つ。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;「第8章 記号計算:簡単化プログラム」&lt;/b&gt;&lt;br /&gt;Common Lispの数式処理システムであるMaximaのサブセットを作る。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;「第9章 効率性の問題」&lt;/b&gt;&lt;br /&gt;高速化の手法の１つとしてコンパイルをとりあげる。宣言的に記述された問題を、マクロを使ってコンパイル時にLispコードに変換する。&lt;br /&gt;&lt;br /&gt;こういうのを「知能」だと見なしていた時代があったんだなぁ。&lt;br /&gt;&lt;br /&gt;Lispは人工知能の分野で使われるというが、その理由が腹落ちした。この本によると、解き方が不明な問題に対するアプローチとしては、問題をそのまま宣言的に記述しそれをプログラムコードに変換するプログラムを書くのが適切であるという。そのような問題を扱う代表例がAIだった。そして、宣言的に記述された問題をプログラムコードに変換するのにLisp（のマクロ）が向いていたということだった。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4798118907" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4894561654443268607?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4894561654443268607/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4894561654443268607' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4894561654443268607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4894561654443268607'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/07/common-lisp.html' title='【書評】実用Common  Lisp'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5461903258989401761</id><published>2011-05-30T22:43:00.000+09:00</published><updated>2011-05-30T22:43:15.842+09:00</updated><title type='text'>【ドラフト】物理シミュレーションを対象としたDSELについての試み</title><content type='html'>&lt;h4&gt;Abstract&lt;/h4&gt;&lt;br /&gt;物理シミュレーションを対象としたDSELについての試みを紹介する。このDSELを使うことで、数式に極めて近い形で宣言的に定義を記述するだけで物理シミュレーションのプログラムを書くことができる。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;組み込みドメイン固有言語(DSEL)とは&lt;/h4&gt;&lt;br /&gt;ドメイン固有言語(Domain-Specific Language, DSL)は、特定の問題領域に特化したプログラム言語を提供することでソフトウェア開発の生産性を向上させるものである。DSLは問題領域に適した抽象レベルでの記述を可能にするため、コード量の低減やそれに伴うメンテナンス性の向上といったメリットがある一方、新しく言語を作ること自体が高コストであるという問題がある。&lt;br /&gt;&lt;br /&gt;その問題に対する解として、組み込みドメイン固有言語(Domain-Specific Embedded Language, DSEL)は、既存の汎用言語に組み込む形でドメイン固有言語を実装するものである。このアプローチによって、ホスト言語のライブラリやコンパイラ、デバッガ、プロファイラを再利用できるというメリットが得られる。&lt;br /&gt;&lt;br /&gt;DSELについては、以下の文献がある。&lt;br /&gt;・Building domain-specific embedded languages&lt;br /&gt;・Huddakの、Haskore music notation&lt;br /&gt;・conal elliot, Functional Image&lt;br /&gt;・金融契約&lt;br /&gt;・Haskell School of Expression&lt;br /&gt;&lt;br /&gt;ここでは、物理シミュレーションを対象としたDSELについての試みを紹介する。ホスト言語にはDSELを作るのに向いているという理由でHaskellを選んでいる。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;物理シミュレーションを対象としたDSEL&lt;/h4&gt;&lt;br /&gt;まず具体的な例を挙げよう。簡単な例として、質点の自由落下のシミュレーションを考えてみる。&lt;br /&gt;&lt;br /&gt;自由落下を数式で表現すると以下のようになる。&lt;br /&gt;&lt;br /&gt;... 数式 ...&lt;br /&gt;&lt;br /&gt;提案するDSELを使うことで、質点の位置の時間過程を出力するプログラムを以下のように記述できる。(これは、そのまま実行可能なコードである)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import Process                -- DSELを定義したモジュール&lt;br /&gt;&lt;br /&gt;main = print $ take 10 $ process x&lt;br /&gt;                              -- 10ステップ分の位置を表示&lt;br /&gt;&lt;br /&gt;x = x0 +: integral' (v * dt)  -- 質点の位置&lt;br /&gt;v = v0 +: integral (a * dt)   -- 質点の速度&lt;br /&gt;a = g                         -- 質点の加速度&lt;br /&gt;&lt;br /&gt;x0 = 10.0                     -- 質点の初期位置&lt;br /&gt;v0 = 0                        -- 質点の初期速度&lt;br /&gt;dt = constant 0.01            -- 時間刻み&lt;br /&gt;g  = constant (-9.8)          -- 重力加速度&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これだけである。このコードをコンパイルして実行すると、10タイムステップ分の質点の位置が出力される。質点の位置、速度、加速度について、数式そのままの定義を宣言的に記述するだけであることに注目されたい。計算順序について考慮する必要はない。つまり、定義さえ記述すれば「実装」はもはや不要なのである。&lt;br /&gt;&lt;br /&gt;もしこれをDSELを使わずにそのまま書くと、「aからvを計算し、vからxを計算する。それをタイムステップごとに繰り返す」という実装を自分で書くことになるだろう。ごく普通の、シミュレーションのプログラムの流れである。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;DSELの設計&lt;/h4&gt;&lt;br /&gt;...DSELの設計について&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;DSELの実装&lt;/h4&gt;&lt;br /&gt;...DSELの実装について&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;DSELの適用可能条件&lt;/h4&gt;&lt;br /&gt;&lt;h4&gt;DSELの課題&lt;/h4&gt;&lt;br /&gt;・計算効率&lt;br /&gt;　・持ち上げられているため、コンパイラの最適化が効かない&lt;br /&gt;　　→メタプログラミングによるコンパイル時最適化 or コードジェネレータ&lt;br /&gt;・スペースリーク&lt;br /&gt;　・condAを使うとスペースリークする&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;DSEL、現状での利用可能範囲&lt;/h4&gt;&lt;br /&gt;・配列まるごとをProcessの対象とする。そのなかの要素１つ１つは特定のタイムステップについて明示的に記述&lt;br /&gt;　→上記の２つの問題は生じない&lt;br /&gt;　→ただし、フルにDSELで書くことができず、DSELとpure Haskellのハイブリッドでの記述となる&lt;br /&gt;　　・配列まるごと→DSELの世界での記述&lt;br /&gt;　　・配列内の要素１つ１つについて→あるタイムステップについて明示的にpure Haskellの世界に下ろして記述&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5461903258989401761?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5461903258989401761/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5461903258989401761' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5461903258989401761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5461903258989401761'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/05/dsel.html' title='【ドラフト】物理シミュレーションを対象としたDSELについての試み'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5845639409750274135</id><published>2011-04-27T22:20:00.006+09:00</published><updated>2011-09-24T19:09:42.464+09:00</updated><title type='text'>Bunny-shaped fluid simulation</title><content type='html'>&lt;br&gt;スタンフォードバニーの形で流体の落下をシミュレーション&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7LeVFv712M0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7LeVFv712M0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5845639409750274135?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5845639409750274135/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5845639409750274135' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5845639409750274135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5845639409750274135'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/04/bunny-shaped-fuluid-simulation.html' title='Bunny-shaped fluid simulation'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-259909120047992431</id><published>2011-04-26T22:18:00.000+09:00</published><updated>2011-04-26T22:18:12.237+09:00</updated><title type='text'>【まとめ】Haskellでの正格評価とWHNF</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sG9a1oWaaPI/TbbF4w-L4vI/AAAAAAAAATQ/IYWSnHpVWCM/s1600/haskell.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="132" src="http://3.bp.blogspot.com/-sG9a1oWaaPI/TbbF4w-L4vI/AAAAAAAAATQ/IYWSnHpVWCM/s200/haskell.png" width="150" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Haskellは遅延評価を特徴とする言語ですが、seq関数や!パターンを使うことで正格評価をさせることもできます。&lt;br /&gt;&lt;br /&gt;ただし、最終的な値まで完全に評価(deepseq)されるわけではなく、WHNF(Week Head Normal Form)に簡約されるまでの評価です。&lt;br /&gt;&lt;br /&gt;WHNFとは、簡単にいうと、以下のいずれかの形をもつ式です。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;プリミティブである&lt;/li&gt;&lt;li&gt;式の一番左にデータコンストラクタがある&lt;/li&gt;&lt;li&gt;式の一番左にλがある&lt;/li&gt;&lt;/ul&gt;正格評価を使ったときにコードの挙動がどう変わるのか、具体的には以下のようになります。&lt;br /&gt;&lt;h4&gt;ケース１（遅延評価）&lt;/h4&gt;&lt;pre&gt;$ cat case1.hs&lt;br /&gt;loop 0 i = i&lt;br /&gt;loop n i = loop (n-1) (i+1)&lt;br /&gt;&lt;br /&gt;n = 100000000&lt;br /&gt;&lt;br /&gt;main = let x = loop n 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in putStrLn "1"&lt;br /&gt;$ ghc --make -O case1.hs&lt;br /&gt;$ time ./case1&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;real    0m0.008s&lt;br /&gt;user    0m0.001s&lt;br /&gt;sys     0m0.003s&lt;/pre&gt;遅延評価の場合、let式の中のxは評価されません。評価されるのは文字の出力のみのため、実行時間はごくわずかです。&lt;br /&gt;&lt;h4&gt;ケース２（xを正格評価）&lt;/h4&gt;&lt;pre&gt;$ cat case2.hs &lt;br /&gt;loop 0 i = i&lt;br /&gt;loop n i = loop (n-1) (i+1)&lt;br /&gt;&lt;br /&gt;n = 100000000&lt;br /&gt;&lt;br /&gt;main = let !x = loop n 0&lt;br /&gt;       in putStrLn "1"&lt;br /&gt;$ ghc --make -O -XBangPatterns case2.hs&lt;br /&gt;$ time ./case2&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;real    0m3.470s&lt;br /&gt;user    0m1.873s&lt;br /&gt;sys     0m0.032s&lt;/pre&gt;xに正格フラグ(!)を付けて正格評価にします。xは実際には使われませんが、評価はされるため、その分実行時間が長くなっています。&lt;br /&gt;&lt;h4&gt;ケース３（代数データ型を使い、遅延評価）&lt;/h4&gt;&lt;pre&gt;$ cat case3.hs&lt;br /&gt;data X = X Int&lt;br /&gt;&lt;br /&gt;loop 0 i = i&lt;br /&gt;loop n i = loop (n-1) (i+1)&lt;br /&gt;&lt;br /&gt;n = 100000000&lt;br /&gt;&lt;br /&gt;main = let x = X $ loop n 0&lt;br /&gt;       in putStrLn "1"&lt;br /&gt;$ ghc --make -O case3.hs&lt;br /&gt;$ time ./case3&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;real    0m0.006s&lt;br /&gt;user    0m0.001s&lt;br /&gt;sys     0m0.003s&lt;/pre&gt;ケース１と同様に遅延評価ですが、loop関数の結果をデータコンストラクタXに適用してからxに束縛しています。ケース１と同様、xは評価されません。評価されるのは文字の出力のみのため、実行時間はごくわずかです。&lt;br /&gt;&lt;h4&gt;ケース４（代数データ型を使い、正格評価）&lt;/h4&gt;&lt;pre&gt;$ cat case4.hs&lt;br /&gt;data X = X Int&lt;br /&gt;&lt;br /&gt;loop 0 i = i&lt;br /&gt;loop n i = loop (n-1) (i+1)&lt;br /&gt;&lt;br /&gt;n = 100000000&lt;br /&gt;&lt;br /&gt;main = let !x = X $ loop n 0&lt;br /&gt;       in putStrLn "1"&lt;br /&gt;$ ghc --make -O -XBangPatterns case4.hs&lt;br /&gt;$ time ./case4&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;real    0m0.006s&lt;br /&gt;user    0m0.001s&lt;br /&gt;sys     0m0.002s&lt;/pre&gt;ケース２と同様に、xに正格フラグ(!)を付けて正格評価にします。注目するのは、ケース２と異なり実行時間がほとんどかかっていない点です。&lt;br /&gt;&lt;br /&gt;評価されるのはWHNFまでであるため、xにはデータコンストラクタについての関数適用がサンクとして束縛され、それ以上の評価はされません。そのため、loop関数は評価されていないのです。&lt;br /&gt;&lt;br /&gt;もう１つ、ケースを追加してみましょう。&lt;br /&gt;&lt;h4&gt;ケース５（代数データ型のフィールドを正格評価にする）&lt;/h4&gt;&lt;pre&gt;$ cat case5.hs &lt;br /&gt;data X = X !Int&lt;br /&gt;&lt;br /&gt;loop 0 i = i&lt;br /&gt;loop n i = loop (n-1) (i+1)&lt;br /&gt;&lt;br /&gt;n = 100000000&lt;br /&gt;&lt;br /&gt;main = let !x = X $ loop n 0&lt;br /&gt;       in putStrLn "1"&lt;br /&gt;$ ghc --make -O -XBangPatterns case5.hs&lt;br /&gt;$ time ./case5&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;real    0m1.788s&lt;br /&gt;user    0m0.997s&lt;br /&gt;sys     0m0.020s&lt;br /&gt;&lt;/pre&gt;ケース４に加えて、型Xのフィールドに正格フラグを付けます。今度は、型Xのフィールドも評価されるため、実行時間が長くなっています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上のように、Haskellで正格評価を使う場合には、評価されるのがWHNFまでである点に注意が必要です。&lt;br /&gt;&lt;br /&gt;ちなみに、WHNFまででなく完全に評価したい場合には、Control.Strategies.DeepSeqライブラリというものがあるので、そちらを検討してみると良いでしょう。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-259909120047992431?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/259909120047992431/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=259909120047992431' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/259909120047992431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/259909120047992431'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/04/haskellwhnf.html' title='【まとめ】Haskellでの正格評価とWHNF'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sG9a1oWaaPI/TbbF4w-L4vI/AAAAAAAAATQ/IYWSnHpVWCM/s72-c/haskell.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5642423456238547709</id><published>2011-03-03T11:52:00.003+09:00</published><updated>2011-03-03T12:04:05.776+09:00</updated><title type='text'>iPad2について検討</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--QDGwIr1HVg/TW8CavSsP1I/AAAAAAAAATI/e3JbDTP9R04/s1600/ipad_front_20110302.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="168" src="http://4.bp.blogspot.com/--QDGwIr1HVg/TW8CavSsP1I/AAAAAAAAATI/e3JbDTP9R04/s200/ipad_front_20110302.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;iPad2について。&lt;br /&gt;&lt;br /&gt;重さをみてみると、600gある。iPad1とあんまり変わってない。&lt;br /&gt;&lt;br /&gt;Kindleが、小さい方で240g、DXでも540gだから、iPadは重たいな。&lt;br /&gt;&lt;br /&gt;2万円程度で、防水で、重くなくて、7インチくらいのウェブブラウジング端末なら買うのに。残念。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5642423456238547709?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5642423456238547709/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5642423456238547709' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5642423456238547709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5642423456238547709'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2011/03/ipad2.html' title='iPad2について検討'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/--QDGwIr1HVg/TW8CavSsP1I/AAAAAAAAATI/e3JbDTP9R04/s72-c/ipad_front_20110302.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7974460914192863719</id><published>2010-12-27T15:42:00.000+09:00</published><updated>2010-12-27T15:42:21.070+09:00</updated><title type='text'>【まとめ】CG、シミュレーション関係の論文</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/TRg0kPkLyEI/AAAAAAAAAS4/uXKoGZEOhv8/s1600/result00000176.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="150" width="200" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/TRg0kPkLyEI/AAAAAAAAAS4/uXKoGZEOhv8/s200/result00000176.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br/&gt;CG、シミュレーション関係の論文を整理したので、一部をここに書いておく。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;流体シミュレーション&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;Fluid Flow for the Rest of Us: Tutorial of the Marker and Cell Method in Computer Graphics&lt;/b&gt; - David Cline, David Cardon and Parris K. Egbert&lt;br /&gt;→マーカー＆セル法のチュートリアル&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Smoothed Particles: A new paradigm for animating highly deformable bodies&lt;/b&gt; - Mathieu Desbrun, Marie-Paule Gascuel&lt;br /&gt;→SPHを変形体のシミュレーションに応用&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Particle-Based Fluid Simulation for Interactive Application&lt;/b&gt; - Matthias Muller, David Charypar and Markus Gross&lt;br /&gt;→SPHを使った流体のシミュレーション。インタラクティブに動作することを目指す。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Smoothed Particle Hydrodynamics&lt;/b&gt; - J. J. Monaghan&lt;br /&gt;→SPHの元祖。もともとは宇宙物理シミュレーションのための手法。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lagrangian finit element analytics of newtonian fluid flows&lt;/b&gt; - R. Radovitzky and M. Ortiz&lt;br /&gt;→ラグランジュアン有限要素法によって、巻き波のシミュレーションを実施&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Animation and Rendering of Complex Water Surfaces&lt;/b&gt; - Douglas Enright, Stephen Marschner and Ronald Fedkiw&lt;br /&gt;→複雑な流体表面のアニメーションについて、表面構築の新しい方法を示している&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Two-way Coupled SPH and Particle Level Set Fluid Simulation&lt;/b&gt; - Frank Losasso, Jerry O. Talton, Nipun Kwatra and Ron Fedkiw&lt;br /&gt;→SPHとレベルセット法を組み合わせた流体シミュレーション&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;自由表面の構築&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;Marching cubes: A high resolution 3D surface construction algorithm&lt;/b&gt; - William E. Lorensen and Harwey E. Cline&lt;br /&gt;→マーチングキューブによる、表面の構築&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Particle Splatting: Interactive Rendering of Particle-Based Simulation Data&lt;/b&gt; - Bart Adams, Toon Lenaerts and Philip Dutre&lt;br /&gt;→粒子ベースシミュレーションのための表面構築の方法&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7974460914192863719?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7974460914192863719/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7974460914192863719' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7974460914192863719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7974460914192863719'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/12/cg.html' title='【まとめ】CG、シミュレーション関係の論文'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/TRg0kPkLyEI/AAAAAAAAAS4/uXKoGZEOhv8/s72-c/result00000176.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8007021713022018688</id><published>2010-12-26T17:30:00.009+09:00</published><updated>2011-11-29T01:03:11.856+09:00</updated><title type='text'>【OCaml】スタンフォードバニーの読み込みライブラリ</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/TRb7rmeF3BI/AAAAAAAAASw/IBK5ozS97S0/s1600/bun_zipper.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/TRb7rmeF3BI/AAAAAAAAASw/IBK5ozS97S0/s200/bun_zipper.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;スタンフォードバニーの読み込みライブラリを書きました。言語はOCamlです。&lt;br /&gt;&lt;br /&gt;※.plyファイル全般には対応していない簡易版です&lt;br /&gt;&lt;br /&gt;●実装ファイルとシグニチャ&lt;br /&gt;&lt;a href="https://github.com/takagi/blog-codes/blob/master/20101226/PlyReader.ml"&gt;PlyReader.ml&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/takagi/blog-codes/blob/master/20101226/PlyReader.mli"&gt;PlyReader.mli&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;●使用方法&lt;br /&gt;使う関数は、以下の１つだけです。&lt;br /&gt;PlyReader.read_ply : string -&amp;gt; vertex array * face array&lt;br /&gt;&lt;br /&gt;読み込む.plyファイルを渡すと、頂点情報が入った配列と面情報が入った配列をタプルにして返します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8007021713022018688?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8007021713022018688/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8007021713022018688' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8007021713022018688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8007021713022018688'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/12/ocaml.html' title='【OCaml】スタンフォードバニーの読み込みライブラリ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/TRb7rmeF3BI/AAAAAAAAASw/IBK5ozS97S0/s72-c/bun_zipper.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5654153927480637708</id><published>2010-11-22T23:29:00.001+09:00</published><updated>2010-11-22T23:29:54.516+09:00</updated><title type='text'>【Emacs】タブを使わずに空白のみでインデントするには</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/Su50FOQbKNI/AAAAAAAAALI/QnFfhElec6s/s1600/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Emacsで、タブを使わずに空白のみでインデントするには、.emacsに以下を追記します。&lt;br /&gt;&lt;pre&gt;(setq-default tab-width 4 indent-tabs-mode nil)&lt;/pre&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5654153927480637708?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5654153927480637708/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5654153927480637708' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5654153927480637708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5654153927480637708'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/11/emacs.html' title='【Emacs】タブを使わずに空白のみでインデントするには'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1870190599952407275</id><published>2010-11-22T23:27:00.000+09:00</published><updated>2010-11-22T23:27:38.342+09:00</updated><title type='text'>CommonLispの処理系SBCLで、コマンドラインからLispコードを実行するには</title><content type='html'>&lt;br/&gt;SBCLでコマンドラインからLispコードを実行するには、--scriptオプションを使って以下のようにします。&lt;br /&gt;&lt;pre&gt;$ sbcl --script hello.lisp&lt;/pre&gt;同じようにして、コンパイルしたコードも実行できます。&lt;br /&gt;&lt;pre&gt;$ sbcl --script hello.fasl&lt;/pre&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1870190599952407275?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1870190599952407275/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1870190599952407275' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1870190599952407275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1870190599952407275'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/11/commonlispsbcllisp.html' title='CommonLispの処理系SBCLで、コマンドラインからLispコードを実行するには'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7297456549976459520</id><published>2010-11-15T03:04:00.002+09:00</published><updated>2010-11-15T03:08:02.764+09:00</updated><title type='text'>GnuTLSの使い方（第２回）</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s1600/ist2_8601140-https-secure.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s200/ist2_8601140-https-secure.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;前回のエントリでは、「&lt;a href="http://kamonama.blogspot.com/2010/10/gnutls.html"&gt;GnuTLSの使い方（第１回）&lt;/a&gt;」として、GnuTLSを使って、HTTPSでWebサーバに接続してHTMLを取得しようとしましたが、handshakeに失敗して通信できませんでした。&lt;br /&gt;&lt;br /&gt;失敗の原因がどうもよく分かりません。APIの使い方の問題ではなさそうなものの、サーバの環境によるものか、GnuTLSを使う上で何か忘れているものがあるのか。&lt;br /&gt;&lt;br /&gt;そこで、いったんGnuTLSの代わりに、OpenSSLを試してみることにしました。&lt;br /&gt;&lt;br /&gt;「OpenSSL sample」で検索すると、&lt;br /&gt;&lt;a href="http://www.rtfm.com/openssl-examples/part1.pdf"&gt;An Introduction to OpenSSL Programming(Part I)[PDF]&lt;/a&gt;&lt;br /&gt;というちょうどいいドキュメントがひっかかるので、これを参考にします。&lt;br /&gt;&lt;br /&gt;このドキュメントにはサンプルコードが用意されており、まずはこのサンプルを動かしてみます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rtfm.com/openssl-examples/"&gt;http://www.rtfm.com/openssl-examples/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まず、OpenSSLをインストールします。&lt;br /&gt;手元の環境はMaxOS Xなので、MacPortを使います。&lt;br /&gt;&lt;pre&gt;$ port install OpenSSL&lt;/pre&gt;次に、サンプルをビルドします。&lt;br /&gt;&lt;pre&gt;$ ./configure --with-openssl=/opt/local/&lt;br /&gt;$ make&lt;/pre&gt;MacPortを使ってOpenSSLをインストールしたため、そのインストール場所を--with-opensslオプションによって指定しています。&lt;br /&gt;&lt;br /&gt;問題なくビルドができれば、SSLを通してウェブサーバからHTMLを取得してみます。&lt;br /&gt;&lt;pre&gt;$ ./wclient -h twitter.com -p 443 -i&lt;/pre&gt;今度は、GnuTLSを使った場合と違い、すんなりとHTMLを取得できました。&lt;br /&gt;&lt;br /&gt;GnuTLSを使ったときにhandshakeに失敗するのはなぜだろう？&lt;br /&gt;&lt;br /&gt;とはいえ、これでSSL通信をする方法はわかったので、もともとのきっかけだった、HaskellからのSMTP over SSL/TLSを実装できそうです。&lt;br /&gt;&lt;br /&gt;■関連するエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/10/gnutls.html"&gt;GnuTLSの使い方（第１回）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7297456549976459520?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7297456549976459520/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7297456549976459520' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7297456549976459520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7297456549976459520'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/11/gnutls.html' title='GnuTLSの使い方（第２回）'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s72-c/ist2_8601140-https-secure.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3559394442667246018</id><published>2010-10-26T01:05:00.001+09:00</published><updated>2010-10-26T01:06:37.021+09:00</updated><title type='text'>GnuTLSの使い方（第１回）</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s1600/ist2_8601140-https-secure.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s200/ist2_8601140-https-secure.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4&gt;GnuTLSとは&lt;/h4&gt;&lt;br /&gt;GnuTLSはSSL/TLSプロトコルのフリーな実装です。&lt;br /&gt;&lt;br /&gt;SSL/TLSプロトコルの実装としてはOpenSSLが有名ですが、OpenSSLのライセンスはGPLに対し非互換のため、GPLの下にあるソフトウェアはOpenSSLを使うことができませんでした。&lt;br /&gt;&lt;br /&gt;GnuTLSは、その問題を解決しGNUプロジェクトのアプリケーションでもTLSのようなプロトコルを扱えることを目的として開発されました。&lt;br /&gt;&lt;h4&gt;GnuTLSのインストール&lt;/h4&gt;&lt;br /&gt;MacOSXの場合は、MacPortを使うことで簡単にGnuTLSをインストールできます。&lt;br /&gt;&lt;pre&gt;$ port install gnutls&lt;/pre&gt;他の環境でもパッケージシステムから同様にインストールできると思います。&lt;br /&gt;&lt;br /&gt;GnuTLSのソースコードは、以下のページからダウンロードできます。&lt;br /&gt;&lt;a href="http://www.gnu.org/software/gnutls/download.html"&gt;http://www.gnu.org/software/gnutls/download.html&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;GnuTLSを使ったサンプルを試してみる&lt;/h4&gt;&lt;br /&gt;GnuTLSのドキュメント&lt;a href="http://www.gnu.org/software/gnutls/manual/html_node/Simple-client-example-with-anonymous-authentication.html#Simple-client-example-with-anonymous-authentication"&gt;7.3.1&lt;/a&gt;に、HTTPSでサーバに接続してデータを取得するサンプルがあるので、それを試してみました。&lt;br /&gt;&lt;br /&gt;sample.c&lt;br /&gt;&lt;pre&gt;/* This example code is placed in the public domain. */&lt;br /&gt; &lt;br /&gt;#ifdef HAVE_CONFIG_H&lt;br /&gt;# include &amp;lt;config.h&amp;gt;&lt;br /&gt;#endif&lt;br /&gt; &lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;gnutls/gnutls.h&amp;gt;&lt;br /&gt; &lt;br /&gt;/* A very basic TLS client, with anonymous authentication.&lt;br /&gt; */&lt;br /&gt; &lt;br /&gt;#define MAX_BUF 1024&lt;br /&gt;#define MSG "GET / HTTP/1.0\r\n\r\n"&lt;br /&gt; &lt;br /&gt;extern int tcp_connect (void);&lt;br /&gt;extern void tcp_close (int sd);&lt;br /&gt; &lt;br /&gt;int&lt;br /&gt;main (void)&lt;br /&gt;{&lt;br /&gt;  int ret, sd, ii;&lt;br /&gt;  gnutls_session_t session;&lt;br /&gt;  char buffer[MAX_BUF + 1];&lt;br /&gt;  gnutls_anon_client_credentials_t anoncred;&lt;br /&gt;  /* Need to enable anonymous KX specifically. */&lt;br /&gt; &lt;br /&gt;  gnutls_global_init ();&lt;br /&gt; &lt;br /&gt;  gnutls_anon_allocate_client_credentials (&amp;amp;anoncred);&lt;br /&gt; &lt;br /&gt;  /* Initialize TLS session &lt;br /&gt;   */&lt;br /&gt;  gnutls_init (&amp;amp;session, GNUTLS_CLIENT);&lt;br /&gt; &lt;br /&gt;  /* Use default priorities */&lt;br /&gt;  gnutls_priority_set_direct (session, "PERFORMANCE:+ANON-DH:!ARCFOUR-128",&lt;br /&gt;         NULL);&lt;br /&gt; &lt;br /&gt;  /* put the anonymous credentials to the current session&lt;br /&gt;   */&lt;br /&gt;  gnutls_credentials_set (session, GNUTLS_CRD_ANON, anoncred);&lt;br /&gt; &lt;br /&gt;  /* connect to the peer&lt;br /&gt;   */&lt;br /&gt;  sd = tcp_connect ();&lt;br /&gt; &lt;br /&gt;  gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);&lt;br /&gt; &lt;br /&gt;  /* Perform the TLS handshake&lt;br /&gt;   */&lt;br /&gt;  ret = gnutls_handshake (session);&lt;br /&gt; &lt;br /&gt;  if (ret &amp;lt; 0)&lt;br /&gt;    {&lt;br /&gt;      fprintf (stderr, "*** Handshake failed\n");&lt;br /&gt;      gnutls_perror (ret);&lt;br /&gt;      goto end;&lt;br /&gt;    }&lt;br /&gt;  else&lt;br /&gt;    {&lt;br /&gt;      printf ("- Handshake was completed\n");&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;  gnutls_record_send (session, MSG, strlen (MSG));&lt;br /&gt; &lt;br /&gt;  ret = gnutls_record_recv (session, buffer, MAX_BUF);&lt;br /&gt;  if (ret == 0)&lt;br /&gt;    {&lt;br /&gt;      printf ("- Peer has closed the TLS connection\n");&lt;br /&gt;      goto end;&lt;br /&gt;    }&lt;br /&gt;  else if (ret &amp;lt; 0)&lt;br /&gt;    {&lt;br /&gt;      fprintf (stderr, "*** Error: %s\n", gnutls_strerror (ret));&lt;br /&gt;      goto end;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;  printf ("- Received %d bytes: ", ret);&lt;br /&gt;  for (ii = 0; ii &amp;lt; ret; ii++)&lt;br /&gt;    {&lt;br /&gt;      fputc (buffer[ii], stdout);&lt;br /&gt;    }&lt;br /&gt;  fputs ("\n", stdout);&lt;br /&gt; &lt;br /&gt;  gnutls_bye (session, GNUTLS_SHUT_RDWR);&lt;br /&gt; &lt;br /&gt;end:&lt;br /&gt; &lt;br /&gt;  tcp_close (sd);&lt;br /&gt; &lt;br /&gt;  gnutls_deinit (session);&lt;br /&gt; &lt;br /&gt;  gnutls_anon_free_client_credentials (anoncred);&lt;br /&gt; &lt;br /&gt;  gnutls_global_deinit ();&lt;br /&gt; &lt;br /&gt;  return 0;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;このサンプルでは、同ドキュメントの&lt;a href="http://www.gnu.org/software/gnutls/manual/html_node/Helper-function-for-TCP-connections.html#Helper-function-for-TCP-connections"&gt;7.3.10&lt;/a&gt;に書かれている、TCP接続のためのヘルパー関数を使うため、そのコードも用意します。&lt;br /&gt;&lt;br /&gt;helper.c&lt;br /&gt;&lt;pre&gt;/* This example code is placed in the public domain. */&lt;br /&gt; &lt;br /&gt;#ifdef HAVE_CONFIG_H&lt;br /&gt;# include &amp;lt;config.h&amp;gt;&lt;br /&gt;#endif&lt;br /&gt; &lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt; &lt;br /&gt;#define SA struct sockaddr&lt;br /&gt; &lt;br /&gt;/* tcp.c */&lt;br /&gt;int tcp_connect (void);&lt;br /&gt;void tcp_close (int sd);&lt;br /&gt; &lt;br /&gt;/* Connects to the peer and returns a socket&lt;br /&gt; * descriptor.&lt;br /&gt; */&lt;br /&gt;extern int&lt;br /&gt;tcp_connect (void)&lt;br /&gt;{&lt;br /&gt;  const char *PORT = "5556";&lt;br /&gt;  const char *SERVER = "127.0.0.1";&lt;br /&gt;  int err, sd;&lt;br /&gt;  struct sockaddr_in sa;&lt;br /&gt; &lt;br /&gt;  /* connects to server&lt;br /&gt;   */&lt;br /&gt;  sd = socket (AF_INET, SOCK_STREAM, 0);&lt;br /&gt; &lt;br /&gt;  memset (&amp;amp;sa, '\0', sizeof (sa));&lt;br /&gt;  sa.sin_family = AF_INET;&lt;br /&gt;  sa.sin_port = htons (atoi (PORT));&lt;br /&gt;  inet_pton (AF_INET, SERVER, &amp;amp;sa.sin_addr);&lt;br /&gt; &lt;br /&gt;  err = connect (sd, (SA *) &amp;amp; sa, sizeof (sa));&lt;br /&gt;  if (err &amp;lt; 0)&lt;br /&gt;    {&lt;br /&gt;      fprintf (stderr, "Connect error\n");&lt;br /&gt;      exit (1);&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;  return sd;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;/* closes the given socket descriptor.&lt;br /&gt; */&lt;br /&gt;extern void&lt;br /&gt;tcp_close (int sd)&lt;br /&gt;{&lt;br /&gt;  shutdown (sd, SHUT_RDWR); /* no more receptions */&lt;br /&gt;  close (sd);&lt;br /&gt;}&lt;/pre&gt;※IP、ポートは適切に変更してください&lt;br /&gt;&lt;br /&gt;ビルドするためにMakefileを用意します。&lt;br /&gt;&lt;br /&gt;Makefile&lt;br /&gt;&lt;pre&gt;sample: sample.o helper.o&lt;br /&gt; gcc -o sample sample.o helper.o `pkg-config gnutls --libs`&lt;br /&gt;&lt;br /&gt;.c.o:&lt;br /&gt; gcc -c $&amp;lt; -I/opt/local/include&lt;/pre&gt;&lt;br /&gt;makeして実行してみると、handshakeに失敗してエラーになります。  &lt;br /&gt;&lt;pre&gt;$ make&lt;br /&gt;$ ./sample&lt;br /&gt;*** Handshake failed&lt;br /&gt;GNUTLS ERROR: A TLS fatal alert has been received.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;handshakeとは何でしょうか？HTTPSの仕組みを調べる必要がありそうです。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3559394442667246018?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3559394442667246018/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3559394442667246018' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3559394442667246018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3559394442667246018'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/10/gnutls.html' title='GnuTLSの使い方（第１回）'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/TMWqrKldkCI/AAAAAAAAASo/IDHQdGVXEk8/s72-c/ist2_8601140-https-secure.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6908097557762570204</id><published>2010-10-24T18:35:00.000+09:00</published><updated>2010-10-24T18:35:20.956+09:00</updated><title type='text'>豪ドル高は危ない？</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/TMP9dqpF10I/AAAAAAAAASk/jGttHcKj9fM/s1600/images.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/TMP9dqpF10I/AAAAAAAAASk/jGttHcKj9fM/s1600/images.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;最近、豪ドル債が人気です。&lt;br /&gt;&lt;br /&gt;しかし、豪ドルは今、円以上に米ドルに対して高くなっています。これは、輸出依存型であるオーストラリア経済にとって悪影響を与えないのでしょうか？&lt;br /&gt;&lt;br /&gt;答えはNoです。日本と違い、オーストラリアにとって豪ドル高は経済への大きなマイナスにはなりません。&lt;br /&gt;&lt;br /&gt;理由はなんでしょう？&lt;br /&gt;&lt;br /&gt;２つあります。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;豪ドル安へ誘導する余地があること&lt;/li&gt;&lt;li&gt;&amp;nbsp;輸出入の内容が良いこと&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;豪ドルへ誘導する余地があること&lt;/h4&gt;&lt;br /&gt;オーストラリアは景気が過熱しないように金利を上げて抑えているため、その金利を下げることで豪ドル安へ誘導してコントロールする余地があります。&lt;br /&gt;&lt;br /&gt;逆に、日本はもうこれ以上金利をさげることができないところまできているので、コントロール不能になってしまっています。&lt;br /&gt;&lt;br /&gt;これが、オーストラリアと日本の違いの１つです。&lt;br /&gt;&lt;h4&gt;輸出入の内容が良いこと&lt;/h4&gt;&lt;br /&gt;日本は５兆円の貿易黒字のため円高のマイナス影響が大きくなってしまいますが、オーストラリアの貿易収支はトントンです。&lt;br /&gt;&lt;br /&gt;さらに、日本と違い、材料を輸出して製品を輸入する形になっているため、豪ドル高の場合は材料を売るのが安くなってしまいますがその分製品を買うのも安くすむので、それで相殺されます。そのため、日本ほど自国通貨高によるダメージを受けません。 &lt;br /&gt;&lt;br /&gt;これが、もう１つの違いです。&lt;br /&gt;&lt;br /&gt;いかがでしょうか。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6908097557762570204?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6908097557762570204/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6908097557762570204' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6908097557762570204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6908097557762570204'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/10/blog-post.html' title='豪ドル高は危ない？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/TMP9dqpF10I/AAAAAAAAASk/jGttHcKj9fM/s72-c/images.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6429276877527757606</id><published>2010-10-12T21:52:00.002+09:00</published><updated>2010-10-12T21:54:29.883+09:00</updated><title type='text'>さくらインターネットでcronを使うときの注意点</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.sakura.ad.jp/common/images/header-logo.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://www.sakura.ad.jp/common/images/header-logo.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;さくらインターネットのレンタルサーバでcronを使おうとしたときにはまったのでメモ。&lt;br /&gt;&lt;br /&gt;pythonスクリプトを動かすときには、&lt;br /&gt;&lt;pre&gt;/usr/local/bin/python&lt;/pre&gt;のようにフルパスでpythonコマンドを指定しなければいけない。&lt;br /&gt;&lt;br /&gt;単にpythonとだけ指定してもコマンドが動作しないので注意。&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6429276877527757606?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6429276877527757606/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6429276877527757606' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6429276877527757606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6429276877527757606'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/10/cron.html' title='さくらインターネットでcronを使うときの注意点'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8793957898921066493</id><published>2010-09-04T16:37:00.000+09:00</published><updated>2010-09-04T16:37:20.186+09:00</updated><title type='text'>粒子法による固液連成シミュレーション</title><content type='html'>&lt;br/&gt;先日のエントリを、表面抽出をして奇麗にレンダリングしました。&lt;br /&gt;&lt;br /&gt;前半は剛体の密度が流体より小さいケース、後半は剛体の密度が流体より大きいケースです。&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="325"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CTFpaM95dOw?fs=1&amp;amp;hl=ja_JP"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CTFpaM95dOw?fs=1&amp;amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="325"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;シミュレーション上は剛体も粒子として扱い、レンダリングのときだけポリゴンで表現しています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8793957898921066493?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8793957898921066493/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8793957898921066493' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8793957898921066493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8793957898921066493'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/09/blog-post.html' title='粒子法による固液連成シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2719515292213206768</id><published>2010-08-03T21:23:00.006+09:00</published><updated>2010-08-03T21:27:37.627+09:00</updated><title type='text'>【本】はじめてのCUDAプログラミング - 8.1 １次元配列へのアクセス</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/TFgKNA2jm1I/AAAAAAAAASE/Z105EgyU6IA/s1600/51JVkMCuBDL._SL500_AA300_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/TFgKNA2jm1I/AAAAAAAAASE/Z105EgyU6IA/s200/51JVkMCuBDL._SL500_AA300_.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;「はじめてのCUDAプログラミング」の「8.1 １次元配列へのアクセス」について。&lt;br /&gt;&lt;br /&gt;メモリアクセスの例として、１次元配列への足し算を挙げている。&lt;br /&gt;&lt;br /&gt;挙げられているサンプルは、要素数Nの配列A、B、Cについて、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;C[i] = A[i] + B[i]&lt;/blockquote&gt;&lt;br /&gt;を計算するというもの。&lt;br /&gt;&lt;br /&gt;GPUで計算した場合とCPUで計算した場合とでどのような違いがあるかというと、CPUでこの計算をするとN回の計算となる一方、GPUで計算すると１スレッドにつき１回の計算をするだけで済むことになる。&lt;br /&gt;&lt;br /&gt;処理のステップは、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;メモリ確保&lt;br /&gt;ホストとGPUそれぞれにメモリ領域を確保する&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;初期値の用意&lt;br /&gt;ホストメモリ上で配列A,B,Cを初期化&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GPUに初期値をコピー&lt;br /&gt;GPUメモリにホストメモリから初期値をコピー&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;カーネル関数をコール&lt;br /&gt;カーネル関数をコールすることで計算を実行&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;解をGPUからホストにコピー&lt;br /&gt;計算結果をGPUメモリからホストメモリにコピー&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;計算が正しく行われていることを確認&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;となっている。&lt;br /&gt;&lt;br /&gt;その後実行性能を求めているのだが、理論値の1/10の性能しかでていないという。また、式をより複雑なものに変えても性能が変わらない。このことから、実はグローバルメモリ転送が処理時間の大半を占めていることが説明されている。ここから、8.3 メモリアクセスの最適化へとつながる。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="10" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=4777514773" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2719515292213206768?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2719515292213206768/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2719515292213206768' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2719515292213206768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2719515292213206768'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/08/cuda-81.html' title='【本】はじめてのCUDAプログラミング - 8.1 １次元配列へのアクセス'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/TFgKNA2jm1I/AAAAAAAAASE/Z105EgyU6IA/s72-c/51JVkMCuBDL._SL500_AA300_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8330172850653303327</id><published>2010-07-31T01:20:00.008+09:00</published><updated>2010-07-31T21:00:26.611+09:00</updated><title type='text'>固液連成シミュレーション</title><content type='html'>&lt;br/&gt;固液連成シミュレーションです。&lt;br /&gt;&lt;br /&gt;剛体を粒子の集合として扱い、剛体粒子も流体粒子と同様に計算しています。&lt;br /&gt;&lt;br /&gt;ムービーには２つのシーンが入っており、１つは固体の密度が流体より軽い場合、もう１つは固体の密度が流体より重い場合です。&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="250"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cy6gBGCOqaM&amp;amp;hl=ja_JP&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/cy6gBGCOqaM&amp;amp;hl=ja_JP&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;固液連成シミュレーション&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8330172850653303327?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8330172850653303327/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8330172850653303327' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8330172850653303327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8330172850653303327'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/07/blog-post_31.html' title='固液連成シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4827099787026960939</id><published>2010-07-30T23:47:00.001+09:00</published><updated>2010-07-30T23:47:32.270+09:00</updated><title type='text'>Bloggerにソーシャルボタン機能がついた</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/TFLlu1zMBqI/AAAAAAAAAR8/XPqd6b8qImA/s1600/tmp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/TFLlu1zMBqI/AAAAAAAAAR8/XPqd6b8qImA/s320/tmp.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bloggerにソーシャルボタン機能がついたので、さっそく表示してみた。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4827099787026960939?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4827099787026960939/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4827099787026960939' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4827099787026960939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4827099787026960939'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/07/blogger.html' title='Bloggerにソーシャルボタン機能がついた'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/TFLlu1zMBqI/AAAAAAAAAR8/XPqd6b8qImA/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5574620052976008502</id><published>2010-07-21T01:08:00.011+09:00</published><updated>2010-07-30T23:45:27.662+09:00</updated><title type='text'>【論文】Two-way Coupling of Fluids to Rigid and Deformable Solids and Shells</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/TEXJwoIwF0I/AAAAAAAAAR0/dFYkV5FxJp0/s1600/tmp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="149" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/TEXJwoIwF0I/AAAAAAAAAR0/dFYkV5FxJp0/s200/tmp.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Fedkiwらによる、固液連成系のアニメーションについての2008年の論文である。&lt;br /&gt;&lt;br /&gt;著者らによると、この論文で提案されている手法には以下の特徴がある。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;流体にオイラー法、固体にラグランジュ法を用いる&lt;/li&gt;&lt;li&gt;完全な陰解法&lt;/li&gt;&lt;li&gt;系の運動量が保存される&lt;/li&gt;&lt;li&gt;カルテシアン座標を使用&lt;/li&gt;&lt;/ul&gt;流体にオイラー法、固体にラグランジュ法を用いるという典型的なアプローチをとりながらも、従来手法と違い、系の運動量が保存されるという。&lt;br /&gt;&lt;br /&gt;また、完全な陰解法のため時間が経った後や大きな密度比があるような場合でも安定した結果が得られる。&lt;br /&gt;&lt;br /&gt;さらに、座標系にはカルテシアン座標を用いるため、四面体メッシュやALEが必要ない。&lt;br /&gt;&lt;br /&gt;この方法は非常に汎用的で、煙、水、多相流体、剛体、弾性体、布やシェル状の物体にも適用できるという。&lt;br /&gt;&lt;br /&gt;関連研究としてあげられているものに、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yngve et al. 2000&lt;/li&gt;&lt;li&gt;Genevanx et al. 2003&lt;/li&gt;&lt;li&gt;Carlson et al. 2004&lt;/li&gt;&lt;li&gt;Guendelman et al. 2005&lt;/li&gt;&lt;li&gt;Losasso et al. 2006a&lt;/li&gt;&lt;/ul&gt;といった例があるが、これらは、陽解法もしくは半陰解法を使うため、安定性と精度の問題が残るという。&lt;br /&gt;&lt;br /&gt;また、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Klinger et al. 2006&lt;/li&gt;&lt;li&gt;Chentanez et al. 2006&lt;/li&gt;&lt;li&gt;Batty et al. 2007&lt;/li&gt;&lt;/ul&gt;では、完全に陰解法を用いて安定した固液連成シミュレーションを行っているが、シェル状剛体や布には適用できないとのこと。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5574620052976008502?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5574620052976008502/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5574620052976008502' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5574620052976008502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5574620052976008502'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/07/two-way-coupling-of-fluids-to-rigid-and.html' title='【論文】Two-way Coupling of Fluids to Rigid and Deformable Solids and Shells'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/TEXJwoIwF0I/AAAAAAAAAR0/dFYkV5FxJp0/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1985606084386169681</id><published>2010-07-18T13:22:00.002+09:00</published><updated>2010-07-31T20:44:31.861+09:00</updated><title type='text'>カメラ位置を変えて流体をレンダリング</title><content type='html'>&lt;br/&gt;以前の&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;に載せているムービーを、カメラ位置を変えてまたレンダリングしてみました。&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="324"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4-V-miYfzF8&amp;amp;hl=ja_JP&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4-V-miYfzF8&amp;amp;hl=ja_JP&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;カメラ位置を変えて流体をレンダリング&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1985606084386169681?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1985606084386169681/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1985606084386169681' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1985606084386169681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1985606084386169681'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/07/blog-post.html' title='カメラ位置を変えて流体をレンダリング'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1252234081552576458</id><published>2010-07-18T02:49:00.003+09:00</published><updated>2010-07-18T03:06:41.309+09:00</updated><title type='text'>sedコマンドの使い方</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_w9gcOO4qfvo/TEHxHYc-jTI/AAAAAAAAARs/H-AqE1lmf38/s1600/sed.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_w9gcOO4qfvo/TEHxHYc-jTI/AAAAAAAAARs/H-AqE1lmf38/s320/sed.png" /&gt;&lt;/a&gt;&lt;/div&gt;sedコマンドの使い方をいくつか解説します。&lt;br /&gt;&lt;h4&gt;置換&lt;/h4&gt;&lt;br /&gt;文字列の置換を行うには、-eオプションに続けて置換したい文字列と置換後の文字列を指定します。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sed -e "s/置換したい文字列/置換後の文字列/g" ファイル名&lt;/blockquote&gt;&lt;br /&gt;出力先は標準出力です。リダイレクトを使えばファイルに記録できます。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sed -e "s/置換したい文字列/置換後の文字列/g" ファイル名 &amp;gt; 保存先ファイル名&lt;/blockquote&gt;&lt;br /&gt;ファイルに保存する別の方法として、-iオプションによって同名での上書き保存ができます。-iオプションの場合、同時に置換前のファイルがバックアップされるため便利です。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sed -i.bak -e "s/置換したい文字列/置換後の文字列/g" ファイル名&lt;/blockquote&gt;&lt;br /&gt;「-i.bak」と指定することで、ファイル名.bakがバックアップのファイル名になります。&lt;br /&gt;&lt;br /&gt;ファイル名にワイルドカードを指定することで、複数のファイルを一度に置換できます。これは-eオプション単独ではできないので、-iオプションが便利です。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sed -i.bak -e "s/置換したい文字列/置換後の文字列/g" *&lt;/blockquote&gt;&lt;br /&gt;ここまで、sedを使った文字列の置換についてでした。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;挿入&lt;/h4&gt;&lt;br /&gt;次は挿入についてです。sedは単なる置換用のコマンドではありません。Stream EDitorという名前の通り汎用的なエディタなので、テキストファイルに対して様々な編集が可能です。挿入もその１つです。&lt;br /&gt;&lt;br /&gt;挿入する場合は-fオプションで外部ファイルからコマンドを読み込ませることで行います。&lt;br /&gt;※複数業にわたるコマンドになるため、-eオプションでは不可&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sed -f コマンドファイル名 編集対象ファイル名&lt;/blockquote&gt;&lt;br /&gt;コマンドファイルは以下のように記述します。&lt;br /&gt;&lt;blockquote&gt;挿入したい行（何番目の行か）{&lt;br /&gt;i\&lt;br /&gt;挿入したい文字列&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;挿入したい行として指定した行の手前に、挿入したい文字列が挿入されます。たとえば、&lt;br /&gt;&lt;blockquote&gt;10{&lt;br /&gt;i\&lt;br /&gt;この文字列を挿入します。&lt;br /&gt;}&lt;/blockquote&gt;とすると、10行目の手前、つまり9行目と10行目の間に「この文字列を挿入します。」という文字列が挿入されます。&lt;br /&gt;&lt;br /&gt;出力先は置換の場合と同様に標準出力です。-iオプションで上書きできることも同様です。&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1252234081552576458?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1252234081552576458/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1252234081552576458' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1252234081552576458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1252234081552576458'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/07/sed.html' title='sedコマンドの使い方'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_w9gcOO4qfvo/TEHxHYc-jTI/AAAAAAAAARs/H-AqE1lmf38/s72-c/sed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4377807109238166015</id><published>2010-04-26T00:04:00.001+09:00</published><updated>2010-04-26T00:04:46.779+09:00</updated><title type='text'>傾斜平面への剛体落下シミュレーション</title><content type='html'>傾斜平面に剛体を落下させるシミュレーション。&lt;br /&gt;&lt;br /&gt;静止摩擦、動摩擦をうまく表現できるかどうか、というところなのですが、調整が必要です。&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="324"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SVl7_9ONWGA&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/SVl7_9ONWGA&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="324"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-QOlMNzfevo&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-QOlMNzfevo&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4377807109238166015?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4377807109238166015/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4377807109238166015' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4377807109238166015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4377807109238166015'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post_26.html' title='傾斜平面への剛体落下シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8578735880407207346</id><published>2010-04-25T00:13:00.004+09:00</published><updated>2010-04-25T00:33:55.532+09:00</updated><title type='text'>【Haskell】正格フラグの使い方</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/S9MKfuC19GI/AAAAAAAAARk/HPs9AweNbfo/s1600/HaskellLogo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="64" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/S9MKfuC19GI/AAAAAAAAARk/HPs9AweNbfo/s200/HaskellLogo.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="goog_1835213558"&gt;&lt;/span&gt;&lt;span id="goog_1835213559"&gt;&lt;/span&gt;&lt;span id="goog_1835213560"&gt;&lt;/span&gt;&lt;span id="goog_1835213561"&gt;&lt;/span&gt;&lt;br /&gt;Haskellのデータ構造は一般的にlazyである。それによって、評価されたときにエラーやプログラム停止をもたらすような要素をデータ構造に含めることができる。lazyなデータ構造によってHaskellの表現を高めることができ、Haskellのプログラミングの重要な側面となっている。&lt;br /&gt;&lt;br /&gt;内部的には、lazyなデータオブジェクトは、thunkと呼ばれる構造でラップされており、内部にエラーが含まれていても影響がない。たとえば、("a", ⊥)というタプルを保持することができる（⊥は未定義な値を表す）。一方、ほとんどのプログラミング言語は正格で、値が評価されてからデータ構造に入れられる。&lt;br /&gt;&lt;br /&gt;ところが、thunkにはオーバーヘッドが大きいというデメリットがある。構築と評価に時間が必要だったり、heapにthunkのためのメモリが必要になる。&lt;br /&gt;&lt;br /&gt;Haskellでは、このオーバーヘッドを避けるために、正格評価させるフィールドに正格フラグをつけることができる。正格フラグを付けた方が良いケースとしては、実行中の特定のタイミングで評価されるべきものや、評価がシンプルで決してエラーとならないもの、部分的な未定義値が意味をもたないものがある。&lt;br /&gt;&lt;br /&gt;正格フラグの例としては、複素数ライブラリのComplex型があげられる。&lt;br /&gt;&lt;blockquote&gt;data RealFloat a =&amp;gt; Complex a = !a +: !a&lt;/blockquote&gt;実部と虚部に正格フラグが付けられており、これらのフィールドには評価後の値が保持される。&lt;br /&gt;&lt;br /&gt;正格フラグはデータコンストラクタでのみ使うことができる。逆に、関数の引数に対して正格処理をさせるようなフラグはないが、関数評価に!$演算子を使うことで同等のことを実現できる。&lt;br /&gt;&lt;br /&gt;正格フラグを使うときの注意点としては、使用しないデータがメモリに残ってリークしがちな点がある。また、lazinessはHaskellの根本的な性質であり、正格フラグによってその性質を曲げることで、無限ループの発見が難しくなったり、予期せぬ結果をもたらす可能性はある。たとえば、循環定義がある場合には注意が必要である。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4873114233" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=0521644089" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8578735880407207346?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8578735880407207346/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8578735880407207346' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8578735880407207346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8578735880407207346'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/haskell.html' title='【Haskell】正格フラグの使い方'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/S9MKfuC19GI/AAAAAAAAARk/HPs9AweNbfo/s72-c/HaskellLogo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2510120773528211547</id><published>2010-04-18T12:50:00.003+09:00</published><updated>2010-04-19T01:06:18.874+09:00</updated><title type='text'>【書評】ソフトウェア企業の競争戦略</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S8qAe7mcW_I/AAAAAAAAARc/ZUCYsLo7kWo/s1600/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S8qAe7mcW_I/AAAAAAAAARc/ZUCYsLo7kWo/s320/images.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ソフトウェア企業の競争戦略（原題：The Business of Software）は、MIT（マサチューセッツ工科大学）スローン経営大学院教授のマイケル A.クスマノによる著書である。&lt;br /&gt;&lt;br /&gt;著者はもともと70年代後半から、特に自動車の設計と製造に関する、日本の製造管理と品質管理の技術を研究していた。日本の製造業が急成長し、日米の貿易摩擦が顕在化し始めた時期である。&lt;br /&gt;&lt;br /&gt;そんな中、著者は自動車の次に日本が挑戦するのはコンピュータ・ソフトウェアだろうと考え、日本企業が大規模な商業用ソフトウェア・システムをどのように構築しているか、すでに日本人が確立しているハードウェアのスキルに高度化されたソフトウェア・スキルをいかに追加しようとしているか、を研究し始めた。&lt;br /&gt;&lt;br /&gt;研究を進めるうち、著者は、ソフトウェアが戦略と管理の面で特別な問題をはらむ独特のビジネスであると認識するに至る。85年のことだという。&lt;br /&gt;&lt;br /&gt;本書は、著者の20年近くにわたるソフトウェア業界の研究、数十ものソフトウェア企業や組織へのコンサルタントとしてのかかわり合い、さらには1997年から続けられているMITでの「ソフトウェア・ビジネス」クラスでの教育経験から得られた観察をまとめたものである。&lt;br /&gt;&lt;br /&gt;第１章には本書の概要を記してある。ソフトウェア・ビジネスが他のビジネスと異なっている点、技術としてのソフトウェア、日本企業からマイクロソフトに至る研究、欧米企業と日本企業の重要な違いについてまとめ、また、ソフトウェア・ビジネスの典型的な事例として、仏ビジネスオブジェクツと米i2テクノロジーズの２社を紹介している。&lt;br /&gt;&lt;br /&gt;第２章では、ソフトウェア企業のとるべき戦略について述べている。製品企業なのかサービス企業なのか、ターゲットは個人か法人か、マスかニッチか、水平的か垂直的か、メインストリームを狙うのかキャズムを回避するのか、マーケットリーダーかフォロワーか補完製品メーカーか、会社にどのような特徴を持たせたいのか、といった問いが投げかけられている。&lt;br /&gt;&lt;br /&gt;第３章は、ソフトウェアビジネスの歴史である。過去を研究する事で進むべき方向についての示唆を得られるとしている。1950年代にはハードウェアを販売する事が主目的でソフトウェアは付属品であった。独立したソフトウェア製品のビジネスが登場するのは60年代である。70年代に新しいプラットフォーム「PC」が出現する。「ワールド・ワイド・ウェブ(WWW)」という次のプラットフォームが90年代に現れる。この歴史を踏まえて、第４章以下で、次のビジネスチャンスがどこにあるのかを問うていく。&lt;br /&gt;&lt;br /&gt;第４章では、ソフトウェア開発のベスト・プラクティスと銘打って、ソフトウェア開発を最適管理するにはどのようにしたら良いか考察している。ソフト開発で繰り返し発生している問題と、多くのソフトウェア・ファクトリーを通して試みられている技術の構造化、およびソフトウェア工学分野での取り組みについて紹介しつつ、それが誤った考え方を導くことになったと指摘し、重要になってくるのは繰り返しのプロセスを生み出そうというSEIの概念や、頻繁な同期と周期的な安定化だと結論づけている。&lt;br /&gt;&lt;br /&gt;第５章は、ソフトウェア起業家精神についてである。製品開発の視点にとどまらず、とりわけ戦略とビジネスモデルにまで視点を広げ、ソフトウェアのスタートアップ企業を成功裏に設立するために本書の内容がどう当てはまるかを考察している。&lt;br /&gt;&lt;br /&gt;第６章は、スタートアップ10社のケーススタディである。筆者が取締役、顧問、コンサルタントとして知るところとなったスタートアップ企業10社について、成功企業、失敗企業、現段階ではまだ何ともいえない企業の３つに分類して述べている。&lt;br /&gt;&lt;br /&gt;最後に第７章で、ソフトウェアのスタートアップ企業にとって「理想的」もしくは「ベストの」モデルは何かを一般化することは考慮すべき変数があまりにも多く難しいとしつつも、少なくとも法人向けソフトウェア企業の場合、ビジネスモデルの判断基準は製品企業、サービス企業、ハイブリッド企業のどれを目指すのかという１つに帰結できると結んでいる。&lt;br /&gt;&lt;br /&gt;ソフトウェア開発に関する本は、開発手法やプロジェクト管理についてのものはそれこそ掃いて捨てるほどあるのだが、ビジネスという視点から論じているものは驚くほど少ない（大きめの本屋でコンピュータ関連の棚を見てみればわかるだろう）。ソフトウェア企業の競争戦略は、ソフトウェアをビジネスの面から論じた数少ない本であり、かつ、内容としても非常に優れた良書である。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=4478374813" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■その他、本に関係するエントリ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_20.html"&gt;研究開発を着実に利益に結びつける方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_08.html"&gt;最近読んでいるマーケティング本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_22.html"&gt;コンピュータ将棋のいま&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2510120773528211547?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2510120773528211547/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2510120773528211547' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2510120773528211547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2510120773528211547'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post_212.html' title='【書評】ソフトウェア企業の競争戦略'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S8qAe7mcW_I/AAAAAAAAARc/ZUCYsLo7kWo/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1719465882547178410</id><published>2010-04-18T11:34:00.002+09:00</published><updated>2010-04-18T11:49:52.668+09:00</updated><title type='text'>引き続き、粒子ベース剛体シミュレーション</title><content type='html'>引き続き、粒子ベース剛体シミュレーションです。&lt;br /&gt;&lt;br /&gt;重力を追加し４つのキューブが落下するシーンを計算しました。&lt;br /&gt;&lt;br /&gt;■Δt=0.0033sec&lt;br /&gt;&lt;object width="400" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ACMXLXV3G4k&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ACMXLXV3G4k&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;さらに、タイムステップによる挙動の違いを見るために、Δtを変えていくつか計算しました。先ほどの動画はΔt=0.0033secです。&lt;br /&gt;&lt;br /&gt;■Δt=0.0017sec&lt;br /&gt;&lt;object width="400" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/w6aAwUtHKvo&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/w6aAwUtHKvo&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;■Δt=0.0008sec&lt;br /&gt;&lt;object width="400" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4o53EmfWpGE&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4o53EmfWpGE&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;■Δt=0.0004sec&lt;br /&gt;&lt;object width="400" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/M3wVluAdZrw&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/M3wVluAdZrw&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;■Δt=0.0002sec&lt;br /&gt;&lt;object width="400" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mj7DlofETDY&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mj7DlofETDY&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;これらを見比べると、タイムステップを変えるだけでキューブの挙動が変化しています。タイムステップを変えていき、Δt=0.0004secとΔt=0.0002secまで小さくすると、だいぶ挙動の違いがなくなってきています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1719465882547178410?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1719465882547178410/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1719465882547178410' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1719465882547178410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1719465882547178410'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post_18.html' title='引き続き、粒子ベース剛体シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7525078233310301946</id><published>2010-04-15T00:46:00.006+09:00</published><updated>2010-04-15T00:49:29.402+09:00</updated><title type='text'>粒子ベース多体衝突シミュレーション</title><content type='html'>いま、粒子ベースのアプローチで多体衝突シミュレーションを実装しています。&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="324"&gt;&lt;param name="movie" value="http://www.youtube.com/v/iXVMTF5PWUg&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/iXVMTF5PWUg&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="324"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;剛体を粒子の集まりとして表現することで、衝突判定と応力の計算を行います。&lt;br /&gt;&lt;br /&gt;この方法の強みは、ポリゴンベースのアプローチに比べて、アルゴリズムが単純なことと、複雑な形の物体について効率良くシミュレーションできることです。&lt;br /&gt;&lt;br /&gt;上のムービーでは立方体の衝突をシミュレーションし、立方体を表現するために使っている粒子をそのままレンダリングしています。&lt;br /&gt;&lt;br /&gt;■関連する記事&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7525078233310301946?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7525078233310301946/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7525078233310301946' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7525078233310301946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7525078233310301946'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post_15.html' title='粒子ベース多体衝突シミュレーション'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4434857805305796302</id><published>2010-04-13T11:05:00.000+09:00</published><updated>2010-04-13T11:07:32.000+09:00</updated><title type='text'>このブログのアクセス傾向</title><content type='html'>このブログは粒子法関連のキーワードではいってくる人が多いんだけど、春休みシーズンや年末年始はアクセスが減る傾向がある。&lt;br /&gt;&lt;br /&gt;きっと学生さんが見にくることが多いんだろう。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4434857805305796302?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4434857805305796302/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4434857805305796302' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4434857805305796302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4434857805305796302'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post_13.html' title='このブログのアクセス傾向'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3733420158266907462</id><published>2010-04-04T19:26:00.003+09:00</published><updated>2010-04-04T19:30:26.961+09:00</updated><title type='text'>理想的なベッドの選び方</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S7hoJMHt64I/AAAAAAAAARQ/y_4MnIT46ds/s1600/images.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S7hoJMHt64I/AAAAAAAAARQ/y_4MnIT46ds/s320/images.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ここのところ数ヶ月、どうも疲れが抜けない。寝ても疲れて、どんどん消耗する困った状態になっている。原因が分からず、運動してみたり仕事の負荷を下げてみているのだが、いっこうに良くならない。&lt;br /&gt;&lt;br /&gt;そこで、もう原因として残っているのはベッドだなと思い、ベッドを変えてみることにした。&lt;br /&gt;&lt;br /&gt;いま使っているベッドは、折りたたみできる簡易的なもので、その上に布団を敷いて寝ている。以前にもベッドが原因ではないかと疑って床にマットと布団を敷いて寝てみたのだが、そのときは特に改善がみられなかったので、ベッドが原因ではないだろうと思っていた。&lt;br /&gt;&lt;br /&gt;とはいえ、寝て起きるときが一番しんどかったり、腰や背中が痛かったりと、症状としては寝疲れなので、思い切ってベッドを変えてみる。&lt;br /&gt;&lt;h4&gt;ベッドの選び方&lt;/h4&gt;&lt;br /&gt;ベッドは、主にベッドフレームとマットレスからなっている。このうち、寝心地に元も影響があるのはマットレスなので、マットレスに絞って調べてみた。&lt;br /&gt;&lt;h4&gt;マットレスを決めるポイント&lt;/h4&gt;&lt;br /&gt;マットレスを決める要素としては、&lt;br /&gt;・スプリング&lt;br /&gt;・枠材の有無&lt;br /&gt;・詰め物の層&lt;br /&gt;・生地&lt;br /&gt;・一層か二層か&lt;br /&gt;といった点があげられる。&lt;br /&gt;&lt;br /&gt;これらのうち、寝たときの姿勢に最も影響するのがスプリングである。スプリングについては、最も重要な要素なので下方で詳述する。&lt;br /&gt;&lt;br /&gt;その他の要素として、枠材というのは、スプリングの外側、マットレスの周囲に沿って構造材を入れるかで、これはマットの耐久性に関係する。スプリングだけ では寝返り時の横ズレでスプリングがへたりやすくなるため、周囲に構造材を埋めることでスプリングの耐久性を増すことができる。&lt;br /&gt;&lt;br /&gt;詰め物の層とは、スプリングの上に層状に入れられたもので、これは通気性や表面の感触に関係する。マットによっては表面と裏面で材質を変えて、片方は通気性に優れた夏用、もう片方は保温性に優れた冬用、といった機能を持たせているものもある。&lt;br /&gt;&lt;br /&gt;生地はマットの一番外側の布地で、これは純粋に肌触りや視覚的な効果に関係する。キングストンなど値段の高いメーカのマットは、このあたりで差別化を図っている。とはいえ、寝たときの姿勢をサポートするというマットレス本来の機能という点では影響しないところでもある。&lt;br /&gt;&lt;br /&gt;最後に一層か二層かというのは、マットレスのスプリング層と詰め物層の間にしきりをいれることで、詰め物層で柔らかく体をつつみ、スプリング層でしっかり支える、というもの。二層の方が質が高く、その分高価になる。&lt;br /&gt;&lt;h4&gt;スプリングについて&lt;/h4&gt;&lt;br /&gt;さて、これらのポイントのうち最も重要な要素がスプリングだというのは前で書いた。それでは、スプリングにはどのような種類があるのかというと、大きく２種類あり、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ボンネルコイル&lt;/li&gt;&lt;li&gt;ポケットコイル&lt;/li&gt;&lt;/ul&gt;となっている。&lt;br /&gt;&lt;br /&gt;ボンネルコイルというのは昔からあるスプリングの種類で、１本のワイヤをいくつものコイルに巻いて敷き詰めた形になっている。特徴としては、体を面で支え、横ズレに強く、通気性が良い。フィーリングとしては堅い印象。ポケットコイルよりも価格は安く、半値になることも。&lt;br /&gt;&lt;br /&gt;一方、ポケットコイルというのは、独立したコイルを布で包み、それをマットの中にたくさん敷き詰めた構造となっている。体を点で支えるのが特徴で、より体 全体を包み込む柔らかいフィーリングとなる。ただ、横ズレに弱く、スプリングを布で包むため通気性が悪くなりがちで、値段としては、製造に手間がかかるのでボンネルコイ ルに比べ高価になりやすい。とはいえ、体全体を包み込まれる感じはとても優れている。&lt;br /&gt;&lt;h4&gt;どちらのマットを選ぶのが良いか？&lt;/h4&gt;&lt;br /&gt;どちらのマットが良いかは、体格や体重にもよるので人それぞれだが、販売員の方の話では、ポケットコイルを好む人が７割だそうだ。&lt;br /&gt;&lt;br /&gt;ベッドを販売しているお店に行けば実際に横になって寝心地を試すことができるので、一度行ってみると良いだろう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/subversion.html"&gt;subversionでテキストがバイナリに誤認識されてしまう場合&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/wimax.html"&gt;WiMAXを契約したのでそのまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/haskellghcmac-osx-106-snow-leopard.html"&gt;Haskell(GHC)をMac OSX 10.6 Snow Leopardにインストールする方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/silverlight.html"&gt;Silverlightとトロイの木馬&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/ghci.html"&gt;ghciのコマンドまとめ&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3733420158266907462?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3733420158266907462/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3733420158266907462' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3733420158266907462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3733420158266907462'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/blog-post.html' title='理想的なベッドの選び方'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S7hoJMHt64I/AAAAAAAAARQ/y_4MnIT46ds/s72-c/images.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-501157176393064292</id><published>2010-04-04T13:35:00.002+09:00</published><updated>2010-07-31T21:08:34.972+09:00</updated><title type='text'>subversionでテキストがバイナリに誤認識されてしまう場合には</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S7gXBtNRRzI/AAAAAAAAARI/BU1E0ps6rr4/s1600/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S7gXBtNRRzI/AAAAAAAAARI/BU1E0ps6rr4/s320/images.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;subversionに日本語のUTF-8ファイルを追加したときに、テイストファイルであるにも関わらずバイナリと誤認識されてしまうことがあります。バイナリと認識されてしまうと、svn diffで差分を表示することができずに困ります。&lt;br /&gt;&lt;br /&gt;バイナリと認識されてしまっていることは、svn addしたときに(bin)と表示されるのでわかります。また、次のようにしても調べられます。&lt;br /&gt;&lt;blockquote&gt;$ svn propget svn:mime-type hoge.tex&lt;br /&gt;application/octet-stream&lt;/blockquote&gt;これはmime-typeがapplication/octet-streamになってしまっていることを表しています。&lt;br /&gt;&lt;br /&gt;バイナリと誤認識されたファイルをテキストとして再認識させるには、mime-typeをtext/で始まる文字列にすれば大丈夫です。あるいは単にmime-typeを消すだけでもOK。&lt;br /&gt;&lt;blockquote&gt;$ svn propset svn:mime-type text/x-tex hoge.txt&lt;br /&gt;$ または svn propdel svn:mime-type hoge.txt&lt;br /&gt;$ svn commit -m ''&lt;/blockquote&gt;さらに文字コードを指定したい場合は svn:mime-type 'text/plain; charset=euc-jp' などとすればよいです。 &lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/wimax.html"&gt;WiMAXを契約したのでそのまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/haskellghcmac-osx-106-snow-leopard.html"&gt;Haskell(GHC)をMac OSX 10.6 Snow Leopardにインストールする方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/silverlight.html"&gt;Silverlightとトロイの木馬&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/ghci.html"&gt;ghciのコマンドまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/macbookpro.html"&gt;MacBookPro用インナーケースまとめ&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-501157176393064292?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/501157176393064292/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=501157176393064292' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/501157176393064292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/501157176393064292'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/04/subversion.html' title='subversionでテキストがバイナリに誤認識されてしまう場合には'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/S7gXBtNRRzI/AAAAAAAAARI/BU1E0ps6rr4/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4912317722007215945</id><published>2010-03-28T18:08:00.001+09:00</published><updated>2010-03-28T18:10:09.567+09:00</updated><title type='text'>WiMAXを契約したのでそのまとめ</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/S68c2GWbLAI/AAAAAAAAARA/P2mVn_F-g8w/s1600/wimax_certified.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/S68c2GWbLAI/AAAAAAAAARA/P2mVn_F-g8w/s200/wimax_certified.gif" width="160" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;WiMAXを契約してきた。契約は、UQコミュニケーションとではなく、UQコミュニケーションからMVNOでサービス提供をしているビックカメラのBIC WiMAX Serviceを契約した。&lt;br /&gt;&lt;br /&gt;同時購入した端末は2,800円。UQブランドのものが通常12,800円、キャンペーンで半額の6,400円となっているのと比べると安い。&lt;br /&gt;&lt;br /&gt;モノとしてはUQブランドで提供されているものと同じで、製造元はシンセイコーポレーション。端末には製造元の他に開発元と販売元も記載されていて、開発元はMODACOM、販売元はラネットとなっている。&lt;br /&gt;&lt;br /&gt;MODACOMは韓国のWiMAX機器メーカーで、シンセイコーポレーションにOEM販売しているようだ。実際、端末の型番はBDSS01と契約時に伝えられていたのだが、端末に記載されている型番はMW-2510となっている。MODACOMのサイトにMV-2500という型番のMobile WiMAX USB Modemが載っているのでそれだろう。&lt;br /&gt;&lt;br /&gt;端末のデザインは、端末自体は特にどうというものでもないが、ツヤ黒で指紋が目立つのは勘弁して欲しい。それ以外はとくに不満はない。箱はiPhoneやiPod touchを参考にした感じで、「高級感」というと言い過ぎだが一定の洗練を感じさせるものとなっている。&lt;br /&gt;&lt;br /&gt;販売元と記載されているラネットは、会社概要を見ると「携帯電話の小売、及び大手カメラ量販店内における販売代理店」とあり、どうやらもともと携帯ショップから始まった会社のよう。大手カメラ量販店内における販売代理店とあるので、ビックカメラで応対してくれたのはラネットの人なんだろう。&lt;br /&gt;&lt;br /&gt;加えて、Wi2 300を提供するワイヤ・アンド・ワイヤレスと提携しているとのことで、「BIC WiMAX Service」にWi2 300がビックカメラオリジナルプランとして含まれているのは、この関係と思われる。&lt;br /&gt;&lt;br /&gt;シンセイコーポレーションは、もともと新星貿易株式会社といって、兵庫県姫路の商社である。もともと1973年に輸出入貿易から始まり、その後IT製品、エレクトロニクス製品へ手を伸ばしている。WiMAXの端末は韓国MODACOMからのOEM販売のようだ。MODACOMが「開発元」シンセイコーポレーションが「製造元」とあるので、日本向けの製造はシンセイコーポレーションが行っているのかもしれない。ちなみにMADE IN KOREAとある。&lt;br /&gt;&lt;br /&gt;「UQ WiMAX」と「BIC WiMAX Service」についてプレイヤーを整理すると、&lt;br /&gt;&lt;br /&gt;■UQ WiMAX&lt;br /&gt;・UQコミュニケーションズ&lt;br /&gt;→通信事業者&lt;br /&gt;・シンセイコーポレーション - MODACOM&lt;br /&gt;→端末提供&lt;br /&gt;&lt;br /&gt;■BIC WiMAX Service&lt;br /&gt;・ビックカメラ - UQコミュニケーションズ&lt;br /&gt;→通信事業者。ビックカメラはMVNO&lt;br /&gt;・シンセイコーポレーション - MODACOM&lt;br /&gt;→端末提供&lt;br /&gt;・ラネット - ワイヤ・アンド・ワイヤレス &lt;br /&gt;→販売代理、Wi-Fi提供&lt;br /&gt;&lt;br /&gt;といったところか。&lt;br /&gt;&lt;br /&gt;ワイヤ・アンド・ワイヤレスがビックカメラと提携するのは、契約者を増やしたいというのがあるのだろう。一方で、ビックカメラがMVNOで通信事業を行うのはなぜなんだろう？他の量販店との競争の中で、少しでも他ではやっていないキャンペーンを打ちたいということだろうか？通信料金の分配はどのようになっているのだろう？&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/haskellghcmac-osx-106-snow-leopard.html"&gt;Haskell(GHC)をMac OSX 10.6 Snow Leopardにインストールする方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/silverlight.html"&gt;Silverlightとトロイの木馬&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/ghci.html"&gt;ghciのコマンドまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/macbookpro.html"&gt;MacBookPro用インナーケースまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/tachcrunchjp-smmalterian-1000-2010smm66.html"&gt;欧米企業のソーシャル・メディア・マーケティングの普及状況&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4912317722007215945?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4912317722007215945/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4912317722007215945' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4912317722007215945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4912317722007215945'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/03/wimax.html' title='WiMAXを契約したのでそのまとめ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/S68c2GWbLAI/AAAAAAAAARA/P2mVn_F-g8w/s72-c/wimax_certified.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8123240826032982285</id><published>2010-03-21T20:00:00.009+09:00</published><updated>2010-03-21T20:09:07.635+09:00</updated><title type='text'>Haskell(GHC)をMac OSX 10.6 Snow Leopardにインストールする方法</title><content type='html'>&lt;br/&gt;Mac OSX 10.6 (Snow Leopard)にGHCをインストールするときの注意点をまとめました。&lt;br /&gt;&lt;h4&gt;Mac Portsではインストールできない&lt;/h4&gt;&lt;br /&gt;MacPortsのghcはまだOSX 10.6には対応していないので、MacPortsからGHCをインストールすることはできません。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ sudo port install ghc&lt;br /&gt;---&amp;gt;  Computing dependencies for ghc&lt;br /&gt;---&amp;gt;  Fetching ghc&lt;br /&gt;Error: Target org.macports.fetch returned: ghc is not yet supported on Mac OS X 10.6.x (SnowLeopard)&lt;/blockquote&gt;&lt;h4&gt;ではどうやってインストールするのか？&lt;/h4&gt;&lt;br /&gt;OSX 10.6にGHCを入れるには、Haskell Platformにあるバイナリを使います。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hackage.haskell.org/platform/"&gt;HaskellPlatform&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ところが・・・&lt;br /&gt;&lt;h4&gt;それでも動かない！&lt;/h4&gt;&lt;br /&gt;実は、HaskellPlatformのバイナリをインストールしても、そのままでは動きません。&lt;br /&gt;&lt;br /&gt;理由は、Snow Leopardとその中にあるコンパイラが基本的に64bitでの処理となったことに伴い、GHCがOSX用に生成する32bitのコードでは、アセンブラとリンカがエラーを出してしまうためです。&lt;br /&gt;&lt;h4&gt;じゃあどうすればいいの？&lt;/h4&gt;&lt;br /&gt;GHCが動作するようにするには、ghcにパッチを当てて、32bitコードのままバイナリが生成されるようにします。&lt;br /&gt;&lt;br /&gt;具体的には、/usr/bin/ghc (GHC自体を呼び出すためのシェルスクリプト)をテキストエディタで編集して、オプションに-optc-m32 -opta-m32 -optl-m32を追加します。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/usr/bin/ghc&lt;/b&gt;&lt;blockquote&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/ghc &lt;b style="color: red;"&gt;-optc-m32 -opta-m32 -optl-m32&lt;/b&gt; -B/Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/. -dynload wrapped ${1+"$@"}&lt;/blockquote&gt;&lt;br /&gt;これで、OSX 10.6でGHCを使えるようになります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/03/silverlight.html"&gt;Silverlightとトロイの木馬&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/ghci.html"&gt;ghciのコマンドまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/macbookpro.html"&gt;MacBookPro用インナーケースまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/tachcrunchjp-smmalterian-1000-2010smm66.html"&gt;欧米企業のソーシャル・メディア・マーケティングの普及状況&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/google-analytics.html"&gt;Google Analyticsのカスタム変数機能とは？&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8123240826032982285?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8123240826032982285/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8123240826032982285' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8123240826032982285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8123240826032982285'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/03/haskellghcmac-osx-106-snow-leopard.html' title='Haskell(GHC)をMac OSX 10.6 Snow Leopardにインストールする方法'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2950428771879488103</id><published>2010-03-14T23:20:00.005+09:00</published><updated>2010-03-14T23:27:29.838+09:00</updated><title type='text'>Silverlightとトロイの木馬</title><content type='html'>MacのQuicktimeプレーヤでWindows Media Videoを見られるようにするプラグインに、Flip4Macというのがある。&lt;br /&gt;&lt;br /&gt;先日Macを新しくしたので、Flip4Macも新しくインストールしようとして検索すると、Microsoftのダウンロードセンターから落とすようになっていた。名前も、Flip4Macではなく、QuicktimeComponentsとなっている。昔はFlip4Macのサイトから落としていたのに。&lt;br /&gt;&lt;br /&gt;なんでMicrosoftなんだろうと思いつつインストールを進めると、理由がわかった。&lt;br /&gt;&lt;br /&gt;Flip4MacがMicrosoftから提供されている理由は、Flip4Macのインストールすると一緒にSilverlightも潜り込ませるようにするためだった。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S5zwp_dGQSI/AAAAAAAAAQ4/X7cbpOeLnqo/s1600-h/flip4mac.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S5zwp_dGQSI/AAAAAAAAAQ4/X7cbpOeLnqo/s320/flip4mac.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;なるほどねぇ。&lt;br /&gt;&lt;br /&gt;Flashの対抗馬としてのSilverlightだから、とにかくたくさんのPCにインストールされていることが至上命題。たくさんのPCにインストールされていれば、開発者も集まってくる。&lt;br /&gt;&lt;br /&gt;このFlip4Macも、Yahooの映像トピックスも、いい線をついてくる。この辺は、流石Microsoftというところか。&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/ghci.html"&gt;ghciのコマンドまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/macbookpro.html"&gt;MacBookPro用インナーケースまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/tachcrunchjp-smmalterian-1000-2010smm66.html"&gt;欧米企業のソーシャル・メディア・マーケティングの普及状況&lt;/a&gt;&lt;br /&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/google-analytics.html"&gt;Google Analyticsのカスタム変数機能とは？&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_20.html"&gt;研究開発を着実に利益に結びつける方法&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_12.html"&gt;おすすめブーツスタンド&lt;/a&gt;&lt;br /&gt;-&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2950428771879488103?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2950428771879488103/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2950428771879488103' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2950428771879488103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2950428771879488103'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/03/silverlight.html' title='Silverlightとトロイの木馬'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S5zwp_dGQSI/AAAAAAAAAQ4/X7cbpOeLnqo/s72-c/flip4mac.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4032572375424880786</id><published>2010-02-15T01:19:00.006+09:00</published><updated>2010-02-15T01:25:58.067+09:00</updated><title type='text'>ghciのコマンドまとめ</title><content type='html'>Haskellの実装の１つであるGHCの、インタラクティブ実行環境ghciのコマンドまとめです。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;:type &amp;lt;expr&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;expr&amp;gt;の型を表示する。:typeは:tに省略可能。&amp;lt;expr&amp;gt;は型を持ったものでないといけないので、データコンストラクタは指定できない。&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;:info [&amp;lt;name&amp;gt; ...]&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;name&amp;gt;についての情報を表示する。表示される情報は、&amp;lt;name&amp;gt;の定義やどこで定義されているか、また何の型クラスのインスタンスか、など。&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="margin: 0px;"&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/02/macbookpro.html"&gt;MacBookPro用インナーケースまとめ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/tachcrunchjp-smmalterian-1000-2010smm66.html"&gt;欧米企業のソーシャル・メディア・マーケティングの普及状況&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/google-analytics.html"&gt;Google Analyticsのカスタム変数機能とは？&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_20.html"&gt;研究開発を着実に利益に結びつける方法&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_12.html"&gt;おすすめブーツスタンド&lt;/a&gt;&lt;/div&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4032572375424880786?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4032572375424880786/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4032572375424880786' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4032572375424880786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4032572375424880786'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/02/ghci.html' title='ghciのコマンドまとめ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-39808351124128920</id><published>2010-02-12T05:21:00.012+09:00</published><updated>2011-06-21T15:33:28.104+09:00</updated><title type='text'>MacBook・MacBook Pro用ケースまとめ</title><content type='html'>大学時代から使っていたPowerBookG4を壊してしまったので、MacBook Proに買い替え。&lt;br /&gt;&lt;br /&gt;使っていたPowerBookG4は12インチで、新しく買ったMacBook Proは13インチ。なので、当然これまで使っていたケースに入らず、新しいケースを買おうとしています。&lt;br /&gt;&lt;br /&gt;どんなのを買おうかと探してみた。&lt;br /&gt;&lt;br /&gt;▼まず１つめ。よくある感じの黒のケース。&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B000GPPKMW" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;安さが魅力で、アマゾンのレビューをみると機能的にも問題なさそう。&lt;br /&gt;&lt;br /&gt;▼２つめは、ネットで検索してみつけたこれ。&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B002XK4UCO" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;ファスナーがついていなくて、口がみょーんと伸びて入れるタイプ。&lt;br /&gt;シンプルで出し入れしやすそう。&lt;br /&gt;&lt;br /&gt;▼３つめ。&lt;br /&gt;&lt;img alt="1415_03.jpg" border="0" height="200" src="http://lh6.ggpht.com/_w9gcOO4qfvo/S3Rk4rPTeOI/AAAAAAAAAQk/qHqpSM8cgSk/1415_03.jpg?imgmax=800" width="125" /&gt;&lt;br /&gt;&lt;a href="http://www.assiston.co.jp/?item=1415"&gt;assistOn&lt;/a&gt;というところで見つけたもの。&lt;br /&gt;柄がオシャレで、形もかわいい。&lt;br /&gt;バッグに入れるよりは、手持ち用かな。&lt;br /&gt;&lt;br /&gt;▼４つめ。これは・・・&lt;br /&gt;&lt;img alt="001.jpg" border="0" height="133" src="http://lh6.ggpht.com/_w9gcOO4qfvo/S3RlZEwtvlI/AAAAAAAAAQo/Wghcb17ryFc/001.jpg?imgmax=800" width="200" /&gt;&lt;br /&gt;&lt;a href="http://journal.mycom.co.jp/news/2010/02/05/022/index.html"&gt;古洋書のようなデザインのケース&lt;/a&gt;だって。&lt;br /&gt;おもしろい。&lt;br /&gt;&lt;br /&gt;▼最後に、アマゾンで見つけたこれ。&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B001JEX62U" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;フェルトのハンドメイドで封筒入れみたいなのがオシャレ。&lt;br /&gt;6,000円といい値段します。&lt;br /&gt;これいいなー&lt;br /&gt;&lt;br /&gt;しばらく悩んでみてから買おう♪&lt;br /&gt;&lt;br /&gt;MacBook Proについては、&lt;br /&gt;・グレア液晶について&lt;br /&gt;・SnowLeopardについて&lt;br /&gt;・Chrome for Macについて&lt;br /&gt;・キーボードについて&lt;br /&gt;などなど、いろいろ思ったことがあるので、少しずつ書いていきたいなー。&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-39808351124128920?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/39808351124128920/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=39808351124128920' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/39808351124128920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/39808351124128920'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/02/macbookpro.html' title='MacBook・MacBook Pro用ケースまとめ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_w9gcOO4qfvo/S3Rk4rPTeOI/AAAAAAAAAQk/qHqpSM8cgSk/s72-c/1415_03.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-9049522707100202130</id><published>2010-01-26T21:37:00.006+09:00</published><updated>2010-01-26T22:53:33.058+09:00</updated><title type='text'>トランスコスモス、DART事業を米Googleに譲渡</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S17zcob1mQI/AAAAAAAAAQc/OL0BfVEn3MU/s1600-h/top-logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="48" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S17zcob1mQI/AAAAAAAAAQc/OL0BfVEn3MU/s200/top-logo.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;■トランスコスモス、DART事業を米Googleに譲渡&lt;br /&gt;http://www.sem-r.com/news-2010/20100125234759.html&lt;br /&gt;&lt;br /&gt;==================&lt;br /&gt;&lt;br /&gt;▼1997年&lt;br /&gt;ダブルクリック株式会社は、1997年の創業当時に、米国DoubleClick社&lt;br /&gt;とDART技術を用いた製品及びサービスを日本国内で永続的かつ独占的に&lt;br /&gt;販売する権利を取得し、事業展開を行ってきた&lt;br /&gt;&lt;br /&gt;▼2002年12月&lt;br /&gt;TOBにより、米DoubleClick社からトランスコスモス株式会社に経営権移動&lt;br /&gt;※ダブルクリック社沿革より&lt;br /&gt;&lt;br /&gt;▼2003-&lt;br /&gt;トランスコスモスはDART事業を積極展開せず&lt;br /&gt;※推測&lt;br /&gt;&lt;br /&gt;▼2007年4月&lt;br /&gt;米DoubleClickは米Googleによって買収される（完了は2008年3月11日）&lt;br /&gt;しかし、過去に締結された独占的ライセンスにより、GoogleはDART技術&lt;br /&gt;を取得したにもかかわらず、日本国内でDART技術を用いたネット広告配&lt;br /&gt;信が展開できないという事態になっていた。&lt;br /&gt;&lt;br /&gt;==================&lt;br /&gt;&lt;br /&gt;日本でDARTが広がっていなかった理由の１つはこれ。&lt;br /&gt;&lt;br /&gt;今回の譲渡によって、数年内にGoogleが日本でDARTの積極展開を始める&lt;br /&gt;可能性がある。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-9049522707100202130?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/9049522707100202130/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=9049522707100202130' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9049522707100202130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9049522707100202130'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/dartgoogle.html' title='トランスコスモス、DART事業を米Googleに譲渡'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S17zcob1mQI/AAAAAAAAAQc/OL0BfVEn3MU/s72-c/top-logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4717137347985805416</id><published>2010-01-23T20:13:00.012+09:00</published><updated>2010-01-23T20:27:07.801+09:00</updated><title type='text'>欧米企業のソーシャル・メディア・マーケティングの普及状況</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S1rZ1aTMnhI/AAAAAAAAAQU/WOOW4eC2w9w/s1600-h/socialmedia.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="192" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S1rZ1aTMnhI/AAAAAAAAAQU/WOOW4eC2w9w/s200/socialmedia.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;TachCrunchJPの&lt;a href="http://jp.techcrunch.com/archives/20100121alterian-social-media-marketing-study/"&gt;このエントリ&lt;/a&gt;によると、欧米（欧≒イギリス）のマーケティングはソーシャルメディアに大きく傾斜してきているとのこと。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ソーシャル・メディア・マーケティング（SMM）の普及状況に関するAlterianのレポートによると、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;調査の対象は、欧米の1000人のマーケティング専門家&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;2010年にSMMに「投資する」と答えたのが66%&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;そのうち40%(全体の25%)は、従来のダイレクト・マーケティング予算の1/5以上をSMMにシフトさせると回答&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;ソーシャル・メディアのモニタ、分析のためのツールに何らかの支出をしていたのが回答者の1/3&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;クリックストリームやウェブ分析のデータを顧客データベースやメール・データベースと連動させていないのが半数近く&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;従来のキャンペーン方式のダイレクト・マーケティングから顧客との会話を重視する多チャンネルのマーケティングへの移行を「努力している」と回答したのが半数&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;日本ではまだまだキャンペーンサイトを設置してそこに広告から誘導してくるキャンペーン方式が主流で、一部twitterやブログを使ったPRが試みられている段階。一般にネットでは日本は５年遅れてアメリカに追いつくといわれているので、数年後には日本でもSMMが普及してくるか。&lt;br /&gt;&lt;br /&gt;あるいは、日本では従来のマスの影響力の大きさ&amp;amp;ヤフーのような準マス媒体の存在から、独自路線で進んだりする可能性もあり。&lt;br /&gt;&lt;br /&gt;中国はそのまま欧米路線に進むのでは？&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/google-analytics.html"&gt;Google Analyticsのカスタム変数機能とは？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_20.html"&gt;研究開発を着実に利益に結びつける方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_12.html"&gt;おすすめブーツスタンド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_5646.html"&gt;タジンなべって知ってます？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_10.html"&gt;冷たくて美味しい水をいつでも！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4717137347985805416?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4717137347985805416/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4717137347985805416' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4717137347985805416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4717137347985805416'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/tachcrunchjp-smmalterian-1000-2010smm66.html' title='欧米企業のソーシャル・メディア・マーケティングの普及状況'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/S1rZ1aTMnhI/AAAAAAAAAQU/WOOW4eC2w9w/s72-c/socialmedia.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3935229687298998959</id><published>2010-01-22T15:21:00.005+09:00</published><updated>2010-01-23T20:25:10.380+09:00</updated><title type='text'>Google Analyticsのカスタム変数機能とは？</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S1lC-5UD7WI/AAAAAAAAAQM/fLAVi2VOru4/s1600-h/analytics_logo.gif" imageanchor="1" style="clear: right; float: right; margin-top: 3em;margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="38" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S1lC-5UD7WI/AAAAAAAAAQM/fLAVi2VOru4/s200/analytics_logo.gif" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://analytics-ja.blogspot.com/2010/01/custom-variables-overview.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+blogspot/LStO+(Analytics+Japan)"&gt;Google Analytics 日本版 公式ブログ: カスタム変数 概要&lt;/a&gt;によると、Google Analyticsにはカスタム変数という機能がある。&lt;br /&gt;&lt;br /&gt;機能としてはアクセスデータをセグメントするためのもので、詳しく何ができるかというと、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;カスタム変数では、ビジターレベルに加えてセッションレベル、ページレベルで属性を定義して、データをセグメントすることができる&lt;/li&gt;&lt;li&gt;カスタム変数のデータは、レポート画面の[ユーザー]セクションの[カスタム変数]レポートでみることができる&lt;/li&gt;&lt;li&gt;変数名をクリックすると、その変数に含まれる値ごとにセグメントすることができる&lt;/li&gt;&lt;li&gt;カスタム変数は１ページあたり最大５つの異なる変数を設置することができる&lt;/li&gt;&lt;/ul&gt;すげー難しいよ、これ。検証に使う場合は、これを使うことになるようなプランを立てるのが難しい。逆に、プランを立てるためのインプットにしようにも、あらかじめタグを埋めたデータしかとれない。&lt;br /&gt;&lt;br /&gt;活用している人がいたら、ぜひ教えてください！&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_20.html"&gt;研究開発を着実に利益に結びつける方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_12.html"&gt;おすすめブーツスタンド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_5646.html"&gt;タジンなべって知ってます？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_10.html"&gt;冷たくて美味しい水をいつでも！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3935229687298998959?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3935229687298998959/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3935229687298998959' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3935229687298998959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3935229687298998959'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/google-analytics.html' title='Google Analyticsのカスタム変数機能とは？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/S1lC-5UD7WI/AAAAAAAAAQM/fLAVi2VOru4/s72-c/analytics_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7386829972712553019</id><published>2010-01-20T01:16:00.016+09:00</published><updated>2010-01-23T20:25:42.655+09:00</updated><title type='text'>研究開発を着実に利益に結びつける方法</title><content type='html'>&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4478374228" style="width:120px;height:240px;float:right;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;研究開発について、こんな課題を感じていないでしょうか？&lt;br /&gt;&lt;ul&gt;&lt;li&gt;明確な目標がない&lt;/li&gt;&lt;li&gt;目標があっても、誰も欲しがらない製品を一生懸命作るような目標になってしまう&lt;/li&gt;&lt;li&gt;あるいは、最初から開発投資の一部しか回収できないとわかっている&lt;/li&gt;&lt;/ul&gt;研究開発は、すぐに利益に結びつくものではないため、目標設定が不適切なまま、スケジュールやマイルストンがずるずると続いてしまうということがよくあります。&lt;br /&gt;&lt;br /&gt;では、研究開発を着実に利益に結びつけるとはどういうことでしょうか？「ザ・プロフィット」には、マネジメントによって大ヒットを創造し利益を生み出すというモデルが書かれています。&lt;br /&gt;&lt;br /&gt;マネジメントによって大ヒットを創造するにはどうすればいいでしょう？ポイントは３つあります。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;まず、何をどうすべきかを明確に洗い出し、大ヒットの可能性を秘めたプロジェクトにフォーカスをすること&lt;/li&gt;&lt;li&gt;次に、あらゆる不確実性を排除することはできないことを認め、統合的なリスク・マネジメント体制を整えること&lt;/li&gt;&lt;li&gt;最後に、リード・プロジェクトが失敗しても次の製品に教訓を活かせるように、バックアップとしての研究開発を設けること&lt;/li&gt;&lt;/ul&gt;上記のポイントを押さえるには、マネジメントの強力なリーダーシップが必須です。さらに、一番重要な鍵となるのが組織の活気です。大ヒット製品は組織の活気から生まれてくるのです。&lt;br /&gt;&lt;br /&gt;Amazonで「ザ・プロフィット」を&lt;a href="http://www.amazon.co.jp/gp/product/4478374228?ie=UTF8&amp;tag=kamonama-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4478374228"&gt;見てみる&lt;/a&gt;&lt;img src="http://www.assoc-amazon.jp/e/ir?t=kamonama-22&amp;l=as2&amp;o=9&amp;a=4478374228" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_12.html"&gt;おすすめブーツスタンド&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_5646.html"&gt;タジンなべって知ってます？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_10.html"&gt;冷たくて美味しい水をいつでも！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_08.html"&gt;最近読んでいるマーケティング本&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7386829972712553019?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7386829972712553019/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7386829972712553019' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7386829972712553019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7386829972712553019'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post_20.html' title='研究開発を着実に利益に結びつける方法'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5356270203600202529</id><published>2010-01-12T02:16:00.004+09:00</published><updated>2010-01-23T20:26:00.698+09:00</updated><title type='text'>おすすめブーツスタンド</title><content type='html'>先月ブーツを買ったのだが、ブーツスタンドを持っていなかったので、脱いでそのままにしておくとくたっとなってしまう。&lt;br /&gt;&lt;br /&gt;仕方なく500mlのペットボトルで代用していたものの、いくらなんでもみっともない（ォィ&lt;br /&gt;&lt;br /&gt;そんなわけで、ブーツスタンドを買いました。&lt;br /&gt;&lt;br /&gt;&lt;img alt="100110_2256~001.jpg" border="0" height="320" src="http://lh5.ggpht.com/_w9gcOO4qfvo/S0tbR8Pa0GI/AAAAAAAAAP4/wSS1r9IRTxw/100110_2256%7E001.jpg?imgmax=800" width="240" /&gt;&lt;br /&gt;&lt;br /&gt;1,000円なのに、結構材質とか質感がしっかりしていて、いい感じ。&lt;br /&gt;&lt;br /&gt;あと、エッフェル塔に入ったラインストーンもキラキラして、ワンポイント効いてる。&lt;br /&gt;&lt;br /&gt;これもいい買い物だ！&lt;br /&gt;&lt;br /&gt;それはそうと、またパリ行きたいー&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B002P8XEK8" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_5646.html"&gt;タジンなべって知ってます？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_10.html"&gt;冷たくて美味しい水をいつでも！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_08.html"&gt;最近読んでいるマーケティング本&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5356270203600202529?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5356270203600202529/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5356270203600202529' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5356270203600202529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5356270203600202529'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post_12.html' title='おすすめブーツスタンド'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_w9gcOO4qfvo/S0tbR8Pa0GI/AAAAAAAAAP4/wSS1r9IRTxw/s72-c/100110_2256%7E001.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4895798031138306271</id><published>2010-01-10T17:56:00.022+09:00</published><updated>2010-01-23T20:26:14.831+09:00</updated><title type='text'>タジンなべって知ってます？</title><content type='html'>&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=B001J2YSDS" style="width:120px;height:240px;float:right;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;タジンなべって知っていますか？&lt;br /&gt;&lt;br /&gt;タジンなべというのは、こんな変わった形↓をしたなべ。今日渋谷のロフトで見かけて、衝動買いしてしまった。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nOa_V5FkI/AAAAAAAAAPU/pQZzZaohJow/s1600-h/100110_2020%7E001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nOa_V5FkI/AAAAAAAAAPU/pQZzZaohJow/s200/100110_2020%7E001.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;なんでこんな形をしているのかというと、もともとタジンなべは西アフリカのモロッコの伝統的な調理器具で、モロッコのような乾燥地帯では水がとても貴重だったりする。&lt;br /&gt;&lt;br /&gt;そんな貴重な水をできるだけ使わずにおいしい蒸し料理を作るにはどうしたらいいだろう？&lt;br /&gt;&lt;br /&gt;その解として、食材自体に含まれている水分をうまく対流させて効率良く蒸しあげられるように、こんな円錐形をしているんだそうな。&lt;br /&gt;&lt;br /&gt;さっそく、豚ともやしの蒸し物を作ってみた。&lt;br /&gt;&lt;br /&gt;▼蒸す前&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0nOpiakQeI/AAAAAAAAAPc/wcXlVDbYOUM/s1600-h/100110_2020%7E002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0nOpiakQeI/AAAAAAAAAPc/wcXlVDbYOUM/s200/100110_2020%7E002.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;▼できあがり&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0nPnPcayEI/AAAAAAAAAPs/y0BZ_TegfHk/s1600-h/100110_2032%7E001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0nPnPcayEI/AAAAAAAAAPs/y0BZ_TegfHk/s200/100110_2032%7E001.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;まぁタジンなべじゃなくても作れるけど、雰囲気も大事ということで、食事とあわせてモロッコ感もいただきました。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=B001J2YSEC" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_10.html"&gt;冷たくて美味しい水をいつでも！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_08.html"&gt;最近読んでいるマーケティング本&lt;/a&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4895798031138306271?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4895798031138306271/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4895798031138306271' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4895798031138306271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4895798031138306271'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post_5646.html' title='タジンなべって知ってます？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nOa_V5FkI/AAAAAAAAAPU/pQZzZaohJow/s72-c/100110_2020%7E001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6827675323438633095</id><published>2010-01-10T16:19:00.022+09:00</published><updated>2010-01-23T20:26:27.617+09:00</updated><title type='text'>冷たくて美味しい水をいつでも！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nLsd5fPOI/AAAAAAAAAPM/NBnLjZ6ZtMY/s1600-h/imgb7752f2fzikfzj.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nLsd5fPOI/AAAAAAAAAPM/NBnLjZ6ZtMY/s200/imgb7752f2fzikfzj.jpeg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;コンビニとかでペットボトル入りの水を買うのってちょっともったいない。&lt;br /&gt;&lt;br /&gt;水に150円払うのもなあというのもあるし、ペットボトルの資源を使ってしまうし。&lt;br /&gt;&lt;br /&gt;そこで、小さい水筒を買ってきた。250ml入りでカバンに入れても邪魔にならないサイズ。見た目もおしゃれで、触った時の質感もグッド！&lt;br /&gt;&lt;br /&gt;もともと家ではブリタの水を飲んでいて、これがまたすごく良くて水道水がほんとに美味しくなるんですが、これからはその水を水筒にいれて持って行くつもり。&lt;br /&gt;&lt;br /&gt;我ながらいい買い物をした！&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B002IT5VQE" style="float: left; height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B001DDZLCU" style=" height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_5646.html"&gt;タジンなべって知ってます？&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/butterfly.html"&gt;木村カエラ：Butterfly&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/cuda.html"&gt;CUDAの入門本&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/01/blog-post_08.html"&gt;最近読んでいるマーケティング本&lt;/a&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6827675323438633095?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6827675323438633095/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6827675323438633095' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6827675323438633095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6827675323438633095'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post_10.html' title='冷たくて美味しい水をいつでも！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S0nLsd5fPOI/AAAAAAAAAPM/NBnLjZ6ZtMY/s72-c/imgb7752f2fzikfzj.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2059022778874018146</id><published>2010-01-08T04:10:00.000+09:00</published><updated>2010-01-08T04:10:11.989+09:00</updated><title type='text'>木村カエラ：Butterfly</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0YxC7Q6gRI/AAAAAAAAAPE/mGx2jgnAIb0/s1600-h/butterfly.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/S0YxC7Q6gRI/AAAAAAAAAPE/mGx2jgnAIb0/s200/butterfly.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;去年いとこの結婚式でかかっていた曲で、この曲だれのだろうと思っていたのが、木村カエラのButterfly。&lt;br /&gt;&lt;br /&gt;紅白でたまたまみて、「あ、この曲だ！」と。&lt;br /&gt;&lt;br /&gt;結婚式の定番ソングらしくて、実際、Butterflyはカエラが友達の結婚式のために作ったんだって。&lt;br /&gt;&lt;br /&gt;すごくいい曲です。 &lt;br /&gt;iTunesでアクセスするにはこちら&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fbutterfly%252Fid317854189%253Fi%253D317854200%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="木村カエラ - Butterfly - Single - Butterfly" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt; &lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2059022778874018146?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2059022778874018146/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2059022778874018146' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2059022778874018146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2059022778874018146'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/butterfly.html' title='木村カエラ：Butterfly'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/S0YxC7Q6gRI/AAAAAAAAAPE/mGx2jgnAIb0/s72-c/butterfly.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6600480101403075888</id><published>2010-01-08T03:59:00.000+09:00</published><updated>2010-01-08T03:59:43.617+09:00</updated><title type='text'>CUDAの入門本</title><content type='html'>&lt;iframe frameborder="0" marginheight="0" marginwidth="10" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=4777514773" style="float: right; height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;本屋に行くと、CUDAの入門本が売ってました。&lt;br /&gt;&lt;br /&gt;「&lt;a href="http://www.amazon.co.jp/gp/product/4777514773?ie=UTF8&amp;amp;tag=kamonama-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=4777514773"&gt;はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす!&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=kamonama-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4777514773" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;」 &lt;br /&gt;&lt;br /&gt;GPGPUが論文で流行っていたのが５年くらい前だったので、それがだいぶ裾野まで広がってきたという感じですね。&lt;br /&gt;&lt;br /&gt;この本は、本当に入門向けで、「まずCUDAを使ってみましょう！」という内容に１冊まるまる使っています。書いた目的はNVIDIAのサンプルでは難しすぎるからとのこと。ターゲティングがはっきりしてますね。良い。&lt;br /&gt;&lt;br /&gt;粒子法のGPU実装やりたいなぁ。体が２つあったらいいのに。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6600480101403075888?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6600480101403075888/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6600480101403075888' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6600480101403075888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6600480101403075888'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/cuda.html' title='CUDAの入門本'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5922121438974600497</id><published>2010-01-08T03:46:00.001+09:00</published><updated>2010-01-09T19:13:45.440+09:00</updated><title type='text'>最近読んでいるマーケティング本</title><content type='html'>&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=490324119X" style="float: right; height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;最近集中的に読んでいる本があります。&lt;br /&gt;&lt;br /&gt;「&lt;a href="http://www.amazon.co.jp/gp/product/490324119X?ie=UTF8&amp;tag=kamonama-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=490324119X"&gt;マーケティング ビッグ・ピクチャー&lt;/a&gt;&lt;img src="http://www.assoc-amazon.jp/e/ir?t=kamonama-22&amp;l=as2&amp;o=9&amp;a=490324119X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;」という本で、MBAのテキストに使われるようなジャンルのもの。&lt;br /&gt;&lt;br /&gt;マーケティング戦略の立て方を、トップダウンで統合的にまとめてあります。&lt;br /&gt;&lt;br /&gt;本の目的として、最近のマーケティングのテキストは細分化されて相互の関係がわかりづらいという学生の声に応えて、実践につながるように書かれています。確かに、学者が書いた本にしては、比較的実践よりかと。&lt;br /&gt;&lt;br /&gt;興味があれば&lt;a href="http://www.amazon.co.jp/gp/product/490324119X?ie=UTF8&amp;amp;tag=kamonama-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=490324119X"&gt;どうぞ&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=kamonama-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=490324119X" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5922121438974600497?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5922121438974600497/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5922121438974600497' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5922121438974600497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5922121438974600497'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post_08.html' title='最近読んでいるマーケティング本'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3270064422875273293</id><published>2010-01-08T03:38:00.000+09:00</published><updated>2010-01-08T03:38:31.587+09:00</updated><title type='text'>近況</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0YqDmR5EaI/AAAAAAAAAO8/eX4CTFScq5I/s1600-h/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/S0YqDmR5EaI/AAAAAAAAAO8/eX4CTFScq5I/s320/images.jpeg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;最近、CG系のエントリをまったく書けていない。仕事が忙しくて。&lt;br /&gt;&lt;br /&gt;先月シーグラフアジアにいってきたので、それについてのエントリを何か書きたいと思いつつ、もう１月になってしまったよ。&lt;br /&gt;&lt;br /&gt;剛体シミュレーションのエントリは、実装が進まず、そのためエントリも書けず。&lt;br /&gt;&lt;br /&gt;あと、CG系の論文をまた読みたいなぁ。&lt;br /&gt;&lt;br /&gt;そうそう、アバターとカールじいさんの空飛ぶ家を、昨年末に観てきました。同じ日に２本。自分的映画Dayでした。&lt;br /&gt;&lt;br /&gt;俺も空飛ぶ家が欲しい。寝てる間に会社まで飛んで行ってくれるようなやつ。 &lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3270064422875273293?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3270064422875273293/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3270064422875273293' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3270064422875273293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3270064422875273293'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/blog-post.html' title='近況'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/S0YqDmR5EaI/AAAAAAAAAO8/eX4CTFScq5I/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2969637840475314271</id><published>2010-01-08T03:23:00.001+09:00</published><updated>2010-01-08T03:24:13.600+09:00</updated><title type='text'>このブログの月間PVが5,000を越えた！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_w9gcOO4qfvo/S0YmplcsbbI/AAAAAAAAAO0/rKt36_egFHE/s1600-h/tmp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_w9gcOO4qfvo/S0YmplcsbbI/AAAAAAAAAO0/rKt36_egFHE/s320/tmp.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;このブログの12月の月間PVは、5636でした。&lt;br /&gt;&lt;br /&gt;月間5,000PVを突破！&lt;br /&gt;&lt;br /&gt;どうも見て頂いてありがとうございます。&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2969637840475314271?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2969637840475314271/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2969637840475314271' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2969637840475314271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2969637840475314271'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2010/01/pv5000.html' title='このブログの月間PVが5,000を越えた！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_w9gcOO4qfvo/S0YmplcsbbI/AAAAAAAAAO0/rKt36_egFHE/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6525616391004996711</id><published>2009-12-27T22:55:00.003+09:00</published><updated>2009-12-27T22:58:15.798+09:00</updated><title type='text'>ベゾスの定義するアマゾンとは？</title><content type='html'>&lt;img src="http://lh4.ggpht.com/_w9gcOO4qfvo/SzdnPVQHgeI/AAAAAAAAAOo/uwzvzYP78Wo/amznlogo.png?imgmax=800" alt="amznlogo.png" border="0" width="182" height="52" align="right" /&gt;&lt;br /&gt;アマゾンの創業者ジェフ・ベゾスの定義するアマゾンとは？&lt;br /&gt;&lt;ol&gt;&lt;li&gt;顧客を最優先に考え、そこから逆算して何ができるかを考える。そのために必要な技能を取り入れ、必要な技術を開発する&lt;/li&gt;&lt;li&gt;私たちは、開拓者だ&lt;/li&gt;&lt;li&gt;長期的な視野に立つ努力を惜しまない&lt;/li&gt;&lt;/ol&gt;Newsweek日本語版12/30号より&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6525616391004996711?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6525616391004996711/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6525616391004996711' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6525616391004996711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6525616391004996711'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/blog-post_27.html' title='ベゾスの定義するアマゾンとは？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_w9gcOO4qfvo/SzdnPVQHgeI/AAAAAAAAAOo/uwzvzYP78Wo/s72-c/amznlogo.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8331494567832927268</id><published>2009-12-13T16:54:00.002+09:00</published><updated>2009-12-13T16:56:11.907+09:00</updated><title type='text'>キューピーが誕生100年？？</title><content type='html'>&lt;img align="right" alt="01.jpg" border="0" src="http://lh4.ggpht.com/_w9gcOO4qfvo/SySdRtiNQKI/AAAAAAAAAOM/WUmO6WARhZ4/01.jpg?imgmax=800" width="180" /&gt;&lt;br /&gt;松屋銀座でキューピー展をやってます。&lt;a href="http://www.matsuya.com/ginza/topics/091224e_kewpie/index.html"&gt;『誕生100年 ローズオニール キューピー展』&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;キューピー誕生から100年なんだって！そうなんだ。キューピーってマヨネーズだとばかり思ってた。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.matsuya.com/ginza/topics/091224e_kewpie/index.html"&gt;サイト&lt;/a&gt;にはクリスマスポストカードが載っていて、それがめちゃかわいい！&lt;br /&gt;&lt;br /&gt;以下は作者ローズ・オニールがKewpieに込めた想い。&lt;br /&gt;&lt;blockquote&gt;「Cupidは愛のいたずらをするけれど、&lt;br /&gt;　わたしのKewpieには愛だけを運んでほしい」&lt;br /&gt;　　　　　　　　　　　　ローズ・オニール&lt;br /&gt;&lt;/blockquote&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8331494567832927268?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8331494567832927268/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8331494567832927268' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8331494567832927268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8331494567832927268'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/100.html' title='キューピーが誕生100年？？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_w9gcOO4qfvo/SySdRtiNQKI/AAAAAAAAAOM/WUmO6WARhZ4/s72-c/01.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4116861170782802719</id><published>2009-12-13T14:04:00.004+09:00</published><updated>2009-12-13T14:07:07.809+09:00</updated><title type='text'>柴咲コウらしさって？</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/SyR2IZzykWI/AAAAAAAAAOA/lpNSjPPCnwg/s1600-h/51q7ZcX99JL._SL500_AA240_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/SyR2IZzykWI/AAAAAAAAAOA/lpNSjPPCnwg/s200/51q7ZcX99JL._SL500_AA240_.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;柴咲コウのLove Paranoiaを聞いて好きだなと思ったので、昔の柴咲コウも聞いてみようと思って、『Single Best』と『The Back Best』と『嬉々♥』を借りてきた。&lt;br /&gt;&lt;br /&gt;聞いて思ったのは、何か物足りないなと。&lt;br /&gt;&lt;br /&gt;個性が薄いっていうか、誰かに似てるような。歌声は一青窈？島谷ひとみ？に似てるし、ルックスも綺麗なんだけど、ただ綺麗、みたいな。&lt;br /&gt;&lt;br /&gt;それに比べて、ラブパラノイアでは、柴咲コウ独特のなにかを感じる。&lt;br /&gt;&lt;br /&gt;きっと、他の人にはなくて自分にあるものを見つけたんだろうな。&lt;br /&gt;自分も頑張ろう！&lt;br /&gt;&lt;br /&gt;&lt;img alt="51PnDXN4sqL._SL500_AA240_.jpg" border="0" height="120" src="http://lh3.ggpht.com/_w9gcOO4qfvo/SyRzUeY9XAI/AAAAAAAAANw/NQH_LryNEOU/51PnDXN4sqL._SL500_AA240_.jpg?imgmax=800" width="120" /&gt;&lt;br /&gt;『Love Paranoia』&lt;br /&gt;&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fid339278347%253Fi%253D339278593%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="柴咲コウ - Love Paranoia" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="51Uo49sUsdL._SL500_AA240_.jpg" border="0" height="120" src="http://lh6.ggpht.com/_w9gcOO4qfvo/SyRzxSjM0yI/AAAAAAAAAN0/lwZW_U76z34/51Uo49sUsdL._SL500_AA240_.jpg?imgmax=800" width="120" /&gt;&lt;br /&gt;『Single Best』&lt;br /&gt;&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fid275058305%253Fi%253D275058348%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="柴咲コウ - Single Best" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="61X2lHVbonL._SL500_AA240_.jpg" border="0" height="120" src="http://lh6.ggpht.com/_w9gcOO4qfvo/SyR0Q73qg7I/AAAAAAAAAN4/TS4Ljeb7WFQ/61X2lHVbonL._SL500_AA240_.jpg?imgmax=800" width="120" /&gt;&lt;br /&gt;『The Back Best』&lt;br /&gt;&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fgraybee%252Fid275058337%253Fi%253D275058454%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="柴咲コウ - The Back Best" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="51q7ZcX99JL._SL500_AA240_.jpg" border="0" height="120" src="http://lh3.ggpht.com/_w9gcOO4qfvo/SyR0e00HqTI/AAAAAAAAAN8/siOLGRQ3A3s/51q7ZcX99JL._SL500_AA240_.jpg?imgmax=800" width="120" /&gt;&lt;br /&gt;『嬉々♥』&lt;br /&gt;&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fid251821861%253Fi%253D251821864%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="柴咲コウ - 嬉々♥" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;→ジャケットが超かわいい！&lt;br /&gt;&lt;br /&gt;■関連エントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/blog-post.html"&gt;柴咲コウのライブチケットがとれた！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/love-paranoia.html"&gt;Love Paranoia：柴咲コウ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;■最近のエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/ipod.html"&gt;iPodで音楽を聞くときに欲しいもの&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/kneipp.html"&gt;クナイプ(KNEIPP)のバスソルトは香りがしっかり！&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/orion-girl-next-door.html"&gt;Orion: GIRL NEXT DOOR&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/blog-post_06.html"&gt;剛体シミュレーションの動画を更新しました&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/12/uniqlo-lucky-switch-var-lswblogoriginid.html"&gt;UNIQLO LUCKY SWITCH&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4116861170782802719?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4116861170782802719/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4116861170782802719' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4116861170782802719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4116861170782802719'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/blog-post_13.html' title='柴咲コウらしさって？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/SyR2IZzykWI/AAAAAAAAAOA/lpNSjPPCnwg/s72-c/51q7ZcX99JL._SL500_AA240_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4239932534250004811</id><published>2009-12-09T01:33:00.003+09:00</published><updated>2009-12-09T01:44:42.482+09:00</updated><title type='text'>iPodで音楽を聞くときに欲しいもの</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/Sx6B_3uIaDI/AAAAAAAAANk/Ws9804-L5NU/s1600-h/318VxfIMdOL._SS400_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/Sx6B_3uIaDI/AAAAAAAAANk/Ws9804-L5NU/s200/318VxfIMdOL._SS400_.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;普段iPodで音楽を聞くとき、イヤフォンならシュアのものを使っているんですが、スピーカーで聞くときは安いスピーカーしかなくて音質がすごく不満。&lt;br /&gt;&lt;br /&gt;そんなのがあって欲しいものがあるんですが、それは何かというと、&lt;br /&gt;&lt;br /&gt;iPod用のBOSEです。&lt;br /&gt;&lt;br /&gt;BOSEなら音が良さそうだし、レビューも好評価。&lt;br /&gt;思い切って買ってしまおう！&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://www.amazon.co.jp/gp/product/B001IO6R4U?ie=UTF8&amp;amp;tag=kamonama-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=B001IO6R4U"&gt;Amazon: BOSE サウンドドック シリーズII デジタルミュージックシステム&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=kamonama-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=B001IO6R4U" style="border: medium none ! important; margin: 0px ! important;" width="1" /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4239932534250004811?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4239932534250004811/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4239932534250004811' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4239932534250004811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4239932534250004811'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/ipod.html' title='iPodで音楽を聞くときに欲しいもの'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/Sx6B_3uIaDI/AAAAAAAAANk/Ws9804-L5NU/s72-c/318VxfIMdOL._SS400_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-901076883695575116</id><published>2009-12-08T01:31:00.005+09:00</published><updated>2009-12-08T22:48:37.647+09:00</updated><title type='text'>クナイプ(KNEIPP)のバスソルトは香りがしっかり！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://search.kenko.com/product/クナイプ%E3%80%80ラベンダー" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/Sx0ukv3asxI/AAAAAAAAANY/roVuUWcyT9M/s640/E010950H_M2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://search.kenko.com/product/クナイプ%E3%80%80ラベンダー"&gt;クナイプ(KNEIPP)のバスソルト&lt;/a&gt;にはまってます。&lt;br /&gt;&lt;br /&gt;どこがいいかというと？&lt;br /&gt;&lt;br /&gt;香りがしっかりしていて、すごくリラックスできるのです。このしっかり感はさすがドイツ製。&lt;br /&gt;&lt;br /&gt;渋谷のランキンランキンでラベンダーを買ってみたらすごく良かったので、他の香りも試そうと思っています！&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.kenko.com/product/クナイプ%E3%80%80ラベンダー"&gt;クナイプ(KNEIPP)　バスソルト　ラベンダーの香り&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-901076883695575116?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/901076883695575116/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=901076883695575116' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/901076883695575116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/901076883695575116'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/kneipp.html' title='クナイプ(KNEIPP)のバスソルトは香りがしっかり！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/Sx0ukv3asxI/AAAAAAAAANY/roVuUWcyT9M/s72-c/E010950H_M2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6049183663197259973</id><published>2009-12-07T01:46:00.003+09:00</published><updated>2009-12-07T01:48:49.688+09:00</updated><title type='text'>Orion: GIRL NEXT DOOR</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/SxvgK4goBrI/AAAAAAAAANI/mTPOp6vrSmM/s1600-h/tmp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/SxvgK4goBrI/AAAAAAAAANI/mTPOp6vrSmM/s200/tmp.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;ガルネク、冬の切な系ソング。&lt;br /&gt;&lt;br /&gt;真冬に輝くオリオン見上げて♪&lt;br /&gt;&lt;br /&gt;のメロディーが大好き。&lt;br /&gt;&lt;br /&gt;iTunesからアクセスするにはこちら&lt;br /&gt;&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Forion%252Fid339690464%253Fi%253D339690653%2526uo%253D6%2526partnerId%253D30" target="itunes_store"&gt;&lt;img alt="GIRL NEXT DOOR - Orion - EP - Orion" height="15" src="http://ax.phobos.apple.com.edgesuite.net/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6049183663197259973?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6049183663197259973/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6049183663197259973' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6049183663197259973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6049183663197259973'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/orion-girl-next-door.html' title='Orion: GIRL NEXT DOOR'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/SxvgK4goBrI/AAAAAAAAANI/mTPOp6vrSmM/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4517900694025168873</id><published>2009-12-06T00:23:00.001+09:00</published><updated>2009-12-06T00:24:06.982+09:00</updated><title type='text'>剛体シミュレーションの動画を更新しました</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sxp61ecr7KI/AAAAAAAAANA/ZuS1yS3yq0U/s1600-h/default.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sxp61ecr7KI/AAAAAAAAANA/ZuS1yS3yq0U/s200/default.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;このエントリ&lt;/a&gt;に載せている剛体シミュレーションの動画を更新しました。&lt;br /&gt;&lt;br /&gt;ちょっと長さが短すぎたので。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;よければどうぞ。&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4517900694025168873?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4517900694025168873/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4517900694025168873' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4517900694025168873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4517900694025168873'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/blog-post_06.html' title='剛体シミュレーションの動画を更新しました'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/Sxp61ecr7KI/AAAAAAAAANA/ZuS1yS3yq0U/s72-c/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3643988307022607312</id><published>2009-12-05T23:24:00.000+09:00</published><updated>2009-12-05T23:24:55.435+09:00</updated><title type='text'>柴咲コウのライブチケットがとれた！</title><content type='html'>&lt;iframe align="right" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B002OIH7LQ" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;まえの&lt;a href="http://kamonama.blogspot.com/2009/11/love-paranoia.html"&gt;エントリ&lt;/a&gt;で書いた、柴咲コウのライブチケットがとれた！&lt;br /&gt;&lt;br /&gt;来年４月！いまから楽しみ。&lt;br /&gt;&lt;br /&gt;まえのエントリは&lt;a href="http://kamonama.blogspot.com/2009/11/love-paranoia.html"&gt;こちら&lt;/a&gt;。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3643988307022607312?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3643988307022607312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3643988307022607312' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3643988307022607312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3643988307022607312'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/blog-post.html' title='柴咲コウのライブチケットがとれた！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2662471513583995679</id><published>2009-12-02T12:23:00.005+09:00</published><updated>2009-12-02T13:09:31.403+09:00</updated><title type='text'>UNIQLO LUCKY SWITCH</title><content type='html'>&lt;br/&gt;下↓↓のラッキースイッチを押してみてください。&lt;br /&gt;&lt;br /&gt;何が起きるかというと…&lt;br /&gt;&lt;br /&gt;なんと、このブログの中の画像がオンラインくじに変わります！&lt;br /&gt;&lt;br /&gt;めくってアタリがでれば、オリジナルバッグがもらえます！&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;var lswBlogOriginId = "0d320989460384d79b668f91bc1dbd72"&lt;/script&gt;&lt;script type="text/javascript" charset="utf-8" src="http://www.uniqlo.com/fr60/switch/js/lsw_container_blogparts.js"&gt;&lt;/script&gt;&lt;br /&gt;おもしろい!&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2662471513583995679?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2662471513583995679/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2662471513583995679' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2662471513583995679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2662471513583995679'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/12/uniqlo-lucky-switch-var-lswblogoriginid.html' title='UNIQLO LUCKY SWITCH'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1831426146515889743</id><published>2009-11-30T04:22:00.004+09:00</published><updated>2009-12-06T00:14:14.473+09:00</updated><title type='text'>粒子ベース剛体シミュレーション（プレビュー）</title><content type='html'>SPH法による粒子法流体シミュレーションに続き、粒子ベースの剛体シミュレーションを書いています。&lt;br /&gt;&lt;br /&gt;少しずつ進めているのですが、いまの時点できているものを少しだけ載せてみます。&lt;br /&gt;&lt;br /&gt;【回転するキューブ】&lt;br /&gt;&lt;object width="320" height="265"&gt;&lt;param name="movie" value="http://www.youtube.com/v/iiY_v8cRACQ&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/iiY_v8cRACQ&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;【並進衝突するキューブ】&lt;br /&gt;&lt;object width="320" height="265"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4iOg8RWlgwE&amp;hl=ja_JP&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4iOg8RWlgwE&amp;hl=ja_JP&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;粒子ベース剛体シミュレーションについても、流体シミュレーションと同様に説明エントリを書きたいと思っています！&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1831426146515889743?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1831426146515889743/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1831426146515889743' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1831426146515889743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1831426146515889743'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_3442.html' title='粒子ベース剛体シミュレーション（プレビュー）'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8647928210087194742</id><published>2009-11-30T02:02:00.003+09:00</published><updated>2009-11-30T02:06:15.770+09:00</updated><title type='text'>「粒子法」で検索すると１ページめにこのブログが！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/SxKp09BqHtI/AAAAAAAAAMg/vxYg-PTIt4U/s1600/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/SxKp09BqHtI/AAAAAAAAAMg/vxYg-PTIt4U/s400/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;いつのまにか、Googleで「粒子法」を検索するとこのブログが１ページめに出てくるようになってました！&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=%E7%B2%92%E5%AD%90%E6%B3%95"&gt;Googleで「粒子法」を検索&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;いろんな人に見てもらっているからですね。ありがたいことだー&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8647928210087194742?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8647928210087194742/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8647928210087194742' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8647928210087194742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8647928210087194742'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_30.html' title='「粒子法」で検索すると１ページめにこのブログが！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/SxKp09BqHtI/AAAAAAAAAMg/vxYg-PTIt4U/s72-c/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5786171896936986548</id><published>2009-11-29T00:56:00.009+09:00</published><updated>2009-12-06T02:55:45.190+09:00</updated><title type='text'>シーグラフアジアに行きたい！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/SxFIRG2q0BI/AAAAAAAAAMY/up7NwVqhEwM/s1600/tmp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="46" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/SxFIRG2q0BI/AAAAAAAAAMY/up7NwVqhEwM/s200/tmp.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;12月に横浜で&lt;a href="http://bit.ly/8vM45W"&gt;シーグラフアジア&lt;/a&gt;が開かれるので、19日の土曜日に行ってこようと思ってます。&lt;br /&gt;&lt;br /&gt;シーグラフアジアは、コンピュータグラフィクスとインタラクティブ技術を中心とした国際カンファレンス＆エキシビジョンで、CGの国際学会シーグラフのアジア版です。&lt;br /&gt;&lt;br /&gt;エキシビジョンは1,000円でみれるので、そっちメインで楽しんできます！&lt;br /&gt;&lt;br /&gt;■このブログのCG系エントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そのほか、エレクトロニックシアターというのもあって、世界中からエントリされた優れたCG作品をみることができる２時間のショーです。こちらは2,500円と少し高いのでどうしようかなぁ？？&lt;br /&gt;&lt;br /&gt;あと、FF13のメイキングセッションもあって見てみたいんだけど、16日の平日なので見れない。残念。。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5786171896936986548?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5786171896936986548/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5786171896936986548' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5786171896936986548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5786171896936986548'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_29.html' title='シーグラフアジアに行きたい！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/SxFIRG2q0BI/AAAAAAAAAMY/up7NwVqhEwM/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-755794319907370399</id><published>2009-11-28T02:20:00.002+09:00</published><updated>2009-11-28T02:22:22.464+09:00</updated><title type='text'>bitly経由のクリックがGoogle Analyticsにあがらないのはなぜ？</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://bit.ly/static/images/bitly_logo_top.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="33" src="http://bit.ly/static/images/bitly_logo_top.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Twitterにbitlyで短縮したリンクを貼って、そのリンク経由のアクセスをGoogle Analyticsで見てみようとしました。&lt;br /&gt;&lt;br /&gt;ところが、bitlyには６クリックと出ているのに、AnalyticsにはTwitterやbitlyからの流入が１件もあがりません。&lt;br /&gt;&lt;br /&gt;なぜだろう？&lt;br /&gt;&lt;br /&gt;まずbitly経由のアクセスの場合のリファラがtwitterになるのかbitlyになるのかを調べてみると、リファラはhttp://bit.lyでした。なので、もしAnalyticsにあがるとすれば、bit.lyからの流入のはずです。しかし、bit.lyからのアクセスは１件もあがっていません。&lt;br /&gt;&lt;br /&gt;もしかすると、TwitterからのアクセスはTwitterをクロールするbotからのもので、それをAnalyticsが除外しているのだろうか？&lt;br /&gt;&lt;br /&gt;あるいは、TwitterクライアントについているURL Expanderによって短縮前のリンクだけが取得されており、それを同様にAnalyticsが除外しているのだろうか？&lt;br /&gt;&lt;br /&gt;だれか、ご存知の方、教えてください！&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-755794319907370399?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/755794319907370399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=755794319907370399' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/755794319907370399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/755794319907370399'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/bitlygoogle-analytics.html' title='bitly経由のクリックがGoogle Analyticsにあがらないのはなぜ？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4622013371935857056</id><published>2009-11-23T02:17:00.003+09:00</published><updated>2009-11-23T02:24:50.641+09:00</updated><title type='text'>お砂糖エステが流行るよ！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/Swlzsp_KDoI/AAAAAAAAAMQ/WUfofRJDSeQ/s1600/Unled.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/Swlzsp_KDoI/AAAAAAAAAMQ/WUfofRJDSeQ/s200/Unled.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;先日髪をカットしたときに、新しく始めたんですよと「お砂糖エステ」を薦められました。&lt;br /&gt;&lt;br /&gt;エステ用の特別な砂糖をつかってマッサージしてもらったんですが、ほんとに肌がスベスベに！&lt;br /&gt;&lt;br /&gt;で、つい昨日渋谷を歩いていると試供品を渡されて、それが同じくお砂糖エステでした。もらった試供品を使うと、まえと同じように即効でスベスベ！&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.abyssal.jp/sucre/index.html"&gt;シュクレ（SUCRE）&lt;/a&gt;という北海道産の新商品らしくて、渋谷のランキンランキンで売ってます。&lt;br /&gt;&lt;br /&gt;香りもいろいろあるみたいで、シトラスとかバニラとか、北海道ならではのラベンダーも。&lt;br /&gt;&lt;br /&gt;ぜったい流行るよ、これ！&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4622013371935857056?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4622013371935857056/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4622013371935857056' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4622013371935857056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4622013371935857056'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_23.html' title='お砂糖エステが流行るよ！'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/Swlzsp_KDoI/AAAAAAAAAMQ/WUfofRJDSeQ/s72-c/Unled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7802306953874847135</id><published>2009-11-22T03:24:00.018+09:00</published><updated>2009-11-23T02:52:20.558+09:00</updated><title type='text'>Love Paranoia：柴咲コウ</title><content type='html'>&lt;iframe align="right" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=B002OIH7LQ" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;柴咲コウのニューアルバム「Love Paranoia」&lt;br /&gt;&lt;br /&gt;ジャケットの柴咲コウが可愛すぎる！&lt;br /&gt;完全にジャケ買いしてしまった。&lt;br /&gt;&lt;br /&gt;初回盤には、来春行われるライブツアーの優先抽選権がついていたので、さっそく申し込みました。あたるかなー？&lt;br /&gt;&lt;br /&gt;iTunesからアクセスするにはこちら&lt;a href="http://click.linksynergy.com/fs-bin/stat?id=8P1EMya0pxk&amp;amp;offerid=94348&amp;amp;type=3&amp;amp;subid=0&amp;amp;tmpid=2192&amp;amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252Fjp%252Falbum%252Fid339278347%253Fi%253D339278593%2526uo%253D6%2526partnerId%253D30"&gt;&lt;img alt="柴咲コウ - Love Paranoia" height="15" src="http://ax.itunes.apple.com/images/badgeitunes61x15dark.gif" width="61" /&gt;&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7802306953874847135?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7802306953874847135/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7802306953874847135' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7802306953874847135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7802306953874847135'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/love-paranoia.html' title='Love Paranoia：柴咲コウ'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8587680037496016059</id><published>2009-11-22T02:05:00.005+09:00</published><updated>2009-11-22T02:15:57.878+09:00</updated><title type='text'>コンピュータ将棋のいま</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://t0.gstatic.com/images?q=tbn:sDvwjiD8xd-klM:http://img.b.hatena.ne.jp/entryimage/1015344-1241638245.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://t0.gstatic.com/images?q=tbn:sDvwjiD8xd-klM:http://img.b.hatena.ne.jp/entryimage/1015344-1241638245.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;今日、東大駒場祭に行って、コンピュータ将棋の展示を見てきました。&lt;br /&gt;&lt;br /&gt;展示されていたのはGPS将棋というソフトウェアで、東京大学大学院総合文化研究科の教員・学生が開催しているゲームプログラミングセミナー（Game Programming Seminar = GPS）のメンバーが中心になって開発しているものです。&lt;br /&gt;&lt;br /&gt;プロ棋士の棋符を学習させたり手の評価を改善することで、ここ数年で将棋プログラムはかなり強くなっており、プロ４段相当といわしめるレベルまできているそうです。&lt;br /&gt;&lt;br /&gt;将棋の他はどうなんですかと聞いたところ、チェスではカスパロフがディープブルーに負けてから熱気が下がってしまったとのこと。一方で囲碁はいま熱いそうで、モンテカルロ法を使ったアプローチによってここ１〜２年で急激に強くなっているそうです。&lt;br /&gt;&lt;br /&gt;また、どうぶつ将棋についての展示も併設してあり、そちらは全局面での勝敗がすでに解析し終わっているそうなのですが、それを逆に活かして「絶対人間に勝たない」プログラムを組んで、将棋の普及に協力していました。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=kamonama-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;md=1X69VDGQCMF7Z30FM082&amp;amp;asins=4120040283" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=kamonama-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1X69VDGQCMF7Z30FM082&amp;asins=4047101079" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8587680037496016059?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8587680037496016059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8587680037496016059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8587680037496016059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8587680037496016059'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_22.html' title='コンピュータ将棋のいま'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4821991753805845212</id><published>2009-11-14T18:48:00.001+09:00</published><updated>2009-11-20T00:10:28.853+09:00</updated><title type='text'>AdsenseとAmazonアフィリエイトを置いてみました</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sv58yreqOKI/AAAAAAAAAMI/42j3dxsM7vc/s1600-h/ab.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sv58yreqOKI/AAAAAAAAAMI/42j3dxsM7vc/s200/ab.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;実験的にAdsenseとAmazonアフィリエイトを置いてみました。&lt;br /&gt;&lt;br /&gt;目的は、どのくらいクリックされるのかと、その傾向をみるためです。&lt;br /&gt;&lt;br /&gt;(2009.11.20追記　Adsenseの審査がおりなかった…)&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4821991753805845212?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4821991753805845212/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4821991753805845212' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4821991753805845212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4821991753805845212'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/adsenseamazon.html' title='AdsenseとAmazonアフィリエイトを置いてみました'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/Sv58yreqOKI/AAAAAAAAAMI/42j3dxsM7vc/s72-c/ab.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-9102936175009090059</id><published>2009-11-08T00:11:00.005+09:00</published><updated>2009-11-08T00:18:19.778+09:00</updated><title type='text'>このあとやりたいこと</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWOXaZsGUI/AAAAAAAAALY/TRdgak_dlIQ/s1600-h/nebula.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWOXaZsGUI/AAAAAAAAALY/TRdgak_dlIQ/s200/nebula.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;このエントリでは、ここまでやってきたことを一度振り返ってみて、それからこの後やっていきたいことを書き綴ってみます。&lt;br /&gt;&lt;h4&gt;ここまでやってきたこと&lt;/h4&gt;&lt;br /&gt;ここまで、粒子法、中でもSPH法を使って、流体のシミュレーションとその可視化をやってきました。&lt;br /&gt;&lt;br /&gt;まず２次元でダムブレイクのシミュレーションをして、それをマーチングキューブを使って陰関数曲面を抽出しPovrayを使ってレダリングしました。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そのあと、３次元に拡張して、同様にダムブレイクのシミュレーションをし、可視化しました。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;３次元のダムブレイクについては、いくつかパラメータを変えてみたりしてどのように動きが変わるかを調べてみました。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;また、論文を参照して、プログラム中の式の意味を深掘ってみたりもしています。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/08/p-k-0-0.html"&gt;p = k ( ρ - ρ0 )でのρ0の意味&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ダムブレイクのあとは、もっと他のシーンもレンダリングしてみたいと思い、巻き波のシミュレーションをしてみました。巻き波によっておきるしぶきは、粒子法の得意とするところです。論文を参考にしたりして、ムービーを作りました。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;SPHによる巻き波のシミュレーション第１回&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;SPH法のコードを、関数型言語のHaskellやOCamlでも実装してみました。&lt;br /&gt;→&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;Haskell、OCamlでSPH法&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;このあとやっていきたいこと&amp;nbsp;&lt;/h4&gt;&lt;br /&gt;このあとやりたいと思っていることはいろいろあります。&lt;br /&gt;&lt;br /&gt;いまやろうとしているのは、粒子ベースの剛体シミュレーションです。たとえばたくさんのトーラスが落下するようなシーンを、年内くらいに実装できるよう進めています。それができたら、固液連成シミュレーションでいろいろなシーンを作りたいと思っています。&lt;br /&gt;&lt;br /&gt;その他、&lt;br /&gt;・弾性体シミュレーション&lt;br /&gt;・気液連成シミュレーション&lt;br /&gt;・SPH法の高速化&lt;br /&gt;・PointSplattingなどの可視化方法&lt;br /&gt;・Lattice Boltzmann Methodによる流体シミュレーション&lt;br /&gt;・炎や煙のシミュレーション&lt;br /&gt;・美しいシーン&lt;br /&gt;・人工生命&lt;br /&gt;のようなことを、やりたいこととして思っています。&lt;br /&gt;&lt;br /&gt;何よりも、手法をいろいろ持っているだけでなく、その手法を使って綺麗なシーンをいっぱい描いていきたい。たとば、&lt;a href="https://graphics.stanford.edu/wikis/cs348b-09/"&gt;https://graphics.stanford.edu/wikis/cs348b-09/&lt;/a&gt;のような感じです。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-9102936175009090059?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/9102936175009090059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=9102936175009090059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9102936175009090059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9102936175009090059'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post_08.html' title='このあとやりたいこと'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWOXaZsGUI/AAAAAAAAALY/TRdgak_dlIQ/s72-c/nebula.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-9071539343586607870</id><published>2009-11-07T23:19:00.005+09:00</published><updated>2009-11-07T23:25:13.627+09:00</updated><title type='text'>Haskellのプログラムを高速化するための７つの方法</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWDA5eSvuI/AAAAAAAAALQ/jfpUE5jBDiA/s1600-h/061219_01.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWDA5eSvuI/AAAAAAAAALQ/jfpUE5jBDiA/s200/061219_01.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;以前のエントリでHaskellのプログラムが遅いというのが不満だったので、Haskell-cafeにメールして聞いてみました。&lt;br /&gt;&lt;br /&gt;いくつか高速化するためのテクニックを教えてもらったので、まとめてみます。&lt;br /&gt;&lt;h4&gt;-O2オプション&lt;/h4&gt;&lt;br /&gt;ghcでコンパイルするときに-Oを付けると最適化してコンパイルされますが、それを-O2オプションに変えるとさらに最適化されます。&lt;br /&gt;&lt;h4&gt;-fexcess-precision&lt;/h4&gt;&lt;br /&gt;ghcでコンパイルするときに、-fexcess-precisionオプションを付けてnumber-crunchingをすると、処理が速くなります。&lt;br /&gt;★number-crunchingって何だろう？&lt;br /&gt;&lt;h4&gt;-fvia-C,-optc-O3&lt;/h4&gt;&lt;br /&gt;これらのオプションを付けると、HaskellのコードをいったんCに変換し、それを-O3オプション付きでコンパイルします。２回コンパイルするのでコンパイルにかかる時間は増えますが、さらなる高速化を期待できます。&lt;br /&gt;&lt;br /&gt;-fvia-Cと-optc-O3を付けることで、約10%高速化できるようです。&lt;br /&gt;&lt;h4&gt;UNPACKプラグマと正格フラグ&lt;/h4&gt;&lt;br /&gt;データ構造の要素にUNPACKプラグマと正格フラグ(!)を付けることで、計算の高速化を期待できます。&lt;br /&gt;&lt;br /&gt;たとえば、Particleの定義を、&lt;br /&gt;&lt;pre&gt;data Particle = Particle { pos, vel :: {-# UNPACK #-} !Vector3,&lt;br /&gt;mass, rho, prs :: {-# UNPACK #-} !Scalar }&lt;/pre&gt;のようにします。&lt;br /&gt;&lt;br /&gt;-fexcess-precisionオプションとUNPACKプラグマ、正格フラグを使うことで、約30%高速化できるようです。&lt;br /&gt;&lt;br /&gt;★!フラグを付けることで正格評価されるという理解でいいのかな？&lt;br /&gt;★UNPACKプラグマを付けるとどうなるんだろう？非ボックス化というやつ？抽象化せず直で要素を扱うのかな？&lt;br /&gt;&lt;h4&gt;ByteString&lt;/h4&gt;&lt;br /&gt;HaskellのStringは処理が遅いらしいので、代わりにByteStringを使うことで高速化を望めます。&lt;br /&gt;&lt;h4&gt;コンパイルオプションの最適化&lt;/h4&gt;&lt;br /&gt;Haskellに限ったテクニックではありませんが、Acoveaのようなコンパイルオプション最適化ツールを使うことで、コンパイルオプションを最適化して高速化できます。Acoveaは遺伝的アルゴリズムでコンパイルオプションを最適化するようです。&lt;br /&gt;&lt;h4&gt;DPH&lt;/h4&gt;&lt;br /&gt;DPHを使うことでも高速化できるようです。&lt;br /&gt;★DPHってなんだろう？&lt;br /&gt;&lt;br /&gt;参考になれば。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-9071539343586607870?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/9071539343586607870/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=9071539343586607870' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9071539343586607870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/9071539343586607870'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/haskell_07.html' title='Haskellのプログラムを高速化するための７つの方法'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/SvWDA5eSvuI/AAAAAAAAALQ/jfpUE5jBDiA/s72-c/061219_01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6889014427066033832</id><published>2009-11-04T22:56:00.008+09:00</published><updated>2009-11-04T23:12:29.712+09:00</updated><title type='text'>遅延ストリームによってシミュレーションと出力処理を分離</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s1600-h/result00000075.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s200/result00000075.png" width="120" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;このエントリ&lt;/a&gt;で紹介したHaskellのコードでは、遅延ストリームという手法を使っています。&lt;br /&gt;&lt;br /&gt;このエントリでは、遅延ストリームとそれを使うメリットについて書きます。&lt;h4&gt;遅延ストリームとは？&lt;/h4&gt;&lt;br /&gt;遅延ストリームとは、遅延評価される無限リストです。&lt;br /&gt;&lt;br /&gt;使っているのは、&lt;br /&gt;&lt;pre&gt;output $ take (read (n!!0)) $ simulation ps0&lt;/pre&gt;の部分です。&lt;br /&gt;&lt;br /&gt;simulation関数の型は&lt;br /&gt;&lt;pre&gt;[Particles]-&amp;gt;[[Particles]]&lt;/pre&gt;となっていて、粒子の初期状態を引数にとり、各ステップでの粒子の状態をリストで返します。&lt;br /&gt;&lt;br /&gt;そのリストから、コマンドライン引数で与えたステップ数だけtake関数でとりだし、output関数（アクション）でファイルに出力しています。&lt;br /&gt;&lt;br /&gt;このように書くと、取り出すステップ数だけ先に計算して、すべて計算し終わってからまとめて出力されることになりそうですが、Haskellの場合は遅延評価されるので、１ステップずつ評価されてファイルに出力されるのです。&lt;br /&gt;&lt;h4&gt;遅延ストリームを使うメリットは？&lt;/h4&gt;&lt;br /&gt;このように遅延ストリームを使うメリットは、関数のモジュール性を高めて、シミュレーションと出力を完全に分離できることです。&lt;br /&gt;&lt;br /&gt;simulation関数とoutput関数はまったく独立していて、たとえば、output関数のみをdisplay関数に差し替えて画面に出力する、ということができます。&lt;br /&gt;&lt;pre&gt;display $ simulation ps0&lt;/pre&gt;&lt;br /&gt;逆に、この処理を遅延評価でない言語、たとえばC++で書くと、&lt;br /&gt;&lt;pre&gt;for ( int i = 0 ; i &amp;lt; n; i++ )&lt;br /&gt;  {&lt;br /&gt;    output_particles( p_ps, i );&lt;br /&gt;    simulation( p_ps );&lt;br /&gt;  }&lt;/pre&gt;のように、forループの中にシミュレーションと出力を書くことになり、お互いが強く結びついてしまいます。遅延ストリームをなら、このように強く結びつくことを避けられます。&lt;br /&gt;&lt;br /&gt;以上のように、遅延ストリームを使うと、関数のモジュール性を高めることができるのです。  &lt;br /&gt;&lt;h4&gt;OCamlで遅延ストリームは使える？&lt;/h4&gt;&lt;br /&gt;OCamlも言語に遅延評価の仕組みが含まれているので、同様に遅延ストリームを使うことができます。&lt;br /&gt;&lt;br /&gt;OCamlでの遅延ストリームは、&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;このエントリ&lt;/a&gt;にあるコードから抜粋すると、 &lt;br /&gt;&lt;pre&gt;open Lazy;;&lt;br /&gt;&lt;br /&gt;type 'a stream = Nils&lt;br /&gt;               | Cons of 'a * 'a stream lazy_t;;&lt;br /&gt;&lt;br /&gt;let rec stream_take (n : int) (s : 'a stream) : 'a stream =&lt;br /&gt;  match (n,s) with&lt;br /&gt;  | (_,Nils)       -&amp;gt; Nils&lt;br /&gt;  | (0,Cons(x,_ )) -&amp;gt; Nils&lt;br /&gt;  | (n,Cons(x,xs)) -&amp;gt; Cons(x, lazy(stream_take (n-1) (force xs)));;&lt;br /&gt;&lt;br /&gt;let rec simulation ps = &lt;br /&gt;  let ps'  = calc_amount ps (mk_neighbor_map ps) in&lt;br /&gt;  let ps'' = advance ps' (mk_neighbor_map ps')&lt;br /&gt;  in Cons(ps, lazy(simulation ps''));;&lt;br /&gt;&lt;br /&gt;let main =&lt;br /&gt;  let n = int_of_string (Sys.argv.(1))&lt;br /&gt;  in print_number_of ps0;&lt;br /&gt;     stream_output (stream_take n (simulation ps0));;&lt;br /&gt;&lt;/pre&gt;のように書くことができます。&lt;br /&gt;&lt;br /&gt;'a stream型のcarを'a型、cdrを'a stream lazy_t型とし、cdrを順番にforceしていくことで遅延ストリームを実現しています。&lt;br /&gt;&lt;br /&gt;Haskell版と同様に、粒子の状態を１ステップずつ評価してファイルに出力します。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;C++では？&lt;/h4&gt;&lt;br /&gt;C++では言語に遅延評価の仕組みがありません。なので、遅延ストリームをそのまま使うことはできません。&lt;br /&gt;&lt;br /&gt;ただ、シミュレーションと出力の分離という意味では、関数オブジェクトを使うことで、同等のことは一応可能です。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6889014427066033832?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6889014427066033832/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6889014427066033832' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6889014427066033832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6889014427066033832'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/blog-post.html' title='遅延ストリームによってシミュレーションと出力処理を分離'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s72-c/result00000075.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7044797325930112888</id><published>2009-11-04T01:42:00.008+09:00</published><updated>2009-11-05T23:04:12.371+09:00</updated><title type='text'>Haskellのコードを速くするにはどうしたらいいんだろう？</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s1600-h/result00000075.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s200/result00000075.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/haskellocamlsph.html"&gt;前のエントリ&lt;/a&gt;でSPHのコードをC++とHaskellとOCamlで書いて比較したんだけど、あまりにHaskell版が遅いなぁ。&lt;br /&gt;&lt;br /&gt;C++に対して約15倍も時間がかかってしまう。プロファイラを使ってチューニングしてもこの速度差。せめてC++の３倍くらいで済んで欲しい。&lt;br /&gt;&lt;br /&gt;2009/11/5追記：計りなおすと、Haskell版はC++版の約５倍ですんでました。。&lt;br /&gt;&lt;br /&gt;どうしたらもっと速くなるんだろう？&lt;br /&gt;&lt;br /&gt;正格評価したらいいの？どうやるの？Data.Vectorモジュールには!フラグが付いているんだけど、それじゃだめなの？&lt;br /&gt;&lt;br /&gt;ステップの更新を非破壊的にやっているから遅い？けどOCamlはそれでもC++の２倍で済んでるのに。&lt;br /&gt;&lt;br /&gt;純粋な科学技術計算だから、どのみちすべての式を計算する必要があるし、その部分では遅延評価のメリットはないよなぁ。だから遅いのかなぁ？けど、ただ計算するだけだから遅延評価も正格評価も関係ないようにも思うんだけど。（遅延評価の方がメモリは使いそうな気がする）&lt;br /&gt;&lt;br /&gt;やりたいこととしては、&lt;br /&gt;&lt;blockquote&gt;思考をそのまま落とせるHaskellでプロトタイプを作る→速度の速いC++で書き直す&lt;/blockquote&gt;というフローを組みたいんだけど、それにしても遅すぎる。せめてC++の３倍くらいで済んで欲しいなぁ。あと、Haskellの書きやすさを損なうような方法はとりたくない。（けど、レンダリングの時間も含めて考えたら、シミュレーションは速くても遅くても関係ない、というケースはあるなぁ）&lt;br /&gt;&lt;br /&gt;速くするにはどうしたらいいんだろう？何を調べたらいいんだろう？&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7044797325930112888?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7044797325930112888/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7044797325930112888' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7044797325930112888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7044797325930112888'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/haskell.html' title='Haskellのコードを速くするにはどうしたらいいんだろう？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s72-c/result00000075.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-3343459280100423404</id><published>2009-11-02T14:52:00.008+09:00</published><updated>2010-11-22T23:30:44.364+09:00</updated><title type='text'>【Emacs】行ジャンプするには</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/Su50FOQbKNI/AAAAAAAAALI/QnFfhElec6s/s1600-h/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/Su50FOQbKNI/AAAAAAAAALI/QnFfhElec6s/s200/images.jpeg" width="90" /&gt;&lt;/a&gt;&lt;br /&gt;Emacsで行ジャンプするには、&lt;br /&gt;&lt;pre&gt;M-x goto-line 行番号&lt;/pre&gt;とする。&lt;br /&gt;&lt;br /&gt;よく使う機能なので、.emacsに&lt;br /&gt;&lt;pre&gt;(global-set-key "\C-x\C-g" 'goto-line)&lt;/pre&gt;と書いておくと\C-x \C-gで行ジャンプできるのですごく便利。&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-3343459280100423404?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/3343459280100423404/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=3343459280100423404' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3343459280100423404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/3343459280100423404'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/emacs.html' title='【Emacs】行ジャンプするには'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/Su50FOQbKNI/AAAAAAAAALI/QnFfhElec6s/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-477898758878699884</id><published>2009-11-01T17:22:00.018+09:00</published><updated>2011-11-29T00:39:51.376+09:00</updated><title type='text'>Haskell、OCamlでSPH法</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s1600-h/result00000075.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s200/result00000075.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;この&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;エントリ&lt;/a&gt;に載せていたC++のコードを、HaskellとOCamlで書いてみました。（あと、C++のコードも整理しました）&lt;br /&gt;&lt;br /&gt;コードを置いておきます。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Haskell版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/haskell/sph.hs"&gt;sph.hs&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;OCaml版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/ocaml/sph.ml"&gt;sph.ml&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;C++版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/cpp/sph.cpp"&gt;sph.cpp&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;Haskell版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/haskell/sph.hs"&gt;sph.hs&lt;/a&gt;)の実行方法は、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ ghc --make -O sph.hs&lt;br /&gt;$ ./sph 300&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;です。./sphの引数は計算するステップ数です。上記のsph.zipにはData/Vector.hsというベクトル演算のためのモジュールを入れてあります。&lt;br /&gt;&lt;br /&gt;同様に、OCaml版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/ocaml/sph.ml"&gt;sph.ml&lt;/a&gt;)の実行方法は、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ ocamlopt -pp 'camlp4o -parser Camlp4ListComprehension' -o sph sph.ml&lt;br /&gt;$ ./sph 300&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;です。-ppオプションは、プリプロセッサにCamlp4を使ってOCamlでリスト内包表記を使えるようにするためのものです。&lt;br /&gt;&lt;br /&gt;もう１つC++版(&lt;a href="https://github.com/takagi/blog-codes/blob/master/20091101/cpp/sph.cpp"&gt;sph.cpp&lt;/a&gt;)の実行方法は、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ g++ -O2 -o sph sph.cpp&lt;br /&gt;$ ./sph 300&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;です。以前はboostを使ってみていたのですが、boostを用意する手間やコンパイルの遅さを考えるとあまり意味がないので、使わないようにしました。（あと、このコードを書く前にSTLの総称プログラミングのスタイルでも書いてみたのですが、かえってわかりづらくなったのでやめました）&lt;br /&gt;&lt;br /&gt;この３つの実行時間ですが、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;▼C++&lt;br /&gt;$ time ./sph 30&lt;br /&gt;real    0m6.367s&lt;br /&gt;user    0m4.916s&lt;br /&gt;sys     0m0.157s&lt;br /&gt;&lt;br /&gt;▼OCaml&lt;br /&gt;$ time ./sph 30&lt;br /&gt;real    0m11.718s&lt;br /&gt;user    0m9.461s&lt;br /&gt;sys     0m0.241s&lt;br /&gt;→ cppの約２倍&lt;br /&gt;&lt;br /&gt;▼Haskell&lt;br /&gt;$ time ./sph 30&lt;br /&gt;real    1m23.961s&lt;br /&gt;user    1m2.786s&lt;br /&gt;sys     0m2.169s&lt;br /&gt;→ cppの約15倍&lt;br /&gt;&lt;br /&gt;On PowerBook G4 1.5GHz (Mac OSX 10.4.11)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;のようになりました。&lt;br /&gt;&lt;br /&gt;OCamlがC++の約２倍、HaskellがC++の約15倍です。&lt;br /&gt;&lt;br /&gt;Haskellがあまりに遅いのでOCamlで書いてみたというのがあるのですが、それにしても遅い。ここまで遅いものなのだろうか？&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2009/11/5追記：計りなおすと、Haskell版はC++版の約５倍ですんでました…&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;それに対して、OCamlは本当に速いですね。いまのコード(sph.ml)は粒子を非破壊的に更新しているのですが、それでもC++の約2倍で実行できています。&lt;br /&gt;&lt;br /&gt;次は、Haskell版とOCaml版で使っている遅延ストリームについて書きます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■流体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_24.html"&gt;粒子法のシーンを２倍のサイズにしてみた&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション２&lt;/a&gt;&lt;br /&gt;Haskell、OCamlでSPH法&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_08.html"&gt;このあとやりたいこと&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post.html"&gt;カメラ位置を変えて流体をレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/07/blog-post_31.html"&gt;固液連成シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;■剛体シミュレーションに関するエントリ&lt;/b&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/11/blog-post_3442.html"&gt;粒子ベース剛体シミュレーション（プレビュー）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_15.html"&gt;粒子ベース多体衝突シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2010/04/blog-post_18.html"&gt;引き続き、粒子ベース剛体シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法(SPH)のプログラム&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s1600/sph2.png" /&gt;粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/sph.html"&gt;粒子法(SPH)のプログラム一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;動画&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-JTwKlgn_pyw/TqpPFx79pUI/AAAAAAAAAWQ/wCe19TGHiCo/s200/movies2.png" /&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post.html"&gt;動画の一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-477898758878699884?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/477898758878699884/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=477898758878699884' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/477898758878699884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/477898758878699884'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/11/haskellocamlsph.html' title='Haskell、OCamlでSPH法'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_w9gcOO4qfvo/Su1SC_fDkBI/AAAAAAAAALA/ohHoieVtXz8/s72-c/result00000075.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7262136825085059545</id><published>2009-10-05T00:17:00.002+09:00</published><updated>2009-10-05T00:26:21.855+09:00</updated><title type='text'>ただ、君を愛してる</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_w9gcOO4qfvo/Ssi8J8k5tlI/AAAAAAAAAKg/UJ2EVUvajBk/s1600-h/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_w9gcOO4qfvo/Ssi8J8k5tlI/AAAAAAAAAKg/UJ2EVUvajBk/s200/images.jpeg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;宮崎あおいつながりで、友達から薦められて「ただ、君を愛してる」をみた。&lt;br /&gt;&lt;br /&gt;あー、もう泣きそう。胸が締めつけられる。&lt;br /&gt;&lt;br /&gt;死とひきかえに誠人に愛される女性になろうとする、静流が健気すぎる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7262136825085059545?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7262136825085059545/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7262136825085059545' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7262136825085059545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7262136825085059545'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/10/blog-post.html' title='ただ、君を愛してる'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_w9gcOO4qfvo/Ssi8J8k5tlI/AAAAAAAAAKg/UJ2EVUvajBk/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-2259583871471880828</id><published>2009-09-30T01:27:00.003+09:00</published><updated>2009-09-30T21:36:06.555+09:00</updated><title type='text'>SPHによる巻き波のシミュレーション第３回</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s1600-h/tmp.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5382081991366880178" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s200/tmp.png" style="cursor: pointer; float: right; height: 99px; margin: 0pt 0pt 10px 10px; width: 150px;" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;前回のエントリ&lt;/a&gt;で、巻き波のシミュレーションができた。今回は、それを綺麗にレンダリングしてみる。&lt;br /&gt;&lt;br /&gt;まず、粒子でレンダリングしたものがこれ。 &lt;br /&gt;&lt;br /&gt;&lt;object height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QCH61kcsP2I&amp;amp;hl=ja&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QCH61kcsP2I&amp;amp;hl=ja&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="266"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これを、マーチングキューブで陰関数曲面を抽出してレンダリングするとこうなる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="260"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kpqLVp4qxa0&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/kpqLVp4qxa0&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="260"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さらに、屈折や反射を考慮してレンダリングしたものがこれ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="260"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bisVSJ58Owk&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bisVSJ58Owk&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="260"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;いい感じ！次は何をしようかな？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■関連するエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;SPHによる巻き波のシミュレーション第１回&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション第２回&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-2259583871471880828?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/2259583871471880828/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=2259583871471880828' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2259583871471880828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/2259583871471880828'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/09/sph_30.html' title='SPHによる巻き波のシミュレーション第３回'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s72-c/tmp.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-354438632654702388</id><published>2009-09-27T17:49:00.014+09:00</published><updated>2009-09-30T21:36:57.260+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='粒子法'/><title type='text'>SPHによる巻き波のシミュレーション第２回</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s1600-h/tmp.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5382081991366880178" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s200/tmp.png" style="cursor: pointer; float: right; height: 99px; margin: 0pt 0pt 10px 10px; width: 150px;" /&gt;&lt;/a&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;前回のエントリ&lt;/a&gt;では、可動壁によって波を起こすことで巻き波のシミュレーションをしようとしたが、うまく巻き波が起きなかった。&lt;br /&gt;&lt;br /&gt;そこで、巻き波を起こすにはどうしたらいいのかいろいろと調べてみたところ、RadovitzkyとOritzの"Lagrangian finite element analytics of newtonian fluid flows."という論文を見つけた。&lt;br /&gt;&lt;br /&gt;この論文は、有限要素法によってラグランジュ的に自由表面をシミュレーションする手法を提示している。その適用例の１つとして砕波を扱っており、そこに孤立波の理論解が示されていた。これを適用すれば波の岸に打ち寄せる波を再現することができそう。&lt;br /&gt;&lt;br /&gt;孤立波の初期条件は、水面の高さをη、x方向の初速をu、y方向の初速をvとすると、&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sr8lECyf8MI/AAAAAAAAAKA/r8C54ywu06Y/s1600-h/fig1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/Sr8lECyf8MI/AAAAAAAAAKA/r8C54ywu06Y/s320/fig1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;のようになる（x方向のオフセットを省略）。ここで、gは重力加速度で9.8[m/s^2]、Hとdはそれぞれ基準となる水面の高さと波の高さである。&lt;br /&gt;&lt;br /&gt;また、tanhとsechは双曲線関数で、その定義は&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/Sr8qsiIAavI/AAAAAAAAAKY/gqQdxCboyN4/s1600-h/fig2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/Sr8qsiIAavI/AAAAAAAAAKY/gqQdxCboyN4/s200/fig2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;である。&lt;br /&gt;&lt;br /&gt;この初期条件を適用して、またシミュレーションしてみると、&lt;br /&gt;&lt;br /&gt;&lt;object height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QCH61kcsP2I&amp;hl=ja&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QCH61kcsP2I&amp;hl=ja&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="266"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;お！巻き波が起きた！&lt;br /&gt;&lt;br /&gt;シミュレーション結果を見ると、左から進んできた孤立波が、斜面にさしかかったところでせり上がって、巻き波になってくずれる様子が見てとれる。また、巻き波が打ち寄せたあとにさーっと引いていく様子も、実際の砂浜とよく似ている。&lt;br /&gt;&lt;br /&gt;いい感じに巻き波が起きるようになったので、次は、&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;このエントリ&lt;/a&gt;のように綺麗にレンダリングしてみます。&lt;br /&gt;&lt;br /&gt;■関連するエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/blog-post.html"&gt;SPHによる巻き波のシミュレーション第１回&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;SPHによる巻き波のシミュレーション第３回&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-354438632654702388?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/354438632654702388/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=354438632654702388' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/354438632654702388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/354438632654702388'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/09/sph.html' title='SPHによる巻き波のシミュレーション第２回'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s72-c/tmp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-5171927527268345917</id><published>2009-09-16T23:53:00.015+09:00</published><updated>2009-11-01T18:22:14.584+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='粒子法'/><title type='text'>SPHによる巻き波のシミュレーション第１回</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s1600-h/tmp.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5382081991366880178" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s200/tmp.png" style="cursor: pointer; float: right; height: 99px; margin: 0pt 0pt 10px 10px; width: 150px;" /&gt;&lt;/a&gt;&lt;br /&gt;波の一種に巻き波というものがある。浅海域に進入した波が対称性を失って、前面が切り立った壁のようになり、頂部の水が前に飛び出す形で巻くように砕けるものをいう。&lt;br /&gt;&lt;br /&gt;粒子法では、しぶきがあがるような激しい変形を表現することができる。そこで、巻き波をシミュレーションしたいと思った。&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lao3S4vt9_E&amp;amp;hl=ja&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/lao3S4vt9_E&amp;amp;hl=ja&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="266" width="320"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;左側の境界条件を周期的に動かすことで波を起こしている。また、真ん中から右は斜面になっている。&lt;br /&gt;&lt;br /&gt;ところが、結果をみてみるとうまくいかない…&lt;br /&gt;&lt;br /&gt;波が減衰して斜面まで届かないのと、斜面の底部分で不自然に左向きの流れが起きているのが気になる。&lt;br /&gt;&lt;br /&gt;波が減衰してしまう点については、容器の形や可動壁の動きを調整しようと思う。&lt;br /&gt;&lt;br /&gt;斜面の底部分で不自然な流れが起きている点については、理由がよくわからない…境界条件にはペナルティ法を使っているが、そのせいで斜面方向に変に力がかかっているんだろうか？&lt;br /&gt;&lt;br /&gt;もうすこし調整が必要そうだ。&lt;br /&gt;&lt;br /&gt;■関連するエントリ&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph.html"&gt;SPHによる巻き波のシミュレーション第２回&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/09/sph_30.html"&gt;SPHによる巻き波のシミュレーション第３回&lt;/a&gt;&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-5171927527268345917?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/5171927527268345917/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=5171927527268345917' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5171927527268345917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/5171927527268345917'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/09/blog-post.html' title='SPHによる巻き波のシミュレーション第１回'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/SrD_Dj9zK7I/AAAAAAAAAJ4/vVPlXBgazGg/s72-c/tmp.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-7704754217964453913</id><published>2009-08-29T22:43:00.019+09:00</published><updated>2010-07-21T00:52:37.017+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='粒子法'/><title type='text'>【論文】p = k ( ρ - ρ0 )でのρ0の意味</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_w9gcOO4qfvo/Spk9ijOzSDI/AAAAAAAAAJw/Tal-9aqK7nE/s1600-h/a.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 100px;" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/Spk9ijOzSDI/AAAAAAAAAJw/Tal-9aqK7nE/s200/a.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5375395294025566258" /&gt;&lt;/a&gt;&lt;br /&gt;Mullerらの"Particle-Based Fluid Simulation for Interactive Applications"では、圧力pを密度ρから求める際に、定常密度ρ0を引いて&lt;blockquote&gt;p = k(ρ - ρ0)&lt;/blockquote&gt;としている（kは定数）。ρ0を引く理由としてMullerらは、&lt;blockquote&gt;... Since pressure forces depend on the gradient of the pressure field, the offset mathematically has not effect on pressure forces. However, the offset does influence the gradient of a field smoothed by SPH and makes the simulation numerically more stable. ...&lt;/blockquote&gt;と述べている。&lt;br /&gt;&lt;br /&gt;なんのこっちゃ？&lt;br /&gt;&lt;br /&gt;オフセット（ρ0）が数学的に圧力に影響を与えないといいつつ、それによってシミュレーションがより安定化するといっている。しかし、数学的に影響を与えないのであれば、安定化するもなにもないではないか。&lt;br /&gt;&lt;br /&gt;そこで、引用元である、Desbrunの"Smoothed Particels: A new paradigm for animating highly deformable bodies"の中で、なぜρ0が導入されているのかを見てみた。&lt;br /&gt;&lt;br /&gt;Desbrunらによると、&lt;blockquote&gt;... In astrophysics applications, pressure forces were often combined with gravitational forces balancing the expansion phenomenon.&lt;br /&gt;&amp;nbsp;&amp;nbsp;In contrast, we would like to animate materials with constant density at rest. Consequently, the material sould exhibit some internal cohesion, resulting in attraction-repulsino forces as in the Lennard-Jones model. ...&lt;/blockquote&gt;とある。&lt;br /&gt;&lt;br /&gt;なるほど。&lt;br /&gt;&lt;br /&gt;もともとSPHは天体のシミュレーションで用いられていた手法なので、真空中での粒子の運動を対象としている。一方で、Desbrunらが行おうとしている大変形体のシミュレーションは、大気中での運動が対象となる。&lt;br /&gt;&lt;br /&gt;大気中での運動なので、本来であれば、大変形体の周りに空気があって、その気圧と大変形体の圧力が釣り合っていないといけない。&lt;br /&gt;&lt;br /&gt;それを論文でどう扱っているかというと、周りの空気も粒子としてシミュレーションに含めるのではなく、その代わりに、ρからρ0を引いて気圧の影響を補正した圧力を用いるという方法をとっている。つまり、定常状態での圧力を仮想的に0気圧となるようにオフセットをとって計算している。&lt;br /&gt;&lt;br /&gt;つまり、定常状態での圧力を仮想的に0気圧とすることで、気圧と大変形体の圧力を釣り合わせているということになる。&lt;br /&gt;&lt;br /&gt;実際に、ρ0を変えてシミュレーションをしてみた。&lt;br /&gt;&lt;br /&gt;【ρ0=600】&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-1bb057d5378cd507" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v7.nonxt7.googlevideo.com/videoplayback?id%3D1bb057d5378cd507%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D59B21394A0D01CFC1064CA04F22E7F11F7258E40.80DD5F792B05A5D759F70D8CBCF8DC09EEEE0AD2%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D1bb057d5378cd507%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dpxhx39FNKTc673EemNQEeLaabMw&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v7.nonxt7.googlevideo.com/videoplayback?id%3D1bb057d5378cd507%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D59B21394A0D01CFC1064CA04F22E7F11F7258E40.80DD5F792B05A5D759F70D8CBCF8DC09EEEE0AD2%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D1bb057d5378cd507%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dpxhx39FNKTc673EemNQEeLaabMw&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;【ρ0=300】&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-399aa74832045943" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v21.nonxt6.googlevideo.com/videoplayback?id%3D399aa74832045943%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2792B7740F547CD7974091EB44D36431596E2845.6DBCBF729F52539CD7E1392D270E4CCAD5D6B135%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D399aa74832045943%26offsetms%3D5000%26itag%3Dw160%26sigh%3DYP_GRHWNL3_pNJZEgbIEyKf8Sn4&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v21.nonxt6.googlevideo.com/videoplayback?id%3D399aa74832045943%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2792B7740F547CD7974091EB44D36431596E2845.6DBCBF729F52539CD7E1392D270E4CCAD5D6B135%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D399aa74832045943%26offsetms%3D5000%26itag%3Dw160%26sigh%3DYP_GRHWNL3_pNJZEgbIEyKf8Sn4&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;【ρ0=0】&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-7a53af427f8828d5" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt8.googlevideo.com/videoplayback?id%3D7a53af427f8828d5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D84F47A5E8E8A45552F1085999B1F9D5E6BD541BE.4C57A8207A7B6815A88CCA4FC38054AFCB54C505%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D7a53af427f8828d5%26offsetms%3D5000%26itag%3Dw160%26sigh%3De5EnzlRIdRfXNppu7eE3HoUmOBs&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt8.googlevideo.com/videoplayback?id%3D7a53af427f8828d5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331440245%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D84F47A5E8E8A45552F1085999B1F9D5E6BD541BE.4C57A8207A7B6815A88CCA4FC38054AFCB54C505%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D7a53af427f8828d5%26offsetms%3D5000%26itag%3Dw160%26sigh%3De5EnzlRIdRfXNppu7eE3HoUmOBs&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;確かに、ρ0が小さくなるにつれて、粒子が空気中に広がっていっている様子がわかる。ρ0=0に至っては、まさに真空中に拡散しているように見える結果が得られた。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;結論&lt;/span&gt;&lt;br /&gt;圧力pを密度ρから求める際に定常密度ρ0を引いてp = k (ρ - ρ0)とするのは、気圧の影響を加味して粒子が拡散してしまわないようにするためだった。SPHを宇宙から地球上に持ってくるわけですな。&lt;br /&gt;&lt;br /&gt;■関連する記事&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_23.html"&gt;粒子法のプログラム第１回（概要）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/02/blog-post_28.html"&gt;粒子法のプログラム第２回（プログラムの大枠）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/04/blog-post.html"&gt;粒子法のプログラム第３回（データ構造）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_23.html"&gt;粒子法のプログラム第４回（密度と圧力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post_30.html"&gt;粒子法のプログラム第５回（力の計算）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/06/blog-post_20.html"&gt;粒子法のプログラム第６回（境界条件と粒子位置の更新）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/07/blog-post.html"&gt;粒子法のプログラム最終回（粒子の出力）&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/05/blog-post.html"&gt;【粒子法】粒子を流体としてレンダリング&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/sph.html"&gt;３次元の粒子法シミュレーション&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-7704754217964453913?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=1bb057d5378cd507&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=399aa74832045943&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=7a53af427f8828d5&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/7704754217964453913/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=7704754217964453913' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7704754217964453913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/7704754217964453913'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/p-k-0-0.html' title='【論文】p = k ( ρ - ρ0 )でのρ0の意味'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/Spk9ijOzSDI/AAAAAAAAAJw/Tal-9aqK7nE/s72-c/a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-4016274195823146202</id><published>2009-08-28T17:51:00.004+09:00</published><updated>2009-08-29T22:37:31.297+09:00</updated><title type='text'>ClickTaleの無料利用分を使い切ってしまった</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_w9gcOO4qfvo/Speac83P6eI/AAAAAAAAAJo/htDGlSg6ywk/s1600-h/%21L%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="39" alt="無題" src="http://lh6.ggpht.com/_w9gcOO4qfvo/SpeadW2pidI/AAAAAAAAAJs/9HwZhVtDatk/%21L_thumb%5B1%5D.png?imgmax=800" width="178" align="right" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;おととい入れてみたClickTale。&lt;br /&gt;&lt;br /&gt;２日で1週間分のレコーディング数を使い切ってしまった&amp;#8230;。これじゃ使えないなぁ。&lt;/p&gt;  &lt;p&gt;１人１人のユーザの動きを追える素晴らしいツールなんだけど、月$99は払えないや。&lt;/p&gt;  &lt;p&gt;自分で作ろうか？？&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-4016274195823146202?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/4016274195823146202/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=4016274195823146202' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4016274195823146202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/4016274195823146202'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/clicktale.html' title='ClickTaleの無料利用分を使い切ってしまった'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_w9gcOO4qfvo/SpeadW2pidI/AAAAAAAAAJs/9HwZhVtDatk/s72-c/%21L_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-8675050986218175061</id><published>2009-08-27T09:15:00.002+09:00</published><updated>2009-08-27T09:22:31.214+09:00</updated><title type='text'>ClickTaleの再生がAnalyticsに計測されてしまわないか？</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_w9gcOO4qfvo/SpXRQmAkD9I/AAAAAAAAAJg/jwKHYASfacE/s1600-h/%21L%5B3%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="39" alt="無題" src="http://lh3.ggpht.com/_w9gcOO4qfvo/SpXRRJ31RNI/AAAAAAAAAJk/e388NgEd3ag/%21L_thumb%5B1%5D.png?imgmax=800" width="178" align="right" border="0" /&gt;&lt;/a&gt;    &lt;br /&gt;このブログにClickTaleを入れてみた。&lt;/p&gt;  &lt;p&gt;ClickTaleはユーザのマウスの動きをレコーディングしてくれるアクセス解析ツールで、レコーディングされたマウスの動きを再生できる。&lt;/p&gt;  &lt;p&gt;再生機能で１つ気になったのが、再生したときのページ読み込みが解析対象ページに埋まっているGoogle Analyticsで計測されてしまわないかという点。&lt;/p&gt;  &lt;p&gt;Analyticsで確認してみると、ClickTaleからのアクセスは計測されないみたいでよかった。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-8675050986218175061?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/8675050986218175061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=8675050986218175061' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8675050986218175061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/8675050986218175061'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/clicktaleanalytics.html' title='ClickTaleの再生がAnalyticsに計測されてしまわないか？'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_w9gcOO4qfvo/SpXRRJ31RNI/AAAAAAAAAJk/e388NgEd3ag/s72-c/%21L_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-6537513495958263338</id><published>2009-08-25T22:35:00.004+09:00</published><updated>2009-08-25T23:02:26.920+09:00</updated><title type='text'>OneApp</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_w9gcOO4qfvo/SpPupzngGRI/AAAAAAAAAJU/qqr2q6ldhIY/s1600-h/a.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 150px; height: 66px;" src="http://1.bp.blogspot.com/_w9gcOO4qfvo/SpPupzngGRI/AAAAAAAAAJU/qqr2q6ldhIY/s200/a.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5373901182381070610" /&gt;&lt;/a&gt;&lt;br /&gt;MicrosoftがOneAppという携帯電話向けのアプリケーションフレームワークを発表した。&lt;br /&gt;&lt;br /&gt;OneAppは、途上国の人々がTwitterやFacebookのようなサービスに携帯電話からアクセスできるようにするサービスで、プロセッサが非力でメモリが少なくてもJavaが動きさえすれば使うことができる。&lt;br /&gt;&lt;br /&gt;大型Webアプリケーションを動かすために必要な処理の一部をMicrosoftのサーバがクラウドとして代行する仕組みで、デベロッパはJavaScriptとXMLによる比較的簡単な作業でアプリをOneAppに対応させることができる。&lt;br /&gt;&lt;br /&gt;Microsoftが途上国向けにサービスを提供する理由には、人道的理由もあるが、途上国が潜在的に巨大な市場であるというビジネス上のものもあるだろう。&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-6537513495958263338?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/6537513495958263338/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=6537513495958263338' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6537513495958263338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/6537513495958263338'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/oneapp.html' title='OneApp'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_w9gcOO4qfvo/SpPupzngGRI/AAAAAAAAAJU/qqr2q6ldhIY/s72-c/a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-1219079462261066305</id><published>2009-08-25T00:37:00.006+09:00</published><updated>2009-08-25T00:45:16.003+09:00</updated><title type='text'>iTunesでムービーのサムネイルを変えるには</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_w9gcOO4qfvo/SpK0gb9O3vI/AAAAAAAAAJM/t1bajj95mNI/s1600-h/images.jpeg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 64px; height: 64px;" src="http://4.bp.blogspot.com/_w9gcOO4qfvo/SpK0gb9O3vI/AAAAAAAAAJM/t1bajj95mNI/s200/images.jpeg" alt="" id="BLOGGER_PHOTO_ID_5373555774759821042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;iTunesのムービーのサムネイルは好きなタイムラインのものに変えることができる。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;▼変え方&lt;ol&gt;&lt;li&gt;サムネイルにしたいタイミングでムービーを停止する&lt;/li&gt;&lt;li&gt;ムービーを右クリック&lt;/li&gt;&lt;li&gt;「ポスターフレームを設定」を選ぶ&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;br /&gt;これで好きなカットをサムネイルにできる♪&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-1219079462261066305?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/1219079462261066305/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=1219079462261066305' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1219079462261066305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/1219079462261066305'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/itunes.html' title='iTunesでムービーのサムネイルを変えるには'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_w9gcOO4qfvo/SpK0gb9O3vI/AAAAAAAAAJM/t1bajj95mNI/s72-c/images.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22952785.post-611627757306511068</id><published>2009-08-24T23:42:00.009+09:00</published><updated>2011-10-28T16:04:24.852+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='粒子法'/><title type='text'>粒子法のシーンを２倍のサイズにしてみた</title><content type='html'>&lt;br/&gt;「&lt;a href="http://kamonama.blogspot.com/2009/08/blog-post_23.html"&gt;粒子法のシーンを２倍のサイズにしてみたが…&lt;/a&gt;」で失敗したものをもう一度計算した。&lt;br /&gt;&lt;br /&gt;【２倍のサイズ】&lt;br /&gt;&lt;object width="320" height="240"&gt;&lt;param name="movie" value="http://www.youtube.com/v/K2g1lmyuizM&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/K2g1lmyuizM&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;【元のサイズ】&lt;br /&gt;&lt;object width="320" height="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zD_5ohCa7Bo&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zD_5ohCa7Bo&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;初期配置や境界の形はまったく同じにして、xyz各方向に２倍している。一見同じように見えるけど、床のチェック模様の細かさが違うところに注目して欲しい。&lt;br /&gt;&lt;br /&gt;２倍サイズにすると、より高いところからさらに多くの流体が落下するため、盛大なしぶきがあがった。上のレンダリング結果だと黒くなってしまってわかりづらいが、陰関数曲面をそのままレンダリングするとその様子がよくわかる。&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="240"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bhOMYkHS6FM&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bhOMYkHS6FM&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;粒子法(SPH)のプログラム&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s1600/sph2.png" /&gt;粒子法(SPH)のプログラムを解説したシリーズです。ソースコードも公開しています。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/sph.html"&gt;粒子法(SPH)のプログラム一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;動画&lt;/h5&gt;&lt;div&gt;&lt;img border="0" height="100" width="100" style="clear:right; float:left; margin-bottom:1em; margin-right:1em" src="http://1.bp.blogspot.com/-JTwKlgn_pyw/TqpPFx79pUI/AAAAAAAAAWQ/wCe19TGHiCo/s200/movies2.png" /&gt;シミュレーションの結果をレンダリングして作った動画です。流体シミュレーションや剛体シミュレーションの動画を見ることができます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kamonama.blogspot.com/2011/10/blog-post.html"&gt;動画の一覧&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22952785-611627757306511068?l=kamonama.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kamonama.blogspot.com/feeds/611627757306511068/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22952785&amp;postID=611627757306511068' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/611627757306511068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22952785/posts/default/611627757306511068'/><link rel='alternate' type='text/html' href='http://kamonama.blogspot.com/2009/08/blog-post_24.html' title='粒子法のシーンを２倍のサイズにしてみた'/><author><name>kamonama</name><uri>http://www.blogger.com/profile/09722880387694789232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_w9gcOO4qfvo/SvWvm8Q5i5I/AAAAAAAAALo/LvZyHk91uhY/S220/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-hBxjoWemO18/TqpOHe2SflI/AAAAAAAAAWE/wjCHp33jSyI/s72-c/sph2.png' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
