Batasan Blog

人類みな五十歩百歩

Windowsのキーボード操作

ふだんおうちではLinuxなど使って遊んでいるのだが、仕事ではWindowsも使う。しかしWindowsはいろいろいじったりするわけではなく、必要最低限の知識でありのまま使っているので、細かいことはよくわからない(笑)。ただし元々コマンドライン大好き人間なので、できる範囲でいろいろな操作はキーボードでやるようにしている。たとえばメモ帳を起動するのはもう20年前から、

WinKey + r + notepad
WinKey + r + notepad

ってな感じだ。長年そうしてきたので、既に指が覚えている(笑)。Windowsのショートカットキー(ctrl+c / ctrl-vなど)ももちろん使うのだが、ショートカットと言うよりはキーボード操作で出来ることはなるべくやる、というポリシーなのだ(笑)。何が良いかというと

  1. マウスまで手を伸ばさなくてよい
  2. 慣れるとマウス操作より早い

viを長年使ってきた習慣と思想がここでもでてきてるんだと思う。周りの人に教えてもなかなか賛同を得られない(笑)のだが、自分では長年このメリットを享受してきたので今更変えられない。なるべく基本的なモノしか使わない主義で、自分でショートカットキーなどを設定したりはほとんどやらない。なのでWindowsのバージョンが変わっても、昔からほとんどはそのまま使えている。

操作 キーボード操作
Window全画面表示 Alt + Space + x
全画面表示からもどる Alt + Space + r
Windowサイズ変更 Alt + Space + s + カーソル、最後Enter
Window移動 Alt + Space + m + カーソル、最後Enter

最後のWindow移動などは需要がなさそうだが、たまにアプリのバグやモニター解像度の変更など、なにかのはずみでアプリが画面の外にでてしまうことがあって、特にWIndowの上の部分が隠れてしまうとマウスだとどうしようも無くなる時があるのだが、そういう場合に役に立つ。
Windowの画面上の表示の整理はWinKey系を使う。

WinKey + カーソル
WinKey + カーソル

これでWindowがスクリーンの右半分に表示されたり下半分になったりするはずだ。またモニターで複数画面使用してるときは、

WinKey + Shift + カーソル
WinKey + Shift + カーソル

これでモニター間をアプリが移動する。昨今オンライン会議が一般的になったが、プレゼンする時などに共有する側のモニターに、たらたらマウスでアプリをもってくるのではなくて、キーボード操作で一発でもってくるとかっこいいと思う(笑)。
Windowsを使うときはほとんど設定を変えたりしない主義なのだが、一つだけかならずやっていることがある。「タスクバーにピン留め」である。ピン留めしておくと左から順番に、

WinKey + 数字
WinKey + 数字

で実行できるようになる。私の場合は左からメール、ブラウザ、コントロールパネルとなっている。これは便利だ。そして4つ目は常に電源オフ だ(笑)。Windowsのショートカットキーを作成(shutdown -s -f -t 0) し、タスクバーにドラッグ&ドロップしてかならず4つ目に置いておく。お仕事中などに押し間違えると大変なことになる(笑)のはわかっているのだが、今まで間違えたことは1度しかない。それよりも仕事が終わって一刻も早く帰りたいときに、チマチマとマウスで「シャットダウン」を押すなどと言うチンタラしたことはやっていられないので、これだけはやめられない(笑)。

 

 

 

 

RPA通知 LINE編

最近はSikulixというRPAツール実行機となっているクラウドパソコンなのだが、おうちパソコンよりも快適にサクサク動いてくれている(個人的な感想)。やはり物理的にはデータセンターにあって、対象となるアクセス先サーバーとネットワーク的な距離が(たぶん)近いのと、個人向けプロバイダーの混雑や障害の影響を受けないのが何よりも良い。私は全くやらないのだが、株や暗号資産をやっている人たちの間でクラウド利用が流行っているのは、このあたりでよりシビアな勝負をしているからということもあるのだろう(想像)。
RPA実行中や終了のお知らせをGmailを使ってやっていたのだが、今どきメールでもないだろう、と言うことで日本を中心に一部アジア圏でポピュラーなLINEでお知らせするようにしてみた。
普段なにげなく使っているLINEだが、いろいろなAPIが用意されていてアプリ開発者に公開されている。今回はメッセージを送りたいだけなのでなるべく簡単な方法で行いたいのでLINE Notifyというやり方でやってみる。LINE Notifyのページから今流行りのトークを作成する。トークンというのは新しい言葉な感じがするが、理解としては単に長いパスワードと思って大きくは間違っていない(と思う)。これをクラウドパソコン上のファイルにコピペして保存しておく。後はLINE Notifyの専用のページへ自分のメッセージと共にアクセスするだけ。なんとも簡単にできるものだ。ブラウザのURL入力から送ることもできるのだが、長くなるのでスクリプトにしておくと良いと思う。ここではsendline.shというファイルに以下のような内容を記述して、

#!/bin/bash -f
curl -X POST -H 'Authorization: Bearer '`cat linetoken` -F 'message="'$1'"' https://notify-api.line.me/api/notify
#!/bin/bash -f
curl -X POST -H 'Authorization: Bearer '`cat linetoken` -F 'message="'$1'"' https://notify-api.line.me/api/notify

実行権を付けておく。

$ chmod +x sendline.sh
$ chmod +x sendline.sh

ちなみに上記の例ではトークンはlinetokenというファイルに保存している。また`cat linetoken`というのはlinetokenのファイルの内容をコマンドライン上に展開してね、という記号である。$1 というのは実行する時に後ろに書いた値をセットするという意味である(引数という)。実行するときはこんなかんじ。

$ ./sendline.sh クラウドパソコンからラインメッセージ
$ ./sendline.sh クラウドパソコンからラインメッセージ

LINEの宛先が書いていないようだが、それは発行されたトークンの中に情報として入っている。上に単なる長いパスワードと書いてしまったが、トークンにはもう少し違う役割もあるようだ。またRPAツールであるSikulixはpythonを使っているので、そこから呼び出すときはこんなかんじ。

# SikulixのPythonからLINEへメッセージを送る
m = "Sikulixからのメッセージ"
subprocess.call(['linesend.sh',  m])
# SikulixのPythonからLINEへメッセージを送る
m = "Sikulixからのメッセージ"
subprocess.call(['linesend.sh',  m])

結果として無事にLINE Notifyさんからメッセージが届きました(笑)。これはいろいろ使えそう。

 

 

RPAからの通知メール

クラウドパソコンにSikullixを入れてRPAなどして遊んでいるのだが、それなりに長時間実行させるので、起動した後ずっと見ているわけにはいかないのだが、いつ終わったかわからないし、途中で何らかの理由でエラー終了してしまっているかもしれない。なのでかなりベタなアイデアだが、処理の終了時やエラーの時にGmailで知らせるようにする。
もちろんRPAを扱っているので、それを使ってブラウザからWebメールで送るようにしてもよいのだが、ブラウザを起動してGmailのページにアクセスして....とそれなりに作るのは手間だし、RPAを作ったことがある人ならわかると思うのだが、なかなか思った通り動かない(涙)。特に今回はブラウザを使ってネットサーフィンさせている途中にエラーが起きた場合もメールを送りたいのだが、ブラウザが原因でエラーが起きている可能性もあるので、ブラウザでメールを送るのはあまりよろしくない。またもともとコマンドライン大好き人間(笑)なので、この部分はスクリプトで作ることにする。ただし今のテーマはあくまでもクラウドパソコンなのでメールサーバーにするというわけではない。あくまでも普通のパソコンとしてメール送信できるようにするだけ。
といっても特に難しいことはなく、Gmailが提供しているsmtpというしくみを使うだけで、いじったファイルもmain.cfとtransportの2つだけ。Ubuntuの場合は/etc/postfixの下にある。ただ最近はセキュリティが厳しくなっているのでGmail側でアプリパスワードというものを発行して、自分のクラウドパソコン側にも設置する。

Gmail側は アカウントセキュリティアプリ パスワード から作成する。

このパスワードをスペースは除いてsasl_passwdというファイルに記述しておく。準備ができたら、transport.dbとsasl_passwd.dbを作ってからpostfixを再起動しておく。こんなかんじ。

$ sudo postmap /etc/postfix/transport
$ sudo postmap /etc/postfix/sasl_passwd
$ sudo systemctl restart postfix
$ sudo postmap /etc/postfix/transport
$ sudo postmap /etc/postfix/sasl_passwd
$ sudo systemctl restart postfix

あとは普通にメールを送るだけ。

$ echo "メール本文" |  mail -s "メールの件名"  メールの宛先(xxxxx@xxx.com)
$ echo "メール本文" |  mail -s "メールの件名"  メールの宛先(xxxxx@xxx.com)

やっぱりコマンドラインの世界のほうがRPAよりわかりやすくて良い(笑)。RPAで何かを作る時もスクリプトで出来るところはスクリプトでやったほうが良いケースがたくさんある。全部RPAでやろうとすると結構ハマる(笑)。

 

 

マークダウンエディター

最近流行りのマークダウンエディターなるものを私も使ってみる。その昔はhtmlのタグなどをガシガシとエディターで書いていたものだが(笑)、今時さすがにそれは効率が悪いので、テキストでいろいろな修飾ができるマークダウンは非常によいツールと思う。
最近はマークダウンに留まらずコーディングを目的としたいわゆる統合環境的なものが人気があるようだ。プログラム言語の文法チェックはもとより、コンパイル・実行・デバッグまでできるものもある。背景にはpythonの普及でコーディング人口が増えたこともあるのかもしれない。特に理系の学生であれば一度はpython使ったことがあります、という人も多いだろう。また数式を含む論文などの記述にもマークダウンは最適だろうと思う。
私もBoostnote / Atom / VS-Code/ Inkdrop などいくつか使ってみて、RPAツールであるSikulixのプログラミングやこのブログの記述も試してみて、それぞれ素晴らしい機能満載で非常に興味深いのだが、コーディングについては結局viに回帰してしまった(笑)。やっぱり昔に身につけた習性はなかなか変えれないのと、キーボードから手を離さずに(マウス無しで)できるカーソル移動、正規表現+行指定でできる検索や置換に勝る操作性に勝るものは今時のアプリにもまだなかったということだ(あくまで個人の感想です笑)。
コーディングはviに戻ったのだが、ブログやメモについては日本語を使うのでマークダウンエディターを使いたい。viで日本語入力はESCと漢字キーが近く、しょっちゅう押し間違いをしてしまうので、できれば使いたくないのである。ということで私がマークダウンエディターに求める要件をまとめてみると、

  • htmlへの変換機能がある
  • 複数のデバイスで利用・共有できる
  • 無料である(笑

ブログには最近はマークダウンをそのままアップできるモノもあるのだが、この先乗り換えるかもしれないのでhtmlでのアップが安定である。できればファイルに出力でなくて、クリップボードにコピーできると手間が省ける。
またブログは時と場所を選ばずネタを思いついた時点で書きたいので、パソコン ( Linux / Windows ) 、 タブレット / スマホ (iOS / Android )で使えて自分が書いたものを共有できるものが良い。
それからホントに必要なら有料ツールでも良いのだが、プログラミングについてはvi に戻ってしまったので、それほど複雑な機能は不要なので無料のもので充分だろうと思っている。
これらの要件を満たすものとして、まずはStackEditを使ってみたのだが、これがなかなか良い。Googleドライブなどを使えば簡単に共有できるし、そもそもhttpベースなのでデバイスやOSにはほとんど制約がない。なによりhtml出力をクリップボードに簡単に出力できるのが最高である。ただ現時点では、ということだと思うのだが、何故かiOSコピペができない。コピーをしても何故かクリップボードに何も入っていないのだ。私の設定が悪い可能性もあるが、コピぺができないのは編集ツールとしては致命的である。
その後使ってみているのがJoplinで、現在まで続いている。html変換がファイル出力のみでコピーでできないのが若干残念ではあるが、その他は快適である。またそのうち別のアプリに乗り換えるかもしれないが。。(笑。

 

 

クラウドパソコンでRPA#2

クラウドパソコンということで、WebARENA Indigoという日本ローカルではあるがNTT系列のサービスであり、2CPU2ギガメモリで月額最大700円とまずますリーズナブル(と思う)な価格のものを使い始めた。おうちパソコンのdynabook N40はシンクライアントとして第2の人生(笑)を歩み出した。AWS Workspacesの時に躓いてしまったSikulixだが、結論から言うとUbuntuをインストールした今回のクラウドパソコンでは何の問題も無く稼働している。
今回クラウドパソコンでRPAで使うにあたって一つ確認したいことがある。クラウドパソコンVNCで接続していない時に画面の 解像度がどうなっているか? である。何を言っているかわからないと思うが、私もあまりわかっていない(笑。20年前くらいにまだ現役の技術者だった頃、仕事もオタク的な活動もほとんどコマンドラインで勝負していた(笑。もちろんX-WindowやWindowsも使っていたのだが、それらは見よう見まねで自分が困らない範囲で使っていた。なのでこのあたりは全くニガテなのである。ちなみにコマンドラインというのはいわゆるCUIとかシェルとか言われているもので、マウスを使わないコンピューターの世界である。Windowsが発売される前のMS-DOSみたいなモノと思ってもらうと良いかもしれない。
そもそもRPAというのはマウスを使う文化の中のモノである。マウスを使わない世界ではコマンドしかないので、RPAなどという概念を持ち込むまでもなく、コマンドを並べて書いたモノを上から順番に実行すれば良いだけである(もちろん多少のロジックはある)。いわゆるスクリプトというやつだ。RPAというものが出て来る前は、たとえネットサーフィンをするにもスクリプトやプログラムからhttpで情報取得してからタグ解析というのをさんざんやった覚えがある。しかし現代のようにここまで画像や映像に加えてCSSなどが発達して来ると、タグ解析による情報処理が複雑で大変なので、それなら人間が見えている世界、視覚とマウスとキーボード操作をそのまま自動化したほうがシンプルで手っ取り早くなってきた、それがRPAということだろうと思う。
Windowsでもそうだし、Linuxでも最近はパソコンの画面の大きさや接続したモニターの解像度を把握してほとんど自動的に設定してくれる。RPAを実行するにあたって、当然解像度が変わるとあらかじめ用意したボタンや入力フィールドなどの画像と一致しなくなったりするので、解像度は把握しておかなければならない。ところがクラウドパソコンでのRPA実行中はおうちパソコンから繋いでいない状態で放置しておくので、その間画面は物理的にはどこにも出力されていない。しかしRPAは人間には見えてないアプリのWindowの位置や内容をちゃんと把握して動いてくれている。その時画面の解像度がどうなっているのか? というのが私の疑問なのである。
結論から言うとクラウドパソコンでRPA実行中は、物理的に画面がどこにも出力されていなくても、モニターはつながっていることがわかった。XRandRというツールがあり、これはLinuxなどでX-WindowのResizeとRotateをやってくれるアプリなのだが、これでVNCは接続せずssh接続のみの状態で実行してみると、

$ xrandr
VNC-0 .....
$ xrandr
VNC-0 .....

クラウドパソコン側ではVNCアプリ(vncserver)が立ち上がっているので、それがモニターなのである。つまりvncserverが起動された時点ですでにOSから見るとモニターが接続されており、それをおうちパソコンからVNCアプリで見てるかどうかはOSやRPAにとってはどちらでも良いことだったのだ。なのでおうちパソコンからクラウドパソコンでRPAを実行する場合は、VNCで接続する必要はかならずしもなく、ssh接続だけで、

$ xrandr --output VNC-0 mode=1920x1080
java sikulix ...
$ xrandr --output VNC-0 mode=1920x1080
java sikulix ...

などと最初に解像度を指定して実行すれば問題ないことがわかった。おうちシンクライアントであるdynabook N40でマウス用アプリ(いわゆるデスクトップ)を立ち上げるのは正直少し辛くなってきてたのだが、コマンドラインだけからRPAを実行できることがわかったので、もう少し活躍してもらうことにしよう(笑。

 

 

シンクライアント

クラウドパソコンとして最初はAWS Workspacesを使っていたのだが、何故かRPAツールであるSikulixがうまく動作せず行き詰まってしまった(涙)。そのためWebARENA IndigoというNTT系列のサービスを使って、第2のクラウドパソコンとした。OSはおうちパソコンのdynabook N40と同じUbuntuにして、基本的には同じ構成とすることにした。dynabook N40はLinuxを入れてからサクサク動くものの、時々フリーズという致命的な現象がまだ解決していない。しかしこの構成ならたとえおうちパソコンがフリーズしてもクラウドパソコン側は作業状況がそのままキープされるし、RPA実行中ならそのまま実行を続けてくれている。
「あれ?それってシンクライアントってこと?」と思ったあなた、センスあります(笑)。はい、そのとおりです。シンクライアントというのは、今流行りの映画のタイトルとは全く関係なく、15年前からこの業界では既に一般的なIT上の概念として普及していたもので、thinなパソコンという意味である。thinの一般的な日本語役は"薄い"だが、ここではMac Bookのような薄型パソコンの事でなくて、機能がわずかしかないという意味である。つまり今回の言葉でいうとおうちパソコン側クラウドパソコンの画面を表示するだけでわずかの機能を実行するだけという意味である。なので比較的古くて遅いパソコンで十分とされていて、私のdynabook N40がその立ち位置に落ち着いたのはとても自然な流れで当然の帰結というべきかもしれない(笑)。

 

 

クラウドパソコンでAudacity #2

クラウドパソコンssh経由でVNCでつないで使っているのだが、全画面にして使っているとおうちパソコンと区別がつかないくらいサクサク動いて快適である。ただひとつ重要な問題があって、VNCのほとんどはをサポートしていないのである。サポートしているものが全くないわけではないようだが、今回のプロジェクト(笑)で対象にしているLinux対応で無料のものはまだ私は発見できていない。つまり普通のクラウドパソコンは原則音が使えないのである。その点AWS WorkspacesはVNCではないオリジナルのアプリなので音も標準で使えるのはさすがである。もともとYoutubeNetflixなどの動画サービス系はFireTVで見ればいいやと思っているので、大きな問題では無いのだが、音が出る系のVNCが見つかったらいつか試してみたいと持っている。と言うことで音がでないクラウドパソコンではあるが、Audacityを使ってみたらどうなるのか?という疑問があったのでやってみる。
AWS Workspacesでやったときは簡単に録音できたし、おうちパソコンに比べてかなり音質が良いというオマケつきだった。今回は正直試してみるまで実際のところどうなのかわからなかったのだが、結論としては何の設定も必要なく録音できてしまったAWS Workspacesの時と同様にAudacityと相性のよいPavucontrolをいっしょに立ち上げたのだが、実際には音はでないため出力デバイスにはダミー出力だけが表示されていて、他に選択肢が無いのでそのままで録音できたようだ。おうちパソコン側で音声出力を確認しながら操作できないのは少し不便だが、AWS Workspacesの時と同じ事情で音質は非常に良いし、期待以上の結果だった(笑)。

音が出ないクラウドパソコンでAudacity