おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

jOpenDocumentを2021年にリブートしてみる その2: テストを動かす

前回の記事

naruoga.hatenablog.com

のつづき。今回は目標が低くてテストを動かすところまで。 これが全然苦戦して、ほとんど進捗がないんですねえこれが。

テストの位置をMaven標準に動かす

その前に前の記事の落穂ひろいですが、

To compile you need to put iText ( http://www.lowagie.com/iText/download.html ) and junit4 ( http://www.junit.org/ ) into the lib/ dir.

って書いてあるので、iText と Junit4 が必要ですね。ということで pom.xml に次の二つを追加しておいてました。

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.2</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
</dependency>

(なんで最初からlibディレクトリに入ってないんでしょ、再配布制限的な何かあるのかな)

それとこれも前回からの書き漏れですが、 src/product.properties を参照できなくてコケるので src/main/resources に移動しておきました。 ここまでは前回の落穂ひろい。

で、ここからが今回の本題ですが、junit4が必要だよと言ってるってことは当然テストコードがあるわけで、 Maven的には src/test/java 以下にソースがないとたぶんだめですよね。

まあこれはきっと @Test アノテーションがあるファイルはテストコードだと見極めをつけて移動しました。

$ grep -rl "@Test"
src/main/java/org/jopendocument/dom/ODSingleXMLDocumentTest.java
src/main/java/org/jopendocument/dom/OOXMLTest.java
src/main/java/org/jopendocument/util/cache/ICacheTest.java

こいつらをまるっと test に(同名のフォルダを掘って)移動。 すると Intellij IDEA上でテストコードが実行できるようになりました。やった!

で、まあテストはrunできるようになったんですが結果を見ると真っ赤っ赤。 あとはぼちぼちこれを直していけばよかろうと。

リソースの移動

まずはテストコードの中で指定されてる .odt がないとテストコード内でファイルが読めないので移動します。これは簡単。 diff見るとこんな感じですね。

diff --git a/src/main/java/org/jopendocument/dom/empty.odt b/src/test/resources/org/jopendocument/dom/empty.odt
similarity index 100%
rename from src/main/java/org/jopendocument/dom/empty.odt
rename to src/test/resources/org/jopendocument/dom/empty.odt
diff --git a/src/main/java/org/jopendocument/dom/styles.odt b/src/test/resources/org/jopendocument/dom/styles.odt
similarity index 100%
rename from src/main/java/org/jopendocument/dom/styles.odt
rename to src/test/resources/org/jopendocument/dom/styles.odt
diff --git a/src/main/java/org/jopendocument/dom/test.odt b/src/test/resources/org/jopendocument/dom/test.odt
similarity index 100%
rename from src/main/java/org/jopendocument/dom/test.odt
rename to src/test/resources/org/jopendocument/dom/test.odt

で、よく見ると、普通に src/main/java にもいかにもリソースなファイルがあるので移動しとかないとですね。 具体的には src/main/java/org/jopendocument/dom/oofficeDTDs/ にあるやつを丸っと src/main/resources/ 以下に移動します。

ほかにも getResource(AsStream)() で参照されてるファイルを探してはリソースに放り込む日々。

XML関係のテストがそもそも動いてない

これで結構テスト通るようになってきたんですが、問題は、XML関係のテストでスキーマによるバリデーションを試みてるところで落ちてる。 具体的には

private Schema createSchema(final String name) throws SAXException {
    return SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI).newSchema(getClass().getResource("/oofficeDTDs/" + name));
}

こんなコードが、

Caused by: java.util.ServiceConfigurationError: javax.xml.validation.SchemaFactory: org.iso_relax.verifier.jaxp.validation.RELAXNGSchemaFactoryImpl Unable to get public no-arg constructor

こういう例外を吐いて落ちるんですな。

なぬ?スキーマに対する適切なコンストラクタがない? いやいや、XMLConstants.RELAXNG_NS_URIJava標準なんだからそんなわけないだろう……と、Java力(ちから)がないわたくしは考えておりました。

しかし色々調べると「java.xml.validation のデフォルトの実装に含むべきなのはW3Cなソレだけで、それ以外のスキーマを利用したい場合は自分で何とかしなさい」ってことらしいじゃーないですか。おうふ。なるほど……。ここでしばらく停滞、袋小路にハマってました*1

でもよく見るとREADMEにこんな記述がありました。

To validate XML (needed for JUnit tests) you need to download http://java.net/downloads/msv/releases/msv.20090415.zip and put msv.jar, relaxngDatatype.jar, xsdlib.jar and isorelax.jar in the classpath.

いや、だったらなんで最初から入れといてくれないの……というのはともかく、これらをMavenの依存関係に足せばよいのですね。足しましょう。足しました。

<dependency>
    <groupId>msv</groupId>
    <artifactId>msv</artifactId>
    <version>20050913</version>
</dependency>
<dependency>
    <groupId>msv</groupId>
    <artifactId>relaxngDatatype</artifactId>
    <version>20050913</version>
</dependency>
<dependency>
    <groupId>msv</groupId>
    <artifactId>xsdlib</artifactId>
    <version>20050913</version>
</dependency>
<dependency>
    <groupId>msv</groupId>
    <artifactId>isorelax</artifactId>
    <version>20050913</version>
</dependency>

これで行けるだろ!と思ったんですが、いざValidationをしようとするとコケるのです……しくしく。

@Override
public Validator getValidator(final Document doc, final boolean ignoreForeign) {
    final Schema schema;
    try {
        if (doc.getRootElement().getQualifiedName().equals("manifest:manifest"))
            schema = this.getManifestSchema();
        else
            schema = this.getSchema();
    } catch (SAXException e) {
        throw new IllegalStateException("relaxNG schemas pb", e);
    }
    return schema == null ? null : new Validator.JAXPValidator(doc, ignoreForeign ? UNKNOWN_PRED : null, schema);
}

こういうコードで、 this.getSchema() したところで

Caused by: org.xml.sax.SAXParseException; systemId: file:/C:/Users/naruhiko/gosrc/src/github.com/naruoga/jOpenDocument/target/classes/oofficeDTDs/OpenDocument-schema-v1.1.rng; lineNumber: 123; columnNumber: 36; 同名のパターンが既に定義されています。combine属性を使って結合するか、パターン名を"office-meta-content"以外のものに変更してください

って例外が出ちゃうのです(しかし上のコードの "relaxNG schemas pb" ってどういう意味なんだろう。pbってスイスの工具屋さんじゃないよね)。

うーん。わからん。言葉通りだとすると元のスキーマに問題があるっぽく読めるけどスキーマは何にも変えてないしなあ(当たり前)。

office-meta-contentgrepしてみると

 grep -r "\"office-meta-content\""
src/main/resources/oofficeDTDs/OpenDocument-schema-v1.1.rng:            <ref name="office-meta-content"/>
src/main/resources/oofficeDTDs/OpenDocument-schema-v1.1.rng:<define name="office-meta-content">
src/main/resources/oofficeDTDs/OpenDocument-strict-schema-v1.1.rng:        <define name="office-meta-content">

となってるのは確かにそうなんだけど、これがいいのか悪いのか……何も変えてないので悪いってことはないと思うし、そもそもスキーマなんだから標準から引っ張ってきてると思うんで、なにがなんやらさっぱりです。

わからないので後回しにして*2落ちてるほかのテストを調べることにします。次回へ続く。

*1:関係ないけど、そして昔からJavaやってる人なら当たり前すぎることなんですが、RelaxNGについて調べたらJenkinsの創始者で現Launchableの川口さんが出てきて、あー世界はこんな風につながっておるのだなと思いました(?)。

*2:こうやって書いておくと優しい人が誰かSNSで教えてくれたりしないかなとかすかに期待しつつ……。

jOpenDocumentを2021年にリブートしてみる その1:Maven化

LibreOfficeの標準フォーマットであるOpenDocument Format(以下ODF)*1 は、XMLの標準化団体OASISのOpenDocument TCが標準化しISO標準にもなっている公開された文書フォーマットです。アプリケーションの進化に伴い標準が改訂されていく「真の国際標準」である唯一のオフィス向けドキュメント形式であるとともに、スキーマの構造が透明で見通しがよく、なおかつLibreOfficeの出力するODFは意味が明瞭(機械も人間も読みやすい)という特徴があります。

そのため操作・加工ライブラリも豊富にあり、さまざまな言語でODFを簡単に、しかも結構複雑な操作を行うことができます。

さて、私の勤務先はとあるセキュリティベンダーでございまして、日々顧客のためにシステムやアプリを診断して、それを報告書にして提出するということやっております。で、スプレッドシートの形式になった診断結果から見やすいPDF形式の報告書を作成するために、社内製のツールにてODFファイル(Writer向けのODT)を生成して、それに考察などを記入してWriterでPDFエクスポートして提出するという作業を日々行っております。

このために使っているライブラリが

www.jopendocument.org

といいまして、専用の拡張機能で埋め込んだタグをプログラムで置換したり表形式で埋め込んだりするというなかなか使いやすいライブラリであります。こいつ便利ですよという発表は去年の台湾のOSSイベントCOSCUPでしました。

speakerdeck.com

で、この資料でも書いたんですが、jOpenDocumentいいんですけどなにせ最後に出たバージョン1.4-rc2が 2014年 でして、java8で動作させると「この言語機能はdeprecatedだから使うのやめた方がいいよ」という警告がバリバリ出る。それはまあいいのですが、ODF 1.2 extended までしかサポートしてないので、今のLibreOffice(7.0以降)で普通に生成したODF(1.3 extended)だと正しく扱えない。 しかし今更これらの問題が治るとはとても思えない。思えないんだったら、自分で直せばいいじゃん! と、トライしてみることにしました。

ちなみにわたくし齢50にして細々と今でもコードを書いてますが(会社で書くのは ↑ のスライドでも述べた通りScala)、職業プログラマーとしての黄金期?はC/C++(言語仕様的には98)、C++は組み込み用途だったのでメモリフットプリントを抑えるためにRTTI禁止、という制限があり、Javaを書くようになったのは前職のソフトウェア第三者検証会社(今の所属の親会社)に入ってからで、世の中にはGradleとIntellij IDEAがすでに存在し、クラスパスがどーとか javac でビルドして *.class から JAR 作るとかそういう経験はゼロなのであります。ゼロ。antも知らない。mavenもほぼわからない。

そんなレベルの人間が、2014年で開発が止まっちゃった、まったくの他人が書いたライブラリをモダンにしてみようという、まあうまく行くんだか行かないんだかという試みを紹介してみたく。 意味も分からず試行錯誤で進めてるところがあるので、「そんなやり方はよくないよ!」という突っ込みは大募集なのです。

もとのソースを取ってくる

ソースは公式のダウンロードページ にてZIPファイルでおいてあるので、まずはこれを取ってきて手元に展開します。

まずは最初にライセンスを確認。LICENSE.txt を見たら GPL v3 だったので大手を振ってフォークできます。オープンソース万歳。

で、中身を見てみたら、 build.xml というファイルと libs というフォルダに JAR ファイルがゴロゴロ転がっています。さっき言った通り私はJavaのビルドシステムはさっぱりわからんのですがきっとこれはantなんだろうなと。で、さすがに今リブートのであればせめてビルドシステムはモダンにしたいよねということで、Maven化することにしました。

これも繰り返しになりますが、わたくし別にMavenにも詳しいわけではありません。なので、何も考えずにIntellij IDEAの新規プロジェクトでMavenを選んで、こんな感じの pom.xml をスクラッチで作りました。

<?xml version="1.0" encoding="UTF-8"?> 4.0.0

<groupId>jp.shiftsecurity.tech</groupId>
<artifactId>jOpenDocunentNg</artifactId>
<version>2.0-SNAPSHOT</version>

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

依存関係の解決

わからないなりに、たぶん元プロジェクトの lib にあるJARをMaven Centralで探してその設定を pom に書いていけばいいんでしょ、ということにしてやってみることにしました。なにせ2014年のソースなので依存関係も2014年で止まっておりますが、そこは何も考えずに最新化して、動かなかったら考えようと……。

探し方としてはまあひたすら https://search.maven.org/ で検索するだけなんですが、

ファイル名でartifactが想像できるものはそれで いまいちわからないものは jar を unzip してパッケージ名から推察 って感じです。結果以下の通りになりました。

元のjar maven central で見つけたバージョン 備考
commons-collections-3.2.1.jar org.apache.commons:commons-collections4:4.4 この名前なら多分Apache Commonsでしょう。3と4で非互換あるかもだけどなんとかしましょう
fb-annotations-2.0.0.jar com.github.spotbugs:spotbugs:4.3.0 もとのはfindbugsらしいけど死んだので後継プロジェクトのspotbugsに
isorelax-jaxp-bridge-ILM.jar org.jopendocument:isorelax-jaxp-bridge-ILM:1.1 どうもjOpenDocumentの一部を切り出しただけで凍結されてるけど、動かなかったら考えることでいったんはそのまま取り込み(実際問題あったんだけど)
jaxen-1.1.6.jar jaxen:jaxen:1.2.0
jcip-annotations.jar net.jcip:jcip-annotations:1.0 いろいろforkがあるけどいったんは公式っぽいもので
jdom-1.1.1.jar org.jdom:jdom:1.1.3 たぶん1系の最新を選んどけばよいのだろうと
jdom-2.0.5.jar org.jdom:jdom2:2.0.6 同名のJARのバージョン違いがあるのがなんだけど、まあ2系の最新を選べばよかろうと
js-1.7R1.jar org.mozilla:rhino:1.7.13 ZIPファイルをほどいたパッケージ名から判断
ognl-2.6.9.jar ognl:ognl:3.2.21 これは素直に名前から。
ognl-engine.jar org.jopendocument:ognl-engine:2.6.9 これも名前から

で、これらのdependencyをpom.xmlに追加してビルド……するも、jaxenがmaven centralに見つからないと怒られてしまいました。 よくわからないし、必要なら依存関係で引っ張ってこられたりするかな……と、えいっと指定自体はずしてしまいました。 いまのところ特に何も起きてない、ような……。

ソースコードの場所を移動

Mavenなのでソースコードの位置を src/ 直下から src/main/java 以下に丸っと引っ越しました。 テストコードも混じってるんですがそれはあとで……。

ライブラリ更新に伴うソースコードの修正

ライブラリのバージョンをばしばし上げたので、当然非互換な部分も出てきます。 動作の部分はあとで考えるとして、とりあえずコンパイルエラーをつぶしていきます。 細かに書いても退屈なだけでしょうから下記リンクからdiffを見てください。

https://github.com/naruoga/jOpenDocument/compare/af77a4b09e7fea72ceff9f325919bc463ddc7414..92982f10d37a9cf230720246fa2d23692cdd8e3f

コミットコメントから引用しておきます。英語へぼいのは勘弁してね。

commit 92982f10d37a9cf230720246fa2d23692cdd8e3f
Author: Naruhiko Ogasawara <ogasawara@shiftsecurity.jp>
Date:   Fri May 7 21:08:00 2021 +0900

    avoid to use deprecated PdfTemplate#createPrinterGraphics

    the implementation is just call PdfPrinterGraphics2D constructor,
    so it could be migrate easily

commit 75caf0495319ab02c60d0e5b7524d85808b31893
Author: Naruhiko Ogasawara <ogasawara@shiftsecurity.jp>
Date:   Fri May 7 21:05:28 2021 +0900

    OGNLDataModel: remove previous code comment, because we use Git

commit d2855abc7f01d43b8b0dd30b33bb1d4b96c655ed
Author: Naruhiko Ogasawara <ogasawara@shiftsecurity.jp>
Date:   Fri May 7 20:48:49 2021 +0900

    follow updated APIs of libraries

    general: avoid useless FQCN

    several: migrate to org.apache.commons.collections4
      - CollectionUtils
      - ExnTransformer
      - ICache
      - IPredicate
      - ITransformerWrapper
      - ODSingleXMLDocument
      - Transformer

    CollectionMap2Itf:
      remove() should have Object args, not type parameters to override Map

    OGNLDataModel:
      Ognl.getMemberAccess() has been removed, then change
      Ognl.addDefaultContext() without it

    SimplePDFGenerator:
      migrate to com.itextpdf.text from com.lowagie.text (this was obsoleted)

pom.xml にビルドの設定とプラグインの設定を追加

これでビルドできるようになっただろ! と IntellijMaven画面から build を叩いても何も起きない。ふむぅ。

これは私が素人だからあんまり意味も分からずに書いてますが、以下のようなビルド用の設定書かないとだめっぽいですね。

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.1</version>
            <type>maven-plugin</type>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>${project.basedir}/src/test/resources</directory>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

maven-resource-pluginはJARの中にリソース取り込むためのプラグインmaven-soruce-pluginはsource jarを作るときのプラグイン(これがないとJARで取り込んだプロジェクト側でソースコードレベルでバッグができない)、あとビルド時にどこからリソース参照するかの設定を追加。この時点でのpom.xmlはこんな感じです。

jOpenDocument/pom.xml at 6497e9f279bb8d6184b8994a452865e040b0bc5d · naruoga/jOpenDocument · GitHub

これで、IntellijMaven 機能でbuildすると依存関係をちゃんと抱いたjarと、source jarの両方ができるようになりました。よかったよかった。

取り込んで基本的な動作確認

前述のCOSCUPでデモしたときのサンプルにできたJARを食わせて、ちゃんと動くことを確認しました。 おお、ここまでは結構順調。

github.com

jitpackにて仮公開

毎回毎回JAR差し替えるのは面倒くさいので、みんな大好きjitpackにて公開することにしました。

jitpack.io

こんな風にGitHubの公開リポジトリ登録するだけで、Mavenなどで参照できる形で公開してくれる上に、それを各バージョン管理システムmaven, gradle, sbtなど)でどう設定するかまで教えてくれる超便利サイトです。

f:id:naruoga:20210711171733p:plain
Jitpackでの公開画面。ブランチやタグ、コミットハッシュでも参照できるのが嬉しい

これで公開して、先のデモプログラムもそっちを参照するように(ローカルで)変えて、ちゃんと動くじゃーん、、と確認して、いい気持になって放置してたのが、ここまでのいきさつです。

ほぼ1か月の放置の末、大急ぎで続きをやろうというのが次の記事になります。あまり期待せずにお待ちあれ。結論を言うと、サンプル動いたくらいで安心してちゃいけなかったですw

*1:公式の宣伝サイト http://opendocumentformat.org が死んでいるっぽい……。

openSUSE + LibreOffice virtual conference 2020参加の感想(その3:事例、その他、openSUSE、全体の感想)

表題のイベントの感想、その3。今回は過去2回で書ききれなかったもの。

events.opensuse.org

繰り返しますが、「イベントレポート」ではなく、つまり各トークの内容を紹介するものではなく、 背景とか前提とか、 聞きながら私が思ったり感じたりしたことを書き出す……というのが、この記事の趣旨です。 ちゃんと内容知りたい方は動画・資料の公開待った方がいいと思いまする。

この記事は全3回です。

LibreOffice事例

State of CJK issues of LibreOffice, 2020 edition / by Shinji Enoki / 2020 October 15 - 11:00

events.opensuse.org

榎さんの伝統のシリーズ。

事例かと言われると微妙だけど、技術系のエントリーが長くなっちゃったのでこちらに。 といって、このネタは多分、今日本語コミュニティから距離を置いている私より皆さんの方が明るいのではないでしょうか。

DaeHyunさんが報告してくれて私も含む何人かの共同作業で直したバグについて触れてくれたのはありがたや。

しかしこの不具合、実はヘルプ直すって宿題が宙ぶらりんなんですよねえ……やらなきゃ。 TODOとしてまずはBZに起票するところ、ってずっと思いつつやってない。よくない。

Introduction of Libre Office and ODF in Aizuwakamatsu City / by Jun Meguro / 2020 October 15 - 12:30

events.opensuse.org

素晴らしい発表でした!!!!

ご存じ会津若松市は日本における代表的なOpenOffice.org / LibreOfficeの移行事例です。 そして登壇者の目黒さんはその推進役であり*1、 かつLibreOffice日本語チームに所属して活動されているコミュニティマインドを持った人でもあります。 IPAmj Font Charactor Finderなどの拡張機能も公開されています。

そして、これは私がLibOConに行くたびに言われていたことなのですが、 「日本語コミュニティはMLやSNSの流量を見ても、イベントたくさんやってることからもすごく活発なのはわかるんだけど、 何をやってるのかよくわからない」とされてたんですよね。 まあこれは日本だけじゃないと思いますけれども(例えばインドネシアも、2018年のインドネシアカンファレンス以前はそういわれてましたし)。 2019年のAsia Conferenceも、Italoが「いいから一度俺を日本に呼べ」といったのが、開催の一つの理由でもありました。

なので日本の代表的な移行事例の現状を、 目黒さん自身が話すというのは、もうそれだけで重要な意義があるわけです。

それだけでなく、内容も非常に良かった。

わたくし前のエントリーで:

正直な話、私にとって新しい話が出てくるとはそんなに思ってない

などと失礼なことを書きましたが、どうしてどうして、耳新しいことばかりでした。利いた風なことを言ってはよくないね、反省。

外字回りの苦労談、OCRフォントが適切に扱えないので(だったかな)FontForgeで自前でフォントデザインした話。 HarfBuzz導入に伴うLibreOfficeのテキストレンダリング再実装により、それ以前に作られた文書と改行幅が変わってしまう問題*2に対して、拡張機能を作って対応した話とか、レベルの高さが際立ちますね。

もし日本のいろんな地方自治体がこういうITのレベルであれば、LibreOfficeの導入どころかもっと大きな問題にも軽やかに取り組めそうですが……ともかく素晴らしい。

地方自治体がLibreOffice/ODFを採用すべき理由として、市庁舎のホールにある紙と鉛筆のアナロジーで「利用者を限定しない」ことの大事さ、 「公的機関におけるドキュメントの保管は長期間であることが求められるので、長期間読めることが保証される文書形式が求められる」といったメッセージも、 非常に力強いものだと感じました。

いやーすばらしかった。オンライン開催には良いことも悪いこともあるけど、この発表が実現されたことは明らかによいこと、ですね。

Working with native/indigenous communities to build native language LibreOffice projects / by Kuan-Ting Lin, WangLarry / 2020 October 16 - 11:00

events.opensuse.org

台湾先住民が使う言語(台湾諸語、っていうのかな?)にLibreOfficeを対応させよう、具体的にはスペルチェック辞書の開発とUIの翻訳をする、という発表が2019年のLibOConにありました。

この発表はその続き的なものですが、LibreOfficeに関しての話ではなくて、そういう……なんというのかな、自分が当事者じゃない問題に対して、 それを解決するために取り組む、そういう活動を進めるにおいて注意すべき点を共有するという、これは非常に興味深い発表でした。

こういうことをやれば当事者の役に立つ だろう といった予見は捨てろとか、 相手の文化をunderstand and respectすることが大事とか、 誰と話をすればいいかをちゃんと見極めろとか、 そういう、LibOに限らず大事な話がたくさんありました*3。 これもまたビデオ公開されたらしっかり見直したい。

The importance of ODF for Digital Sovereignty strategies / Italo Vignoli / 2020 October 16 - 18:30

events.opensuse.org

どのプログラム見ようか記事にも書いたけど、Digital Sovereignty(デジタル主権)というのは最近ヨーロッパで重んじられている考えみたいで、 デジタル上の活動を他者(大手クラウドベンダー)に握られるのではなく自分たちで握ろう的な考えのようです。 それを、自分たちの知的財産である「ドキュメント」(ここでいうのはオフィスドキュメントではなくあらゆるデジタルデータのこと)に限定すると、Document Freedom(ドキュメントの自由)という考え方に近いですね。

なので、このプレゼンの主張は概ね、ドキュメントの自由という観点で主張していたことと同じだな……というのを確認できました。 ODFがなぜドキュメントの自由、デジタル主権という考え方において優れたフォーマットであるかということについて、 「マーケティング的」にまとまった資料なので、日本語訳して「アイデアボックス」の主張における参考資料とかにしたらいいんじゃないかな。

ただ、私正直いって、この主張には全面的に賛成するし、ODFの優位性も認めるものの、 「ファイルフォーマットの問題」と「アプリケーションの問題」を意図的に混同してるのが気に入らないんですよね。 言い方は悪いけどアンフェアに感じてしまう。

そういう不正確さはおいといて、わかりやすいストーリーにすることが「マーケティング的」には正しいのかなあとは思うし、 アンフェアと言ったら向こうはもっとアンフェアじゃんと言われればそうなんですけどね。

そういうことを考えるという意味でも、広く触れてほしいプレゼンではあります。なんかえらそうだな。

LibreOfficeその他

Marketing and social media in LibreOffice / by Mike Saunders / 2020 October 16 - 17:15

events.opensuse.org

ホントはその1で紹介するべきエントリだったのだけど漏れてましたごめんなさい。

Mike Saunders氏はTDFのマーケティング・PR担当で、雑な理解ではItalo Vignoli氏が割とビジョン・政治担当で、Mikeはもっと実務より。 TDF公式SNSアカウントの中の人はだいたいMikeじゃないかな……と。ということでこのプレゼンはその点について。

ぼんやり聞いてたのであんまり覚えてないですが、ちょっと面白いなと思ったのは:

  • Mastodon(TDFはFosstodon https://fosstodon.org/about にアカウントを持ってます)はフォローはほかのSNSに比べてずっと少ないけどTechな人たちが多いので意味がある
  • (その1でも紹介したけど)YouTubeLibreOffice 7.0の新機能ビデオは今年からインドネシアチームが作るようになってくれてモダンになったよ

あたりかなあ。

TDF Closing Keynote / by Lothar Becker / 2020 October 17 - 16:00

events.opensuse.org

Closingが二つあってややこしいですが、これは閉会ひとつ前のコマで行われたイベント主催としてのTDFのキーノート。

ふんふんと感心して聞いてただけで手元にメモも残ってないですが、Kuan-Ting Lin氏らによる台湾諸語のプレゼン、 あと目黒さんの市庁舎のホールにある紙と筆記用具のアナロジーに言及してくれていて、 もちろんこれはどうしてもヨーロッパ中心主義的になりがちなTDFとしては多様性に配慮したコメントだったということはあるのだろうけど、 素直にいいなあと思いました。

全体を通して「よいキーノートだった」という記憶だけはあります。ありがとうLothar!

openSUSEサイド

ちょっとだけ聞きました。「The SUSE Security Team」とかも途中まで聞いて面白かったのですが体調が悪すぎて途中離脱しました残念。

Podman on Kubernetes Cluster Production Grade / Estu Fardani / 2020 October 15 - 11:30

events.opensuse.org

  • 実のところあまりわからなかった……入門すらしてないのにProduction Gradeの話を聞いたのが間違いか。
  • k8sもPodmanもCRI-Oも触ってないのは今日日恥ずかしさがある(Podmanは2秒ぐらい触ったけど)
  • キーワードは仕入れたので後々かな……

Powering the Jump (SUSE Keynote) / by Markus Noga / 2020 October 15 - 14:30

events.opensuse.org

  • 途中からしか聞いてないです
  • openSUSEユーザーじゃないけど外から見ている限りでは、 openSUSEはSLEとの関係をどうするかってことをずっと模索してきたように見えて、 今回「Leapの次のJump」で、そこのところを今度こそきれいに整理する……って話なのかな、と感じました
  • 掛け声だけじゃなくていろんな仕組みも整備して、プロジェクト間のパッケージのやりとりも明確にして……という
  • チャット欄はおおむね好意的な反応だったように見えましたので、openSUSEな皆さんにとってはよいことなのかなあ
  • 多分Leap Nextのセッションを見ればより詳しくわかるのかな。もうビデオ公開されてるので関心がある向きはぜひ

Hat making / by Ben Cotton / 2020 October 16 - 20:00

  • Fedora Program ManagerであるBen Cotton氏による、Fedoraプロジェクトの概説
  • Fedoraでうまく言ってるやり方を紹介するよ、openSUSEでも取り入れられたらいいんじゃない? みたいな温度感かな
  • 実はあんまり知らないFedoraの中の話を聞けて興味深かったです
  • Fedoraはプロジェクト自体は法的実体がないので、商標とかの管理はCouncilがやるけど、法的なあれこれはRed Hatがやる……ってことかな? そういう話も面白かった

全体の感想

と、いうことで全体の感想です。

  • とにかくインフラチームの皆様お疲れさまでした
  • プロプラ、クラウドを使わない、独自インフラでがんばるって条件の中、大過なく終えられたのはほんとに素晴らしいと思います
    • まあ、参加者総数400人を切ってる、日本国内でちょっと大きなイベント回してる人からするとびっくりするぐらい小さな規模のイベントなのでできる話なのかもだけど
  • Jitsi meetのURLを一部の参加者が(言っちゃえばCollabora Productivityの公式アカウントが)Twitterで公開しちゃったので、Jitsi meet bombがやってきたのがうざかったけど、これもすぐに排除に動いて、大きな迷惑をこうむらずにすみませした。
    • セッションによってはお気の毒様というのもあったけど……

最後のクロージングで:

events.opensuse.org

LibreOffice10周年おめでとうなビデオをみんなで見たときには、ウルっと来ちゃいました。

www.youtube.com

なんというかな、英語もわからない、大したこともしてない、そんななか(周囲の理解もあって)LibOConに出続けて、 知り合いもそこそこにできたので、 チャット欄で知り合いと絡んだりしてるだけでも、なんか一緒にいる感がすごいあったんですよね。

もちろん、チャットで軽口を叩くには私の英語力だと限りがあるし、 いわゆるリモート飲み会的なモードになってしまうと、これはもう私の英語力だと絶対割り込めないんで、 限度もあるんですが、 それでも楽しめたのは平たく言えば、過去の貯金のおかげですね。

あー、よいイベントでした。楽しかった!

みんな本当にありがとう!

*1:実は、わたくしOOoの導入時のことは詳しくなくて、後から聞いた話なのですが……。

*2:OSプラットフォームによらず同じフォントを使っていれば同じレイアウトになることを目指した再実装なので、これは不具合というより、仕様変更なのかもしれませんが……。Twitterで「HarfBuzzは改行幅と関係ないよ、Linuxではずっと前から使ってたんだしHarfBuzzの問題じゃないでしょ」って突っ込まれたけど、Windowsについては動作が変わったのは、理由はともあれ「問題」といわれても仕方がないのかなと。

*3:あと、自分の触れやすい世界でやりやすいことしかしてこなかった自分にダメだしされている気分がすごくしました……。

続きを読む

openSUSE + LibreOffice virtual conference 2020参加の感想(その2:技術・実装)

表題のイベントの感想、その2。今回は技術・実装編。

events.opensuse.org

繰り返しますが、「イベントレポート」ではなく、つまり各トークの内容を紹介するものではなく、 背景とか前提とか、 聞きながら私が思ったり感じたりしたことを書き出す……というのが、この記事の趣旨です。 ちゃんと内容知りたい方は動画・資料の公開待った方がいいと思いまする。

この記事は全3回予定です。

ワークショップなど

How to debug Writer, forwards and backwards / by Michael Stahl / 2020 October 16 - 16:00

events.opensuse.org

これめちゃんこよかったです!

Writerの、けっこうめんどくさいバグを解析する様子をscreencastで録画したやつに、 解説の音声をかぶせたビデオをみんなで見つつ、チャット欄で質問してMichaelが答えてくれるという趣向。

とはいえ私LibOの開発もLinux上のデバッグもWriterの実装もあんまり把握してないので、ここで共有されていた知見の半分も理解できていた自信がない。皆さんは追って公開されるであろうビデオを参照ください。ここでは軽く箇条書き。

  • 追ってた問題はこれ。Bug 134253 - CRASH: undoing field paste
    • ちょっと複雑なWriter文書をCtrl-Aで全選択して、Ctrl-Cでコピーして、再度ペーストして(クリップボードの内容にあるもとと同じ内容で上書きされることになる)、それをUndoするとクラッシュするという問題
  • 使っていたのはrrgdbPythonによるフロントエンド。
  • rrにはrcってコマンドがあってreverse continue。死んだところから逆再生をしてくれる(?)。ほかにも逆ステップ実行とかあって猛烈に強力。
  • rrはIntel CPUでしか動かなかったけどちょっと前にAMD CPUで動くパッチがマージされたので今は動くかも、とのこと。ちょっと不安定なこともあってrcしたりすると死んだりもするけど、動けばめちゃくちゃ強力なので使いましょうと
  • QAチームのXiscoが「デバッグにかかる前に再現データ小さくしたりしないの?」と質問したところ、「順実行と逆実行、あと条件付きブレークポイントを駆使してポイントを絞っていくほうが早い」とのMichaelの言
    • ただし、Bugzillaの添付ファイルはCrashtestに使われたりするし、単体テストに利用する場合は大きなファイルはそのままgitリポジトリに残ることになるので、そういう意味で再現ファイルを小さくするのは大事
  • rr上での配列やリストの表示は最大表示個数を設定できるんだけど、表示個数10000とかにしちゃって、rrのログ機能をONにしといてそのログをテキストエディタで開いてそっちで確認するとなると、文書オブジェクトみたいなデカい構造オブジェクトを見やすくなる
  • 今回の場合はUndoの前後でノードが消えてて?位置がずれてて?、それを知らないやつが元のノードを参照しようとして落ちてたというのが表層的に起きてたこと
  • その現象をもとに怪しいコードを順逆実行などで詰めていく
  • 怪しい場所を見つけたら git log -p で差分を追いかけるとそのコードがどのコミットで(どういう意図で)入ったか確認できる
    • OOoの古いコードにぶち当たり、コメントがドイツ語&残ってるバグ票の番号がStarDivisionの社内BTSのものだったりするので、それはハズレ

とにかく非常に面白かったのですがこっちの理解がおぼつかない&くそ眠かったので、ビデオ公開されたらまた見直したいです。チャット欄も何とかして保全されてねーかな、あれも後で参照したい……。

あとこういうの見ちゃうとやっぱWindowsじゃなくてLinux上で開発したくなりますね。Visual Studioじゃこんなに柔軟なデバッグできないよ、ね……?

LibreOffice Virtual Hackfest / by Ilmari Lauhakangas / 2020 October 17 - 14:00

events.opensuse.org

担当のIlmariはTDFの「開発マーケティング」担当で、要は新しい開発者に対するメンタリングをしたり、 開発やQAで活発に活動してる人を一本釣りして「こういう活動してみない?」って言ったり、 そういう役割の人。ちょういい人でもあります。 本人はC++あんまりできないことを気にしてるらしいと聞いたことがあるけど、どの言語が書けるとか書けないとかではなく、メンターとして優れてると思います。

で、通常LibOConはHackNightっていう合同ハックイベントをやるんですけど、 今年はできないので、1時間のワークショップをしましょうと。で、これもまた非常によかった。

これも箇条書きで。

  • お題は「bibisect」「バグのトリアージ方法について」「ヘルプの作成について」「その他質疑応答」
  • bibisectは「binary bisect」ってことで、要はLibOのデイリービルドをGitリポジトリに突っ込んだものがあって、それを用いてgit bisectして「どのデイリービルドで不具合が混入したか」を調べること
  • bibisectのやり方を説明するビデオを作ってくれたのでみんなでそれを見ました。このビデオ非常に分かりやすくてよかった。あとで↑のWikiにも貼るよ、とのことでした
  • ついでバグトリアージ。つまり誰かが起票されたバグをチェックして、その先開発者が解決に取り組めるような状態にすること
  • トリアージの最初はまず重複(dup)を見る。同じバグを別の人が報告してないか
  • タイトルや詳細説明を見て、象徴的な単語を拾って検索して探す。同義語なんかも考慮する
  • 見つからない場合はOPEN以外のステータス、あるいはResolutionをすべて --- にするなど
  • あるいはうんと単語数を絞って、後ろから(最近出たバグから)順にみていくのも効果的
  • DUPの場合はそれぞれのバグを見比べて「より良い」方を残す。「良い」というのは、条件を不要に限定しすぎていないってことも見る
    • 例えば「サイドバーでこんな不具合がある」という報告であったとき、別の報告で「メニューバーでもサイドバーでも不具合がある」とあったら、そっちのほうが条件が広いので
  • DUPとして落とすべきバグ票は、Whiteboardがあったら消して「Status」を「RESOLVED/DUPLICATE」にして、残すべきバグ票の番号を記載して閉じる
  • 昔は動いてたんだけど……というたぐいのバグはキーワードにregressionとbibisectRequestedをつけておく。bibisectはあとで自分でやってもいいし、このキーワードついてたら誰かやってくれるかも
  • あとBugzillaのAdvanced Searchのコツをいくつか紹介してもらいましたが、この手のノウハウはBZ使ってる他のOSSプロジェクトとも共有できそうな気がします
  • お次はヘルプ。LibOのヘルプはXHPという形式で書かれてます。
  • XHPのオーサリングには専用のオンラインエディタ LibreOffice Documentation XHP Editor があるので使おう、構文チェックとかできて便利。CLIでgit触らなくてもコミットできます
  • 基本的な情報はWikiにある。入り口 -> XHPの文法など
  • LibOのソース検索システム opengrok を使って既存のヘルプを検索するのもいい
  • 最後に質疑応答
    • Q: 直したい問題があったときにコードのポインタをどうやって知ればいい?
    • A: opengrok でももちろん良いが、ローカルにコードがあるなら git grep するのが早い
      • コメント: 似たような問題を git log で探して、その修正コミットを参照するのもよい

なおバグトリアージについては、イベントでメンターしてほしかったらタイムゾーン的に無理がない範囲でやるから連絡ちょうだいね、というIlmariのメッセージがありました。

Implementation Detail / by Stephan Bergmann / 2020 October 16 - 15:00

events.opensuse.org

全然ワークショップじゃないのだけどLibreOfficeの特定のコンポーネントについての話ではないのでここで紹介。新しいC++で入った言語機能と、それをLibOのコードでどう使えるかって話。

Stephenは毎年、LibOConではこの手の話をしてくれて、門外漢にもとても分かりやすいし面白くて非常に楽しみです。むしろファンだと言ってもいい。

ここも理解おぼつかないので箇条書きでごまかす。

  • 今のLibOは基本C++17。structured bindingとか色々使えます
  • ただしC++20、C++23対応を進めて行ってるよというステージらしい
    • configureに --with-latest-c++ をつけると新しいC++の規格でコンパイルできるということだそうな
  • ちょっと横入ですが、私の理解するところでは、LibreOfficeC++バージョンはしばしばツールチェーンのサポート状況で決まります。 Linuxはだいたい問題ないのですが、Visual Studio(MSVC++)とXcodeがですね。 前者は今のmasterはllvmでビルドするようになったからあんまり問題ないのかしら。後者は「Old macOSで実行可能なバイナリは古いXcodeでしか生成できない」問題がありますね。 なので古いmacOSをサポートから落とさないとコンパイラのバージョンも上げられない。
  • さらに横道ですが前提として cpprefjp - C++日本語リファレンスC++の各標準間の新機能をおさえてからこのトークに臨めばよかったなーとちょっと後悔
  • すごい雑駁な理解だと C++20 だとコンパイル時評価がさらに進んだのでそれを使うと記述スッキリできるしいろいろよいよという話
  • 例として挙げられていたのはLibOの文字列を表現するクラス OUString とそのリテラル OUStringLiteral
  • OUString は内部的にはrtl_uString へのポインタで、rtl_uString は参照カウンタと文字数(?バイト数?どっちだろ)とNUL終端の文字列ががっちゃんこしたもの
  • こいつのリテラルからの生成をコンパイル時評価使うといいよ、みたいな話だった気がする
  • 一見for文でループぐるぐる回りながら値をコピーしてるっぽいコードがコンパイル時評価で実はループ回してるわけじゃないんだよ(きもっ)とか
  • さらに constevalstd::copy_n() が使えるようになりさらに可読性アップ……とか、そんな話だったと思うのだけど、間違えてたらすみません
  • 質問で「それビルド遅くならない?」「なるねえ」みたいな話がありました。LibOのビルド、いまでも十分遅いからな……

Google Summer of Code 2020 Panel / 2020 October 16 - 14:30

events.opensuse.org

GSoCの成果発表。残念ながら前と後ろが押して、Yusuf Ketenさんの、拡張機能を追加するためのダイアログAdditions Dialogだけ聞きました。

yusufketen.com

いままで拡張機能って専用の差異とに行って *.oxt 入手してそれをLibOの拡張機能マネージャーで開いて追加する……って、かなりめんどくさい手順だったのが、 今回はLibOから直接ダイアログ開いて追加できる……これはすばらしいですね。次期メジャーリリース 7.1 で入るみたいです。

LibOコア関係

Implementing Vulkan-capable drawing using the Skia library / by Luboš Luňák / 2020 October 15 - 14:00

events.opensuse.org

7.0のリリースノートにさりげなく書いてあるこの一文:

Windows上でバックエンドで利用されていたOpenGLがSkiaライブラリとVulkanに置き換えられました。

この説明をするトークです。実は私はSkiaとVulkanの関係性も理解してないぐらい、この件よくわかってなかったので、ちょうどよいなーと。

  • LibOのウィジェット描画抽象化レイヤとしてはこれまでVCL(Visual Class Library)があって
  • このVCLのバックエンドに各プラットフォーム別の実装がある
  • VCL自体1990年から使われておりいろいろつらみが
  • 俺たちはオフィスソフトの開発者であってグラフィックライブラリの開発者じゃねーんだよ
  • より広く使われており信頼性の高いライブラリを用いてVCLの層を薄くしたい
  • そこでSkiaGoogleChromeのために開発した2Dグラフィックライブラリ
  • Skia自身にいくつかのバックエンド実装があって、その中でGPUを用いるものがVulkan
    • ほかにもCPUで頑張るやつや、OpenGLを用いる実装なんかもあるそうな
  • ということでVCLのバックエンドとしてSkiaを用いるようにして、Windowsでは(元々のOpenGLを自分たちで叩く実装の代わりに)それを標準にしたよ、というのが現状
  • VCLは設計が古いためI/Fも古く、1bppやパレット付きビットマップなどSkiaでは直接提供されていないものを扱う必要があるため、そこは適切に変換する
  • グラフィック操作をVCLに任せるのではなくよりハイレイヤー(LibOのコード内)で行っている場合があり、そういう部分を対応する必要があった
    • ただしOpenGL化のときにある程度は見直せており、その成果がある程度は使えた
  • パフォーマンス。Linuxにおいて、Raster Skia(Vulkanではなく)であっても、非Skia(X11)では非常に高速になった
    • デモを見ると確かに非常に速い
  • 疑問)7.0ではいくつかCJKのレンダリングがおかしくなったという問題があるらしくSkiaをオフにすると直るという話だが、今回の説明だとVCLのバックエンドを差し替えただけなのでそういう問題が起きるというのは若干考えにくい。途中コメントがあったハイレイヤーとの不適切な責務分担のせいかな……?

OOXML / PDF Digital Signing in Draw and elsewhere / by Miklos Vajna / 2020 October 16 - 11:30

events.opensuse.org

コロナ禍で注目されている文書の電子署名に関するLibOの機能について。

  • ODF署名:OOoのころからある機能。だいぶ古い。GPG署名とは別の機能
  • OOXML署名は、名前の通りMS OfficeがOOXMLに対して署名する機能の互換性のために導入。なぜか署名情報に画面解像度とかOSバージョンとかの情報が露出する
  • PDF署名はもちろんPDFの仕様にのっとった署名だが、LibOが持つ三つのPDFパーサーは全部これが解釈できない(Popplerベース、PDFium、Hybrid PDFのためのもの)ので、さらにもう一個実装が必要
  • multiple signaturesは証明書チェーンの検証が必要でちょっと面倒
  • PDFの仕様以外に、アプリケーションとしてのAcrobatと動作を合わせないといけない部分がありつらかった
  • 意味が分からないなりに目盛ったキーワード:XML-DSig(昔LibOConで聞いた記憶がある)、DocuSign (https://www.docusign.jp/ だよね)、libxmlsec(実装で使ってるらしい)

ここ注目度が高い技術なのと、私の本業にも近いのでもう少しちゃんと勉強しないとなと思った次第でございました……。

LibreOffice Online / Collabora Office mobile関係

Making Online trivial to setup / by Muhammet Kara / 2020 October 15 - 15:30

events.opensuse.org

トルコのLibO開発者Muhammet Karaさん。トルコ国内でHackFestを実施したり、若手技術者育成なんかにも力を注いでるナイスガイです*1

さておき、LibreOfficeをブラウザベースで使えるLibreOffice Online(通称LOOL)。あるいはそのCollaboraブランドCollabora Online(COOL)。便利ですが構築はやや大変でした。 商用利用ならコストかけて真面目に構築してもいいけど、個人用にひょいっと立てるには若干ハードルが高かったのも事実。

それが、なんとなんと、OSSDropboxクローンであるNextcloud*2のアプリ(プラグイン的なもの)である「Collabora Online」

apps.nextcloud.com

を使うと、NextcloudのWeb UIからワンクリックで(COOLが)インストールできるようになっちゃったんですね*3。その技術解説。

……なんですけど、このときすでにだいぶ眠くってね……あんまりちゃんと聞き取れませんでした。以下「たぶん」って内容を箇条書き。

  • ワンクリックで入るCOOLはAppImage化されたもの
  • 通常LOOL/COOLとクライアントアプリはWebSocketで(WOPIというプロトコルを用いて)しゃべるのだけどAppImageだとWebSocketがしゃべれない(……んだと、思う)
  • なのでPHPでプロキシプロセスを立てて、WSじゃなくてHTTPSで通信してる
  • HTTPSだとWSでつなぎっぱなしにしてバイナリなプロトコルでやり取りするのにくらべ、TLSのセッション確立およびHTTPヘッダの分下駄を履いてしまうのでパフォーマンスがつらい
  • なので可能な限りセッションを維持する工夫をしている
  • 一部ではどうしてもポーリングしないといけないところがあり(理由失念)、そのチューニングも頑張っている

ちょっと理解おぼつかなかったところもあるので、こいつも資料後で読み返すなりして復習したいです。 スライドに丁寧に参考文献が挙げてあったと記憶してるので。

History of Online & Mobile / by Jan Holesovsky / 2020 October 17 - 12:00

events.opensuse.org

KendyことJan Holesovsky氏の発表は名前の通り、主にCollaboraが今注力してるオンラインとモバイルの歴史について。

  • 2011~2012年の時点でSUSE社内でAndroidでLibOを動かすという実験プロジェクトがあった。「まあ動く」程度のものはできたが、死ぬほど遅いとかデバッグが人類には不可能とかいろいろあった
  • 大きな転機は2013年、CloudOnという会社が「OOXMLのiOSビューアのエンジンとして」LibOを使いたいという要求があって、そのために(SUSEから離れたメンバーが創設したばかりの)Collabora Productivityが協力することに
  • この時生まれたのがLibreOfficeKit(LOKit)、LibOのエンジンを直接キックするC/C++のライブラリ
  • メモリ制約が厳しいモバイルOSのために「タイルレンダリング」が導入される。つまりLibOの文書のレンダリング結果をビットマップタイルにして得るという方法
  • これであれば画面に表示される部分のタイルだけを扱えばよくなりメモリ使用量が大幅に削減される
  • ここ、私の歴史認識が違って、てっきりLOOLが先にあって、LOOLのために作ったタイルレンダリングをモバイルでも使うよという話だったのかと思ってたけど逆なんですね
  • CloudOnのアプリは確かクローズドベータは出て、公開ベータするよってなったところでDropBoxに会社ごと買われてしまいました。多分まるごとPapersのチームに吸収されたんだと思います
    • CloudOnが買収されなかった未来はどうなってたんでしょうねえ……歴史にでもしかはありませんが
  • で、この2015年にIceWarpという会社の投資を受けてLOOLの開発スタート、このときにLOKitで作ったタイルをLeafletで並べて描画するという基礎ができる
  • なぜだか知らないけどLibOにはクラウドやモバイルが存在する前からmultiple view機能というものが存在して(正直、使い道不明……)、そいつがLOOLの共同編集に使えた
  • LOOLは共同で使うアプリなので設定ダイアログも複数人が設定いじることを考えなければならず、当然LibOのコアはそんな考慮されてないのでいろいろつぶしていった、ここらへんは過去のLibOConでいろいろ発表がありました
  • そして2019年、Adfinis SyGroup AGの投資を受けてCollabora Officeのモバイル版開発がスタート、去年のLibOConでも発表があったとおり「アプリのサブプロセスとしてLOOLサーバーを動かして、アプリの実体はWebViewでLOOLのUIを出す」という実装
  • モバイルだとタッチ主導UIである必要があるが、それを担うのが「サイドバー」。デスクトップ版と見た目異なるが提供するものは一緒。この点については今年Bringing the Sidebars Online という発表があったのでそっち参照
  • モバイルで必要なUIをすべて実現するにはUNO APIだけだと足りず、一部は(エンドツーエンドテスト用の)untest APIを使って実現したとか
  • 今後はleaflet/poco依存を減らしたいなどと言っていたのがちょっと気になりますね

技術的にめっちゃ踏み込んでるわけじゃなくて歴史をさらったお話なのでわたくしのような薄い人間にもわかりやすくてよかったです(小学生みたいな感想)。

Online – Improving visual consistency / by Pedro Silva / 2020 October 17 - 13:00

events.opensuse.org

これはですね……うーん、ちょっと思っていた内容と違いました。自分的に面白いと思ったところだけ:

  • Pedro Silva氏はCollaboraのデザイナーさん。デザイナーさんだけあってスライドのデザインはカッチョよかった
  • 肝心の「Visual consistencyとはなんぞや」みたいなことは実はいまいち理解できなかったけど、いろんなトピックがあるみたい
  • 例えばCSS。Consistentyを保つためにはファイルをまたいで冗長な部分があってはいけない(全体を統一的に直したいときに、一部コピペされたところが直ってなかったとかつらい)とか、特定解像度を仮定したコーディングがあったらだめだとか
  • 徹底するために https://stylelint.io/ でlint。きちんと除外ルールを整備。それで make run するたびにチェックする仕組みを作る。すばらしい
  • 使い勝手がよいだけではなく実装もきれいになっていることが大事。これ開発とUI/UX設計の距離が近くないと難しいよね
    • Collabora Office for Mobileでは可能だろうけど、LibOの開発にこういうやり方ができるかというとどうなんだろ。どういうやり方があるんだろ
  • 後半はどっちかというとメタな考え方の話で正直聞いてて眠かったです……あとCOOLの宣伝が長い……
  • 「モバイルアプリなのに保存アイコンがフロッピーなのはvisual consistentなの?」みたいな質問が出て、なんかいろいろ長々と答えてたけど、どうにも言い訳してるようにしか聞こえなかったのが若干残念(私のヒアリング能力のせいで、ちゃんと答えてた可能性はあります)。フロッピーはダメだとしたらどういうものが保存を意味するのにふさわしいかって考えが知りたかった
    • アプリによっては右上にチェックマークってやつもあるけどアレもあんまりわかりやすくないよね身たいな話はあったようななかったような
    • 保存なんて考えるのは平成までだよねー、自動保存が当然じゃない?って考えもありえるのかなあ……

Improvements to PDF support in Collabora Online / by Tomaž Vajngerl / 2020 October 16 - 18:00

events.opensuse.org

LOOL / COOLでPDFインポートを強化したよというタイトル通りのお話。

  • DrawのPDFインポート機能はPopplerベース。インポートしたものが編集可能になるというのはメリットだけど、一方で正確性に難がある。応用によっては編集可能性よりも正確さが嬉しいこともある
  • そんなわけで正確性を重んじて、挿入されたPDF画像の処理はPDFiumという別のライブラリ(Chrome/Chromiumが使っている奴)を用いるようにしている
  • LOOL/COOLではDrawは機能としてないので、PDFインポートはビューアとしての機能になり、基本PDFiumを用いてるけど、単なるビューアとしても機能は必要でそれを追加したという話
  • 足りない機能というのは、検索機能と注釈(annotation)機能
  • 検索については、PDFiumの内部オブジェクトはレンダリング後のグラフィックオブジェクト以外にPDF自体をメモリ上に持ってるのでそれを使って検索できる
  • 検索結果の位置を矩形で取り出すAPIも生えているので、それを用いて結果表示可能
  • PDFの注釈機能はテキストだけじゃなくていろんなものにつけられるけどまずはテキストへの注釈を実装し、そのあと描画オブジェクトにも実装……とか言ってた気がする
  • ここらへんでメモがぷっつりと切れてました……

Open Document Format (ODF)

ODFは言わずと知れたLibreOfficeのネイティブフォーマット。詳しくは過去に記事書いた*4 のでよかったらそちらを参照してください。

ODF state of the union - ODF 1.3 ante portas / by Thorsten Behrens / 2020 October 15 - 15:00

events.opensuse.org

ODF 1.3はOASISの委員会勧告になって今ISO/IEC標準化を目指してるけど、そういう現状が聞けるかなというトーク。 ただ、このときJitsi meet bombをくらって発表がめっちゃ大変そうで、私もそっちに気を取られてあんまり聞けてないですね……。

なので一点だけ。ODF 1.3に続いてODF Nextという取り組みが始まってるんだけど、 そっちでは標準の編集そのものをCI化する(実はぴんと来てないけどODFの標準は文書で記載された定義とXMLスキーマとの両方なので後者のことを言ってるのかな) 、 メールベースの議論ではなくGitHubに持っていく、とかそういう取り組みが話されていて、技術で解決できる物事は技術で解決して、 標準策定までのリードタイムを短縮しようという試みはよいなと思いました*5

ODFについては、Svante Schubert氏の:

events.opensuse.org

という発表もあって、聞きに行った記録は残ってるんだけど内容についてまったく残ってない……どういうことだ自分。ごめんなさい。 お詫びにODF ToolkitのURL貼っておきますので関心のある人はどぞ。

github.com

マクロ・機能拡張・その他

« LibreOffice Python scripting made simple w/ IDE_utils » - Dev/Doc tracks / by Alain Romedenne / 2020 October 17 - 10:00

events.opensuse.org

@LibreOfficiant ことAlainさんによるLibreOfficePythonによるマクロ開発のセッション。

ASPOっていうLibreOfficePythonマクロ統合開発環境の説明が興味深かったですね。

extensions.libreoffice.org

こいつについては去年のLibOConでも @LibreOfficiant さんのトークで名前知ってたんですが、 LibOのBasicの開発環境程度なんじゃないの? と勝手な偏見を持ってあんまりちゃんとチェックしてなかったんですよね。 でもビルトインされたPython consoleでLibOの内部コンテキストと同じ状態を作っていろいろ試せたりするみたいで、 なんというかJavaデコーディングするときにもIntellij IDEAでブレークポイントで止めた状態でインスペクタでコード片を書いて動きを確認つつコードを書いてる私には、 結構いいかも……と思いました。

LibOのPythonマクロもずっと宿題なので、今度真面目に触ってみますかね。

LibreOffice Document Encryption API / by Vasily Melenchuk / 2020 October 17 - 12:30

events.opensuse.org

機密性を保って文書交換したい場合、PPAPはイヤですよね。かといってLibOの機能でパスワードロックかけたとしても、パスワードは人類に使いこなすのは難しすぎるのです。 強度も弱いし、パスワード漏洩しちゃうと無力だし、あれこれ……。

なのでCMISとかNextcloudとかGoogle Driveとかの機能を使いたいねとなるわけですが、そんなあなたにRights Management Services = RMS*6

そのRMSの対応をする拡張機能を作ったよという話っぽいです。 モチベーションとしてはRMSでロックされたOOXMLを読めるようになりたいという。 MSの仕様をもとに暗号化された文書を解釈できるようにして、 実装上はUNOのXPackageEncryptionインターフェースを拡張する……みたいな話に聞こえました(雑)。

Windowsでしか動かないけどサンプルの拡張機能ここにあるそうです。興味がある人はどぞ。

github.com

Windowsでしか動かないのはMSがSDKWindowsでしかリリースしてないから?という質問に対して、いやマルチプラットフォームで存在するはず、と答えてましたが、 じゃあなんでWindowsでしか動かないんだろう……ソース見ろって?

Remotely accessing files in a distributed LDAP+Samba-based infrastructure / by Marco Marinello / 2020 October 17 - 10:30

events.opensuse.org

イタリアで複数の学校をつないで、各学校に所属する人たちが、公衆網から接続して安全に自分の学校のSambaファイルサーバーにアクセスできる仕組みをつくったよ……という話らしいです。 FUSSプロジェクトというGNO/Linuxベースのシステムの一環らしい。イタリア語読めないですが……。

fuss.bz.it

クラウドサービスでも使えばいいのになんでこういうの独自に実装するのというと、それはやっぱりGDPR的というか、自分たちの情報は自分たちでセルフホストしないとってことらしい。 ヨーロッパはここら辺やっぱセンシティブなんですねえ。

それはともかく発表者のMarco Marinello氏はなんと19歳! 19歳でこんなプロジェクトにかかわって国際イベントで登壇してるんだ。すごいな。

LibreOffice AppImages: Past, present and future / by Simon Peter, Antonio Faccioli / 2020 October 16 - 19:00

events.opensuse.org

AppImageLinuxにおけるパッケージングシステムの一つで、普通に単独のファイルとして配布されてて、手元に持ってきて実行権限つけるだけで実行可能になるというもの。 特にQA作業で古いバージョンをちょっと動かしたいみたいなときに超便利です。

で、私は単にAppImageの単なるユーザーだったんで中身のことはさっぱり知らんのですけど、このプレゼンでそこらへん説明があったので資料公開されたらもっかい読もうっていうのと、

github.com

ここにAppImage版LibOのビルドスクリプトがあるので眺めてみようと思います。

近々の機能としてはAppImageに閉じ込められたLibOをアップデートする機能、しかもGUIの「更新を確認」が機能するというのはなかなかよいなと。 古いバージョン塩漬けじゃなくて、AppImageで最新追いかけたいってニーズもあるかもわかんないですからね。

それと最後に、FreeBSDの上でLinux版AppImageが普通に動いてるという驚きのスクショが公開されてビビりました。そんなことできるんだ……すごいな。

……ということで

その2、終わりです。最後は力尽きて駆け足になってしまいました。というか十分すぎるほど長いですしね、この記事……。

つづきはその3です。今日拾えなかったトピックをまとめて。ではまた。

*1:関係ないけど彼と私と榎さんで飲んだときに、「いやー日本人面白いなー」ってやたら言ってもらったのを覚えてます。いや、たぶん私(や榎さん)は典型的な日本人じゃないよ……。

*2:およびそのフォーク元のownCloud

*3:Nextcloudのオフィス文書共同編集ソリューションにはOnlyOfficeというやつもあり、こっちはPure JavaScript実装なのでサーバー側の手当てが不要で、その手軽さで好まれたりしてて、巻き返しのために簡単インストールが必要だったんじゃないかな……と、想像。

*4:関係ないけど、編集可能なリッチテキストを表現するフォーマットとして、正しい意味で「国際標準」であるものとしては唯一のものであるODFを、イギリスや台湾に倣って日本でも政府が用いる標準フォーマットにしましょうという提案が、デジタル改革アイデアボックスに出ています(その1その2)。よろしければぜひ、「賛成」をポチっとしてください。

*5:アプリケーションの都合でどんどん仕様追加されているのに、標準側は本質的でないTypo修正しかしてないどっかの標準に爪の垢を煎じて飲ませたいですね。

*6:ここらへん参照でしょうか: RMS の動作のしくみ | Microsoft Docs

openSUSE + LibreOffice virtual conference 2020参加の感想(その1:LibreOfficeプロジェクト・コミュニティ)

そんなわけで予告したとおり、表題のイベント参加してきましたよ。通称oSLO。

events.opensuse.org

参加したセッションの感想とかなんとかをまとめておきます。 時系列でみても退屈かなと思うので、テーマ別で。

なお、オンラインイベントということもあって、 あとから資料もビデオも公開されるでしょうし、 わたしみたいに大して英語ができない人間ががんばって聞いて内容を要約して公開するってニーズは、 もうないんじゃないかなと思います。 「なんだよーこいつ利いた風なこといってるけど全然英語聞き取れてないじゃん」ってなるのがオチなので。

ので、各トークの内容の要約はなるべく避けて、 背景とか前提とか、 聞きながら私が思ったり感じたりしたことを書き出す……というのが、この記事の趣旨です。 いや、そういうの別によいから……と思う人は、そっ閉じしてくださいませ……。

ビデオや資料が公開されたら順次こちらでも共有していく予定。

この記事は全3回予定です。

  • その1:LibreOfficeプロジェクトとコミュニティ
  • その2:技術・実装
  • その3:その他(移行など、openSUSE関係、全体の感想)

LibreOfficeプロジェクトとコミュニティ

Opening Session and Address by Lothar Becker / 2020 October 15 - 10:00

events.opensuse.org

登壇者のLothar Becker氏はThe Document Foundation(以下TDF)のThe Board of Directors(取締役会、以下BoD)議長です。

内容はともかくとして(オープニングなので)、当初利用予定だった https://oslo.gonogo.live/ がトラブって、 スライドの投影はできないしなんだりかんだりで、 しょうがないのでスライドなしでLotharが挨拶して、その裏でTDFのインフラチームが、 TDFがホストしているJitsi meetでイベント行えるように急遽準備して、 なんとかイベント開催できるようになった……そのなんというか、 ドキドキ感と感謝の気持ち、 それが先だっちゃって、話の内容はあんまり覚えてないです……ごめんなさいLothar。

Keynote from Collabora's Michael Meeks / 2020 October 15 - 10:30

LibOの開発・サポート企業の最大手、Collabora ProductivityのMichael Meeks氏によるキーノート。

そもそもCollaboraという会社がありまして、

www.collabora.com

LinuxカーネルとかGstreamerとかChromiumとかの開発・コンサルティングをやってる会社だそうです。詳しくないけど。

で、Collabora Productivityはその子会社で、LibreOfficeの商用版・長期サポート版Collabora Officeの開発・サポートなどなどをやっている会社です。 Meeks氏はそこの代表……だったはず。

www.collaboraoffice.com

ですから正しくはCollabora Productivity を付けるべきなんですけど、LibOの文脈だとみんな(本人たちも)断りなくCollaboraって言います。 私がこのブログとかSNSとかでCollaboraって書いたらProductivityを補って読んでください。

トークの内容は割愛するのですが、まあCollaboraはLibOの開発において最大のコミット数を誇る組織なので、 このキーノートで1年のLibO開発の大まかなトレンドがわかるところは、まあありがたいですよね。

大きなトピックとしては、LibreOfficeブラウザー経由で動かすためのLibreOffice Onlineが、 TDFの配下からCollaboraアカウントのGithubに移ったことですね。

github.com

この理由についても説明があったんですけど、まあそれは込み入っているので彼らが公開しているFAQ見ていただくのがいいかなというのと、 私の感想は関連する別のトークのほうで書きます。

On sessions, statutes and software / by Florian Effenberger / 2020 October 17 - 11:00

events.opensuse.org

TDFのExcective ProducerであるFlorian Effenberger氏によるTDFという組織についての講演。

TDFって実は約款に「LibreOffice」って文字は入ってないんだよーとか、「everyone contributes what they're best at(みんなが得意なことで貢献する)」って言葉とか、 一生懸命やってたら、それは普通の人生と一緒で緊張感がある対立することもあるよね、だけどそれを一緒に解決するの大事だよねみたいな話が印象的。

特に最後のは、今のLibOコミュニティはけっこうなんというか、 それこそ「緊張感がある対立」のさなかにあって、 それに対する感想としてはTwitterに書いたことでほぼ尽きていて、

(TDFの理想はすごい共感するし、それが、大してできもしない英語でカンファレンスに参加したりしてる理由だったりするのだけど、正直、理想を実現するためにがんばるとか誰かと利害を調整するとかが(それが非常に大事なことはわかってるんだけど)今のぼくにはつらすぎるんだよなあ……

ってことなんですよね……。

COVID-19のせいなのかなんなのか、 私はもう議論を積み重ねるとか、利害対立を丁寧に解決するとか、 そういうことをできる精神状態じゃなくて、 そういうの見てるだけでもけっこうつらくて、ねー。

あとですね、プレゼンのなかで、2016年のチェコのBrnoのLibreOffice Conferenceの集合写真が紹介されて、 Jitsi meetのチャット欄で「この写真に写ってる人挙手!」って呼びかけに、ぱぱぱぱぱって手の絵文字が並んで。

このLibOConって、私現地まで行ったけどカンファレンスに参加できなかった年なんですよ。入院してね。 Florianと、TDFの秘書役のSophieと、あと日本人参加者で作ってくれたFacebookメッセージチャットでFlorianが、

「ゆっくり休養してね、我々はみんな、君もこのカンファレンスの参加者だと思ってるから!」

って言ってくれて。まあ既出なんだけど、私は思わず病院のベッドで布団かぶってしくしく泣いたりしたわけですよ。おっさんがキモいけど。 この、チャット欄を流れる手の絵文字を眺めながら、それを思い出してました。

LibOってそういう、Florianに限らずほんとに温かい人がたくさんいるコミュニティで、 良くも悪くも家族的だったりするんですよね。 そういう人たちとチャット欄で話してると、 いや確かに今は解決すべき対立関係があってそれを見ているとしんどいけど、 だからといってまったく縁を切るんじゃなくて、 「コミュニティの一員」としてそういうのに立ち向かうのは無理としても、 付かず離れずの関係はもっておきたいな……と思いました。 そういう困難に立ち向かってる人への尊敬の念は忘れないようにしつつね。

って、これトークの感想じゃないな……。

The history & pre-history of LibreOffice / by Michael Meeks / 2020 October 16 - 13:30

events.opensuse.org

OOo時代からLibOの歴史を振り返る的な……。

他のトークと重複するところもあるので箇条書きで。

  • 端的に感想を言えば超おもしろかった*1
  • 「非協力的な非貢献者……アジア地区で典型的……」つまりコードをforkして開発するけどその変更をcontribute backしないことについて触れてる。これについてはまた別のトークにて。
  • 2011年7月のパリの第一回LibOConで、すでにブラウザバージョンの試作なんてのが発表されてたとは知らなかった。
  • 2012 - Becomes clear: Linux Desktop economics suck ;)
  • こういうディスカッションに入っていくには自分の英語力では全然足りないですね。

Ecosystem, Branding & Investment / by Michael Meeks / 2020 October 17 - 15:15

events.opensuse.org

すぐ上で紹介したトークの続き的なところもあり。

ここでいう「エコシステム」というのは、平たく言えばLibOでビジネスしてる組織、 プロフェッショナル開発者を雇用して、コードやその他で大きく貢献して、 さらにはTDFのAdvisory Board*2 だったりする組織です。

いくら高邁な思想があっても、みんな霞を食っては生きていけない。 なのでフルタイムにせよパートタイムにせよ、開発者を雇用する組織があることは、 とっても大事なのです。「エコシステム = 生態系」って言葉もわかる。

でま、Collaboraはコミット数ベースで4割ぐらいをたたき出している、 LibOのエコシステムのある意味代表なわけですね。 その彼らと、少なくともコミュニティの一部が、若干利害が対立しているところがあって。 LibreOffice 7.0のリリース前のテスト版に「Personal Edition」ってのが入っててちょっと揉めたというか話題になったというか、 そういうことがありましたが、これはこういうエコシステムとコミュニティの対立を解決しようとするさまざまな試みの一部が、 漏れ出してしまったところがある……というのが私の理解です。 まあ、そういう難しい話題をいろいろ考えましょう。というトークです。

もちろん、CollaboraのGeneral Managerという立ち位置のMeeks氏の視点からなので、 そこはもちろんバイアスがある話なわけですが。

繰り返すように私はこういう利害対立について意見をするには少々理解がおぼついていないところがあります。 なので一点だけ。

前述のトークでもそうでしたが、このトークにおいても、

オリジナルのソースをForkして「ローカル版」として商用版をリリースして、 その修正をcontribute backしない、 そういう例はアジアではしばしば見受けられる。

といって、中国のRed Flag LinuxのOffice実装や、台湾のLibreOfficeフォークのOxOfficeのことを名指しで批判しているように聞こえました。

正直私はこれらのオフィスについてそれほど知っているわけではない*3 のですが、アジア圏のLibO(あるいはOOo)のフォークが自分たちの変更をフォークもとに戻さないことについては、ちょっとだけ思うところがあります。

まず、我々東アジア圏の人間がLibOに手を入れようと思う多くの動機はCJK周りの不具合なんじゃないかと思います。 しかし、LibOの実装は、「自分がこれに手を入れたら壊れるのではないか」と不安になる程度は複雑に思えます*4。「日本語が正しく出るように直したらアラビア語が壊れた!」とならない自信を持つのは非常に難しい。

LibOの開発はやってないけど一応プログラマーである私から見ると、「今ある問題をとりあえず解決する」コーディングと、「あるべきようにきれいに問題を解決する」コーディングにはだいぶ距離があって、ローカルな市場だけを考えたら「とりあえず対象の言語だけが直るような修正」は前者で、それだけをやってればビジネスになるとしたとき、後者までやる合理的な理由はあるのか。

もちろん、理屈の上では、upstreamから改善点をインポートし続けるつらさを考えると、upstream firstで進めていくほうが合理的……というのは、あります。

けど、ここでもう一つあって、ちょうど、oSLOが終わったあたりでTwitterを見たら目についた書き込み。

cfjsummit Day1終了後の深夜に話されてたOSSのフリーライド問題、日本ではやはり言語の壁が要因の一つだと思う。「コーディングに自信はあっても英語には自信がない」という人は多い。英語圏OSSへのコミットをサポートする取り組みは必要。来年のアンカンファレンスのテーマかな

この理由ってめちゃめちゃある気がするんですよね……。

gitのコミットコメントを英語で書くのがまずたるい。

Gerrit上でレビューコメントがついたときに英語で議論するのがしんどい。

そんなしんどい思いをするぐらいならupstreamの変更を取り込むときにしんどい思いをするほうがまし。

少なくとも私は、そう思わない自信がないです。

なので、「アジア圏では各国語版みたいなの作ってupstreamに貢献を戻さないことがよくある」と言われてしまうと、 だってそれはあなたたちが貢献を戻すよりもずっとコストが高いんだもの……と、なってしまうんじゃないかな……。 そこのコストを下げる取り組みをしないで、upstreamに貢献を返さないなんて!と正論を言われても、 対立は解消しないんじゃないかな。 そんなことを思いながら聞いてました。

……なんてことを日本語で書いても、意味ないんですけどね。

そもそも、「コストを下げる取り組み」にいいアイディアはないですし。だめじゃん。

……ぜんぜん、カンファレンス参加メモじゃないですね。次行きます。

地域コミュニティ

日本語チームからもこのネタの発表あったけど、前述のとおりドロップアウト組としてはちょっと無理で聞けてませんでした。 でもイベント参加者向けTelegramとか、次のコマを聞きに行ったときに垣間見えたJitsi meetのチャットログとかを見ると、 どちらもとても好評だったようで喜ばしく思います。

それ以外の地域コミュニティ事例、韓国とインドネシア

Building LibreOffice Korean Community and CJK's common & different issues / by DaeHyun Sung / 2020 October 16 - 10:30

events.opensuse.org

感想としては、「デヒョンさん話題盛り込みすぎだよ~」でした :)

私は彼と直接話も何度かしてるし、なんといってもCJK文化圏ではあるのでそrなりに話題についていけるんですけど、 あれ文脈が全然ない人にはちょっと難しかったんじゃないかな……Jitsi meetのチャットでも「スライドめくるのはやいよー」って意見が出てたし。 ちょっともったいない気持ちがしました。

トピックとしては:

  • 韓国語とIT、OSS
  • DaeHyunさんのOSSへの貢献の歴史
  • 韓国コミュニティでの活動(NIPA主催のContributon*5 に参加した話とか)
  • アジアコミュニティとの共同作業

という感じでしたが、三番目の話とかもっと掘り下げて聞きたいな、とは思いました。 DaeHyunさんにとっては初のLibOCon登壇なので、色々話したかったのはすごいわかるんですけどね。

でもRed Star OS付属のオフィスソフトのスクショの話とか、北朝鮮のクライシスマッピングについてのAkademy 2018のキーノートについてとか、いろいろ面白いトピックが詰め込まれた内容でした。Akademy 2018のキーノートは前にもお話聞いたんですけど、ちゃんとチェックしてなかったので改めてビデオ見てみようって思いましたです。

DaeHyunさん、おつかれさまでした!

Building Upstream Contribution in Local FOSS Community / by Kukuh Syafaat / 2020 October 16 - 11:15

events.opensuse.org

インドネシアは若いOSS活動家がたくさんいる非常にアクティブなところです。 2019年に行ったLibreOffice Asia Conferenceにも、2017年にお手伝いしたopenSUSE.Asia Summitにも、大勢来てくれました。

でも、正直な話、ちょっと前までは「なんかすごい盛り上がってるみたいだけど、じゃあ、中で何やってるの?」という気持ちが、私の中になかったとは言わないです*6

それが、特にデザイン回りでの貢献がすごい。例えばLibO 7.0の新機能紹介のビデオはインドネシアチーム編集です。

www.youtube.com

今回のoSLOのロゴは、このトークの登壇者Kukuhによるものですし:

f:id:naruoga:20201020221350p:plain
https://blog.documentfoundation.org/blog/2020/01/24/winner-announced-for-2020-conference-logo-competition/

OpenOffice.org / LibreOffice 10/20 ステッカーのデザインもやっぱりインドネシアのRania Amina氏によるものです。

f:id:naruoga:20201020221922p:plain
https://blog.documentfoundation.org/blog/2019/12/20/10-20-libreoffice-10th-anniversary-in-2020/

こうやって、「デザインはインドネシア」みたいな色があるっていいですよね。LibreOffice IDのFacebookグループ3900人も参加者いるってのもすごいです。

……って、これもぜんぜんトークの感想じゃないな……。

ま、そんなわけで、クッソ長くなってしまいましたがいったん終わり。明日以降、その2を書いていこうと思います。

*1:去年のLibOConでItaloが「10/20の記念としてOOo/LibOの歴史書を書こうと思う」みたいなこと言ってたの思い出した。あれ実現しないかなー。

*2:お金を出す代わりに「アドバイス」をする権利がある組織、 平たく言えばスポンサー。

*3:公平を期するためにいっておくと、今TDFのBoDの副議長でもある台湾のFranklin Weng氏とは仲良くさせてもらってますが、FranklinはもちろんOxOfficeな人たちとつながっています。そしてその縁で私もOxOfficeの中の人と一度ご飯を食べたことがあり、Facebookのお友達だったりもします。

*4:私はろくすっぽ開発やってないですが、我らがCJKヒーロー台湾のMark Hung氏も、LibreOffice Asia Conference 2019の基調講演で似たようなことを言ってたと思います。

*5:Contribution + Malathonの造語らしい。日本で言えば未踏みたいなものかしら?

*6:おんなじことはLibOでも「日本のコミュニティイベントたくさんやってるしとっても活発だけど、なにやってるのかさっぱりわかんないよ」って言われてましたけどね。

【個人的メモ】openSUSE + LibreOffice Virtual Conferenceで何を見るか(Day3: 10/17)

いよいよ来週10/15~17に迫ってきた:

events.opensuse.org

について、LibreOfficeにもopenSUSEにも直接かかわりあいのない微妙な立場のわたくしがこの話気になるなとかこの話参加したいなということをダラダラとメモる記事、いよいよ最終日。

10/15(木) 10/16(金) 10/17(土)

ではまいりましょう。例によって時間はJSTです。

19:00-19:30 [LibOCon] « LibreOffice Python scripting made simple w/ IDE_utils » - Dev/Doc tracks

events.opensuse.org

16日に似たようなトークがあるけどあっちはBasicでこっちはPython。 LibO+Pythonはちゃんと組み立てれば結構日本でもウケるネタになる気がするんだけどな、と思いつつ思ってるだけ。なので聞いてみる。

裏番組でFirebirdの話をしたりするのでこれも面白そうではあるけど……。

次に野方さんによる日本におけるマーケティングのセッションがあって、これ自体はぜひカンファレンスで話したほうがよいと思ってたし登壇いただける野方さんには感謝しかないのですが、 前述の通り日本のコミュニティの話を聞くのは私のメンタルがつらすぎるので*1 パスして……。

20:00-20:30 [LibOCon] On sessions, statutes and software

events.opensuse.org

非営利組織であるTDFの10年から学んだこと……みたいな。ガバナンスとか透明性とか。

いまこういう話題ちょっとニガテな感じなので、これもパスするかもだけど、Florianは超いい人だし聞くかもリストには積んでおきます。

21:00-21:30 [LibOCon] History of Online & Mobile

events.opensuse.org

LOOLと、LOOLベースで開発中のCollabora Office for mobile(って名前だっけか)のデザイン上の決定とかなんとか。そんなに深入りした話にはならないとは思うけど。

しょうがないけどここから3コマぐらいは聞きたい話が全部かぶっていて残念。逆にいうと後からビデオ見る楽しみが多いということで結構です。

21:30-22:00 [LibOCon] LibreOffice Document Encryption API

events.opensuse.org

このトピック自体もそうだけどUNO APIを叩いて外部からLibO操作するってことについてもう少し知っとくと本業でも役に立ちそうかなって。

22:00-22:30 [LibOCon] Online – Improving visual consistency

events.opensuse.org

これもLOOLネタ。だけどちょっと毛色が違って、LOOLのDOM要素をどうやって掴みやすくするかとかそういう話っぽい。 元SeleniumによるWeb自動テスト屋さんだった人間としては気になる。

23:00-24:00 [LibOCon] LibreOffice Virtual Hackfest

events.opensuse.org

通常のHackFestじゃなくて開発関係のQ&Aコーナーらしいんだけど、 ホストのIlmariが「質問全然こないよーこのままだとキャンセルになっちゃうよー」ってちょっと前にぼやいてた……。 なんか考えないとな。って、まだ間に合うのかなあ……。

ここも裏番組いろいろ面白そうなんだけどね……。

24:15-24:45 [LibOCon] Ecosystem, Branding & Investment

events.opensuse.org

この議題もちょっと自分ダメかもしれないけど、大事なので聞けたら。

24:45-25:15 [LibOCon] Closing Session

events.opensuse.org

例年だとここで来年のカンファレンスの開催地発表があるんだけど今年はどうなるんだろうね……。

25:15-26:15 [LibOCon] LibreOffice 10th Anniversary

events.opensuse.org

お祝いはうれしいことだけど次の10年に向けて今LibOコミュニティは結構タフな議論をしていて、 それを見てるのが結構しんどい今の私にとっては、 この1時間でどんなことをするんだろう……というお気持ちでありまする。

ま、お祝いなのでもちろん参加しますけどね。

終わりに

書き出してみたらけっこう長時間なイベントなので、この通りに参加したらぶっ倒れてしまいそう……w

ま、でも、面白そうなトークに丸付けできてよかったです。こういう機会でも作らないと真面目にプログラムチェックしないもんな。

繰り返しますけど個人的メモなのですが、面白いなと思ってもらったり、なんかの役に立ったり(ないか……)したら幸いです。では、楽しみましょう!

*1:ホント、ひ弱ですみません

【個人的メモ】openSUSE + LibreOffice Virtual Conferenceで何を見るか(Day2: 10/16)

いよいよ来週10/15~17に迫ってきた:

events.opensuse.org

について、LibreOfficeにもopenSUSEにも直接かかわりあいのない微妙な立場のわたくしがこの話気になるなとかこの話参加したいなということをダラダラとメモる記事、その二日目。

10/15(木) 10/16(金) 10/17(土)

この日と翌日は、土日休みのサラリーマン的には、仕事を気にせず夜更かしできるのでいいですね。

この日の最初、日本時間19時から日本のコミュニティにおけるCOVID-19な状況下におけるチャレンジについての発表があるけど、 まさにその状況下でドロップアウトした自分にはメンタル的につらいのでパス……すると思う。 でもきっと興味深い内容が話されると思うので、興味がある皆さんぜひ参加してほしいな。LibOじゃない人にも参考になるかも。

ではそのあとから。例によって時間はJSTです。

19:30-20:00 [LibOCon] Building LibreOffice Korean Community and CJK's common & different issue

events.opensuse.org

韓国で頑張ってるDaeHyun Sungさんの発表。これも正直、個人的なかかわりが近すぎてしんどい気がするので聞くかどうか悩んでます。きっと面白い内容だとは思うんですけどね。

20:00-20:15 [LibOCon] Working with native/indigenous communities to build native language LibreOffice projects

events.opensuse.org

たぶん去年のLibOConでやった「Making LibreOffice a lifesaver for dying languages in Asia」って発表のアップデートじゃないかと思う。 台湾先住民族の言葉を保護するためにLibOで対応させようって話。技術面だけじゃなくて政治的な問いかけとしても非常におもしろかったので続きであれば聞きたい。

20:15-20:30 [oSC][LibOCon] Building Upstream Contribution in Local FOSS Community

events.opensuse.org

登壇者のKukuh Syafaat氏は知り合いなので……ってのと、少しばくっとした内容だけど、地域コミュニティが活発なインドネシアだからこそ、upstreamへの貢献どうするのって話は興味があります。

20:30-21:00 [LibOCon] OOXML / PDF Digital Signing in Draw and elsewhere

events.opensuse.org

LibOにはデジタル署名の機能があることはもう皆さんご存じかと思いますけど、これをDrawからOOXML/PDFにエクスポートするときにもサポートしたよって話。 わからないなりに実装の話を聞くの好きなんです。

21:15-21:30 [oSC] IT Risk Management Based on ISO 31000 and OWASP Framework using OSINT (Case Study: Election Commission of X City)

events.opensuse.org

セキュリティには明るくないのですがわたくしいちおうセキュリティベンダーの社員ですので……。

22:00-22:30 [LibOCon] « LibreOffice Basic/VBA hidden gems » - Dev/Doc Tracks

events.opensuse.org

失礼な物言いながらすごくこのトピック興味があるってわけじゃないけど、 裏番組も特にないので、なんとなく聞こうかなって。聞けばきっと面白いと感じる部分はあるので。

いや、

events.opensuse.org

こういう「重要で」「意味があり」「議論すべき価値がある」ディスカッションもありますけど、 わたくしこういう議論、もう見てるだけでしんどくて距離を置きたいのです……。よわい。

22:30-23;00 [LibOCon] The history & pre-history of LibreOffice

events.opensuse.org

タイトルまんま。若干きな臭いにおいがしなくもない(?)けど、面白そうです。

23:30-24:30 [LibOCon] Google Summer of Code 2020 Panel

events.opensuse.org

今年のGSoCの成果報告。今年もよい成果がいっぱい出たみたいなので。参考↓

blog.documentfoundation.org

Impressの物理エンジンアニメーションとか実用性はともかくとして面白いですよね。

でも途中で抜けちゃいます。というのは、これ↓があるから。

24:00-24:30 [LibOCon] Implementation Detail

events.opensuse.org

sbergことStephan Bergmann氏のC++仕様ネタ、私好きなの……むしろファンと言ってもいい。

25:00-26:00 [LibOCon] How to debug Writer, forwards and backwards

events.opensuse.org

これは参加しないわけにいかないでしょう……>< 裏番組も面白そうなんですけどね。Public Money, Public Codeの話とか。 でもこっちは動画で追いかけられるので。

26:00-26:15 [LibOCon] The ODF Toolkit

events.opensuse.org

TDF純正ODF操作ライブラリODF Toolkitの現状。へーしゃももう開発止まってるライブラリからこっちに移行したい……。再実装するか(?

26:15-26:30 [LibOCon] Marketing and social media in LibreOffice

events.opensuse.org

マーケティング」は私のやりたいことであったことは過去においてもないけど*1、ま、冷やかしです。

27:00-27:30 [LibOCon] Improvements to PDF support in Collabora Online

events.opensuse.org

LibOはDrawでPDFを読み込んで編集できる機能があるけどこれをOnlineに実装したよってことかな? こんな機能あるの知らんかったので……。

しかしそろそろ起きてるのきついと思われる時間なので、あきらめて落ちる可能性もあります。

27:30-28:00 [LibOCon] The importance of ODF for Digital Sovereignty strategies

events.opensuse.org

Digital Sovereigntyって「デジタル主権」とでも訳すのかな? ここらへんがとっかかりでしょうか。

note.com

EUのホワイトペーパーらしきもの(PDF)651992_EN.pdf)も出てきたけど、さすがにこれを読むのは胃もたれしそう……。 ま、とにかく軽い理解ではベンダーロックインからの解放とかそういう文脈の言葉みたいですね。

時間も遅いけど、興味深くはあるから起きられたら聞いてみましょう。

28:00-28:30 [LibOCon] LibreOffice AppImages: Past, present and future

events.opensuse.org

AppImage便利なんだよねーQAっぽいことをするには。これも起きられたらだな。

29:00-29:30 [oSC] Hat making

events.opensuse.org

Fedoraってどうやって作られてるの? みたいな話。さすがに時間遅すぎるけど興味はあります。

……まだプログラムは続くけど、私が聞くかも?って内容はここまで。もっと手前で脱落する気がするけど……。

では記事は三日目に続きます。

*1:「やらねば」と思っていたことはあり、それは非常によくないことだったと反省しています。「グローバルではマーケティングとしてこういうメッセージを投げかけています」というのを日本語話者の人に紹介したい、というのは「やりたいこと」でしたが、これはマーケティングではないしマーケティングとして考えれば誤りですね。どうでもいいけど。