パソコン・インターネット

2018/10/25

Refsort/Ruby v2.95 & Refsort on Excel v1.60

ここ1か月ほど集中的に開発を行って(古いほうから *1 *2 *3 *4 *5)ようやく形になってきた Refsort/Ruby の Excel インターフェースプログラム “Refsort on Excel” は,ようやくこれで落ち着けるのではないかと思います.

今週初め,Refsort の専用バージョン “refsort_ex.rb” こと Refsort v2.94ex を使った版 Refsort on Excel v1.50 をアップしました.そのときに書いたように,この Refsort v2.94ex とオリジナルの v2.94 との差異はわずかなものなので,これならばいっそのこと統合してしまえばよいとすぐに思いつきます.ただしそのためには新たなオプションを設けなければならないので多少の躊躇はありました.しかし,専用版などというものを別途管理するのも大変なので敢行することにして,そうやって生まれたのが Refsort v2.95 です.

Control_panel

Refsort on Excel で使うためには新たなオプション “--excelmode” または “-x” を指示することにして,これを Refsort on Excel の VBA で自動的に付加するようにしました.それ以外は Refsort 自体に何の変更も加えていませんので,コマンドラインからは従来と全く同様に使うことができます.

Pasted_result

この Refsort v2.95 を前提として作成したのが Refsort on Excel v1.60 です.仕様としては v1.50 と同一ですが,統合版の Refsort を呼び出す点だけが異なります.いろいろな例をテストしているのですが,今のところ破綻らしきものは見当たらず,しばらくはこの版で試験運転をしてみようと思います.念のため繰り返しますが,必ず Refsort v2.95 以降と Refsort on Excel v1.60 以降の組合せで使ってください.古い版だとうまく動作しません.

Edited_output

例によって,このブログの右側のカラム “自作コンテンツ” の内容を更新するとともに, “Archive” の中の “Refsort/Ruby Archive” の内容も更新しておきますので,適当にダウンロードしてお使いください.

それでは,この新しいインターフェースが皆様の作業の生産性を大幅に向上させてくれることをお祈りします.

| | コメント (0) | トラックバック (0)

2018/10/21

Refsort on Excel v1.50

先週 v1.40 をリリースしたものの,いくつかの制約(フィールド内にカンマを含むことができない,辞書ファイルのコメントを出力できない,インデント付きのラベルを出力できない)を含む仕様だったので,これを何とか解消しようと開発を継続してきました.いろいろなテクニックを仕入れては試してみたのですが,どうにも出力の場合分けが複雑になってしまい,どうしたものかと悩んでいました.

しかし天啓がひらめき,というよりも開き直りが先に出て,いっそのこと Refsort の特別版を作り,これとうまく役割分担して VBA の負担を減らしてはどうか?と思いつき,やってみたら非常にすんなりとやりたいことが実現してしまいました.

Control_panel

まず Refsort の特別版ですが,“refsort_ex.rb” という名前にしました.これは Refsort v2.94 の派生版で,出力の書式を少々修正し,通し番号や辞書ファイルのコメントを含めてすべてのフィールドをタブで区切って出力することにしました.こうすることで,VBA のほうではほとんどすることが無くなります.しかも Refsort の修正箇所はわずか10行程度です.元のスクリプトが汎用性を考慮して作ってあったので,こういうことができたのです.われながら感心しました.

Excel の VBA のほうは,入力を Refsort に渡すときに,フィールドをタブで区切った文字列で渡すことに統一し,また出力のフィールド区切りはタブに固定するようコマンドラインオプションで指示する,インデント付きラベルの指定を許可するなどの修正を加えました.プログラム自身は,Refsort の出力ファイルを処理する部分が大幅に簡略化され,使いにくい VBA の正規表現は全く使っていませんし,スピードも十分に出ているので大変満足しています.

Ref_comm_added

これを v1.50 としてリリースすることにします.Excel のブックと Refsort のスクリプトが同梱されたパッケージになっています.これで仕様は落ち着くと思いますので,今後は細かなバグの潰し込みに注力していくつもりです.使用方法は改訂してアップする予定の Refsort/Ruby ユーザーズガイドをご覧ください.

| | コメント (0) | トラックバック (1)

2018/10/16

Refsort on Excel v1.40

新しく開発しているソフトウェアにはどうしても想定不足が付きまといます.これでもう十分にテストしたと思っていても,非常に意地悪な入力やオプションの設定を与えると破綻してしまうことが多々あります.この Refsort on Excel もご多分に漏れず,毎日バグとの戦いが続いています.

出力の再構成に異常に長い時間がかかることは v1.30 で解決したのですが,その再構成のプログラミングのときに,出力の多様な書式を十分に処理しきれていないことが発覚.VBA の Like 演算子ではどうしても役不足だったので,処理時間を犠牲にして VBScript正規表現を使うことにしました.ところが VBScript の正規表現たるや Ruby の正規表現を使い慣れた者にとっては非常に貧弱で,一度では一意的な切り分けができず,仕方がないので複数の正規表現の評価順序に気を遣いながら場合分けを行わなければなりませんでした.それでも何とか正しい場合分けができて,今の想定範囲ではかなり意地悪なオプションでも破綻せずに走ります.幸いなことに速度の低下はわずかです.

Refsort_excel_v140

これを v1.40 としてリリースすることにします.スピードは十分なので今後はバグの潰し込みに注力していくつもりです.それにしても便利ですよ.使用方法は改訂済みのユーザーズガイドをご覧ください.

| | コメント (0) | トラックバック (2)

2018/10/13

Refsort on Excel をリリースしました

このブログで先々週,そして今週と前振りしてきた Refsort/Ruby の Excel Interface である Refsort on Excel をついにリリースします.今週後半に開発を集中して行い,ようやくリリースできるレベルに仕上げることができました.

そもそも,VBAはほとんど触ったことが無いため,基本的な考え方も,制御構造も,構文も良くわからないまま,WebでQ&Aを検索しながらの開発だったので,だいぶ遠回りをしてしまいました.特に,ベータ版としていたものでもイベントドリブンの考え方に不十分なところがあり,それがようやく解決したのが一昨日のことです.しかし,わかってしまえば非常に単純で便利な仕組みがあらかじめ用意されていたのです.

スクリーンショットを下に示しますが,これまでフラフラとさまよっていたユーザインターフェースはコントロールパネルに統一し,さらにこのコントロールパネルをワークシート上に常駐させて完全なイベントドリブンでプログラムが走るように実装することができました.我ながらなかなか快適です.自画自賛ですがミニコンソールもよくできています.

Execute_sort

このリリースに合わせて付録を追加した新しいユーザーズガイドもリリースします.使い方や制約事項,注意点などはこのユーザーズガイドの付録をご覧ください.Rubyのインストールは相変わらず必要なのですが,コマンドコンソールを開いてコマンドを打ち込むという古典的なユーザーインターフェースはもう必要ありません.この新しいユーザーインターフェースによって,Refsort/Ruby の敷居がぐっと下がり,生産性が劇的に向上することを期待しています.

| | コメント (1) | トラックバック (3)

2018/10/09

Refsort on Excel ベータ版

このブログの9月末のこの記事で,長年の懸案だった Refsort/Ruby を Excel 上で利用するインターフェースを開発していることをお知らせしました.この時はまだアルファ版とでも言うべき状態で,使い勝手が良いとはお世辞にも言えなかったのですが,その後開発を続けた結果,ベータ版と言っても良さそうなものが完成しました.

以下に画面キャプチャを示しますが,まず,このマクロを搭載したブックを開きます.Sheet1 には左上にボタンが付いており,このボタンをクリックするとマクロが動き始めるようになっています.まず並べ替えの対象としたい領域をマウスで選択しておいて,このボタンをクリックします.するとコントロールパネルというダイアログボックスが現れます.(下図)

Select_and_activate

ここで,各種ファイルの同定とオプションの指定を行い,Start と書かれたボタンを押すと,Refsort/Ruby が背後で動き,エラーや参考情報などのメッセージなどを表示した後で,並べ替えた結果がシステムのクリップボードに保存されます.クリップボードの内容を貼り付けたい領域の左上端のセルをマウスでクリックし,Ctrl-V をタイプすると出力が得られます(下図).出力内容はクリップボードに保存されているので,他のワークシートや,エディタなどにも簡単に貼り付けることができるようになっています.

Result_pasted

また,コントロールパネルの設定情報は実行の度ごとに保存され,次回立ち上げたときに初期値として読み込まれるようになっています.

Refsort/Ruby はフラットなテキストファイル,主として CSV を想定してフィールド分割などのアルゴリズムを構成していますが,それを表計算のワークシート上で無理やり使うために,いくつかの機能が制限を受けます.例えば,辞書ファイルのコメントを -o オプションで指定して出力することはできません.また,入力ファイル中のコメントは独立したセルに入力しておくことが推奨されます.制限しないと動作がおかしくなる点はすべてつぶしたつもりですが,まだバグが残っている可能性があるため,ベータ版としています.

近日中に簡単なドキュメントを添えて公開するつもりです.これで Refsort/Ruby を利用する敷居の高さがぐっと低くなることを期待しています.

| | コメント (0) | トラックバック (4)

2018/09/29

Refsort/Ruby の Excel インターフェース

またまた Refsort/Ruby(リリース実績は新しいほうから *1 *2 *3 *4 *5 *6 *7 *8 *9 *10)ネタになってしまうのですが,引退して暇ができるとこのような事も出来てくるという見本です.かねてから,Refsort/Ruby を Excel 上で使えるようにしたいと思っていました.なぜならば,コマンドコンソールを立ち上げてコマンドを打ち込むとか,出力をファイルにリダイレクトしてエディタで編集しなおすとか,ふた時代ほど古いユーザー体験を強制するユーザーインターフェースは自分でも不満に思っていたのです.

数年前の現役時代に Visual Basic for Applications (VBA) の入門本を買ってきて読んでみたのですが,あまりに初心者向きの本でやりたいことまでの距離がありすぎると気が付き,かといってより高度なプログラムを書けるほどの知識もないという状態が続き,大変欲求不満を感じていました.

しかし,時間ができるということは非常に良いことで,新たに教科書を読むことなく,Web の上でやりたいことの解決法を検索しながら,いわば見よう見まねでプログラムを書き始めてみると,VBA の作法には手を焼いたものの,意外と短い日数で何とか動くものができてしまいました.

Refsort_excel

上にその画面を示しますが,並べ替えをしたいリストを Excel 上に作っておき,それをマウスで選択したうえで,右上のボタンを押します.すると Refsort/Ruby が背後で動き,並べ替えた結果をクリップボードに書き出してくれます.あとは,出力したい場所のセルをクリックして,Ctrl-V とキーを叩いてクリップボードの中身をワークシートに張り付けるだけです.クリップボードは汎用なので,エディタ上に張り付けることだってできます.

Refsort の各種オプションのうち,M オプションだけはインデントをどう扱うのか決めかねているのでサポート外としていますが,それ以外のオプションは問題なく動きます.また,フィールド区切り記号をカンマに固定しているため,複数列にまたがるリストの扱いなど一部に制約は残りますが,これで生産性は劇的に上がったのではないかと思います.ドキュメントを書き上げたうえでリリースしたいと思います.

残る課題は,Ruby のインストール作業と,Ruby や Refsort の場所の指定をいかに簡単にするかですが,これらについてはなかなか良いアイデアが思い浮かびません.しばらく考えてみたいと思います.

| | コメント (0) | トラックバック (4)

2018/09/11

Rersort/Ruby v2.94 Released

このところ Refsort/Ruby(リリース実績は新しいほうから *1 *2 *3 *4 *5 *6 *7 *8 *9 *10)のソースファイルを眺めているうちに,ムラムラと湧き上がるものがあって実装をいじっているうちに,辞書ファイルの重複したレコードやラベル,さらには入力の重複レコードを処理する部分を全面的に書き換えました.ただし仕様の変更は実質的に何もありません.

どういう内容かと言うと,まず辞書ファイルに重複したレコードがあると,同一のものが異なる複数の順位を持つことになるので,そもそもソーティングが原理的に成り立ちません.このため,辞書ファイルの読み込み時に重複したレコードを見つけると,従来は最初の重複ペアが見つかった時点でエラーメッセージを出して即座に処理を中止していました.しかし,これはあまり親切なやり方ではないので,辞書ファイルをすべて読み込んだうえで何々というレコードが何行目と何行目と何行目に重複して存在していると網羅的に報告し,それから処理を中止するようにしました.こうすれば辞書ファイルの作者は辞書の修正が容易です.

同様に,辞書ファイル中のラベル(つい最近までマイルストーンと呼んでいたもの)に重複が見つかった場合は,従来は五月雨式に重複ペアを報告しながら処理を続行していたのですが,こちらも辞書ファイルをすべて読み込んだ後で,重複しているラベルを網羅的に報告することにしました.なおラベルが重複しているとは,そのラベルの文字列(コメントを除く)とレベルがともに同一である場合です.またラベルが重複していてもソーティングに不都合はないため,処理はそのまま続行しますが,ソーティング結果には同一のラベルが異なる複数の箇所に現れることになりますので,本来は望ましくありません.辞書ファイルの修正が望ましいところです.

最後に入力の重複です.入力の重複自体には特に問題はなく,入力データとしては十分あり得る話ですし,ソーティング自体にも影響はありません.ユーザーが重複を検知するには -d オプションを使うことにしていますが,従来は重複したペアが見つかるたびに五月雨式に報告していました.しかしこれでは見にくいうえに全体像が分かりにくいので,これも入力をすべて読み終わった後で重複した入力を網羅的に報告し,処理を続行するように改めました.

これらの改訂を入れ込んだ新しい版 v2.94 を近日中にリリースします.またユーザーズガイドも書き直したものをアップロードすることにしました.ユーザーから見た場合には仕様上の変更は何もありませんが,警告文の出かたが見やすいものに変わるので,気づくことがあると思います.なおこの改訂によって処理速度はほとんど影響を受けないことを確認済みです.

| | コメント (0) | トラックバック (1)

2018/08/31

Refsort/Ruby v2.93 to be released

暑さにめげてブログの更新が滞っていますが,それなりに活動はしています.明日9月1日付で,辞書参照型ソーティングフィルターをスクリプト言語 Ruby で実装した Refsort/Ruby v2.93 をリリースすることにしました.過去のリリース実績は新しいほうから順に *1 *2 *3 *4 *5 *6 *7 *8 *9 *10 となっています.

改訂と言っても今回は完全に形式的な改訂です.改訂内容は,これまで「埋め込みマイルストーン」と呼んでいたものを「埋め込みラベル」に変更するというものです.これに伴いスクリプト内部の定数や変数の名前を変更していますが,これはユーザーには無関係.ユーザーから見た場合の変更点は,コマンドラインでの埋め込みマイルストーンの出力を指示するための長いオプション名 --milestone と --msindented がそれぞれ --label と --labindented に変更されるというものです.ただし短いオプション名は従来通り -m と -M のままなので,実害は無いと考えています.

これに伴い,ユーザーズガイドも書き直したものをアップロードすることにしました.スクリプトの内容自体には何の変更もありません.仕様も実装もしばらくは変更するつもりが無いので,このまま毎年クリスマスにリリースされる Ruby の新版(今年は v2.6.0)を迎えるものと思います.この新版の目玉は MJIT と呼ばれる加速機構なのですが,Refsort のような短時間で終了してしまう一発モノのスクリプトにはほとんど効果はないと思われます.

本日中に関連ファイルのアップロードを行いたいと思います.

| | コメント (0) | トラックバック (1)

2018/08/13

DSMのdockerでUbuntuをインストール

このところ,太平洋高気圧が日本の東南海上に後退しているせいで,その縁を回り込むように湿度の高い空気が関東地方に流れ込んでいます.そのため毎日じめじめした暑さに見舞われており,不快なことこの上ありません.

さて昨日の記事の続きです.今朝の涼しいうちに,Synology NAS の OS である DiskStation Manager (DSM) 上に docker を導入し,docker コンテナのレポジトリの中から Linux のディストリビューションの一つである Ubuntu そのものの最新版を選択してインストール・起動してみました.

恐る恐るだったのですが,これがあっけないくらいに簡単.Ubuntu があっという間に起動できたのにはあきれてしまいました.しかしコンテナのダウンロード時間が妙に短いなと思った通り,この Ubuntu は minimize されたもので,インタラクティブな操作を行うには unminimize が必要とコンソールに表示されました.そこで実際に実行してみると,たくさんのファイルがダウンロードされ,インストールされていき,Perl も Python も Ruby もインストールされていくではありませんか!

再起動して,使いやすいとは言えないコンソールから自作の Ruby スクリプトを走らせてみると,当然のことのように完璧に走ります.へぇー,docker ってこんなものなのかという良い勉強になりました.しかしこの Ubuntu をワークステーション代わりに日常的に使うのは非力過ぎますし,I/O の扱いや X Window System を走らせるのも面倒くさそうなので,今日のところはこれで終了.これまでよく理解できていなかった docker のことが少しわかったような気がしました.TeX サーバにできるといいなと思いますが,誰かコンテナを作ってくれないかなぁ?

メールサーバやブログサーバを立ち上げることもできるはずなので,これからのお楽しみです.NAS とは言っても,Intel Celeron 4コア (J3455) と 16 GB のメモリを持っていると,できることの幅がぐっと広がります.

| | コメント (1) | トラックバック (0)

2018/08/12

NASを導入しました

昨晩から涼しい北東気流が吹き出して,湿度が高いことを除けば今朝は快適な気温になりました.暑さにめげてもう1か月もブログの更新をサボっていたのですが,この程度の気温であればなんとか記事を書く気にもなろうというものです.

実は今週から新しいNASの運用を始めました.昨年10月にこのブログで報告した通り,それまで FreeNAS をインストールして運用していた NAS Box が障害を起こして動かなくなり,それ以来 NAS の無い生活をしていました.その間専用 NAS を物色していたのですが,目を付けていた Synology DS718+ の値段が結構下がってきたので,思い切って導入することにしたのです.

Nasbox_0001m

この NAS のドライブベイは2つ.従って RAID5 などの運用はできないのですが,Synology Hybrid RAID (SHR) という仮想化された RAID は使えるらしいので,そのオプションを選択し,かつファイルシステムは先進的と言われておりデフォルトでもある btrfs を選択.これで FreeNAS の ZFS と同様気楽にスナップショットをとることができる,はずです.

Windows PC や Linux マシンとのファイルのやり取りには,とりあえず SMB を使用しています.これまでは WiFi ルータにおまけのように付いていた簡易 NAS 機能を使っていたのですが,こいつはあろうことかセキュリティ・リスクが高い SMB_1 しか解釈できなかったのに対して,この NAS の導入により SMB_3 をデフォルトにすることができるので,ルータの NAS 機能は運用を停止し,Windows の機能からも SMB_1 を無効化してしまいました.

ベンチマークテストは走らせていないのですが,高速の誉れ高いファイルコピー・ツールである FastCopy で Winodws PC のユーザー領域のバックアップを取ってみると,だいたい 90 MB/s 程度の速度が出ていますので,NAS としては十分な性能です.

実はこの NAS は多機能で,いろいろなアプリケーションをインストールして,ネットワーク越しにインテリジェントなバックアップやファイルの同期ができたり,仮想 OS や docker をホストしたり,メールサーバや Web サーバーとしても運用できるようにもなっています.そのために RAM も目一杯追加したのですが,これらのお楽しみはこれからおいおい試みていくつもりです.

| | コメント (0) | トラックバック (1)

より以前の記事一覧