2018年9月29日土曜日

TukubaiのMapを使ってみた

手元のデータをKeynoteのグラフ描画のデータに流し込むために表の形式に整形しようと思ったところ、1ツイートに収まらないくらい長く書いてしまいました。そこで

というツイートをしたところ、@papiron さんから

ということでTukubaiのmap を教わったのでTukubaiを良く知らないということの自戒を込めて使ってみました。ちなみにこの原稿はJupyter Notebookbash_kernelを使って書いています。

環境は以下です。

In [1]:
which map
/usr/local/bin/map
In [2]:
map --help
Usage   : map       [-<l>] num=<n>x<m> <file>
        : map +yarr [-<l>] num=<n>x<m> <file>
        : map +arr  [-<l>] num=<n>x<m> <file>
Option  : -m<c>
        : -n
Version : Sat Dec 10 21:04:17 JST 2011
          Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/UTF-8)

基本的な使い方

Tukubaiの基本的な使い方は、

"縦のキー" "横のキー" "データ"

となっているデータを適切な表の形式に整形する、というもののようです。

In [3]:
map num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
EOF
* A B
1 hoge fuga
2 piyo pohe

欠損しているデータがある場合はデフォルトだと0が与えられます。

In [4]:
map num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
3 A fugaa
EOF
* A B
1 hoge fuga
2 piyo pohe
3 fugaa 0

欠損データのデフォルト値は -m オプションで指定することができます。

In [5]:
map -m なし num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
3 A fugaa
EOF
* A B
1 hoge fuga
2 piyo pohe
3 fugaa なし

インデックスが複数フィールド存在するとき

縦のインデックスが複数フィールド存在するときはnumの値を変更します。

In [6]:
map num=2  << EOF
1年 1組 A hoge
1年 1組 B fuga
1年 2組 A piyo
1年 2組 B pohe
EOF
* * A B
1年 1組 hoge fuga
1年 2組 piyo pohe

横のインデックスが複数フィールド存在するときは以下の様です。

In [7]:
map num=1x2  << EOF
1年 1組 A hoge
1年 1組 B fuga
1年 2組 A piyo
1年 2組 B pohe
EOF
* 1組 1組 2組 2組
* A B A B
1年 hoge fuga piyo pohe

データが複数フィールド存在するとき

データが複数存在するときは新たにA,Bとラベル付けして縦の列に追加してくれます。

In [8]:
map num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
* * 1組 2組
1年 A hoge fuga
1年 B hogee fugaa
2年 A piyo pohe
2年 B poyoo pohee

ラテン文字ではなく、数値でラベル付けをして欲しいときは-nオプションを使います。

In [9]:
map -n num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
* * 1組 2組
1年 1 hoge fuga
1年 2 hogee fugaa
2年 1 piyo pohe
2年 2 poyoo pohee

横のデータを横方向に展開させたいときは+yarr を付けます。

In [10]:
map +yarr num=1  << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
* 1組 1組 2組 2組
* a b a b
1年 hoge hogee fuga fugaa
2年 piyo poyoo pohe pohee

+yarrを付けた場合も-nで数値でラベル付けることができます。

In [11]:
map +yarr -n num=1  << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
* 1組 1組 2組 2組
* 1 2 1 2
1年 hoge hogee fuga fugaa
2年 piyo poyoo pohe pohee

同様a,bのラベル付けが不要なときは+arrを付けます。

In [12]:
map +arr num=1  << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
* 1組 1組 2組 2組
1年 hoge hogee fuga fugaa
2年 piyo poyoo pohe pohee

一行のデータを複数に区切る方法

-<数値>オプションを使うことで、データをよしなに区切ることもできます。

In [13]:
map -3 num=1 << EOF
X x 1 2 3 4 5 6
X y 7 8 9 A B C
Y x D E F G H I
Y y J K L M N O
EOF
* * x x y y
* * a b a b
X A 1 4 7 A
X B 2 5 8 B
X C 3 6 9 C
Y A D G J M
Y B E H K N
Y C F I L O

但し欠損データの補完はできない様です。

In [14]:
map -3 num=1 << EOF
X x 1 2 3 4 5 6
X y 1 2 3 4 5
Y x 1 2 3 4 5 6
Y y 1 2 3 4 5 6
EOF
Error[map] : フィールドが足りません。

結論

Tukubaiは便利

2018年1月2日火曜日

Synergyを使った似非デュアルディスプレイ

明けましておめでとうございます。年末年始ということで家で大掃除及び諸々の作業をしていました。家の環境ですが、デスクトップのArch Linuxにディスプレイを二枚繋いでデュアルディスプレイの環境でした。が、大掃除をしたところ片側のディスプレイ (ちなみにNexDockです)の電源周りが死んでしまい新年早々仕事をする気が失せたのでその辺の話を書きます。

速い話Synergyを使ってデュアルディスプレイの様なことをやりました。普通に新しいディスプレイを買えば良い話ではあるのですが、それまでの繋ぎという感じです。今回は丁度手元にあったMacBook Proを使います。MacBook Proを手元のディスプレイに指せば良いと思うかもしれませんが、変換コネクタが手元にないので今はできません。

Synergy

さて、こういう話は例によってArch Wikiに書いてあります。(Extreme Multihead) どうも選択肢はXdmxとSynergyがあるようです。

Xdmx a proxy server for X allows the X server on remote systems to contribute its monitor to the desktop of a master system. In this case the destop is genuinely extending onto remote systems; windows can be dragged across system boundaries and applications launched from a remote monitor run on the local, master system. In this environment, the remote systems need only provide sufficient resources to run an X session.

Xdmxを使うとXの転送機能を使って結構ちゃんとデュアルディスプレイのようなことができる様です。一方でMacのXでちゃんと動かないのか巷の情報が古いせいなのか動きませんでした。もうちょっと粘ると動くのかもしれません。

synergy this tool allows your keyboard and mouse to access remote systems by making your desktop seem to extend onto the remote desktop. Simply by moving your mouse off the edge of your desktop it will appear on a remote system where both mouse and keyboard can interact with the remote systems GUI (i.e. synergy can connect Macs and Windows systems too). Windows cannot be dragged across system boundaries and indeed applications launched through a remote systems GUI, run on the remote system. For an integrated Linux desktop, disk shares also need to be set-up

Synergyを使うとリモートにキーボードとマウスを送れます。これだけ見るとデュアルディスプレイというよりKVM感がありますが、操作するマシンを切り替える方法が、マウスポインタをディスプレイの外に動かすだけなのでデュアルディスプレイの様な操作ができます。

Installation

Arch Wikiに色々書いてあるのですがやったことはこういう感じです。

Arch Linux (Host) 側

SynergyはArch Linuxではpacmanでインストールできます。GUIを起動すると課金しないと動かない機能があると言われますが、欲しい機能は課金しなくても動きます。

pacman -S synergy
sudo cp /etc/synergy.conf.example /etc/synergy.conf
vim /etc/synergy.conf # 適当に設定を書く
synergys

MacOSX (Guest) 側

SynergyはMacではhomebrewのcaskでインストールできます。GUIで起動すると課金しろと言われますが、必要なのはsynergy-coreだけなのでこれで動きます。

brew cask install synergy
/Applications/Synergy.app/Contents/Resource/synergy-core --client <Hostのアドレス>

2018/09/15更新

Macでのpathが変わっていたので修正しました。

各アプリケーションの使用感

Emacsで諸々を書く

Emacsの場合trampを使うとsshなど経由で外部のファイルを編集できます。例えばLaTeXを書くときに片側でファイルを編集して、コンパイルとプレビューを反対側でやるようなことができます。

Google Chrome

Chromeだと履歴が共有されるのでその辺を上手いことやると動きます。

Xを使うアプリケーション全般

そもそもsshのX転送を使うことでリモートからGUIのプログラムも起動できます。