難読化とthreading.Thread

 おおよそ日報のようなもの。昨日は少しやる気を取り戻して作業に取り組めた。手が止まった状態が続くと楽しさは半減し、苦手意識ばかりが動いてしまうから、とにかく集中して状況を打開する手を考えなければならない。それがプログラミングだったり勉強だったといった知的作業のときは、考えていることを全部発言しながら手を動かしてみると目先のタスクに目が向きやすくなるので割といい感じ。

 昨日も朝はニュースチェックから。昨日は高リフレッシュレートのゲーミングモニターが発売されるというものや、ルータの安全性をチェックするサイト、ワイヤレス充電の新規格Qi2などがニュースになっていた。


 読書はBashの運用効率を上げるべく、シェル芸について学んでいる。「難読化シェル芸の世界」といういい感じのタイトルの本で、難読化という目的のためにいろいろとコマンドのマニュアルを見ながら、その動作を学んでいる。非常に面白いし、Bashが一気に身近な存在に感じられるので、良い資料である。
 本を参考に、自分で作ってみたコマンドの一例を紹介すると、以下のようなものがある。
$(man exec|fold -1|head -1|tr A-Z a-z)$(man cp|fold -1|head -1|tr A-Z a-z)$(man head|fold -1|head -1|tr A-Z a-z)$(man open|fold -1|head -1|tr A-Z a-z) $(man head|fold -1|head -1|tr A-Z a-z)$(man exec|fold -1|head -1|tr A-Z a-z)$(man ls|fold -1|head -1|tr A-Z a-z)$(man ls|fold -1|head -1|tr A-Z a-z)$(man open|fold -1|head -1|tr A-Z a-z)

 これは 
$ echo hello
と同義で、コマンドのマニュアルは大文字のコマンド名で始まるということを利用したものである。例えば、先頭の$(man exec|fold -1|head -1|tr A-Z a-z)についてだが、まずはexecのマニュアルページを参照する。このページはEXECという文字で始まる。このマニュアルをfold -1で1文字ずつ折り返してやると、
E
X
E
C
という感じの文字列になって、これをhead -1 で先頭1行だけ出力すると E が出力される。これをtr A-Z a-zで小文字に直して、 e を得る。これをecho hello の各文字に対してやっていくと、一見して複雑そうなコマンド列を作れる。以下、実行例。

 夜間はプログラミングに取り組んだ。ミュージックプレイヤーのプレイリストの自動再生機能だが、非同期処理を使うのはやめた。asyncioを使って、1秒毎に特定のプロセスの状態をチェックして、処理がある状態であるときに特定のメソッドを呼び出す、みたいなことをやろうとしていたのだが、ドキュメントを読んでもそのイメージがあまりわかないし、asyncioの動作を学ぶこと自体が一つの山になってしまいそうな感じがしたからである。では、結局どう実装するのかという話だが、threadをおとなしく使うことにした。thread.Threadを継承したBackgroundCheckerみたいなクラスを用意して、こいつがプレイヤーのオブジェクトを受け得て、ミキサーが動いているか監視するようにしようと思っている。クラスが追加されたので、クラス図等も少し書き直しが必要かもしれない。普通ならメインループ中の実装で全て片付くところなのだが、py_cuiがループを取ってしまっているので、それが非常に難航しているという状況。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。