<?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-6492658450252069268</id><updated>2012-02-17T06:26:25.910+09:00</updated><title type='text'>SimpleModeler開発日記</title><subtitle type='html'>SimpleModelerの開発を綴る日記。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-2660013908101104973</id><published>2009-07-29T18:15:00.002+09:00</published><updated>2009-07-29T18:20:19.454+09:00</updated><title type='text'>SimpleModeler 0.1.9</title><content type='html'>&lt;div&gt;SimpleModeler 0.1.9を先日公開しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/simplemodeler/downloads/list"&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google App Engine Javaコード生成の精度を上げています。&lt;/div&gt;&lt;div&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/6492658450252069268-2660013908101104973?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/2660013908101104973/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=2660013908101104973' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2660013908101104973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2660013908101104973'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/07/simplemodeler-019.html' title='SimpleModeler 0.1.9'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4373080522344169313</id><published>2009-06-27T07:16:00.004+09:00</published><updated>2009-06-27T08:35:24.967+09:00</updated><title type='text'>関連の格納方法</title><content type='html'>オブジェクト間の関連の格納方法について考えている。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4HtJQwbXqEY/SkVJdJSZNtI/AAAAAAAAADE/bbrdx_7-SeQ/s1600-h/Overview.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 149px; height: 320px;" src="http://1.bp.blogspot.com/_4HtJQwbXqEY/SkVJdJSZNtI/AAAAAAAAADE/bbrdx_7-SeQ/s320/Overview.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5351764497257805522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&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;ul&gt; &lt;li&gt;DataStoreデータ型で格納する。それ以外のデータ型はString、Textなどにエンコーディング。Javaプログラム上の表現とJDO格納表現がずれるで注意。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;オブジェクト間に関連については関連、集約、合成、部品で処理方法を調整&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;属性(attribute)&lt;/li&gt;&lt;ul&gt;   &lt;li&gt;document(またはvalue)をエンティティの属性とする&lt;/li&gt;   &lt;li&gt;エンティティのカラムに(必要に応じてテキスト、XMLエンコーディングして)格納&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;関連(association)&lt;/li&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;li&gt;集約(aggregation)&lt;/li&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;li&gt;合成(composition)&lt;/li&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;li&gt;部品(part)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;部品エンティティはエンティティIDを持たない&lt;/li&gt;  &lt;li&gt;エンティティのステレオタイプとしてpartを用意(DSLでは定義済み)&lt;/li&gt;&lt;li&gt;partは、全体エンティティの部品として使用するオブジェクト&lt;/li&gt;&lt;li&gt;検索対象から外すことによって、全体エンティティのカラムにXMLエンコーディングして格納&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-4373080522344169313?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4373080522344169313/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4373080522344169313' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4373080522344169313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4373080522344169313'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/06/blog-post.html' title='関連の格納方法'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4HtJQwbXqEY/SkVJdJSZNtI/AAAAAAAAADE/bbrdx_7-SeQ/s72-c/Overview.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4593313757953889447</id><published>2009-06-25T10:15:00.003+09:00</published><updated>2009-06-25T10:17:31.721+09:00</updated><title type='text'>SimpleModeler 0.1.8</title><content type='html'>SimpleModelerは、地道にバージョンアップしていて0.1.7と0.1.8をリリース。&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/simplemodeler/&lt;br /&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;br /&gt;&lt;br /&gt;現在はGoogle App Engine/Java向けにデータ型まわりを実装中。&lt;br /&gt;&lt;br /&gt;以下つぶやき。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Entityの部品をEntityの一部として扱いたい。&lt;/div&gt;&lt;br /&gt;Entityの部品をJavaオブジェクトをシリアライズして格納すると持続性に問題がある。&lt;br /&gt;&lt;br /&gt;Domain Model - Java - JDO(GAEJ)のギャップを地道に埋めていく。&lt;br /&gt;&lt;br /&gt;JDOの基本データ型。これ以外のデータ型も使えないことはないが、できれば使わない方がよい。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;java.lang.String&lt;/li&gt;&lt;li&gt;com.google.appengine.api.datastore.ShortBlob&lt;/li&gt;&lt;li&gt;boolean&lt;/li&gt;&lt;li&gt;java.lang.Boolean&lt;/li&gt;&lt;li&gt;short&lt;/li&gt;&lt;li&gt;java.lang.Short&lt;/li&gt;&lt;li&gt;int&lt;/li&gt;&lt;li&gt;java.lang.Integer&lt;/li&gt;&lt;li&gt;long&lt;/li&gt;&lt;li&gt;java.lang.Long&lt;/li&gt;&lt;li&gt;float&lt;/li&gt;&lt;li&gt;java.lang.Float&lt;/li&gt;&lt;li&gt;double&lt;/li&gt;&lt;li&gt;java.lang.Double&lt;/li&gt;&lt;li&gt;java.util.Date&lt;/li&gt;&lt;li&gt;com.google.appengine.api.users.User&lt;/li&gt;&lt;li&gt;com.google.appengine.api.datastore.Text&lt;/li&gt;&lt;li&gt;com.google.appengine.api.datastore.Blob&lt;/li&gt;&lt;li&gt;com.google.appengine.api.datastore.Key&lt;/li&gt;&lt;/ul&gt;&lt;div&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/6492658450252069268-4593313757953889447?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4593313757953889447/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4593313757953889447' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4593313757953889447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4593313757953889447'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/06/simplemodeler-018.html' title='SimpleModeler 0.1.8'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-6037382192634105285</id><published>2009-05-31T06:56:00.002+09:00</published><updated>2009-05-31T07:14:03.829+09:00</updated><title type='text'>SimpleModeler 0.1.6</title><content type='html'>GWの連休ボケでSimpleModeler開発の日記が何となく滞っている。&lt;br /&gt;ただ、SimpleModelerの開発は進んでいて、5月22日にSimpleModeler 0.1.6をリリースした。&lt;br /&gt;&lt;br /&gt;[SimpleModeler 0.1.6]&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/simplemodeler/&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;br /&gt;&lt;br /&gt;SimpleModeler 0.1.6は、AtomPubの自動生成機能を追加した。&lt;br /&gt;-gaej.atomオプションで、AtomPubの参照系のプロトコルハンドラを自動生成する。更新系は折を見てサポートする予定。&lt;br /&gt;&lt;br /&gt;serviceに対するGETはこんな感じ。&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# curl http://localhost:8080/yorozu/atom/&lt;br /&gt;&amp;lt;service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;  &amp;lt;workspace&gt;&lt;br /&gt;    &amp;lt;atom:title&gt;Entity Repository&amp;lt;/atom:title&gt;&lt;br /&gt;    &amp;lt;collection href="customer/"&gt;&lt;br /&gt;  &amp;lt;atom:title&gt;Customer&amp;lt;/atom:title&gt;&lt;br /&gt;  &amp;lt;accept&gt;application/atom+xml;type=entry&amp;lt;/accept&gt;&lt;br /&gt;  &amp;lt;categories fixed="yes"&gt;&amp;lt;/categories&gt;&lt;br /&gt;&amp;lt;/collection&gt;&amp;lt;collection href="goods/"&gt;&lt;br /&gt;  &amp;lt;atom:title&gt;Goods&amp;lt;/atom:title&gt;&lt;br /&gt;  &amp;lt;accept&gt;application/atom+xml;type=entry&amp;lt;/accept&gt;&lt;br /&gt;  &amp;lt;categories fixed="yes"&gt;&amp;lt;/categories&gt;&lt;br /&gt;&amp;lt;/collection&gt;&amp;lt;collection href="buy/"&gt;&lt;br /&gt;  &amp;lt;atom:title&gt;Buy&amp;lt;/atom:title&gt;&lt;br /&gt;  &amp;lt;accept&gt;application/atom+xml;type=entry&amp;lt;/accept&gt;&lt;br /&gt;  &amp;lt;categories fixed="yes"&gt;&amp;lt;/categories&gt;&lt;br /&gt;&amp;lt;/collection&gt;&lt;br /&gt;  &amp;lt;/workspace&gt;&lt;br /&gt;&amp;lt;/service&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;collectionに対するGETはこんな感じ。&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# curl http://localhost:8080/yorozu/atom/customer/&lt;br /&gt;&amp;lt;feed xmlns="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;    &amp;lt;title&gt;Entity Repository&amp;lt;/title&gt;&lt;br /&gt;    &amp;lt;updated&gt;2009-05-30T22:02:48.010Z&amp;lt;/updated&gt;&lt;br /&gt;    &amp;lt;id&gt;uuid&amp;lt;/id&gt;&lt;br /&gt;    &amp;lt;link href="http://localhost:8080/yorozu/atom/customer/" type="application/atom+xml" rel="self"&gt;&amp;lt;/link&gt;&lt;br /&gt;    &amp;lt;link href="http://localhost:8080/" type="text/html" rel="alternate"&gt;&amp;lt;/link&gt;&lt;br /&gt;    &amp;lt;generator uri="http://code.google.com/p/simplemodeler" version="0.1"&gt;SimpleModeler&amp;lt;/generator&gt;&lt;br /&gt;    &amp;lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;  &amp;lt;title&gt;ABC(c001)&amp;lt;/title&gt;&lt;br /&gt;  &amp;lt;id&gt;c001&amp;lt;/id&gt;&lt;br /&gt;  &amp;lt;updated&gt;2009-05-30T22:02:48.030Z&amp;lt;/updated&gt;&lt;br /&gt;  &amp;lt;published&gt;2009-05-30T22:02:48.010Z&amp;lt;/published&gt;&lt;br /&gt;  &amp;lt;link href="c001/" rel="edit"&gt;&amp;lt;/link&gt;&lt;br /&gt;  &amp;lt;content type="application/xml"&gt;&lt;br /&gt;      &amp;lt;customer xmlns="http://yorozu.com/"&gt;&amp;lt;customerId&gt;c001&amp;lt;/customerId&gt;&amp;lt;customerName&gt;ABC&amp;lt;/customerName&gt;&amp;lt;phone&gt;045&amp;lt;/phone&gt;&amp;lt;/customer&gt;&lt;br /&gt;  &amp;lt;/content&gt;&lt;br /&gt;&amp;lt;/entry&gt;&lt;br /&gt;&amp;lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;  &amp;lt;title&gt;XYZ(c002)&amp;lt;/title&gt;&lt;br /&gt;  &amp;lt;id&gt;c002&amp;lt;/id&gt;&lt;br /&gt;  &amp;lt;updated&gt;2009-05-30T22:02:48.030Z&amp;lt;/updated&gt;&lt;br /&gt;  &amp;lt;published&gt;2009-05-30T22:02:48.010Z&amp;lt;/published&gt;&lt;br /&gt;  &amp;lt;link href="c002/" rel="edit"&gt;&amp;lt;/link&gt;&lt;br /&gt;  &amp;lt;content type="application/xml"&gt;&lt;br /&gt;      &amp;lt;customer xmlns="http://yorozu.com/"&gt;&amp;lt;customerId&gt;c002&amp;lt;/customerId&gt;&amp;lt;customerName&gt;XYZ&amp;lt;/customerName&gt;&amp;lt;phone&gt;06&amp;lt;/phone&gt;&amp;lt;/customer&gt;&lt;br /&gt;  &amp;lt;/content&gt;&lt;br /&gt;&amp;lt;/entry&gt;&lt;br /&gt;&amp;lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;  &amp;lt;title&gt;MNO(c003)&amp;lt;/title&gt;&lt;br /&gt;  &amp;lt;id&gt;c003&amp;lt;/id&gt;&lt;br /&gt;  &amp;lt;updated&gt;2009-05-30T22:02:48.030Z&amp;lt;/updated&gt;&lt;br /&gt;  &amp;lt;published&gt;2009-05-30T22:02:48.010Z&amp;lt;/published&gt;&lt;br /&gt;  &amp;lt;link href="c003/" rel="edit"&gt;&amp;lt;/link&gt;&lt;br /&gt;  &amp;lt;content type="application/xml"&gt;&lt;br /&gt;      &amp;lt;customer xmlns="http://yorozu.com/"&gt;&amp;lt;customerId&gt;c003&amp;lt;/customerId&gt;&amp;lt;customerName&gt;MNO&amp;lt;/customerName&gt;&amp;lt;phone&gt;06&amp;lt;/phone&gt;&amp;lt;/customer&gt;&lt;br /&gt;  &amp;lt;/content&gt;&lt;br /&gt;&amp;lt;/entry&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/feed&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;memberに対するGETはこんな感じ。&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# curl http://localhost:8080/yorozu/atom/customer/c001&lt;br /&gt;&amp;lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;br /&gt;  &amp;lt;title&gt;ABC(c001)&amp;lt;/title&gt;&lt;br /&gt;  &amp;lt;id&gt;c001&amp;lt;/id&gt;&lt;br /&gt;  &amp;lt;updated&gt;2009-05-30T22:02:34.350Z&amp;lt;/updated&gt;&lt;br /&gt;  &amp;lt;published&gt;2009-05-30T22:02:34.340Z&amp;lt;/published&gt;&lt;br /&gt;  &amp;lt;link href="." rel="edit"&gt;&amp;lt;/link&gt;&lt;br /&gt;  &amp;lt;content type="application/xml"&gt;&lt;br /&gt;      &amp;lt;customer xmlns="http://yorozu.com/"&gt;&amp;lt;customerId&gt;c001&amp;lt;/customerId&gt;&amp;lt;customerName&gt;ABC&amp;lt;/customerName&gt;&amp;lt;phone&gt;045&amp;lt;/phone&gt;&amp;lt;/customer&gt;&lt;br /&gt;  &amp;lt;/content&gt;&lt;br /&gt;&amp;lt;/entry&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-6037382192634105285?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/6037382192634105285/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=6037382192634105285' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6037382192634105285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6037382192634105285'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/05/simplemodeler-016.html' title='SimpleModeler 0.1.6'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7591206116383168242</id><published>2009-04-18T06:00:00.003+09:00</published><updated>2009-04-18T06:24:14.745+09:00</updated><title type='text'>Google Web Toolkit動いた</title><content type='html'>昨晩、SimpleModelerのGoogle App Engine Java(GAEJ)のGoogle Web Toolkit(GWT)が動き出した。&lt;br /&gt;通常のServlet/JSPのWeb MVC版はすでに動いているので、GAEJ生成器はWeb MVC版とGWT版の2種類の実装を生成することになる。&lt;br /&gt;Web MVCとGWTの双方からGAEJのDataStoreを操作することができる。&lt;br /&gt;&lt;br /&gt;GWTは今のところあまり人気がないという話もあるけれど、実際に使ってみるとなかなかよいではないですか。&lt;br /&gt;とっかかりの設定ファイルがやや面倒なのだけれど、こういったところが自動生成でカバーできれば、アプリケーション本体の開発はWeb MVCよりもかなり簡単であるにもかかわらず、Ajaxを使った普通のGUIアプリケーションがWeb上に構築できるというかなり凄い結果を得られる。&lt;br /&gt;普通のJavaオブジェクトを使ったAjaxの非同期通信用の専用RPCであるGWT-RPCも使い方は簡単で、サーバー側の処理を普通にJavaで書けるのもうれしい。&lt;br /&gt;クライアント側とサーバー側の処理をすべてJavaで書いて、Eclipseでデバッグまでできる。&lt;br /&gt;Widgetの部分はプログラマが書いて、Widgetを埋め込むHTMLはデザイナが作るといった分業もJSPとは比較にならないほどスムーズにできそう。&lt;br /&gt;なぜ、流行っていないのか不思議である。&lt;br /&gt;&lt;br /&gt;Webアプリケーション技術は新参者なので、事情はよく分からないのだけれど、Webを見てまわると昔は設定が難しいようだったからそういうのも影響があるのかも。でも、GAEJにバンドルされているGWTは特に設定いらずなので、少なくてもこの問題は解消される。&lt;br /&gt;&lt;br /&gt;GWTはかなり気に入ってしまったので、SimpleModelerのGAE向け機能はGWTを中心に機能セットを整えていくことにした。&lt;br /&gt;&lt;br /&gt;GWT単体でも便利だけれど、自動生成と組み合わせると、これは何ともいえないぐらい強力、というのがSimpleModelerが吐き出したGAEJ+GWTを触ってみた感想。&lt;br /&gt;4月21日(火)のJJUG CCCで、デモしたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.java-users.jp/contents/events/ccc2009spring/"&gt;http://www.java-users.jp/contents/events/ccc2009spring/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-7591206116383168242?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7591206116383168242/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7591206116383168242' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7591206116383168242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7591206116383168242'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/google-web-toolkit.html' title='Google Web Toolkit動いた'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7377780772356279277</id><published>2009-04-15T10:48:00.003+09:00</published><updated>2009-04-15T10:50:27.942+09:00</updated><title type='text'>Google App Engine Java動いた</title><content type='html'>昨晩、SimpleModelerのGoogle App Engine Java(GAEJ)が動き出した。&lt;br /&gt;GAEJのSDKでDataStoreの中身を見る方法が分からず、JDOを使うのも始めてなので、疎通が難航することを覚悟していたのだけれど、案外すんなりと動いた。&lt;br /&gt;来週のJJUG CCCでは無事デモができそうである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-7377780772356279277?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7377780772356279277/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7377780772356279277' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7377780772356279277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7377780772356279277'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/google-app-engine-java_15.html' title='Google App Engine Java動いた'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4532623409697210576</id><published>2009-04-13T18:34:00.002+09:00</published><updated>2009-04-13T18:39:55.620+09:00</updated><title type='text'>Google App Engine Java開発中</title><content type='html'>先週の水曜(4/8)にGoogle App Engine Javaが公開されたことを受けて、Google App Engine Python向けの機能拡張を保留して、Google App Engine Java向けの開発を開始した。&lt;br /&gt;SimpleModelerではWeb MVCのMをEntity/Service/Documentの構成とするので、全体としてはESDVCとなる。この内、E(Entity)、D(Document)、V(View)は成果物のJavaやJSPがコンパイルできる所まできた。今はC(Controller)とS(Service)の実装中で、これができたら全体をつなげて疎通確認に入る予定。&lt;br /&gt;来週火曜日4月21日のJJUG CCCでは、google App Engine Javaのデモも行いたい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-4532623409697210576?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4532623409697210576/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4532623409697210576' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4532623409697210576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4532623409697210576'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/google-app-engine-java.html' title='Google App Engine Java開発中'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7068857089116526154</id><published>2009-04-07T08:41:00.002+09:00</published><updated>2009-04-07T08:45:37.760+09:00</updated><title type='text'>scala-toolsが落ちてる</title><content type='html'>今朝、急にmavenのscala-pluginが動かなくなる。&lt;br /&gt;&lt;br /&gt;The server hosting scala-tools.org is experiencing a denial of service attack. We expect to have it back up and running really soon now(tm).&lt;br /&gt;&lt;br /&gt;だそうです。&lt;br /&gt;でも、-oオプションつけても動かないのは勘弁して欲しいなぁ。&lt;br /&gt;mavenでscala-pluginのバージョン・チェックを回避すればよいかもしれないのだけど、回避方法が分からない。&lt;br /&gt;しばし、待つとしよう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-7068857089116526154?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7068857089116526154/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7068857089116526154' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7068857089116526154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7068857089116526154'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/scala-tools.html' title='scala-toolsが落ちてる'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-2626836962401839898</id><published>2009-04-06T11:06:00.002+09:00</published><updated>2009-04-06T16:44:05.974+09:00</updated><title type='text'>Dojo Toolkit</title><content type='html'>Google App EngineのWebアプリケーションでDojo Toolkitを使うようにしてみた。&lt;br /&gt;Dojo Toolkitはかなり大きいので配備の問題が悩ましいなぁと思っていたら、AJAX Libraries APIが使えることが判明。前にAJAX Libraries APIをみた時は今ひとつぴんと来なかったなのだけれど、こうやって実際にWebアプリケーションを作ってみるととても重要なAPIであることが分かった。&lt;br /&gt;&lt;br /&gt;Dojo Toolkitはなかなかよい感じ。使い方も簡単で効果も抜群。こういったAjaxライブラリを使うのが、Webアプリケーションを作る際のいまどきの標準ということなのかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-2626836962401839898?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/2626836962401839898/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=2626836962401839898' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2626836962401839898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2626836962401839898'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/dojo-toolkit.html' title='Dojo Toolkit'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-982944770875034309</id><published>2009-04-03T10:09:00.004+09:00</published><updated>2009-04-03T10:21:46.931+09:00</updated><title type='text'>aggregation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4HtJQwbXqEY/SdVkU2vuVeI/AAAAAAAAAC8/-YbTnP1Uj-s/s1600-h/ClassDiagramyorozuDetail.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 302px;" src="http://1.bp.blogspot.com/_4HtJQwbXqEY/SdVkU2vuVeI/AAAAAAAAAC8/-YbTnP1Uj-s/s320/ClassDiagramyorozuDetail.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5320268844263953890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;クラウドでは、関連の深いデータをできるだけ近くに配備したいので、個々のデータのメタ情報にそいういった情報を格納する。たとえばGoogle App Engineの場合はデータの親データをKeyに入れているけれど、そういう目的ではないかと思う。&lt;br /&gt;こういった情報の元ネタはモデリングの段階で収集するのが効率的であるけれど、その一つのアプローチがAggregateである。&lt;br /&gt;ただ、「Aggregate Root」というステレオタイプを使うのはややクールでないかなぁ、と思いつつ常々扱いを気にしていたのだけれど、モデル内のaggregationを手繰ってAggregateを自動抽出すればよいことに思いついた。&lt;br /&gt;現在の所SimpleModelerはassociationとcompositionをサポートしているもののaggregationはサポートしていない。というのは、aggregationはモデルの意味・意図が不明瞭であり、使い方が難しい、という評価があるモデルであり、モデル駆動を目指すSimpleModelerでは明確な使い方が見つかるまで、サポートを保留していたのである。&lt;br /&gt;このaggregationを使うと、(ツールがモデルを解析する手間を惜しまなければ)Aggregateを明確に記述できる。Aggregateはクラウド時代にはとても重要なモデルの構成要素でありプラクティスとなるので、このAggregateを成立させるためのモデル要素としてaggregationをサポートする価値は非常に高い。&lt;br /&gt;そのような判断でaggregationをサポートすることにした。&lt;br /&gt;帰宅後、aggregationの実装。同時にcompositionを指定する文法も改良。&lt;br /&gt;無事動作。&lt;br /&gt;&lt;br /&gt;折を見て、Aggregateも実装したい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-982944770875034309?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/982944770875034309/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=982944770875034309' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/982944770875034309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/982944770875034309'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/04/aggregation.html' title='aggregation'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4HtJQwbXqEY/SdVkU2vuVeI/AAAAAAAAAC8/-YbTnP1Uj-s/s72-c/ClassDiagramyorozuDetail.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-2996180086656231528</id><published>2009-03-31T09:06:00.002+09:00</published><updated>2009-03-31T09:08:49.697+09:00</updated><title type='text'>NetBeans</title><content type='html'>NetBeansのScalaプラグインの出来がよいとの噂があったので、ダウンロードしてみた。&lt;br /&gt;日本語の識別子には対応していないみたい。がっくし。&lt;br /&gt;SimpleModelerのScala DSLは、IDEのサポートが受けられるとかなり使いやすくなるはずなので、期待してみたのだけれど、日本語の識別子が使えないと現時点では使えないなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-2996180086656231528?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/2996180086656231528/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=2996180086656231528' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2996180086656231528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2996180086656231528'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/netbeans.html' title='NetBeans'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-5651704655728168850</id><published>2009-03-27T10:16:00.003+09:00</published><updated>2009-03-27T10:28:15.249+09:00</updated><title type='text'>XMLリテラル</title><content type='html'>Google App Engine用ドメイン・オブジェクトCRUD MVCでは、ScalaのXMLリテラルがとても役になった。&lt;br /&gt;&lt;br /&gt;生成するHTMLをXMLリテラルでそのまま記述できる。その上で、「{」「}」で囲んだ所にScala関数を評価した結果が挿入される。そのままテンプレートエンジンである。&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;　　val html = &lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Show {capitalizedTerm}&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Show {capitalizedTerm}&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table class="datasheet"&amp;gt;&lt;br /&gt;&amp;lt;tbody&amp;gt;&lt;br /&gt;{&lt;br /&gt;　for (attr &amp;lt;- entity.attributes.toList) yield {&lt;br /&gt;　　&amp;lt;tr&amp;gt;&lt;br /&gt;　　　&amp;lt;td&amp;gt;{attr.name}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{{{{doc.{attr.name} }}}}&amp;lt;/td&amp;gt;&lt;br /&gt;　　&amp;lt;/tr&amp;gt;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table class="action"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;　&amp;lt;td&amp;gt;&amp;lt;form action={getActionPath("edit")} method="get"&amp;gt;&amp;lt;input type="hidden" name="key" value={getIdCode} /&amp;gt;&amp;lt;input type="submit" value="Edit" /&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;　&amp;lt;td&amp;gt;&amp;lt;form action={getActionPath("destroy")} method="post"&amp;gt;&amp;lt;input type="hidden" name="key" value={getIdCode} /&amp;gt;&amp;lt;input type="submit" value="Delete" /&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;　　&lt;br /&gt;&amp;lt;table class="menu"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;a href={getActionPath("index")}&amp;gt;Index&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;a href={getActionPath("new")}&amp;gt;New&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;作成したXMLをテキストとして出力するのはこんな感じ。&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;XML.write(out, html, entityContext.textEncoding, false, null)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;ScalaのXMLはこの他にも色々便利な機能がある。&lt;br /&gt;Web系のプログラムだと何かとXMLやHTMLを使うことが多いので、言語ネイティブのXMLサポートは重要ですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-5651704655728168850?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/5651704655728168850/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=5651704655728168850' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5651704655728168850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5651704655728168850'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/xml.html' title='XMLリテラル'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-8434868839142671745</id><published>2009-03-26T11:02:00.003+09:00</published><updated>2009-03-26T11:09:03.788+09:00</updated><title type='text'>Google App Engine CRUD MVC動いた</title><content type='html'>SimpleModelerドメイン・オブジェクトに対するGoogle App EngineのCRUD MVC&amp;Serviceが動いた。ふぅー。&lt;br /&gt;Model, Serviceに加えて、ViewとControllerも自動生成できるようになった。&lt;br /&gt;&lt;br /&gt;Web MVCの自動生成器を作ってみて、Webアプリケーション開発が大変なことを実感。&lt;br /&gt;ここが自動作成できたら、かなり便利なはずである。&lt;br /&gt;&lt;br /&gt;今はCURDの範囲だけれど、もう少し自動生成の範囲を広げることができると考えている。&lt;br /&gt;この実現のメカニズムとしてdocumentとstateMachineを作りこんできた。また、昨日書いたように画面遷移モデルをサポートすればさらに自動生成の範囲が広がる。&lt;br /&gt;ここからは先が長そうなので、様子を見ながらぼちぼち取り掛かることにしたい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-8434868839142671745?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/8434868839142671745/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=8434868839142671745' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8434868839142671745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8434868839142671745'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/google-app-engine-crud-mvc.html' title='Google App Engine CRUD MVC動いた'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-919794181447201373</id><published>2009-03-25T16:40:00.002+09:00</published><updated>2009-03-25T16:47:39.682+09:00</updated><title type='text'>Google App Engine MVC</title><content type='html'>次の組合せでGoogle App EngineのMVC&amp;Serviceが動いた。ふぅー。&lt;br /&gt;&lt;br /&gt;Model: 自動生成&lt;br /&gt;Service: 自動生成&lt;br /&gt;View: 金型&lt;br /&gt;Controller: 金型&lt;br /&gt;&lt;br /&gt;すっかりPythonプログラマである。&lt;br /&gt;次は、金型をSimpleModelerに取り込んで自動生成する処理の開発。&lt;br /&gt;4月21日の&lt;a href="http://www.java-users.jp/"&gt;JJUG CCC&lt;/a&gt;でデモできそう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-919794181447201373?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/919794181447201373/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=919794181447201373' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/919794181447201373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/919794181447201373'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/google-app-engine-mvc.html' title='Google App Engine MVC'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3837664522756528338</id><published>2009-03-25T06:59:00.003+09:00</published><updated>2009-03-25T07:10:38.746+09:00</updated><title type='text'>Webフレームワーク</title><content type='html'>Google App EngineのWebフレームワークとGoogle App Engine Oil（GAEO)を調査している。&lt;br /&gt;GAEOでURLとMVCの実装を:controller/:actionのコンベンションに結び付けている部分が面白い。一種のリンカですね。&lt;br /&gt;本家のRuby on Railsは:controller/:action/:id.:formatというコンベンションのようだけれど、こういったURLと実装の動的リンク機能(何か名前がついているんだろうなー、以下ではURLルーティングと呼ぶことにする)がRuby on Railsの柱の一つであり、これをGoogle App Engine(GAE)で実現しようとしているのがGAEOということである。&lt;br /&gt;GAEOのCRUD VC自動生成はまだまだ発展途上だと思われるけれど、このURLルーティング機能は現時点でもかなり使える。&lt;br /&gt;&lt;br /&gt;と、ここでSimpleModelerのGAE生成器だけれど、GAEOに全面依存するのもリスクがあるので、gaeサービスではGAEのみを使うようにしようと思う。URLルーティングも簡単なものを自前で実装することにする。&lt;br /&gt;これとは別にgaeoサービスでは、GAEOのURLルーティングを活用したプログラムを自動生成することにしたい。&lt;br /&gt;&lt;br /&gt;調べてみるとWebのこのあたりの技術はなかなか面白い。こういった処理を実装する場合、メタ・プログラミングを使ってコンベンションによる動的リンクが非常に有効なのでPythonやRubyのような動的言語が大人気なのもよく分かる。&lt;br /&gt;ただ、こういったWeb MVCの実装は、自動生成の格好の対象であることも感じた。&lt;br /&gt;単純な繰り返しのプログラミングは、コンベンションと動的リンクで解決することも可能であるけれど、プログラムの自動生成で解決することも可能である。&lt;br /&gt;プログラムの自動生成をするのであれば、ターゲットのプログラミング言語は静的型付のものでよい。つまり、自動生成を前提にするとテーゲット言語はJavaのみでも、Ruby on RailsやPython Djangoと同等のWebアプリケーションの開発効率が得られると思われる。&lt;br /&gt;開発言語がJava指定の案件でも、Ruby on RailsやPython Djangoと同等の開発効率が得られれば魅了的である。&lt;br /&gt;&lt;br /&gt;そうはいっても、RubyやPythonを主力言語として開発している人がわざわざJavaをやるというのも考えにくいので、結局の所、色々な言語の色々なWebフレームワークが並存することになるだろう。顧客が指定するWebアプリケーションの言語やフレームワークも多極化することになるだろうから、どのような組合せであっても対応できるのが開発者側のスタンスとしては望ましい。&lt;br /&gt;こういったニーズに対してSimpleModelerのようなモデル・コンパイラは有力なソリューションである。&lt;br /&gt;&lt;br /&gt;今回、Webフレームワークを調べてみて、SimpleModelerでかなりの部分を自動生成できるように感じた。ただし、ユースケースやドメイン・モデルから自動生成できるという意味ではなくて、システム・モデルとして画面遷移モデルなどの専用PIMモデルを定義すればである。&lt;br /&gt;Webのフロントは開発工数も大きい上にバグの出やすいところでもあるし、要件定義から実装までの各段階で試行錯誤が必須の部分なので、PIMモデルからの自動生成ができれば、その効果は計り知れないだろう。&lt;br /&gt;SimpleModeler的には、Scala DSLで定義した専用画面遷移モデルから、画面遷移図と各種Webフレームワーク向け実装の自動生成の機能ということになる。画面遷移モデルとドメイン・モデル、ユースケース・モデルとの連携は確保すれば、上流モデルからWebフレームワーク向け実装まで一気通貫で開発することができる。&lt;br /&gt;GAEが一段落したら、SimpleModelerをそちらの方向に延ばしてみようかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-3837664522756528338?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3837664522756528338/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3837664522756528338' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3837664522756528338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3837664522756528338'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/web.html' title='Webフレームワーク'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-905495608808911138</id><published>2009-03-24T23:19:00.003+09:00</published><updated>2009-03-24T23:31:42.974+09:00</updated><title type='text'>GAEOのMVC遷移</title><content type='html'>メモ。&lt;br /&gt;&lt;br /&gt;GuestbookController&lt;br /&gt;==create&lt;br /&gt;====r.put()&lt;br /&gt;====/guestbook&lt;br /&gt;&lt;br /&gt;==destroy&lt;br /&gt;====Guestbook.get()&lt;br /&gt;====r.delete()&lt;br /&gt;====/guestbook&lt;br /&gt;&lt;br /&gt;==edit&lt;br /&gt;====Guestbook.get()&lt;br /&gt;====template/guestbook/edit.hml&lt;br /&gt;======/guestbook/update&lt;br /&gt;&lt;br /&gt;==index&lt;br /&gt;====Guestbook.all()&lt;br /&gt;====template/guestbook/index.hml&lt;br /&gt;======/guestbook/new&lt;br /&gt;======/guestbook/show?key&lt;br /&gt;&lt;br /&gt;==new&lt;br /&gt;====template/guestbook/new.hml&lt;br /&gt;======/guestbook/create&lt;br /&gt;&lt;br /&gt;==search&lt;br /&gt;====?&lt;br /&gt;&lt;br /&gt;==show&lt;br /&gt;====Guestbook.get()&lt;br /&gt;====template/guestbook/show.hml&lt;br /&gt;======/guestbook/edit?key&lt;br /&gt;======/guestbook/destroy?key&lt;br /&gt;&lt;br /&gt;==update&lt;br /&gt;====Guestbook.get()&lt;br /&gt;====r.put()&lt;br /&gt;====/guestbook&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-905495608808911138?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/905495608808911138/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=905495608808911138' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/905495608808911138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/905495608808911138'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/gaeomvc.html' title='GAEOのMVC遷移'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-8122375514263446081</id><published>2009-03-24T07:36:00.002+09:00</published><updated>2009-03-24T08:52:54.778+09:00</updated><title type='text'>コントロール、サービス、ドキュメント</title><content type='html'>週末にPythonと格闘してGoogle App Engineの金型をつくったので、これをベースにSimpleModelerのGoogle App Engine生成器のリファインを開始。&lt;br /&gt;&lt;br /&gt;Ruby on Rails、Grails、Google App Engine、Google App Engine Oilを一通り調べて、これらのWebフレームワークが共通して持っている問題だと思うのは、MVCのコントローラからPSM(Physical Data Model)をダイレクトにマップしたモデルを直接触る構造になっているということである。もちろん、アプリケーションが意識すればそういう構造にしないことも可能だけれど、自動生成されるCRUDのコントローラはPSMモデルを直接操作する構造になっているし、色々なクックガイドのサンプルもそういう形になっている。&lt;br /&gt;この方式が問題なのは、UIのコードがデータベースのデータ構造を直接意識してしまうことと、アプリケーション・ロジックがUIコードに断片としてばら撒かれてしまう点にある。また、UIデザイナとアプリケーション・プログラマの仕事が分離しづらいという問題もある。&lt;br /&gt;この問題はかつてのCS(Client/Server)で既知のものであり、CSシステムの保守や拡張を大変にしている。&lt;br /&gt;作っているプログラマは楽だけれど、その後、高コストになるアーキテクチャなのである。&lt;br /&gt;&lt;br /&gt;もちろん、作り捨てで拙速を重要視するタイプのシステムはこの戦略が合っているわけだけれど、"持続性"が大事な企業アプリケーションではそういうわけにはいかない。&lt;br /&gt;&lt;br /&gt;この問題を解決するためには、アプリケーション・ロジックをコントローラから分離し、サービスとして独立したジュールとして作成。コントローラからはサービスを呼び出すという構造にするのがよい。&lt;br /&gt;この時、コントローラからサービスを呼び出す際には"構造を持った値"によってパラメータの受け渡しをすることになる。この目的でSimpleModelingが用意しているモデル要素がdocumentである。&lt;br /&gt;&lt;br /&gt;以上のような理由によって、SimpleModelerでは、MVCのコントローラとアプリケーション・ロジックを分離して、アプリケーション・ロジックをサービスとして部品化する構造のアプリケーションを自動生成を指向している。このアプリケーション・アーキテクチャでは、ドメイン・モデルの操作もできるだけサービスとしてカプセル化する。&lt;br /&gt;&lt;br /&gt;昨日の作業で、この方針に沿ったそれなりのコードが出てくるようになった。&lt;br /&gt;今朝から、Google App Engine SDK上で生成されたコードのデバッグとチューニング。かすかに動き始めたようである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-8122375514263446081?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/8122375514263446081/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=8122375514263446081' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8122375514263446081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8122375514263446081'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/blog-post_24.html' title='コントロール、サービス、ドキュメント'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3820360765835274406</id><published>2009-03-20T09:02:00.002+09:00</published><updated>2009-03-20T09:32:08.579+09:00</updated><title type='text'>python</title><content type='html'>entityとdocumentのマッピング、状態機械モデルからステートマシーン図と状態遷移表の生成ができるようになって、動的モデルを含むドメイン・モデルを扱うプログラムの生成の土台ができた。&lt;br /&gt;&lt;br /&gt;エンティティ・オブジェクトの実装はgaeオプションやgaeoオプションですでに実現済みだけれど、状態機械による振舞いの記述やドメイン・オブジェクトを束ねるドメイン・コンポーネントといったものも生成できるようにすることを考えている。&lt;br /&gt;&lt;br /&gt;Google App Engine用のプログラム生成器を本格的に取り掛かるわけだけれど、その前にPythonをちゃんとマスターしないといけませんねー。&lt;br /&gt;&lt;br /&gt;ということでPythonに取り掛かる。チョー久々にEclipse Ganymedeを動かしてPyDevを入れてみた。&lt;br /&gt;Eclipse使うの久しぶり。&lt;br /&gt;試しにScalaのプラグインも更新してみたけど、あんまり進展はないみたい。&lt;br /&gt;&lt;br /&gt;Pythonは、インデントを文法の論理要素に取り込んだ文法が特色だけれど、それを除いてみるとLispの上に外付けにオブジェクト機能をつけた言語という印象。オブジェクト指向言語としては美しくないような気もするけれど、メタなプログラミングをしたいフレームワーク系の人には逆に分かりやすくてよいかもしれない。&lt;br /&gt;フレームワークが充実すれば、結果としてアプリケーション・プログラマにも恩恵があるので、文法が多少不思議系でもトータルとしてはメリットの方が大きい、ということかな。&lt;br /&gt;その文法もとても簡潔で使いやすいので、不思議系の部分はおまじないと考えれば気にならない。&lt;br /&gt;&lt;br /&gt;Djangoとの組合せはとてもバランスがよくて、Webアプリケーションのプレゼンテーションはこういった軽量言語が合っているということを実感。これは、ちょっと前に調べたGrailsでも感じたこと。&lt;br /&gt;&lt;br /&gt;プレゼンテーション=&gt;軽量言語、アプリケーション・ロジック=&gt;Java、フレームワーク・DSLコンパイラ=&gt;Scalaで3極化というのをこの間のセミナーのスライドで書いたけれど、そういうことなんだろうと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-3820360765835274406?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3820360765835274406/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3820360765835274406' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3820360765835274406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3820360765835274406'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/python.html' title='python'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-5996012769151748447</id><published>2009-03-19T12:56:00.003+09:00</published><updated>2009-03-19T13:18:45.848+09:00</updated><title type='text'>合成状態の状態遷移表</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScHCsbXb6DI/AAAAAAAAABU/p4aayn8346Y/s1600-h/transitionTable.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 319px;" src="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScHCsbXb6DI/AAAAAAAAABU/p4aayn8346Y/s320/transitionTable.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5314743103789983794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;合成状態(composite state)の入った状態遷移表が無事生成できるようになった。&lt;br /&gt;横軸はイベントとガードの組、縦軸は状態の表である。合成状態は合成状態を構成するサブ状態と合成状態の擬似状態2つ(初期状態、終了状態)、そして合成状態全体を示す状態のそれぞれを軸として使用する。&lt;br /&gt;この2つの軸のマトリクスによってエンティティの状態遷移を記述することができる。&lt;br /&gt;また、プログラムの自動生成もこの状態遷移表の振舞いをプログラムコード化したものになる。&lt;br /&gt;&lt;br /&gt;ネットワーク系のアプリケーションでは、仕様の概要を見るには状態遷移図がよいけれど、プログラムとして実装するためには、状態遷移表の形でより具体的、網羅的な情報が必要である。この状態遷移表で「N/A」となっている部分が仕様としてありえない組合せだけれど、実システムでは往々にしてこのような状態に陥ることがあり、そうなった時の予防的なロジックを仕込んでおく必要がある。このような抜けを網羅的につぶしていくためには状態遷移表を用いるのが有効である。&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/6492658450252069268-5996012769151748447?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/5996012769151748447/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=5996012769151748447' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5996012769151748447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5996012769151748447'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/blog-post_2607.html' title='合成状態の状態遷移表'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4HtJQwbXqEY/ScHCsbXb6DI/AAAAAAAAABU/p4aayn8346Y/s72-c/transitionTable.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-6909254397483140763</id><published>2009-03-19T04:45:00.004+09:00</published><updated>2009-03-19T05:08:25.441+09:00</updated><title type='text'>合成状態</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4HtJQwbXqEY/ScFPoj7Yv3I/AAAAAAAAABM/a30D54mc-io/s1600-h/StateMachineDiagramDER%E5%95%86%E5%93%81DM%E5%95%86%E5%93%81%E7%8A%B6%E6%85%8B.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 212px; height: 320px;" src="http://2.bp.blogspot.com/_4HtJQwbXqEY/ScFPoj7Yv3I/AAAAAAAAABM/a30D54mc-io/s320/StateMachineDiagramDER%E5%95%86%E5%93%81DM%E5%95%86%E5%93%81%E7%8A%B6%E6%85%8B.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314616593531584370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ステートマシーン図の合成状態(composite state)完成。&lt;br /&gt;合成状態そのものに対する遷移を、開始/終了擬似ステートではなくて合成状態のシンボルそのものにするようにした。このあたりはGraphvizと格闘した所。&lt;br /&gt;UMLの合成状態のフルスペックというわけではないけれど、実用的には十分でしょう。後はニーズ駆動で作り足ししていく。&lt;br /&gt;&lt;br /&gt;Graphvizのdotコマンド呼び出しでハングアップする件は、標準エラー出力のバッファあふれみたい。dotコマンド起動時にWarning出力を抑止して解決。&lt;br /&gt;外部コマンドを起動して標準入出力で連携する処理を汎用的に書く場合には、標準入出力および標準エラー出力の3つの入出力に対してそれぞれ別スレッドで対応しなければならない。単一スレッドで対応する場合にはselectシステムコールを使ったポーリングのメカニズムとなる。いずれにしても単純ではない。&lt;br /&gt;起動するコマンドの振舞いによっては、標準入力に一括書き込み(コマンド側は読み込み)、標準出力から一括読み込み(コマンド側は書き込み)という逐次処理で連携できることがある、という特殊な連携パターンであるということを念頭においておかなければならない。&lt;br /&gt;今回の場合は、dotコマンドが一括入力、一括出力のバッチ処理であることと、コマンド引数で標準エラー出力を抑止、という工夫を併用することで、特殊な連携パターンが可能になったということである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-6909254397483140763?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/6909254397483140763/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=6909254397483140763' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6909254397483140763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6909254397483140763'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/blog-post_19.html' title='合成状態'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4HtJQwbXqEY/ScFPoj7Yv3I/AAAAAAAAABM/a30D54mc-io/s72-c/StateMachineDiagramDER%E5%95%86%E5%93%81DM%E5%95%86%E5%93%81%E7%8A%B6%E6%85%8B.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-111155941905496961</id><published>2009-03-18T17:58:00.007+09:00</published><updated>2009-03-18T18:11:08.469+09:00</updated><title type='text'>composite state</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScC6nNbtcPI/AAAAAAAAABE/KRkrOcthRI8/s1600-h/ClassDiagramDER%E5%95%86%E5%93%81Perspective.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 217px;" src="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScC6nNbtcPI/AAAAAAAAABE/KRkrOcthRI8/s320/ClassDiagramDER%E5%95%86%E5%93%81Perspective.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314452743080734962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScC6ZouDgnI/AAAAAAAAAA8/QO4sPtMwhf0/s1600-h/StateMachineDiagramDER%E5%95%86%E5%93%81DM%E5%95%86%E5%93%81%E7%8A%B6%E6%85%8B.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 212px; height: 320px;" src="http://4.bp.blogspot.com/_4HtJQwbXqEY/ScC6ZouDgnI/AAAAAAAAAA8/QO4sPtMwhf0/s320/StateMachineDiagramDER%E5%95%86%E5%93%81DM%E5%95%86%E5%93%81%E7%8A%B6%E6%85%8B.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5314452509887267442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ステートマシーン図のcomposite stateを作成して、何とか図が出力されるようになった。ただ、謎のハングアップをするのでデバッグ継続中。&lt;br /&gt;&lt;br /&gt;関連して2つ目の図は昨日作成したentityとdocumentの関係を記述したクラス図。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-111155941905496961?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/111155941905496961/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=111155941905496961' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/111155941905496961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/111155941905496961'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/composite-state.html' title='composite state'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4HtJQwbXqEY/ScC6nNbtcPI/AAAAAAAAABE/KRkrOcthRI8/s72-c/ClassDiagramDER%E5%95%86%E5%93%81Perspective.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3900332028648431399</id><published>2009-03-18T13:14:00.002+09:00</published><updated>2009-03-18T13:23:38.990+09:00</updated><title type='text'>JavaDSL</title><content type='html'>SimpleModelerはScalaをDSLのホスト言語として採用しているのだけれど、以前はJavaをDSLのホスト言語として使用するモデルコンパイラを作っていた。&lt;br /&gt;Javaだと記述能力上の問題もあり、Scalaがよさそうということで去年JavaからScalaに乗り換えたという経緯がある。&lt;br /&gt;&lt;br /&gt;この間のedge2.ccでJavaのDSLを評価する声があった。理由はEclipse。Eclipseを使うとJavaのコード補完がものすごいからである。&lt;br /&gt;以前JavaDSLを作っていた時も、この理由でJavaを採用したのであった。&lt;br /&gt;&lt;br /&gt;Scalaは、DSLのホスト言語としてとても優れているので、Scalaをメインにすえるのは問題ないのだけれど、あまり複雑でないオブジェクトの定義についてはJavaをホスト言語にしても十分に記述可能なので、SimpleModelerでJavaをDSLとしてサポートする価値は高いかもしれないと思い始めている。すべてをJavaで記述しようとしなければ十分に実現可能である。&lt;br /&gt;状態遷移表をExcelで書きたいというニーズもあるようなので、どこかのタイミングでこういったScala以外のDSLもサポートしていくこともしたいところである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-3900332028648431399?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3900332028648431399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3900332028648431399' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3900332028648431399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3900332028648431399'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/javadsl.html' title='JavaDSL'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4187362805808013088</id><published>2009-03-18T09:43:00.002+09:00</published><updated>2009-03-18T09:58:05.327+09:00</updated><title type='text'>document、subgraph、gae、grailsなど</title><content type='html'>昨日は、entityとdocumentのrelationshipの定義機能の追加と、entityとdocumentのマッピング機能のリファイン。これらの関係を表現するクラス図の生成ができるようになった。&lt;br /&gt;&lt;br /&gt;今日から状態機械のネストに取り掛かる。&lt;br /&gt;Graphvizのsubgraphに格闘。subgraph名は先頭が"cluster"となっていないといけないらしい。バグじゃないかなぁ。ドキュメントにはそんなこと書いてないぞ。&lt;br /&gt;&lt;br /&gt;ふと、思いついたこと。&lt;br /&gt;クラウド・アプリケーションは、ACIDのRDBMS、BASEのクラウドDBを併用するアプリケーション・アーキテクチャを取る。&lt;br /&gt;さて、そこで、Google App Engine。Google App Engineは当然ながらBigTableをラップしたと思われるクラウドDBしか使用することができない。このため、RDBMSを使用するためには外部のサーバーを利用する必要がある。&lt;br /&gt;このようなアーキテクチャを取る場合、Google App EngineとGrails on EC2という組合せはどうだろう。&lt;br /&gt;Google App Engineの範囲でできること、Googlen App EngineでなければできないことはGoogle App Engineで行い、RDBMS、SpringやJava EEといった所を使いたい場合にはGrails on EC2を併用するわけである。&lt;br /&gt;Google App EngineからGrailsの呼び出しはRESTやSOAPを使えばよい。&lt;br /&gt;もちろん、Messagingも使えればよいのだけれど、現時点ではGoogle App Engineでサポートしていない。そういう意味では、Java EEのJMSを利用するためにGoogle App EngineからGrails on EC2を使いにいくのもありえる。&lt;br /&gt;SimpleModelerではGoogle App EngineとGrailsの両方をサポートしているので、この併用アーキテクチャもサポートできたら面白そうである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-4187362805808013088?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4187362805808013088/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4187362805808013088' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4187362805808013088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4187362805808013088'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/documentsubgraphgaegrails.html' title='document、subgraph、gae、grailsなど'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3515933924967842192</id><published>2009-03-17T18:40:00.002+09:00</published><updated>2009-03-17T18:44:21.169+09:00</updated><title type='text'>grailsとgaeoのcontroller</title><content type='html'>GrailsとGoogle App Engine Oilのcontrollerを比較。&lt;br /&gt;&lt;br /&gt;Grails:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;index&lt;br /&gt;  &lt;li&gt;list&lt;br /&gt;  &lt;li&gt;show&lt;br /&gt;  &lt;li&gt;delete&lt;br /&gt;  &lt;li&gt;edit&lt;br /&gt;  &lt;li&gt;update&lt;br /&gt;  &lt;li&gt;create&lt;br /&gt;  &lt;li&gt;save&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Google App Engine Oil:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;create&lt;br /&gt;  &lt;li&gt;destroy&lt;br /&gt;  &lt;li&gt;edit&lt;br /&gt;  &lt;li&gt;index&lt;br /&gt;  &lt;li&gt;new&lt;br /&gt;  &lt;li&gt;search&lt;br /&gt;  &lt;li&gt;show&lt;br /&gt;  &lt;li&gt;update&lt;br /&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/6492658450252069268-3515933924967842192?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3515933924967842192/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3515933924967842192' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3515933924967842192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3515933924967842192'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/grailsgaeocontroller.html' title='grailsとgaeoのcontroller'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3135575892847287939</id><published>2009-03-17T11:41:00.003+09:00</published><updated>2009-03-17T11:56:51.564+09:00</updated><title type='text'>状態機械と文書</title><content type='html'>3/7の&lt;a href="http://sapporo-java.org/20090307_info.html"&gt;Sapporo Java Days 2009 Winter&lt;/a&gt;、3/13の&lt;a href="http://www.atware.co.jp/seminar/summary/summary20090313.html"&gt;atWorks&lt;/a&gt;も無事終了し、これらのセミナーをターゲットに開発してきたGrails、Google App Engineも一応動作するようになった。&lt;br /&gt;また、状態機械もかなりよいところまで実現できた。&lt;br /&gt;&lt;br /&gt;これらの成果は&lt;a href="http://code.google.com/p/simplemodeler/downloads/list"&gt;SimpleModeler 0.1.4&lt;/a&gt;として公開している。&lt;br /&gt;&lt;br /&gt;3/13のatWareに続いて、3/14の&lt;a href="http://www.edge2.cc"&gt;edge2.cc&lt;/a&gt;、3/15の&lt;a href="http://groups.google.co.jp/group/simplemodelingsemi"&gt;MindmapModeling勉強会(SimpleModeling勉強会)&lt;/a&gt;での反応をみると、Google App Engineは当然として、状態機械の評判がよい。&lt;br /&gt;状態機械は必要な技術であることは認識しているものの、うまく使いこなせない、ツールが整備されていないといった微妙な立場の技術といえる。&lt;br /&gt;そういった意味で、状態機械はモデル駆動開発を成功させる鍵となる技術であると考えていたのだけれど、その点を確認できてよかった。&lt;br /&gt;&lt;br /&gt;ということで粛々と状態機械の実装を続けている。&lt;br /&gt;&lt;br /&gt;また、状態機械をプログラムとして実装する上で、SimpleModelingでdocumentとしてモデル化する文書オブジェクトの存在が重要であると考えている。&lt;br /&gt;ということで、今日からdocumentを整備して状態機械に接続する処理の開発に入った。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-3135575892847287939?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3135575892847287939/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3135575892847287939' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3135575892847287939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3135575892847287939'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/blog-post_17.html' title='状態機械と文書'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4243119366525917608</id><published>2009-03-05T15:01:00.002+09:00</published><updated>2009-03-05T15:27:21.603+09:00</updated><title type='text'>mavenではまる</title><content type='html'>あさってのSapporo Java Daysで行う予定のデモの確認をしようとしたら、突如動かなくなっていた。&lt;br /&gt;調査の結果、mavenのscala pluginのバージョンが3月2日に2.10に上がったことの影響のようである。&lt;br /&gt;2.10でpomのエラーチェックを強化したようなのだけれど、SimpleModelが取っているマルチ・プロジェクト方式のプロジェクトのpom.xmlをうまく認識できずエラーとしてはじくことが原因のように見える。正確に調査したわけではないので絶対にそうかどうかは不明だけど。&lt;br /&gt;とりあえずはprojectサービスで生成するpomでscala pluginのバージョンを2.9に指定して回避することができた。&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/6492658450252069268-4243119366525917608?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4243119366525917608/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4243119366525917608' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4243119366525917608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4243119366525917608'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/maven.html' title='mavenではまる'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-1360098744679782831</id><published>2009-03-03T07:47:00.004+09:00</published><updated>2009-03-03T07:59:29.230+09:00</updated><title type='text'>状態機械</title><content type='html'>SimpleModeler 0.1.3b (20090301)でステートマシーン図描画のバグを修正して以下のようなステートマシーン図を表示できるようになった。&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_4HtJQwbXqEY/SaxjEzCQ0tI/AAAAAAAAAAM/y4JAJ2M1qWE/s320/StateMachineDiagramDERBookmarkDMBookmarkStateMachine.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 252px; height: 320px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5308726994833298130" /&gt;&lt;/div&gt;&lt;div&gt;ステートマシーン図と同時に状態遷移表も作成する。&lt;/div&gt;&lt;div&gt;複雑な振舞いをするオブジェクトのモデリングでは状態遷移図(ステートマシーン図)と状態遷移表の両方が必要なので両方を同時に生成するSimpleModelerのアプローチは有効だと思う。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;また、現在開発中の版では以下のように状態機械の存在をクラス図に記述するようにしてみた。オブジェクトの持つ状態と状態遷移を引き起こすイベントの関係を明確に表現できる。&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_4HtJQwbXqEY/SaxkSSBKw1I/AAAAAAAAAAU/c9YKPPzcnE4/s320/ClassDiagramDERBookmarkPerspective.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 320px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5308728326000132946" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/6492658450252069268-1360098744679782831?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/1360098744679782831/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=1360098744679782831' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/1360098744679782831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/1360098744679782831'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/blog-post.html' title='状態機械'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4HtJQwbXqEY/SaxjEzCQ0tI/AAAAAAAAAAM/y4JAJ2M1qWE/s72-c/StateMachineDiagramDERBookmarkDMBookmarkStateMachine.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7371846434540166564</id><published>2009-03-01T15:19:00.002+09:00</published><updated>2009-03-01T15:22:38.806+09:00</updated><title type='text'>SimpleModeler 0.1.3b (20090301)</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; font-size: 13px; line-height: 16px; "&gt;&lt;div&gt;SimpleModeler 0.1.3b (20090301)を公開しました。&lt;/div&gt;&lt;div&gt;0.1.3の内部リリース版です。バグ修正が主ですが、CSVやXMindからの移入機能を強化しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;http://code.google.com/p/simplemodeler/downloads/list &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; font-size: 13px; line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-7371846434540166564?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7371846434540166564/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7371846434540166564' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7371846434540166564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7371846434540166564'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/03/simplemodeler-013b-20090301.html' title='SimpleModeler 0.1.3b (20090301)'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7400859880167301136</id><published>2009-02-22T10:59:00.005+09:00</published><updated>2009-02-22T11:09:33.448+09:00</updated><title type='text'>SimpleModeler 0.1.2リリース</title><content type='html'>SimpleModeler 0.1.2をリリースしました。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以下&lt;a href="http://d.hatena.ne.jp/goldenport"&gt;プログラマ日記&lt;/a&gt;より&lt;/div&gt;&lt;div&gt;===&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Scala DSLを用いたモデルコンパイラSimpleModeler 0.1.2をリリースしました。  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今回の目玉機能は：  &lt;/div&gt;&lt;div&gt;- CSVの移入 &lt;br /&gt;&lt;/div&gt;&lt;div&gt;- マインドマップ・モデルの移入(XMind形式) &lt;/div&gt;&lt;div&gt;- CSVからマインドマップ・モデルへの変換です。  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;その他、SimpleModelerの機能は以下の通りです。  &lt;/div&gt;&lt;div&gt;-javaオプション：Javaソースコード生成 &lt;br /&gt;&lt;/div&gt;&lt;div&gt;-htmlオプション：Web仕様書生成  &lt;/div&gt;&lt;div&gt;-grailsオプション：Grails POGO(Plain Old Grails Object)生成  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ダウンロードは以下の場所から。  &lt;/div&gt;&lt;div&gt;http://code.google.com/p/simplemodeler/downloads/list &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;日々の開発の様子は以下の日記にて。  &lt;/div&gt;&lt;div&gt;http://simplemodeler.blogspot.com/ &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;インストール方法はこちらを参照してください。&lt;/div&gt;&lt;div&gt; http://groups.google.co.jp/group/simplemodelingsemi/web/simplemodeler&lt;br /&gt;&lt;/div&gt;&lt;div&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/6492658450252069268-7400859880167301136?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7400859880167301136/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7400859880167301136' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7400859880167301136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7400859880167301136'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/simplemodeler-012.html' title='SimpleModeler 0.1.2リリース'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3395429242225332900</id><published>2009-02-21T09:17:00.003+09:00</published><updated>2009-02-21T09:21:37.409+09:00</updated><title type='text'>ユーザーガイド作成中</title><content type='html'>ただいまユーザーガイド作成中。現在35ページ。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;例題を作りながらCSVからの移入がなかなか便利なのを実感。Excelからの移入も便利そうなので作ろうと思う。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GrailsはMavenと統合したらしい。&lt;/div&gt;&lt;div&gt;SimpleModelerのリポジトリはMavenプロジェクトなので、この統合は都合がよい。&lt;/div&gt;&lt;div&gt;近いうちにSimpleModelerのgrailsサービス(grails生成器)を、Grails on Mavenに対応させたい。&lt;/div&gt;&lt;div&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/6492658450252069268-3395429242225332900?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3395429242225332900/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3395429242225332900' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3395429242225332900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3395429242225332900'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/blog-post_21.html' title='ユーザーガイド作成中'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-1026815453916765715</id><published>2009-02-18T17:51:00.002+09:00</published><updated>2009-02-18T17:53:27.323+09:00</updated><title type='text'>ユーザーガイド</title><content type='html'>クラウド関係の原稿を書いていたので開発は小休止というところ。&lt;div&gt;いずれSimpleModelerにもクラウド向けの機能を入れたい。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;原稿が一段落したので、ユーザーガイドの作成を開始。&lt;/div&gt;&lt;div&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/6492658450252069268-1026815453916765715?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/1026815453916765715/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=1026815453916765715' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/1026815453916765715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/1026815453916765715'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/blog-post.html' title='ユーザーガイド'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-4623758403435960367</id><published>2009-02-10T04:49:00.003+09:00</published><updated>2009-02-10T06:22:38.317+09:00</updated><title type='text'>Annotated CSV</title><content type='html'>日曜日にSimpleModeler 0.1.2bを公開。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/simplemodeler/downloads/list" target="_blank"&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;日曜日のSimpleModeling勉強会のデモで使用した版である。&lt;/div&gt;&lt;div&gt;昨日(月曜)に&lt;a href="http://d.hatena.ne.jp/goldenport"&gt;ブログ&lt;/a&gt;でも公開。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SimpleModelerが取り込めるCSVは、ボクがこの目的で作ったAnnotated CSVという形式のCSVを入力ファイルとする。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;たとえばSimpleModelerに用語を移入するための最小のCSVは以下のように用語を並べたものである。(なお、上記の版ではバグで動かない。(汗))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;div&gt;customer&lt;/div&gt;&lt;div&gt;clerk&lt;/div&gt;&lt;div&gt;goods&lt;/div&gt;&lt;div&gt;buy&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Annotated CSV（以下ACSV)では、先頭に#をつけた行で注記(annotation)を入れていく。注記は、新たな注記があるまで有効となる。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上記のCSVに注記を入れてみる。&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;#actor&lt;/div&gt;&lt;div&gt;customer&lt;/div&gt;&lt;div&gt;clerk&lt;/div&gt;&lt;div&gt;#resource&lt;/div&gt;&lt;div&gt;goods&lt;/div&gt;&lt;div&gt;#event&lt;/div&gt;&lt;div&gt;buy&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;このACSVは、customerとclerkがactor(登場人物)、goodsがresource(道具)、buyがevent(出来事)であることを定義している。(このACSVと次のACSVは上記の版のSimpleModelerで動作する。)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ACSVでは、複数カラムに対する注記も行うことができる。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;#actor,term_ja,caption,brief,description,parts,base,tableName&lt;/div&gt;&lt;div&gt;customer,顧客,customer's caption,customer's brief,customer's description,,,CUSTOMER&lt;/div&gt;&lt;div&gt;clerk,店員,clerk's caption,clerk's brief,customer's description,,,CLERK&lt;/div&gt;&lt;div&gt;#resource&lt;/div&gt;&lt;div&gt;goods,商品,goods's caption,goods's brief,customer's description,,,GOODS&lt;/div&gt;&lt;div&gt;#event&lt;/div&gt;&lt;div&gt;transaction,取引,buy's caption,buy's brief,customer's description,customer;clerk,,,TRANSACTION&lt;/div&gt;&lt;div&gt;buy,購入,buy's caption,buy's brief,customer's description,goods,transaction,BUY&lt;/div&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このACSVでは、先頭行の注記によって、第1カラム：アクター名、第2カラム：日本語用語、第3カラム：見出し、第4カラム：摘要、第5カラム：記述、第6カラム：部品、第7カラム：基底クラス、第8カラム：テーブル名であることを定義している。&lt;/div&gt;&lt;div&gt;2行目と3行目はこの定義が適用されるので、それぞれ以下の意味となる。&lt;/div&gt;&lt;div&gt;[2行目]&lt;/div&gt;&lt;div&gt;アクター名：customer&lt;/div&gt;&lt;div&gt;日本語用語：顧客&lt;/div&gt;&lt;div&gt;見出し：customer's caption&lt;/div&gt;&lt;div&gt;摘要：customer's brief&lt;/div&gt;&lt;div&gt;記述：customer's description&lt;/div&gt;&lt;div&gt;部品:N/A&lt;/div&gt;&lt;div&gt;基底クラス：N/A&lt;/div&gt;&lt;div&gt;テーブル名：CUSTOMER&lt;/div&gt;&lt;div&gt;&lt;div&gt;[3行目]&lt;/div&gt;&lt;div&gt;アクター名：clerk&lt;/div&gt;&lt;div&gt;日本語用語：店員&lt;/div&gt;&lt;div&gt;見出し：clerk's caption&lt;/div&gt;&lt;div&gt;摘要：clerk's brief&lt;/div&gt;&lt;div&gt;記述：clerk's description&lt;/div&gt;&lt;div&gt;部品:N/A&lt;/div&gt;&lt;div&gt;基底クラス：N/A&lt;/div&gt;&lt;div&gt;テーブル名：CLERK&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ACSVでは、注記を追加することができる。&lt;/div&gt;&lt;div&gt;4行目では「#resource」という注記行であるが、これは第1カラムのみ「resource」とし、第2カラム以降は以前の設定を引き継ぐ、という定義となる。&lt;/div&gt;&lt;div&gt;このため、第5行目は以下の意味を持つことになる。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;[3行目]&lt;/div&gt;&lt;div&gt;リソース名：goods&lt;/div&gt;&lt;div&gt;日本語用語：商品&lt;/div&gt;&lt;div&gt;見出し：goods's caption&lt;/div&gt;&lt;div&gt;摘要：goods's brief&lt;/div&gt;&lt;div&gt;記述：goods's description&lt;/div&gt;&lt;div&gt;部品:N/A&lt;/div&gt;&lt;div&gt;基底クラス：N/A&lt;/div&gt;&lt;div&gt;テーブル名：GOODS&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上のようにACSVを用いれば、構造を持ったデータを必要な情報のみを記述して定義することができる。&lt;/div&gt;&lt;div&gt;SimpleModelerでは、このACSVを用いてデータの移入を行うことができるので、初期データの構築などを効率よく行うことができると考えている。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-4623758403435960367?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/4623758403435960367/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=4623758403435960367' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4623758403435960367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/4623758403435960367'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/annotated-csv.html' title='Annotated CSV'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-679787586835693274</id><published>2009-02-07T17:44:00.002+09:00</published><updated>2009-02-07T17:55:29.240+09:00</updated><title type='text'>CSVからMindmapへの変換</title><content type='html'>開発中だったCSVとMindmap(XMind)の移入機能が一応動作。&lt;div&gt;CSVからMindmap(XMind)への変換も動作するようになった。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ここまでの作業で、CSV→Mindmap(XMind)→Scala DSL→Grailsのパスが通った。&lt;/div&gt;&lt;div&gt;つまり:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;CSV形式で用語集などを用意&lt;/li&gt;&lt;li&gt;Mindmap(XMind)に変換&lt;/li&gt;&lt;li&gt;Mindmap(XMind)で大枠のモデルを作成&lt;/li&gt;&lt;li&gt;SimpleModelプロジェクトの足場を生成&lt;/li&gt;&lt;li&gt;Scala DSLに移入&lt;/li&gt;&lt;li&gt;Scala DSLでモデルを編集&lt;/li&gt;&lt;li&gt;Web仕様書を生成し仕様を確認&lt;/li&gt;&lt;li&gt;Grailsの足場を生成&lt;/li&gt;&lt;li&gt;Grailsのドメイン・モデルを生成&lt;/li&gt;&lt;li&gt;Grailsで開発&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;といった手順で開発の一連の手順が繋がったわけである。&lt;/div&gt;&lt;div&gt;またまだデモレベルだけれど、この土台の上で機能を充実させていく予定である。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-679787586835693274?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/679787586835693274/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=679787586835693274' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/679787586835693274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/679787586835693274'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/csvmindmap.html' title='CSVからMindmapへの変換'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-2619819184064359740</id><published>2009-02-02T16:23:00.002+09:00</published><updated>2009-02-02T17:48:05.557+09:00</updated><title type='text'>CSV、マインドマップの移入</title><content type='html'>先週からCSVとマインドマップの移入機能を開発中。&lt;div&gt;CSVからScala DSL、XMindからScala DSLへの基本的な移入を行えるようになった。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;CSVで用語の一覧表、XMindでマインドマップモデルを作成し、ここからScala DSLに移入。&lt;/div&gt;&lt;div&gt;Scala DSLを編集してモデリング。最後にGrailsのプログラムを生成。&lt;/div&gt;&lt;div&gt;といった開発ができるようになる。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;XMindは、XMLや画像ファイルをZipで固めたファイルフォーマットになっているので、マインドマップ情報を操作するのにXMLプログラミングが必要となる。&lt;/div&gt;&lt;div&gt;Relaxerを使ってもよかったのだけれど、今回はScalaのXML機能を試してみた。&lt;/div&gt;&lt;div&gt;これが、なかなか良くできて便利。Scalaは基本機能として木構造を扱うのにとても便利な言語だけれど、XML用文法を最初から持っているため、両機能の相乗効果でXMLの操作がとても楽にできるのである。&lt;/div&gt;&lt;div&gt;Scalaは使っていて日々便利さを実感している。ただ、文法が難しいのでJavaのように一般的になるような感じでもなさそう。SimpleModelerのようなモデル・コンパイラ作成といった分野向け言語ということになるかも。&lt;/div&gt;&lt;div&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/6492658450252069268-2619819184064359740?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/2619819184064359740/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=2619819184064359740' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2619819184064359740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2619819184064359740'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/02/csv.html' title='CSV、マインドマップの移入'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-8138973979599252506</id><published>2009-01-30T07:52:00.003+09:00</published><updated>2009-01-30T15:08:40.056+09:00</updated><title type='text'>scaffold</title><content type='html'>&lt;div&gt;UMLステートチャート図の作成が一段落したので、scaffoldの作成に入った。&lt;/div&gt;&lt;div&gt;プロジェクト作成の基本的なところは動作。&lt;/div&gt;&lt;div&gt;外部データの移入機能を作成開始。まずはCSVから。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Scalaコンパイラのバグらしきものに遭遇。&lt;div&gt;ScalaのRegex便利。extracterが使いやすい。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/6492658450252069268-8138973979599252506?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/8138973979599252506/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=8138973979599252506' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8138973979599252506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8138973979599252506'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/01/scaffold.html' title='scaffold'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-2832732726448825881</id><published>2009-01-29T17:22:00.002+09:00</published><updated>2009-01-29T17:28:18.198+09:00</updated><title type='text'>SimpleModeler 0.1.1</title><content type='html'>昨日SimpleModeler 0.1.1をリリース。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ダウンロードは以下の場所から。&lt;/div&gt;&lt;div&gt;    &lt;p&gt;&lt;a href="http://code.google.com/p/simplemodeler/downloads/list"&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;/a&gt; &lt;/p&gt;&lt;p&gt;使用方法や技術的な考察などは、以下の日記に書いていく予定。&lt;/p&gt;&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/goldenport/"&gt;http://d.hatena.ne.jp/goldenport/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;この日記では、日々の開発ログを書いていく予定にしている。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-2832732726448825881?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/2832732726448825881/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=2832732726448825881' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2832732726448825881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/2832732726448825881'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2009/01/simplemodeler-011.html' title='SimpleModeler 0.1.1'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-9181985029346641168</id><published>2008-12-24T02:40:00.000+09:00</published><updated>2008-12-24T02:41:18.104+09:00</updated><title type='text'>状態機械</title><content type='html'>パワータイプと状態機械をScala DSLで記述する方法について試行錯誤しつつ実装。&lt;br /&gt;&lt;br /&gt;ユースケースによって発生するドメイン・イベントとドメイン・リソースの状態機械を有機的に結びつけることができそうな感触を得た。このあたりは 汎用性を目指すUMLでは、利用者に任されているところなのだけれど、使い方をよほど真剣に考えないと実運用に適用できるレベルで具体化できないので、結 局使われないままになってしまうという結果になっていると思われる。この点をモデリング手法で定型化することで、一般で利用可能にすることが SimpleModelingの狙いの一つである。&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/6492658450252069268-9181985029346641168?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/9181985029346641168/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=9181985029346641168' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/9181985029346641168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/9181985029346641168'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/12/blog-post_24.html' title='状態機械'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-5848886992897487978</id><published>2008-12-16T11:31:00.001+09:00</published><updated>2008-12-16T11:31:41.755+09:00</updated><title type='text'>業務ユースケースのextend</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(51, 51, 51); font-family: 'ms pgothic'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"&gt;このところ業務ユースケースのextendの実装を続けている。今朝、なんとか疎通した。 ちょっとした勘違いで数日デバッグに費やす。プログラミングはどれだけデバッグに耐えられるかという耐性によるところが大きい。 &lt;br /&gt;&lt;br /&gt;ユースケースを扱うツールを書いてみるとよく分かるけれど、ユースケースを準形式的に書くために意識しなければならない点は多い。こういった点まで網羅した参考書は見かけたことがなく、今の専らの参考書は『The Unified Modeling Language Reference Manual 2nd』である。ここに定義しているUMLのメタ・モデルをどのようにDSLで表現するのか、という作業を続けているともいえる。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-5848886992897487978?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/5848886992897487978/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=5848886992897487978' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5848886992897487978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/5848886992897487978'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/12/extend.html' title='業務ユースケースのextend'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-6786737634519897986</id><published>2008-12-11T21:45:00.000+09:00</published><updated>2008-12-11T21:47:11.480+09:00</updated><title type='text'>業務ユースケースフロー</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(51, 51, 51); font-family: 'ms pgothic'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"&gt;SimpleModelerは業務ユースケースのフローを扱う処理を開発中。 既存の手法だと、フローは自然文で書いて後は目視のみなので、実運用上開発に必要な情報量を記述することが困難。 実際にユースケースのフローを扱う処理を書いているとかなりややっこしいことが分かる。こういうややっこしいことを手作業で開発者に強いるのは、まず機能しない。 やはり、定型フォーマットに会わ&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(51, 51, 51); font-family: 'ms pgothic'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"&gt;せて書いた物をツールで検証しかない。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(51, 51, 51); font-family: 'ms pgothic'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-6786737634519897986?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/6786737634519897986/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=6786737634519897986' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6786737634519897986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/6786737634519897986'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/12/blog-post_11.html' title='業務ユースケースフロー'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-7116321427061968717</id><published>2008-12-07T03:43:00.002+09:00</published><updated>2008-12-07T03:54:06.029+09:00</updated><title type='text'>業務ユースケース</title><content type='html'>現在は業務ユースケースの実装を行っている。その中で特にScala DSLでフローを記述する手法を試行錯誤中。&lt;br /&gt;&lt;br /&gt;task("商品を購入する") {&lt;br /&gt;  step_client_worker_system(DS顧客購入().operation("顧客購入")) {&lt;br /&gt;    event_issue(DEE顧客購入()) {&lt;br /&gt;      resource_update(DER商品())&lt;br /&gt;    }&lt;br /&gt;  } mark_is "buy3"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;という定義から:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;14 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E9%A1%A7%E5%AE%A2.html"&gt;顧客&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEO%E9%A1%A7%E5%AE%A2%E6%8B%85%E5%BD%93%E8%80%85.html"&gt;顧客担当者&lt;/a&gt;に&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DD%E5%95%86%E5%93%81%E8%B3%BC%E5%85%A5%E4%BE%9D%E9%A0%BC%E6%96%87%E6%9B%B8.html"&gt;商品購入依頼文書&lt;/a&gt;で&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5.html"&gt;顧客購入&lt;/a&gt;を依頼する。&lt;/li&gt;&lt;li&gt;15 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEO%E9%A1%A7%E5%AE%A2%E6%8B%85%E5%BD%93%E8%80%85.html"&gt;顧客担当者&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E3%82%88%E3%82%8D%E3%81%9A%E8%B2%A9%E5%A3%B2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html"&gt;よろず販売システム&lt;/a&gt;に&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DD%E5%95%86%E5%93%81%E8%B3%BC%E5%85%A5%E4%BE%9D%E9%A0%BC%E6%96%87%E6%9B%B8.html"&gt;商品購入依頼文書&lt;/a&gt;で&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5.html"&gt;顧客購入&lt;/a&gt;を依頼する。&lt;/li&gt;&lt;li&gt;16 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E3%82%88%E3%82%8D%E3%81%9A%E8%B2%A9%E5%A3%B2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html"&gt;よろず販売システム&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEE%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5.html"&gt;顧客購入&lt;/a&gt;の&lt;a class="label-with-help" href="help:help:issue"&gt;発行&lt;/a&gt;を実行する。&lt;/li&gt;&lt;li&gt;17 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E3%82%88%E3%82%8D%E3%81%9A%E8%B2%A9%E5%A3%B2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html"&gt;よろず販売システム&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DER%E5%95%86%E5%93%81.html"&gt;商品&lt;/a&gt;の&lt;a class="label-with-help" href="help:help:update"&gt;更新&lt;/a&gt;を実行する。&lt;/li&gt;&lt;li&gt;18 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E3%82%88%E3%82%8D%E3%81%9A%E8%B2%A9%E5%A3%B2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.html"&gt;よろず販売システム&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEO%E9%A1%A7%E5%AE%A2%E6%8B%85%E5%BD%93%E8%80%85.html"&gt;顧客担当者&lt;/a&gt;に&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DD%E5%95%86%E5%93%81%E8%B3%BC%E5%85%A5%E7%B5%90%E6%9E%9C%E6%96%87%E6%9B%B8.html"&gt;商品購入結果文書&lt;/a&gt;で&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5.html"&gt;顧客購入&lt;/a&gt;の結果を返す。&lt;/li&gt;&lt;li&gt;19 &lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEO%E9%A1%A7%E5%AE%A2%E6%8B%85%E5%BD%93%E8%80%85.html"&gt;顧客担当者&lt;/a&gt;は&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DEA%E9%A1%A7%E5%AE%A2.html"&gt;顧客&lt;/a&gt;に&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/com.yorozu_store.domain/DD%E5%95%86%E5%93%81%E8%B3%BC%E5%85%A5%E7%B5%90%E6%9E%9C%E6%96%87%E6%9B%B8.html"&gt;商品購入結果文書&lt;/a&gt;で&lt;a class="label-with-reference" href="file:///c:/tmp/goldenport.d/create/SimpleModelerBusinessDomain/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5/%E9%A1%A7%E5%AE%A2%E8%B3%BC%E5%85%A5.html"&gt;顧客購入&lt;/a&gt;の結果を返す。&lt;/li&gt;&lt;/ul&gt;というフローを生成できる所まできた。&lt;br /&gt;次の課題は、(1)ユースケース間の関係と(2)エンティティの状態遷移の2つをどのように取り込むのかである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-7116321427061968717?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/7116321427061968717/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=7116321427061968717' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7116321427061968717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/7116321427061968717'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/12/blog-post.html' title='業務ユースケース'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-3234000065904994205</id><published>2008-12-05T15:27:00.002+09:00</published><updated>2008-12-05T16:10:55.374+09:00</updated><title type='text'>TODO</title><content type='html'>この間の日曜日(11/30)にBeProudさんのモデル駆動勉強会でSimpleModeling/SimpleModelerの紹介をしてきました。とてもよいフィードバックを得られて感謝です。&lt;br /&gt;&lt;br /&gt;以下、その中ででたコメントから、SimpleModelerでサポートするとよいと思われる機能をメモしておきます。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;既存のデータベースからのリバース&lt;/li&gt;&lt;li&gt;UML図の自動生成&lt;/li&gt;&lt;/ul&gt;また、懸念事項として、モデルと生成したソースコードのずれの問題が挙がりました。これは、11/14のUMTPでのセッションでも挙げられた問題で、モデルコンパイラのお話しをすると必ずされる質問です。&lt;br /&gt;&lt;br /&gt;これについては&lt;a href="http://d.hatena.ne.jp/goldenport/"&gt;プログラマ日記&lt;/a&gt;にSimpleModelerの方針を書きました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6492658450252069268-3234000065904994205?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/3234000065904994205/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=3234000065904994205' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3234000065904994205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/3234000065904994205'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/12/todo.html' title='TODO'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-8491593431207530939</id><published>2008-11-07T17:21:00.002+09:00</published><updated>2008-11-07T17:32:53.358+09:00</updated><title type='text'>実現したい機能</title><content type='html'>SimpleModelerを実現するための基礎工事が一定の地点まで到達し、基本機能の疎通もできたので0.1としてリリースしました。&lt;div&gt;現在できるのはSimpleModelのドメイン・モデルからJavaクラスとWeb仕様書の生成です。&lt;/div&gt;&lt;div&gt;ただ、JavaクラスはPOJOレベルの単純なものなので、Factory機能や永続化などの機能の自動生成まで行うことを予定しています。『Domain Driven Design』の技術はかなりパターン化されているので、これを自動生成するのが目標です。&lt;/div&gt;&lt;div&gt;Web仕様書は、DSL(Domain Specific Language)で記述したことをYUI(Yahoo UI)を使ってきれいに表示できるようにしたレベルです。ただし、オブジェクトが誰にどのように利用されているのかという情報を「参加」という項目で記述しています。&lt;/div&gt;&lt;div&gt;単に、DSLに記述したことを字句上で変換するだけではなくて、モデルの内容を解析したうえで、プログラマが関心をもつ色々な切り口の情報を記述していくのが目標です。たとえば、ユースケースを実行するとイベントの発生やリソースの状態遷移が起こりますが、逆にイベントやリソースの立場では、どのユースケースに参加する時に自分が生成されたり、状態が変えられたりするのかという点を知りたくなります。こういった情報をツールで抽出することがSimpleModelerに持たせたい機能の一つです。&lt;/div&gt;&lt;div&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/6492658450252069268-8491593431207530939?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/8491593431207530939/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=8491593431207530939' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8491593431207530939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/8491593431207530939'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/11/blog-post.html' title='実現したい機能'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6492658450252069268.post-202088826769456332</id><published>2008-11-05T07:24:00.004+09:00</published><updated>2008-11-05T09:34:27.564+09:00</updated><title type='text'>SimpleModeler 0.1</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;SimpleModelerは、ScalaベースのDSLで記述した&lt;/span&gt;&lt;a href="http://www.amazon.co.jp/dp/4822283666"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;SimpleModeling&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;のモデル体系であるSimpleModelからJavaプログラムや仕様書を生成するためのモデル・コンパイラです。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);  line-height: 21px; font-family:'ms pgothic';"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;開発も端緒についたばかりで、実用に利用するにはまだまだ機能不足ですが、最初の第一歩ということで公開します。&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;SimpleModelerのホームページは以下のURLです。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/simplemodeler/"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;http://code.google.com/p/simplemodeler/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;SimpleModeler 0.1は以下のページからダウンロードできます。ソースコードはSubversionからチェックアウトすることができます。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/simplemodeler/downloads/list"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;http://code.google.com/p/simplemodeler/downloads/list&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;[セットアップ方法]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;上記のURLからsimplemodeler-0.1-setup.jarをダウンロードします。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;このインストールプログラムを以下のように起動します。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;pre id="doc1_id44" class="console"&gt;&lt;kbd class="kbd"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;$ java -jar simplemodeler-0.1-setup.jar&lt;/span&gt;&lt;/kbd&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;インストールディレクトリを聞いてきますので入力します。 デフォルト値で良い場合にはそのままリターンを押下します。&lt;/span&gt;&lt;/p&gt;  &lt;pre id="doc1_id50" class="console"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Install directory [default: C:\usr\local\lib\simplemodeler]:  &lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;コマンドスクリプトのインストールディレクトリを聞いてきますので入力しま す。 デフォルト値で良い場合にはそのままリターンを押下します。  このディレクトリには実行パスが通っている必要があります。(インストール 後に設定しても可)&lt;/span&gt;&lt;/p&gt;  &lt;pre id="doc1_id56" class="console"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Command directory [default: C:\usr\local\bin]:  &lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;以下のように設定の確認をしてくるので良ければ"yes"を入力しま す。&lt;/span&gt;&lt;/p&gt;  &lt;pre id="doc1_id62" class="console"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;[Configuration] Install directory = c:\usr\local\lib\simplemodeler Command directory = c:\usr\local\bin  Type yes to install, no to re-enter, exit to exit Type yes:  &lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;以下のようにインストールが実行されます。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;この例はWindows上での実行例でCommand.com用のBATファイルとCygwin用のシェ ルスクリプトが生成されています。&lt;/span&gt;&lt;/p&gt;  &lt;pre id="doc1_id71" class="console"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Extract archives... Generate script...   script = c:\usr\local\bin\simplemodeler.bat   script = c:\usr\local\bin\simplemodeler Done. &lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;UNIXの場合には、生成されたスクリプトに実行権がついている必要があります。 &lt;/span&gt;&lt;tt&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;chmod&lt;/span&gt;&lt;/tt&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;コマンドを使って実行権を付加してください。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;これでインストールは終了です。 スクリプトのインストールディレクトリにパスが通っていればすぐにでも実行 を行なうことができます。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;以下のように実行できればインストール完了です。&lt;/span&gt;&lt;/p&gt;  &lt;pre id="doc1_id86" class="console"&gt;&lt;kbd class="kbd"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;$ simplemodeler -version&lt;/span&gt;&lt;/kbd&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; Copyright(c) 2008 ASAMI, Tomoharu. All rights reserved. SimpleModeler Version 0.1 (20081105) &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;examples/com.yorozuにサンプルがあるので参照してください。&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&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/6492658450252069268-202088826769456332?l=simplemodeler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simplemodeler.blogspot.com/feeds/202088826769456332/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6492658450252069268&amp;postID=202088826769456332' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/202088826769456332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6492658450252069268/posts/default/202088826769456332'/><link rel='alternate' type='text/html' href='http://simplemodeler.blogspot.com/2008/11/simplemodeler-01.html' title='SimpleModeler 0.1'/><author><name>asami</name><uri>http://www.blogger.com/profile/12083671403528595185</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_4HtJQwbXqEY/S4sSwhKz5fI/AAAAAAAAAFs/IvXW6ca5RGE/S220/profile.jpg'/></author><thr:total>0</thr:total></entry></feed>
