Saturday, August 13, 2016

Termux つかってみる

Android でEmacs動かすための便利端末アプリとして一部で有名なtermuxを使ってみました。ということで設定作業メモ。

ssh とgitあたりがうごかべよいので

apt install openssh git emacs


ssh-keygen -f .ssh/hogehoge -C [username]@[hostname]
-f は標準のid_dsa.pubじゃなくて好きな名前をつけるオプションでこれはやらんほうがよかったかも。
vi .ssh/config で とりあえずファイル名をデフォルトにしてなかったらIdentityFileで指定

git clone ssh://username@hostname/path/to/repo
でとりあえずチェックアウトできたので満足。


最低限の開発ツールもインストール

apt install nodejs clang

なんかgccいれようとしたらclangしかないと怒られる。
今週gccからclangに切り替わった。
そしてninja がない。makeはある。

make  とclangがあればそれなりに手元での開発はできるのかな。


apt install python
ninjaはセルフビルドしてみる。


/usr/bin/env, /bin/sh がないのでいろいろなスクリプトがそのまま動かない。

alt が通らない気がする。
ctrl-t、ctrl-nとかctrl-wとかが通らない


Tuesday, March 10, 2015

tramp + shell のリモートシェルで emacsclient を使うには

Emacs で tramp をつかっているときにM-x shell で起動するとリモートホストのシェルがあたかもローカルのシェルであるかのように快適に利用できるのだけど、一つ欠点があって、そこからのコマンドラインから起動するエディターに快適なのがあまりない。
emacsclient をリモートソケット経由で操作するハックとかいろんな工夫が行われているっぽいんだけどしっくりこないのでちょっとしたクイックハックしてみた。

基本的にはリモート側でemacsclientの代わりになるスクリプトを作ってあげてEDITOR環境変数に指定してあげればよい。

そしてそのスクリプトの内容はローカルのホストにsshでemacsclientを起動するようにして、trampの/ssh:hostname:/path/to/file 形式で指定してあげればよい。

こんな感じ

#!/bin/bash
SERVER=your-local-hostname
ssh $SERVER emacsclient /ssh:$HOSTNAME:$(readlink -f "$1" )

sshのコネクション張りっぱなしでパスワード聞かないこと前提。


#!/bin/bash
SERVER=junichi2.i
ssh $SERVER emacsclient /ssh:$HOSTNAME:$(readlink -f "$1" )

Thursday, February 12, 2015

gdb で求める条件のブレークポイントまで頑張る

なんかある関数があってそれが特定の値が出るまで回るってどうやるのかなと思って調べたのだけど毎回忘れるのでメモ。
とりあえずはGDBのループ構文とかがあるのでそれを使えばよい。
たとえば
void Function(int p) {}

があってp == 0じゃない場合がくるまで待ちたいなら

b Function
while ParameterValue = 0
  continue
end
とかすればよいっぽい。


追記
コメントもらったんだけど、このケースだと break xxx if という構文が使えて

b Function if ParameterValue !=0
とすればよいっぽい。

Sunday, June 22, 2014

git branch

git で開発用ブランチをつかいまくるワークフローを活用しているとどんどん増えてきてよくわからなくなってきます。
タグにディレクトリを作って管理するというのもよいのですが、そもそも最近のブランチしか気にしないというライフハックも便利です。

git for-each-refをつかってgit branch をカスタマイズしてみましょう。

手元では
git for-each-ref --count=10   --sort='-committerdate' refs/heads   --format='%(committerdate:short)%09(%(committerdate:relative))%09%(refname:short)%09%(subject)'

として最近コミットしたブランチを表示させてます。



Monday, March 10, 2014

dshell


emacs でカレントディレクトリでシェルを起動する。
個人的にはemacsをシェルとして使っていてこれが多分いちばんemacsで利用する機能。emacs 依存。

(defun dshell (my-default-directory)
  "run shell in current directory.

Uses MY-DEFAULT-DIRECTORY as the current directory, and uses that
as the buffer name."
  (interactive (list default-directory))
  (let* ((default-directory (expand-file-name my-default-directory))
;;(explicit-shell-file-name "/bin/dash")
(shell-buffer-name
 (concat "*shell*"
 default-directory)))
    (shell shell-buffer-name)))

Tuesday, October 22, 2013

アンケートの内的整合

Cronback's Alphaという尺度がある。

これはアンケートとかを設計するときに使う方法で複数の同じような答えが期待される質問にどれくらい同じように答えてくれているかということをもってその質問の答えがどれくらい信頼出来るのかを計測する尺度らしい。

アンケートや心理テストで似たような質問や逆の質問が複数なされるのはこの手法をつかうためなのかな。

http://en.wikipedia.org/wiki/Cronbach's_alpha

Friday, September 27, 2013

ssh のクライアント側の設定メモ


手元のssh 関連の設定をまとめてみた。


・ControlMasterで接続を再利用すると高速になるので便利。
手元ではこんな設定にしている。

ControlMaster auto
ControlPersist 120
ControlPath ~/tmp/ssh-%r@%h:%p


ControlPersistとすると、ssh が親プロセスが1のdaemon プロセスになってくれてコネクションを張りっぱなしにしてくれる。

デフォルトで設定されているとマニュアルには書いてあるんだけど、手元ではControlPath指定しないと動かなかった。なんでだろう。
ホームディレクトリ以下の tmp にしているのはファイル名の衝突について心配しなくてよいように。

ControlMasterをAutoにしておくとすでにコネクションが開いていない場合はデーモンをたちあげてもしコネクションが開いている場合にはそれを利用するように。


・コネクション Keep-Alive 関連の設定

試行錯誤しているんだけどこれくらいがいいのかな。
ServerAliveInterval 3
ServerAliveCountMax 5

・パソコンがsleep から復活した時に再接続する設定
大抵ネットワーク接続の構成が変わったらssh のコネクションは終了して再接続するべき、だと思うんだけどまだそういう設定ができる方法は発見しておらず。
dbusのイベントとかでおしえてくれないんだろうか。


・ホスト名を適当につける
DNSの登録設定とか面倒なのでsshでしか使えないホスト名みたいなものが作れる。ssh経由でつながるtrampとかではつかえるので便利。bash のsshのコマンドライン補完でも使えるし。

・*.local用の設定
Mac のRendezvousとかLinuxのAvahiとか設定しているとホスト名.local という名前で名前解決ができるようになるけどIPアドレスは毎回変わるのでホストIPをチェックしないようにする。

Host *.local
  CheckHostIP no




あとついでに公開鍵認証にしておくとよさげ。

Host raspberrypi.vpn
  Hostname そのホストのIPアドレス
  IdentityFile ~/.ssh/ssh-keygenで作ったファイルのパス
  IdentitiesOnly yes