2016年12月26日

touchpad-indicatorの追加

新しいDellのVostro 14にしてから、タッチパッドの動作がどうもエラー含みになる。たぶんタイピング中に無効にする設定にチェックを入れていないからだろうなと思ってシステム設定の「マウスとタッチパッド」から設定してやろうとしたがどういうわけか以前にはあったはずのその設定項目がない。全体的にすっきりまとまっているのはいいのだけれど、細かい設定がなくなるのはやっぱり不便だ。
タッチパッドの設定は、端末からsynclientとコマンドを打てば表記される。GUIの設定は結局はこの設定ファイルをいじっているだけなのだが、どこをどう変えればどういう結果になるのか、直観的によくわからない。そこでGUIで設定できるものがないかと探してみたら、PPAからtouchpad-indicatorを導入すれば設定できることがわかった。リポジトリを追加してもいいのだけれど、debファイルがあったのでこれを追加。メニューバーのインディケーター部分に表示されるアイコンをクリック引き下げで設定に入れるので、そこから設定をやり直した。
結果、いまのところ、まずまず快調かな。
posted by 松本 at 23:05| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2016年05月15日

久々にXfceを使ってみた

16.04 Xenial Xerusにアップグレードしてから非常に快調に使っているのだけれど、ちょっと初期のバグらしいものに遭遇している。ひとつは無線LANのデバイスの認識がちょっとおかしくなっているらしいこと。起動したときはいいのだけれど、スリープして復帰するとなぜか有線で接続されている表示になっている。もちろんこれは表示だけのことで実際にはWifiに接続しているから実用上の問題はないのだけれど、接続を別のWifiに切り替えようと思っても操作ができないし、何らかの理由で接続が切れてしまったときに再接続ができない。これは少し不便だ。
そしてもうひとつ、やっぱりスリープ絡みのことなのだけれど、ごく稀に、スリープから復帰したときにデスクトップの文字が消える。全部消えるのではなく、歯抜けのように消える。ときには全部消えてしまう。おそらくフォントが読み込めていないのだが、その理由がわからない。一旦ログアウトして再ログインすれば元に戻るし、表示されないフォントがあっても操作ができないわけではないのでかまわないといえばかまわないのだけれど、やっぱり不便だ。

どうもこれはCompizのバグではないかという気がする。そういえば、以前にもごく稀に起こったワークスペースを混同してしまうエラーが、アップグレード後には以前よりも起こりやすくなっている。どうも新しいCompizにバグがあるのではないかという気がする。
だとしたら、Compizを使わないデスクトップ環境にすればいい。軽快なのはLXDEだとわかっているが、LXDEはきっちりとカスタマイズしてはじめて実力を発揮する。安直に使うならXfceでしょうと、Xfce4を導入した。
久しぶりだが、ほとんど見た目は変わっていない。ということは開発も止まっているのかもしれないが、巷でWindowsは7がいちばん使いやすいと言われているのと同じで、UIとしてはこれで十分なのだろう。パネルの設定を工夫すれば、Unityとあまり変わらない運用ができる。

環境を変更してとまどったのは、インプットメソッドのMozcが無効になってしまっていたこと。これは、ibus-settingを起動して改めて設定してやる必要があった。日常的に使うアプリのランチャーへの登録は手動でやらなければならないが、まあそのぐらいはご愛嬌。マウス(タッチパッド)、キーボードの設定などを自分好みにカスタマイズして、ほぼこれでOKかなというところまで、数十分の設定だった。

UnityでCompizを切る方法もあるのだろうが、Xfceで十分かなという気もする。何もアプリを使っていないときのメモリ占有量が半分くらいになったし、ワークスペースの移動も視覚効果がないぶん、素早くできる。しばらくこれでやってみようと思う。
posted by 松本 at 12:27| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2016年05月05日

Utauを入れてみた

随分と懐かしい声で電話がかかってきた。昔のバンド仲間のボーカルで、歌詞を書いたから曲をつけてほしいという。こっちはこっちでときどきメロディーが浮かんでは消えていくのがもったいないと思っていたから、二つ返事で引き受けた。すぐに曲はできた。
とはいえ、私は楽譜は書けない。はるか昔にはカセットデッキでデモテープを録音してバンドに持ち込んだものだ。早速デモテープと思ったが、もちろんこの時代にはMP3みたいなファイルになる。それはそれでいいとして、さて、録音してみるとどうもイメージが伝わってこない。やっぱりここのところには女声バックコーラスがほしいよなあとか、贅沢なことを思う。初音ミクでもあればボカロでコーラスなんてのもありだろう。難しいフレーズでもないから、適当なものがUbuntuでないだろうかと思った。

DTMは以前にいろいろ試している。楽器としてボーカル音声だけ入ればいい。そう思って探すと、「AquesTone2 - 歌唱合成VSTi」というのが出てきた。VSTというのはDTMのシーケンサーに組み込むプラグインの仕様らしく、多くのシーケンサーで使える。Ubuntuで動く音楽シーケンサーといえばいちばんお手軽で確実なのがLMMSだ。調べてみると、LMMSでかなりのVSTプラグインが動作するらしい。
そこでLMMSをリポジトリからインストールしてやったが、なぜかマニュアル通りにVSTプラグインが導入できない。あるはずのVeSTigeがない。それがなければ、AquesTone2のようなVSTプラグインを組み込めないわけだ。
さらにいろいろ調べていると、FeSTigeというアプリを使えばVSTプラグインが使えるらしいということがわかった。さらに後でわかったことを総合すると、これはどうやらVSTプラグインを単独で起動するためのフロントエンドらしい。そして、それを導入するためにはkxstudioのリポジトリを導入する必要がある。これはSynpaticのリポジトリの追加からできる。
さて、リポジトリを追加してFeSTigeを導入すると、すばらしい! AquesTone2が立ち上がる。だが、これだけでは使えない。シーケンサーがなければ使えないわけだ。それならと再びLMMSをインストールしてみると、なんと今度はVeSTigeが組み込まれている。つまりは、Ubuntu公式リポジトリのLMMSからは何らかの理由でVeSTigeが外されているが、kxstudioのリポジトリのものはVeSTigeをもっている。これなら話が早いと、そこからAquesTone2を起動しようとするが、なぜかこれが起動しない。
FeSTigeなら起動するのだから、どうにかならないはずはない、と思うのだが、よくわからない。もっと本格的にkxstudioを導入すればたぶんOKなのだろう。中途半端にLMMSだけというのがいけないのかもしれない。だが、やっぱりよくわからない。
それならと、WineでWindows版のLMMSを導入してみる。本末転倒な気もするが、こちらのバージョンにはちゃんとVeSTigeも組み込まれている。そして、AquesTone2も起動する。起動するのだが、どういうわけかGUIが消える。Windowは表示され、そのGUIパーツがあるべき位置をクリックすると一時的にそこだけが表示されてちゃんと動くのだけれど、すぐに消えてしまう。消えてしまうから、細かい調整ができないし、操作は「たぶんこのあたりにボタンがあるはず」みたいないい加減なものになるから、とてもやっていられない。音だけはちゃんと出るので、使えなくはないのだろうが、やっぱりダメだ。

とまあ、LMMS+AquesTone2は断念したのだが、もうちょっと調べるとWindows版のUTAUというボーカル用のシーケンサーがUbuntuでWine経由で動くらしいということがわかった(インストール関連はこのあたりの記事)。なあんだ、そういうことかと導入してみたら、簡単にインストールできる。ところが、なぜか音が鳴らない。理由はわからない。Wavファイルを作成しても、無音のものしかできない。
あちこち見ても特にそういう不具合の報告もないので私の環境の問題かもしれない。とはいえ、どうしたらいいかわからない。Wineの不調にはPlayonLinuxという手段があるので、そっちからインストールしようとしたら、なにかバグがあってインストールできない。
さて困ったと思ったが、さらに調べるとPlayonLinux経由で確かにインストールはできるらしい。じゃあなぜダメなのかといえば、おそらくそれは日本語環境だろうと見当をつけた。そこでシステムをいったん英語環境に変更し、PlayonLinuxから登録されているアプリを検索したら、すぐにUTAUが出てきた。ここでインストールされるバージョンは4.16だ。ダウンロードからPlayonLinuxにお任せで進めたら、インストールはあっさりと完了。日本語環境に戻って起動してやると、おめでとう! 無事に音が出ました。

なにがどう問題だったのかよくわからないが、ともかくも、これで女声コーラスをつける道具だけは整った。ただ、せっかくここまで来たけれど、「もういいや」という気になってきた。思うようなコーラスにするには、ここからまだまだ微調整が必要なようだ。ボーカロイドの世界も簡単ではないな。
posted by 松本 at 15:09| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2015年11月07日

Vivaldiを使ってみている

以前どこかでVivaldiというブラウザがあると聞いたような気がしていたが、先日、そのベータ版がダウンロードできるという話を聞いた。そこで早速ダウンロードして使っている。常用しているChromeが(たぶんキャッシュが溜まったとかそういうつまらない理由で)動きがもたつくようになってきていたこともあって、「どうなんだろう」と思ったわけだ。
ただ、使用感は正直なところ、よくわからない。最近のブラウザはどれも同じような機能で同じような使い勝手なので、「ふつうに使えるな」以上のことを感じないわけだ。ただ、いまのところ、もたつき感はない。だからもうしばらく使ってみようと思う。その中で何か感想があったら新たに書くことにして。
posted by 松本 at 20:08| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2015年11月06日

AmazonのKDPで電子出版

もともとの出自が編集屋ということで、私は電子出版についてはかなり早い時期から関心をもってきた。Ubuntuを使い始めた頃には海外サイトを利用してPDF形式の電子書籍を作成したこともあったし、電子出版黎明期にはePub形式の電子書籍を無料配信サイトに何冊かアップした。あの頃はまだePubが縦書きに正式対応していなかった。その後、Amazonに電子書籍をアップロードできるようになり、自分でも実験しつつ、電子出版をメインで扱うブログまで開設していた。
ただ、このブログ、いくつかの要因で役立たずになってしまったので、既に閉鎖している。役立たずになった要因の第一は他のことが忙しくなって電子出版方面の情報に疎くなってしまったことなのだが、やはり電子出版の雄となってしまったAmazonの流れに乗り遅れてしまったことが大きかったなと思う。これは、笑い話でしかない。
どういう事情かというと、Amazonの電子出版システムは、日本に先行して本国のアメリカで始まった。だから、いち早くそれを試したかった私は、Amazon.comのアカウントでいろいろ実験をしていた。そのうちに日本でもサービスが始まったのだが、Amazonは世界共通だと思い込んでいた私は相変わらず米国のアカウントを使い続けていた。その結果として、日本語の電子書籍が発行できず、時代に取り残されてしまったわけだ。Amazon.co.jpのサイトならとうのむかしにサービスが始まっていると気がついたときには、いまさら私が情報を発信しなくても世間に有用な情報があふれていた。つまりは、取り残されてしまったわけだ。ああ、恥ずかしい。

ともかくも、そんな流れだからいまさらここで何を書くこともないのだけれど、久しぶりに電子書籍をいじってみてけっこう忘れていることとか新たに知ったこともあるので、備忘のために記事をアップしておこう。

とはいえ、基本的には以前にやっていた方法、Writer2ePubというプラグインをLibreOfficeに導入し、ポチッとボタンを押すだけではある。そこに至るまでのアップダウンが多少あったので、そのあたりを。

まず、AmazonのKDPは、ワープロの.doc形式の原稿を受け付けてくれる。だからワープロ打ちした原稿をそのままアップロードしてそれで終わり、とすることも可能だ。実際、最初のエディションはそうやった。KDP内の書籍詳細情報のところで縦書きも指定できるから、これだけで縦書きの電子書籍が、けっこう読みやすい形で出来上がった。

ところが、この電子書籍、目次が欠落している。目次を追加する方法もあるのかもしれないが、どうにもよくわからない。そこで目次をあらかじめ設定できるePub形式をローカルで作成し、それをあらためてアップロードしてやろうと思った。そのためにはLibreOfficeにプラグインだ。
早速探すと、eLAIXというのが見つかった。これで簡単にePubができるから、それをアップロード。ところがこれだと、縦書きの指定でも横書きになってしまう。おまけに目次も完全ではない。そこで、ePubファイルを開いて目次を手動で訂正し、さらにePubそのものを縦書きにするためstylesheeをいじって縦書きにする。これでFireFoxで確認すると、ちゃんと縦書きに表示される(ちなみに以前に入れておいたePubReaderで読めたようだ)。これでよしとアップロードするが、なぜかKDPでは横書きのまま。

ちょっと悩んで、むかし使ったWriter2ePubの方を使ったら、こっちはうまく目次も書き出せた。Stylesheetを調整してからアップロードして完成。たいしたことでもないのに、久しぶりにやるとうまくいかないものだ。




posted by 松本 at 13:25| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2015年05月14日

BitnamiでModxを使ってみた

以前、BitNamiで手軽にModxインストールという記事で、ローカルでLAMP環境を簡単に構成できるBitnamiでModxをインストールする方法を書いた。その後、Web関係の作業をすることがなかったので(サイトの作成はWeeblyのようなお手軽サイトでやってしまっていたので)、この方面は放置していたのだけれど、少し事情があって再びModxを触る必要が出てきた。こういうときにはやっぱりローカルにインストールできるBitnamiが便利なので、久しぶりにBitnamiのサイトに行ってみたら、あれこれ工夫しなくても、Modxのパッケージがダウンロードできる。これはもうお手軽もいいところで、ダウンロードしてインストーラーを走らせればそれだけでModxがローカルにインストールできてしまう。
ということで、記事を書くようなことは何もないのだけれど、実際にはいくらかやらねばならないことがあったので、その備忘に。

まず、パッケージでインストールされるModxは、Revolution系列だということ。ModxにはEvolutionとRevolutionの2つの系列がある。で、私が使いたかったのはEvolutionなので、こちらをインストールしなおさなければならなかったというのがまず一点。そのインストールは、以前の記事でWordpressのhtdocsにModxのファイルを解凍して実行したのと同じように、ただ今回は~/apps/Modx/htdocs/にルートがあるということだけがちがう。これはこれで問題ない。
ところが、そのModxで作業をしていたら、どうもリンクがうまく通らない。相対パスが本来のルート(//~:8080/)を基準にしているのに、この~/apps/Modx/htdocs/という場所は、そこからひとつ下の//~:8080/Modx/を基準にしている。だから、同一サイト内のリンク先にパスが通らなくなってしまう。これでは、ローカルで検証したデータをそのままWebサーバーにアップロードするという作業手順がうまくいかない。
そこで、//~:8080/のルートがどこにあるのかと調べてみたら、~/apache2/htdocs/がそこだということがわかった。そこでこのhtdocsにModxのパッケージを展開してインストールしようとしたがうまくいかない。いろいろ試行錯誤してみたら、結局は~/apps/Modx/htdocs/と~/apache2/htdocs/ではアクセス権限の設定が異なることがわかった。公開サーバーであればこんなところはいじるべきではないのだろうけれど、ここはローカルの非公開の場だから、まあいいかとアクセス権限を変更。あとは簡単にインストールできた。

Modxを使う作業はすぐに終わったので、今後また当分、使う必要はないだろう。けれど、何年後かに必要になれば、また同じように簡単に設定できるはず。こういうのは非常に助かる。
posted by 松本 at 19:59| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2014年08月16日

Kdenliveで字幕入れ

短い動画の翻訳の案件があった。英語の音声を拾い、それを翻訳し、日本語の字幕をつける。通常、こういうのはけっこう大仕事だ。以前に扱った案件では、

  動画音声からの文字起こし → タイムラインの作成 → 英和翻訳 → 翻訳校閲
    → タイムラインへの割付 → 割りつけた日本語の文字数調整 → 文字校正
    → 字幕挿入とレンダリング → 最終校正

というような流れで進んだと記憶している。とにかく手がかかる。

で、こういう流れに沿って進めていくためのツールは、ひととおりUbuntuのリポジトリに揃っている。たとえば音声の聞き取りにはVLCが便利だ。というのも、これは再生速度を任意に設定できるからで、聞き取りにくい早口もこれでほぼ漏れなく聞き取ることができる。そして、字幕挿入には、Subtitle Editorというツールがある(この他にもいろいろある)。これは、テキストファイルをそのままインポートして開始時間、終了時間を動画を見ながら設定していくことができる。そうやって字幕を挿入したら、そのまま動画に書き出すこともできるようだし、.assとか.ssaとかいった字幕用のファイルに書き出すことができる。字幕用ファイルは、たとえばArista Transcoderというようなツールを使えば、簡単に動画に挿入することができる。

とまあ、ツールは揃っているわけだが(揃っていることは確認したが)、結局、これらは使わなかった。なぜなら、動画がごく短いもので、予算も限られていたため、上記のような本格的な正しい流れの作業をする必要も、またその余裕もなかったからだ。

安直に字幕をつけるのなら、定番の動画編集ソフトkdenliveが便利だ。まず大まかな翻訳までを済ませておいた上で、kdenliveを起動する。元の動画をクリップに読み込んでタイムラインの「Video2」にそのまま配置したら、クリップに「タイトル・クリップの追加」で文字を入れる。これをタイムラインの「Video1」に適宜配置していく。このとき、配置する場所と表示されている時間は動画を見ながらWYSWYGで操作すればいいから(ついでに文章の微調整もここですればいいから)、作業は一気に進む。最後にレンダリングすればそれでOK。

もちろん、レンダリング後にチェックしたら、「ここはもう少しこうしたい」というような点が出てくる。ときには字幕文字のフォントや大きさを全部変更したい場合だってあるだろう。こういう場合、「タイトル・クリップ」はkdenliveのファイルにxml形式で保存されているから、.kdenlive形式のファイルをテキストエディターで開き、テキストファイルを直接編集すればほとんど手間をかけずに変更ができる(もちろん変更前にはバックアップはとっておく)。そして、変更後のファイルを再びkdenliveで開いて再度レンダリングすればいい。

非常に手軽な方法だが、この方法は今回のように5分程度の短い動画だからこそ有効だったのだろうと思う。長くなるとひとつひとつの字幕画面を「タイトル・クリップ」で管理するのは(いくらテキストエディターで加工できるとはいえ)効率がよくない。いちいちレンダリングするのも時間がかかるし、レンダリングすることによる画質の低下もあるようだ(このあたりは私の設定が下手なだけかもしれない)。とはいえ、実際にこうすることで、作業時間は着手から完了まで含めて5時間程度で済んだ。これを計算すれば、1分の処理に1時間を要したことになるから、たとえばこれが50分の動画だったとしたら、とても割に合わないだろう。しかし、5分の動画だから、最初にあげたようなおおげさな流れにしないことで、相当な時間短縮ができている。

Ubuntuのおかげ、というか、オープンソースなソフトウェアたちのおかげで、ほんとに、仕事が助かっている。




posted by 松本 at 20:07| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2014年06月26日

Openboxでゲーム用のランチャーを作成した

以前、Openboxログイン時間制限用のスクリプトを書いたという記事で息子がゲーム(Minetest)をするのに時間制限を加えるためのスクリプトを作成した件を書いた。ゲーム専用のアカウントを用意し、そこでスクリプトを自動起動させ、1週間の制限時間を超えたら強制的にログアウトするように設定したものだ。これに関しては、毎週月曜日に制限がリセットされるようにしていたのを毎週日曜にするよう息子から要望があった程度で、まあ順調に作動している。
さて、このスクリプト作成の伏線は「MinecraftもどきのMinetestに息子がはまった」という件だったわけだが、その後、Mincraftが課金型ゲームだというのは私の誤解だったことがわかり、また、当初に支払うアカウント作成のための料金約3000円を息子が自分で負担することを約束したので、Minecraftで遊ばせることを承認した。その際、Minetestはどうするかと尋ねたら、そっちはそっちで引続き遊びたいという。別々に制限をかけたらややこしいので、まとめて制限をかけたい。それならば、以前、Minetest専用に作成したアカウントでMinecraftも遊ばせるようにすればいい。

Minetestを専用アカウントで使用するようにしたのは、もともとはUbuntuの場合、英語環境のアカウントでなければUIが崩れてしまうというバグがMinetestにあったからだ。それを逆手にとったとも言える。通常のアカウントから起動したのでは遊べないから、専用アカウントに行かねばならず、そこで時間制限を受けるという算段だ。Minecraftに関しては、以前はLinux環境へのインストールにそれなりの手数が必要だったようだが、いまではリポジトリにMinecraftを自動でインストールしてくれるプログラムが用意されている。だからソフトウェアセンターなりパッケージマネージャなりからクリックひとつでインストールできるのだが、そうやってしまうと全てのアカウントからMinecraftが遊べてしまう。

それでは困るので、ここは手作業でMinecraftの公式サイトからLinux用のパッケージをダウンロードし、それをスクリプトから起動してやることにした。こうすれば、それ相応の知識がない限り、他のアカウントからはMinecraftが起動できない。どうしても専用アカウントに縛られるから、そこで時間制限を逃れられなくなるはずだ。

そういう方針を立てたとき、ここで必要になるのはOpenboxで起動するように設定してある専用アカウントにランチャーを用意してやることだと気がついた。専用アカウントにログインすると、自動でランチャーが立ち上がる。そのランチャーからはMinetestかMinecraftが選べるようになっていて、どちらかを起動して遊ぶ。それ以外の起動方法はわからなくしておけば、息子はこのルートをとらざるを得ないから、制限時間以上には遊べないだろう。

ということで適当なランチャーを探したのだけれど、たかがゲーム2つを起動するためだけの最小限の機能のランチャーなんて、かえって見つからない。それならばPythonで書いてやろうと、また素人のプログラミングをやったのが下記のスクリプトだ。
#!/usr/bin/python
# coding: UTF-8

import os;
import ConfigParser
from Tkinter import *

if __name__ == "__main__":
    inifile = ConfigParser.SafeConfigParser()
    inifile.read("/home/~/config.ini")
totaltime = int(inifile.get("int","totaltime"))

if totaltime > 299:
    elapsedtime = "今週の残り時間はありません。"
else:
    elapsedtime = str(totaltime/60)+"時間"+str(totaltime -
int(totaltime/60)*60)+"分過ぎました。残り" + str(4-totaltime/60)+"時間"+str(59 -
(totaltime - int(totaltime/60)*60))+"分です。"

def craft():
    os.system( "bash /home/~/mclaunch.sh")

def mtest():
    os.system( "minetest")


class MyApp:
  def __init__(self, parent):
    self.myParent = parent
    self.myContainer1 = Frame(parent)
    self.myContainer1.pack()

    button_name = "MineCraft"
    self.button1 = Button(self.myContainer1,
      command=self.buttonHandler(button_name, 1, "MineCraft"))

    self.button1.configure(text=button_name, padx=80, pady=20, command=craft)
    self.button1.pack(side=LEFT,padx=50, pady=50)

    button_name = "MineTest"
    self.button2 = Button(self.myContainer1,
      command=self.buttonHandler(button_name, 2, "MineTest"))

    self.button2.configure(text=button_name, padx=80, pady=20, command=mtest)
    self.button2.pack(side=LEFT,padx=50, pady=50)


  def buttonHandler(self, arg1, arg2, arg3):
         print ""

  def buttonHandler_a(self, event, arg1, arg2, arg3):
         print ""

root = Tk()
root.title(elapsedtime)
myapp = MyApp(root)
root.mainloop()
息子の要望で、残り時間が表示されるようにしておいたが、これは以前の制限スクリプトで用意したconfig.iniという初期設定ファイルを読み込むことで対応している。再読み込みはしていないので表示される残り時間はログイン時点でのものだが、それでも十分だろう。なお、例によって素人のプログラムなのでサンプルから取り込んだ際に不要になった行もいくつか残っている。その他にも恥ずかしい間違いは多々あると思うが、何にしても一応は動くので、公開しておく。なお、スクリプト中のmclaunch.shというのはMincraft起動用のスクリプトである。

ゲームを制限したら、今度はYouTubeにはまりだした。一応こちらも制限はかけているのだけれど、なかなかうまく運用できていない。その話はまた別の機会に書くことにしよう。
posted by 松本 at 12:24| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2014年04月21日

Openboxログイン時間制限用のスクリプトを書いた

前回「MinecraftもどきのMinetestに息子がはまった」と書いたが、ゲームにはまって抑制が効かなくなるのも困るので、親子の間で時間制限をかけることに合意した。1日30分とか2日で1時間とか、いや1日1時間はしたいとか、いろいろ攻防があった挙句(もともとテレビは見ないし、Wiiもやめるという前提で)、1週間に5時間ということで落ち着いた。ただし、これをいちいち手作業で管理していたら大変だから、1週間に5時間しかつかえないように設定したい。Mintestそのものにはそういう機能はないので、外部からペアレンタルコントロールをかける必要がある。これはシステムのレベルでも行えないことはないのかもしれないけれど、たまたま他の必要からMintest専用アカウントをつくったので、このアカウントへのログイン時間を制限すればいい。となると、以前作成した「lxdeでペアレンタルコントロール」のスクリプトを改造すればいいのではないかと考えた。
けれど、考えはじめてみると、1週間の時間制限というのは案外難しい。Pythonで書くとして、経過時間を外部ファイルに書き出して記録するのが実際的だなと考えた。そして、週のはじめにその経過時間をゼロにリセットする。曜日を整数として取得すると月曜日が0だから、これを利用すればいいんだろうと考えた。
けれど、よく考えたら、必ずしも毎日アカウントにログインするとは限らない。「月曜日ごとにリセットする」というスクリプトでは、たとえば初回のログインが水曜日だったら数値はリセットされない。最終のログインが週末とも限らないから、「前回のログイン曜日よりも小さなログイン曜日になったらリセット」というのも使えない。全く使わない週も可能性としてはあるわけで、そこまで考えたら、やっぱり日付を取得してきっちりと週のはじめを読んでやらないといけない。
ということで、次のようなスクリプトを書いた。例によって基本がわかっていない私は、あちこちから拾ってきたサンプルのつぎはぎである。公表するのも恥ずかしいようなものだが、私はプログラマではないので、プログラマにとって恥ずかしいようなことでも恥と思わずにできる。素人の強みだ。


#!/usr/bin/python
# coding: UTF-8

import datetime
from datetime import date
import time
import ConfigParser
import os;
import locale
import pynotify


if __name__ == "__main__":

    inifile = ConfigParser.SafeConfigParser()
    inifile.read("./config.ini")

lastdate = inifile.get("int","lastdate")
totaltime = int(inifile.get("int","totaltime"))

lastyear = int(lastdate[0:4])
lastmonth = int(lastdate[5:7])
lastday = int(lastdate[8:10])
d = datetime.date.today()
d0 = date(lastyear, lastmonth, lastday)
days = d - d0
dayow = d0.weekday() - d.weekday()

if int(days.days) > 6:
        totaltime = 0
else:
        if dayow >0:
                totaltime = 0
        else:
                totaltime = totaltime

while totaltime < 360:
        time.sleep(60)
        totaltime = totaltime +1
        st = """[int]"""+ "\n" +"""lastdate        =        """+ str(d) + "\n" + """totaltime        =        """ + str(totaltime)
        f = open('config.ini', 'w')
        f.write(st)
        f.close()

pynotify.init( "1週間の制限5時間です" )
n = pynotify.Notification("制限時間になりました。", "また来週!", "dialog-warning")
n.show()

time.sleep(60)
os.system( "openbox --exit") 


別にconfig.iniという初期設定ファイルを作成しておく。内容は、

[int]
lastdate=2014-04-16
totaltime=0

という感じだ。これをOpenbox環境のアカウントでautostartに仕込んでおく。ただし、ここで重要なのは、スクリプト中に指定してある初期設定ファイルの場所を絶対パスに書き換えておくこと。あるいはcdでディレクトリを変更しておけばいいのかもしれないが、相対パスだと自動起動がうまく働かなかった。しばらく悩んでしまった。

1分毎に設定ファイルを書き換えるスクリプトなので、うるさいといえばうるさいのだけれど、ゲームの終了時のイベントを読んで設定ファイルを記録するスクリプトを書けなかったので、しかたない。これでとりあえずは十分に役に立っているようだ。現在のところこのスクリプトでわかるように制限時間を経過すると1分だけ時間猶予を与えてから強制ログアウトするようになっている。なんだか息子はこれを逆手に取って制限時間後にログインし、1分だけ遊ぶというおかしなことをやっているようだから、ここは10秒ぐらいに短縮したほうがいいのかもしれない。

「どうやって制限しているの?」と尋ねられたので、上記のような大まかな構造だけは説明した。息子はその設定ファイルがどこにあるのかを探し出したいらしいが(もちろん書き換えたいのだ)、それは秘密にしてある。もしもそれを探しだし、書き換えるぐらいの力量がついたら、ペアレンタルコントロールなんか不要になるんだろう。いつかそんな日が来ることを願っている。
posted by 松本 at 10:56| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年10月12日

タッチパッドの有効・無効を切り替えるツール

息子に使わせている古いDellのInpiron mini 12の話なのだが、「タッチパッドに手が触れて文字が消える」と苦情がきた。実際、このマシンはタッチパッドが大きめで、それはそれで使いやすくもあるのだけれど、誤動作も多い。必要に応じてタッチパッドの有効・無効が切り替えられれば便利だろうとは思う。
で、これはUbuntuの通常ならシステム設定のマウスの設定でごく簡単に行える。ただし、このマシンはスペックの関係でLXDEを使っている。そして、LXDE上ではタッチパッドの設定を変更する手軽なGUIのツールが見つからない。
もちろん方法がないわけではなく、Synclientというコマンドで簡単に無効化することができる。とはいえ、小学生の子どもにいちいち端末を開いて設定させるのも考えものだ。
そこで、PythonでGUIツールを書いてみることにした。Synclientの使い方はこちらにあるので、そこに記載された
$ synclient TouchpadOff=1
をボタンを押すことで実行するようにすればいい。有効にする場合はこの1を0にすればいいから、そちらもボタンをつくっておく。GUIの設計なんて複雑なことはできないから、ここはそこらに転がっていたサンプルコードを流用。こんな具合になった。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
import gtk
import os;

class Application():
 
    def __init__(self):
        self.window = gtk.Window()
        self.window.set_title("タッチパッド設定")
 
        self.create_widgets()
        self.connect_signals()
 
        self.window.show_all()
        gtk.main()
 
    def create_widgets(self):
        self.vbox = gtk.VBox(spacing=20)
 
        self.hbox_1 = gtk.HBox(spacing=20)
        self.button_1 = gtk.Button("タッチパッドを有効にする")
        self.hbox_1.pack_start(self.button_1)
        self.button_2 = gtk.Button("タッチパッドを無効にする")
        self.hbox_1.pack_start(self.button_2)
 
        self.hbox_2 = gtk.HBox(spacing=10)
        self.button_exit = gtk.Button("終了")
        self.hbox_2.pack_start(self.button_exit)
 
        self.vbox.pack_start(self.hbox_1)
        self.vbox.pack_start(self.hbox_2)
 
        self.window.add(self.vbox)
 
    def connect_signals(self):
        self.button_1.connect("clicked", self.callback_1)
        self.button_2.connect("clicked", self.callback_2)
        self.button_exit.connect("clicked", self.callback_exit)
 
    def callback_1(self, widget, callback_data=None):
        os.system( "synclient TouchpadOff=0" )
 
    def callback_2(self, widget, callback_data=None):
        os.system( "synclient TouchpadOff=1" )

    def callback_exit(self, widget, callback_data=None):
        gtk.main_quit()
 
if __name__ == "__main__":
    app = Application()
これにたとえばtouchpad_config.pyのような名前をつけてやり、ダブルクリックで動作するようにデスクトップファイルを設定してやる。たとえばこんな感じ。
[Desktop Entry]
Encoding=UTF-8
Name=タッチパッド設定
Comment=configure touchpad
Exec=python /(パス)/touchpad_config.py
Icon=
Terminal=false
Type=Application
Categories=
これを息子のデスクトップに置いていた。便利に使ってくれているようだ。
posted by 松本 at 19:46| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年10月07日

lxdeでペアレンタルコントロール

古いDellのInspiron 12にUbuntuを入れて数年前から息子に与えているのだが、小学生にあまりネットの世界をウロウロさせるのもどうかと思ってメーラーもブラウザも、もちろんその他のSNS系のアプリケーションも表面からは隠してあった。ちなみにこのInspiron12、13.04にアップグレードしてからはグラフィックの描画がつらくなってきたので、デスクトップ環境をLXDEで運用するようにしている。LXDEの場合、メニューバーからメニューを削除しておけば、一見したところどんなアプリも起動できない。それでは何もできないので、こちらが許可したアプリ、たとえばワープロだとかお絵かきソフトだとかはショートカットのアイコンをデスクトップに置いてある。これでだいたいはことが済む。Synfigなんてアニメのアプリも、本人の希望に応じて使えるようにした。ただ、Web関係だけは許可しなかった。

けれど、本人はもちろん、ネットでいろいろと情報を仕入れたい。ウチにはテレビがないので、友だちとのあいだで話題になるアニメ関係の情報とか、DVDを借りてきて観る映画の情報(特にハリー・ポッターだ)、あるいは友だちとやるゲームの関係の情報とかを検索したり、YouTubeで見たりしたいらしい。
こちらはそれは禁止しておきたいのだが、ある日、うっかり私が彼のパソコンで調べ物をしようとしたところを見られてしまった。もちろん私はブラウザを立ち上げるわけだが、その手順を秘密にしておきたいので、わざわざ端末を開いてFirefoxと入力して起動している。そこを一瞬見られたわけだ。すると彼は、端末にアプリケーション名を入れれば起動できるのだということを悟ってしまった。それでも私は、「やれるもんならやってみろ」と大きく構えていたが、ついにある日、Firefoxの正しいつづりを見つけてしまった。

こうなったら、放置するわけにはいかない。それまではパソコンは使いたいときに使えというかっこうで任せていたのだけれど、それは、ワープロで文章を書くとか画像ソフトで絵を書くとかは、小学生にとってそうそう根気の続く作業ではないからだ。放っておいても何時間もパソコンにかじりつく心配はない。ほんの30分もやったら飽きてしまう。ところが、Webの世界をぼんやり眺めていたら、いくらでも時間が過ぎる。いわゆるペアレンタルコントロールをすべきタイミングだ。

ペアレンタルコントロールは、大きく分けて2種類の対策を施せばいいだろう。1種類は有害サイトのフィルターリングで、これはFirefoxのアドオンを使えばいい。具体的にはFoxFilterというので間に合いそうだ。無償版はロックがかけられないのだけれど、英語を理解しない小学生に設定の変更は難しかろうから、しばらくのあいだのしのぎにはなる。

もう1種類は、PCそのものの使用時間を制限することだ。夜遅くまでパソコンにかじりつかれてはかなわないから、夜8時半にはシャットダウンしてほしい。学校が遠く朝早い関係で、できれば夜9時には床につかせたいからだ。これに関しては、Gnome Nannyというのがよさそうなのだが、あいにくなことにこれはGnome環境でなければ動かず、LXDEでは論外だし、仮にGnome環境に変更するにしても最新のUbuntuではバグが出て使い物にならないらしい(もちろんアップデートにより動くようになるのは遠くないだろうが)。ともかくも、これは諦めるべきだ。

ただ、このGnome Nanny、Linux-PAMというモジュールを操作するものらしく、したがってLinux-PAMを直接設定してやればパソコンの使用可能時間をコントロールすることができそうだとわかった(このあたりとか)。ただ、けっこう高度な設定らしく、何度かトライしたけれど失敗。どこがどうなっているのかよく理解できないのにあまり深追いしても傷を負いそうなのでいいかげんなところで諦める。

ということで困ってしまったのだが、調べていると同じような悩みを解決するためにシェルスクリプトを書いたという記事があった。なるほど、一定時間を経過したらスクリプトで強制的にログアウトさせてやればいいわけだ。つまり、
#!user/bin/bash
sleep 33m
killall -9 lxsession
というスクリプトをたとえばlogout.shというような名前で保存し、LXDEなのでLXDEの設定のAutostartフォルダ内に
[Desktop Entry]
Encoding=UTF-8
Name=Auto Log Off
Comment = Will automatically log individual off after a set period of time
Exec=bash (パス)/logout.sh
Terminal=true
というような内容でデスクトップファイルをつくっておく。すると、ログイン時に「33分後にログアウトする」というスクリプトが自動スタートするわけで、つまり1回のログインで33分までしか使用ができないという制限になる。

ただし、いきなりログアウトするとデータが失われる可能性があるので、やはり警告は必要だろう。警告も同じシェルスクリプト内に書けばいいのだけれど、そこまでプログラミングに詳しくないので、以前ちょっとかじったPythonを使って、警告のスクリプトを次のように書いた。
#!/usr/bin/env python
# -*- coding:UTF-8 -*-

import pygtk
pygtk.require('2.0')
import gtk
import datetime
import time

time.sleep(1800)

d = datetime.datetime.today()

class HelloWorld:
    def __init__(self):
        self.window = gtk.Window()
        self.window.set_title('時間です!')
        self.window.connect('destroy_event', self.end_application)
        self.window.connect('delete_event', self.end_application)

        self.label_show = gtk.Label()
        self.label_show.set_markup('<span size="24000">\n\n<b>きみがコンピュータを使いはじめて30分がたちました。\nいったん休憩してください。\n3分後に自動的にシャットダウンするので、\nすべてのファイルを保存してください。\nわかったら、「わかりました」ボタンを\nクリックしてください。\n\n</b></span>')

        self.button_hw = gtk.Button()
        self.button_hw.set_label('もうちょっと使いたい')
        self.button_hw.connect('clicked', self.set_hw_txt)

        self.button_gn = gtk.Button()
        self.button_gn.set_label('いま何時?')
        self.button_gn.connect('clicked', self.set_gn_txt)

        self.button_quit = gtk.Button()
        self.button_quit.set_label('わかりました')
        self.button_quit.connect('clicked', self.end_application)

        self.vbox = gtk.VBox()
        self.vbox.add(self.label_show)
        self.vbox.add(self.button_hw)
        self.vbox.add(self.button_gn)
        self.vbox.add(self.button_quit)

        self.window.add(self.vbox)

        self.window.show_all()

    def set_hw_txt(self, widget, data=None):
        self.label_show.set_markup("\n\n<big><b>いったんパソコンを終了して休憩してください。\nそれからもう一度起動すれば使えますよ。</b></big>\n\n\n\n\n")

    def set_gn_txt(self, widget, data=None):
        self.label_show.set_markup("\n\n<big><b>時計を見てください!\nただちにコンピュータをシャットダウンしてください。</b></big>\n\n\n\n\n")

    def end_application(self, widget, data=None):
        gtk.main_quit()
        return False

def main():
    hw = HelloWorld()
    gtk.main()

if __name__ == '__main__':
    main()
このPythonスクリプトも、やはり同じようにAutostartにデスクトップファイルをつくって自動起動させる。そうすると、強制ログアウトになる3分前に警告メッセージが出るという寸法だ。なお、変なダイアログがいっぱいあるのは、コードをもらってきた先のサンプルに合わせなければいけなかったからで、このあたり、Pythonのことを何も理解していないのがバレバレだろう。

とはいえ、これでは再ログインすればまた33分使えてしまう。最大の課題は夜8時半以降は使わせないことだから、夜8時以降はログインできないようにしなければならない。これもやはりPythonのスクリプトで制御する。つまり、
#!/usr/bin/python
# coding: UTF-8

import time
import os;
import datetime
import locale
import pynotify

d = datetime.datetime.today()

t= d.hour
h = float(t)
if h > 19 :
pynotify.init( "午後8時を過ぎています" )
n = pynotify.Notification("午後8時を過ぎています", "パソコンをすぐにシャットダウンしてください。", "dialog-warning")
n.show()

time.sleep(10)
os.system( "killall -9 lxsession" ) 

というスクリプトをたとえばtimeup.pyとかいうファイル名で保存しておき、それをやはりAutostartでログイン時に起動するようにしておく。すると、datetime関数で時刻を取得し、それが19時より大きい(つまり20時以降)であれば警告を出して10秒後にログアウトするしくみだ。実際、これでやってみると20時以降のログインはあっさりと弾かれる。24時を過ぎるとログインできてしまうのだけれど、さすがに小学生、そんな時間まで起きていないので、これはこれでいいだろう。

なんとも始末のわるいことに自動起動のスクリプトを3つも使ってしまっている。もちろん少しでもプログラミングのわかっている人なら、これを1つにまとめることなど造作もないだろう。それはそう思うのだけれど、とりあえず素人としては、用が足りれば十分。これでしばらくしのげそうだ。
posted by 松本 at 00:13| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年07月17日

synfig studioでアニメ制作

しばらくエントリを書かなかったのは、Ubuntuを使わなくなったのではなく、新しいことを試す時間がなかったからだ。この春からメインの仕事に新たな分野が加わったのだけれど、これがなかなか手強く、時間をとられている。相変わらず文書をつくったり印刷物をつくったりと、Ubuntuの助けなければやっていけない毎日だけれど、それはこれまで積み上げてきたものでだいたい片付く。新たな技術や新たなアプリを必要とするものではない。Ubuntuそのものも安定してきていて、困ることもあまりない。したがって、ネタもない。あったとしても書く時間がない。

そんな毎日なのだけれど、数日前、小学5年生の息子が「アニメを作りたい」と言ってきた。パソコンでできないかという。彼には以前の私の愛機Inspiron mini 12を渡してあるので、「かんたんなものならできるはずだ」と請け合った。

以前、やはり息子のリクエストでpencilを試している。このときは、お世辞にも成功とはいえなかった。だが、原理はそのときにだいたい把握している。他のアプリもあるかもしれない。

探してみると、synfig studioがよさそうだとわかった。さっそく自分のマシンで試してみると、そこそこわかりやすい。そこで、息子のInspiron mini 12にも入れてみることにした。

その前に、システムのアップデート。なにせあんまり使っていないマシンだから、大量にアップデートがある。その後再起動したら、起動しない。ここはpoulsboの呪いだ。すっかり忘れていたが、アップデートは慎重にしないとこういうことになる。調べてみたら12.10以降では改善しているようなので、いっそ新規インストールと考えた。ここからのことは長くなるので、余力があれば別エントリにしよう。

ともかくも、アップデートが終了し、synfigのインストール。13.04ではリポジトリにも入っているようだが、ここは公式サイトからダウンロードしたdebファイルを使用。リポジトリのものはなぜか動作しなかった。ひょっとしたらなにか勘違いかもしれないが。

さて、このsynfig、ベクターグラフィックをタイムラインにそって、いくつかのキーフレームで移動させれば、その間のコマを自動で補完してくれるというすぐれもの。ごく基本的な操作だけネットの情報を頼りに把握してそれを息子に伝えたら、1日で(ほんの4秒間だけだけれど)、「不死鳥が炎のあいだを舞う」動画を完成したのには驚いた。いまどき、小学生の方がカンが優れているのかもしれない。

Synfigは基本的にベクター画像を扱う。ビットマップも描けるようだが、ビットマップに関しては別途描画用のソフトで用意する方が賢いようだ。それをインポートして背景にし、その上でベクターを移動させるとうまくいく。息子がもう少し上達したら、技を盗んでやろうかと思う。


posted by 松本 at 13:04| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年04月18日

LibreOfficeで数式を組む

先日から子ども向けの数学の問題をつくっているのだけれど、これが案外と厄介だ。一つ前のエントリでフォントの問題を書いたが、実はフォントだけではない。もともとワープロは数式を組むようにはできていないので、きれいに組み上げることがなかなかできない。たとえば分数なんかは、OpenOfficeそのままでやろうとおもったら図形文字を利用するしかないだろう。文字枠の中に数字を入れて2行にし、上の行の文字に下線を修飾しておいてからその行間を75%程度にすればそれっぽくなる。これを必要な場所に持っていけば、なんとかゴマカシがきく。けれど、しょせんごまかしでしかない。何箇所もそういうごまかしをしていると、手間がかかる上に仕上がりがだんだんと醜くなる。これはよろしくない。

同じワープロソフトでもMS Wordには数式のエディタがある。LibreOfficeにも数式エディタはあるのだけれど、これは出力がPDFで、ワープロに数式を埋め込むことができない。かといって数式エディタをワープロとして使うには、文字の書式指定の能力が不足する。いまひとつ、役に立たない。

なにかいい方法はないかとリポジトリを調べていたら、Abi Wordに数式のプラグインがあることがわかった。Abi WordはGnomeの公式ワープロソフトで、LibreOfficeに比べれば知名度はいまひとつだけれど、歴史のあるワープロだ。私もUbuntu移行直後には何度か試用した。ただ、LibreOffice(当時はOpenOffice)の完成度がどんどん上がってきたので、その後、特に注目もしないできた。だが、数式がきれいに組めるのなら、使ってもいいかもしれない。

インストールしてみると、たしかにメニューの「自動テキスト」のEquationから数式を組むことができる。ただ、このダイアログに出てくるボックスには、Latexのフォーマットで数式を流しこむ。つまり、数式の処理自体はLatexでやってしまい、それを画像としてワープロ上に表示してしまえということらしい。

ちなみに、Latexは私なんかが解説を加えるまでもない伝統的な組版に特化したマークアップ言語で、理科系の学生の中にはこれでひいひいいわされる人びとが毎年一定数発生する、というものらしい。Latexの基礎となるTexについて私が初めて聞いたのはもう20年も前になるから、相当古いものであるのはまちがいない。組版技術としては相当のものらしいが、ページレイアウトの利便性ではWYSIWYGのDTPソフトにはかなわず、理数系の学術分野以外では常にマイナーな位置に置かれてきた。だから私も、使ったことがない。
言い方を換えれば、Latexがわかるぐらいなら、最初からLatexで数学のテキストをつくっているわけで、わからないからワープロソフトで組もうとして苦労している、といっていい。とはいえ、いまさらLatexを勉強するのも鬱陶しい。マークアップ言語でタグをゴリゴリ書いていくのは、たとえそれがHTMLでも勘弁願いたい世界だ。ちょっとなあと思う。

けれど、試しにごくかんたんな数式をそのままボックスに入れてみると、思いの外きれいな結果が得られた。ちょっと複雑なものに関しては特殊な記法があるようだが、これはWebを検索すればすぐに出てくる。やってみると、必要な分はどうにかなりそうだ。

ただし、Abi Wordは、やっぱりワープロとしてはLibreOfficeにかなわない。どうかなわないかというと、インライン変換ができない。ここにあるような方法をとればインライン変換もできるようになるらしいが、ここでふと気がついた。オープンソースな世界だから、Abi WordでできることはLibreOfficeでもできるように誰かががんばってくれているかもしれない。そこで調べてみると、TexMathsというプラグインを導入すれば、同様にLatex形式の数式をワープロ文書中に挿入できることがわかった。早速ダウンロードして適用。

ただし、そのままでは使えない。依存関係があって、Latexとdvipngというプログラムを予めシステムにインストールしておかなければならない。これはどちらもリポジトリにあるものそのままでOKなようだ。

ということで、LibreOfficeできれいな数式が組めるようになった。ワープロ編集画面中の数式の表示はたぶんAbi Wordはフォントがベクターデータなので、きれいだ。LibreOfficeはpngのビットマップデータなので、美しくない。けれど、プリンタで出力すればちがいはわからない。十分だろう。

どちらのワープロソフトも、Latexのデータを一方通行で画像データにしているので、一旦作成した数式の再編集はできないようだ。これはちょっと不便だが、その都度、Latex形式のデータをコピーしておくという運用で乗り切ることができる。これでずいぶんと、作業が楽になった。
posted by 松本 at 22:31| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年04月17日

数学の問題作成にStixフォント

数日前、子ども向けの数学の問題をつくろうと思った。中学生の数学で、xとかyの文字が出てくる。こういう変数は伝統的にイタリック体で表すことになっている。ただし、数学の教科書に出てくるイタリック体は、一般の欧文書体のイタリック体に比べてやや特殊だ。なかなかぴったりくるフォントがない。

それなら適切なフォントをダウンロードすればよかろうと、数式用のフォントで検索をかけると、Stixというオープンなプロジェクトのフォントがあることがわかった。公式サイトから入手ドできるようなので、早速ダウンロードした。そして、この圧縮ファイルを解凍してフォントフォルダに突っ込んでやったが、なにも起こらない。

よくよく見てみたら、どうやらフォントファイルの形式がUbuntuで扱えるものとはちがっている。とはいえフォントデータそのものはあるわけだから、なにか適切なプログラムで変換できるだろうと見当をつけた。ローカルで使うだけなら、それで問題はないはず。

けれど、フォント作成・変換のツールを探し始める前に気がついた。データの形式がちがうために壁にぶち当たったユーザーは私だけではないはずだ。オープンソースの強みは、その私以前の誰かをあてにできることだ。ずっと以前に誰かがこのStixフォントのデータをUbuntuで扱える形式、たとえばOTFに変換してくれているかもしれない。

そこでまずは手はじめにとリポジトリ内を検索してみたら、あっさりとotf-stixというプログラムが見つかった。これをインストールすることで、あっさりと問題解決。

このStixフォント、イタリック体の形式がいいだけでなく、組版で頭を悩ませるもととなる二倍カッコ、三倍カッコなどにも対応している。分数の組みはそのままでは対応していないようだが、カッコや積分記号などは不細工にそこだけフォントサイズを変えるというのではなく、そのまま書体だけ指定すればうまくいってしまう。これはなかなかいいかもしれない。
posted by 松本 at 08:24| Comment(2) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年03月31日

なんちゃってAndroidアプリの開発 - その2

前回少しもったいをつけすぎたかもしれない。端的にいえば、jsWaffleというツールを使えば、HTMLで書いた文書をAndroidのアプリにすることができる。それだけの話だ。だが、せっかくもったいをつけたのだから、私がそこにたどり着くまでの経緯を書いておこう。

Webサービスを使って.apkファイルの作成をする中で、「これって単純にHTMLで書いた文書を埋め込んでいるだけじゃない。だったら、そのぐらいのことはこのWebサービスでなくったってできるかもしれない」と気づいた私は、早速Googleに聞いてみた。検索キーワードはAndroid、HTML5、アプリ作成、そのぐらいだったと思う。その結果、すぐに出てきたのがこのスライドだった。

http://www.slideshare.net/kujirahand/html5javascriptandroidseminar

このスライドは非常にわかりやすく、Androidアプリ開発の中でのHTML5の立ち位置を示してくれていた。なるほど、「なんちゃってアプリ」程度ならHTMLでごまかすのがいちばん簡単そうだと、改めて自分のカンが当たっていたのを確認した。そして、そのためのツールとして、jsWaffleやPhonegapといった選択肢があることもわかった。

さて、となると、その線で一歩を進めたい。調べてみるとPhonegapの方が世界的にはユーザーが多そうで、その分だけ情報も多そうだ。けれど、jsWaffleは、上記のスライドの作者が開発者ということもあって、このスライドをそのまま追っかけていけば片付いてしまいそうだという手軽さがある。なによりもまず、ツールがUbuntuで動かなければならない。

さらに調べてみると、基本的に開発環境はクロスプラットフォームなことがわかった。だったら書かれている手順通りにいけばいい。

スライドには、Aptana Studio2を最初に用意するように書いてあるが、これはEclipseでも可能とのことで、それならとリポジトリからEclipseをインストールしかけたが、さらに調べてみるとその次に書いてあるAndroid SDK Tool(ADTプラグイン付き)というのをダウンロードするとオマケで最新のEclipseがくっついてくることがわかった。だから結局、下準備としてはAndroid SDK Tool(ADTプラグイン付き)をダウンロードするだけ。そのままバイナリで配布されてくるので、インストールの手間さえない。

次にjsWaffleのインストール。これは公式ページから。むしろこっちのほうが厄介で、というのは、これにはAdobe AIRで動くからだ。本来はjsWaffleのインストールでAdobe AIRが自動でインストールされる手はずなのに、Linux版のAdobe Airがサポート外になってしまっているため、ここが通らない。結局手動で非サポートのAdobe Airをインストールし、その上にやはり手動でjsWaffleをインストールすることになる。たぶんここがいちばん手間がかかった。

インストールが済んでしまえば、あとは公式ページやスライドにあるインストラクション通りに進めるだけ。そして、たしかに/asset/www内にあるindex.htmlを書き換えるだけで、あっさりと「なんちゃってアプリ」ができてしまった。

一瞬まよったのは、「じゃあどうやってコンパイルするんだ?」ということ。これは心配無用、自動でbinフォルダ内に.apkファイルができている。これを実機にインストールするだけ。なお、私の使っていたパソコンは非常に非力なので、デモ環境でテストするよりも実機でテストする方が早いという情けない実情だった。

このあと、アイコンの変更やら何やらと追加の作業はあるのだけれど、基本的にはこれだけでアプリができてしまう。jsWaffle恐るべしだ。

posted by 松本 at 14:00| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年03月29日

なんちゃってAndroidアプリの開発 - その1

私はプログラマではない。20年ぐらい前には少しだけプログラミングに興味をもったこともあった。15年ぐらい前に(どんな言語だったかは忘れたけれど)「Hello World」だけは書いた。それがプログラミングに関する知識の全てだった。

けれど、表計算シートのマクロからはじまって、ここ数年、少しずつ、少しずつ、プログラミング的な作業をするようになってきた。そして昨年秋には、ついにPythonで初歩的なプログラムを組んでみることになった。この話は一段落したらネタにしようと思い続けて、なかなか手をつけられずにいる。とるに足らない小さなプログラムでも、自分にとっては大変なプロジェクトだったのだから。

その大変な思いに比べたら実にあっけないほどかんたんに、この3日で「スマホ・アプリ」をつくってしまった。と言ったら話が太すぎる。「なんちゃってAndroidアプリ」というほうが実態に近い。けれど、とにもかくにも.apkファイルができて、端末にインストールできたのだから、驚いた。まさかできるとは思わなかった。

発端は、仕事に行った先の事務所の人が、「スマホのアプリってできない?」と言ったことだ。それが今週の月曜日。彼女が関係のイラストレーターからオープンなイラスト素材を入手した。それでもって「アプリ」ができて配布ができたらいいなと、その程度の話だった。

もちろん私は「できませんよ」と言った。いくら素材があっても、3日でアプリはできない。ちなみに私は月曜日と木曜日と金曜日に別件でその事務所に仕事に通うことになっていた。たいして忙しい仕事ではなく待ち時間が大量に出るので、その空き時間でなにかできないことはないだろう。けれど、やったこともないアプリ開発なんて、3日でやるのはありえない。

けれど、半端な時間は十分にある。だったら、せめてやり方だけでも調べておくか(その上で「この程度でできますよ」とか提案できれば次の仕事になるかもしれないし)と、検索を始めた。

このときに思い出したのは、以前にネタ系のブログをやっていたときに行き当たった「アプリをつくるWebサービス」だ。ブラウザ上でインタラクティブにコンテンツを指定していくだけでアプリができるという。さがしてみると、確かに私の記憶にあったサイトを含めていくつか類似のサービスが出てきた。そのなかで比較的使いやすそうだったのがhttp://ibuildapp.com/で、ここでポチポチとコンテンツのアップロードを始めたら、夕方帰る前には.apkファイルができてしまった。スマホのメモリカードにコピーしてインストールすると、確かに動く。サイトに「5分でアプリができる」と書いてあったのは大げさとしても、実際にコーディングゼロ、数時間でアプリができてしまった。

けれど、勘違いしてもらっては困るのは、私は英文のこのWebサービスをけっして推奨しようとは思わないことだ。できたアプリの動作は重く、広告は見苦しく、そしてなによりも「これって本当に安全なの?」という疑念を晴らせなかったからだ。もちろん、怪しいサイトではないのかもしれない。けれど、そうでないと言い切る証拠もない。危ない橋はわたらないのが安全だ。私はすぐにそのアプリを削除した。念のため、端末の初期化までやっておいた。安心のために。

ただ、このWebサービスを使い、あるいは類似のいくつかのサイトを試用してみて、わかったことがある。これらの「アプリ作成サイト」は、基本的にはたいしたことはやっていない。いくつかの方法は選択できるようだが、最も単純にはHTMLをアプリとしてコンパイルしているだけだ。HTMLの中にはJAVA scriptも組み込めるからそこまでやったら相当高度なアプリもできる。そこまでやらなくても、ホームページのインタラクティブな文書、つまりはリンクをつけてコンテンツのあいだを移動するようなことだけでも、「はい、アプリでございます」とコンパイルすることができる。「なんちゃってアプリ」だ。

私が月曜日の午後に片手間につくったのは、そういう種類のアプリだった。だが、もしもHTMLをコンパイルするだけでアプリができるのだったら、そのためのツールぐらい出回っていてもおかしくない。Webサービスを使って実地にやってみることで、そこに思い至った。じゃあどんなツールがあるんだろうと探したら、なんともご機嫌なツールが見つかった。その話は次回においておこう。
posted by 松本 at 21:41| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年01月29日

Soxは便利

以前、soxでカセットテープ音源のスピード調整という記事でAudacityなみの処理をコマンドラインから行うSoxというアプリを使った経験を書いたが、再びこのSoXを利用したので一例報告まで。

発端は、妻がBluetooth接続のスピーカーを買ったことだ。5年ばかり前の引越しの際に妻が長年愛用したカセットコンポを処分して以来、我が家にはオーディオ機器がなかった。今回買ったBluetoothのスピーカーは、オーディオ機器というにはあまりに貧弱だが、それでもたとえばテレビのスピーカーなんかに比べればはるかにマシで、いい音がする。ある意味、音質に限界のあるMP3ファイルの再生にはちょうど似つかわしいかもしれない。ということで、MP3プレーヤーとして使えるスマホを音源として、久々に音楽のある生活が戻ってきた。

ところが、ここで困るのがMP3ファイルの音のレベルの差だ。音源がレコードやCDならその1枚の中でレベルはきっちり調整されている。自分で録音したテープなら、録音するときにそのあたりは気を使ってできるだけ差の出ないようにしている(というか、はるか昔、「エアチェック」をやっていた高校生の私は、けっこうそのあたりに気を使ったものだ)。しかし、MP3ファイルはバラバラのソースからバラバラに入手したものをまとめて聞くので、レベルの差が気になる。曲が替わるたびに音量を変更するのは現実的ではないし、かといって突然大きな音になったり聞き取れなくなるのもの快適ではない。

ということで、MP3の録音レベルを統一する必要がある。Audacityでやれば簡単なのだけれど、いちいちファイルを開いてフィルタをかけ(「正規化」というフィルタでたいていはOKだ)、エクスポートするという操作をファイルの数だけ繰り返すのはたいへんだ。となると、SoXでバッチ処理がよかろうということになる。

調べてみると、SoXの正規化は、
sox infile outfile gain −n
というコマンドでOKなようだ。これをバッチでやるには(元ファイルが.ogg形式として)、

for i in `ls *.ogg`; do echo -e "$i"; sox $i a/$i.ogg gain -n; echo -e "$i.ogg"; done

というスクリプトになるようだ。なお、このコマンドは該当するファイルの存在するディレクトリにはいって実行し、実行前に予めそのディレクトリ内に「a」という名前のフォルダを作成しておく必要がある。このスクリプトの詳細な意味は、実のところ私にもよくわかっていない。前の記事に書いたスクリプトを必要に応じて変更しただけだし、そのさらに元のスクリプトの出典は、その記事のどこかにリンクをはってあるはずだから、必要な方はぜひたどってほしい。

ともかくも、これで録音レベルは揃った。音楽を聞くのもなかなか一筋縄ではないな。
posted by 松本 at 21:19| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年01月14日

PDFの文字入れならXournal

一つ前のエントリでKarbonが思いがけず使えたと書いたが、そのコメント欄でTOYさんから「PDFに赤入れするならXournalが簡単ですよ。」と教えていただいた。早速、Xournalを調べてみたら、スタイラスペンでの入力のためのアプリらしい。PDFの編集とはちょっとお門が違うようだけれど、モノは試しとインストール。Ubuntuのリポジトリにあるから、Synapticパッケージマネージャで(というよりいまではソフトウェアセンターで、というのがメインストリームなんだろうが)ごく簡単にできる。

立ち上げてみると、レポート用紙のような罫線の画面になる。なんとなく、iOSアプリの7notesを思い出す。たぶん、用途としてはそういう方向性なのだろうが、メインの用途ではないPDF編集に使うわけだから、この画面は要らない。メニューのFileからAnnotate PDFを選ぶとファイルの選択画面が出るから、ここからPDFファイルを開く。すると、その上に罫線を引くことも文字を打つことも自由にできる、という具合だ。

Inkscapeのようなドローイングソフトと違うのは、文字や図形のベクターデータを編集可能なかたちで読み込まないこと。基本的にはevinceのようなPDFビューワでPDF文書を閲覧しているのと同じだと思えばいい。あとからXournal上で打ち込んだ文字や図形は、おそらく元のPDFに追加されるだけで元データそのものはいじらないのだろう。

これはこれで、ひとつの利点になる。というのは、Inkscapeのようなドローイングソフトではフォントがうまく読み込めないときにはフォントの置換を自動的に行い、それがレイアウト崩れの原因になる。さらに、いったん読み込んだPDFを保存するとファイルの大きさが増大するケースが多い。図形の読み込みでもエラーが起こる場合もあり、いじるつもりのない部分までいじることができてしまうというのは、用途によっては(たとえば書式に書きこむだけのような場合には)ない方が嬉しいぐらいだ。そういう点で、Xournalは使い勝手がよさそうだ。

ただ、メニューのFileからExport to PDFを選んで保存しようとしても、ファイルによってはうまくいかない場合があるようだ。ちょっと試しただけなのだけれど、うまく保存できたファイルとあとから打ち込んだテキスト文字だけが保存されて元データが保存されなかったファイルとがあった。ただし、後者の場合でもPrintからPDFファイルとして保存するというベタな方法なら問題なく元データと、その上に書き込んだデータの両方がきちんと保存される。問題というほどの問題にはあたらないだろう。

元データの一部でもいじりたいとき(たとえば図形の位置を変更したいとか文字を削除したいとか)ならやっぱりInkscapeだとは思うが、実用的にはほとんどがこのXournalで間に合いそうだ。いいツールを教えていただいて感謝している。

posted by 松本 at 21:12| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年01月10日

Karbonが思いがけず使えた。

PDFで与えられた様式にデータ上で記入するのは案外と面倒だ。オフィス系のソフトでこれをやろうとすると、直接PDFデータを取り込むことができないから、画像化するぐらいしか方法がない。適当な方法、たとえばスクリーンショットとかでPDFデータを画像化し、それを下絵としてワードなりなんなりの文書に貼り付ける。その上からテキストを配置していくわけだ。だが、この方法はスマートとは言いがたい。アウトラインデータはドット化するし、文書を保存したらそのぶんだけ重くなる。

PDFを直接編集するならAdobeのAcrobatにその機能があるが、Linuxの場合、これはPDF Editorになる。ただ、このPDF編集ソフトは、あまりフレキシブルとは言いがたい。きれいにデータを加工するのであればやはりベクター編集ソフトであるInkscapeでPDFを読み込んで、その上で編集してやるのがいちばんだろうと思う。

今朝、たまたまPDFの様式があって、これにいくらか文字を記入しなければいけない作業が生じた。いつものようにPDF文書を右クリックしてInkscapeから開くように指定した。2ページある文書の1ページ目に記入する必要があったのでそちらを選択し、さて、開くように指示をしたが、いつまでたってもそこから先に進まない。

PDFはかなり複雑な仕様なので、ごく稀にこういうことが起こる。Inkscapeで開けないPDFは編集は基本的に無理なので、画像として処理するしかない。こういうときはやはり右クリックからInkscapeではなく、画像処理ソフトのGimpを選択する。そして、画像としてGimpで文字を貼りつけていくのがいいだろう。

そう思って、右クリックで「別のアプリで開く」を選択したら、そのリストにKarbonが上がっている。実は、少し前、ベクターグラフィックソフトにKarbonというのがあると聞いてインストールしてみていた。インストールしてから気がついたのだが、これは以前のKOffice、現在のCalligra Suiteの一部を構成するソフトだ。だったらあまり期待もできないなと思って試用して、「まあ、Inkscapeには勝てないな」とその後放置してきたものだ。

けれど、せっかく候補に上がったのだからとそれでPDFを開くようにしてみたら、あっさりと開くことができた。Inkscapeでは無理なのがKarbonだと通るということがあるようなのだ。これには、正直、「お、やるじゃないか」と思った。

ただ、肝心の文字を打つ方法がわからない。どうするのかなあと思ったら、右下隅にArtisticというアイコンがあって、これで一行テキストを挿入できる。そして、テキスト編集に入ると、それまでアラインメントを表示していた部分にテキストの属性指定の画面が現れるので、これである程度のことができる。UIがちがうので最初かなり戸惑うが、それなりのことはきちんとできるようだ。

ただ、結局これで作成した文書は使わなかった。最初に読み込んだとき、フォントの置換がうまくいかなかったらしく、元文書のレイアウトが少しだけ崩れてしまったからだ。結局はGimpで処理したのだからKarbonのご利益は特になかったと言える。それでも、今後が楽しみに思えてきた。また機会があれば試してみよう。
posted by 松本 at 22:02| Comment(2) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする

2013年01月08日

WineでInDesign - WindowsユーザーがUbuntuに乗り換えるべきもうひとつの理由?

時間がなくて最近はそれほどマメに見ていないTwitterを開いたら、タイムラインに「無料のAdobe製品をダウンロードした」というようなTweetがある。どうせ海賊版か何かだろう、触らないほうが吉と無視を決め込んでいたら、どうやらそれは、こちらの記事にあるような事情のことらしい。

「無償でライセンス提供していない」--アドビ、CS2ダウンロード騒動に正式コメント

アドビ、CS2製品データ公開は「正規ライセンス保持者への措置」と発表
 
私はかつてアドビ製品を使って仕事をしたこともあるが、現在はライセンスを何一つ所持していない。だから、海賊版ではないにせよ、これをダウンロードして使うわけにはいかない。これは記事のとおりだ。だが、この記事を読んでいてふと気になった。今回、ライセンスを所有しているユーザーに対して旧製品のダウンロードサービスをAdobeは提供しているわけだが、その理由はどうやらこれらの製品はそもそも現代的なOSでは動作せず、Adobeとしてもサポート外としているということに関係しているらしい。「旧来のOS上で継続してCS2製品およびAcrobat 7を利用するユーザーを考慮し、」というわけだ。
ということは、Windows Vista以降、CS2が動作しないということでAdobe製品の使用を断念するかXPにとどまり続けるかの選択を強いられたユーザーがいるということだ。そして、CS2のライセンスにとどまり続けている人々は、時代遅れのXPから進歩できずにいる(あるいは仮想環境を使う不便を強いられている)。その詳細は、たとえばこちらにある。

しかし、ひょっとしたらUbuntu上のWineなら、最新の環境でCS2が動作するのではないかと気がついた。私はライセンスはないけれど、動作確認をするぐらいの試用ならお咎めを受けることもあるまいと思って、Creative Suitesの中でも特に出色のできだったと私が思っているInDesignをダウンロードしてみた。そして、Wineで走らせると、順調にインストールできる。

ただし、起動はうまくいかない。やっぱりだめなのかなと思いながらWineの公式ページを見ていると、こちらに対処方法が書いてあった。ネイティブのsystem32/oleaut32.dllをコピーし、.wineのProgramフォルダ内にあるInDesignのディレクトリのPlug-Ins/Script/Support for Visual Basic.aplnを削除すると起動するらしい。やってみると、まちがいなく起動した。そして、はるか昔にInDesignで作成したデータも無事に開くことができた。

もちろん、Wine上の動作なので、完璧とはいかない。ごく短時間の試用でも、「あれ?」というようなところはいくつかあった。たとえばプリンタはうまく認識しない。おそらく機能的には十全ではない。けれど、とにかく動作する。

ということは、CS2(あるいはInDesignの4.0)の正式ライセンスをもった方でXPを離れられずにいる方は、Ubuntuに乗り換えれば最新の環境でInDesigneを使い続けることができる、ということではないだろうか。これは、Windowsを捨ててUbuntuに乗り換える理由にはならないか?

まあ、ならないだろうなとは思う。InDesigneはかつかつ動くものの、Illustratorはどうやら動作しないようだから。Photoshopは動作するらしいけれど、この時代のPhotoshopならいまのGimpのほうがたぶん上を行くだろう。なによりも、今回のダウンロード製品は英語版で、日本語の表示はできるし基本的な機能はOKだけれど、やっぱり日本語環境で100%使いこなすには難があるだろうから。

ということで、まああまり役にも立たない試行となった。ライセンス違反でとやかく言われるのは嫌なので、すぐにインストールしたソフトは消去した。これは、ホームフォルダ内の隠しフォルダ.wineをまるごと消去するのがいちばんだ。wineのおもしろいところは、このフォルダを入れ替えることで、環境の復元や初期化が非常に簡単に行えること。この魅力は捨てがたい。少なくともいろいろ遊んでみる上では。
posted by 松本 at 22:06| Comment(0) | TrackBack(0) | Ubuntuのアプリケーション | このブログの読者になる | 更新情報をチェックする