2016年11月26日土曜日

pomi - ポメラSyncされたメモを操作するツール

タイトルにもあるように、ポメラSyncをしたメモを Windows や Mac や Linux から操作するツールを作っています。

軽く説明

ポメラSync

ポメラ DM200 の機能に、ポメラSyncというものがあります。
これは、ポメラのメモを Gmail の特定フォルダとの間で同期する機能です。

ポメラSync自体は、ポメラと iPad や iPhone のメモアプリとを同期することを想定しています。
ですが、要はメモを Gmail のフォルダにあるメールメッセージと相互変換する仕組みですので、メールを操作することができれば、別に iPad や iPhone でなくてもアクセスできます。

pomi

というわけで、ポメラSyncの同期先である Gmail フォルダ(Notes/pomera_sync)に同期されたメモを操作するツールを作りました。

実行ファイルと初期設定(大したことしません)と実行例は、以下の場所で説明しています。

https://shuheikubota.github.io/soft/pomi/

コマンドラインアプリケーションとして作っていますので、以下のように

  • pomi list
  • pomi get
  • pomi put
  • pomi delete
…などといったコマンドを入力することでポメラSyncされたメモをファイルとして保存したり、ファイルをメモとして格納したりすることができます。



pomi はソースも公開しています。
最近では身近なツールは Go言語でプログラミングするようになっているため、今回も Go言語で実装しています。

2016年10月25日火曜日

ポメラ DM200 使ってみて~キーボードの注意点~

Ctrl と CapsLock を入れ替えると

何故か、右の Ctrl も CapsLock になります。
まじか。

2016年10月24日月曜日

ポメラ DM200 使ってみて~ポメラSyncの注意点~

新しいポメラ、DM200を買って使っています。
周辺ツールを作るかも。

購入

ヨドバシ.com で購入。
翌日のお昼ころに配送されるのは良いですね。

ポメラSyncについて

本体の「pomera_sync」が同期対象

私は通常はSDカードに保存するようにしていますが、それだと同期されませんので注意しましょう。

本体メモリ内の「pomera_sync」にメモを保存した上でポメラSyncを実行しましょう。
(フォルダは、一度ポメラSyncを実行したときに作成された気がします)

メニューからポメラSyncすると、上記のフォルダに入っているもののみが同期されます。
現在編集中のファイルが同期されるように思えるかもしれませんが、そうではありません。

ファイルの削除は、同期先「Notes/pomera_sync」からも削除が必要。

ポメラSyncを、iOS との同期ではなくバックアップや別のツール向けに使っている場合には注意が必要です。

IMAPを使って、本体メモリとGmailの同期先「Notes/pomera_sync」を同期しているとのことです。

IMAPの同期の仕組みが不明ですが、「ファイルがない=新しいファイルができた」と判断するらしく、片方から消しただけでは駄目です。
ポメラSyncしたタイミングで、消したはずのファイルが復活することになります。

最後にポメラが同期した際のタイムスタンプを記録するようにはなっていないようですね。


2012年11月6日火曜日

Mercurial 拡張を作成してみた

Mercurial の拡張に初挑戦。

思ったより簡単に実装できてよかったです。

今回の題材

今回作ったのは archive コマンドの拡張で指定範囲のリビジョンで変更したファイルを対象とするというもの。 きっと既にあると思いつつも、拡張を作ってみたかったこともあり、着手することにした。

hg archive のオプションに --change REV1:REV2 を追加するというものだ。

参考

主に参考にしたのは、

上の場所を主軸として、今回は wrapcommand を使ったので、そ の場合の構成は Mercurial のソースリポジトリ中、 hgext/largefile を参考にした。

また、同じくMercurial ソース中のhgext/commands.py に標準 のコマンドが定義されているので、ラップした archive コマン ド (実態はPython の関数) の引数を調べるのに使った。

wrapcommand

既存のコマンドを拡張する場合には mercurial.commands.wrapcommand を使うようだ。

どうやら、コールバック uisetup() が呼び出されたタイミング でラッピングするらしい。

wrapcommand の戻り値が cmdtable の要素 (= 三つ組のタプル) に相当するようなので、そのタプルの 2 つ目にオプションの定 義を追加する。

ソースコード

# coding: utf-8

from mercurial import commands, scmutil, extensions
from mercurial.i18n import _

def overridearchive(orig, ui, repo, dest, **opts):
    # get sorted revision numbers
    if opts.has_key('change'):
        older, newer= scmutil.revpair(repo, opts['change'])
        older_ctx = repo[older]
        newer_ctx = repo[newer]
    if newer_ctx.rev() == None: # if unary
        newer_ctx = older_ctx
    if newer_ctx.rev() < older_ctx.rev():
        older_ctx, newer_ctx = newer_ctx, older_ctx

    # get changed files between the revisions
    files = set()
    for revno in range(older_ctx.rev(), newer_ctx.rev() + 1):
        for f in repo.changectx(revno).files():
            files.add(f)
    files = sorted(files)

    # show changed files
    if ui.verbose:
        for f in files:
            ui.write(f + '\n')

    # arrange opts to be passed into the archive command
    del opts['change']
    opts['include'] = list(files) # OVERWRITES

    return orig(ui, repo, dest, **opts)


def uisetup(ui):
    entry = extensions.wrapcommand(commands.table, 'archive', overridearchive)
    addopt = [('', 'change', [], _('REV1:REV2 format'))]
    entry[1].extend(addopt)

2012年10月6日土曜日

PL/SQL のオブファスケータ

Oracle には、wrap という PL/SQL のオブファスケータがあるので、極力公開したくな い実装を配布する場合は、使ってみるといいかもしれない。

先日紹介した PL/Unit でもこの方法が採られていて、PACKAGEつまりインターフェイスは 公開されているが、PACKAGE BODYつまり実装は公開されていない。(しかし、PACKAGE BODYは配布されている)

wrap iname=source.sql oname=obfuscated.sql

というように使う。 oname に指定したファイルとして難読化されたプログラムテキストが書き出される。

詳細は、PL/SQLのソース・コードの不明瞭化 を参照のこと。