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

Aegif joins the Open Invention Network

$
0
0
Today, Aegif has joined the Open Invention Network, following 1000 other companies like Google, IBM, RedHat, Twitter.

Besides the big names, many of the Open Invention Network members operate in the same realm as Aegif:
- Alfresco
- Liferay
- Magnolia
- Moodle
- OpenBravo
- OpenStack
- Salesforce.com
- SugarCRM
- The Document Foundation

All of these organizations have pledged to not use their patent portfolio to extort money from Linux users. The pledge actually covers Linux and a few hundred Open Source packages (details).

Aegif believes that using patents against Open Source software is harmful to innovation.
Rather than patent litigation, we believe that openness is the best way to perform business in the software field.

iplus1: Enrich your existing flashcards deck with new example sentences written by bilinguals

$
0
0

You already know all your language-learning flashcards by heart, and want new study material?
How about adding to your deck a dozen new sentences, written by bilingual people, and that match your current level?

Tatoeba is a community-maintained database of example sentences. For example:
  • 散歩しましょう。 (Japanese)
  • Let's take a walk. (English)
  • Давай прогуляемся. (Russian)
  • Bir yürüyüş yapalım. (Turkish)

iplus1 allows you to enrich your flashcards deck with sentences from Tatoeba.
Chosen sentences are those that you will like to learn: they contain words that you already know, plus one new word.

iplus1 has been developed by an American student under my mentoring, as part as a Google Summer of Code project of Tatoeba. iplus1 is open source and works fine on test servers with Anki decks, expect to see it go live soon!

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

$
0
0
こんにちは。てらしたです。最近社内でも緑と青の陣営に分かれて戦う例のゲームが流行ってきています。が、ハマり過ぎると家庭が壊れる未来が容易に想像できるのであえてのんびりやるようにしています。同時期に始めた同僚ははるかに先に進んでいますが、まだ家庭が壊れている人はいないようです。今のところは。

さて、先週10/15(水)に第24回Alfresco勉強会が開催されました。
ここ何回かの勉強会と同じように、今回も参加者の方がAlfrescoに興味はあるけどまだ使っていないという状況だったので、前半は弊社のカワベが画面をお見せしながら機能や基本的な使い方について説明しました。こういう使い方はできるか、とか、どのように使われているか具体的な事例を教えてほしい、といった質疑応答も活発に行われて、気付けば1時間近く経過していました。思ったよりサクサク動くしUIもよくできているという感想もいただけたので、こちらの記事スライドなどを参考にしてぜひ一度使ってみていただければと思います。

そして後半は私がAlfrescoのコンテンツのライフサイクルについて発表しました。

コンテンツのライフサイクル

発表資料はこちら

Alfresco ShareのUIからコンテンツを作成 → 削除 → ごみ箱から削除 という操作を行った時に、裏側のファイルシステムやDB、インデックスはどうなっているのか、という内容です。普段はあまり意識することはないのですが、Alfrescoを導入して運用していく上で管理者の方は知っておいた方がいい内容だと思います。バックアップからのリストアや、削除されたコンテンツのファイル実体をファイルシステムから削除して容量を空ける、といったことをやる時に必要になる知識です。一連の流れをファイルシステム、DB、インデックスの中身を見ながら通していただくと、Alfrescoでコンテンツがどのように管理されているのかについての理解が深まると思います。

次回の勉強会は12月17日(水)に開催予定です。たくさんの方のご参加をお待ちしております。参加申し込みはこちらからお願いします。

Alfresco 5.0.bの機能紹介

$
0
0
こんにちは、かわべです。先日会社の人たちとサバイバルゲームをしました。初体験だったのですがとても楽しかったですし、もっと痛いのかと思いきや顔も体もちゃんと防護されているので意外と平気でした。「痛くないので撃たれたのかどうかよくわかりません」とスタッフさんに言ったら、「それは相手も同じなので、なるべく顔を狙ってあげてください」と笑顔で言われたのが印象的です。(ゲームの終盤になっても狙った場所を打てるような余裕は生まれませんでしたが…)

さて、本日はAlfresco 5.0.bでの追加機能について紹介します。Alfresco 5.0.bがリリースされたのは2014年10月なので少し遅くなってしまいましたが、気にせずいきましょう。記事を作成するにあたってはMac OS X 10.9.5にインストーラを利用してインストールしたAlfresco Community Edition 5.0.bを使用しています。

5.0.aがリリースされた際にも当ブログで新機能の紹介を行い、その際に4.2系と比較して主に「検索」と「プレビュー」が強化されたという風にご紹介しました。5.0.bではこの2点のさらなる強化が見られます。まずはこちらから確認していきましょう。

検索機能の強化(サジェスト、スペルチェック)

5.0.bにおける最大の変化として、インストーラに同梱されるSolrのバージョンが4系になりました(5.0.aの段階ではSolr1.4でした)。Solrのバージョンが上がったことによって、5.0.aで実装された検索フィルタはより高速になり、さらに管理者によって設定を変更・追加できるようになりました。

検索結果右上の「検索マネージャ」をクリックすると、フィルタの管理画面に移動できます。



新規フィルタの作成画面はこんな感じです。フィルタ対象を細かく指定できるようになっています。

検索結果に対してフィルタを適用する場合にはURLが変わるので、よく使う検索条件をブックマークして使用することもできます。

入力途中での予測検索の性能も向上しました。5.0.aと比較するとスマートな表示となっています。



検索結果から続けて検索を行う場合に、入力途中の単語と一致する言葉を存在するコンテンツの名前や内容からサジェストする機能も追加されました。


検索結果が見つからないワードで検索した場合には、自動的に置換したワードで検索をする機能も備わりました。

 

検索結果でのプレビュー

検索結果のページから移動することなく文書をプレビューすることが可能になりました。検索結果のサムネイルをクリックするとプレビュー画面が立ち上がります。このプレビュー画面内での検索もできます。


検索結果に対するアクション実行機能の実装と合わせて、検索がより使いやすくなりました。

その他に追加された機能も少し見てみましょう。

 

アクティビティの記録

ユーザのアクティビティとして「プレビュー」と「ダウンロード」も記録され、ダッシュレットに表示されるようになりました。これまでと比較すると件数が増えてしまうため、類似アクティビティは纏めて折りたたみ表示されるようになりました。

 

新しいサイトダッシュレット

サイトの利用状況の分析に役立つ2つの新しいダッシュレットが追加されました。サイトのファイルの種類、特定の期間のコントリビュータの内訳をわかりやすいグラフで表示してくれます。今後はこのような分析機能もより強化されていくようなので、こちらも期待です。


 

注意点

便利になった5.0.bですが、削除された機能もいくつかあります。Alfresco Explorerクライアント(いわゆるShareでない旧UI画面)はこのバージョンから利用できなくなりました。
また、当記事で触れたように検索機能が強化されたのですが、インデックスシステムとしてluceneを利用するとこれらの機能を完全に利用することはできません。
詳しくはリリースノートをご覧ください。

 

まとめ

これまでのバージョンを知っている方も知らない方も、ぜひAlfresco 5.0.bをインストールしてこれらの機能を試してみてください。また、今後のAlfresco勉強会でも5.0.bを題材とする回があると思いますので、もっと知りたい方はぜひご参加ください。

Alfrescoでリアルタイムウイルススキャンを実装する

$
0
0

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

今回は、Alfrescoでファイルアップロード時にウイルススキャンを行うようなカスタムモジュールを作ってみたいと思います。想定している環境は、以下のとおりです。Alfrescoについては、多分このままもしくは多少の修正で5.0.xでも動くと思います。
  • Alfresco : Alfresco Community Edition 4.2.f
  • OS : CentOS 6系
  • ウイルススキャンツール : Clam AntiVirus


準備


まずは、AlfrescoとClam AntiVirusをインストールします。AlfrescoのインストールはAlfresco4.0をインストールしてみよう(インストーラ編)Alfresco4.2をインストールしてみよう(手動インストール編)あたりを参考にしてください。

次に、Clam AntiVirusをインストールします。CentOSへのインストールはこちらの記事が参考になります。基本的にはファイルアップロードのタイミングでスキャンコマンドを実行するだけなので、自動起動や定期実行の設定は必要ありません。clamscanコマンドがパス指定なしで実行できるようになっていればOKです。


カスタムモジュールの開発


では、早速コードを見てみましょう。今回作ったコード/設定ファイルは以下の4つになります。なお、サンプルコードはこちらからダウンロードすることができます。
  • VirusScanActionExecuter.java : ウイルススキャン処理の実装
  • VirusDetectException.java : ウイルス検知時に投げるException
  • VirusScan.java : OnContentUpdatePolicyを利用したコンテンツ実体更新フック
  • alfresco-virusscan-sample-context.xml :VirusScanActionExecuterとVirusScanのSpring bean定義ファイル

VirusScanActionExecuter.java

ウイルススキャン処理を、ActionExecuterとして実装します。ActionExecuterとして実装するとActionServiceから名前を指定するだけで処理をキックできるため、Alfresco内での再利用性が高まります。具体的には、ActionExecuterAbstractBaseのexecuteImplに処理を実装します。

public class VirusScanActionExecuter extends ActionExecuterAbstractBase {
...
@Override
protected void executeImpl(Action action, NodeRef nodeRef) {
String fileName = (String) fileFolderService.getFileInfo(nodeRef).getName();
LOGGER.debug("Virus scan start : " + fileName);

// Output content to temporary file
ContentReader contentReader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);
File targetFile = null;
try {
targetFile = TempFileProvider.createTempFile(contentReader.getContentInputStream(), "virusscan_", ".bin");
} catch (Exception e) {
e.printStackTrace();
return;
}

// Execute virus scan
Map<String, String> properties = new HashMap<String, String>();
properties.put("target", targetFile.getAbsolutePath());
ExecutionResult result = virusScanCommand.execute(properties);

// Check result and delete infected file.
int exitValue = result.getExitValue();
if (exitValue == 0) {
LOGGER.debug("Virus not detected : " + fileName);
} else if (exitValue == 1) {
fileFolderService.delete(nodeRef);
throw new VirusDetectException("Virus detected and cleaned up : " + fileName);
} else {
LOGGER.error("Unable to scan : " + result);
}
}
...
}

VirusScan.java

OnContentUpdatePolicyを利用して、コンテンツ実体更新時(正確にはそのトランザクションのコミット時)にウイルススキャン処理をキックします。

public class VirusScan extends TransactionListenerAdapter implements OnContentUpdatePolicy, InitializingBean {
...
@Override
public void onContentUpdate(NodeRef nodeRef, boolean newContent) {
if (!nodeService.getType(nodeRef).equals(ContentModel.TYPE_CONTENT) || nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT) == null) {
return;
}
AlfrescoTransactionSupport.bindListener(this);
AlfrescoTransactionSupport.bindResource(NODE_KEY, nodeRef);
}

@Override
public void beforeCommit(boolean readOnly)
{
final NodeRef nodeRef = AlfrescoTransactionSupport.getResource(NODE_KEY);
String fileName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);

LOGGER.debug("beforeCommit start : " + fileName + ", readonly : " + readOnly);
actionService.executeAction(actionService.createAction("virus-scan-action"), nodeRef);
LOGGER.debug("beforeCommit end : " + fileName);
}
}

alfresco-virusscan-sample-context.xml

上記2つの実装をSpring beanとして定義します。VirusScanActionExecuterはvirus-scan-actionという名前で登録し、Java APIやJavaScript API、REST APIからこの名前でウイルススキャン処理を実行できるようになります。

コマンドの中身はLinux用になっているのでOSに応じて変更もしくはOSごとに指定してください。

<bean id="virus-scan-action" class="jp.aegif.alfresco.sample.action.executer.VirusScanActionExecuter" parent="action-executer">
<property name="contentService">
<ref bean="ContentService" />
</property>
<property name="fileFolderService">
<ref bean="FileFolderService" />
</property>
<property name="virusScanCommand">
<bean class="org.alfresco.util.exec.RuntimeExec">
<property name="commandsAndArguments">
<map>
<entry key=".*">
<list>
<value>clamscan</value>
<value>--stdout</value>
<value>--no-summary</value>
<value>${target}</value>
</list>
</entry>
</map>
</property>
</bean>
</property>
</bean>


テストしてみよう


では、カスタムモジュールを適用し、ウイルススキャン機能をテストしてみましょう。

JavaクラスファイルはalfrescoVirusScanSample.jarなどにパッケージングして<tomcat_dir>/webapps/alfresco/WEB-INF/lib/にコピーし、alfresco-virusscan-sample-context.xmlは<tomcat_dir>/shared/classes/alfresco/extension/にコピーします。もちろんAlfrescoを再起動する必要があります。

そして、クライアントPCはリアルタイムスキャンが無効になっていることを確認します。クラ イアントPCにリアルタイムスキャンが設定されていると、テスト用のウイルスファイルが自動除去されてしまってテストができません。そして、テスト用のウイルスファイルをこちらからダウンロードしておきます。

Alfrescoが起動したら、Alfrescoにログインして先ほどのテスト用ウイルスファイルをアップロードします。以下のようにアップロードに失敗し、ウイルスが検知された旨が表示されればOKです。


さらに、catalina.out等のログにはVirusDetectExceptionが出力されているはずです。

ERROR [extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-19] Exception from executeScript - redirecting to status template error: 10120029 Virus detected and cleaned up : eicar.com.txt
jp.aegif.alfresco.sample.action.executer.VirusDetectException: 10120029 Virus detected and cleaned up : eicar.com.txt
at jp.aegif.alfresco.sample.action.executer.VirusScanActionExecuter.executeImpl(VirusScanActionExecuter.java:68)
...

まとめ


テストはうまくいきましたでしょうか?以上でウイルススキャンを行うカスタムモジュールの基本的な部分ができたかと思います。実際に利用するにあたっては、さらに以下のようなことを考慮する必要があるかもしれません。
  • 1トランザクションで複数のファイル(ノード)が作成されるような場合には対応していない
    • ウイルススキャンアクション呼び出し部分に工夫が必要
  • clamscanはパフォーマンスが良くない
    • ウイルス定義を予めメモリに展開しておくclamdscanの利用
    • Clam AntiVirus以外のウイルススキャンツールの利用
  • ファイルアップロード時ではなく、アクションメニューから手動で実行したい
    • ウイルススキャンをActionExecuterとして実装しているので簡単に実現できます(何人かが既に実装して公開しています) 

    Alfresco 5.0とSolr 4を手動インストールしてみた(Alfresco 5.0.b以降)

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

    以前、「Alfresco4.2をインストールしてみよう(手動インストール編)」という記事を書いたのですが、先ごろリリースされたAlfresco Community 5.0.bで構成に大きな変更があったので、改めて手動インストールの方法を紹介しようと思います。

    ※ なお、インストーラを利用したインストールは以前と変わっていませんので、「Alfresco4.0をインストールしてみよう(インストーラ編)」を参照してください。インストーラを使うとウィザードに沿っていくつかの設定項目を入力するだけでAlfrescoがインストールできますので、てっとり早く試してみたい場合はインストーラの利用をお勧めします。

    「大きな変更」とはSolr 4への対応のことで、これまでの手順に加えてSolr 4のセットアップが新たに必要になりました。これまでは検索エンジンとしてLuceneを使ったインストール手順を紹介していましたが、Alfresco Community 5.0.bからはLuceneをサポートしなくなっています。なお、本記事では以下のような構成を想定しています。
    • OS : Windows
    • Java : JDK7
    • Alfresco : Alfresco Community 5.0.b
    • アプリケーションサーバ : Tomcat 7
    • RDBMS : MySQL Community Server 5.6
    • Solr 4はAlfrescoと同じTomcatインスタンス上にデプロイ
    • Alfresco - Solr間は非SSL通信


    JDKのインストール


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


    Tomcatのインストール


    1. Alfresco用のディレクトリを作成します。ここでは、Cドライブ直下にalfresco50bというディレクトリを作成し、以下ではALF_HOMEと表記します(ALF_HOME = C:/alfresco50b)。
    2. Apache TomcatのサイトからTomcat 7をダウンロードします。
    3. ダウンロードしたファイルをALF_HOMEに展開します。展開するとALF_HOME以下にapache-tomcat-<バージョン番号>という名前のディレクトリが作成されますので、このディレクトリをTOMCAT_HOMEと表記します(TOMCAT_HOME = C:/alfresco50b/apache-tomcat-7.0.xx)。


    MySQLのインストール


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


    Tomcatの設定


    1. Alfresco Community Editionのダウンロードサイトにアクセスし、Alfresco 5.0.b Community -> alfresco-community-5.0.b.zipをダウンロードします。
    2. ダウンロードしたファイルを適当なディレクトリに展開します。このうち、alf_data, amps, bin, solr4ディレクトリをALF_HOMEにコピーし、web_serverディレクトリの中身をTOMCAT_HOMEにコピーします(webapps等既存フォルダへのファイル追加も行われます)。
    3. JDBCドライバをTomcatのクラスパスに配置します。先ほどダウンロードしたMySQL Connector/Jを展開し、mysql-connector-java-5.1.xx-bin.jarを<TOMCAT_HOME>/libにコピーします。
    4. Tomcatの設定を変更します。<TOMCAT_HOME>/conf/catalina.properties のshared.loaderプロパティを以下のように変更します。
    5. shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
    6. <TOMCAT_HOME>/conf/server.xml の8080番ポートのConnector設定を以下のように変更します。AJPを利用する場合は8009番についてもURIEncoding設定を追加します。
    7. <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
      connectionTimeout="20000"
      redirectPort="8443" />
    8. <TOMCAT_HOME>/bin/catalina.bat に以下の行を追加してJVMの設定を変更します。JRE_HOMEや最大/最小ヒープサイズ等はPCの設定・スペックに応じて変更してください。alfresco.homeは<ALF_HOME>のパスを指定します。
    9. set JRE_HOME=C:\Program Files\Java\jdk1.7.0_xx\jre
      set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:MaxPermSize=512m -server -Dalfresco.home=C:/alfresco50b -Dcom.sun.management.jmxremote
    10. <ALF_HOME>/solr4/context.xml を <TOMCAT_HOME>/conf/Catalina/localhost/solr4.xml にリネーム/コピーし、環境変数の値を環境に応じて設定します。
    11. <Environment name="solr/home"        type="java.lang.String" value="C:/alfresco50b/solr4" override="true"/>
      <Environment name="solr/model/dir" type="java.lang.String" value="C:/alfresco50b/alf_data/solr4/model" override="true"/>
      <Environment name="solr/content/dir" type="java.lang.String" value="C:/alfresco50b/alf_data/solr4/content" override="true"/>


    データベースの作成


    Alfrescoはコンテンツのメタデータをデータベースで管理し、コンテンツのファイル実体をファイルシステムで管理します。データベースについては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;


    Solrの設定


    1. <ALF_HOME>/solr4/workspace-SpacesStore/conf/solrcore.properties と <ALF_HOME>/solr4/archive-SpacesStore/conf/solrcore.properties のdata.dir.rootプロパティ(インデックス格納先)とalfresco.secureCommsプロパティ(SSL通信か否か)を以下のように変更します。パスは環境に応じて変更してください。
    2. data.dir.root=C:/alfresco50b/alf_data/solr4/index
      alfresco.secureComms=none


    外部ツールのインストール


    次に、Alfrescoが利用する外部ツールのインストールを行います。ここではLibreOffice, ImageMagick, Ghostscript, SWFTools(pdf2swf)について説明します。この4つのツールの用途は以下のとおりですので、必要に応じてインストール、設定を行ってください。
    • LibreOffice : Alfrescoでファイルフォーマット変換を行う際に使います。PDF変換機能などを利用する場合に設定する必要があります。(手元の環境では少し古い4.1.0.4を利用)
    • ImageMagick : コンテンツのサムネイルやプレビューを生成する際に使います。(手元の環境では6.8.6.9を利用)
    • Ghostscript : ImageMagickが間接的に利用します。(手元の環境では9.10を利用)
    • SWFTools : 一部コンテンツのプレビューを生成する際に使います。(手元の環境では0.9.0を利用)


    Alfrescoの設定


    続いて、Alfrescoの設定を行います。大きく分けると、データベース接続設定、ファイルシステムの設定、外部ツール連携設定の3つがあります。
    1. <TOMCAT_HOME>/shared/classes/alfresco-global.properties.sample をalfresco-global.propertiesにリネームします。以下のプロパティ設定は全てalfresco-global.propertiesに行います。
    2. データベース接続設定、ファイルシステムの設定について、以下のように設定します(全てデフォルトでコメントアウトされているので、コメントアウトを外して環境に合わせて設定変更してください)。
    3. #
      # Sample custom content and index data location
      #
      dir.root=C:/alfresco50b/alf_data

      #
      # 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
    4. 検索エンジンとしてSolr 4を使い、Alfrescoとの通信を非SSL化するために以下の設定を追記します。
    5. index.subsystem.name=solr4
      solr.secureComms=none
    6. 外部ツールとの連携について、環境に合わせて以下のように設定します(コメントアウトされているものもあるので適宜コメントアウトを外すなりして設定変更してください)。
    7. ooo.exe=C:/Program Files (x86)/LibreOffice 4/program/soffice
      ooo.enabled=true
      img.root=C:/Program Files/ImageMagick-6.8.6-Q16
      img.exe=${img.root}/convert.exe
      img.gslib=C:/Program Files/gs/gs9.10/lib
      swf.exe=c:/SWFTools/pdf2swf.exe


    Alfrescoの初回起動と追加の設定


    最後に、一度Alfrescoを起動してWARファイルを展開し、その展開されたファイルの設定を修正します。
    1. <TOMCAT_HOME>/bin/startup.bat を実行してAlfrescoを起動します。
    2. コンソールの出力内容(もしくはalfresco.logやcatalina.out)をチェックします。初回起動時はデータベースにテーブルを追加する作業やwarファイルを展開する作業がありますので時間がかかりますが、最終的にはExceptionが断続的に出力される状態となります(一部SSL通信の設定が残っているため)
    3. <TOMCAT_HOME>/bin/shutdown.bat を実行してAlfrescoを停止します。
    4. <TOMCAT_HOME>/webapps/alfresco/WEB-INF/web.xml を編集し、SSL設定に関する以下の箇所をコメントアウトします。
    5. <security-constraint>
      <web-resource-collection>
      <web-resource-name>SOLR</web-resource-name>
      <url-pattern>/service/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
      <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
      </security-constraint>

      <security-constraint>
      <web-resource-collection>
      <web-resource-name>SOLR</web-resource-name>
      <url-pattern>/s/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
      <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
      </security-constraint>

      <security-constraint>
      <web-resource-collection>
      <web-resource-name>SOLR</web-resource-name>
      <url-pattern>/wcservice/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
      <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
      </security-constraint>

      <security-constraint>
      <web-resource-collection>
      <web-resource-name>SOLR</web-resource-name>
      <url-pattern>/wcs/api/solr/*</url-pattern>
      </web-resource-collection>

      <auth-constraint>
      <role-name>repoclient</role-name>
      </auth-constraint>

      <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
      </security-constraint>

      <login-config>
      <auth-method>CLIENT-CERT</auth-method>
      <realm-name>Repository</realm-name>
      </login-config>

      <security-role>
      <role-name>repoclient</role-name>
      </security-role>
    6. <TOMCAT_HOME>/webapps/solr4/WEB-INF/web.xml を編集し、SSL設定に関する以下の箇所をコメントアウトします。
    7. <security-constraint>
      <web-resource-collection>
      <url-pattern>/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
      <role-name>repository</role-name>
      </auth-constraint>
      <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
      </security-constraint>

      <login-config>
      <auth-method>CLIENT-CERT</auth-method>
      <realm-name>Solr</realm-name>
      </login-config>

      <security-role>
      <role-name>repository</role-name>
      </security-role>


    動作確認


    以上で設定は完了です。Alfrescoを起動して動作確認してみましょう。
    1. <TOMCAT_HOME>/bin/startup.bat を実行してAlfrescoを起動します。
    2. コンソールの出力内容(もしくはalfresco.logやcatalina.out)をチェックします。正常に起動すると、コンソールもしくはログに"Server startup in xxxxxx ms"と表示されます。
    3. 、ブラウザで http://localhost:8080/share にアクセスします。管理者ユーザのデフォルトユーザ名/パスワードは、admin/adminになりますのでそれを入力します。

    4. ログインに成功し、ユーザダッシュボード画面が表示されたら動作確認完了です!

    5. 念のため、Solrにもアクセスしてみましょう。URLは http://localhost:8080/solr4 です。以下の画面が表示されたらOKです。

    以上がAlfresco 5.0(5.0.b以降)をインストールする手順となります。本番環境構築の際には、Solr 4の別建てやAlfresco - Solr間のSSL化など、さらに考慮する必要のある事項がありますが、本質的にはこの手順でいけると思います。

    Alfresco 5.0の新機能については本ブログの記事「Alfresco 5.0.bの機能紹介」をチェックしてみてください。また、基本的な使い方については「Alfresco 4.2の使い方 - ユーザ管理・グループ管理」、「Alfresco 4.2の使い方 - リポジトリとサイトの準備をしよう」あたりが参考になるかと思いますので是非ご一読ください。

    CmisSync on Raspberry Pi: The Internet of Things meets document management

    $
    0
    0
    Raspberry Pi is a tiny board (the size of a credit card) that allows you to create any kind of robot or fun hardware:


    Examples:
    - Santa detectors
    - Sandwich carriers
    - Ultra-cheap laptops (UNICEF)
    - Industrial robots
    - Audit sensors

    And guess what? CmisSync runs on Raspberry Pi!
    CmisSync is a file synchronization tool compatible with any document management server (Alfresco/SharePoint/FileNet/Documentum/etc) thanks to the CMIS protocol.
    Imagine for instance a tiny sensor measuring air pollution and sending a weekly report directly to your document server over Wi-Fi.

    A South African company is already embedding CmisSync in office scanners, so that scanned documents get automatically synchronized to Alfresco or another ECM server:




    Compare that with the pain it is to achieve the same thing using a normal scanner, and you can easily feel the need for such intelligent hardware based on open standards.

    Raspberry Pi + CmisSync can also be used in environments with no permanent network connection, for instance fleets of trucks travelling in uncovered areas and sending reports (load/unload/sleep) when network becomes available. CmisSync makes the Internet of Things survive Internet cuts.
    Nicolas Raoul

    Alfresco 5.0とActive DirectoryでNTLM SSOを設定する

    $
    0
    0
    こんにちは。おおたにです。今回はActive Directory(以下AD)と連携してAlfrescoでSSOを実現する方法を紹介したいと思います。


    何が実現できるのか


    AlfrescoとADのSSO設定を行うと、ADで管理された端末からユーザID/パスワードを入力することなくAlfrescoにアクセスできるようになります。

    端末上のWindowsにログインする際に利用した認証情報(ADによって管理されているユーザに関するもの)を利用し、Alfrescoへのアクセス時に自動的に認証を行います。認証方法としてはNTLM v1とKerberosの2種類がありますが、以下ではNTLM v1を使ったSSOの設定手順を説明します。


    必要なもの


    以下の説明での前提条件、事前に準備が必要なものは以下のとおりです。なお、筆者はAlfresco 5.0.b、Windows Server 2012 (AD)、Windows 7 Professional (Client)という構成で動作確認を行いました。
    • Alfresco 5.0 (3.2以上であれば基本的に同様の手順で設定可能です)
    • Active Directoryサーバ
      • サーバ名もしくはサーバIP (ここでは kate とします)
      • ドメイン名 (ここでは aegif.local とします)
      • LDAPサービスでユーザ/グループ情報の取得権限を持つユーザ名 (ここではAdministrator を使います)
      • 上記ユーザのパスワード (ここでは thepassword とします)
      • ユーザ情報格納先のベースDN (ここでは cn=Users,dc=aegif,dc=local とします)
      • グループ情報格納先のベースDN (ここでは cn=Users,dc=aegif,dc=local とします)
      • ドメインに所属するクライアントPC(テストに利用します)

    Alfrescoの設定


    まずAlfrescoをダウンロード、インストールします。インストーラが提供されているのでインストール自体はそんなに難しくありませんが、こちらの記事が参考になると思います。インストールが完了したら、 ブラウザで http://localhost:8080/share にアクセスし、adminユーザでログインできることを確認しておいてください。

    Alfrescoが正しくインストールされたら、alfresco-global.propertiesに以下の設定を追記します。

    <tomcat_dir>/shared/classes/alfresco-global.properties :
    authentication.chain=passthru1:passthru,ldap-ad1:ldap-ad,alfrescoNtlm1:alfrescoNtlm
    ntlm.authentication.sso.enabled=true

    ldap.authentication.active=false
    ldap.authentication.userNameFormat=%s@aegif.local
    ldap.authentication.java.naming.provider.url=ldap://kate:389

    ldap.synchronization.active=true
    ldap.synchronization.java.naming.security.principal=Administrator@aegif.local
    ldap.synchronization.java.naming.security.credentials=thepassword
    ldap.synchronization.groupSearchBase=cn\=Users,dc\=aegif,dc\=local
    ldap.synchronization.userSearchBase=cn\=Users,dc\=aegif,dc\=local
    synchronization.import.cron=0 0 * * * ?

    passthru.authentication.useLocalServer=false
    passthru.authentication.domain=aegif.local
    passthru.authentication.servers=aegif.local\\kate
    passthru.authentication.defaultAdministratorUserNames=Administrator

    ドメイン名、サーバ名、LDAP認証情報、ベースDN等は環境に合わせて設定してください。以下、上記設定の説明です。
    • authentication.chain でAlfrescoログインのための認証チェーンを指定します。passthruがSSO認証、ldap-adがAD認証(ユーザ/パスワード入力タイプ)、alfrescoNtlmがAlfrescoが管理するユーザ情報での認証です。認証チェーンとは、複数の認証方式を連鎖させるもので、ここでは、SSO→AD認証→Alfresco認証の順に認証をトライします。
    • ntlm.authentication.sso.enabled=true でNTLM SSOが有効になります。
    • ldap.authentication.active=false でldap-adの認証機能を無効化し、ldap.synchronization.active=true でldap-adのユーザ/グループ同期機能を有効化します。
      • ここではAD認証自体は行わず、AD上のユーザ/グループ情報をAlfrescoに同期させる(定期的に差分情報をインポートする)ことのみを行います。
    • synchronization.import.cron で同期周期を設定します。デフォルトでは1日1回0時に実行されます(上記例では毎時0分に実行されます)。
    • passthru.authentication.useLocalServer でADサーバ上でAlfrescoが稼働しているか否かを指定します。falseの場合は passthru.authentication.domain, passthru.authentication.servers を指定する必要があります。
    • passthru.authentication.defaultAdministratorUserNames にAlfrescoの管理者権限を与えたいユーザ名を列挙します。

    次に、share-config-custom.xmlの設定を変更します。デフォルトでは以下のSSO向けの設定がコメントアウトされていますので、コメントアウトのタグを外して設定を有効にします。

    <tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml :
    <config evaluator="string-compare" condition="Remote">
    <remote>
    <keystore>
    <path>alfresco/web-extension/alfresco-system.p12</path>
    <type>pkcs12</type>
    <password>alfresco-system</password>
    </keystore>

    <connector>
    <id>alfrescoCookie</id>
    <name>Alfresco Connector</name>
    <description>Connects to an Alfresco instance using cookie-based authentication</description>
    <class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class>
    </connector>

    <connector>
    <id>alfrescoHeader</id>
    <name>Alfresco Connector</name>
    <description>Connects to an Alfresco instance using header and cookie-based authentication</description>
    <class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class>
    <userHeader>SsoUserHeader</userHeader>
    </connector>

    <endpoint>
    <id>alfresco</id>
    <name>Alfresco - user access</name>
    <description>Access to Alfresco Repository WebScripts that require user authentication</description>
    <connector-id>alfrescoCookie</connector-id>
    <endpoint-url>http://localhost:8080/alfresco/wcs</endpoint-url>
    <identity>user</identity>
    <external-auth>true</external-auth>
    </endpoint>
    </remote>
    </config>

    以上でAlfrescoの設定は終わりです。設定を反映させるため、Alfrescoを再起動します。


    Active Directoryサーバの設定


    次に、ADサーバ上での設定を行います。AlfrescoのNTLM SSOはNTLMv1だけでNTLMv2に対応していないため、AD配下のクライアントのLAN Manager認証レベルを変更する必要があります(セキュリティレベルを落としたくない場合はKerberos認証の利用をお勧めします)。

    まずは、Win+Rを押して gpmc.mscを実行します。「グループポリシーの管理」コンソールが起動するので、目的のドメインのデフォルトグループポリシーを編集します。


    以下のエディタが表示されるので、コンピューターの構成→ポリシー→Windowsの設定→セキュリティの設定→ローカルポリシー→セキュリティオプションをクリックし、「ネットワークセキュリティ:LAN Manager認証レベル」をダブルクリックします。


    以下のダイアログが表示されるので、「このポリシーの設定を定義する」にチェックを入れて、「LMとNTLMを送信する(ネゴシエートした場合NTLMv2セッションセキュリティを使う)」を選択してOKをクリックします。


    以上でADサーバ上での設定は完了です。


    クライアントPCの設定


    以下の設定は全てのクライアントPCで設定する必要があります。クライアントのログイン情報をAlfrescoに渡すためには、AlfrescoのURLがイントラネットゾーン判定される必要があるため、インターネットオプションのセキュリティ設定にAlfrescoのURLを追加します。

    Internet Explorerのインターネットオプションを開き、ローカルイントラネットにAlfrescoのURLを追加します。HTTPでアクセスする場合は「このゾーンは…」のチェックを外します。



    テストしてみよう


    では、ADユーザでログインしたクライアントPCを利用し、Alfrescoにアクセスしてみましょう。先ほどイントラネットゾーンに追加したURLを使ってアクセスしてください(先のスナップショットの例ですと、http://alfresco.aegif.jp:8080/share となります)。ログイン画面が表示されず、直接ダッシュボード画面が表示されればテスト成功です。


    トラブルシューティング



    うまくいかない場合は以下のことを試してみてください。
    • alfresco.log, catalina.out等に出力されているExceptionを確認してみる
    • ユーザ/グループの同期が正常に行われているか(AD上のユーザ/グループがAlfresco上にも生成されているか)を確認してみる
    • LDAPクライアントを使ってユーザ/グループの検索ベースDNを実際に確認してみる
    • passthru.authentication.domain, passthru.authentication.servers あたりのプロパティ値から.localを省略してみる

    今回の紹介は以上です。AD環境がある場合は是非ADとの連携、SSO設定を試してみてください。

    Alfresco勉強会#25でワークフローについて話しました

    $
    0
    0
    とたにです。

    久しぶりにAlfresco勉強会でしゃべりました。
    今回はAlfrescoのワークフローについて、どういった機能が用意されているのか、また新しくワークフローを追加するにはどんな作業が必要なのかを具体的にイメージしてもらえることをゴールにして、入門レベルの内容を準備しました。

    ワークフローはAlfrescoの活用方法によっては重要な位置づけとなる機能ですが一方で全く利用するつもりのない方もいるので、勉強会の題材としては少しささる人が少ない、狭い話題を選んでしまったかも、という反省をしつつこのブログを書いています。

    アドバンストワークフローでは最低限必要な2つのファイルのみを作って、Alfrescoにワークフローを追加する方法について説明したのですが、説明後に「もっと簡単にワークフローを開発する方法はありますか?」という質問を頂きました。アドバンストワークフローはactivitiというBPMエンジンを採用していてプロセスの記述能力は非常に高いのですが、その反面、開発者レベルのスキルが要求されるのも事実です。このあたりは勉強会で理解いただくというアプローチのほかに、手軽に利用できるワークフローのセットを公開して選択して使っていただく、というアプローチもいいかもしれないと思いました。

    また日本型ワークフロー(という言葉があるかどうかは知らないですが)では、必ず期待される機能として承認フロー上の承認者としてユーザの上司を自動でアサインしたい、というものがあり、それについても質問されたのですが、標準のAlfrescoにはそのような組織モデルが実装されていないので実現するためには、Alfresco内もしくは外部にそのような組織モデルおよび取得のサービスを実装する必要があります。

    第25回Alfresco勉強会ワークフロー入門編
    サンプルコードはこちら

    ワークフローの開発は細かいTipsがたくさんあるので応用編として書ける内容もまだまだあるのですが、やはり少し題材として狭いので勉強会で取り上げるかは現時点では未定です。他のネタが思いつかなければ取り上げるかもしれません。

    Alfresco勉強会#25でAlfrescoのアップグレードについて発表しました

    $
    0
    0
    こんにちは、かわべです。
    12月17日に弊社オフィスで第25回Alfresco勉強会が開催されました。
    寒い中ご参加いただいた皆様、ありがとうございます!

    発表振り返り

    今回は発表が2つありましたが、発表ごとに別の記事としています。
    私はAlfrescoのアップグレードについて発表しました。
    発表資料はこちら

    Alfrescoのアップグレードは、コンテンツ実体(ファイルシステム)とメタデータ(データベース)のコールドバックアップデータを新しいAlfrescoに移行することで実行できます。ただし、カスタムモジュールなどが移行対象のバージョンでも期待通り動作するか、事前に検証することも大切です。
    という発表の最後に、デモとして4.2.fから5.0.cへのアップグレードをお見せした…の で す が!

    うまくいきませんでした…
    (3回ぐらい練習したのに…)

    時間を掛けた割に、ちゃんとしたものをお見せできなくてすみませんでした。
    検証したところ、SQLのdumpを書き戻すときにデータベース名を指定する部分を飛ばしてしまったようです。
    あのあと一旦DBをドロップして、再作成してから書き戻すとちゃんと移行できました。
    勉強会が終わるまでに解決できなかったのが心残りですが、資料の手順は間違っていないはずなので参考にしてみてください。

    告知1

    次回のAlfresco勉強会は2015年2月18日(水)に開催予定です。
    たくさんの方のご参加をお待ちしております!参加登録はこちらからお願いします。
    また、「こういうテーマの発表が聞きたい」などのご意見があれば、ぜひconnpassのフィードなどでご連絡ください。

    告知2

    こちらは勉強会ではなく、弊社セミナーのご案内です。
    2015年1月20日(火) 19時〜20時、Alfrescoの基本的な機能や使い方についての少人数セミナーを開催いたします。
    (勉強会の終わりではWebinarだとお伝えしてしまいましたが、弊社オフィスで行うようです)
    詳細や申し込み、お問い合わせは以下のリンクからお願いします。
    基礎からわかるAlfrescoセミナー
    ご都合が合えば、こちらもぜひご参加ください。

    それ、CMISで繋げます(Liferay編その1)

    $
    0
    0
    CMISは文書管理リポジトリにアクセスするための仕様ですが、「CMIS対応しているっていうけど、何ができるの?」という質問を最近ときどき頂きます。

    何ができるか、という質問に対する答えは、技術的な観点に限定しても、以下の2つの要素に分解できるでしょう。
    ・CMIS単体で提供される、文書管理機能のセット
    ・CMISによるシステム間連携

    CMISは、連携、あるいはデータやサービスの相互運用性(interoperability)を主眼として策定されたもので、そのために文書管理機能としてはいろんなECMの最大公約数的な機能に絞られています。そういう意味では、CMISで実際にいろいろ繋いだものをお見せするのが、CMISのメリットを理解していただく早道かと思います。
    (※最大公約数とはいえ、CMISの提供する文書管理機能にもある種のクセはあるのでその点は機会があれば別途)

     Liferayと繋いでみた

    というわけで初回はLiferayと繋いでみましょう。
    Liferayでは、そのCMS的な機能のバックエンドとして、バージョン6.1からCMISリポジトリをサポートしています。

    ここではLiferay6.2を使用して、弊社製品であるCMIS対応の文書管理リポジトリであるNemakiWareに接続してみます。
    NemakiWareを使う理由なのですが、単に弊社製品だからという商売っ気だけでなく、実際にCMIS仕様の遵守率が100%で、他ECMと比較しても現時点で1位にあるからです。
    http://cmissync.org/CmisCompat/

    NemakiWare自体のインストール・起動はまた別途ご紹介しますが、
    インストーラのダウンロード:こちら
    インストール・起動方法:こちら
    になります。

    CMIS接続のための設定は、LiferayのWiki(英語)を参照しました。
     
     

    下準備

    Liferay側での下準備として、ポータルのプロパティ(portal-ext.propertiesなど、プロパティの上書き機構に準ずる)に
    session.store.password=true
    company.security.auth.type=screenName 
    と設定します。
     
    この設定では、Liferay上のログインユーザ持つスクリーン名/パスワードが、CMISリポジトリにログインするためのユーザID/パスワードと一致している必要があります。
    LiferayのUIからCMISリポジトリを操作することになるので、Liferayのログインユーザ情報がCMISリポジトリのログインユーザ情報として引き渡されるためです。
    もしCMISリポジトリがLDAP認証などに対応していれば、ID/PWDは簡単に統一化できるでしょう。

    ここではLiferay、NemakiWareともに、admin/adminユーザでログインするものとします。

    リポジトリの追加

    AdminメニューのContentを開きます。

    左側のペインからDocument and Mediaを開き、AddボタンのドロップダウンメニューからRepositoryを選択します。


    新規に追加するリポジトリのために、設定項目を入力します。
    重要なのは
    RepositoryType
    CMISには接続方式として、WebService、AtomPub(およびBrowser)が定義されています。ここではAtomPubが推奨されています。
    AtomPub URL
    AtomPubで接続する場合のコンテキストURLを入力します。おつかいのCMISリポジトリによって当然異なります。なお、このURLを開こうとするとリポジトリ全体の情報を記述したxmlファイルがダウンロードできます。NemakiWareの場合はデフォルトで
    http://localhost:8080/core/atom
    です。
    RepositoryID
    省略可能です。
    CMISサーバでは、一番大きな単位としてリポジトリがあり、1つのCMISサーバは複数のリポジトリを持てることになっています。ですが実際は「メイン」リポジトリが1つだけということも珍しくありません。
    この値を省略すると、CMISサーバ側で設定されているメインリポジトリが自動的に選択される仕組みになっています。





    最後にもう1つ、Permissionという設定項目がありますが、これはLiferay上で、このCMISリポジトリを見られるユーザを制限するものです。CMIS側の権限設定とは関係ありません。
    値にはAnyone(Guest Role), Site Members, Ownerがあります。

    以上、設定できたらSaveを押したら、リポジトリの追加完了です。

    Liferayのスクリーン名/パスワードがCMISリポジトリのそれと一致していない場合は、エラーになります。上手く行かない場合はCMISリポジトリ側のエラーログを見てください。

    コンテンツの表示

    CMISリポジトリにあるコンテンツに、LiferayのUIからアクセスできることを確認してください。
    ファイルに対して、コンテキストメニュー的なものも表示されていますね。
    アクションとしてCheckoutも行えるようです。

    Checkout時の挙動については、CMISリポジトリごとに微妙に揺れがあるので、また次回の話題とさせていただきます。

    なお、画像にもあるようにリポジトリを追加すると"Access these files offline using Liferay Sync."というメッセージが表示されます。Liferay Syncの説明はここでは省きますが、オフラインのときにした編集でもDropboxライクに同期できる仕組みです。

    CMISリポジトリに限っていえば、CMISインタフェースのレベルでCmisSyncというDropboxライクな同期ツールが既に存在していますので、そちらもご検討ください。と陰に陽に自社製品をご紹介させてもらいまして、今回の結びとさせていただきます。


    (文:linzhixing)

    Liferay Portal 6.2をインストールしてみよう

    $
    0
    0
    こんにちは、おおたにです。 今回はLiferay Portal 6.2のインストール方法について紹介したいと思います。

    本ブログでもたびたび取り上げているLiferay Portalは、オープンソースの企業向け情報ポータル製品(Enterprise Information Portal)で、企業のインターネット向けサイトやイントラネット向けサイト、代理店/販売店ポータルなどに代表される組織/企業間、コミュニティポータルなどに代表されるユーザ同士など、様々な形での情報発信/情報共有の場を構築することに利用されています。

    エンタープライズ向けと銘打たれているのでインストールの敷居も高いのではないかと思われるかもしれませんが、そんなことはありません。もちろん実運用を考えると諸々の設定やチューニングを行う必要がありますが、とりあえずインストールして使ってみようという限りではとても簡単にセットアップすることができます。

     では、早速インストール方法を見ていきましょう。


    Javaのインストール


    Liferay PortalはJavaベースのアプリケーションなので、JDKをインストールする必要があります。
    Liferay Poratal 6.2の場合はJDK7をインストールします。OracleのサイトからOSに合わせたJava SE Development Kit 7をダウンロードしてインストールしましょう。


    Liferay Portalのインストール


    続いて、Liferay Portalをインストールします。今回は、アプリケーションサーバ(というかサーブレットコンテナ)としてTomcatを利用します。なお、本記事執筆時点でのCommunity Editionの最新版は6.2 CE GA2となっています。

    まずは、LiferayのサイトからCommunity Edition以下のドロップダウンリストをクリックし、「Bundled with Tomcat」を選択して「Go」をクリックします。Bundled with xxxというパッケージは、いくつかのアプリケーションサーバがLiferay向けの設定が施された状態で同梱されているものなので、初めの一歩として利用するにはとても便利なパッケージとなっています。


    次に、ダウンロードしたzipファイルを展開します。展開すると liferay-portal-6.2-ce-ga2というフォルダが作成され、その中に必要なファイルがコピーされます。なお、このフォルダは<LIFERAY_HOME>と呼ばれ、Liferayの設定や運用に際して重要なフォルダとなります。

    以上でLiferay Portalのインストールは終わりです(前述のとおり、実運用を考えるとJVMのチューニング等、さらなる設定が必要ですが、ここではひとまず動かすことを目的としているのでデフォルトのままでOKです)。


    Liferay Portalの起動と初期設定


    では、早速Liferay Portalを起動してみましょう。Liferay Portalを起動するためにはTomcatを起動すればよいので、以下のスクリプトを実行します。

    Windows : <LIFERAY_HOME>/tomcat-x.x.xx/bin/startup.bat
    Linux (or Mac OS X) : <LIFERAY_HOME>/tomcat-x.x.xx/bin/startup.sh

    Liferayが正常に起動すると、ブラウザが自動的に起動して http://localhost:8080 にアクセスします。起動しない場合は手動でブラウザを起動して先のURLにアクセスしてみてください。以下の画面が表示されればOKです。なお、初回起動時はDBテーブル作成等を行うため、通常起動時よりも時間がかかります(手元のノートPCでは90秒ほどかかりました)。


    上記画面は初回起動時のみ表示される基本設定画面です。ここではポータル名やデフォルト言語、管理者ユーザの情報やサンプルデータの有無を設定することができますが、デフォルトのままで問題ありません。データベースについてもデフォルトではHypersonicが使われますが、お試し用途であればこのままでOKです。

    では、「設定終了」をクリックして次に進みます。しばらく待つと(手元では60秒程度)以下の画面が表示され、無事設定が保存されたことが分かります。


    「Go to My Portal」をクリックすると、利用規約が表示されるので「I Agree」をクリックします。続いてパスワードリマインダ(パスワードを忘れた時の秘密の質問)を入力して「Save」をクリックします。以下のランディングページが表示されたら設定完了です。


    なお、デフォルトでの管理者のユーザID(Eメールアドレス)はtest@liferay.com、パスワードはtestとなっていますので、次回以降Liferay Portalにログインする際にはこれらを入力する必要があります。

    以上でLiferay Portalが使える状態になったかと思います。みなさまも是非Liferay Portalをインストールしていただき、実際に触ってみてください!


    トラブルシューティング


    Liferayが正常に起動しない場合は、以下のログの内容を確認してみてください。

    <LIFERAY_HOME>/logs/liferay.xxxx-xx-xx.log
    <LIFERAY_HOME>/tomcat-x.x.xx/logs/catalina.xxxx-xx-xx.log

    また、サーバに宛がわれたメモリを確認してください。Liferay Portalはデフォルトでヒープに1GB、PermGenに256MB使う設定となっています。2GBだとギリギリですので、最低でも3GBは欲しいところです。

    55% of big businesses block Dropbox: employees evade if no convenient replacement is proposed

    $
    0
    0
    According to a GIGAOM study, 55% of businesses with 30k+ employees explicitly forbid SaaS-based file sharing (Dropbox, Box, Office365, Syncplicity, etc).

    Do employees accept this rule and go back to using their company's awkward tools, or stop sharing files with their colleagues?
    No: According to the same study, 90% of cloud application usage happens without the IT department knowing it.

    Block Dropbox, and employees will use a lesser-known alternative. Which is probably even worse.

    Conclusion: If you block Dropbox, at the same time you should provide an alternative that offers the same convenience.

    CmisSync offers exactly that:
    - Looks like Dropbox
    - Feels like Dropbox- Syncs like Dropbox
    - Connects only to your corporate server, and never to any third-party.
    90% of actual cloud application usage happens without the company IT department knowing - See more at: http://blogs.intralinks.com/collaborista/2014/10/out-of-darkness-shedding-light-shadow/#sthash.28CVTMxS.dpuf
    90% of actual cloud application usage happens without the company IT department knowing - See more at: http://blogs.intralinks.com/collaborista/2014/10/out-of-darkness-shedding-light-shadow/#sthash.28CVTMxS.dpuf
    90% of actual cloud application usage happens without the company IT department knowing - See more at: http://blogs.intralinks.com/collaborista/2014/10/out-of-darkness-shedding-light-shadow/#sthash.28CVTMxS.dpuf

    それ、CMISで繋げます(Liferay篇その2)

    $
    0
    0
    前回はLiferay上のDocuments and Mediaポートレットに対して、CMISリポジトリであるNemakiWareをバックエンドとして繋いでみました。 今回はそのリポジトリに対してどんなアクションが行えるか見てみましょう。 CMISはContent Management Interoperability Serviceというくらいなので、繋いでしまえば文書管理のオペレーションを行えるわけです。

    一覧画面

    Liferay側の機能ですが、表示形式を変えることができます。
    各アイテムの横にある矢印ボタンをクリックすると、そのアイテムに対するアクションを行うことができます。



    アクションの種類として、コンテキストメニューにダウンロード、編集、移動、チェックアウト、削除が見えています。
    また、新規アイテムは画面上部のAddから作成します。
    フォルダ/ドキュメントの2種類しか選べないようです。
    CMISではドメインモデルとして、フォルダやドキュメントであるにしてもさまざまなカスタムタイプを定義できますが、次の新規作成画面を見てもタイプやそのカスタム属性を入力できる場所は見当たりません。
    編集画面も同様で、ファイル実体と、名前の変更だけが可能です。

    また、各アイテムの詳細情報を表示したければそのアイテムを一覧上でクリックします。

    メタデータとバージョン履歴が表示されます。
    メタデータはCMISのごく基本的な属性のうち一部が表示されています。
    バージョン履歴では、以前のバージョンをダウンロードしたり、以前のバージョンを復活させる(ver1.1がある状態でver1.0をrevertすると、ver2.0としてver1.0が復活する)こともできます。このrevert自体はCMISで定義されたサービスではありませんが、以前のバージョンの内容で通常の更新アクションを内部的に実行していると思われます。

    Documens and Mediaでは通常プレビューも存在すれば表示されますが、CMIS上のコンテンツに対しては、ファイル内容のプレビュー表示はないようです(CMISでは、プレビュー画像のようなものをクライアントに伝えることはできますが、プレビュー画像のデータ型が仕様で決まっているわけではありません)。

    チェックアウト

    文書管理機能らしいアクションといえば、チェックアウト/チェックインは欠かせません。
    共有リポジトリ上で、特定のユーザが作業中は他のユーザから触れないようにファイルをロックしておくことはもちろん、更新作業中のファイルのスナップショットもなるべくローカルマシンに隠蔽しておくのではなくサーバ側に寄せて文書管理の対象とすることができます。

    ではtest_02.txtをチェックアウトしてみましょう。
    以下はチェックアウト後の状態です。

     ……あれれ?
     ロックされたものの、矢印ボタンも消えてアクションできなくなっています。
    他のユーザに対してロックするのはよいですが、自分自身もロックしてしまったのでしょうか(いえ、そんなことはありません)。

     どうしてこうなった

    結論からいうと、チェックアウトについてのCMIS仕様に関する解釈がLiferayとNemakiWareで食い違っているためだと思われます。

    まずCMISではチェックアウトすると、作業用コピーが独立したオブジェクトとして自動で作成されます。この作業用コピーは、ver.1.0やver.1.1といったバージョンに似ていますが、あくまでバージョンではないとされています(仕様書2.1.13.15.1)。
    ドメインモデルの考え方としてはバージョンではないのですが、サービスの方にあるgetAllVersionsメソッドでは作業用コピーも返すことになっているので、元のドキュメントから作業用コピーをたどっていくことは可能です。

    一方、スクリーンショットにあるアイテム一覧は、CMISのgetChildrenメソッドによってあるフォルダの子要素一覧として取得されていると考えられます。getChildrenメソッドでは原則的には「最新のバージョン」を返すことになっているのですが、作業用コピーはバージョンではないので、getChildrenでは返されません。作業用コピーを返すためには別途、getCheckedOutDocsというメソッドが用意されています。

    NemakiWareの場合、getChildrenで作業用コピーを返していないので、チェックアウトでロックされた元のドキュメントだけが表示されてしまっているのです。ロックされているのでアクションもできませんし、Liferayのバージョン履歴からは作業用コピーをたどることもできませんでした。

    getChildrenで作業用コピーを返すことが明示的に禁じられているわけではないので、作業用コピーもgetChildrenで返すリポジトリはあり得ます。実際、Alfrescoがそうなっています。

     CMISリポジトリとしてAlfrescoをLiferayに接続した図です。2つ同じアイテムがありますが、片方には矢印ボタンがついていますね。

    作業用コピーに対してチェックインや、チェックアウトのキャンセルができる、みたいです。

    「みたいです」、というのは、実際にはAlfrescoの場合もLiferayからちゃんとしたチェックインができるわけではないからです。

    まず作業用コピーを更新して、スナップショットをサーバに保存しておくためにEditを開いてみます。

    なぜか真っ白。これでは編集できません。
    ではチェックインを実行してみると、チェックイン時に更新画面は開かれず、いきなり以下の状態になります。

     ロックは解除されましたが、これではロック中にファイル内容を変更してアップロードすることができません。

    まとめ

    • Liferayに接続したCMISリポジトリに対して、基本的なCRUDは可能
    • Liferayからのチェックアウト/ チェックインには難あり。
      • Liferay側のCMIS仕様の解釈に問題がある?
        • 筆者の解釈では、作業用コピーはgetAllVersionsかgetCheckedOutDocsで取得すべき
        • LiferayはgetChildrenで作業用コピーが返されると期待しているのかも(Alfrescoのように、チェックインするためのアクションボタンが表示されていた)
      • CMISの解釈はさておき、Alfrescoにとくに最適化されているのかと思いきや、Alfrescoでも見かけだけでちゃんと機能していない
    • とはいえ、Liferayは別に文書管理ソフトウェアではないのだから、ファイルのシンプルな読み書きだけできればそれで充分かもしれません。
    というわけで、チェックアウト/チェックインに関しては残念な結果となってしまいました。今後のアクションとして、原因を正確に切り分けた上で、LiferayのJIRAに投稿するなどしようと思っています。

    (文:linzhixing)

    Alfresco 5.0 で外部SSO連携を設定する(リクエストヘッダパラメータ編)

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

    今回はAlfresco 5.0を外部SSO基盤と連携するための設定方法を紹介したいと思います。

    外部SSOの仕様によって連携方法が異なりますが、今回は、認証済ユーザのリクエストヘッダに特定のパラメータを付与するパターンのSSOについてみていきます。このパターンはありがちなSSOの仕様の1つで、SSO基盤製品として標準機能で対応しているものや、エージェントと呼ばれるソフトウェアをSSO対象サーバ側にインストールして実現するもの(OpenAMもこのパターンです)などがあります。


    AlfrescoでのSSO設定


    では早速設定を行います。Alfrescoは2つのファイルに設定を行うだけで上記のパターンのSSOに対応できます。以下では、SSO基盤が認証済ユーザからのHTTPリクエストのリクエストヘッダに X-Test-Remote-User というパラメータでユーザ名を付与することを想定しています。

    まずは毎度おなじみ alfresco-global.properties です。ここに以下の3設定を追記します。
    • authentication.chain : Alfresco認証チェーンに外部認証を追加します(external1はデフォルトで定義されている外部認証用の設定)
    • external.authentication.proxyUserName : このプロパティを空に設定することで、external.authentication.proxyHeader で指定したリクエストヘッダパラメータの値をユーザ名として利用します
    • external.authentication.proxyHeader : ユーザ名を読み出すリクエストヘッダパラメータ名を指定します(SSO基盤が認証済ユーザのリクエストヘッダに付与するパラメータ名を指定)

    <tomcat_dir>/shared/classes/alfresco-global.properties
    authentication.chain=external1:external,alfrescoNtlm1:alfrescoNtlm
    external.authentication.proxyUserName=
    external.authentication.proxyHeader=X-Test-Remote-User

    続いて share-config-custom.xml の設定を行います。まずは既存の <config evaluator="string-compare" condition="Remote"> エレメントをコメントアウトし、以下の設定を追記します。インストーラでインストールした場合は、以下の設定がコメントアウトされた状態で記述されているので、以下の箇所のコメントタグを外します。

    <tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml
    <config evaluator="string-compare" condition="Remote">
    <remote>
    <keystore>
    <path>alfresco/web-extension/alfresco-system.p12</path>
    <type>pkcs12</type>
    <password>alfresco-system</password>
    </keystore>

    <connector>
    <id>alfrescoCookie</id>
    <name>Alfresco Connector</name>
    <description>Connects to an Alfresco instance using cookie-based authentication</description>
    <class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class>
    </connector>

    <connector>
    <id>alfrescoHeader</id>
    <name>Alfresco Connector</name>
    <description>Connects to an Alfresco instance using header and cookie-based authentication</description>
    <class>org.alfresco.web.site.servlet.SlingshotAlfrescoConnector</class>
    <userHeader>X-Test-Remote-User</userHeader>
    </connector>

    <endpoint>
    <id>alfresco</id>
    <name>Alfresco - user access</name>
    <description>Access to Alfresco Repository WebScripts that require user authentication</description>
    <connector-id>alfrescoHeader</connector-id>
    <endpoint-url>http://localhost:8080/alfresco/wcs</endpoint-url>
    <identity>user</identity>
    <external-auth>true</external-auth>
    </endpoint>
    </remote>
    </config>

    設定のポイントは以下の2か所です。インストーラでインストールした場合は必ず以下の2か所を設定変更してください。
    • alfrescoHeaderコネクタのuserHeaderタグ : ユーザ名を読み出すリクエストヘッダパラメータ名を指定します(external.authentication.proxyHeader と同じ値を指定)
    • alfrescoエンドポイントのconnector-idタグ : alfrescoHeader を指定します(リクエストヘッダパラメータを使ったSSO認証を行うようになります)
    設定は以上となります。なお、設定を反映させるためにはAlfrescoの再起動が必要です。


    動作の確認


    では、早速動作確認してみましょう。SSO基盤がある場合はSSO基盤の認証が通った状態でAlfrescoにアクセスしてみます。もしSSO基盤が無く、同様の状況をエミュレートする必要がある場合は、ブラウザのアドオン等を利用します。Chromeであれば、ModHeaderがお勧めです。今回の設定ではパラメータ X-Test-Remote-User からユーザ名を読み出すように設定したので、このリクエストヘッダパラメータにユーザ名(下記スナップショットではtest1)を指定しておきます。

    ModHeaderのリクエストヘッダパラメータ追加画面

    この状態で、http://<server name>:<port>/share にアクセスしてみましょう(ローカルPCであれば http://localhost:8080/share)。ログイン画面がスキップされ、以下のように指定したユーザのダッシュボード画面が表示されれば動作確認完了です。



    Tipsとか


    うまく動作しない場合は、ログを確認してみましょう。Alfresco Shareのログ出力設定に以下の行を加えると、詳細な動作状況を確認することができます。ただし、HTTPリクエストの度にログが出力されるのでログ肥大化には注意が必要です。

    <tomcat_dir>/webapps/share/WEB-INF/classes/log4j.properties
    log4j.logger.org.alfresco.web.site.servlet=debug

    Alfresco起動時には以下のようなログが表示され、

    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] Initializing the SSOAuthenticationFilter.
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] Endpoint is alfresco
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] userHeader is X-Test-Remote-User
    INFO [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [ContainerBackgroundProcessor[StandardEngine[Catalina]]] SSOAuthenticationFilter initialised.


    アクセス時には以下のようなログが表示されるようになります。

    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Processing request /share/page/ SID:xxxxxxxxxx
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Touching the repo to ensure we still have an authenticated session.
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Validating repository session for test1
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Accept-Language header present: ja,en-US;q=0.8,en;q=0.6
    DEBUG [org.alfresco.web.site.servlet.SSOAuthenticationFilter] [http-apr-8080-exec-4] Authentication not required, chaining ...


    起動時に指定したリクエストヘッダパラメータをチェックするように設定されているか、アクセス時に適切にユーザ名を読み取っているかを確認することができます。


    本記事は以上となります。比較的簡単にSSO連携設定ができることがお分かり頂けたかと思いますので、是非一度お試しください。なお、本記事はAlfresco DocumentationのExternal configuration propertiesConfiguring Alfresco Share to use an external ssoを参考にしています。

    Confidentialy: Public cloud or on-premises?

    $
    0
    0
    "Dropbox or on-premises, wherever your data is, the government can spy on it, so why bother?"
    Actually on-premises is slightly better: At least you will KNOW that you are being spied on.



    • Public cloud: Police ask your cloud provider for the data, and you don't hear about it.
    • On premises: Police ask YOU for the data.

    Data requests are most often accompanied with a gag order:
    "Give us this user's data, but don't tell anyone we asked for it."

    An example of this got detailed in The Guardian last week: Google, after sending some of its customers' data to the FBI, waited 3 years before telling anybody.

    This is one more reason to prefer on-premises to public cloud.

    Alfresco勉強会#26でAlfresco SDK + Eclipseによる開発方法について発表しました

    $
    0
    0
    こんにちは。てらしたです。

    昨日、第26回のAlfresco勉強会が開催されました。東京でも積雪という予報が出ていたため延期すべきではないかという話も前日から当日にかけて出ていたのですが、予報が外れて雨になったため延期せずに済みました。延期されたら困る、という方も参加者の中にはいるかもしれないのでこういう時の判断って難しいですよね。もっと規模の大きい勉強会とかではどうしてるのか気になります。

    さて、昨日の勉強会ではMavenベースのAlfresco SDK 2.0とEclipseを使ってAlfrescoをカスタマイズするための開発環境を準備する方法について発表しました。Alfresco SDKは2.0からJavaのクラスやJavaScript、FreeMarkerのテンプレートがホットリロードできるようになっているため、開発効率がけっこう上がるのではないかと期待しています。

    発表資料:第26回Alfresco勉強会:Alfresco SDK + Eclipseで開発してみよう

    今回の発表内容は開発環境を準備するところまでなので、カスタムモデル定義やWebScriptの開発といった具体的なカスタマイズ方法については今後の勉強会やこのブログでご紹介していきたいと思います。

    最後にちょっとおしらせを。

    おしらせ1

    次回のAlfresco勉強会は4月22日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

    第27回Alfresco勉強会

    もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。

    おしらせ2

    2015年2月26日(木) 19時〜20時、Alfrescoの基本的な機能や使い方についての少人数セミナーを開催いたします。
    詳細や申し込み、お問い合わせは以下のリンクからお願いします。

    基礎からわかるAlfrescoセミナー

    ご都合が合えば、こちらもぜひご参加ください。

    Alfresco勉強会#26にてAlfresco Community 5.0のSSO設定について発表しました

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

    先日、弊社オフィスにてAlfresco勉強会#26が開催されました。当日の様子はこちらの記事にも書いてある通りですが、当初の予報が雪だったこともあり(最終的にはほとんど降りませんでした)、いつもより参加者が少なめでした。発表は先ほどの記事の「Alfresco SDK + Eclipseで開発してみよう」と私の「Alfresco Community 5.0でSSOを設定する」の2本立てでした。

    私の発表では、Alfresco Community 5.0が対応しているSSOの種類の紹介と、そのうちのHTTPリクエストヘッダパラメータから認証済みIDを取得して認証する外部認証の設定とデモを行いました。簡単に設定できるうえに、OpenAMやCAS、それ以外のプロプライエタリなSSO製品もエージェントやリバースプロキシの設定で連携できるため、実際に導入する際にも有用そうな機能です。


    最後に、2点ほどお知らせをば。

    お知らせ1 : 
    次回、第27回Alfresco勉強会は2015/04/22(水)です。参加登録はこちらからお願いします。発表します、こういう話が聞きたいです等、どしどしフィードに書き込んでください。

    お知らせ2 : 
    2015/02/26(木)、弊社において「基礎からわかるAlfrescoセミナー」が開催されます。Alfrescoの基本的な機能や使い方を紹介しますので、Alfrescoってどんな製品だろう?という方は是非こちらからお申し込みください!

    Liferay 6.2で動画をプレビューしよう

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

    この4月から娘の保育園の慣らし保育が始まったのですが、先生に「今日のお昼ご飯はうどん4杯おかわりしましたよ。この調子なら大丈夫そうですね。」と言われ、親の心配をよそに娘は娘でよろしくやっているようです。

    さて、今回はLiferay 6.2で動画をプレビューするための設定方法について説明しようと思います。LiferayはDocuments and Mediaポートレットでの動画ファイルのプレビューに対応しています。デフォルトでは設定されていませんが、簡単にセットアップすることが可能です。では早速その手順を見ていきましょう。


    Xugglerのインストールと動画プレビューの有効化



    まず、Xugglerをシステムにインストールする必要があります。具体的にはXugglerのJavaのライブラリをコピーするだけなのですが、 Liferayはこれを自動的にダウンロードして所定のフォルダにコピーする機能を備えています。ただし、インターネット上のサイトから必要なファイルをダウンロードするため、Liferayサーバが外部のネットワークにアクセスできない場合は手動でファイルをコピーする必要があります。

    1. Liferayをインストールします。インストール方法についてはこちらのblogエントリが参考になると思います。
    2. Liferayに管理者ユーザでログインします。デフォルトではユーザ名(メールアドレス)test@liferay.com、パスワードはtestです。
    3. 画面上部の「Admin」→「Control Panel」をクリックします。
    4. 「Configuration」→「Server Administration」→「External Services」をクリックします。
    5. 「Enabling Xuggler provides video conversion functionality」欄で、インストールするjarファイルを選択します。プラットフォーム毎になっているので、Liferayをインストールした環境に応じて適切なものを選択します(下のスナップショットではLinux 64bitを選択しています)。
    6. 「Install」をクリックします。以下のサイトからプラットフォーム毎のjarファイルがダウンロードされ、以下の場所にコピーされます。

    7. URL : http://xuggle.googlecode.com/svn/trunk/repo/share/java/xuggle/xuggle-xuggler/5.4/
      コピー先 : <tomcat_dir>/webapps/ROOT/WEB-INF/lib/

       
    8. インストールが完了すると、再起動を促されるのでLiferayを再起動します。
    9. Liferay再起動後、改めて管理者ユーザでログインして「Enabling Xuggler provides video conversion functionality」を確認します。


    10. インストールが正常に行われていると、「Enabled」チェックボックスが表示されるので、チェックを入れて「Save」をクリックします。

    以上で設定完了です。


    テストしてみよう


    では、Documents and Mediaポートレットを追加して適当な動画ファイルをアップロードしてみましょう。アップロードしたファイルをクリックして以下のような動画再生画面が表示されればテスト成功です。




    トラブルシューティング


    「File is too large for preview or thumbnail generation」と表示される

    デフォルトでは100MBまでしかプレビュー(&サムネイル生成)できないように設定されています。設定を変更するにはportal-ext.propertiesに以下の設定を追記します(以下は上限を1GBに設定しています)。上限を変更するとシステム負荷が高まる可能性があるので設定変更の際はご注意ください。

    dl.file.entry.previewable.processor.max.size=1048576000




    WindowsにLiferayをインストールして動画プレビューを設定したら、Liferayがクラッシュした

    既知の問題LPS-43896です。Xugglerの問題とのことで、Liferay側で対応できる類のものではないようです。動画プレビューを利用する際にはプラットフォームとしてWindows以外を選択する必要があると思われますのでご注意ください(Xugglerのバージョンを変えてみたりと多少試してみただけなのですが今の所ワークアラウンドを見つけられてないです)。


    以上、とても簡単に動画プレビューが設定できることがお分かり頂けたかと思います。是非皆様もお試しください。

    Alfresco勉強会#27 Alfresco Community 5.0の導入事例を発表していただきました

    $
    0
    0
    こんにちは。てらしたです。

    昨日、第27回のAlfresco勉強会が開催されました。Alfrescoに興味はあるけどまだ触ったことはないという参加者の方が今までは多かったんですが、今回は比較的Alfrescoを使っておられる方が多く、機能の細かい挙動についての質疑応答や運用まわりの事例の話などがあり、我々としても非常に勉強になる会でした。

    そして今回は2つある発表のうち1つを株式会社コーソルの渡部様に発表していただきました。渡部様の会社では技術情報を社内で共有するためにAlfresco Community 5.0を導入し、実際に稼働させているとのことで、導入背景やシステム構成、工夫した点、今の悩み等を紹介していただきました。


    背景を踏まえた製品選定の話もあり、同じような課題を抱えている方には非常に参考になる情報ばかりだったと思います。個人的にはSSOや便利なアドオン、サイト設計や論理バックアップに関する要望あたりが特に興味深かったです。渡部様、本当にありがとうございました。

    最後に2つおしらせがあります。

    おしらせ1
    次回のAlfresco勉強会は6月24日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

    第28回Alfresco勉強会

    もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。

    おしらせ2
    2015年4月27日(月) 19時〜20時、Alfrescoの基本的な機能や使い方についての少人数セミナーを開催いたします。
    詳細や申し込み、お問い合わせは以下のリンクからお願いします。

    基礎からわかるAlfrescoセミナー

    ご都合が合えば、こちらもぜひご参加ください。
    Viewing all 244 articles
    Browse latest View live