Quantcast
Channel: aegif Labo Blog
Viewing all 244 articles
Browse latest View live

Espionnage: la FSF deconseille le cloud public, recommande les clouds privés basés sur le libre

$
0
0
Le journal The Guardian a révélé que la NSA (Agence de Sécurité Nationale des États-Unis) dispose d'un accès direct aux systèmes de Google, Facebook, Apple et autres géants de l'Internet, pour espionner les communications qui passent par les États-Unis. John Sullivan, directeur de la Free Software Foundation, conseille d'utiliser des logiciels libres (en cloud privé) plutôt que les clouds publics:

Des intrusions de la vie privée de cette ampleur sont à craindre, quand les gens abandonnent leurs données et logiciels locaux et migrent vers le stockage et les applications en ligne. Les géants come Microsoft, Facebook et Google sont vulnérables aux requêtes du gouvernement exigeant les données des utilisateurs. Pour contrer ce problème, il y a de meilleurs moyens, plus sûrs, de partager des informations en ligne. Les logiciels libres comme GNU MediaGoblin, StatusNet, Diaspora, pump.io, Tahoe-LAFS, FreedomBox et SparkleShare travaillent d'arrache-pied pour créer un monde moins centralisé, un monde dans lequel les utilisateurs maintiennent le contrôle sur leurs données et sur les logiciels qui accèdent à ces données, mais un monde qui est tout aussi pratique et social que son équivalent centralisé.

MediaGoblin: Publication de media. Similaire à Flickr, YouTube, SoundCloud.
StatusNet: Micro-blogging. Similaire à Twitter.
Diaspora, pump.io, Freedombox: Réseau social décentralisé. Similaire à Facebook.
Tahoe-LAFS, SparkleShare, CmisSync: Synchronisation de fichiers. Similaire à Dropbox.
Zimbra: Email. Similaire à Gmail/Calendar.

Alfrescoにカスタム属性を追加する - タイプとアスペクト -

$
0
0
こんにちは。大谷です。
日当たりが悪いのか、うちの周りが寒いのかは分かりませんが、うちの庭には相変わらず1月14日の雪が解け残っています(1月30日現在)。今回は、そんな大谷家からAlfrescoのコンテンツにカスタム属性を追加する方法をお伝えしたいと思います。基本的にはAlfresco4.2での話ですが、コンテンツモデルの仕組み自体はAlfresco3系でもほぼ同じです(そうそう変わるもんじゃない!)。


属性って何?そもそもコンテンツって何?


コンテンツは直訳すると内容物という意味です(当たり前ですが)。なので、ファイルサーバのコンテンツはファイルであり、CMSのコンテンツはリッチテキスト(と画像などの各種メディアファイル)ということになります。では、Alfrescoを始めとするECM(企業向けコンテンツ管理)の世界ではどうかというと、この世界では「コンテンツ=ファイル実体+属性情報(メタデータ)」と定義されることが多いです。つまり、ファイル実体とそのファイルに付随する各種の情報がセットで管理されるということを意味します。

そうなると、管理すべき属性を予め定義しておきたくなると思います。例えば、そのコンテンツが契約書であれば、属性情報として契約書番号や顧客番号などを管理したいでしょうし、そのコンテンツがある製品の説明書であれば製品番号などを管理したいと思います(そもそもそのコンテンツが契約書なのか、説明書なのか、というコンテンツタイプ自体も管理したいと思います)。このように、ECM製品を利用しようとすると必ずと言っていいほど行われるのが、カスタム属性の追加というカスタマイズです。


カスタム属性を実現するための2つの方法 -タイプとアスペクト-


カスタム属性は、上記例よろしく「ある種類のコンテンツには属性Aと属性Bを、この種類のコンテンツには属性Cと属性Dを」というようにコンテンツ種別に応じて特定の属性セットを付与、管理するという要件が多いかと思います。これを実現するのがタイプになります。タイプは、事前に定義された属性セットを持つもので、Alfresco上のコンテンツを特定のタイプに指定すると、そのタイプに定義された属性が管理できるようになります。

一方で、コンテンツ種別によらず、コンテンツ種別をまたぐような形で管理したい属性もあると思います。例えば、バージョン管理を行うときのバージョン番号や、タグ付け/カテゴリ付けする際のタグやカテゴリなどです。もちろん全てのタイプにそれら利用可能性のある全ての属性セットを持たせることも可能ですが、 それはとても無駄が多いことだし、そもそも各タイプにとってみればそれらの属性は本質的には関係ない属性だったりします。

それを解決するために、Alfrescoではアスペクトと呼ばれる機能を使います。アスペクトもタイプと同様に属性セットを定義するものですが、任意のコンテンツ(=任意のタイプのコンテンツ)に対して複数のアスペクトを動的に付け外し可能である点がタイプと異なります。例えば、バージョンを管理したい任意のコンテンツに対してのみバージョン管理アスペクトを付与し、タグ付けを行いたい任意のコンテンツに対してのみタグ付け可能アスペクトを付与する、というような感じです。この機能により、Alfrescoではコンテンツ管理において無駄な属性の増殖や属性セットの体系が複雑化していくという状況(通称:属性ヘル)を避けることができます。


じゃあどうやって定義するの?


カスタム属性を追加するためには、
  1. コンテンツモデルの定義
  2. UIの設定
が必要です。1.でタイプやアスペクトなどの属性セットを定義し、2.でその属性をShare UI上に表示するように設定します。

コンテンツモデルの定義


まず、以下のファイルを作成します。このフォルダには元々custom-model-context.xml.sampleというサンプルファイルがあるので、それをリネームするだけでもOKです。
このファイルは、読み込むコンテンツモデル定義ファイルを指示するものです(以下の例ではcustomModel.xmlを読み込む)。Alfrescoはクラスパス上の*-context.xmlというファイルを自動で読み込むため、この命名規則に従う限り異なる名前でも問題ありません。

<alf_dir>/tomcat/shared/classes/alfresco/extension/custom-model-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!-- Registration of new models -->
<bean depends-on="dictionaryBootstrap" id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap">
<property name="models">
<list>
<value>alfresco/extension/customModel.xml</value>
</list>
</property>
</bean>
</beans>

次に、以下のファイルを作成します(ファイル名は前述のファイル内で指定した名前にする必要がある)。このフォルダには元々customModel.xml.sampleというサンプルファイルがあるので、それをリネームして利用しても構いません。このファイルがタイプやアスペクトなどのコンテンツモデル定義の実体となりますが、今回はアスペクトを追加してみましょう。

<alf_dir>/tomcat/shared/classes/alfresco/extension/customModel.xml
<?xml version="1.0" encoding="UTF-8"?>

<!-- Custom Model -->

<!-- Note: This model is pre-configured to load at startup of the Repository. So, all custom -->
<!-- types and aspects added here will automatically be registered -->

<model name="custom:customModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

<!-- Optional meta-data about the model -->
<description>Custom Model</description>
<author></author>
<version>1.0</version>

<imports>
<!-- Import Alfresco Dictionary Definitions -->
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
<!-- Import Alfresco Content Domain Model Definitions -->
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
</imports>

<!-- Introduction of new namespaces defined by this model -->
<!-- NOTE: The following namespace custom.model should be changed to reflect your own namespace -->
<namespaces>
<namespace uri="custom.model" prefix="custom"/>
</namespaces>

<aspects>
<aspect name="custom:reviewable">
<title>Reviewable</title>
<properties>
<property name="custom:reviewer">
<type>d:text</type>
<mandatory>false</mandatory>
</property>
<property name="custom:reviewDate">
<type>d:date</type>
<mandatory>false</mandatory>
</property>
</properties>
</aspect>
</aspects>
</model>
ここではアスペクトcustom:reviewableが定義しています。テキスト型プロパティcustom:reviewerと日付型プロパティcustom:reviewDateを持ちます。コンテンツモデルの詳細はまた別の機会に説明したいと思いますが、基本的にはData Dictionary Guide - alfrescowikiにほとんどの情報がまとまっています。

UIの設定


次に、UIの設定を行います。UIの設定は以下のファイルで行います(もしshare-config-custom.xmlが存在しない場合は、同じフォルダにあるshare-config-custom.xml.sampleをコピー・リネームして上記ファイルを作成しておきます)。

<alf_dir>/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml

このファイルに以下の設定を追加します。サンプルファイルをリネームして使う場合は、既に同じconfigセクションが定義されている場合もありますので、その場合はそのセクションに以下の設定を追記してください。
<alfresco-config>
<config evaluator="node-type" condition="cm:content">
<forms>
 <form>
<field-visibility>
<show id="custom:reviewer" />
<show id="custom:reviewDate" />
 </field-visibility>
</form>
 </forms>
</config>
<config evaluator="string-compare" condition="DocumentLibrary">
<aspects>
<visible>
<aspect name="custom:reviewable" />
 </visible>
</aspects>
 </config>
</alfresco-config>
この設定によって、コンテンツのプロパティ表示/編集画面にcustom:reviewableの2プロパティが表示され、アスペクトリストにcustom:reviewableが追加されてアスペクト管理やルールで利用できるようになります。


ためしてみよう!


では、早速カスタム属性を使ってみましょう。まずはAlfrescoを再起動します。これらの設定ファイルをいじった後は再起動が必要になります。

まずは、適当なファイルをアップロードし、コンテンツ詳細画面のアクションメニューから「アスペクト管理」をクリックします。すると以下の画面が表示され、custom:reviewableアスペクトを使えるようになっているのでこれを選択します(表示されない場合は設定に問題があるはずです。alfrescoのログを見てみてください)。

 「変更を反映」をクリックすると、custom:reviewerプロパティとcustom:reviewDateプロパティが利用可能になります。ためしに「プロパティを編集」をクリックして値を入力すると、プロパティ一覧画面にもその値が表示されます(設定が間違ってるとプロパティが表示されません)。



手動じゃちょっと…


さすがに毎回手動でアスペクト付け外しやタイプ変更をするというのは実用的ではないので、実際に使う場合には、Java APIやJavaScript APIを使ってプログラマティックに行ったり、ルール機能を使ってコンテンツ追加時に自動的に行ったりします。ルール機能の使い方は「Alfresco4の使い方 - 基礎編(2) - ルール機能を使ってみよう!」に詳しいですが、例えば以下のような設定を行うと、特定のフォルダ以下に投入されたコンテンツに自動でアスペクトを付与することができます。


今回はタイプとアスペクトを使ったカスタム属性の追加方法について説明しました。今回言及できなかった、プロパティで指定できるデータ型や制約に関することや、プロパティ名の日本語化などの話題は折を見て書いていこうかと思います。


(2013/02/10 追記) 「Alfrescoのカスタム属性(とアスペクト名、タイプ名とか)を日本語化する」を公開しました。

Alfrescoのカスタム属性(とアスペクト名、タイプ名とか)を日本語化する

$
0
0
こんにちは。大谷です。
今回は「Alfrescoにカスタム属性を追加する - タイプとアスペクト -」に続く形で、カスタムモデル周りの日本語化(多言語化)について紹介したいと思います。基本的にはメッセージリソースの追加方法の説明だと思ってください。


プロパティ名とか変じゃない?


先ほどのリンク先の記事、特に画像を見た人は既にお気づきだと思いますが、追加したプロパティ名やアスペクト名がリソースIDみたいな文字列になっています。まあ頑張れば何を表しているか分からなくもないですが、あまりユーザフレンドリではありません。そこで、今回はこの表示をユーザが分かりやすい文字列に変えてみようと思います。つまり、表示ラベルを設定するようなものです。


まずは英語で表示できるようにしてみる


日本人であれば日本語で表示したいところですが、まずは英語にしてみましょう。日本語に関しては、設定時に一工夫必要なので(まあ大体想像つくと思いますが)、後ほど多言語化の方法と併せて説明することとします。

まずは、プロパティの表示名を設定するために、以下の2ファイルを作成します。custom-model-context.xmlは前回作成してあるので、<property name="labels">タグを追加して読み込むリソースファイル名を指定します。そして、指定したファイル名のリソースファイルを作成します。コンテンツモデル名やプロパティ名の":"を"_"に置き換える形で用い、title(表示名)やdescription(説明)の文言を設定します。

<alf_dir>/tomcat/shared/classes/alfresco/extension/custom-model-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!-- Registration of new models -->
<bean depends-on="dictionaryBootstrap" id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap">
<property name="models">
<list>
<value>alfresco/extension/customModel.xml</value>
</list>
</property>
<property name="labels">
<list>
<value>alfresco/messages/custom-model</value>
</list>
</property>
</bean>
</beans>

<alf_dir>/tomcat/shared/classes/alfresco/messages/custom-model.properties
custom_customModel.property.custom_reviewer.title=Reviewer
custom_customModel.property.custom_reviewer.description=Reviewer's name
custom_customModel.property.custom_reviewDate.title=Reviewed Date
custom_customModel.property.custom_reviewDate.description=When this item reviewed

次に、アスペクトの表示名を設定するために、以下の2ファイルを作成します。読み込むリソースファイル名を指定するcustom-messages-context.xmlはweb-extension以下に配置します。タイプもこの方法で表示名を設定できます。リソースファイル内でtype.***=***のように設定するだけです。

<alf_dir>/tomcat/shared/classes/alfresco/web-extension/custom-messages-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="custom.resources" class="org.springframework.extensions.surf.util.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.messages.custom-share-messages</value>
</list>
</property>
</bean>
</beans>

<alf_dir>/tomcat/shared/classes/alfresco/messages/custom-share-messages.properties
aspect.custom_reviewable=Reviewable

以上で設定完了です。Alfrescoサーバを再起動し、プロパティ名やアスペクト名が指定した文言になっていることが確認できると思います。先のエントリのスナップショットと比較すると変化が分かりやすいと思います。




日本語表示を追加してみよう


英語でうまく表示できたら、次は日本語表示に進みます。方法としては以下のように2通りの方法があります。
  1. 先ほど設定したリソースを日本語の文言に置き換える
  2. 先ほどのリソースファイルとは別に日本語用のリソースファイルを用意する
Alfrescoの場合、ブラウザの言語設定によって表示言語が自動的に変更されます。例えばブラウザの言語設定を英語に変更すると、Alfrescoの表示が英語になるはずです。ここで改めて先ほどの2つの方法を見てみると、2.の方法はこの言語切り替えに対応する方法ということになります。もちろんどちらの方法を選択するかは要件によりますが、ここでは2.の方法を紹介したいと思います。

手順は簡単、以下の2ファイルを追加で用意するだけです。追加するファイル名は、既存のリソースファイル名に_jaを付けたものになります。これだけで日本語フランス語のリソースだったら_fr、イタリア語だったら_it、英語だったら_enという感じです。英語のリソースファイルも用意してあげれば、日本語/英語の両方に対応した表示が完成です。何もついてない元のリソースファイルはデフォルトの表示名ということになります。

<alf_dir>/tomcat/shared/classes/alfresco/messages/custom-model_ja.properties
custom_customModel.property.custom_reviewer.title=\u30ec\u30d3\u30e5\u30a2
custom_customModel.property.custom_reviewer.description=\u30ec\u30d3\u30e5\u30fc\u8005\u540d
custom_customModel.property.custom_reviewDate.title=\u30ec\u30d3\u30e5\u30fc\u65e5
custom_customModel.property.custom_reviewDate.description=\u30ec\u30d3\u30e5\u30fc\u65e5

<alf_dir>/tomcat/shared/classes/alfresco/messages/custom-share-messages_ja.properties
aspect.custom_reviewable=\u30ec\u30d3\u30e5\u30fc\u53ef\u80fd

ここでのポイントは、日本語の文言がUnicodeエンコーディングされている点です。JDKに付属するnative2ascii等を利用してエンコーディングする必要があります。もしくは、自動的にエンコーディングしてくれるようなEclipseプラグインを使ってpropertiesファイルを編集するなどの方法があります。

では、Alfrescoサーバを再起動して再度プロパティ名やアスペクト名を確認してみましょう。無事日本語の文言に変わっているはずです。


 
今回はextensionフォルダ側とweb-extensionフォルダ側から計2つのリソースファイルを参照しましたが、役割分担としては、extensionフォルダ側から参照するリソースファイルではカスタムモデルに関するものを、web-extensionフォルダ側から参照するリソースファイルではShare UI上のメッセージに関するものを指定します。


今回の説明は以上になりますが、基本的なメッセージリソースの追加方法はお分かりいただけたかと思います。メッセージの追加が必要になった場合は是非参考にしてください。

AlfrescoのJavaScriptコードをデバッグする

$
0
0
こんにちは。大谷です。

今日はAlfrescoでJavaScriptのデバッグを行う際に便利な機能をまとめてみました。Alfrescoをカスタマイズする際にJavaScriptを触ることも多いかと思いますので、その際に参考にしてみてください。


一言でJavaScriptって言っても


Alfrescoでは、サーバサイド、クライアントサイド(ブラウザですね)の両方でJavaScriptのコードが実行されます。サーバサイドでのJavaScript実行にはRhino(JavaによるJavaScript実装)を利用しています。
 また、Alfrescoはリポジトリのコア機能を提供するalfresco、UIレイヤを提供するshareの2アプリケーションから構成されています。
従って、 一言でJavaScriptと言っても、実際にはサーバサイドJavaScript(alfresco, shareの両者で実行)とクライアントサイドJavaScript(shareが提供)の計3ヶ所について、それぞれ個別にデバッグの方法を考えなくてはなりません。



サーバサイドJavaScript(alfrescoアプリケーション)


alfrescoアプリケーションのサーバサイドJavaScriptは主に、Web Scriptsと呼ばれる、簡単にREST APIを作ることのできるフレームワークを利用する際に使われます。

まずはデバッグツールですが、AlfrescoにはRhinoで実行されるJavaScriptをデバッグするための仕組みが用意されています。まず、http://localhost:8080/alfresco/service/api/javascript/debuggerにアクセスし、管理者のログイン情報を入力します。すると以下の画面が表示されるので「Enable」をクリックします。


あとは、通常どおりAlfrescoにアクセスすればOKです。JavaScript Debuggerのダイアログが表示され、あとはJavaScriptが実行されるタイミングで適切に割り込みが入るので、ブレークポイントを設定するなり変数をウォッチするなりすることができます。



次に、ログの出力方法を見てみます。まず、JavaScriptにログ出力を仕込むには、Alfresco JavaScript APIのLogging APIを利用します(詳しくは4.0 JavaScript API - alfrescowikiを参照)。さらに、log4jの設定を変更してログレベルを適切に設定する必要があります。

<alf_dir>/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties
log4j.logger.org.springframework.extensions.webscripts=debug
log4j.logger.org.springframework.extensions.webscripts.ScriptLogger=debug
これで、JavaScript内で仕込んだログがAlfrescoログに出力されるようになります。もちろんログレベル変更後にはAlfrescoサーバの再起動が必要です。


サーバサイドJavaScript(shareアプリケーション)


次にshareアプリケーションのサーバサイドJavaScriptについてですが、基本的にはalfrescoアプリケーションのJavaScriptと同様の方法になります。デバッガを有効にするには、http://localhost:8080/share/service/api/javascript/debugger(URLのalfrescoがshareに変わってることに注意!)にアクセスすればよいだけですし、ログは<alf_dir>/tomcat/webapps/share/WEB-INF/classes/log4j.properties(こちらもファイルパスのalfrescoがshareに変わっていることに注意!)を先ほどと同じように設定するだけでOKです。


クライアントサイドJavaScript(shareアプリケーション)


最後はクライアントサイドのJavaScriptです。これは、UIレイヤを担当するshareアプリケーションがブラウザに実行させるスクリプトということになります。UIカスタマイズの際にいじることがほとんどで、<alf_dir>/tomcat/webapps/share/components/あたりにあるファイルがそれに該当します。

まずデバッグについてですが、ブラウザ上で実行されるJavaScriptのデバッグになるので、ブラウザごとに利用可能なデバッグツールを利用してください。筆者の場合は、FirefoxならFirebugとか、IEならF12で起動する開発者ツールとか、Chromeならctrl+shift+Iで起動するデベロッパーツールとかを主に使っています。

ログ出力に関しても、Alfrescoにはlog4javascriptを利用した仕組みが用意されています。まずは、以下のファイルの当該箇所を以下のように変更し、Alfrescoを再起動します。

<alf_dir>/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
<alfresco-config>

<!-- Global config section -->
<config replace="true">
<flags>
<!--
Developer debugging setting to turn on DEBUG mode for client scripts in the browser
-->
<client-debug>true</client-debug>

<!--
LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift).
This flag automatically activates logging on page load.
-->
<client-debug-autologging>true</client-debug-autologging>
</flags>
</config>

...

</alfresco-config>
これで、Alfrescoアクセス時にlog4javascriptのダイアログが表示されるようになり、このダイアログ上でログを確認できるようになります。もしくは、client-debug-autologgingをfalseにしておき、必要なタイミングでCtrl, Ctrl, Shift, Shiftと入力することでもこのダイアログを表示させることができます。


ログ出力を新たに埋め込む場合は、Alfresco.loggerという名前のlog4javascriptロガーオブジェクトを利用します。例えば以下のように記述します(詳しくはlog4javascript manualのloggersを参照)。

Alfresco.logger.info("test");
Alfresco.logger.debug("current object: ", object);

CmisSync:AlfrescoのためのDropboxのような同期ツール

$
0
0
CmisSyncを使うと、あなたのPCと社内 Alfrescoを簡単に同期できます。
オフラインでも、ドキュメントの閲覧と編集を行えます。




ステップ1

まず .NET Framework、次に CmisSyncをインストールしましょう。

ステップ2

CmisSync を実行してください。
チュートリアル画面が終わると、タスクトレイに CmisSync のアイコンが追加されます。



アイコンを右クリックして、「リモートフォルダを追加...」を選択します。

ステップ3

表示された画面の「URL」フィールドに、Alfresco サーバの URL を入力します(ブラウザで Alfresco のドキュメントを閲覧する為のURL):


プロトコル( http:// か https:// )も必要です。
ユーザ名とパスワードも入力してください。

ステップ4

「次」を押すと、Alfrescoのフォルダのリストが表示されます。
同期したいフォルダを選択してください。
とくにAlfresco Share の場合は「Sites」をクリックして、同期したい Site を選び、その「documentLibrary」を選択してください。

 
設定はこれで終了です。
CmisSync はすぐに Alfresco とあなたのPCとの同期を開始します。
CmisSync はファイルの編集・追加を双方向で行えます。
もしもファイルの変更が衝突した場合、警告が表示されます。衝突した2つのファイルはバックアップされている為、後でマージすることも可能です。

CmisSyncはイージフが開発しているオープンソース製品です。
Alfrescoだけではなく、NuxeoやIBM FileNetやSharePointなど、CMIS準拠のリポジトリならなんでも同期できます。

Klingon use CmisSync!

$
0
0
弊社製品CmisSyncクリンゴン語に翻訳しました。

言語リソースの翻訳はここで行われています。
翻訳作業は、自然言語と人工言語を趣味としている筆者(linzhixing)が担当しました。プログラミング言語は仕事で使っています。(主にJavaと、最近はRubyも)


[CmisSyncって?]
◆弊社の開発するCmisSyncというソフトウェアは、このブログでも既に紹介されていますが、AlfrescoなどのCMIS対応サーバとローカルPCの間で双方向の同期ができるDropbox風のツールです。

     Alfrescoに限らずMicrosoft SharepointやIBM FileNetなど、社内のECM(文書管理システム)サーバが文書をやり取りするCMISという標準規格に対応したものであれば、更新のあった文書がCmisSyncで自動的に同期されて、出先などオフライン/オンラインを問わずシームレスな作業が可能になります。


[クリンゴン語って?]

◆クリンゴン語は、SFテレビシリーズ『スタートレック』に登場するクリンゴン人が使用する架空の言語です。

  宇宙語の一種なので、ソフトウェアの多言語対応(globalization)としては地球(globe)の範囲を超えてしまっているきらいもありますが、便利なCmisSyncを、高度な情報技術を有する数多くのクリンゴン人やクリンゴン語を話す地球人の方々にも触れてもらいたいと思い、翻訳してみました。(英語と)クリンゴン語以外に、すでに日本語、フランス語、ウクライナ語などに翻訳されています。

◆ISO639(言語名コードの規格)によって、jaやenと同様に、tlhというコードが割り当てられています。OSやブラウザにもよりますが、言語コードを変更することでCmisSyncがクリンゴン語化されます。

     Windowsの場合は、コントロールバネル>>地域と言語>>フォーマットの値を切り替えると、対応する言語でCmisSyncのUIが表示されます。(直接は選択できないかもしれませんが……)

     "tlh"というのは不思議なスペルですが、これで一つの子音を表します。この発音はとても難しいので省略しますが、クリンゴン語を象徴する音で、クリンゴン語でクリンゴン語のことはtlhIngan Holと書きます。

◆クリンゴン語を言語として整備した言語学者マーク・オクランド氏が、Klingon Dictionaryという辞書を出しています。クリンゴン語の文法も単語も、事実上この本を基準とすることになります。ネット上でも、この本をなぞった解説サイトがいくつかありますので興味がある方は検索してみてください。


[Pick Up!]
Klingon Dictionaryには、約3000の単語しか含まれていません。また、クリンゴン人が戦闘民族であるためか、内容にも偏りがあるので、翻訳するときは上手い意訳・造語を考える必要があります。

そこで、翻訳が難しかったところや興味深かったポイントをいくつかピックアップしてみました。


Enterprise Content Management
     「enterprise」は難しい英語で、「組織」とも「冒険」とも少しずつニュアンスが違いますが、クリンゴン語とは実はとても相性のよい言葉です。そうです、エンタープライズ号は"enterpray"と呼ばれています。

       訳語: enterpray ngaSghach vu'ghach

Welcome to CmisSync!
  クリンゴン語は戦士の言葉なので、気安く「ようこそ」と挨拶することはありません。が、文明を有している限り(他の文明からそうは見えないとしても)挨拶に似たものは持っています。彼らの場合、nuqneH?「何か用か?」 というのが私たちのいう挨拶のようです。

     ちなみにCmisSyncのリソース多言語化にはcrowdinというサービスが使われていますが、ここで翻訳文を入力するとき、原文が"!"で終わっていれば訳文も"!"で終わっていないと警告表示が出ます。Welcome!のエクスクラメーションマークがnuqneH?のクエスチョンマークになるあたり、異文化の味わいがありますね。 

     訳語: CmisSyncDaq nuqneH?

Please…
     ヨーロッパ系の言語では、ソフトウェアのダイアログやメニューバーの「開く」や「戻る」は動詞の命令形ではなく不定詞で書かれることが一般的です。日本語でいうと「開け!」ではなく「開く」と書いてあるわけです。

     クリンゴン語でも、命令形ではなく動詞の原形を使うように訳しました。ただし、元の英語がPleaseで始まっている文章の場合は不定詞ではニュアンスが 出ません。命令形でもよいですが、クリンゴン語では何かを特に強く要請する場合、〜be'chugh bIHegh!「〜しないとお前は死ぬぞ!」という言い回しをします。物騒ですが、戦士の言葉なので仕方ありません。

     訳語: -be'chugh bIHegh!

synchronize
     クリンゴン語はよりによってsynchronizeを意味する単語がありません。CmisSyncは固有名詞だからそのままでよいとしても、これはCmisSyncの翻訳の根本を揺るがす由々しき事態です。しかし、クリンゴン語はたしかにボキャブラリに偏りがあるものの、幸いなことに強力な造語能力も兼ね備えています。名詞や動詞の前や後ろに、規則的に接辞を付けることで意味を変化させられるのです。

     たとえば、poS「開いている」に対しpoS-moH「開ける」、ja'「話す」に対しqa-ja'-qang「私は自主的にあなたに話す」など。

     rap「同じである」という動詞はあるので、rapmoH =「同じにする」=synchronize、という造語を作ってみました。さらに、synchronizationはrapmoHghachとなります。

     訳語: rapmoH

document / folder
     戦士であるだけでなく高度なテクノロジーと共に宇宙を駆ける彼らのこと、De'wI'「コンピュータ」やDe'「データ」、さらにtebwI'「サーバ」といった単語も存在しています。しかし、CmisSyncにとって重要なドキュメント/フォルダを意味する単語は見当たりません。

    ひとまずの訳語・造語として、ドキュメント=paper (eng.) =nav、フォルダ=container (eng.) = ngaSwI' としてみました。ngaSは英語の"contain"の意味で、-wI'を付けると行為者名詞にできます。

     この訳はベストではないかもしれません。クリンゴン語のフォーラムでは既に良い訳が作られているかもしれません。フィードバックをいただければ嬉しいです。

     訳語: nav / ngaSwI'


[最後に]
◆クリンゴン語への翻訳を通して、"Language is Open Source!"という思いを新たにしました。ぴったり来る単語や言い回しがないのなら自分で作ってしまえばいいのです。そのための材料(単語)もルール(文法)も公開されています。

     翻訳に使われているcrowdinは、誰もが翻訳することのできるコラボレーティブ型翻訳プラットホームなので、気軽にご参加ください。たとえ訳に自信がないところがあっても、他の人が修正してくれるでしょう。

     とくに筆者は『スタートレック』を一度も観たことがありませんので、本当のクリンゴン人はもっと自然な言い回しをしていた、などご指摘いただければと思います。

     CmisSyncはオープンソースソフトウェアで、現在も随時バージョンアップを重ねています。ぜひお使いください!

AlfrescoをActive Directoryと連携させてみた

$
0
0
こんにちは。おおたにです。

今回はAlfrescoをActive Directory(以下AD)と連携させてみようと思います。一言で連携と言っても、単純な認証の委譲なのか、SSOなのかとかありますが、今回はAlfrescoログイン時の認証をADに行ってもらう&ユーザ・グループ情報を同期するという一番簡単なパターンについて見ていきます。


初めに


この記事の前提条件は以下の通りです。
  • Alfrescoがインストールされている(本記事では現時点での最新版であるAlfresco 4.2.cを使っています)
  • ADがセットアップされている(Windows Server 2008 R2を使ってます)
Alfrescoがインストールされていない場合は「Alfresco4.0をインストールしてみよう(インストーラ編)」や「Alfresco4.0をインストールしてみよう(手動インストール編)」を参考にインストールしてみてください。ADについては…頑張ってください!

なお、ADにはLDAPアクセスする必要があるため、ファイアウォールでは標準的なLDAP用ポートである389番を通すように設定しておいてください。


AlfrescoにAD連携用の設定を行う


基本は以前の記事「AlfrescoのLDAP連携」とほぼ同じで、設定項目がちょろっと違う程度だと思ってください。

まずは、ユーザやグループのBaseDNを調べるべく、適当なLDAPクライアントを使ってADにアクセスしてみます。筆者はよくApache Directory Studio(のEclipseプラグイン)を使っています。インストール方法等はこちらにまとめられています。インストールしたら、早速ADにアクセスしてみます。以下のスナップショットのように新規接続を作成してアクセスし、同期対象のユーザ/グループのBaseDNを調べます。




すると、ユーザのBaseDNはOU=User Accounts,DC=aegif,DC=localで、グループのBaseDNはOU=User Groups,DC=aegif,DC=localであることが分かります。ちなみにこの例ではADサーバのIPが192.168.0.70、ドメイン名がaegif.local、ADアクセス用のユーザアカウントはAdministratorとなっています(実運用上は、ADの情報を取得する権限を委譲した個別のユーザアカウントを用意した方がよいかと思います)。

以上で設定に必要な情報がそろったので、Alfrescoにこれらの設定を反映させます。いじるファイルは<tomcat_dir>/shared/classes/alfresco-global.propertiesです。このファイルが無い場合は、alfresco-global.properties.sampleというファイルがあるはずなのでこれをリネームして利用します。

# How to map the user id entered by the user to taht passed through to LDAP
# In Active Directory, this can either be the user principal name (UPN) or DN.
# UPNs are in the form <samaccountname>@domain and are held in the userPrincipalName attribute of a user
ldap.authentication.userNameFormat=%s@aegif.local

# The URL to connect to the LDAP server
ldap.authentication.java.naming.provider.url=ldap://192.168.0.70:389

# The default principal to bind with (only used for LDAP sync). This should be a UPN or DN
ldap.synchronization.java.naming.security.principal=Administrator@aegif.local

# The password for the default principal (only used for LDAP sync)
ldap.synchronization.java.naming.security.credentials=p@ssw0rd

# The group search base restricts the LDAP group query to a sub section of tree on the LDAP server.
ldap.synchronization.groupSearchBase=ou\=User Groups,dc\=aegif,dc\=local

# The user search base restricts the LDAP user query to a sub section of tree on the LDAP server.
ldap.synchronization.userSearchBase=ou\=User Accounts,dc\=aegif,dc\=local


# authentication chain
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap-ad1:ldap-ad

以上で設定完了です。"ldap"から始まるプロパティがAD連携に関する設定で、"authentication.chain"は、Alfrescoログイン時の認証システムとして何を利用するかを指定するものです。複数指定し、認証処理をチェイニングすることが可能で、この例では通常のAlfrescoの認証とAD認証の両方を利用できるように設定されます。
"ldap-ad1:ldap-ad"はある種のおまじないで、Alfrescoの認証システム等で使われるSubsystemという仕組みにおけるAD連携モジュールのIDだと思ってください(このおまじないによって呼び出されるbeanの定義ファイルは <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/ldap-ad/ldap-ad-authentication-context.xmlですので、興味があったら見てみてください)。


できたかな?


あとはAlfrescoを起動し、実際に動作確認してみるだけです。Alfresco起動時にユーザ/グループ情報の同期処理が走るので、起動後にログをチェックしてみてエラーが出力されていないかを確認してみてください。 また、実際にADのユーザでログインしてみて、正常にログインできることも確認してくださいね(当たり前!)。他方、adminユーザでログインし、ユーザ/グループ情報が同期されていることも確認しましょう。

今回はここまでになります。この先にはSSO等がひかえていると思いますが、それはそれで大きなトピックですのでまたの機会にしたいと思います。

Alfrescoのユーザ検索の文字数制限

$
0
0
こんにちは。おおたにです。

今回はAlfrescoのユーザ検索についてお話ししたいと思います。Alfrescoを使っている人であればご存知の方も多いと思いますが、ユーザ検索には最低文字数が設定されています。基本的には1文字なのですが、権限管理画面でのユーザ/グループ検索だけ何故か3文字になっています。ユーザIDだけでなく姓名でも検索できるのですが、残念ながら「鈴木」さんとか「林」さんとかでは検索できません。


せっかくなので、ここも1文字以上で検索できるようにしてみましょう。変更箇所は以下のとおりです。

webapps/share/components/manage-permissions/manage-permissions.js
// Set the correct options for our use
this.modules.authorityFinder.setOptions(
{
dataWebScript: Alfresco.constants.URL_SERVICECONTEXT + "components/people-finder/authority-query",
viewMode: Alfresco.AuthorityFinder.VIEW_MODE_COMPACT,
singleSelectMode: true,
// minSearchTermLength: 3
minSearchTermLength: 1
});

さらに、上記変更ファイルからwebapps/share/components/manage-permissions/manage-permissions-min.jsを再作成する必要があります。この-min.jsは元のJavaScriptファイルを圧縮し、容量を減らしたものなので、YUI Compressor等を使って圧縮してください。

上記2ファイルの修正が終わったら、Alfrescoサーバを再起動して確認してみましょう。以下のように3文字未満でも検索ができるようになっていればOKです。

 

What is the best open source Java decompiler?

$
0
0
A Java decompiler turns a .class file back into a .java file. While decompiled code is not perfect (no comments, sometimes obfuscated names), it can be useful during hacking competitions, or to liberate your data locked by proprietary software, or to satisfy curiosity.

There used to be a time where everyone's decompiler of choice was jad.
But jad is dead, and it was not Open Source anyway, so there must be something better, right?

Current winner

Jdec is the best Open Source decompiler I have found so far.
It is not perfect though: There is no community, and there are bugs, none of which has got fixed since 2007. Also, its website looks very unprofessional.

Challengers

  • JReversePro shows signs of activity but has had no release since 2002
  • JODE has had no release since 2004
  • dcompiler has had no release since 2002

Need work

  • Dava seems to be a thesis project rather than a programming tool.
  • javap only shows assembly-level code
  • Soot is not really a decompiler

Out of Competition

Those ones might be usable but they are not Open Source:
  • Fernflower is not maintained and not open source. Its author Stiver told me "Unfortunately I can't release it under GPL right now, because there are still some legal questions to be solved. However if you are representing a well established company or an R&D institute, an exception would be possible."
  • Java Decompiler (JD) is not open source
  • DJ Java Decompiler is not open source
  • Cavaj is not open source
Please let us know about any other Open Source decompiler your know!
Nicolas Raoul

    How to get the HTTPS headers?

    $
    0
    0
    Long-time sniffers remember tracking HTTP headers down the wire using Ethereal (now Wireshark), but this has become impossible in environments where everything is encrypted (HTTPS).

    In such environments, tracking headers means monitoring either directly within the server process (difficult in clouds), or within the client process (typically a browser).

    Recently I had to reverse-engineer the convoluted authentication to the CMIS endpoint of a Sharepoint server. Below is my tale, and the tools I tried (spoiler: only the last one did the job).

    Contestant 1: Chrome Developer Tools

    In Chrome, I start Incognito mode (CTRL-SHIFT-N) to make sure no saved passwords/cookies interfere, fire up the Developer Tools (CTRL-SHIFT-I), select "Network" to see the requests, and launch the request.

    As seen in the screenshot below, Chrome shows the conversation between client and server. Something sounds fishy: Only 2 requests, and the last one is marked as "canceled" even though download succeded... let's try another tool!



    Contestant 2: Firefox Web Console

    In Firefox, I start Private Browsing mode (CTRL-SHIFT-P), fire up the Web Console (CTRL-SHIFT-K), unselect everything but "Net", and launch the request.

    Firefox wins over Chrome by showing the right number of requests (four):


    Now to the job: Getting the HTTPS headers!
    I click on a request, and something awful happens: a totally unusable window appears, displaying what I need (request headers and response headers), but preventing me from copy-pasting it.

    Mouse selection goes crazy, and copying everything results in an unusable long string containing everything aggregated without spaces [1]. Not to mention the inexact timestamp [2], the content that does not scale with the window [3], and the weird titles font style [4].


    Fine if you just want to see the headers, but real hackers want to script-parse and diff the headers, right? Next!


    Winner: Httpfox

    In Firefox, after having installed the Httpfox extension, I start Private Browsing, fire up Httpfox (SHIFT-F2), press "Start", and launch the request.
    The lower part shows the headers, and copying them is accessible via the context menu... perfect!



    Conclusion: Httpfox is the easiest way to get HTTPS headers.
    If you know any other convenient tool, please let us know in the comments!
    Nicolas Raoul

    Alfrescoでユーザごとの使用容量を制限したい! -クオータの自動設定とか-

    $
    0
    0
    こんにちは。

     4月から娘が転園する関係で慣らし保育だったりとか自身が風邪引いたりとか(会社でも流行ってます)でてんやわんやのおおたにです。
     弊社は幸い業務内容によっては自宅やコワーキングスペースでの作業が認められているため、それらを駆使しつつ何とか仕事をこなしています。まあ慣らし保育だと通常よりも早い時間に迎えに行かなくてはならないのでそこは有休をうまく使ったりして乗り切っています。

     さて、今回はAlfrescoのクオータ設定についてのお話しです。Alfrescoではユーザごとにクオータを設定することができます(現時点での最新版Alfresco 4.2.cにて確認)。ただし、デフォルトのクオータサイズを指定してユーザ作成時に自動設定するようなことはできず、ユーザごとに手動で設定する必要があります(もしくは一括でクオータを設定するようなスクリプトを流すなど)。



     そこで今回は、クオータを自動設定するための方法を紹介したいと思います。前提条件としては、Alfrescoの開発環境が整っていることです。詳しくはここあたりを参照してみてください。

     開発内容自体は大したことは無くて、以下のクラス1個と定義ファイル1個を作るだけです。UserQuotaPolicyクラスはビルド後jarファイル等にしてクラスパス(<alf_dir>/tomcat/webapps/alfresco/WEB-INF/lib/)にコピーします。

    jp.aegif.sample.UserQuotaPolicy
    public class UserQuotaPolicy implements NodeServicePolicies.OnCreateNodePolicy
    {
    private PolicyComponent policyComponent;
    private NodeService nodeService;
    private ContentUsageService contentUsageService;

    public void setPolicyComponent(PolicyComponent policyComponent) {
    this.policyComponent = policyComponent;
    }
    public void setNodeService(NodeService nodeService) {
    this.nodeService = nodeService;
    }
    public void setContentUsageService(ContentUsageService contentUsageService) {
    this.contentUsageService = contentUsageService;
    }

    public void init() {
    policyComponent.bindClassBehaviour(
    NodeServicePolicies.OnCreateNodePolicy.QNAME, ContentModel.TYPE_PERSON,
    new JavaBehaviour(this, "onCreateNode", Behaviour.NotificationFrequency.TRANSACTION_COMMIT));
    }

    @Override
    public void onCreateNode(ChildAssociationRef childAssociationRef) {
    String userName = (String)nodeService.getProperty(childAssociationRef.getChildRef(), ContentModel.PROP_USERNAME);
    long currentUserQuota = contentUsageService.getUserQuota(userName);
    if (currentUserQuota < 0) {
    contentUsageService.setUserQuota(userName, 524288000L);
    }
    }
    }

    <alf_dir>/tomcat/shared/classes/alfresco/extension/user-quota-context.xml
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
    <beans>
    <bean id="defaultUserQuota" class="jp.aegif.sample.UserQuotaPolicy" init-method="init">
    <property name="policyComponent">
    <ref bean="policyComponent" />
    </property>
    <property name="nodeService">
    <ref bean="nodeService" />
    </property>
    <property name="contentUsageService">
    <ref bean="contentUsageImpl" />
    </property>
    </bean>
    </beans>

     UserQuotaPolicyクラスではPolicyという仕組を利用しており、ノード作成時にそのノードタイプがcm:personノード(ユーザの情報を保持するノードタイプ)であった場合に、クオータを設定する処理を自動実行します。Policyは今回利用したOnCreateNodePolicy以外にもたくさん定義されているので、何らかの処理の際に独自の処理を挿入するようなカスタマイズを行う時にはよくお世話になります。とても重宝する拡張ポイントですので、是非覚えておいてください。

     あとは、定義ファイルを指定のディレクトリにコピーし、Alfrescoを再起動するだけです。早速ユーザを追加し、クオータが自動設定されていることを確認してみてください。今回の例ではクオータを決め打ちで500MBとしていますが、この値を定義ファイルから指定できるようにするとより便利になるので、そちらも是非チャレンジしてみてください。

    CMIS: What are Secondary object types?

    $
    0
    0
    The main advantage of ECM servers over file servers is the ability to have metadata about the documents, and the ability to define what metadata should exist, on what kind of document.

    For instance, an ECM administrator might decide that pictures should have a height and a width metadata, while bills should have a price metadata. In CMIS parlance, pictures and bills are called "primary types".

    Most ECM servers also have a "secondary type" concept. Secondary types are more transverse, and can be applied to documents of any primary type. For instance, "Confidentiality" can be applied to images as well as bills. A document can only have one primary type, but can have several secondary types.
    A few examples: Versionability, effectivity, geographic details, audio details, ...

    Forgotten in CMIS 1.0, secondary types are now part of the CMIS 1.1 standard, which should be official soon.

    Example with Alfresco

    In Alfresco, a secondary type is called an "aspect". You can easily add aspects to any document. There are predefined aspects, but you can also define custom aspects.

    For instance, let's say we manage field observation reports, and each observation report has a latitude and longitude. So, let's add the predefined "Geographic" secondary type to a document. In the document's details page, click on "Manage Aspects":


     Then add the "Geographic" aspect:




    The latitude and longitude are now part of the document's metadata properties:


    Looks nice in the Alfresco client, but how is it via CMIS?

    The CMIS 1.1 standard is not official yet, so unfortunately in Alfresco 4.2.0, secondary type properties can not yet be seen in the CMIS properties:


    Instead, you have to get them via the CMIS extensions, which is a mechanism for vendor-specific tricks:


    Actually, there is an open source Java library that makes it easy to retrieve them from there. But I would suggest waiting for CMIS 1.1, you will then be able to use secondary type properties easily, in a way that will work on all ECM servers.

    Nicolas Raoul

    Alfresco4.2をインストールしてみよう(手動インストール編)

    $
    0
    0
    こんにちは。大谷です。

    以前、Alfresco4.0をインストールしてみよう(手動インストール編)という記事を書いたのですが、現在の最新版が4.2.cで、必要なJDKやTomcatの要件も変わってきているので、改めてインストールの方法を紹介しようと思います。相変わらずですが、OSはWindowsを想定しており、構成はTomcat/MySQLとしています。なお、インストーラを利用したインストールは以前と変わっていませんので、Alfresco4.0をインストールしてみよう(インストーラ編)を参照してください。


    JDKをインストールする


    1. Alfresco4.2ではJDK7が必要になります。こちらのサイトからJDK7をダウンロードします。
    2. ダウンロードしたファイルを実行し、JDKをインストールします。


    Tomcatを準備する


    1. Alfresco用のディレクトリを作成します。ここでは、Cドライブ直下にalfresco42cというディレクトリを作成し、以下ではALF_HOMEと表記します(ALF_HOME = c:/alfresco42c)。
    2. cd c:/
      mkdir alfresco42c
    3. Apache TomcatのサイトからTomcatをダウンロードします。本記事では、Alfresco 4.2.cのインストーラに同梱されているTomcatと同じバージョンである7.0.30を利用します。
    4. ダウンロードしたファイルをALF_HOMEに展開します。展開するとALF_HOME以下にapache-tomcat-<バージョン番号>という名前のディレクトリが作成されますので、このディレクトリをTOMCAT_HOMEと表記します(TOMCAT_HOME = c:/alfresco42c/apache-tomcat-7.0.30)。


    MySQLを準備する


    1. MySQL Developer ZoneからMySQL Community Server 5.5をダウンロードし、インストールします。また、後ほど利用するMySQL Connector/J 5.1(JDBCドライバ)をここからダウンロードします。


    AlfrescoをTomcatにデプロイする


    1. Alfresco Community Editionのダウンロードサイトにアクセスし、"Custom Installs & Optional Modules"のリンクからalfresco-community-4.2.c.zipをダウンロードします。
    2. ダウンロードしたファイルを適当なディレクトリに展開します。このうち、bin, licenses, web-serverディレクトリの中身をAlfrescoのディレクトリにコピーします。
    • bin/* -> <ALF_HOME>/bin
    • licenses/* -> <ALF_HOME>/licenses
    • web-server/* -> <TOMCAT_HOME>
    ALF_HOME、TOMCAT_HOME以下は次のようになります。
     c:\alfresco42c のディレクトリ

    [.] [..] [apache-tomcat-7.0.30] [bin] [licenses]
     c:\alfresco42c\apache-tomcat-7.0.30 のディレクトリ

    [.] [..] [bin] [conf] [endorsed] [lib] LICENSE
    [logs] NOTICE RELEASE-NOTES RUNNING.txt [shared] [temp] [webapps]
    [work]
  • JDBCドライバをTomcatのクラスパスに配置します。先ほどダウンロードしたMySQL Connector/Jを展開し、mysql-connector-java-5.1.xx-bin.jarを<TOMCAT_HOME>/libにコピーします。

  • Tomcatの設定を変更します。まず、<TOMCAT_HOME>/conf/catalina.propertiesをテキストエディタで開き、shared.loaderプロパティを以下のように変更します。
  • shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
  • <TOMCAT_HOME>/conf/server.xmlをテキストエディタで開き、8080番ポートの設定を以下のように変更します。
  • <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
    connectionTimeout="20000"
    redirectPort="8443" />
  • JVMのヒープサイズを設定します。<TOMCAT_HOME>/bin/catalina.batに以下の行を追加します。JRE_HOMEや最大/最小ヒープサイズ等はPCの設定・スペックに応じて変更してください。
  • set JRE_HOME=C:\Program Files\Java\jdk1.7.0_0xx\jre
    set JAVA_OPTS=-Xms1024m -Xmx2048m -Xss1024k -XX:MaxPermSize=256m -XX:NewSize=256m -server -Dcom.sun.management.jmxremote


    データベースを設定する


    Alfrescoはコンテンツのメタデータをデータベースで管理し、コンテンツのファイル実体とインデックス情報をファイルシステムで管理します。以下ではそれぞれについての設定を行います。
    1. MySQLにログインします。
    2. mysql -u root -p
    3. 以下のコマンドでMySQLにAlfresco用のデータベースを作成します。この例では、データベース名をalfrescoとし、ユーザ名/パスワードもalfresco/alfrescoとなります。
    4. create database alfresco default character set utf8 collate utf8_bin;
      grant all on alfresco.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;
    5. Alfrescoが上記データベースを使用するように設定ファイルを変更します。<TOMCAT_HOME>/shared/classes/alfresco-global.properties.sampleをalfresco-global.propertiesにリネームし、テキストエディタで開いて以下のように変更します(コメントアウトされている場合はそのコメントアウトを外し、環境に合うように設定を変更してください)。
    6. #
      # Sample database connection properties
      #
      db.username=alfresco
      db.password=alfresco

      #
      # MySQL connection
      #
      db.driver=org.gjt.mm.mysql.Driver
      db.url=jdbc:mysql://localhost/alfresco?useUnicode=yes&characterEncoding=UTF-8

    7. 引き続きalfresco-global.propertiesを編集し、dir.rootプロパティを設定します。dir.rootはコンテンツ実体やインデックス情報を格納するディレクトリを指定するプロパティですが、<ALF_HOME>/alf_dataあたりを設定しておくと無難です。
    8. dir.root=c:/alfresco42c/alf_data


    その他の設定を行う


    最後に、その他のツールとの連携設定を行います。ここではOpenOffice/LibreOffice、ImageMagick、SWFTools(pdf2swf)について説明します。この3つのツールの用途は以下のとおりですので、必要に応じてインストール、設定を行ってください。
    • OpenOffice/LibreOffice : Alfrescoでファイルフォーマット変換を行う際に使います。PDF変換機能などを利用する場合に設定する必要があります。
    • ImageMagick : コンテンツのサムネイルやプレビューを生成する際に使います。
    • SWFTools : コンテンツのプレビューを生成する際に使います。
    1. それぞれのサイト(OpenOffice.orgもしくはLibreOfficeImageMagickSWFTools)からツールをダウンロードし、インストールします。次に、alfresco-global.propertiesをテキストエディタで開き、以下のプロパティを設定します。
    • ooo.exeはOpenOffice実行ファイルのパスを指定します。
    • img.rootはImageMagickのインストール先、img.dynはライブラリディレクトリ、img.exeは実行ファイルパスを指定します。Linuxの場合はimg.rootを設定するだけで動くかもしれません。
    • swf.exeはSWFToolsに入っているpdf2swfの実行ファイルパスを指定します。
    ooo.exe=C:/Program Files (x86)/OpenOffice.org 3/program/soffice
    ooo.enabled=true
    img.root=C:/alfresco/ImageMagick-6.7.3-7
    img.dyn=${img.root}
    img.exe=${img.root}/convert.exe
    swf.exe=C:/alfresco/SWFTools/pdf2swf.exe
    なお、筆者手元の環境は、OpenOffice 3.3.0、ImageMagick 6.7.3-7-Q16、SWFTools 0.9.0となっています(ちょっと古めのリリースを利用しています)。


    Alfrescoを起動して動作確認する


    以上で設定は終わりです。最後にAlfrescoを起動して動作確認を行います。
    1. <TOMCAT_HOME>/bin/startup.batを実行し、コンソールの出力内容(もしくはalfresco.logやcatalina.out)をチェックします。初回起動時はデータベースにテーブルを追加する作業やwarファイルを展開する作業がありますので時間がかかります。
    2. 起動が正常終了すると、コンソールもしくはログに"Server startup in xxxxxx ms"と表示されます。
    3. 正常に起動したら、ブラウザからAlfrescoにアクセスしてみましょう。http://localhost:8080/shareにアクセスします。管理者ユーザのデフォルトユーザ名/パスワードは、admin/adminになりますのでそれを入力します。
    4. 正常にログインし、ダッシュボード画面が表示されたらめでたく動作確認完了です!
    以上がAlfrescoを手動インストールする手順になります。Alfrescoを実際に使ってみるにあたっては、弊社Webサイトからダウンロードできるユーザガイド等が役立つと思いますので是非参考にしてみてください。

    Alfrescoでcron的なスケジュール処理を行う時の注意点

    $
    0
    0
    こんにちは。

    溶連菌(≠人喰いバクテリア)感染症のおおたにです。喉の痛みと下がらない熱で結構苦しいです。
    さて、今日はAlfrescoでスケジュール処理を定義したり、そのスケジュールを変更したりするときに気を付けるポイントを紹介しようと思います。

    まず、Alfrescoにはcronよろしく指定されたタイミングでジョブを実行する仕組みを持っています。Quartzというオープンソースのジョブスケジューラを使っており、例えば、非同期のインデックス生成であるとか、日次のインデックスバックアップ処理であるとか、LDAP連携時のユーザ情報同期処理などがこの仕組みで動いています。これらの処理の実施タイミングについては、やはりcronと同様の表現で指定します。

    index.backup.cronExpression=0 0 3 * * ?

    上の例は、webapps/alfresco/WEB-INF/classes/alfresco/repository.propertiesで定義されているインデックスバックアップの実行スケジュールです。これを毎月3日0時0分と読んだ方は注意が必要です。多分このように読んだ方は、Linuxのcron式のフォーマットに従って読んだのだと思います。
    Linuxでは「<分> <時> <日> <月> <曜日> <年(オプション)>」ですが、Quartzでは以下のとおり、1桁目が秒となってります。

      <秒> <分> <時> <日> <月> <曜日> <年(オプション)>

    なので、先ほどの例は月次処理ではなく、毎日3時0分に開始する日次処理ということになります。詳しくはScheduled Actions - alfrescowikiを参照してください(すいません英語です)。

    今回はcron式のフォーマットについての注意点を紹介しましたが、機会があれば、スケジュールジョブの実装方法についても紹介したいと思います。

    Liferay Social Office事始め~その1~

    $
    0
    0
    aegifの名倉です。
    今日はLiferay Social Officeについて、書かせていただきます。

    Liferay Social Officeって何?

    Liferay社のWebサイトを見ていると、製品のところにLiferay Portalと並んでLiferay Social Officeがあります。パッと見、別の製品のように見えるので、使ってみるのに敷居が高そうなんですが、何のことはなくて、実体はLiferayの追加プラグイン集のようなものなのです。Liferay社がコラボレーションやソーシャルの機能関連のポートレットをいい感じにひとまとまりにして提供しているといったものです。
    Liferay Social OfficeにもLiferay Portal同様、エンタープライズ版とコミュニティ版が存在していて、コミュニティ版は無料で提供されています。

    Liferay Social Officeのインストール

    では早速、Liferay Social Officeをインストールしてみましょう。
    上記のように追加プラグイン集なのでLiferay Portalが必要です。
    LiferayのWebサイトからコミュニティ版のLiferay PortalとLiferay Social Officeをダウンロードしましょう。
    Liferay Portalは以下のURLからダウンロードできます。
    http://www.liferay.com/downloads/liferay-portal/available-releases
    Liferay Portalのインストールについては、過去の記事を参考にしてください。
    Liferay Social OfficeはLiferay Marketplaceからダウンロードすることになります。Liferay Marketplaceからアプリケーションをダウンロードする際はLiferayアカウントが必要になりますので、予めWebサイトでユーザ登録をしておいてください。
    LiferayのWebサイトでMarketplaceタブの仕事効率化のところにLiferay Social Officeはありますので、リンクをクリックしてください。


    以下のような画面が表示されるので、アイコンの下のFreeをクリックしてください。


    そうすると次のような画面が表示されるので、「自アカウント用にこのアプリケーションを購入」を選択し、「私はエンドユーザ使用許諾契約 と 免責条項を読んで合意しました。」 にチェックを入れて
    Freeのボタンをクリックしてください。

     
    購入に成功したメッセージが画面に表示されるので、「購入済みを見る」ボタンをクリックしてください。


    ここで表示される画面には今までに自分が購入したものの一覧が表示されます。
    リストからSocial Officeを探して「ダウンロード数」ボタンをクリックしてください。


    次のような画面が表示されますので、Liferay Social Office のCEの方の「アプリケーション」ボタンをクリックしてください。拡張子が.lpkg形式のファイルがダウンロードされてきます。


    これで必要なファイルは用意できましたので、Liferay Portalを起動しましょう。
    起動完了後に先ほどダウンロードしてきた.lpkgファイルをLiferay Portalのホームディレクトリにある
    deployフォルダに格納します。自動的にファイルが展開され、順々にwarファイルがホットデプロイされていきます。
    これにてLiferay Social Officeのインストールは完了です。

    Liferay Social Officeの機能

    Liferay Social Officeを触ってみる前に、何が追加されたのかを確認しておきましょう。
    さきほどの.lpkgファイルの中には、
    ・チャット
    ・知人リスト
    ・イベント表示
    ・マイクロブログ
    ・プライベートメッセージ
    ・タスク管理
    ・WYSIWYGエディタ
    ・Social Office全般機能
    の8つのポートレット
    ・Social Officeテーマ
    ・Welcome Social Officeテーマ
    の2つのテーマ
    などが含まれています。
    これらを組み合わせることでLiferay Social Officeはソーシャルやコラボレーションの機能を実現しています。

    Liferay Social Officeを始めよう!

    さて、Liferay Social OfficeをデプロイしたLiferayに管理者権限でログインしましょう。
    さほど何も変わっていないように見えます。確かに、ポートレットの追加画面にはいくつか新しくポートレットが追加されていますし、コントロールパネルにも、Contacts Centerのメニューが追加されています。これらを使って、ページを構築していくのもSocial Officeの利用方法の1つではありますが、
    もっと簡単に使えるようにできます。
    まず、コントロールパネルのロールメニューを開いてください。実はここで新しく「Social Office User」というロールが追加されています。


    このユーザのメンバに管理者を追加してみましょう。
    すると、画面上部のドックバーの右側が
    このようになりました。今まではなかった「ダッシュボード」のメニューと、黒地に白文字の数字が表示されています。
    では、ダッシュボードのメニューをクリックしてみましょう。このようなLiferay Social Office専用の個人ダッシュボード画面が表示されます。


    ここでは予め決められたテンプレートに従って、Liferay Social Officeで追加したポートレットが配置されており、そのままLiferay Social Officeの利用を始めることができます。

    これまででLiferay Social Officeを使うための準備はできました。
    Liferay Social Officeを使い方については、また別の機会に書かせていただきたいと思います。



    Alfrescoの検索対象属性を追加する

    $
    0
    0
     こんにちは。GWは館林のこいのぼりを見に行った大谷です。世界一を標ぼうするだけあってさすがの規模でしたが、若干食傷気味でもあります。

     さて、今回はAlfrescoの検索機能についての話をしようと思います。Alfrescoには簡易検索とアドバンスド検索の2種類があります。前者はキーワードを入力して検索するだけのもの、後者はコンテンツの型や属性値を指定して検索することができるものです。
     ここで一つ気になるのは、簡易検索の場合、コンテンツのどの情報を対象に検索が行われるのかということです。
     以下では、簡易検索の検索対象が何なのか、検索対象を増やす(または減らす)場合はどうすればよいのか、ということについて説明します(説明には、現時点での最新版であるAlfresco 4.2.cを利用します)

    簡易検索とアドバンスド検索


     まずは簡易検索とアドバンスド検索の違いを確認してみましょう。以下に簡易検索とアドバンスド検索の検索画面のスナップショットを並べてみました。
     違いは一目瞭然で、簡易検索の場合はキーワードを入力するだけですが、アドバンスド検索はコンテンツタイプの指定や属性値ごとの検索条件指定ができます。アドバンスド検索には、簡易検索BOXの左にある検索アイコンからアクセスすることができます。




    簡易検索の検索対象


     では、簡易検索の検索対象を調べてみましょう。簡易検索の設定は以下のファイルで行われており、default-query-template内に列挙されている内容が簡易検索の検索対象になります。デフォルトでは名前やタイトル、説明、ファイル全文検索(TEXTと書かれているもの)、タグ(TAGと書かれているもの)などが対象になっています。

    <alf_dir>/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/slingshot/search/search.get.config.xml
    <search>
    <default-query-template>%(cm:name cm:title cm:description ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT TAG cm:creator cm:modifier)</default-query-template>
    </search>

     例えば、作成者や変更者についても簡易検索の検索対象にしたい場合は、上記の設定にcm:creatorやcm:modifierなどを追加します。また、独自のカスタムモデルを定義している場合は、そこで定義した属性を追加することもあるでしょう。
     設定変更はAlfrescoを再起動すると反映されますので、実際に検索対象を追加して動作を確認してみてください。

    第15回Alfresco勉強会が開催されました

    $
    0
    0
    こんにちは。大谷です。

    先日第15回Alfresco勉強会が開催されました。今回は弊社オフィスにて開催したため、会場にたどり着くまでが結構複雑だったと思います。すいませんすいません…

    さて、今回は2つの発表がありましたが、それぞれ簡単に紹介したいと思います。

    1. Alfresco4をインストールしてみよう (@_tasky)


    資料はこちら

    はい。自分の発表です。Alfresco初心者向けの発表として、インストーラを使ったインストール方法とその注意点(最低限設定しておいた方がよい内容)を紹介しました。Windowsでインストーラを使ってインストールした場合は、tomcatの設定ツールを使ってJAVA_OPTSの設定を変更するなどした方がよいです。デフォルトの設定だと最低限度のメモリしか使わない設定になっています。


    2. Alfrescoの権限管理について (@to2y氏)


    資料はこちら

    次は、中~上級者向けの発表で、Alfrescoの権限管理の仕組みとANDでの権限解決のカスタマイズ例などが紹介されました。ロールとパーミッション、Share上で利用できるロールなどの比較的高レイヤの概念の説明から、Acegi Security(現Spring Security)ベースの権限コントロールについての低レイヤな話まで、日ごろあまり意識しないけどとても重要な内容について理解することができました。


    今回の勉強会については以上になりますが、引き続き第16回Alfresco勉強会が2013年6月6日(木)に予定されております。興味のある方は是非ご参加いただければと思います。

    How to synchronize SharePoint to a Mac? (alternative to SkyDrive Pro client)

    $
    0
    0
    SharePoint users can synchronize their documents with the SkyDrive Pro client (not to be confused with SkyDrive).

    Unfortunately, the SkyDrive Pro client is not available on Mac (and Linux), and even if you are on Windows, in addition you must pay for Office 2013 Professional Plus before using it.
    Microsoft shows no sign of clemence towards Mac users on this matter.
    Using Parallels does not help: My Documents is then seen as a network location, which means that Skydrive Pro fails to save documents there.

    But here is new hope!
    CmisSync allows you to sync SharePoint to your desktop, no license fees, and Mac/Linux versions are planned.

    CmisSync is currently Windows-only, but it is Open Source and looking for volunteers to port the code. CmisSync is built with Mono, which means it should be easy to port it to Mac/Linux/Android/iOS. So please developers plunge forward and don't hesitate to ask us questions :-)

    Bye Google Reader, hello Feedindicator!

    $
    0
    0
    In one month, Google Reader will shut down.
    Luckily, Ubuntu users can use Feedindicator:

    Features

    • Click a news and it will appear in your browser.
    • Icon turns grey when there are no more news.
    • Easily mark all as read.
    • Option to show each feed in its own sub-menu.

    Adding a feed

    To add a feed, just click "Add feed" and enter the RSS/Atom URL:


    Migrating from Google Reader to Feedindicator

    From Google Reader, click the gear, select Reader Settings> Import/Export> Export your subscriptions.This will download subscriptions.xml

    Download google-reader-to-feedindicator.sh, make it executable, and execute it in the same directory as subscriptions.xml ...Feedindicator should now show your feeds!

    Details

    Feedindicator stores all feeds as a simple text file at ~/.config/feedindicator/feeds.cfg
    One line per feed, for instance:

    http://www.w3.org/News/atom.xml
    http://www.tradecommissioner.gc.ca/rss/ForeignEvents_RSS.xml


    Feedindicator is Open Source, I maintain it, waiting for your feedback!
    Nicolas Raoul

    Alfresco Shareのコンテキストパスを変えたい

    $
    0
    0
    こんにちは。おおたにです。

    最近、子育て支援みたいな話で育休3年とか在宅勤務しやすいように制度を見直すみたいなことが言われてると思うんですが、なんかちょっと違和感あるんですよね。本当に働く女性を支援する効果があるのかな、と。
     3年もブランクが空くとその間の変化に対するキャッチアップも大変だろうし、そういう社員を抱える会社側にも大きなリスクになると思うわけで、正直なところ現実的じゃないような気がしています。在宅勤務についても、子供と大人一人という状態だと確実に子供の相手だけで手いっぱいになるわけで、在宅であろうと仕事するのって厳しいと思います。
     そもそもこれらの話って、女性が子供の面倒を見るってことが前提に置かれてるように思えてなりません。なんで、男性も、もっというと二人で面倒を見れるようにする、という方向にならないのかと思うと、とても残念な気持ちになります。。。

     例えば、育休3年取れるようにするよりも男性の育休取得率を高めようとか、在宅勤務については間口をもっと広げて両親ともに取りやすい環境を作るとか、そういうことの方がより重要なんじゃないかと思っています。子供の世話を二人に分散しつつ、両者とも仕事をできるような環境が整えばよいなと思っています(3年間は家で育てる、ということの是非については各論あるようなのでここではスルーします。個人的には必ずしも必要とは思わないですが…)。
     こんなことを考えていると、この会社は比較的融通利くので、そういうところを最大限活用していこう、と改めて思います。男性でも育休取れるし、業務内容によっては在宅勤務もできるし(1日単位で)。多分こういうのって社会制度的なものもあるけど、会社の風土みたいなのがより重要だと思うんですよね。会社が許容してくれれば良いわけなので。少しでもそういう方向に社会が変わっていくといいなと思う今日この頃です。


     さて、前置きが長くなってしまいましたが、今回はAlfresco Shareのコンテキストパスを変更する方法について紹介したいと思います。複数のAlfresco Shareが稼働しているときに、フロントのWebサーバやロードバランサ等でコンテキストパスを見てリクエストの振り先を変えたい等の要件があったりします。その場合には、Alfresco Shareのコンテキストパスを変更する必要があります。以下では現時点で最新のAlfresco Community 4.2.cを使って具体的な説明をしていきます。


    そもそもコンテキストパスって何?


     まずは、この手のWebアプリケーションにアクセスするためのURLについておさらいします。Alfresco Shareでは、/shareにアクセスすると、/share/pageにリダイレクトされ、ログイン画面が表示されます(正確には/share/page/type/loginにアクセスしていますが、その詳細については割愛します)。
     このURLのうち、"/share"をコンテキストパス、"/page"をサーブレットパスと呼びます。コンテキストパスは、デプロイしたWebアプリケーションを識別するためのもので、サーブレットパスは、実際に処理を行うサーブレットを指定するためのものです。



    コンテキストパスを変更しよう


     Alfresco Shareのコンテキストパスはデフォルトでは/shareとなっているので、これを変更することになります。Alfresco Shareはwar形式のファイルで提供されているため、コンテキストパスを変更する方法は以下のとおり、とても簡単です。
    1. 既存の Alfresco Shareをアンデプロイ(配備解除)する
    2. コンテキストパスを指定してAlfresco Shareをデプロイする
    1. はTomcatであれば、Tomcat Web Application Managerから"Alfresco Project Slingshot"(Shareアプリケーション)を配備解除するか、Tomcat停止状態で/tomcat/webapps/shareを削除すればOKです。
     2. はTomcatであれば、Tomcat Web Application Managerからコンテキストパスを指定して(例えば"share2"など)、Alfresco Shareのwarファイルshare.warをデプロイします。もしくは、share.warをshare2.warなどにリネームしてから/tomcat/webapps/にコピーし、Tomcatを起動してオートデプロイを行います。

     以上でAlfresco Shareのコンテキストパスが変更されます。



    コンテキストパスを変更したら…


     以上の変更を行ってからブラウザで/share2にアクセスすると、見事にコンテキストパスが変更されていることが確認できます。ただ、1点だけ注意が必要です。
    /tomcat/shared/classes/alfresco-global.propertiesのパラメータのうち、share.context=shareとなっているものをshare.context=share2などのように、新しいコンテキストパスに変更する必要があります。
     これを変えないと、サイト招待のメールや、アクティビティフィードなどで問題が発生する可能性があります(具体的には、メールやフィードのリンクが適切に生成されないという問題です)。なので、Alfresco Shareのコンテキストパスを変更した際には必ずalfresco-global.propertiesの設定も変更しましょう。

    Viewing all 244 articles
    Browse latest View live