<?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-3274102168139802613</id><updated>2012-02-24T17:18:30.179+09:00</updated><title type='text'>aegif Labo Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>aegif-labo</name><uri>http://www.blogger.com/profile/02743430411685630332</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-1398546810782499053</id><published>2012-02-24T00:00:00.000+09:00</published><updated>2012-02-24T17:18:30.217+09:00</updated><title type='text'>Aegif releases Alfresco checkin/checkout plugin, open source</title><content type='html'>&lt;br /&gt;From an intranet office user's point of view, documents stored in &lt;a href="http://www.alfresco.com/"&gt;Alfresco&lt;/a&gt;&amp;nbsp;usually appear &lt;a href="http://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Ftasks%2Ftuh-maptodrive.html"&gt;as a shared drive&lt;/a&gt;. The user opens its files manager, and can see for instance a "W:" shared drive below their "C:" drive. Employees on a business trip or working from home can achieve the same result by clicking a link to &lt;a href="http://docs.alfresco.com/4.0/index.jsp?topic=%2Fcom.alfresco.enterprise.doc%2Fconcepts%2Fprotocols-about.html"&gt;Alfresco's WebDAV interface&lt;/a&gt;, which also works in the file explorer.&lt;br /&gt;&lt;br /&gt;Alfresco provides a convenient way to checkin/checkout documents, you just drop a file on "CheckInOut" to start modifying it, or push your modifications to the repository.&lt;br /&gt;&lt;br /&gt;Problem: It only works on Windows.&lt;br /&gt;That's why I started a project to have the same level of user-friendliness on Mac and Linux.&lt;br /&gt;&lt;br /&gt;I finished implementing the Linux one, here is a short video showing it in action:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/IMzeaJrN0fg/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IMzeaJrN0fg&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/IMzeaJrN0fg&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;Aegif released this plugin as Open Source.&lt;br /&gt;&lt;br /&gt;It runs on Gnome Nautilus, the default file browser in RedHat, Ubuntu, and most other Linux distributions. Internally, it uses the CMIS protocol to check out documents.&lt;br /&gt;&lt;br /&gt;The &lt;a href="https://github.com/nicolas-raoul/AlfrescoLinuxMacCheckInOut/tree/master/nautilus-scripts"&gt;source code is available&lt;/a&gt; so don't hesitate to modify it.&lt;br /&gt;Also, we must find a way to write a plugin for MacOsX's Finder, but its close source nature is making it &lt;a href="http://stackoverflow.com/questions/1294335/how-to-write-os-x-finder-plugin/3946311#3946311"&gt;less straightforward&lt;/a&gt;. Any idea/contribution is welcome!&lt;br /&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-1398546810782499053?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/1398546810782499053/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/aegif-releases-alfresco-checkincheckout.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1398546810782499053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1398546810782499053'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/aegif-releases-alfresco-checkincheckout.html' title='Aegif releases Alfresco checkin/checkout plugin, open source'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-1682892373581846172</id><published>2012-02-17T13:29:00.000+09:00</published><updated>2012-02-17T13:29:48.204+09:00</updated><title type='text'>AlfrescoのLDAP連携</title><content type='html'>こんにちは。てらしたです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aegif-labo.blogspot.com/2011/11/mac-osxopenldap.html" target="_blank"&gt;前回&lt;/a&gt;からかなり日があいてしまいました。前回の最後に、"次回は、Apache Directory Studioを使って簡単なディレクトリデータベースを作成する方法を紹介したいと思います。"と書いておいてアレなんですが、これに関してはググればけっこう解説記事が出てくるのでやっぱりやめて、今回はAlfrescoのLDAP連携の方法を紹介したいと思います。&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension以下に次のような階層でディレクトリを作成します。&lt;pre class="brush: bash; gutter: false;"&gt;$ mkdir -p &amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension&lt;br /&gt;/subsystems/Authentication/ldap/ldap-test&lt;br /&gt;&lt;/pre&gt;ここで、最後の"ldap-test"というディレクトリ名は、例えば複数のLDAPサーバと連携する必要がある場合にそれぞれを区別するために付ける名前なので、どのような名前でもかまいません。&lt;/li&gt;&lt;li&gt;このディレクトリに以下のようにcommon-ldap-context.xml、ldap-authentication-context.xml、ldap-authentication.propertiesの3つのファイルをコピーします。&lt;pre class="brush:bash; gutter: false;"&gt;$ cp &amp;lt;tomcat_dir&amp;gt;/webapps/alfresco/WEB-INF/classes/alfresco&lt;br /&gt;/subsystems/Authentication/common-ldap-context.xml&amp;nbsp;&lt;br /&gt;&amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension/subsystems&lt;br /&gt;/Authentication/ldap/&lt;br /&gt;&lt;br /&gt;$ cp &amp;lt;tomcat_dir&amp;gt;/webapps/alfresco/WEB-INF/classes/alfresco&lt;br /&gt;/subsystems/Authentication/ldap/ldap-authentication-context.xml&amp;nbsp;&lt;br /&gt;&amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension/subsystems&lt;br /&gt;/Authentication/ldap/ldap-test/&lt;br /&gt;&lt;br /&gt;$ cp &amp;lt;tomcat_dir&amp;gt;/webapps/alfresco/WEB-INF/classes/alfresco&lt;br /&gt;/subsystems/Authentication/ldap/ldap-authentication.properties&amp;nbsp;&lt;br /&gt;&amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension/subsystems&lt;br /&gt;/Authentication/ldap/ldap-test/&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;コピーしたldap-authentication.propertiesを編集します。書き換える必要があるのは主に以下の部分です。&lt;pre class="brush: text; gutter: false;"&gt;# LDAPサーバのURLとポート&lt;br /&gt;ldap.authentication.java.naming.provider.url=ldap://127.0.0.1:389&lt;br /&gt;&lt;br /&gt;# LDAPサーバに接続するLDAPユーザの識別名&lt;br /&gt;#（OpenLDAPの場合はslapd.confにrootdnで指定した識別名）&lt;br /&gt;ldap.synchronization.java.naming.security.principal=cn\=Manager,&lt;br /&gt;dc\=aegif,dc\=jp&lt;br /&gt;&lt;br /&gt;# 上記のユーザのパスワード&lt;br /&gt;#（OpenLDAPの場合はslapd.confでrootpwに設定した値）&lt;br /&gt;ldap.synchronization.java.naming.security.credentials=secret&lt;br /&gt;&lt;/pre&gt;AlfrescoにはLDAP連携の機能として、ユーザ認証をLDAPサーバに委譲する「認証」と、ユーザ情報をLDAPサーバからAlfrescoにインポートする「同期」の2種類が用意されています。認証を委譲する場合の設定箇所は以下の部分です。&lt;pre class="brush: text; gutter: false;"&gt;# 認証時のユーザ名のフォーマット&lt;br /&gt;#（%sの部分にログイン画面でユーザが入力したIDが入ります）&lt;br /&gt;ldap.authentication.userNameFormat=uid=%s,ou=users,dc=aegif,&lt;br /&gt;dc=jp&lt;br /&gt;&lt;/pre&gt;LDAPサーバからユーザ情報を同期させる場合の設定箇所は以下の部分です。ここでは省略していますが、グループを同期させる場合はグループの同期設定もどうファイル内で設定します。&lt;pre class="brush: text; gutter: false;"&gt;# ユーザのobjectclass&lt;br /&gt;ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)&lt;br /&gt;&lt;br /&gt;# ユーザの検索ベース&lt;br /&gt;ldap.synchronization.userSearchBase=ou\=users,dc\=aegif,dc\=jp&lt;br /&gt;&lt;br /&gt;# Alfrescoユーザの「ユーザID」に対応させるアトリビュート&lt;br /&gt;ldap.synchronization.userIdAttributeName=uid&lt;br /&gt;&lt;br /&gt;# Alfrescoユーザの「名」に対応させるアトリビュート&lt;br /&gt;ldap.synchronization.userFirstNameAttributeName=givenName&lt;br /&gt;&lt;br /&gt;# Alfrescoユーザの「姓」に対応させるアトリビュート&lt;br /&gt;ldap.synchronization.userLastNameAttributeName=sn&lt;br /&gt;&lt;br /&gt;# Alfrescoユーザの「メールアドレス」に対応させるアトリビュート&lt;br /&gt;ldap.synchronization.userEmailAttributeName=mail&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;alfresco-grobal.propertiesを編集して、認証のchainの設定を行います。ここで、"ldap-test:ldap"のldap-testの部分は手順1で付けたディレクトリ名と一致している必要があります。&lt;pre class="brush: text; gutter: false;"&gt;authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap-test:ldap&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Alfrescoを起動します。&lt;/li&gt;&lt;/ol&gt;環境によって異なる部分も出てくると思いますが、基本的な設定方法は以上です。手順3で編集したldap-authentication.propertiesには他にも設定項目が細かく用意されており、環境に合わせて柔軟に設定を変えることができるので、色々試してみていただければと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-1682892373581846172?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/1682892373581846172/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/alfrescoldap.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1682892373581846172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1682892373581846172'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/alfrescoldap.html' title='AlfrescoのLDAP連携'/><author><name>terajun</name><uri>http://www.blogger.com/profile/09039721862238185320</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-7329131995755461891</id><published>2012-02-03T09:00:00.000+09:00</published><updated>2012-02-03T09:00:00.671+09:00</updated><title type='text'>TMX(翻訳メモリデータ規格)の紹介</title><content type='html'>&lt;span style="font-size: x-small;"&gt;はじめまして！ hayashiです。&lt;br /&gt;&lt;br /&gt;一介の語学マニアとして「翻訳は休憩」という標語を唱えているせいか、社内の翻訳業務に携わる機会が多々あります。オープンソースという環境も手伝っているかもしれません。&lt;br /&gt;&lt;br /&gt;業務として(主にIT系の)色々なドキュメントを翻訳していく中で、翻訳の効率化、訳の一貫性、ナレッジ管理、メソドロジなどのTo Beについて個人的に考えることもあるのですが、その前提としてまずは、翻訳作業を取り巻くIT環境について考察していこうと思います。初回のテーマは「TMX(翻訳メモリデータ規格)」についてです。&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small; font-weight: bold;"&gt;[翻訳メモリとは]&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;TMXについて説明する前に、「翻訳メモリ」という言葉を説明します。&lt;br /&gt;翻訳作業を取り巻くIT環境といっても、さまざまな側面がありますが、その中でもCAT(Computer Assisted Translation)と呼ばれる翻訳支援の仕組みがあり、その中心として「翻訳メモリTranslation Memory」というものがあります。翻訳をメイン業務として行っている会社・個人では翻訳メモリの使用はほぼ必須となっている感がありますが、それ以外の業界にとってはかなり馴染みの薄い分野なのではないでしょうか。&lt;br /&gt;&lt;br /&gt;翻訳メモリとは、一言で言えば翻訳用の辞書みたいなもので、&lt;a href="http://ja.wikipedia.org/wiki/%E7%BF%BB%E8%A8%B3%E3%83%A1%E3%83%A2%E3%83%AA"&gt;Wikipedia&lt;/a&gt;によれば、&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;「原文と翻訳文を一対としてデータベース化し、その内容を自動的に繰り返し利用することで翻訳を支援するソフトウェアである。」&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;翻訳メモリは、翻訳を仕事とする人の業務の効率化と質の向上を支援するためのソフトウェアである。「翻訳メモリ」は厳密には原文と訳文のデータベースを指し、それを利用するソフトウェアは「翻訳メモリ ツール」と呼ばれる。「翻訳メモリ ツール」のことを「翻訳メモリ」と呼ぶことも多い。&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;br /&gt;とあります。&lt;br /&gt;私自身はふだん&lt;a href="http://www.omegat.org/ja/omegat.html"&gt;OmegaT&lt;/a&gt;というオープンソースの翻訳メモリツールを使用することが多いです。&lt;br /&gt;&lt;br /&gt;対照的な概念として挙げられる自動的な機械翻訳と異なり、翻訳メモリは登録されたメモリに或る程度マッチする訳例を提示するだけで、最終的には翻訳者が手動で訳を確定・補完する必要があります。&lt;br /&gt;&lt;br /&gt;翻訳メモリツールを使った翻訳のメリットとしては、以下のようなものが考えられます。&lt;/span&gt;&lt;span style="font-size: x-small; font-style: italic; font-weight: bold;"&gt;・効率化&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;同じ（あるいは似ている）訳語を手作業で打ち込まない。DRYの精神。&lt;br /&gt;なお、翻訳会社によっては翻訳メモリがカバーできない範囲を見積もりの基準にすることもあります。&lt;/span&gt;&lt;span style="font-size: x-small; font-style: italic; font-weight: bold;"&gt;・一貫性&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;同一のフレーズに対する訳の一貫性が保たれる。特に複数の翻訳者が関わる時など有効。&lt;/span&gt;&lt;span style="font-size: x-small; font-style: italic; font-weight: bold;"&gt;・専門性&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;業界ごとの専門用語に特化した翻訳メモリが作成できる。普通の辞書だと様々な訳から適切なものを選択するのに時間が掛かるor訳が見つからないことがある。&lt;/span&gt;&lt;span style="font-size: x-small; font-style: italic; font-weight: bold;"&gt;・ナレッジの蓄積　&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;実績として登録された訳例自体が翻訳メモリを育てていくので、上手い訳がナレッジとして蓄積される。&lt;/span&gt;&lt;span style="font-size: x-small; font-style: italic; font-weight: bold;"&gt;・様々なファイル形式に対応&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;ツールにより対応するファイル形式は異なるが、XML形式で記述される翻訳メモリを通じて、様々なファイル形式のままで読込・出力が可能。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: bold;"&gt;[TMX 1.4bの仕様について]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;(広義の)翻訳メモリツールの多くでは、(狭義の)翻訳メモリデータのデファクトスタンダードな仕様としてTMX(Traslation Memory eXchange)というフォーマットが利用されており、翻訳メモリデータの交換が可能です。各翻訳メモリツールではこの翻訳メモリデータに対してインポートルーチン／エクスポートルーチンを通じて処理を行います。&lt;br /&gt;&lt;br /&gt;TMXの仕様はLocalisation Industry Standards Association (LISA)という団体によって定められており、現在は1.4bというバージョンが最新のようです(2004年4月リリース)。&lt;br /&gt;&lt;br /&gt;TMX1.4bの仕様は現在なぜかLISAのページではリンク切れで閲覧できない状態ですが、以下のページが原文をLISAから複製しています。&lt;br /&gt;&lt;a href="http://www.gala-global.org/oscarStandards/tmx/"&gt;http://www.gala-global.org/oscarStandards/tmx/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;TMX1.4bの仕様全文を日本語に翻訳したものはないようで、またTMXを紹介する記事も大変少ないため、上記ページをもとに1.4bの仕様を現在hayashiが鋭意翻訳中ですが(またこのブログでお知らせします！）、大まかにその特徴を説明すると、&lt;br /&gt;&lt;br /&gt;・XMLベースのオープンな規格であり、メモリデータの実体は原文に対してタグでマークアップしたデータになる。&lt;br /&gt;・TMXのタグには大きく分けて構造要素とインライン要素の2種類がある。&lt;br /&gt;・構造要素は、原文の分節化に使用される。=&amp;gt; Level 1 実装&lt;br /&gt;・インライン要素は、原文自体がHTMLなどのマークアップ言語である場合の原文のタグに対するメタタグとして使用される。そのためツールの側では、原文のマークアップ構造を保ったまま翻訳ファイルを生成することができる。=&amp;gt; Level 2 実装&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;TMXによるマークアップの使用ケース例：&lt;/span&gt;&lt;br /&gt;・翻訳ユニット（訳語のペア）-&amp;gt; 翻訳ユニットバリアント（各国語での訳）-&amp;gt; セグメント（翻訳対象である任意の分節)、などを構造化する&lt;br /&gt;・ペアになっている原文の開始タグ・終了タグをTMXのタグでマークする&lt;br /&gt;・原文タグの属性が持つ文字列(&amp;lt;a&amp;gt;タグのtitle属性など)をマークする&lt;br /&gt;・原文と訳文で、語順が変わってしまった単語同士をタグの属性を通じて照応させる&lt;br /&gt;　[英語]The black(黒い) cat(猫) eats. ⇔ [仏語]Le chat(猫) noir(黒い) mange.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TMXに準拠したデータの実例として、Alfrescoのローカライズに使われたと思われる翻訳メモリデータが見つかりましたのでリンクを貼っておきます。翻訳メモリがどんなデータになるか、雰囲気が掴めるかと思います。&lt;/span&gt;          &lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;a href="http://forge.alfresco.com/plugins/scmsvn/viewcvs.php/3.2/Explorer/explorer-level2.tmx?root=languagefr&amp;amp;view=markup"&gt;http://forge.alfresco.com/plugins/scmsvn/viewcvs.php/3.2/Explorer/explorer-level2.tmx?root=languagefr&amp;amp;view=markup&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TMX仕様を興味を持って調べ始めた動機の一つとして、翻訳メモリを訳語ごとの文脈(どの業界のドキュメントか、IT系のドキュメントであればそれがメニューバー項目なのか警告メッセージなのか、など）に関連づけて運用することができないか、という考えがありました。&lt;br /&gt;しかしTMXの仕様を見る限り、訳語ペアのセマンティックな属性を指示するようなものは無いようです。&lt;br /&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/3274102168139802613-7329131995755461891?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/7329131995755461891/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/tmx.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7329131995755461891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7329131995755461891'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/tmx.html' title='TMX(翻訳メモリデータ規格)の紹介'/><author><name>Tomoyuki Hayashi</name><uri>http://www.blogger.com/profile/10215720480304806708</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-3521682185299261182</id><published>2012-02-02T11:48:00.000+09:00</published><updated>2012-02-02T11:48:15.386+09:00</updated><title type='text'>Fix the "Enter at least 1 character(s) to search" problem in Alfresco Share</title><content type='html'>&lt;br /&gt;&lt;a href="http://www.alfresco.com/products/collaboration/"&gt;Alfresco Share&lt;/a&gt; is a great ECM web application, but there is one detail that annoys all users, and here is how to fix it.&lt;br /&gt;&lt;br /&gt;The problem: when clicking "Search" in a user/group selection dialog (for instance when creating a workflow), the following message appears: "Enter at least 1 character(s) to search". Which means that if you don't remember the name of the group, you have to try all letters: a,b,c,... hoping to find it. This is an incredible waste of time, and impossible to do in Japanese.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nba0LrkefmY/Txz5dLulFaI/AAAAAAAAAFM/B0WBg9tAerM/s1600/please-enter-at-least-one-character.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://1.bp.blogspot.com/-nba0LrkefmY/Txz5dLulFaI/AAAAAAAAAFM/B0WBg9tAerM/s320/please-enter-at-least-one-character.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A trick is to enter an asterisk * but it does not work on all dialogs, and it is not user-friendly.&lt;br /&gt;So here is how to fix the problem, and make all results appear when you click "Search":&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Stop Alfresco&lt;/li&gt;&lt;li&gt;Open file &lt;i&gt;tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml&lt;/i&gt;&lt;/li&gt;&lt;li&gt;At the end of this file, just before "&lt;i&gt;&amp;lt;/alfresco-config&amp;gt;&lt;/i&gt;", add &lt;a href="https://gist.github.com/1661043"&gt;this XML&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Start Alfresco again.&lt;/li&gt;&lt;/ol&gt;And now the problem should be fixed!&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div&gt;&lt;i&gt;Same message in other languages:&amp;nbsp;Saisir au moins 1 caractère(s),&amp;nbsp;1文字以上入力してください,&amp;nbsp;Geben Sie mindestens 1 Buchstaben ein,&amp;nbsp;Immettere almeno 1 caratteri,&amp;nbsp;Introduzca al menos 1 caracter(es).&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Credits:&amp;nbsp;&lt;a href="http://twitter.com/mikehatfield"&gt;Mike H&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-3521682185299261182?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/3521682185299261182/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/fix-enter-at-least-1-characters-to.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/3521682185299261182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/3521682185299261182'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/02/fix-enter-at-least-1-characters-to.html' title='Fix the &quot;Enter at least 1 character(s) to search&quot; problem in Alfresco Share'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-nba0LrkefmY/Txz5dLulFaI/AAAAAAAAAFM/B0WBg9tAerM/s72-c/please-enter-at-least-one-character.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-698233979012797045</id><published>2012-01-31T08:30:00.000+09:00</published><updated>2012-01-31T10:30:50.824+09:00</updated><title type='text'>Kakasi-java: born again</title><content type='html'>The Japanese language has several symbols, including kanji and hiragana/katakana. In software, we sometimes need to switch a text from one system to the other, and it is difficult.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kakasi.namazu.org/"&gt;Kakasi&lt;/a&gt; and &lt;a href="http://code.google.com/p/mecab"&gt;MeCab&lt;/a&gt; are Open Source libraries dedicated to the problem of converting &lt;a href="http://en.wikipedia.org/wiki/Kanji"&gt;kanji&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Kana"&gt;hiragana or katakana&lt;/a&gt;. For instance they can transform "国際財務報告基準" to "こくさいざいむほうこくきじゅん" or even to "kokusaizaimuhoukokukijun". In clear, it transforms logograms (symbols with multiple possible readings) to syllables.&lt;br /&gt;That is very tricky, because for instance "経緯" can be transformed to "keii", but also to "ikisatsu" depending on the context or speaker. Kakasi sometimes gets it wrong, but usually it is not that bad. MeCab is actually better at that.&lt;br /&gt;&lt;br /&gt;Yesterday I decided to add a "&lt;a href="http://en.wikipedia.org/wiki/Furigana"&gt;furigana&lt;/a&gt;" feature to my &lt;a href="https://market.android.com/details?id=com.ichi2.anki"&gt;Android flashcards app&lt;/a&gt;. Furigana helps people read difficult kanjis, they are used a lot in mass media: books, newspapers, signs, advertisements.&lt;br /&gt;Kakasi and MeCab are both conversion tools, but their internal algorithms are very different, leading to different speed/quality/simplicity characteristics. Before running to MeCab, I decided to also give Kakasi a try.&lt;br /&gt;&lt;br /&gt;Unfortunately, Kakasi is written in C, and thus not easy to run on Android. Porting from C to Java would be possible, but before doing it I had to make sure nobody had ported it already. After multiple searches, I finally found a tar file of the &lt;a href="http://blog.kenichimaehashi.com/?article=13048363750"&gt;blog&lt;/a&gt; of Kenichi Maehashi, saying "現在どこからも入手できないようです". In clear: Kakasi-java can not be found anymore on the Internet, so he uploaded the 0.4 version he miraculously found in his backups.&lt;br /&gt;&lt;br /&gt;To make improvements and fixes possible, I took the source, compiled, tested it, wrote a little README file and created &lt;a href="https://github.com/nicolas-raoul/kakasi-java"&gt;a project for it on GitHub&lt;/a&gt;. Code contributions are welcome :-)&lt;br /&gt;&lt;br /&gt;The best would be a Java port of MeCab, but that does not seem to exist. MeCab has a &lt;a href="http://code.google.com/p/mecab/source/browse/#svn%2Ftrunk%2Fmecab%2Fjava"&gt;Java binding&lt;/a&gt;, but it is not 100% Java, requiring JNI calls, which is not a great idea for Android.&lt;br /&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-698233979012797045?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/698233979012797045/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/kakasi-java-born-again.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/698233979012797045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/698233979012797045'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/kakasi-java-born-again.html' title='Kakasi-java: born again'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-2314994275787046557</id><published>2012-01-30T11:30:00.000+09:00</published><updated>2012-01-30T17:05:17.007+09:00</updated><title type='text'>Templated nodes in Alfresco 4</title><content type='html'>&lt;br /&gt;In the &lt;a href="http://www.alfresco.com/media/releases/2011/10/alfresco-community-4-release/"&gt;new Alfresco 4&lt;/a&gt;, you can now easily use &lt;b&gt;document templates&lt;/b&gt;.&lt;br /&gt;Templates are convenient for forms that employees must fill often, for instance.&lt;br /&gt;Another example: here at Aegif we often write new contracts, always based on the same template.&lt;br /&gt;In this article I explain how to create and use a template in Alfresco.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;First log in &lt;a href="http://www.alfresco.com/products/collaboration/"&gt;Alfresco Share&lt;/a&gt; as admin, and click the repository icon:&lt;a href="http://2.bp.blogspot.com/-VRfe6G1NMds/TyJ2DxY-DnI/AAAAAAAAAF0/goITbGOdBSU/s1600/alfresco-share-repository-link-icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-VRfe6G1NMds/TyJ2DxY-DnI/AAAAAAAAAF0/goITbGOdBSU/s1600/alfresco-share-repository-link-icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;Go to the "Data dictionary" folder, then "Node templates" folder, and upload your template:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NCc4YAhYMiE/TyJxKaQMORI/AAAAAAAAAFk/P5Pkr6yP1YE/s1600/alfresco-share-node-templates.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://3.bp.blogspot.com/-NCc4YAhYMiE/TyJxKaQMORI/AAAAAAAAAFk/P5Pkr6yP1YE/s400/alfresco-share-node-templates.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;That's all!&lt;br /&gt;To use it, click "Create content..." then "By Templated Node...", and you can select a template:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rr1PBYuHd3A/TyJxgLBiOzI/AAAAAAAAAFs/43_v0hx7wvg/s1600/alfresco-share-by-templated-node.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://1.bp.blogspot.com/-rr1PBYuHd3A/TyJxgLBiOzI/AAAAAAAAAFs/43_v0hx7wvg/s400/alfresco-share-by-templated-node.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;The template is then copied to the current folder, and you just have to rename it.&lt;br /&gt;&lt;br /&gt;More technical details:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Can be used to easily create nodes with a &lt;a href="http://wiki.alfresco.com/wiki/Data_Dictionary_Guide#Content_Model_Overview"&gt;custom content model&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Convenient&amp;nbsp;for nodes with a particular set of &lt;a href="http://wiki.alfresco.com/wiki/Aspect"&gt;aspects&lt;/a&gt; and properties.&lt;/li&gt;&lt;li&gt;Node templates must me created by an administrator (or someone who has access to the data dictionary), and are usable by everyone.&lt;/li&gt;&lt;li&gt;I haven't tried but I guess you can use &lt;a href="http://docs.alfresco.com/3.4/index.jsp?topic=%2Fcom.alfresco.Enterprise_3_4_0.doc%2Freferences%2Fpermissions_share.html"&gt;permissions&lt;/a&gt; to show a particular template only to a particular group of users.&lt;/li&gt;&lt;li&gt;I will have to check whether &lt;a href="http://wiki.alfresco.com/wiki/Data_Dictionary_Guide#Child_Associations"&gt;associations&lt;/a&gt; are preserved or not.&lt;/li&gt;&lt;li&gt;As I &lt;a href="https://issues.alfresco.com/jira/browse/ALF-12535"&gt;reported on JIRA&lt;/a&gt;, folder hierarchies can not be used as templated nodes yet.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Do you know any trick with templated nodes? Let us know in the comments :-)&lt;/div&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;Keywords: Créer un contenu... A partir d'un modèle. Inhlat erstellen... Nach Mustervorlagen-Node. Crear contenido... Por nodo de plantilla. Crea contenuto... Per nodo modello.&amp;nbsp;&lt;/i&gt;&lt;i&gt;親近コンテンツ… テンプレートノード&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-2314994275787046557?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/2314994275787046557/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/templated-nodes-in-alfresco-4.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2314994275787046557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2314994275787046557'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/templated-nodes-in-alfresco-4.html' title='Templated nodes in Alfresco 4'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-VRfe6G1NMds/TyJ2DxY-DnI/AAAAAAAAAF0/goITbGOdBSU/s72-c/alfresco-share-repository-link-icon.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-5659296262592746657</id><published>2012-01-27T17:05:00.001+09:00</published><updated>2012-01-27T17:30:26.831+09:00</updated><title type='text'>Alfresco第5回勉強会</title><content type='html'>名倉です。&lt;br /&gt;Alfresco第5回勉強会に行ってきました！&lt;br /&gt;&lt;br /&gt;第5回だけど実は僕は今回が初参加です。&lt;br /&gt;普段は「ライフレイリアン （Liferay担当）なんで、行かないッ！」とか言ってたんですが、今回は過去最大の参加者に対して、ウチのメンバに急遽参加できない人がでちゃったんで勉強会後の懇親会で戦力が足りないってことで、徴用されてしまいました。&lt;br /&gt;&lt;br /&gt;さて、勉強会の内容なんですが２つ発表がありました。&lt;br /&gt;&lt;br /&gt;①「Alfrescoの新UIを作ってみよう」@mryohio (&lt;a href="http://www.slideshare.net/mryoshio/alfrescoactivecmis"&gt;スライド&lt;/a&gt;）&lt;br /&gt;@mryoshio氏によるAlfesco+ActiveCMISでUIを作成する発表でした。&lt;br /&gt;・CMISについて&lt;br /&gt;CMISは以前のブログ記事にも書かれていますが、コンテンツ管理システム (CMS/ECM)の標準規格です。Alfresco,IBM,Liferay,Microsoft,Oracleなどが参加していて、共通のデータモデルやプロパティ、サービスなどを持っています。でも、各社独自の実装があったりだとか、該当するプロパティがないだとかまだまだ共通化しきれていないところとか、あるみたいで、今後の展開はどうなるのか要チェックらしいです。&lt;br /&gt;・ActiveCMIS について&lt;br /&gt;ActiveCMISはRubyによるCMISの実装です。AlfrescoはCMISインタフェースがあるので、ActiveCMIS を使ってAlfrescoのリポジトリにアクセスすることが可能です。&lt;br /&gt;コマンドラインからアクセスする例を見せてもらいました。&lt;br /&gt;[デモ]ActiveCMISとAlfrescoの連携&lt;br /&gt;今回は検索機能と探索機能を見せてもらいました。検索は、前方一致、後方一致、全文検索などができ、探索は、エクスプローラーっぽい画面で、フォルダツリーを移動していました。&lt;br /&gt;ソースは&lt;a href="https://github.com/mryoshio/aldebaran"&gt;ここ&lt;/a&gt;にあるらしいので、気になるひとは参考にしてください。&lt;br /&gt;&lt;br /&gt;②「私はいかにAlfrescoのクイックハックに失敗したか」@opaopa6969 （&lt;a href="http://dl.dropbox.com/u/2069248/reveal.js/index.html#/"&gt;スライド&lt;/a&gt;）&lt;br /&gt;@opaopa6969氏によるAlfrescoを使ったのアプリケーション開発の発表でした。&lt;br /&gt;文書登録編集、閲覧、検索、既読管理、通知期間設定などかなり本格的なコンテンツ管理機能を持ったアプリケーションを作られていて驚きました。&lt;br /&gt;Alfrescoは認証情報の管理や、文書登録編集などで必要になるユーザ一覧の取得などで使用して、&lt;br /&gt;それ以外の部分はAlfrescoの外側で作成し、必要な機能をWebスクリプトでアクセスするようにしてアプリを作られていました。&lt;br /&gt;独自のテーブルを作ってSprigで管理したり、&lt;br /&gt;CIFS経由でコンテンツを追加したときに、自動的にカテゴリをつけるイベントハンドラを作成したりと&lt;br /&gt;実践的な内容が豊富でとても参考になりました。&lt;br /&gt;&lt;br /&gt;今回は初めて、イージフ以外の人に発表していただけました。&lt;br /&gt;後に続く人がどんどん出てきて、活発になっていったらいいなぁ、と思う次第であります。&lt;br /&gt;&lt;br /&gt;さて次回、&lt;a href="http://partake.in/events/7d224e19-625b-421c-87f3-9032701b64f6"&gt;第6回のAlfresco勉強会&lt;/a&gt;は来月2/22（水）にあります！&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/3274102168139802613-5659296262592746657?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/5659296262592746657/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/alfresco5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/5659296262592746657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/5659296262592746657'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/alfresco5.html' title='Alfresco第5回勉強会'/><author><name>Alkan</name><uri>http://www.blogger.com/profile/13988465687923901704</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-6899977672354852832</id><published>2012-01-20T14:10:00.014+09:00</published><updated>2012-01-21T23:07:10.316+09:00</updated><title type='text'>Spring Surf紹介 - ページの作成とページリンク -</title><content type='html'>とたにです。&lt;br /&gt;&lt;a href="http://aegif-labo.blogspot.com/2011/11/spring-surf.html"&gt;前回&lt;/a&gt;から間が空いてしまいましたが、今回はいよいよSpring Surfで新しいページを作成してみます。（前回予告でファイル構成について説明、と書いたのですが実際に操作しながら同時に説明することにしました）&lt;br /&gt;&lt;br /&gt;Spring SurfではSpring Rooを使ってさまざな操作を行えます。せっかくなのでrooを使ってページの作成もやってみましょう。&lt;br /&gt;まずは現在のページ一覧を取得してみます。&lt;br /&gt;&lt;pre class="brush:bash"&gt;roo&amp;gt; surf page list&lt;br /&gt;Id: calendar Path: pages/calendar/calendar.xml&lt;br /&gt;Id: home Path: pages/home/home.xml&lt;br /&gt;Id: products Path: pages/products/products.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;初期に用意されるひな形サイトでは3つのページがあることが分かります。&lt;br /&gt;&lt;br /&gt;ここに新しいページを作ってみましょう。&lt;br /&gt;&lt;pre class="brush:bash"&gt;roo&amp;gt; surf page create --id services --template home&lt;br /&gt;Created SRC_MAIN_WEBAPP/WEB-INF/pages/services&lt;br /&gt;Created SRC_MAIN_WEBAPP/WEB-INF/pages/services/services.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;引数idは文字通りページidです。templateはページを描画する際に使用されるtemplateを指しています。homeという名前のtemplateは初期から用意されているものなので、ここではそれを使うことにします。&lt;br /&gt;&lt;br /&gt;この状態で一度surfを起動してみます。&lt;br /&gt;&lt;pre class="brush:bash"&gt;$ mvn jetty:run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;http://localhost:8180/services&lt;br /&gt;とすると、以下のような中身が空のページが表示されます。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-aeSv6Ni9Bps/Txj32AnHolI/AAAAAAAAAAQ/-ZMko0fP6is/s1600/image1-services.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 88px;" src="http://2.bp.blogspot.com/-aeSv6Ni9Bps/Txj32AnHolI/AAAAAAAAAAQ/-ZMko0fP6is/s320/image1-services.png" alt="" id="BLOGGER_PHOTO_ID_5699577835686437458" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ただ残念なことに&lt;br /&gt;http://localhost:8180/&lt;br /&gt;にアクセスしても新しく作成したservicesページがタブに表示されない状態です。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-irpl9s4SKjo/Txj4BjNzjEI/AAAAAAAAAAc/HEwP5IBVZFw/s1600/imge02-home.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 138px;" src="http://4.bp.blogspot.com/-irpl9s4SKjo/Txj4BjNzjEI/AAAAAAAAAAc/HEwP5IBVZFw/s320/imge02-home.png" alt="" id="BLOGGER_PHOTO_ID_5699578033954065474" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次はこのタブにservicesページを追加してみましょう。&lt;br /&gt;タブに表示されるページの一覧は、ページhomeからのアソシエーションとして設定されています。ではservicesもhomeのアソシエーション先に設定していきましょう。&lt;br /&gt;&lt;br /&gt;まずはhomeの現在のアソシエーションを表示してみます。&lt;br /&gt;&lt;pre class="brush:bash"&gt;roo&amp;gt; surf page association list --sourceId home&lt;br /&gt;Page: products Type: child&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ではservicesにアソシエーションを設定してみましょう。&lt;br /&gt;&lt;pre class="brush:bash"&gt;roo&amp;gt; surf page association create ----sourceId home --destId services      &lt;br /&gt;Managed SRC_MAIN_WEBAPP/WEB-INF/pages/home/home.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;もう一度アソシエーションを確認するとservicesが増えていることが確認できます。&lt;br /&gt;&lt;pre class="brush:bash"&gt;roo&amp;gt; surf page association list --sourceId home&lt;br /&gt;Page: products Type: child&lt;br /&gt;Page: services Type: child&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;この状態でもう一度サイトにアクセスしてみましょう。&lt;br /&gt;servicesがタブに追加されていることがわかりますね。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Mqp7yP8Hw38/Txj4HwzpE5I/AAAAAAAAAAo/nRxaFuO4n9Y/s1600/image3-added-services.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://3.bp.blogspot.com/-Mqp7yP8Hw38/Txj4HwzpE5I/AAAAAAAAAAo/nRxaFuO4n9Y/s320/image3-added-services.png" alt="" id="BLOGGER_PHOTO_ID_5699578140681638802" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここでページやアソシエーションがsurf上でどのように記述されているかを確認してみます。&lt;br /&gt;まずはservicesページですが、ページの本体は&lt;br /&gt;src/main/webapp/WEB-INF/pages/services/services.xml&lt;br /&gt;にあります。&lt;br /&gt;中身は以下のようになっていると思いますが、template-instanceがhomeになっているのが作成時のパラメータと対応していることが分かると思います。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&amp;gt;&lt;br /&gt; &amp;lt;page&amp;gt;&lt;br /&gt;    &amp;lt;id&amp;gt;services&amp;lt;/id&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;services&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;template-instance&amp;gt;home&amp;lt;/template-instance&amp;gt;&lt;br /&gt;    &amp;lt;authentication&amp;gt;none&amp;lt;/authentication&amp;gt;&lt;br /&gt;    &amp;lt;components/&amp;gt;&lt;br /&gt;&amp;lt;/page&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次にアソシエーションですがアソシエーションはhomeページのxmlファイル上に定義されています。&lt;br /&gt;src/main/webapp/WEB-INF/pages/home/home.xml&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;page&amp;gt;&lt;br /&gt;  &amp;lt;id&amp;gt;home&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;title&amp;gt;Home Page&amp;lt;/title&amp;gt;&lt;br /&gt;  &amp;lt;template-instance&amp;gt;home&amp;lt;/template-instance&amp;gt;&lt;br /&gt;  &amp;lt;authentication&amp;gt;none&amp;lt;/authentication&amp;gt;&lt;br /&gt;  &amp;lt;order-id&amp;gt;0&amp;lt;/order-id&amp;gt;&lt;br /&gt;  &amp;lt;components&amp;gt;&lt;br /&gt;    &amp;lt;component&amp;gt;&lt;br /&gt;      &amp;lt;region-id&amp;gt;main&amp;lt;/region-id&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;/home/main&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;    &amp;lt;component&amp;gt;&lt;br /&gt;      &amp;lt;region-id&amp;gt;side&amp;lt;/region-id&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;/home/side&amp;lt;/url&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;  &amp;lt;/components&amp;gt;&lt;br /&gt;  &amp;lt;associations&amp;gt;&lt;br /&gt;    &amp;lt;page-association&amp;gt;&lt;br /&gt;      &amp;lt;dest-id&amp;gt;products&amp;lt;/dest-id&amp;gt;&lt;br /&gt;      &amp;lt;assoc-type&amp;gt;child&amp;lt;/assoc-type&amp;gt;&lt;br /&gt;    &amp;lt;/page-association&amp;gt;&lt;br /&gt;    &amp;lt;page-association&amp;gt;&lt;br /&gt;      &amp;lt;dest-id&amp;gt;services&amp;lt;/dest-id&amp;gt;&lt;br /&gt;      &amp;lt;assoc-type&amp;gt;child&amp;lt;/assoc-type&amp;gt;&lt;br /&gt;    &amp;lt;/page-association&amp;gt;&lt;br /&gt;  &amp;lt;/associations&amp;gt;&lt;br /&gt;&amp;lt;/page&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;productsとservicesが両方ともタイプchildのアソシエーションとして定義されていることが分かります。&lt;br /&gt;実はrooのcreate page associationでtype引数を省略するとchildとしてアソシエーションが作成されます。&lt;br /&gt;&lt;br /&gt;現時点ではここで定義されたアソシエーションがあるとなぜタブ上にページが表示されるのか、そもそもあのタブはどこで定義されているのか、謎は残っていますが、長くなったので今回はここまでにして、次回そのあたりを探ってみます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aegif-labo.blogspot.com/2011/10/spring-surf.html"&gt;第1回: Spring Surfの紹介 - 概要の概要 -&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aegif-labo.blogspot.com/2011/11/spring-surf.html"&gt;第2回:Spring Surf紹介 - インストールと最初の起動 -&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-6899977672354852832?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/6899977672354852832/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/spring-surf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6899977672354852832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6899977672354852832'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2012/01/spring-surf.html' title='Spring Surf紹介 - ページの作成とページリンク -'/><author><name>Totani</name><uri>http://www.blogger.com/profile/05482818344212023797</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-aeSv6Ni9Bps/Txj32AnHolI/AAAAAAAAAAQ/-ZMko0fP6is/s72-c/image1-services.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-1642207455701730615</id><published>2011-12-24T21:05:00.000+09:00</published><updated>2011-12-24T21:05:19.184+09:00</updated><title type='text'>娘が1歳になりました！</title><content type='html'>こんにちは。大谷です。&lt;br /&gt;&lt;br /&gt;今回は全く技術的なことに触れず、aegifという会社での働き方について紹介したいと思います。&lt;br /&gt;&lt;br /&gt;　私事で恐縮なのですが、先日娘が1歳の誕生日を迎えました。誕生日プレゼントとしておもちゃのピアノをプレゼントしましたが、今はまだ暴力的に殴りつけるor乗っかるを繰り返しています。落ち着きが無く、いたずらっ娘で、よく癇癪をおこし、暴力的で、その割には祖父母にあまりサービスせずにがっかりさせるような娘ですが、無事1歳を迎えられたことをただただ嬉しく思います。ここまで来れたのには、妻の多大なる努力と、祖父母の協力のおかげなので、感謝の気持ちを新たにしているところです。そして、その中で自分がどれだけ貢献できたのか、少し思い返すことにしてみました。&lt;br /&gt;&lt;br /&gt;　妻娘の退院後2週間は義母に寝泊まりしてもらい、その間自分は通常どおりの業務をしていました。その後1カ月は会社と交渉して自宅作業としてもらい、娘の世話と仕事を両立する生活でした。その後は結局通常どおりの業務に戻り、出社前に娘の世話をする程度しか関われていません。もちろん休日はできる限り家事・育児に関わり、妻娘が風邪をひいたときなどには有休や自宅作業などで家事や娘の世話をしています。&lt;br /&gt;&lt;br /&gt;　このように書きだしてみると、ちょっと残念ですが、自分が思い描いていたよりも育児への関与が少ないような気がしています。娘はちょうど1歳になったところなので、これから加速度的に成長・変化していき、コミュニケーションもさらに取れるようになっていくでしょう。今後は今まで以上に育児に積極的に関わり、娘や妻との時間を取れるようにしていこうと考えています。そのうち親子でピアノを連弾できたらいいななど、たくさんある夢を少しでも多く実現したいと思います。もちろんそのために会社の制度をフル活用していこうと考えていますし（制度化されてないところは最大限自分に有利なように解釈しますよ）、aegifという会社はそういう関わり方を推奨している会社だと思います。&lt;br /&gt;&lt;br /&gt;　aegifという会社はまだ小さな会社なので、整備されていない制度は必要が生じた時にその必要に応じて整備されていきます（その整備に直接関わることができます）。そして、もちろんビジネスの状況に依るところもありますが、ワークスタイルの自由を最大限尊重してくれます。このような会社でワークライフバランスを考えつつ働きたいという方がいらっしゃいましたら、是非採用に応募していただければと思います。&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/3274102168139802613-1642207455701730615?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/1642207455701730615/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1642207455701730615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1642207455701730615'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/1.html' title='娘が1歳になりました！'/><author><name>Tasuku Otani</name><uri>http://www.blogger.com/profile/18132336091954266906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-6196770706208922968</id><published>2011-12-16T20:31:00.000+09:00</published><updated>2011-12-16T20:31:01.360+09:00</updated><title type='text'>AlfrescoとTesseract OCR</title><content type='html'>こんにちは！aegifの大谷です。&lt;br /&gt;今回は、AlfrescoのOCR連携についてお話ししたいと思います。&lt;br /&gt;&lt;br /&gt;私自身、営業に同行してお客様から直接お話しを伺う機会が少なくないのですが、その中でOCR連携というトピックが話題にのぼり、実際にデモを行うこともあります。弊社ではOCR連携のデモ環境を構築する際に、googleが提供するオープンソースのOCRエンジンであるTesseract OCRをよく利用しています。&lt;br /&gt;以下ではAlfrescoとTesseract OCRを連携させる方法の一例を紹介しますので、参考にしていただければと思います。&lt;br /&gt;&lt;br /&gt;1. Alfrescoをインストールし、基本的な設定を行います（こちらの&lt;a href="http://www.slideshare.net/mryoshio/alfresco-install" target="_blank"&gt;スライド&lt;/a&gt;が参考になると思います）&lt;br /&gt;&lt;br /&gt;2. Tesseract OCRをインストールします（こちらの&lt;a href="http://code.google.com/p/tesseract-ocr/" target="_blank"&gt;サイト&lt;/a&gt;からダウンロードできます。インストール時にjapanese language dataにチェックを入れてください）&lt;br /&gt;&lt;br /&gt;3. Tesseract OCRをキックするためのスクリプトを作成します（以下はWindowsでtiff形式のファイルをOCR処理する例。ファイル名はocr.batとしておきます。tmpディレクトリの作成も忘れずに！）&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:java"&gt;@echo off&lt;br /&gt;if "%1" == "" goto end&lt;br /&gt;if "%2" == "" goto end&lt;br /&gt;set tmpdir=c:\alfresco\tmp\&lt;br /&gt;set ocrfilename=%tmpdir%%~n1.tif&lt;br /&gt;copy /B /Y %1 "%ocrfilename%"&lt;br /&gt;tesseract "%ocrfilename%" %~dpn2 -l jpn&lt;br /&gt;del "%ocrfilename%"&lt;br /&gt;:end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. &amp;lt;tomcat_dir&amp;gt;/shared/classes/alfresco/extension/ に以下の内容のファイル ocrtiff-transform-context.xml を作成します&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;  &amp;lt;bean id="transformer.worker.ocr.tiff" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker"&amp;gt;&lt;br /&gt;    &amp;lt;property name="mimetypeService"&amp;gt;&lt;br /&gt;      &amp;lt;ref bean="mimetypeService" /&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;property name="checkCommand"&amp;gt;&lt;br /&gt;      &amp;lt;bean class="org.alfresco.util.exec.RuntimeExec"&amp;gt;&lt;br /&gt;        &amp;lt;property name="commandsAndArguments"&amp;gt;&lt;br /&gt;          &amp;lt;map&amp;gt;&lt;br /&gt;            &amp;lt;entry key=".*"&amp;gt;&lt;br /&gt;              &amp;lt;list&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;C:/alfresco/ocr.bat&amp;lt;/value&amp;gt;&lt;br /&gt;              &amp;lt;/list&amp;gt;&lt;br /&gt;            &amp;lt;/entry&amp;gt;&lt;br /&gt;          &amp;lt;/map&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="errorCodes"&amp;gt;&lt;br /&gt;          &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;      &amp;lt;/bean&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;property name="transformCommand"&amp;gt;&lt;br /&gt;      &amp;lt;bean class="org.alfresco.util.exec.RuntimeExec"&amp;gt;&lt;br /&gt;        &amp;lt;property name="commandsAndArguments"&amp;gt;&lt;br /&gt;          &amp;lt;map&amp;gt;&lt;br /&gt;            &amp;lt;entry key=".*"&amp;gt;&lt;br /&gt;              &amp;lt;list&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;C:/alfresco/ocr.bat&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;${source}&amp;lt;/value&amp;gt;&lt;br /&gt;                &amp;lt;value&amp;gt;${target}&amp;lt;/value&amp;gt;&lt;br /&gt;              &amp;lt;/list&amp;gt;&lt;br /&gt;            &amp;lt;/entry&amp;gt;&lt;br /&gt;          &amp;lt;/map&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="errorCodes"&amp;gt;&lt;br /&gt;          &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;      &amp;lt;/bean&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;property name="explicitTransformations"&amp;gt;&lt;br /&gt;      &amp;lt;list&amp;gt;&lt;br /&gt;        &amp;lt;bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails"&amp;gt;&lt;br /&gt;          &amp;lt;property name="sourceMimetype"&amp;gt;&amp;lt;value&amp;gt;image/tiff&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;          &amp;lt;property name="targetMimetype"&amp;gt;&amp;lt;value&amp;gt;text/plain&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;/bean&amp;gt;&lt;br /&gt;      &amp;lt;/list&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;bean id="transformer.ocr.tiff" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer"&amp;gt;&lt;br /&gt;    &amp;lt;property name="worker"&amp;gt;&lt;br /&gt;      &amp;lt;ref bean="transformer.worker.ocr.tiff" /&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. Alfrescoを起動します&lt;br /&gt;&lt;br /&gt;6.&amp;nbsp; http://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/alfresco/service/mimetypes にアクセスし、image/tiffからtext/plainへの変換が利用可能になっていることを確認します&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-mzLJfwaoaS8/Turi4Nb_oiI/AAAAAAAAABQ/9lUOGjzv8xs/s1600/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258903.png" imageanchor="1"&gt;&lt;img border="0" height="379" src="http://4.bp.blogspot.com/-mzLJfwaoaS8/Turi4Nb_oiI/AAAAAAAAABQ/9lUOGjzv8xs/s640/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258903.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;7. 適当なフォルダを作成し、tiff画像からテキスト形式へのコンテンツ変換のルールを設定します&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-B3QcrcRPDBE/Turhhv0sMXI/AAAAAAAAABI/QhxtoYTGQ_0/s1600/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258901.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="440" src="http://1.bp.blogspot.com/-B3QcrcRPDBE/Turhhv0sMXI/AAAAAAAAABI/QhxtoYTGQ_0/s640/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258901.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;以上で設定は終わりです。正しく設定されていると、ルールを設定したフォルダにtiffファイルをアップロードしたタイミングでOCR処理が自動実行され、同名のテキストファイルが作成されます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jZzH8KVx2DA/TurlCswUtTI/AAAAAAAAABY/-OiTT-zmFnU/s1600/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258902.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="380" src="http://1.bp.blogspot.com/-jZzH8KVx2DA/TurlCswUtTI/AAAAAAAAABY/-OiTT-zmFnU/s640/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258902.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;今回は、Alfrescoが用意するコンテンツ変換フレームワークと外部コマンド実行フレームワークを利用し、xmlベースの設定のみでOCRと連携するサンプルを紹介しました。ここでは詳しく説明しませんが、簡単なスクリプトを書くことで、OCRで抽出したテキストデータを元のtiffコンテンツの属性として登録するなど、さらに実用的な連携を行うことも可能です。&lt;br /&gt;&lt;br /&gt;このように、Alfrescoはカスタマイズを容易にするために（もちろんAlfresco自体の開発を容易にするためでもありますが）様々な仕組みを用意しています。それらについては今後折を見て、具体的な例を交えつつ触れていきたいと思いますので、引き続きよろしくお願いいたします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-6196770706208922968?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/6196770706208922968/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/alfrescotesseract-ocr.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6196770706208922968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6196770706208922968'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/alfrescotesseract-ocr.html' title='AlfrescoとTesseract OCR'/><author><name>Tasuku Otani</name><uri>http://www.blogger.com/profile/18132336091954266906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-mzLJfwaoaS8/Turi4Nb_oiI/AAAAAAAAABQ/9lUOGjzv8xs/s72-c/%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2597%25E3%2583%259C%25E3%2583%25BC%25E3%2583%258903.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-6916462398809210945</id><published>2011-12-12T16:03:00.001+09:00</published><updated>2011-12-12T16:08:18.186+09:00</updated><title type='text'>CMISとApache Chemistryと私</title><content type='html'>mryoshioです。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;意味深なタイトルですが意味は無いです。&lt;/div&gt;&lt;div&gt;皆さんは&lt;a href="http://chemistry.apache.org/"&gt;Apache Chemistry&lt;/a&gt;や&lt;a href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services"&gt;CMIS&lt;/a&gt;という言葉をご存じでしょうか。&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;CMISというのはContent Management Interoperability Servicesの略であり、&lt;/div&gt;&lt;div&gt;コンテンツ管理システム (CMS/ECM)の標準規格です。&lt;/div&gt;&lt;div&gt;これを使うことで、異なるベンダのバックエンドデータへのアクセスが容易になります。&lt;/div&gt;&lt;div&gt;たとえば、弊社で扱っている&lt;a href="http://www.alfresco.com/jp/"&gt;Alfresco&lt;/a&gt;はCMISインターフェースをもつため、&lt;/div&gt;&lt;div&gt;CMIS準拠のクライアントライブラリを使うことでAlfrescoリポジトリに対する&lt;/div&gt;&lt;div&gt;ドキュメントの作成や削除を簡単に行えます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;次にApache Chemistryについてですが、&lt;/div&gt;&lt;div&gt;これはCMISに準拠したクライアントやサーバを実装するためのJavaライブラリです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;実際にこのライブラリを使い、&lt;/div&gt;&lt;div&gt;JavaコンソールプログラムからAlfrescoリポジトリ内を操作してみましょう。&lt;/div&gt;&lt;div&gt;(Alfresco Community Edition 3.4dに対し動作確認済み)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;リポジトリへの接続&lt;/li&gt;&lt;pre class="brush: java"&gt;SessionFactory sessionFactory = SessionFactoryImpl.newInstance();&lt;br /&gt;Map parameter = new HashMap();&lt;br /&gt;parameter.put(SessionParameter.USER, "admin");&lt;br /&gt;parameter.put(SessionParameter.PASSWORD, "admin");&lt;br /&gt;parameter.put(SessionParameter.ATOMPUB_URL, ALFRSCO_ATOMPUB_URL);&lt;br /&gt;parameter.put(SessionParameter.BINDING_TYPE,BindingType.ATOMPUB.value());&lt;br /&gt;parameter.put(SessionParameter.REPOSITORY_ID, REPOSITORY_ID);&lt;br /&gt;session = sessionFactory.createSession(parameter);&lt;br /&gt;return session.getRootFolder();&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;フォルダの作成&lt;/li&gt;&lt;pre class="brush: java"&gt;Map props = new HashMap();&lt;br /&gt;props.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");&lt;br /&gt;props.put(PropertyIds.NAME, newFolderName);&lt;br /&gt;Folder newFolder = target.createFolder(props);&lt;br /&gt;return newFolder;&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;ドキュメントの作成&lt;/li&gt;&lt;pre class="brush: java"&gt;Map props = new HashMap();&lt;br /&gt;props.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");&lt;br /&gt;props.put(PropertyIds.NAME, newDocName);&lt;br /&gt;System.out.println("This is a test document: " + newDocName);&lt;br /&gt;String content = "aegif Mind Share Leader Generating New Paradigms by aegif corporation.";&lt;br /&gt;byte[] buf = null;&lt;br /&gt;try {    &lt;br /&gt;  buf = content.getBytes("UTF-8");&lt;br /&gt;} catch (UnsupportedEncodingException e) {    &lt;br /&gt;  e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;ByteArrayInputStream input = new ByteArrayInputStream(buf);&lt;br /&gt;ContentStream contentStream = session.getObjectFactory().createContentStream(&lt;br /&gt;    newDocName, buf.length, "text/plain; charset=UTF-8", input);&lt;br /&gt;target.createDocument(props, contentStream, VersioningState.MAJOR);&lt;br /&gt;&lt;/pre&gt;&lt;li&gt;ドキュメントの削除&lt;/li&gt;&lt;pre class="brush: java"&gt;try {    &lt;br /&gt;  CmisObject object = session.getObjectByPath(target.getPath() + delDocName);    &lt;br /&gt;  Document delDoc = (Document) object;    &lt;br /&gt;  delDoc.delete(true);&lt;br /&gt;} catch (CmisObjectNotFoundException e) {    &lt;br /&gt;  System.err.println("Document is not found: " + delDocName);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;いかがだったでしょうか。&lt;/div&gt;&lt;div&gt;皆さんが想像されていたものと勝手が違ったかもしれません。&lt;/div&gt;&lt;div&gt;しかし、同じクライアントコードを使い&lt;/div&gt;&lt;div&gt;異なるリポジトリ (e.g. Alfresco, SharePoint)を操作できるようになれば&lt;/div&gt;&lt;div&gt;そのメリットは十分にあると言えるでしょう。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今回はApache Chemistryを使いましたが、&lt;/div&gt;&lt;div&gt;たとえばRubyベースであれば、CMISクライアント実装の&lt;a href="http://xaop.com/labs/activecmis/"&gt;ActiveCMIS&lt;/a&gt;があります。&lt;/div&gt;&lt;div&gt;もし興味を持たれた方はこちらも併せてぜひご覧ください。&lt;br /&gt;&lt;br /&gt;なお、サンプルコードを含むJavaクラスは&lt;a href="https://gist.github.com/1465530"&gt;ここ&lt;/a&gt;にあります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;@mryoshio&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/3274102168139802613-6916462398809210945?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/6916462398809210945/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/cmisapache-chemistry.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6916462398809210945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6916462398809210945'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/cmisapache-chemistry.html' title='CMISとApache Chemistryと私'/><author><name>mryoshio</name><uri>http://www.blogger.com/profile/09009940818524118264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-7856875747685236137</id><published>2011-12-02T11:53:00.000+09:00</published><updated>2011-12-02T15:06:19.393+09:00</updated><title type='text'>Alfresco勉強会 #4</title><content type='html'>こんにちは！大谷です。&lt;br /&gt;&lt;br /&gt;先日開催された&lt;a href="http://partake.in/events/45ffd5e7-f93a-4050-bc51-5258e53527b3"&gt;第4回Alfresco勉強会&lt;/a&gt;に参加してきましたので、今回はその内容について書きたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;「Alfresco Java Foundation API」&lt;/span&gt;@mryoshio (&lt;a href="http://www.slideshare.net/mryoshio/alfresco-java-foundation-api"&gt;スライド&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;@mryoshioによるAlfrescoのJava APIに関する発表。Alfrescoが提供するJavaのAPIであるJava Foundation APIの解説と、Web Scriptのロジック記述をJavaで行うサンプルの紹介がありました。&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;Web Scriptについて&lt;/dt&gt;&lt;dd&gt;Web Scriptに関する基本的な説明と、ロジックをJavaで実装するメリットについて説明がありました。APIの豊富さとパフォーマンスの点でJavaScripよりもJavaの方に分があるとのことです。&lt;/dd&gt;&lt;dt&gt;Java Foundation APIについて&lt;/dt&gt;&lt;dd&gt;Java Foundation APIの基本的な説明と提供しているサービスの例、アクセス方法についての解説がありました。Spring Beanとしてインタフェースが公開されているため、DIによって簡単にAPIを利用することができます。&lt;/dd&gt;&lt;dt&gt;[デモ] Java Foundation APIの使い方 &lt;/dt&gt;&lt;dd&gt;Web Scriptのロジック記述にJavaを用いる場合の具体的な作成・設定手順について、デモを交えながらの説明がありました。コードをgithubで公開しているそうなので是非実際に動かして確認してみてください。&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;「Alfresco 4.0 Solr連携を試してみた！」&lt;/span&gt;@_tasky (&lt;a href="http://www.slideshare.net/TasukuOtani/alfrescostudy4alfresco4solrintegration"&gt;スライド&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;続いては、@_taskyによるAlfresco Solr連携に関する発表。Alfresco 4.0で正式対応した全文検索アプリケーションSolrについて、簡単な説明と、これまでのデフォルト全文検索エンジンであるLuceneとの利用シーン比較、連携の設定方法について紹介がありました。&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;Solrについて&lt;/dt&gt;&lt;dd&gt;Solrに関する基本的な説明。SolrはLuceneのHTTPラッパのようなものだそうです（コアの全文検索エンジンにLuceneを使っています）&lt;/dd&gt;&lt;dt&gt;Solr vs Lucene&lt;/dt&gt;&lt;dd&gt;それぞれの利用シーンについての説明。スケーラビリティを求める場合はSolrを、in-transaction indexingが必要な場合はLuceneを選択した方がよいようです。&lt;/dd&gt;&lt;dt&gt;[デモ]セットアップと動作確認&lt;/dt&gt;&lt;dd&gt;Alfrescoが公開しているSolr連携用モジュールを使ったセットアップ方法の紹介。Alfrescoが提供するzipファイルの中に必要なファイルが全て入っているので、それらを用いて、Solrサーバ導入、Alfresco設定、TomcatのSSL設定を行うだけでセットアップが完了します。&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;今回の参加者は6名でしたが、Alfrescoを使った開発を行っている方やソリューションの候補として製品選定をされている方が参加していたため、技術的なディスカッションからビジネス的な質問まで幅広く情報交換が行われました。今後も両者バランス良く（というよりも、あまりその観点にとらわれず、自由に）やっていければと思います。&lt;br /&gt;次回については&lt;a href="http://partake.in/events/1116e833-9f41-46a5-94ce-2329c1937c48"&gt;こちら&lt;/a&gt;で参加登録できますので、興味がある方は是非ご参加ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-7856875747685236137?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/7856875747685236137/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/alfresco-4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7856875747685236137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7856875747685236137'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/12/alfresco-4.html' title='Alfresco勉強会 #4'/><author><name>Tasuku Otani</name><uri>http://www.blogger.com/profile/18132336091954266906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-3986374394379635666</id><published>2011-11-27T20:22:00.000+09:00</published><updated>2011-11-27T20:26:17.159+09:00</updated><title type='text'>AnkiDroid 1.0 released!</title><content type='html'>Yesterday I released version 1.0 of&amp;nbsp;&lt;a href="https://market.android.com/details?id=com.ichi2.anki"&gt;AnkiDroid&lt;/a&gt;&amp;nbsp;(flashcards app for Android).&lt;br /&gt;With already 140.000 users, why is AnkiDroid only at version 1.0?&lt;br /&gt;We released many 0.x versions, and now we feel the app is ready to be called 1.0!&lt;br /&gt;The number of users has been multiplied by 8 in less than a year:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YZdi6p722PM/Ts9EMy9BMLI/AAAAAAAAAE4/aVvnPr-b4hM/s1600/active-installs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-YZdi6p722PM/Ts9EMy9BMLI/AAAAAAAAAE4/aVvnPr-b4hM/s1600/active-installs.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;With 1.0, today is a good opportunity to describe how the AnkiDroid community of contributors works.&lt;br /&gt;&lt;br /&gt;1) We do all we can to be friendly with all newcomers. We answer all questions and thank users for using the product.&lt;br /&gt;&lt;br /&gt;2) We encourage everybody to participate, at every level. We introduce users to the &lt;a href="http://code.google.com/p/ankidroid/issues/list"&gt;bug tracker&lt;/a&gt;, and liberally give them rights to edit the &lt;a href="http://code.google.com/p/ankidroid/wiki/Index"&gt;Wiki&lt;/a&gt;, which makes them feel they are contributors rather than just users. Similarly, everyone is able to fork and edit the &lt;a href="https://github.com/nicolas-raoul/Anki-Android/network"&gt;code&lt;/a&gt;, without having to ask the permission to anyone. &lt;a href="http://crowdin.net/project/ankidroid"&gt;Localization&lt;/a&gt; is the archetype of this spirit: Anyone can translate strings, and they are included in AnkiDroid automatically. Like on Wikipedia, consensus is the rule.&lt;br /&gt;&lt;br /&gt;Why do we need to keep involving more and more people? Well, contributors have day jobs or exams, so their individual participation includes periods of activity alternating with periods of inactivity. See for instance this timeline of contributions, one color per contributor:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7FivRmL7dz0/Ts8zVqhUCvI/AAAAAAAAAEw/zs6eacKb-5Q/s1600/impact-clean-flipped450.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-7FivRmL7dz0/Ts8zVqhUCvI/AAAAAAAAAEw/zs6eacKb-5Q/s1600/impact-clean-flipped450.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The huge majority of contributors are volunteers, but some people are also paid to contribute. Notably, the first Simplified Chinese localization has been sponsored by a Chinese company.&lt;br /&gt;&lt;br /&gt;Geographically, developers have always been coming from very various countries: Egypt, Japan, Germany, Sweden, Spain, Brazil... Beta-testers come from virtually all over the globe, with even one in Antarctica. Thanks to this diversity, tricky issues with right-to-left languages or special characters are detected and fixed early. AnkiDroid is now available in 27 languages.&lt;br /&gt;&lt;br /&gt;Feel free to comment if you have any question!&lt;br /&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-3986374394379635666?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/3986374394379635666/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/releasing-ankidroid-10.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/3986374394379635666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/3986374394379635666'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/releasing-ankidroid-10.html' title='AnkiDroid 1.0 released!'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YZdi6p722PM/Ts9EMy9BMLI/AAAAAAAAAE4/aVvnPr-b4hM/s72-c/active-installs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-6429327870213970055</id><published>2011-11-18T15:30:00.001+09:00</published><updated>2011-12-18T23:51:03.048+09:00</updated><title type='text'>Targeting China? Be prepared for additional web development costs</title><content type='html'>If you want your web application to tap into the huge Chinese market, I have a bad news for you.&lt;br /&gt;&lt;br /&gt;Until April 2011, IE6 was still the #1 browser in China. Now it is still at &lt;a href="http://gs.statcounter.com/#browser_version-CN-monthly-201010-201110"&gt;37%&lt;/a&gt;.&lt;br /&gt;That's bad news, because IE6 is an old browser with many bugs. Making your website usable on IE6 is very complex, it will typically double your UI custom widgets development costs.&lt;br /&gt;&lt;br /&gt;If you are not targeting China, then do like &lt;a href="http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html"&gt;Google Apps&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.elated.com/articles/top-30-websites-viewed-in-ie6/"&gt;Facebook&lt;/a&gt;, Twitter and &lt;a href="http://arstechnica.com/microsoft/news/2010/02/youtube-to-kill-ie6-support-on-march-13.ars"&gt;YouTube&lt;/a&gt;: don't invest time in making your website compatible with IE6. Actually &lt;a href="http://www.elated.com/articles/top-30-websites-viewed-in-ie6/"&gt;87%&lt;/a&gt; of the global&amp;nbsp;&lt;a href="http://www.alexa.com/topsites"&gt;top-30&lt;/a&gt; websites offer a sub-optimal experience to IE6 users.&lt;br /&gt;&lt;br /&gt;But if you are targeting China, be prepared. In particular:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Don't use &lt;a href="https://github.com/twitter/bootstrap/issues/76"&gt;Bootstrap&lt;/a&gt;, &lt;a href="http://www.kendoui.com/blogs/archive/11-08-11/supporting_a_dinosaur_time_to_end_ie6_support.aspx"&gt;Kendo UI&lt;/a&gt;, and most web frameworks as they don't work on IE6.&lt;/li&gt;&lt;li&gt;Use Web frameworks that are committed to support IE6: &lt;a href="http://960.gs/"&gt;960 Grid System&lt;/a&gt;, &lt;a href="http://html5boilerplate.com/"&gt;HTML5 Boilerplate&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;, among others.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Chrome recently became the second most-used browser in China, but guess what was the second-&lt;a href="http://gs.statcounter.com/#browser_version-CN-monthly-201010-201110"&gt;most used&lt;/a&gt; web browser earlier this year? Not Firefox, not Safari. It was Maxthon, from Hong Kong. It is based on Trident, just like Internet Explorer. There is also&amp;nbsp;&lt;a href="http://zh.wikipedia.org/wiki/%E6%90%9C%E7%8B%97%E6%B5%8F%E8%A7%88%E5%99%A8"&gt;搜狗&lt;/a&gt;, that can use IE and Chrome as a rendering engine.&amp;nbsp;Finally, &lt;a href="http://seekingalpha.com/article/260381-ipo-pick-of-the-week-qihoo-360-tech"&gt;claiming&lt;/a&gt; 172 million active users, &lt;a href="http://en.wikipedia.org/wiki/360_Secure_Browser"&gt;360安全&lt;/a&gt; is also based on Trident, and shows the same faults as IE6.&lt;br /&gt;&lt;div style="text-align: right;"&gt;Nicolas Raoul&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/3274102168139802613-6429327870213970055?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/6429327870213970055/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/targeting-china-be-prepared-for.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6429327870213970055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6429327870213970055'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/targeting-china-be-prepared-for.html' title='Targeting China? Be prepared for additional web development costs'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-744746050997685043</id><published>2011-11-18T12:47:00.000+09:00</published><updated>2011-11-18T12:47:02.908+09:00</updated><title type='text'>新しいオープンソースプロジェクト：Troois</title><content type='html'>&lt;div&gt;ニコラです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;昨日&lt;a href="https://github.com/nicolas-raoul/Troois"&gt;Troois&lt;/a&gt;という新しいオープンソースプロジェクトをリリースしました。&lt;a href="http://ja.wikipedia.org/wiki/Google_App_Engine"&gt;Google App Engine&lt;/a&gt;で動作する&lt;a href="http://ja.wikipedia.org/wiki/Amazon_S3"&gt;Amazon S3&lt;/a&gt;のクローンです。&lt;br /&gt;&lt;br /&gt;Amazon S3はファイルを書きこんだり、読み込んだりするアプリケーションにすごく便利です。とくに：&lt;br /&gt;・クラウドの複数のノードで動作しているアプリケーション（この場合はファイルシステムを使えません）&lt;br /&gt;・&lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt;（&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0"&gt;クラウド&lt;/a&gt;&lt;a href="http://ja.wikipedia.org/wiki/PaaS"&gt;PaaS&lt;/a&gt;）を使ってる場合。Herokuのファイルシステムは&lt;a href="http://devcenter.heroku.com/articles/read-only-filesystem"&gt;リードオンリー&lt;/a&gt;であり、Herokuのデータベースは&lt;a href="http://www.heroku.com/pricing"&gt;費用&lt;/a&gt;が高いリソースです。&lt;br /&gt;&lt;br /&gt;しかしAmazon S3は有料です。&lt;a href="http://aws.amazon.com/s3/#pricing"&gt;安価&lt;/a&gt;ですが、無料の選択肢があれば、下記の場合にメリットがあります：&lt;br /&gt;・請求書などの複雑性を減らしたい。&lt;br /&gt;・ランニングコストをゼロにしたい。例：非営利プロジェクト&lt;br /&gt;・莫大な支払いのリスクを避けたい。有料サービスの場合、プログラムエラーや&lt;a href="http://ja.wikipedia.org/wiki/DoS%E6%94%BB%E6%92%83"&gt;意図的犯行&lt;/a&gt;で莫大な支払いが起こる可能性があります。&lt;br /&gt;&lt;br /&gt;Amazon S3の無料版がなかったので、作りました。Google App Engineで動作します。ソースコードを&lt;a href="http://ja.wikipedia.org/wiki/Affero_General_Public_License"&gt;Affero General Public License&lt;/a&gt;でオープンソースにしたので、皆さんは自由に使うことができますし、オープンにすればソースコードの変更もできます。&lt;br /&gt;&lt;br /&gt;プロジェクトの名前は、「Troois」にしました。S3のフランス語発音「S trois」の「trois」に、Googleの「oo」を入れました。日本語の発音で「トローワ」かな…&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Amazon S3と同じく、REST HTTP POSTで送ったファイルを、REST HTTP GETでダウンロードできます。&lt;br /&gt;&lt;br /&gt;是非あなたのGoogle App Engineインスタンスで試して、&lt;a href="https://github.com/nicolas-raoul/Troois/issues"&gt;フィードバック&lt;/a&gt;を送ってください。そして、是非是非新しい機能にご協力ください！&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;@nicolas_raoul&lt;/div&gt;&lt;/div&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/3274102168139802613-744746050997685043?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/744746050997685043/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/troois.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/744746050997685043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/744746050997685043'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/troois.html' title='新しいオープンソースプロジェクト：Troois'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-1465702515991520592</id><published>2011-11-14T23:54:00.002+09:00</published><updated>2011-11-18T18:18:08.732+09:00</updated><title type='text'>Mac OSXでOpenLDAPを起動</title><content type='html'>はじめまして。てらしたです。&lt;br /&gt;&lt;br /&gt;会社のPCを新しいMacBook Proに変えてもらったので、開発環境や検証環境をつい最近整え直したんですが、あれ？こんなに簡単だったっけ？と結構意外だったものがあったので書いておきます。OpenLDAPをMac OSX 10.7（Lion）で起動するまでの手順です。で、次回とその次くらいに分けて、Apache Directory Studioで簡単なディレクトリデータベースを作って、AlfrescoでLDAP連携をする方法なんかを紹介できたらと思っています。&lt;br /&gt;&lt;br /&gt;さて、OSXでOpenLDAPを起動する方法ですが、こちらのブログ（&lt;a href="http://krypted.com/mac-os-x/starting-openldap-on-mac-os-x-client/"&gt;Starting OpenLDAP on Mac OS X Client&lt;/a&gt;）を参考にさせていただきました。&lt;br /&gt;&lt;br /&gt;OSXにはもともとOpenLDAPがインストールされているので、手順は以下の3つだけです。&lt;br /&gt;&lt;br /&gt;1. 管理者用のパスワード（rootpw）を作る。&lt;br /&gt;2. slapd.confに1で作成したパスワードを設定する。&lt;br /&gt;3. デーモンを起動する。&lt;br /&gt;&lt;br /&gt;それでは、1つずつやっていきましょう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. 管理者用のパスワード（rootpw）を作る。&lt;/b&gt;&lt;br /&gt;まずは管理者用のパスワードを作るためにターミナルからslappasswdコマンドを実行します。適当にパスワードを決め、2回入力するとSSHA形式（デフォルト）でエンコードされた値が生成されます。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ slappasswd&lt;br /&gt;New password:&lt;br /&gt;Re-enter new password:&lt;br /&gt;{SSHA}ppY+cX47+R0Q37G1Rkc809pS+HDvseu3&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;2. slapd.confに作成したパスワードを設定する。&lt;/b&gt;&lt;br /&gt;次に、1で作成したパスワードをslapd.confに設定します。あらかじめ用意されているslapd.conf.defaultをslapd.confとしてコピーしてから編集します。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;$ sudo cp /etc/openldap/slapd.conf.default /etc/openldap/slapd.conf&lt;br /&gt;$ sudo vim /etc/openldap/slapd.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;下から7〜8行目あたりにrootpwで始まる行があるので、そこに上記で作成したパスワードをコピペし、ファイルを保存します。&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;rootpw          {SSHA}ppY+cX47+R0Q37G1Rkc809pS+HDvseu3&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;3. デーモンを起動する。&lt;/b&gt;&lt;br /&gt;これでもう準備はできたので、デーモンを起動します。&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;$ sudo /usr/libexec/slapd -d 255&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;以下のようにnetstatで389番ポート（デフォルト）が使われていれば正常に起動しています。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ sudo netstat -an | grep 389&lt;br /&gt;tcp4       0      0  *.389                  *.*                    LISTEN&lt;br /&gt;tcp6       0      0  *.389                  *.*                    LISTEN&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;拍子抜けするほど簡単ですが、これで終わりです。&lt;br /&gt;停止したいときは、デーモンを起動したターミナルでCtrl+cでOKです。&lt;br /&gt;&lt;br /&gt;次回は、Apache Directory Studioを使って簡単なディレクトリデータベースを作成する方法を紹介したいと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-1465702515991520592?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/1465702515991520592/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/mac-osxopenldap.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1465702515991520592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/1465702515991520592'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/mac-osxopenldap.html' title='Mac OSXでOpenLDAPを起動'/><author><name>terajun</name><uri>http://www.blogger.com/profile/09039721862238185320</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-2229776003469119459</id><published>2011-11-11T15:41:00.000+09:00</published><updated>2011-11-11T15:41:08.849+09:00</updated><title type='text'>Alfresco勉強会#3 振り返り</title><content type='html'>mryoshioです。&lt;br /&gt;&lt;br /&gt;すでに2週経過してしまいましたが、&lt;br /&gt;さる10/28に開催されたAlfresco勉強会について書きます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Alfresco勉強会について&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;以前の&lt;a href="http://aegif-labo.blogspot.com/2011/09/alfresco.html"&gt;記事&lt;/a&gt;にも書きましたが、&lt;br /&gt;Alfrescoについての情報共有を行うものです。&lt;br /&gt;少しでもAlfrescoに興味がある方なら歓迎です。&lt;br /&gt;それでは第三回の内容について振り返りたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;「Alfresco 4.0を紹介してみる」&lt;/b&gt;@to2y (&lt;a href="http://www.slideshare.net/TakeshiTotani/alfresco3-alfresco4"&gt;スライド&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;AlfrescoやLiferayのコンサルタントである@to2yによる発表です。&lt;br /&gt;バージョン4.0で強化された点に関してデモを交えつつの紹介でした。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ドラッグ&amp;amp;ドロップ対応&lt;br /&gt;ブラウザベースのAlfresco Shareに対しドラッグ・アンド・ドロップでファイルをアップロードできるようになります。便利ですね。&lt;/li&gt;&lt;li&gt;動画、オーディオ、iWorksのプレビュー対応&lt;br /&gt;これまではOfficeファイルしかプレビューできませんでした。今後はKeynoteを使っている私のような人間にも恩恵があります。助かります。&lt;/li&gt;&lt;li&gt;ソーシャル機能の追加&lt;br /&gt;Alfrescoが最も力を入れつつあるのがこのソーシャル機能です。Social Content Managementと言われており、コンテンツに対するレーティングや特定の人間をフォローしてフィードを受け取るといったものです。組織を介してではなく、コンテンツをベースに人と直接つながるのですね。twitterのフォローやFacebookのフレンドを考えると理解しやすいと思います.。&lt;/li&gt;&lt;li&gt;Solr連携&lt;br /&gt;これはまだ私自身検証ができていませんがひじょうに期待しています。というか早く試したいし触りたい。名前は出せませんが、業務で似たようなカスタマイズをしたことはあります。しかし、公式に分散環境に対応しやすくなったことは営業の仕方やシステム構成を考える際に有用です。今後の勉強会できっと誰かが話してくれるでしょう。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;「Alfresco Web Script」&lt;/b&gt;@mryoshio (&lt;a href="http://www.slideshare.net/mryoshio/alfrescoweb-script"&gt;スライド&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Web Scriptの入門編として私の発表です。&lt;br /&gt;余談ですが、&lt;a href="http://www.slideshare.net/mryoshio/alfresco-webscript-en-10018462"&gt;英語版&lt;/a&gt;もあります。次のものから構成されています。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web Scriptとは&lt;br /&gt;Web Scriptについての基本的な紹介です。&lt;/li&gt;&lt;li&gt;Web Scriptの作り方&lt;br /&gt;定義ファイル、ロジック、テンプレートといった構成要素の内容やサンプルの紹介です。&lt;/li&gt;&lt;li&gt;Web Scriptの種類&lt;br /&gt;Data Web ScriptとPresentation Web Scriptという種別と特徴を紹介しました。話を分かりやすくするために単純化してる箇所があります。大体そんなもんなんだなと割りきって読んでみてください。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;第三回で参加人数が初めて10名に届きました。&lt;br /&gt;第四回は&lt;a href="http://partake.in/events/45ffd5e7-f93a-4050-bc51-5258e53527b3"&gt;こちら&lt;/a&gt;から参加登録できます。よろしければぜひご参加ください。&lt;br /&gt;(皆様の発表もお待ちしております)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;@mryoshio&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/3274102168139802613-2229776003469119459?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/2229776003469119459/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/alfresco3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2229776003469119459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2229776003469119459'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/alfresco3.html' title='Alfresco勉強会#3 振り返り'/><author><name>mryoshio</name><uri>http://www.blogger.com/profile/09009940818524118264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-6104061444231390911</id><published>2011-11-05T14:51:00.000+09:00</published><updated>2011-11-05T14:51:33.978+09:00</updated><title type='text'>Spring Surf紹介  - インストールと最初の起動 -</title><content type='html'>とたにです。&lt;div&gt;&lt;br /&gt;&lt;a href="http://aegif-labo.blogspot.com/2011/10/spring-surf.html"&gt;前回&lt;/a&gt;はSpring Surfの成り立ちと概要について紹介しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;今回は、いよいよインストールと初期の起動するまでを紹介したいと思います。本家にも&lt;a href="http://www.springsurf.org/sites/1.0.0-RC2/spring-surf-devtools/spring-surf-roo-addon/reference/html/index.html"&gt;チュートリアル&lt;/a&gt;があるので、もっと詳しい手順を知りたい人はこっちも参照してみて下さい。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;準備編&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://maven.apache.org/"&gt;Apache Maven&lt;/a&gt;をインストールしておいてください。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;インストール編&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;Spring Rooのインストール&lt;br /&gt;SpringSourceのサイトから&lt;a href="http://s3.amazonaws.com/dist.springframework.org/release/ROO/spring-roo-1.0.2.RELEASE.zip"&gt;Spring Roo 1.0.2&lt;/a&gt;をインストールします。最新は1.1.4ですが、SpringSurf 1.0.0RC2ではRoo 1.1系では一部動作しない部分もあることがフォーラムで報告されているので、ここでは1.0.2をインストールして下さい。&lt;br /&gt;ダウンロードが終わったら、適当なフォルダに展開します。&lt;br /&gt;spring-roo-1.0.2-RELEASE/bin/roo.sh or roo.batにパスを通しておくと&lt;br /&gt;便利だと思います。&lt;br /&gt;また、Maven起動時のJVMヒープを指定する環境変数を設定しておいて下さい。&lt;br /&gt;&lt;blockquote&gt;MAVEN_OPTS='-Xms1024m -XX:MaxPermSize=512m'&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;SpringSurfインストール&lt;br /&gt;早速rooを起動します。&lt;br /&gt;&lt;blockquote&gt;$ roo.sh&lt;br /&gt;roo&amp;gt; addon install --url http://www.springsurf.org/downloads/1.0.0-RC2/spring-surf-roo-addon-1.0.0-RC2-roo-addon.zip&lt;/blockquote&gt;アドオンがインストールされrooが自動的に再起動されます。&lt;br /&gt;これだけでインストールは完了です。簡単ですね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;最初のプロジェクト作成&lt;br /&gt;作業のディレクトリを作って移動します。&lt;br /&gt;&lt;blockquote&gt;$ mkdir surf-projects&lt;br /&gt;$ cd surf-projects&lt;br /&gt;$ mkdir first-project&lt;br /&gt;$ cd first-project&lt;/blockquote&gt;いよいよrooでプロジェクトを作ります。&lt;br /&gt;&lt;blockquote&gt;$ roo.sh&lt;br /&gt;roo&amp;gt; project --topLevelPackage my.first.project&lt;/blockquote&gt;これで、rooの雛形プロジェクトが出来ました。&lt;br /&gt;この時点では、SpringSurfは組込まれていません。&lt;br /&gt;次のコマンドでSurfを組込みます。&lt;br /&gt;&lt;blockquote&gt;roo&amp;gt; surf install&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt; 最初の起動&lt;br /&gt;rooを終了し、コマンドラインから&lt;br /&gt;&lt;blockquote&gt;$ mvn clean package jetty:run&lt;/blockquote&gt;と入力して下さい。&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;http://localhost:8180/ で雛形のSurfプロジェクトのWebサイトが立ち上がります。初回は必要なjarファイルをダウンロードするためにちょっと時間がかかりますので辛抱して下さい。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;次回は、Surfプロジェクトのファイル構成について説明したいと思います。&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/3274102168139802613-6104061444231390911?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/6104061444231390911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/spring-surf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6104061444231390911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/6104061444231390911'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/11/spring-surf.html' title='Spring Surf紹介  - インストールと最初の起動 -'/><author><name>mryoshio</name><uri>http://www.blogger.com/profile/09009940818524118264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-2762656400597943163</id><published>2011-10-28T17:00:00.000+09:00</published><updated>2011-10-28T17:00:18.382+09:00</updated><title type='text'>Where to run your background jobs for free?</title><content type='html'>&lt;div&gt;Until now, &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; was widely seen as the perfect solution to running jobs on the cloud for free.&lt;/div&gt;&lt;div&gt;It is indeed powerful and convenient, offering for instance &lt;a href="http://code.google.com/appengine/docs/python/config/cron.html"&gt;cron&lt;/a&gt; and &lt;a href="http://code.google.com/appengine/docs/python/taskqueue/"&gt;task queue&lt;/a&gt; APIs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have been using GAE a lot for not-for-profit projects I am involved in, and was enchanted. The dream will end in 3 days, as this email from Google told me:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;"As part of Google's long-term commitment to App Engine, we are also updating our policies, pricing and support model to reflect its status as a fully supported Google product"&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;In 3 days, GAE will get &lt;a href="http://highscalability.com/blog/2011/9/7/what-google-app-engine-price-changes-say-about-the-future-of.html"&gt;more expensive&lt;/a&gt;. Many applications will switch from the free zone to the paying zone, and they have 4 options:&lt;/div&gt;&lt;div&gt;- &lt;a href="http://www.google.com/enterprise/cloud/appengine/pricing.html"&gt;Pay&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- Make the jobs faster, by writing smarter code or reducing the scope.&lt;/div&gt;&lt;div&gt;- Let the jobs unprocessed after quota is reached, which might be acceptable for some apps.&lt;/div&gt;&lt;div&gt;- Switch to an alternative service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Under the new pricing, GAE offers 9 hours of backend instance, but most jobs will run into another limit much sooner: only 50.000 database writes are OK is the free zone. So, is it time to switch to Celadon Cedar stack to benefit from Heroku's &lt;a href="http://devcenter.heroku.com/articles/billing-changes#specifics_on_changes"&gt;new pricing&lt;/a&gt; ?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="0" cellpadding="2" cellspacing="2" style="text-align: left; width: 100%;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: #cccccc; vertical-align: top;"&gt;PaaS offer&lt;/td&gt;&lt;td style="background-color: #cccccc; vertical-align: top;"&gt;CPU time&lt;/td&gt;&lt;td style="background-color: #cccccc; vertical-align: top;"&gt;Database operations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;Google App Engine&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;9 hours&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;50.000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;Heroku&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;720 hours&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Unlimited&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The CPU time is not directly comparable, but that's still quite a difference. So, where's the catch? Well, on Heroku you either have free frontend OR free backend. If you want one worker dyno for free, you must use &lt;a href="http://www.heroku.com/pricing#0-1"&gt;zero web dyno&lt;/a&gt;. The consequence is that implementing any kind of web interface to control your &lt;a href="http://devcenter.heroku.com/articles/delayed-job"&gt;delayed_jobs&lt;/a&gt; is a real challenge.&lt;/div&gt;&lt;div style="text-align: right;"&gt;@nicolas_raoul&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-2762656400597943163?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/2762656400597943163/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/where-to-run-your-background-jobs-for.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2762656400597943163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/2762656400597943163'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/where-to-run-your-background-jobs-for.html' title='Where to run your background jobs for free?'/><author><name>Nicolas_Raoul</name><uri>http://www.blogger.com/profile/08422064640500287012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-643206873360547262</id><published>2011-10-28T13:49:00.000+09:00</published><updated>2011-10-28T13:49:08.238+09:00</updated><title type='text'>Dominion</title><content type='html'>なくらです。&lt;br /&gt;&lt;br /&gt;早いもので、東京に出て来てから3年経ちました。&lt;br /&gt;その間にも世界はクラウドだとかソーシャルだとか目まぐるしく変化していますが、&lt;br /&gt;自分はその流れに取り残されてるのじゃないという危機感が常にあります。&lt;br /&gt;（ケータイも901iですしね。。。）&lt;br /&gt;FaceBookやTwitterなども登録はしているのですが、ほとんど使えていません。&lt;br /&gt;そもそも、公開の場所に対してメッセージを発信するなど、怖いやら、烏滸がましいやらで&lt;br /&gt;今までいっさいやってこなかった、もちろんブログも書いたことがないのに&lt;br /&gt;何の因果か今、ここでブログを書かされているわけです（；＿；）&lt;br /&gt;というわけで、情報弱者な自分が何か有益な技術ブログを書くのは無理無理なので、&lt;br /&gt;最近、自分がはまっているボードゲームについて書きます。&lt;br /&gt;そのゲームの名前は「ドミニオン」です。&lt;br /&gt;今、割と流行っているので知っている人も多いと思います。&lt;br /&gt;ざっくり説明すると、自分のデッキ（山札？）を強くしていくゲームです。&lt;br /&gt;ドミニオンには基本的には3種類のカードがあって&lt;br /&gt;それぞれ「勝利点」「財宝」「アクション」に分かれています。&lt;br /&gt;・勝利点カードはそれ自体はゲーム中は特に効果はないのですが、ゲーム終了時にこの点数が一番多い人が勝ちになります。&lt;br /&gt;・財宝カードは、勝利点やアクションカード、そして財宝カードを買うのに使います。&lt;br /&gt;・アクションカードは、それ自体にいろいろな効果があって（カードを一枚引くとか）、まあ、説明は端折ります。&lt;br /&gt;ゲームの流れとしては、&lt;br /&gt;1．山札から五枚引いて手札とし、そこから&lt;br /&gt;2．なにかアクションカードを使い、&lt;br /&gt;3．手札の財宝カードを使って、何かカードを買って&lt;br /&gt;4．手札を全部捨札にしてあたらしく山札から5枚引く。山札がなくなったら捨札を切って山札にする。&lt;br /&gt;でターン終了です。&lt;br /&gt;これを2-4人でぐるぐるとやります。&lt;br /&gt;&lt;br /&gt;これだけ見ると単純なように見えますが、最初に使用するアクションカードをいろんな種類の中から10種類選ぶのですが、&lt;br /&gt;この選び方によって、毎回ゲーム性が変わるというとても奥が深いゲームです。&lt;br /&gt;10種類のカードからどんなシナジーを見つけ、どういう戦略でプレイするのかが人それぞれで、&lt;br /&gt;非常に頭を使うゲームなんです。&lt;br /&gt;&lt;br /&gt;実は、うちの会社でもドミニオンは流行中で、週に1回くらい仕事を終わった後に&lt;br /&gt;オフィスで3，4人集まってドミニオンをやってたりします。&lt;br /&gt;この間は、ドミニオンを使ってインターン生の面談をやってしまいました。&lt;br /&gt;いや、遊びたかったんじゃなくて、&lt;br /&gt;『多種多様なプロダクトが存在している現在社会において、複数のシステム間の効果的なシナジーを見抜く力を測る』&lt;br /&gt;という重要な意味があったんですよ！&lt;br /&gt;&lt;br /&gt;というわけで、最後は無理やりな感じでこのエントリも正当化して終わりたいと思います。&lt;br /&gt;お粗末さまでした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-643206873360547262?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/643206873360547262/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/dominion.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/643206873360547262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/643206873360547262'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/dominion.html' title='Dominion'/><author><name>Alkan</name><uri>http://www.blogger.com/profile/13988465687923901704</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-5891555496432033776</id><published>2011-10-21T19:30:00.004+09:00</published><updated>2011-10-28T19:11:24.876+09:00</updated><title type='text'>Power of community</title><content type='html'>はじめまして！aegifの大谷です。&lt;br /&gt;&lt;br /&gt;最近、ffftpが&lt;a href="http://sourceforge.jp/projects/ffftp/"&gt;オープンソースプロジェクト&lt;/a&gt;としてその開発が継続されるというニュースがありました。自身のホームページ用にファイルをアップロードすることをはじめ、仕事でftpを使う際にもffftpを利用させていただいているので、個人的にはこのニュースをとてもうれしく思っています。&lt;br /&gt;しかし、実際のところは、残念なことに開発が中断されるとその資産が塩漬けになってしまうことが多々あるようです。オリジナル開発者の都合にもよりますが、その資産をオープンソース化しコミュニティで開発を継続していくことで、単にそのツールを今後とも安定的に利用できるようになるだけでなく、以下のようなメリットも享受できるのではと考えています。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;より世間のニーズに沿うような方向へと開発が進んでゆくことが期待できる&lt;/li&gt;&lt;li&gt;機能追加やバグ修正などが加速する&lt;/li&gt;&lt;li&gt;品質が向上する&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;一方で、先日、英Alfresco社の会長兼CTOであるJohn NewtonがeドキュメントJapanにおいて講演を行い、オープンソースソフトウェアについて「ソフトウェアライフサイクルの全ての局面において、コミュニティの知恵を借りることでコストを削減している」と述べています。&lt;br /&gt;この言葉は、単に「ただで開発を行ってくれる人がいるから助かっている」ということを言っているのではなく、「コミュニティには多様な人の知恵が詰まっており、状況に応じて最適な助力を受けられる」ということを表しているのだと思います。&lt;br /&gt;&lt;br /&gt;「コミュニティの知恵を活用して効率良く資産価値を高めていく」&lt;br /&gt;オープンソース推しの会社に身を置く者として、この当たり前のようで当たり前に行われていないことが広まっていけばいいなと思っています。&lt;br /&gt;&lt;br /&gt;# 個人で有用なツールを開発している方はたくさんいらっしゃいますので、もし開発を中止するようなことがありましたら是非オープンソース化をお願いしたいと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-5891555496432033776?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/5891555496432033776/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/aegif-ffftp-ftpffftp-alfrescoctojohn.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/5891555496432033776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/5891555496432033776'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/aegif-ffftp-ftpffftp-alfrescoctojohn.html' title='Power of community'/><author><name>Tasuku Otani</name><uri>http://www.blogger.com/profile/18132336091954266906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-8581946882189358235</id><published>2011-10-14T19:10:00.000+09:00</published><updated>2011-10-14T19:19:01.668+09:00</updated><title type='text'>Spring Surfの紹介 - 概要の概要 -</title><content type='html'>とたにです。&lt;br /&gt;&lt;br /&gt;日頃AlfrescoやLiferayなど特定のOSSプロダクトのコンサルティングをしていると、その世界では当たり前のものとして使っていても、実はあまり知られていないツールやプロダクトがあることに気付きます。&lt;br /&gt;&lt;br /&gt;今回はそんなプロダクトの１つであるSurf Platform（以下Surf）についてご紹介したいと思います。&lt;br /&gt;Surf PlatformはもともとAlfrescoのWebインタフェースのコラボレーション基盤のShareを作るために、Alfresco社の内部で開発された動作基盤で、具体的には、WebScriptと呼ばれるWebベースのインタフェースを管理し実行します。&lt;br /&gt;SurfはAlfrescoリポジトリ本体やAlfresco Shareなどさまざまプロダクトに搭載されていて、このためAlfrescoリポジトリを操作するRESTインタフェースを簡単に追加することができるようになっています。&lt;br /&gt;&lt;br /&gt;ここまでは単にSurf Platformとして紹介してきましたが、実は昨年SurfはSpringに寄贈され、&lt;a href="http://www.springsource.org/extensions/se-surf"&gt;Spring Surf&lt;/a&gt;&lt;br /&gt;として独立したプロダクトとしてメンテナンスされています（リードの開発者はAlfresco社のメンバですが）。SpringではIncubatorステータスですが、実際にはEnterprise向けプロダクトのAlfrescoでは以前から組込まれて利用されているモジュールなので、機能の完備性ではIncubatorレベルはクリアしていると言えるでしょう。&lt;br /&gt;&lt;br /&gt;今日時点で&lt;a href="http://www.springsurf.org/"&gt;SpringSurfのプロダクトページ&lt;/a&gt;を見ると、1.0.0が記載されていますが、ドキュメントが全てそろっていなかったり、Eclipseのupdateサイトからはモジュールが取得できなかったりと不十分な状態なので現在準備中だと思われます。現時点の実質的な最新バージョンは1.0.0RC2ですので、1.0.0の正式版が出るまではこのバージョンを使って下さい。&lt;br /&gt;&lt;br /&gt;Spring Surfは、Springと冠しているだけあってSpring MVCなどのSpring Framework 3.0系のモジュール群の上で動作しています。そのため、Springのbeanインジェクションを使った動作拡張や他のSpringモジュルとの連携などが容易な点がメリットとして挙げられます。また、出自がAlfrescoということもあり、設定ファイルの一部をコメントアウトするだけで、バックエンドのAlfrescoと認証連携したり、AlfrescoのREST APIを簡単に呼び出したりすることもできます。&lt;br /&gt;&lt;br /&gt;次回はSpring Surfで最初のWebサイトを起動するまでの手順をご紹介します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-8581946882189358235?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/8581946882189358235/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/spring-surf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/8581946882189358235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/8581946882189358235'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/10/spring-surf.html' title='Spring Surfの紹介 - 概要の概要 -'/><author><name>Totani</name><uri>http://www.blogger.com/profile/05482818344212023797</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-4639159555073983853</id><published>2011-10-07T14:00:00.000+09:00</published><updated>2011-10-07T14:07:57.717+09:00</updated><title type='text'>LiferayのAjaxカスタムポートレット作ってみました</title><content type='html'>吉岡です。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最近liferayのカスタムポートレットを作りました。&lt;/div&gt;&lt;div&gt;せっかくなのでこの場を借りてご紹介します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以下、ポイント&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;施設予約管理 (施設ポートレット + 予約ポートレット)機能&lt;/li&gt;&lt;li&gt;AUI + YUI2ベースでUIを作成し、基本的にAjax動作&lt;/li&gt;&lt;li&gt;権限部分は細かくみてない (信頼の置けるグループ内でお使いください)&lt;/li&gt;&lt;li&gt;ソースコード一式は&lt;a href="http://bit.ly/nlEo3i"&gt;ここ&lt;/a&gt;にあります&lt;/li&gt;&lt;/ol&gt;&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&gt;1. &lt;/div&gt;&lt;div&gt;営業の先々で某グループウェアと比較されることが多く「施設管理的な機能はないの?」とよく言われるのでこれを作りました&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.&lt;/div&gt;&lt;div&gt;値を追加/更新/削除するだけでページ全体が切り替わるのがそもそもどうなのという思いがあったのでLiferayポートレット作成の習熟度向上を兼ねてAjax化。LiferayにはもともとAlloy UIというjsとcssをラップしたものがあります。しかし、Alloy UIで提供されている機能では目的を実現できず仕方なくAlloy UIがラップしているYUIの機能を直接呼び出すなど汚くなってしまいました&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.&lt;/div&gt;&lt;div&gt;権限を細かく見てないというのはたとえば他ユーザが登録したものを削除できるということ。信頼の置けるメンバでグループポータル (ページ)を作りそのなかでお使いください。信頼できない人と使うことは推奨できません。先に信頼関係を築いてください&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今後似たようなものを作ろうとする方には参考にして頂ければ幸いです。&lt;/div&gt;&lt;div&gt;Alloy UIを使わず最初からjQueryなどで統一的に作った方がよいかもしれません。&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&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;@mryoshio&lt;/div&gt;&lt;div&gt;&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/3274102168139802613-4639159555073983853?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/4639159555073983853/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/liferayajax.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/4639159555073983853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/4639159555073983853'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/liferayajax.html' title='LiferayのAjaxカスタムポートレット作ってみました'/><author><name>mryoshio</name><uri>http://www.blogger.com/profile/09009940818524118264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-7912313622221576703</id><published>2011-09-30T14:30:00.002+09:00</published><updated>2012-01-27T14:15:51.477+09:00</updated><title type='text'>Alfresco勉強会について</title><content type='html'>aegifでOSSコンサルティングをしている吉岡です。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今回は8月から月一度行われているAlfresco勉強会についてご紹介します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;エンドユーザ間での情報共有を目的として弊社マーケティング部門が開催しています。&lt;/div&gt;&lt;div&gt;Alfrescoをすでに使われている方はもちろん、&lt;/div&gt;&lt;div&gt;少し興味があるという方もどしどしご参加くだされば幸いです。&lt;/div&gt;&lt;div&gt;私も営業的な話を離れ、Community版のカスタマイズ方法などを毎回話すつもりです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&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;b&gt;[第一回]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Alfrescoのインストールと設定 (@mryoshio &lt;a href="http://slidesha.re/nScbvw"&gt;スライド&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;設定やルールについての話 (@nicolas_raoul)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;[第二回]&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Alfresco SDKとカスタムアクション (@mryoshio &lt;a href="http://slidesha.re/q47olB"&gt;スライド&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Custom Modelの作成 (@terajun &lt;a href="http://www.slideshare.net/terajun/alfresco-2-custom-model"&gt;スライド&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これまでは不本意ながらaegifの人間しか発表していないので&lt;/div&gt;&lt;div&gt;今後は他の方にも気軽に話していただければ嬉しいです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&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&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;第三回Alfresco勉強会のお申し込みは &lt;a href="http://bit.ly/pB0YIM"&gt;こちら&lt;/a&gt; からどうぞ&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;@mryoshio&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/3274102168139802613-7912313622221576703?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/7912313622221576703/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/alfresco.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7912313622221576703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7912313622221576703'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/alfresco.html' title='Alfresco勉強会について'/><author><name>mryoshio</name><uri>http://www.blogger.com/profile/09009940818524118264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3274102168139802613.post-7954253998117132974</id><published>2011-09-25T11:39:00.002+09:00</published><updated>2011-09-25T11:41:20.476+09:00</updated><title type='text'>ごあいさつ</title><content type='html'>はじめまして。aegif labo blogにようこそ！&lt;br /&gt;&lt;br /&gt;aegifでオープンソースコンサルティングに携わっている戸谷（とたに）ともうします。&lt;br /&gt;&lt;br /&gt;このブログでは開発しているプロダクトの紹介、勉強会のレポート、オープンソースに関する調査や雑感などを紹介していきます。&lt;br /&gt;&lt;br /&gt;aegifはオープンソースECMのAlfrescoや、ポータルプラットフォームのLiferayのパートナーとして、これらのプロダクトの導入コンサルティングや技術支援などを行っています。AlfrescoもLiferayも非常にすじの良いプロダクトで、だからこそパートナーとして普及につとめているのですが、一方でどのように使えるのか、また実際にカスタマイズするにはどうしたらいいのか、こういった情報が特に日本語では不足していて、まず使ってみようと思っても一歩が踏み出せない方が多いのではないかと思います。このブログでは勉強会のレポートなどを通して、これらプロダクトについての情報を発信していく予定です。&lt;br /&gt;&lt;br /&gt;また、社内では実プロジェクトや検証評価などで他のオープンソースプロダクトもあつかっていますので、AlfrescoやLiferay以外のプロダクトも積極的に取り上げたいと思ってます。&lt;br /&gt;&lt;br /&gt;さらに実際のプロジェクトや技術評価にて、カスタマイズモジュールやプロダクトのプラグインなど、さまざまなモジュールを開発しています。これらについても可能なものはソースコードを公開し使い方や解説などを紹介していきます。&lt;br /&gt;&lt;br /&gt;ぜひご期待ください。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3274102168139802613-7954253998117132974?l=aegif-labo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aegif-labo.blogspot.com/feeds/7954253998117132974/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7954253998117132974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3274102168139802613/posts/default/7954253998117132974'/><link rel='alternate' type='text/html' href='http://aegif-labo.blogspot.com/2011/09/blog-post.html' title='ごあいさつ'/><author><name>Totani</name><uri>http://www.blogger.com/profile/05482818344212023797</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
