2017年12月25日月曜日

ターミナルでのディレクトリ移動 (favdirとautojump)

favdir が、いい

terminal(bash) で、ディレクトリ移動のブックマークに favdir を使っている。 とても便利で手放せないツールになっているのだが、私がヘタレで、 時々ブックマークを上書きしてしまう。 サブディレクトリ名を同じになってる場所が多いみたい。
で、少し役割分担させようと思い、 pushd などを試すことにした。 favdir は、 ranger のブックマーク程度にして、 細々したとこは pushd とかで賄おうではないかという事。

pushd と popd、 alias

昔ながらの、pushd と popd は、情報は豊富、ではないみたい。 大まかな理解と設定は、
alias は、下のサイトを参考に設定。
これで cd を使うのとキーストロークは変わらないし、 なにげに、 .... や、 cd.... での移動が心地いい。あと、 cd - があるとは、初めて知った。 

手に馴染むまでだいぶかかりそうだけど、しばらくは試してみる。

autojump

pushd popd が今ひとつ馴染んでこないので、autojump という履歴を追っかけてジャップするものをインストした。 Debianにはパッケージがあるので aptでインストすれば良い。 ソースからならここ
Debianなら、インスト後、 .bashrc . /usr/share/autojump/autojump.sh を追加しておけば ターミナルを開いた時、有効になる。
 使い方は、zsh使いなら効率改善のため知っておきたいAUTOJUMPが分かりやすかった。 これに追加するなら、以下ぐらいかも。
  •  登録情報の確認  : j -s
  • 複数キーワードが可能 : j py cue
コマンドで移動した分だけデータが蓄積されるので、これが利用できるのに期待。 Debian の場合、登録情報は、 .local/share/autojump/autojump.txt に保存される。 あと英語だけど、ここ の説明が良かった。 これで、 gg j の使い分け。 ちなみに gg での移動もautojumpに蓄積される。 手に馴染むまでだいぶかかりそうだけど、しばらくは試してみる。

2017年12月19日火曜日

初めての中国茶

そろそろ亀岡方面へ出かけるのも億劫になってきたので、 少し気合を入れ、篠山まで足を伸ばしてみた。 帰路は太ももがつり始めて、大変だった。

篠山で中国茶を頂いた。 初体験だった。お店は - 岩茶房丹波ことり - で、 落ち着いた雰囲気の喫茶だ。Webの写真ほど美しくはないが。

石観音というお茶を頂いた。 お店の人の説明に従い、6服ほど頂いた。

1服めは、すこし驚いた。2服目は苦さが際立つ。

3服めは落ち着いた感じだが、1服めとも随分異なり、 マイルドで物足りなさを感じる。その後は、水分補給的な飲み方になる。 しかし、こんなに印象が変わるのかと驚いた。薄い濃いではなかった。
お茶の種類によっても感じ方が異なるのかもしれない。

お茶を頼むと、もれなく茶菓子(ドライフルーツとクッキー)が付いてくる。 これが、お茶に合うのかとなると、私には、コントラストが強すぎて、 それほど好きにはなれなかった。

お茶のインパクトが小さくなれば、 一つ一つは美味しくいただけるし、また食したいと思うのだが、 もう少し穏やかな茶菓子が私にはよいかも。

近所の喫茶店リストに中国茶を加えたくなった。探してみよう。

2017年12月17日日曜日

「コマ図+キューシートみたいなの」まわりを、ブロック図で

 年末なんで、ちょこちょこ作業してきた内容を整理してみた。赤字は次にscriptに入れようとしている内容。でも、バグとりやスケール調整がなかなか終わらない。地図の色合い調整も必要だ。
  • Debian Stretch 4.9.65-3 (2017-12-03) x86_64
  • pyenv + Python 3.5.4


 上の図は、emacs の babel-mode で graphviz を使った作成してみた。
遠い昔の、これを少し左に寄せろとか、上下ずれてるのを直せとか、なかみがないおかしいな管理職の指摘がなつかしい。上のような図はさすがにだが。

 少しズルをして、赤字を入れ込んだ。近接アラームは、gpxのextentionになるのだが、pythonのgpxpyは、extentionをサポートしてなかった。Waypointを吐き出した後、置換するというやり方になった。やはりETを学ぶ必要があるのだな。

2017年12月16日土曜日

Emacs で Python してる時の 検索移動、選択編集について(201908up)

python を少しづつ使ってて、検索を使う回数が増えてきた。 emacs(elpy)を使っていて、 occur で検索、必要に応じて編集というのが便利、たまに imenu-list で定義に飛ぶという程度。で、たまに、ディレクトリ内で grep(ag)を使うこともあるが、 キャッシュディレクトリ(.mypy_cache)が検索にふくまれてしまい、ああああ、とかで、遊ばれている状況だ。 で、検索とかにだけ着目して整理してみた。
「探して、飛んで/抽出して、編集して、戻る」が基本だと考え、スパゲッティになっているinitsの中身を眺めてみたのだが、結構時間を食った。 で、 おおよそ5つの方法だった。自分で把握してないのが怖い。 キーバインドのバッティングも見つけた。コピペで設定とはそうゆうことなんだろう。
  1. スクリーン表示中の 文字(1 or 2 文字のみ)へ移動
    • avy (GitHub - abo-abo/avy)
    • avy-migemo(エラーを吐くようになった201902。私の設定が原因? avyの関数名とかの更新に対応してないのが原因かも?)
      • ace-jump-modeに変更した(201902)
      • avy-migemo-e.g.ivy, avy-migemo-e.g.swiperは動くので、key-bindを切ってivyの方だけでmigemoを使用(201902)。
      • ついに動かなくなった(201905)。
      • 暫定復活(201908)。 ここに情報があった。
        すごい。ありがたい(リンクミスを修正)。
    • 狭い画面なんで、あまり使わないが、スクリーン内の移動は早い。
    • 指が覚えてほしい。2文字の方を優先している。 (201902)
  2. 今、編集中のファイルから絞り込み検索、移動
    • counsel    isearchの代わり GitHub - abo-abo/swiper: Ivy
    • ivy-occur    mini-bufferからoccurへ
    • occur         emacs の標準、選択編集したい時だけ
    • color-moccur       migemoが使える
    • (imenu)       emacs の標準
    • (imenu-list)     平滑imenuのサイドバー表示  GitHub - bmag/imenu-list
  3. 読み込んでる全ファイルから絞り込み検索、移動、選択編集
  4. ディレクトリ指定(配下)で検索、jump、選択編集
    • ag から wgrep + wgrep-ag
      • 除外指定(ag)は  ~/.agignore に。
    • counsel-ag   か counsel-rg
      • たまに使う。counselとの連携。
    • multi-occur (>23 buildin)(201904) 使ってない
      • multi-occur :: To select buffers to search individually
      • multi-occur-in-matching-buffers :: To select buffers to search by regexp
  5. 予め定めた範囲内での検索、移動
  6.  カレント配下を検索、移動(201811)、編集(201903)
最近、gtagsも動くようにしたのだが、 moccurより検索、移動は快適で、定義場所に飛んでくれるのはありがたい。一方、moccurは編集が付く。初心者の私にはgtagsは無用の長物みたい使い分けがまだうまくなじまない。2−4を使い分ければ十分みたい。
意外とdeadgrepがよさげだったりする。(201902)

最近(201808)は、moccur, counsel-gtags と counsel-ag がほとんどになったと思う。imenu は使わなくなってる。

(201902) 意外とdeadgrepがシンプルでよかったりする。 deadgrepのサイトに、他との比較例が ある。 gitを使ってなくても、git initしておくと良い。自動でpathを設定してくれるパッケージが多いように思う。

(201903) deadgrep に deadgrep-edit-modeが追加された。 moccur の方がきちんと編集できるみいたいだが、簡単な修正なら、これでもよさそう。

(use-package deadgrep :ensure t
:bind (
  ("M-s d" . deadgrep)
  :map deadgrep-mode-map
  ("r" . deadgrep-edit-mode)  ;; interactive
  :map deadgrep-edit-mode-map
  ("C-c C-c" . deadgrep-mode)
  ))

2017年12月11日月曜日

エディタ(emacs)からブロック図 (201806 Mermaidの追加)

 簡単にダイアグラムを描きたい

テキスト入力はそれなりに出来るようになってきたし、 図の挿入もそれほど苦痛ではなくなってきた。でも 図の作成、加工作業が面倒い。 キャプチャとか写真とかの加工は、imagemagic と gimp。 ドロー系は inkscape、 ラスタは gimp、pinta を(ちょっと)使ってる。 簡易CADはまだ触ってない。(WinだとHOcadとかJW-cadだった) librecad とかかなあ。
あと、フローとかブロックとかどうするのか決めてない。 大昔、tgif とか dia を使ってたとように思うので、インストしてみるが、 日本語入力対応がダメなのは、tgif は今も変わらない。dia は、 `dia –classic` でないとだめ。
で、調べてみた。
webベースで無料は制限付きというのが多いのに驚く。候補は、 draw.io とPencil Project ぐらい。 それなりに真剣に作りましょう、というやつがほとんど。なんか、libreofficeでいいじゃん、と思ってしまった。 せっかくなんで、エディタから離れないで使えるツールを試してみることにした。 (どうせなら、emacsのorg-modeのbabel-mode で使えればよい)
データのビジュアル化を最少の労力で: はじめに とはスタンスが違う。

 blockdiag(blockdiag,seqdiag,actdiag,nwdiag) を試す

  • documents - blockdiag の概要 — blockdiag 1.0 ドキュメント -
    • ブロック図 (blockdiag コマンド)
    • シーケンス図 (seqdiag コマンド)
    • アクティビティ図 (actdiag コマンド)
    • 論理ネットワーク図 (nwdiag コマンド)
  • pip でも、apt でもインストできる。
  • reStructured に埋め込んで、sphinx(要extension)で使える。
  • emacs の babel-modeも OK。GitHub - corpix/ob-blockdiag.el: Org-babel blockdiag support
  • 覚えることは少なそうで、yasnippetsとautoinsert にサンプルを設定しておけばよさそう。
  • フォントの共通設定ができる
    $ cat $HOME/.blockdiagrc
    [blockdiag]
    fontpath = /usr/share/fonts/truetype/migmix/migu-1m-bold.ttf
サンプル
blockdiag {
      span_height = 80;  // default 40
      // orientation = portrait

      A [label = "大阪"];
      B [label = "京都"];

      C [label = "東京", fontsize=20];
      D [label = "茨城", fontsize=20];
      E [label = "埼玉", fontsize=18];

      // Set labels to edges.
      A -> B [label = "通学", textcolor="red"];
      B -> C [label = "就職", folded]; // 改行
      C -> D [label = "転勤"];
      D -> E [label = "転勤"];
   }

 ditaa を試す

 ditaa は、アスキーで描いたのを図化してくれる。  versionは 0.9 みたいだが、ここ5年ぐらい動きがないように見える。
debianでは、 ditaa/stable,stable,now 0.10+ds1-1.1 になる。
日本語を入れるとずれるというのはよく知られているみたいで、 日本語の後に半角スペースを入れれば良いようだ。 全角の数だけずらすことになる。
サンプル
+---------+
| 夏 の 練 習 |     +-------+
| 腕 立 て   |     | こ れ で |
| 腹 筋     +-----+ 大 丈 夫 |
| 懸 垂     |     +-------+
| ラ ン     |
+---------+

[201812] ob-ditaa.el で '~/.emacs.d/elpa/contrib/scripts/ditaa.jar' を使うようになったみたいで、 動かなくなっていた。パスは環境によって違うようだが、ソフトリンクを貼れば動く。 私の場合は、'cd ~/.emacs.d/elpa/contrib/scripts', 'ln -s /usr/share/ditaa/ditaa.jar ditaa.jar'。

 graphvizを試す

どんなものかという説明は、 Graphvizとdot言語でグラフを描く方法のまとめ - Qiita なんかが 分かりやすかった。なんか、よさげだと思う。標準化というか、なんか。 org-babel にもデフォで入っている。
でもディープそう。 debianのデフォのパッケージは以下。
graphviz/stable 2.38.0-17 amd64
graphviz-dev/stable,stable 2.38.0-17 all
graphviz-doc/stable,stable 2.38.0-17 all
単純な図を描こうってことだったから、不要かもと思ったが、 やってみたら、特に問題もなくsampleが動く。
サンプル
digraph gname{
graph [
    charset = "UTF-8";
    label = "Sample graph",
    labelloc = "b",
    labeljust = "c",
    bgcolor = "#f8f8f8",
    fontcolor = black,
    fontsize = 18,
    style = "filled",
    rankdir = LR, // LR TB BT RL
    margin = 0.2,
    splines = spline,
    ranksep = 1.0,
    nodesep = 0.9,
    layout = dot //  layout = dot  circo  fdp  neato  osage  sfdp twopi
  ];

// node common define
node [
    colorscheme = "rdylgn11"  // http://www.graphviz.org/doc/info/colors.html
    style = "solid,filled",
    fontsize = 14,
    fontcolor = 6,
    fontname = "Migu 1M",
    color = 7,
    fillcolor = 11
  ];

// edge common define
edge [
    // label = "",            //エッジラベル
    labelfloat = true,        //ラベルの重なりを許可
    labeldistance = 2.5,      //ラベルの位置をノードからの距離で指定
    labelangle = 70,          //ラベルの位置を角度で指定
    color = blue,             //エッジカラー
    style = solid,            //エッジスタイル
    arrowhead = normal,       //エッジの終端の形状を指定
    arrowtail = normal,       //エッジの始端の形状を指定
    arrowsize = 1,            //矢印の大きさ倍率で指定
    weight = 5                //エッジの重み付け
    fontname = "Migu 1M",     //エッジラベルフォント
    fontsize = 14,            //エッジラベルフォントサイズ
    fontcolor = blue          //エッジラベルフォントカラー
  ];

// node define
  a1 [
      label = "<pl> 左|{<pc> 真中|{<pt> 上|<pm> 中| 下}}|<pr> 右",
      // {} で ネストの方向が変わる
      shape = record,              //ノードの形を指定
      fixedsize = true,         //ノードの大きさを指定可能に
      width = 2.5,              //ノードの幅(インチ)
      height = 1.8,             //ノードの高さ(インチ)
      style = "solid,filled"    //ノードの枠線のスタイルと塗つぶし指定
      color = "#336666",        //ノードの枠線の色
      fillcolor = "#DDBBAA",    //ノードを塗りつぶす色
      fontname = "Migu 1M",     //ノードラベルフォント
      fontsize = 16,            //ノードラベルフォントサイズ
      fontcolor = blue          //ノードラベルフォントカラー
     ];
  a2 [shape = Msquare];
  a3 [shape = trapezium];
  a4 [shape = egg];

  // edge define
  a1:pr -> a2 [label = "a1-a2", arrowhead = normal];
  a2 -> a3 [label = "a2-a3"];
  a3 -> a4 [label = "a2-a4", arrowhead = tee];
  a3 -> a1:pm [label = "a3-a1", style = dotted];
  a4 -> a1:pl [arrowhead = crow];
}

問題なく動くことは確認できた。あとは、私が使いこなせるかが問題。

 plantUML を試す

こいつもディープそうだ。HPはここで、Debian にパッケージ(plantuml/stable,stable,now 8039-1)があるので入れておく。パッケージだと、PlantUML Launcher Script が セットされるので、terminal から plantuml というコマンドで使える。 emacs のbabelにもはデフォで含まれる。メジャーモードは、ここ
(setq plantuml-jar-path "/usr/share/plantuml/plantuml.jar")
(setq auto-mode-alist
       (append '(("\\.plantuml\\'"  . plantuml-mode)
                 ("\\.puml\\'" . plantuml-mode)
                 ) auto-mode-alist))
サンプル(babl)
#+BEGIN_SRC plantuml :file imgs/plantuml01.png :cmdline -charset UTF-8
skinparam monochrome true

actor プロモーター
actor エントラント

プロモーター --> (Create Event)
プロモーター -> (Attend Event)

エントラント --> (Find Event)

(Attend Event) <.. (Create Member)  : <<include>>
#+END_SRC

 Emacs の babel-mode

上の方法はいずれも、emacs の babel-mode で使えるので、 簡単なブロック図を描くのにエディタから離れる必要はなくなるかも。
babel-mode については ここの日本語説明がある。やはり日本語はありがたい。なんとなく使ってたbabel-modeを少しは理解できたかも。


例えば、blokdiag の actdiag は、以下のようにしておいて、C-c C-c で評価すれば、 図がカレントのimgs/ に保存される。
#+BEGIN_SRC blockdiag :tool actdiag :file imgs/actdiag.png :size 400x600 :font /usr/local/share/fonts/Cica-Bold.ttf
actdiag {
  write -> convert -> image

  lane user {
     label = "ユーザー"
     write [label = "Writing reST"];
     image [label = "Get diagram IMAGE"];
  }
  lane actdiag {
     label = "プログラム"
     convert [label = "Convert reST to Image"];
  }
}
#+END_SRC

 で、今後

blockdiag と、 graphviz を keep しといて、 少しは使えるようになりたい。
できればplantumlも。plantumlは、Pelicanのプラグイン設定で、そのまま図入りHTML化してくれる(restではサンプルが通るけど、markdownではエラーになるのがある)。とりあえずは、図のサイズ調整の設定かな。

mermaid を試す[20180606]

org-modeの babelで、Mermaidが使えるようになったみたい。
Mermaid, mermaid.cliと、 ob-mermaidをインストすればよいのだが、 mermaid.cli の Readme の `Linux sandbox issue` の部分にあるように、`--no-sandbox` の設定が必要で、 puppeteer-config.json ファイルを作って `-p` で ファイルを指定すれば動いた。日本語も通るようだ。
emacs では、 ob-mermaid の ob-mermaid.el に一行追加してなんとかクリア。 他のスクリプトと少し挙動が異なるのが気になるが、無視。
   (concat (shell-quote-argument (expand-file-name ob-mermaid-cli-path))
       " -p " "~/.config/puppeteer-config.json"   <<-- これ
       " -i " (org-babel-process-file-name temp-file)
       " -o " (org-babel-process-file-name out-file))

で、サンプル。

#+begin_src mermaid :file imgs/mermaid_03.png
graph LR;
    id0>にほんご] ==> id1[えいご];
    id0 --> id2(どいつご);

    subgraph まかせた
    id1 -.- |へんかん| id3((すぺいんご));
    id2 -.-> id3;
    end

    subgraph ふめい
    id3 --> |へんかん| id4{いたりあご}
    end
#+end_src

もっとスマートな方法があるとは思うが、まあ、HPのサンプルは、動いたので良しとする。

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...