ラベル LibreOffice の投稿を表示しています。 すべての投稿を表示
ラベル LibreOffice の投稿を表示しています。 すべての投稿を表示

2025年3月30日日曜日

記号的な、アイコン的なフォント

80年代にパソコンで漢字が使えるようになると、漢字に加えてギリシャ文字やキリル文字なども使えるようになった。
文字だけでなく、例えば、郵便マークの「〒」などの記号も色々使えるようになった。
これは日本語文字セットの中に限っての話だったのだが、Unicodeが使われるようになって、世界中で様々な記号が共通して使えるようになった。

記号を効果的に使えば、表現力が上がる。

色々調べた事を文書にして残している。
grepなどで検索しやすくするため、それらの多くはプレーンテキスト(UTF-8だけど)で書いている。
めったに無いのだが、ときどきLibreOffice Writerで清書して、pdfファイルにすることがある。

過去そんな風にして書いた.odt文書をVirtualBox内のUbuntuで編集しようとしたら、丸に小文字の'i'と入った文字が、変なグリフになってしまった。
本来のグリフ。丸に'i'の文字。
変なグリフ。なぜか花束。
端末にコピペして表示しても同じようになる。
すなわち、表のUbuntuでは「丸に'i'」だけど、VirtualBox内では「花束」になる。

調べていくと、この文字は awesomeフォント のグリフで、VirtualBox内のUbuntuではまだinstallしていなかった。
インストールすると、表示できるようになる。
以下のようにして、awesomeフォントをインストールする。
$ sudo apt install fonts-font-awesome
このフォントは海外では開発者用のフォントとして使われるようだ。
プレーンテキストでも使えるので、ソースコード内のコメントでも使えなくもない。
ただしこのawesomeの「丸に'i'」= U+F05A は、Private Use Area なので、誰もが使えるわけではない。
みんなで扱うソースコード内での使用は、少し考えたほうが良いだろう。
('ⓘ' = U+24D8を使うとか)

2022年9月16日金曜日

Ubuntu 22.04

未だにUbuntu 18.04を使い続けている。
とはいえ、だんだん使えなくなっていくので、そろそろ新しいバージョンへの更新を考えている。
22.04も、8月にポイントリリース#1(すなわち、22.04.1)が出たので、VirtualBoxで評価をしている。

10.04の頃からGnome-classicなデスクトップを使っている(時々その他のフレーバも見るけど)ので、22.04といえどもgnome-session-flashbackとnemoをインストールして、昔ながらの使い方を続けている。

先日、LibreOfficeを試している時に、メニューバーの内容が画面上端のパネルに表示されるようになった。
Macを使ったことのある人なら、Macのような感じになったと言ったほうが解りやすいかな?
しかも、時々メニューが消えてしまうため、使い物にならない。

元々は普通に表示されていたはずなのに、なんで?
しばらく、理由がわからず、困っていた。
バージョンアップが行われれば、直るかな?と期待していたが、先日LibreOfficeの更新があったが直らない。

本気で調べ始めた。
パネルに「インジケータアプレット・アプリメニュー」を追加したのが原因だった。

ibusの状態をパネルに表示する方法がいつもわからなくなる。
一度設定したら、数年間変更しないので、忘れてしまうのだ。
「通知領域」アプレットを追加するべきなのだが、22.04ではインジケータアプレットが数種類あるので、「これかな?」みたいに追加したのが失敗だった。
パネルから「インジケータアプレット・アプリメニュー」を削除すれば、アプリ内にメニューバーが現れる。
ちなみに、パネルを操作するポップアップの表示方法が18.04とは違う。
18.04では、[ALT] + 右クリック だが、
22.04では、[ALT] + [Super] + 右クリック になる。

※ [Super]は、Windowsロゴマークの刻印されたキー。
2022/9/16 Superキーの写真を追加。
写真でみると汚いな。老眼が進み、肉眼では見えていなかった。

22.04では、RabbitVCSが動かなかったりするので、移行するには時期尚早と考える。
18.04のサポートが終わるまでにまだ半年あるし、拡張セキュリティメンテナンス (Extended Security Maintenance; ESM)を考えれば、2028年まで使えなくはない(注意が必要)。

何度も更新作業をするのは手間だし、オープンソースとはいえある程度寄付をするので、支出を抑えたい。
22.04に一気に移行したいのだが、やむを得ない場合は、EMSを使うか、20.04を一時的につかうか...。
半年、見ていこう。

2022年7月31日日曜日

縦書き

昨日のこの記事で、縦書きを使った。
私は、手書きを除いて、縦書きをほとんど使わない。
(手紙は手書きで、縦書きが多い)

海外のアプリは、基本的に縦書きに対応していない。
Windows95のころ、MS-Wordでの縦書きがどんなだったか思い出してほしい。
若い人は知らないだろうから、あえて書くと縦書き文字が横になって表示されていた。
そんな感じで、使い難い事が多い。
縦書きだけ見れば、90年代初頭の一太郎の方が良かった。さすが国産。

Ubuntu18.04 の GIMP 2.8.22 ではどうしてもできなかった。
このUbuntu Budgie 20.04の GIMP は 2.10.18 であり、昨日はこれを使って縦書きした。
上記、左側赤◯の「A」のアイコンをクリックして、まずテキストボックスを作る。 そのテキストボックス内で右クリックをして、ポップアップメニューを表示させる。 ポップアップ内から「縦書き・右から左へ(向きの混在)」(左の赤◯)をクリックすると、そのテキストボックスが縦書きになる。
一応縦書きになるのだが、長音がどうしても中心に来ない。
そのため、「ファーファ」だけは横書きにした。

LibreOffice WriterやDrawでも縦書きができる。これらではIPAフォントやTakaoフォントを使うと長音記号も中心に来る。
そのため、GIMPで絵を書いて、Drawで縦書き文字列を入れることもやってみた。
できたが、管理が面倒だし、2行目以降の変換前入力や変換候補が表示されないため、きわめて使いにくく諦めた。

NOTOフォントが縦書きに対応しないかな…。
何かやり方があるのかな?

2022/08/01: 一部加筆修正。言葉がメチャクチャで日本語になっていなかった。
また書きたいことが書けていなかった。
さらに、IPAフォントでは縦書きもきちんと表示されるのに、何か勘違いしていた(多分、間違えて「西洋言語用フォント」の方を切り替えてた?)。
昨日、文書化する時に、再度確認すればよかったのに、暑さのせいか、ボーっとしていて、そのまま書いてしまった。

2022年5月15日日曜日

ダイビングのログ帳用紙

ダイビングをする人なら、ダイビングログを付けているだろう。

PADIのダイブマスタになったとき、ログ帳がもらえた。
しかし、そのログ帳のログ用紙は少ししか付いていなかった。

どっかに売っているわけでもない。
ということで、十数年前にMS-Visioで書いた。

Visioは2003版だったので、その当時でも古かった。
Windowsを最新版にするのも大変だが、MS-OfficeやVisioも更新していると、やたらとお金がかかる。
特にVisioは高かった。
忙しいと自宅にいる時間は少ないので、MS-OfficeやVisioをほとんど使わない。それなのに更新に数万円かかる。
その当時はサブスクも無かったし従量制もなかったので、バカバカしくなってUbuntuへ移行した。

忙しかったので、自宅の整理がないがしろになり、いつの間にやらログ用紙のVisioファイルを紛失した。
しかし、.pdfを人にあげたりしていたので、それは残っていた。

LibreOfficeは、.pdfを読み取ることができる(完璧ではないが)。
Drawで読んでみたら、一応読み取ることができた。
色々調整して、また.pdfを作り直した。
Googleドライブに置いた。両面用ダイビングログ2
両面印刷する時、「A4用紙」「短辺とじ」で印刷する必要がある。

ほぼ完コピなので、3つ穴だし、点線で用紙も切り抜かなければならない。
しかし、日本国内では3つ穴ファイルはほぼ売っていないし、3つ穴を開ける道具は皆無だ。ついでに紙を切り抜くのが面倒だ。
というわけで、最近ではただ2つ折りにして、2つ穴を空け、ダイソーのトレーディングカード帳に挟んで使用している。

そうなると、完コピよりも、2つ穴用に作り直したほうがいいかな…。
ちょいちょい直していこう。

2020年6月4日木曜日

LibreOfficeでHelpが表示されない

テレワークで自宅で仕事をするようになって、おおよそ2ヶ月。
自宅にはWindowsPCが無いので、なんでもLinuxでやっている。 Microsoft Office 365 は使えないので、代わりにLibreOfficeを使っている。

先日、Calc(MS-Excelのようなアプリ)の関数の引数を見ようと思って、F1キーを押したら、エラーになって表示されなかった。
こんな感じ。

一回使い方が定着すると、同じような使い方しかしないし、頻繁につかう関数は覚えていくため、徐々にヘルプを見なくなる。
そのため、全く気が付かなかった。

ネットで解決方法を探してみた。
これを見つけた: Libreoffice Help does not work
6.3までは動いていたが、6.4から動かなくなったらしい。
この記事で、6.4にdist-upgradeできないと追記した頃には、もう表示できなかったようだ。

新しいLibreOfficeでは、ブラウザでHelpを表示するようになるらしい。
今までは専用の表示機能を用意して、使っていたそうだ(私はそれすらも使っていなかった)。
オフィシャルPPAの最新版を使っていれば、自動的に更新されて表示されるそうだ。

私は、この6.4専用PPAを使っていたので、更新が行われなかった。
最新版もいいが、3月末のようにdist-upgradeで面倒なことになるかもしれない。
問題の原因は、main.xcd というファイルにあるらしい。これを最新のものからコピーすれば直るそうだ。
上の記事の#10のコメントに、main.xcd.gzがあるので、それを取ってきて展開し、以下を上書きすればいい。
/usr/lib/libreoffice/share/registry/main.xcd

これで、FireFoxでヘルプが表示されるようになった。

2019年10月4日金曜日

Libreoffice Drawで多角形を曲線にすると保存できない

たとえば、シルク印刷の絵を書いたりアニメーションを作ったりとか、この回路図までも、Libreoffice Drawで書いている。

先日、あるものを作ろうとまた図を書き始めた。
図を少し書いて保存しようとすると、エラーになって保存できない。
どうも、曲線があると保存ができなくなるように見えた。
今日になって、真剣に調べ始めた。

すると、こんなBugがあるではないか。
Bug 119374 - FILESAVE: Cannot save any file with a bezier curve created from a polygon (Linux-only)
(多角形から作られたベジエ曲線を用いたあらゆるファイルが保存できない)。

Linuxだけで生じるらしい。さらに、普通の(多角形からではない)ベジエ曲線が含まれているだけなら、保存できる。
試しにウチでもやってみたら、まさしくそんな感じだった。
また、Libreoffice 6.0系で発生するが、6.1系では発生しないと書かれている。 ウチのやつを見てみたら、6.0系だった。
どうやらこれが原因のようだ。

6.1で治っているなら、6.0系での修正は行われない可能性が高い。
とはいえ、なんとかしたい。Ubuntu 18.04LTEのパッケージ管理を守りつつ、新しいバージョンをInstallする方法を探した。以下を発見した。
How to Install LibreOffice 6.1 in Ubuntu 18.04, 16.04

2つの方法があり、snapを使う方法と、オフィシャルPPAを使う方法が紹介されている。
同ページでは、オフィシャルPPAを使う方法が推薦されているので、私もオフィシャルPPAを使った。

感単に書くと、まず、ターミナルを開いて、PPAを追加するコマンドを実行する。
sudo add-apt-repository ppa:libreoffice/ppa
パスワードを聞かれたら、パスワードを入力する。

PPAを追加したので、パッケージ管理を更新する。
sudo apt update
ウチの場合は、update後、新しいパッケージが24個が出てきたので、upgradeも行い更新をした。
sudo apt upgrade
これで良いのかなとも思ったが、ここではinstallも行っているので、それに従った。
sudo apt install libreoffice
何気に色々installされた。
何かが足りていなかったのかな?
6.1ではなく、6.3が入った。

試してみると、ベジエ曲線を含んでいても保存できるようになった。
しかし、いつから使えなかったんだろう?

2020/03/27 追記: Libreoffice 6.4にdist-upgradeできなかった
aptで更新をチェックしたら、Libreofficeの新しいのがあると表示された。新しいバージョンのようで、dist-upgrade じゃないと保留されてしまう。
新しいやつでも問題は無いだろうとdist-upgradeしたら、依存関係が解決できずににっちもさっちも行かなくなった。
PPAを使っていると、時々こんな事になるもんだ。
解決するためには、問題を起こした新しいパッケージを削除すればいい。そんなことは言われなくてもわかるだろう。
ところが、1つ1つ消そうとしても、依存関係が問題になって、実行できない。
この場合、その依存物をまとめて一気に削除するしかない。ところが、何がどう依存しているのか解りにくい。
"apt-cache rdepends"で調べることもできるが、インストールしていないものも出たりして、それを選り分けるのも面倒だ。
そのため、たとえば、以下のようにして、エラーメッセージ内から依存物エラーになったパッケージを抽出していく。
最初は、こんなふうに適当に消そうとする。
sudo apt remove libreoffice-base
エラーが出たら(出ているのだが)、
sudo apt remove libreoffice-base | grep "^ [^ ]\+ :" | sed -e "s/ : .*$//g" | sed -e 's/^ \+//g' > xxx.txt
のようにして、エラメッセージ内から、パッケージ名を取り出して、xxx.txtに書く。
今度は書いたものを追加して、削除を試みる。
sudo apt remove libreoffice-base $(< xxx.txt)
それでもエラーになるなら、同じようにパッケージ名を取り出して、xxx.txtに書く。今度は追記で書く。
sudo apt remove libreoffice-base $(< xxx.txt) | grep "^ [^ ]\+ :" | sed -e "s/ : .*$//g" | sed -e 's/^ \+//g' >> xxx.txt
これを何回か繰り返せば、強引に削除できる。
ただし、大事なものも消してしまうかもしれないので、消すものをちゃんとチェックしよう。

ウチの場合は、最終的にxxx.txtは、以下のようになった。
libreoffice
libreoffice-avmedia-backend-gstreamer
libreoffice-base-core
libreoffice-base-drivers
libreoffice-calc
libreoffice-common
libreoffice-core
libreoffice-draw
libreoffice-gnome
libreoffice-gtk3
libreoffice-help-common
libreoffice-help-en-gb
libreoffice-help-en-us
libreoffice-help-ja
libreoffice-impress
libreoffice-java-common
libreoffice-l10n-en-gb
libreoffice-l10n-en-za
libreoffice-l10n-ja
libreoffice-math
libreoffice-nlpsolver
libreoffice-ogltrans
libreoffice-pdfimport
libreoffice-report-builder
libreoffice-report-builder-bin
libreoffice-script-provider-bsh
libreoffice-script-provider-js
libreoffice-script-provider-python
libreoffice-sdbc-firebird
libreoffice-sdbc-mysql
libreoffice-sdbc-postgresql
libreoffice-wiki-publisher
libreoffice-writer
python3-uno
ure
(取得後ソートした)

18.04のデフォルトの Libreoffice 6.0 に戻すとまた曲線が保存できなくなる。
6.0は使えない。そして、6.4はinstallできないので、その途中、例えば6.3を使うことにした。
まず、古いPPAを削除する。これは、update-managerの「他のソフトウエア」タブで、"http://ppa.launchpad.net/libreoffice/ppa/ubuntu bionic main"のチェックを外す。
そして、一旦更新する。これで、そのPPAリポジトリは使われなくなる。

実は、この LibreOffice Freshには、最新版のPPA以外に、6.3(しばらく使っていた)のPPAもある。最新版のPPAは自動的に新しいメジャーリリースになるが、6.3用のものはマイナアップデートだけが行われる。
6.3のPPAのページのやや下の方の Adding this PPA to your system にしたがって、このリポジトリを追加すればいい。
追加後、上記で示したように、Libreofficeをインストールしなおせばいい。

なんか、追記のほうが多いな。

2020/04/01 追記: いつの間にかできるようになったみたい
ノートPCと母艦にInstallしてうまくいっていたので、安心して職場のPCにもLibreOffice6.3をinstallしようとしたら、エラーになってインストールできなかった。
職場ではWindows+Office365なので、すぐに使う予定はない。放置して待つことにした。

母艦のVirtualBox内でFocalを動かして見ている。そっちではLibreOffice6.4が普通に入っていた。
そして、Focalでは、やたらと頻繁にLibreofficeが更新されていた。
もしや、BionicのLibreOffice6.4も更新されているのでは?と思って、リポジトリを再度6.4のものに変更してやってみたら、インストールできた。
ただし、どういうわけか、Libreoffice-writerとLibreoffice-style-elementaryがダウンロードできなかった(混み合っているのかな?)ので、wgetで無理やりダウンロードして、 /ver/cache/apt/archives/の下に置いて、ファイル名を以下のように書き換えて、apt-get installしたら、インストールできた。

Libreoffice-writer:
変更前 libreoffice-writer_6.4.2-0ubuntu0.18.04.3_amd64.deb
変更後 libreoffice-writer_1%3a6.4.2-0ubuntu0.18.04.3_amd64.deb

Libreoffice-style-elementary:
変更前 libreoffice-style-elementary_6.4.2-0ubuntu0.18.04.3_all.deb
変更後 libreoffice-style-elementary_1%3a6.4.2-0ubuntu0.18.04.3_all.deb

こんな書き換えをしなくても、このページで説明されている方法を使って、すんなりできた時もあった。
新型コロナウイルスで、テレワークをしている人も多いだろう。自宅ではWindowsではなくてUbuntu+Libreofficeを使っている人も多いだろう。それでダウンロードできないとなると、すごく困ることになる。
そのせいか、ダウンロードがすごく遅い。
待つことができるなら、しばらく待ってダウンロードするのが良いかもしれない。

2019年3月21日木曜日

コードレス掃除機のバッテリを非常用電源に#5 電気回路編

コードレス掃除機のバッテリを非常用電源に
コードレス掃除機のバッテリを非常用電源に#2 やられた編
コードレス掃除機のバッテリを非常用電源に#3 部品編
コードレス掃除機のバッテリを非常用電源に#4 錫メッキ編

回路図も、紙に手書きしていたが、LibreOffice Drawで書きなおした。
機械図面的なものも回路図的なものも、Drawで描けなくはないのだが、すごく大変。
(少し慣れてきているけど。)

(2019/10/6: 少し直した)

DCDCコンバータは、Strawberry LinuxのLT8640 サイレントスイッチャー降圧型DC-DCコンバータモジュールを使っている。
出力電圧幅が小さいが、変換効率がいい。最高で95%ぐらいになる。
こんなものがすぐに入手できるなんて、良い時代になったものだ。

回路図を見ればわかるが、このモジュールは、ピン番号のようなものがない。そのため、上図のように絵で表現するしか無い。
ピンのピッチは2.54なので、普通のピンヘッダが使える。
しかし、変則的な2列なので、2列のピンヘッダからピンを抜いて使う。
1列のピンヘッダもあるが、1列のピンヘッダのメス側は、入手性が悪い。
また、細い丸ピンのものはメスの1列もあるが、ピンが折れやすいので使うべきではない。

というわけで、2列のピンヘッダのピンを抜いて使うのがいい。
おうちに在庫するなら、2列の方が色々使えていい。

iPhoneの充電に使うには、D+とD-を200Ωの抵抗でつなぐ必要があるらしい。
200Ωの抵抗は、ウチには在庫していないので、330Ωと1KΩの抵抗を並列にして、248Ωにした。
少し大きい。後から抵抗を下げるほうが、上げるよりも楽なので少し高めにしている。
もし抵抗が大きすぎるなら、別の抵抗をさらに並列にする。
また、EXPERIAでは必要ないので、スイッチで切れるようにしている。

EN/UVにつながっている一連の抵抗は、過放電を抑止するためのものだ。
このピンが1.0Vを下回ると、このDCDCは止まり、バッテリの放電も止まる(抵抗を通してわずかに流れるだろうけど…)。
また、このピンはモジュール内で100KΩの抵抗で、一次側の電源につながっている。
放電終始電圧を17Vにしたいので、この一連の抵抗は、6.25KΩになる。
ウチにはそんな中途半端な抵抗はないので、4.7KΩと1.5KΩの抵抗を使って、6.2KΩを作る。
さらに調整できるように1KΩの可変抵抗もつけた。
これら抵抗を6.25KΩに正確に調整するだけで良いわけではない。
モジュール内の100KΩ抵抗の値やEN/UVのしきい値にはばらつきがある。1Vに対して17Vなので、ばらつきも17倍になる。
そのため、全体を通して調整が必要だ。

17Vの電源があれば良いが、無ければ、掃除機で使った放電直後のバッテリがちょうど放電終始電圧になっているので、それを使う。
ジャンパーピンをセットすると、出力に連動してLEDが光るので、それがギリギリ消えるように、可変抵抗を回して調整する。
このLEDはパイロットランプとしても使える。
ただし、非常時はわずかな電力でももったいないと感じるかもしれないので、ジャンパで切り替えられるようにした。

ウチにあった部品を積極的に使ったのであちこち妙な事になっているが、趣味の電子工作なんてこんなものだろう。
EN/UVとGNDの間にコンデンサを入れようと思っている。

もし、あなたがこの記事をみて同じようなものを作る時は、あなたの事情に合わせて部品を調整するべきだ。

2019/10/6: 3つのVOUTのうち、1つだけ接続されている図になっていた。
3つ接続されている図に入れ替えた。
ブログを書いた直後に間違いに気づいていたが、直すにはそこそこ手間がかかるし(Drawで書いてgifにエクスポートして、Gimpで切りなおす)、直さなくてもわかるだろと思って、放置していた。
最近になって、この記事のアクセスが増えてきたので、差し替えた。

2019年3月16日土曜日

コードレス掃除機のバッテリを非常用電源に#3 部品編

コードレス掃除機のバッテリを非常用電源に
コードレス掃除機のバッテリを非常用電源に#2 やられた編
コードレス掃除機のバッテリを非常用電源に#4 錫メッキ編
コードレス掃除機のバッテリを非常用電源に#5 電気回路編
SHARPコードレス掃除機のバッテリBY-5SBを、非常用電源(スマホの外部バッテリ)として使うための装置の寸法の図を昨日描いたが、ファイルがクラッシュしてしまった

今日、めげずに寸法の図を描き直した(半分ぐらいはBackupがあった)。
作業が楽になるように考えて形を決めたが、何箇所かはビシッと決めないといけない。
特にレール部品の接着面は重要である。これがしっかりと固定されないと、バッテリがずれることになり、コネクタ部分を壊す原因になる。
自分で作ったものが壊れるのも悲しいが、バッテリBY-5SBは¥7,000以上するので、壊れてしまうのは経済的に痛い。

しかしながら、全てを丁寧にやろうとすると、何度もやり直しが必要になり、作業が終わらなくなる。
必要な部分のみ集中するのがいい。

絵を書くのは比較的簡単だが、実際に物を作るとなるとそれなりに大変だ。
たとえ加工性の良いMDFボードだとしても、高精度に作ろうとすると手間や時間がかかる。
だから、図をもう一回描くぐらい大した苦労ではない。これで、めげていてはものは作れない。

「コツコツと続ければいつかは終わる」と思って、作業を継続するのが完成への近道だ。
何かを作るのに必要な能力は、「根性」だ。

2019年3月15日金曜日

コードレス掃除機のバッテリを非常用電源に#2 やられた編

コードレス掃除機のバッテリを非常用電源に
コードレス掃除機のバッテリを非常用電源に#3 部品編
コードレス掃除機のバッテリを非常用電源に#4 錫メッキ編
コードレス掃除機のバッテリを非常用電源に#5 電気回路編
前回の記事のSHARPコードレス掃除機用バッテリをスマホ充電に使えるようにする装置の機械的な寸法をまとめた。

紙のノート上にまとめていたのだが、Libreoffice Drawで書きなおした。
LibreOfficeがない人も参照できるように、GIF化した。
LibreOffice Drawで書いて、PDF化もしたんだけど、よりによって元データの.odgファイルがおかしくなり、最終的なファイルが消えてしまった。
画像データの白い部分が透明になっていて、修正したいのだが、元データが無いので修正できない。 まったくもう!

2017年10月22日日曜日

LibreOffice Draw でアニメーション作製#5

LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4

以前、LibreOffice Draw でアニメーション作製#2で、ダイアログで値を指定できるように、などと書いておいてほったらかしだった。
台風21号の接近で外は大雨なので、それをやることにした。
(ちなみに昨日は西伊豆の井田でダイビングをしていた)
まず、Drawでダイアログを作るには、[ツール(T)]→[マクロ(M)]→[ダイアログの管理(D)...]をクリックして、「LibreOffice Basicマクロの管理」ダイアログを開き、「新規作成」ボタンをクリックする。
「新しいダイアログ」ダイアログが表示されるので、適当に名前をつけて、[OK]ボタンを押す。
とりあえず、"PageSizeDialogDef"という名前にした。

そうすると、ダイアログエディタが現れる。
このへんのダイアログの説明を読んでから、適当に部品を配置して、適当に設定して...

こんな感じにする。
そしてハンドラを終了時に入力データを読みだしたり、幅の値の書き換えハンドラで高さの値を更新するようにしたりする。
なんという手抜きな説明だろう!
そんなんじゃ、全然わからないよ!!って、なるだろう。

というわけで、LibreOffice Basicのソースと、ダイアログのエクスポートファイルをダウンロードできるようにしておく。
Basicのソース: SavePagesAsBMP.bas
ダイアログのエクスポート: PageSizeDialogDef.xdl

実は、どうやればソースコード等を取り出せるのか、全然知らなかった。
作るだけなら、全く不要な操作だからだ。
しかし、1台のPCだけなら取り出し方なんか要らないが、デスクトップPCとノートPCを使っていると、もう一方のPCでも同じ機能を使いたくなるし、Backupする必要もある。
というわけで、Uploadした。
まだまだ手抜きだけど。

2017年10月20日金曜日

LibreOffice Draw でアニメーション作製 #4

LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4
LibreOffice Draw でアニメーション作製#5
今日も雨だ。
またもや、How to fold IKEA poncho. IKEAレインポンチョのたたみ方。で作ったアニメーションのコマを増やしてみた。

前回、コマ数を増やしてもわかりやすさはあまり変わらない。ストップモーションのほうがわかりやすいと書いた。
よく考えてみたら、アニメーションは動くばかりではなく、止めることもできる。
途中にタメを作るようにすれば、ストップモーションのようにすることができ、わかりやすさを損なわない。

途中のコマを書き足したり、途中にタメを入れたりして、アニメーション直した。
遊びで、最後の折り目が勢いよく反転する感じも入れてみた。
コミカルな動きになった。

今になれば簡単なことだが、滞りなくなめらかに動かすことばかり考えていて、止めることを考えてなかった。
何事も経験だな。

2017年10月7日土曜日

LibreOffice Draw でアニメーション作製 #3

LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4
LibreOffice Draw でアニメーション作製#5

ソースコードを見ていたら、直接GIFアニメーションをエクスポートするコードもあるようだ。
でも呼び出し方がわからないし、Drawではないのかもしれない。
無駄骨だったかもしれないが、いつものことだ。いろいろ勉強になったし、目的は達成できたのだから、良かった事にしよう。

それはさておき、せっかくLibreOfficeのマクロを書いたし、今日は雨で外に出れないので、 How to fold IKEA poncho. IKEAレインポンチョのたたみ方。で作ったアニメーションのコマを増やしてみた。
(雨ならば、ポンチョを着て外出しろって?)

以下がその結果。


コマ数はおよそ2倍になっている。
コマ数を増やしても、あまりわかりやすさは変わらない感じがする。
むしろストップモーション的な方が、1コマずつしっかりと見ることができて、解りやすい。

動画は動画でわかりやすいが、隠れて見えない部分もあるし、理解の前にどんどん進んでしまうという欠点もある。
絵は、見えない部分を表現することもできるが、動きがわかりにくい。
アニメーションは、その中間だ。

中間的な存在が、良いとこ取りになればいいが、悪いとこ取りになってしまうこともある。
コマ数を増やしたのは、悪いとこ取りになってしまったかもしれない。

最初の選択が、意外に良かったようだ。「この形だけは表現しないといけない」と思う絵を描いて、その途中を無理なくつなぐような必要最低限の絵だけを挿入していた。
過剰な情報は、混乱の元になる。技術的にコマ数が増やせるとしても、良いことかどうかは別だ。
技術に踊らされてはいけない。

2017年10月6日金曜日

LibreOffice Draw でアニメーション作製 #2

先週のLibreOffice Draw でアニメーション作製のつづき。
手動で.bmpにExportする場合、解像度を指定できる。
しかし、先週作ったマクロでは解像度を指定できず、デフォルト値の37ピクセル/cm(と表示されているが、正確には96dpi)で出力されることになる。
これを変更したい。しかし、ネット上で探すと情報がまとまっておらず、錯綜しており、混乱の極みだった。

まず、storeToURL()メソッドに渡すcom.sun.star.beans.PropertyValue型の.Name = "FilterData"でフィルタ固有の設定の入った配列を渡す。この配列もまたcom.sun.star.beans.PropertyValueで、いわば入れ子構造になっている。

ここまでは、先週の段階で解っていたところだ。
"FilterData"について、真剣に調べるとはまりそうな気がしたので、先週の段階では無視した。また、最初の1歩目は、あまり凝らずにさっさと閉じて、まず形にするのが私のやり方だ。

というわけで、今週の通勤時に、スマホで検索して調べた。
やっと見つけた記事が、OpenOffice-Basic GraphicExportFilter documentation?
まさにこれだと思ったが、コードの断片であり、説明はやはり無い。
下の方のリンクの文書を読んでみたが、"FilterData"の説明は書かれていない。
数日間、通勤時間の朝夕ほとんどをつぎ込んでも、結局"FilterData"について、まとめられた文書はどこにも見当たらなかった(自分の検索の方法が悪いのかもしれないが...)。

しょうが無いので、ソースコードを読んでみることにした。
https://github.com/LibreOfficeで、スマホでもソースコードを参照できる。
現在利用しているLibreOfficeのバージョンは5.1なので、そのGraphicFilterのソースコードを見てみる。
"FilterData"設定で見ているのは、PixelWidthとPixelHeightだけだ。
派生クラスなどでは他の値も使っているかもしれないが、基本的にはこれだけのようだ。
これらの値が、aRenderer.renderToGraphic()に渡されることになる。

サイズの指定がこれだけだとすれば、ドキュメントの縦横幅をピクセル数で指定しているだけと想像できる。
すなわち、dpiやpixel/cmのような物理量と関係する値ではない。そのページを縦横何ピクセルで画像にするかというだけだ。

試しに、先週のコードを以下のように改造して、実行してみた。
sub SavePagesAsBMP
    dim doc  as Object
    dim controller as Object
    dim pages  as Object
    dim prevCurrentPage as Object
    dim args(2) as new com.sun.star.beans.PropertyValue
    dim filterData (2) As New com.sun.star.beans.PropertyValue

    dim dirDialog as Object
    dim ucb as Object
    dim directory as String

    GlobalScope.BasicLibraries.LoadLibrary("Tools")
    doc = ThisComponent

    'MsgBox doc.DBG_properties
    'MsgBox doc.DBG_Methods
    'MsgBox doc.drawPages.DBG_properties
    'MsgBox doc.drawPages.DBG_Methods

    '------------------------------------------------------------
    ' Select directory by Directory Selection dialog
    '------------------------------------------------------------
    dirDialog = CreateUnoService( "com.sun.star.ui.dialogs.FolderPicker" )
    ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess")

    directory = DirectoryNameoutofPath(doc.getURL(),"/")
    if ucb.Exists( directory ) then
        dirDialog.SetDisplayDirectory( directory )
    end if

    if dirDialog.Execute() <> 1 then
        exit sub
    end if

    directory = dirDialog.getDirectory
 
    '--------------------------------
    ' Save each page as .BMP
    '--------------------------------
    controller = doc.CurrentController
    pages = doc.drawPages

    args(0).Name = "FilterName"
    args(0).Value = "draw_bmp_Export"
    args(1).Name = "FilterData"
        filterData(0).Name =  "PixelWidth"
        filterData(0).Value = 900
        filterData(1).Name = "PixelHeight"
        filterData(1).Value = 800
    args(1).Value = filterData

    prevCurrentPage = controller.getCurrentPage ' preserve current page

    For i=0 to pages.Count -1
        controller.setCurrentPage( pages(i) )
        'url = directory + "/" + controller.getCurrentPage.Name +".bmp"
        url = directory + "/" + right( "0000000" + i, 8) +".bmp" 
        'MsgBox url
        doc.storeToURL( url, args )
    Next i

    controller.setCurrentPage( prevCurrentPage ) ' restore current page

end sub
ちゃんと、900x800で画像が保存できた。

一応動いたとはいえ、もう少しソースコードを追いかけてみたほうがよさそうだ。
また、独自のダイアログを作ることもできそうなので、次はそれを使って値を指定するようにしてみよう。

LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4
LibreOffice Draw でアニメーション作製#5
2017/10/20 リンクが間違っていた。張り直した。

2017年9月29日金曜日

LibreOffice Draw でアニメーション作製

先週、っていうか、先々週かな? How to fold IKEA poncho. IKEAポンチョのたたみ方。 で、アニメーションを作った。
このアニメーションは、Linux(Lubuntu)上でLibreOffice Draw(以下 Draw と省略)を使って書いた絵を .bmp で保存して、それら画像ファイルをimagemagicのconvertコマンドでGIFアニメーションに変換した。
簡単に入手できるツールで、さくっと作れた。良い時代になったものだ。

Draw上で、1ページ、1コマとして絵を書いた。
最初に描いた絵をページごとコピーして、それを少し変更して…の繰り返しでそれぞれの絵を用意する。
何枚もの絵を用意するが、それぞれほんの少しの変更なので、意外と簡単に描けた。
20日の帰宅後に書き始めて、2時間ぐらい。品質にこだわらなければその程度だ。
自由曲線の制御点をちょいちょい動かしたり、曲率を変えたりの作業なので、あまり手間がかからない。
慣れればもっと速くなるだろう。

しかし、面倒なこともあった。
.bmpに限らず、画像形式でのエクスポートは、1ページ単位で行うことになる。
ページを選択して、メニューから、「ファイル」->「エクスポート」を選んで、エクスポートダイアログ上で、「BMP - Windows bitmap(.bmp)」を選んで、適切なファイル名(連番の数字)を指定して、「OK」をクリックする。BMPオプションダイアログが表示されるので、そこでまた「OK」ボタンを押す。

コマ数が10コマ程度なので、すべて手動で1ページずつ行ったが、私は超おっちょこちょい男なので、何度も失敗し、イライラした。

イライラしたら、精神衛生上良くない。
マクロを組もうかなとも思ったが、その時はやらなかった。

しかし、プログラマなのだから、やっぱり組もうと、今週になって決断した。
昨日の夜から調べ始め、今日の朝から実装作業を始めた。
Excelでのマクロや、VBでの開発の経験はあるが、Libreofficeでの開発は初めてだ。
Drawはマクロ記録機能もないし、実装方法は大きく分けて3種類あるらしい。無駄にややこしい。調べれば調べるほどわからないことが出てきて、深みにハマる。
とはいえ、午前中になんとか動くものができた。
sub SavePagesAsBMP
    dim doc  as Object

    dim dirDialog as Object
    dim ucb as Object
    dim directory as String

    dim controller as Object
    dim pages      as Object
    dim prevCurrentPage as Object
    dim args(1) as new com.sun.star.beans.PropertyValue

    GlobalScope.BasicLibraries.LoadLibrary("Tools")
    doc = ThisComponent

    '---------------------------'
    '     Select directory      '
    '---------------------------'
    dirDialog = CreateUnoService( "com.sun.star.ui.dialogs.FolderPicker" )
    ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess")

    directory = DirectoryNameoutofPath(doc.getURL(),"/")
    if ucb.Exists( directory ) then
        dirDialog.SetDisplayDirectory( directory )
    end if

    if dirDialog.Execute() <> 1 then
        exit sub
    end if

    directory = dirDialog.getDirectory
 
    '---------------------------'
    '  Save each page as .BMP   '
    '---------------------------'
    controller = doc.CurrentController
    pages = doc.drawPages

    args(0).Name = "FilterName"
    args(0).Value = "draw_bmp_Export"

    prevCurrentPage = controller.getCurrentPage  ' preserve current page

    for i=0 to pages.Count -1
        controller.setCurrentPage( pages(i) )
        'url = directory + "/" + controller.getCurrentPage.Name +".bmp"
        url = directory + "/" + right( "0000000" + i, 8) +".bmp" 
        'MsgBox url
        doc.storeToURL( url, args )
    next i

    controller.setCurrentPage( prevCurrentPage ) ' restore current page

end sub
初めて書いたLibreOffice BASIC なので、いろいろおかしいところもあるだろう。
Draw上で、このマクロを実行すると、保存ディレクトリを選択するために、ディレクトリ選択ダイアログが表示される。
ディレクトリを選択すると、そのディレクトリ内へ、各ページが "8桁の数字.bmp" で保存される。

後はshell上で、convertコマンドを使って、アニメーションにする。
convert -delay 50 animation/* animation.gif
上記は、サブディレクトリ"animation/"に、一連の.bmp が保存されていることを期待している。
出来上がったアニメーションは、ファイル名"animation.gif"で保存される。
1コマ0.5秒のアニメーションができる。

これで、コマの多いアニメーションでもイライラしないで作ることができる。
とはいえ、そうそうアニメーションを描くことはないだろう。
おそらく、次に使うときには、何もかも忘れて、イライラしているに違いない。
そして、終わった後で再発見し、「なんという、おっちょこちょい男だろう!」と思うことだろう。

LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4
LibreOffice Draw でアニメーション作製#5
2017/10/20 リンクが間違っていた。張り直した。