2015年2月20日金曜日

.emacs.dを書き直す会 第一弾

ここのところ.emacs.dの秘伝のタレ化が進んで非常に汚く、重くなってきたので.emacs.dを書き直した。第一弾として特定のモードに依らない設定を書いた。

package.el(melpa)

Emacs 24からデフォルトで入るようになったpackage管理。非常に便利なので引き続き使う。公式レポジトリだけだと足りないのでmelpaも追加する。marmaladeは以前は入れていたがひとまず入れないでみる。

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize) 

init-loader

設定ファイルを分散して書けるようなもの。.emacs.d/inits以下に設定ファイルを書くと、辞書順に呼ばれる。

(require 'init-loader)
(init-loader-load)

twittering-mode

emacsからtweetするために必要。普段も使っていた。いつでも呟ける様にキーバインドを設定しておく。

(require 'twittering-mode)
(global-set-key "\C-xt" 'twittering-update-status-interactive)

appearance

特定のモードではなく背景色とかそういうもの。以前はXのクリップボードとemacsのコピーが同期されるようなものも書いていたが気がついたら勝手に同期されるようになっていた。背景色はthemeとかを使おうかと思ったが良さそうな色がなかったので”秘伝のタレ”を取り出した。

;;背景色の設定
( when window-system 
  (custom-set-faces
   '(default ((t
           (:background "#000040" :foreground "#e0e0e0")
           )))
   '(cursor ((((class color)
           (background dark))
          (:background "#00AA00"))
         (((class color)
           (background light))
          (:background "#999999"))
         (t ())
         ))))

;; フレーム透過設定
(add-to-list 'default-frame-alist '(alpha . (0.75 0.75)))
;; tool-barを消す
(tool-bar-mode 0)

;; C-h でbackspaceにする
(global-set-key "\C-h" 'delete-backward-char)

;; 括弧を強調表示
(show-paren-mode t)

helm

色々と便利な子。こいつがいないともうファイルも開けない。設定がよくわからなかったのでここも”秘伝のタレ”。

(when (require 'helm-config nil t)
  (helm-mode 1)

  (define-key global-map (kbd "M-x")     'helm-M-x)
  (define-key global-map (kbd "C-x C-f") 'helm-find-files)
  (define-key global-map (kbd "C-x C-r") 'helm-recentf)
  (define-key global-map (kbd "M-y")     'helm-show-kill-ring)
  (define-key global-map (kbd "C-c i")   'helm-imenu)
  (define-key global-map (kbd "C-x b")   'helm-buffers-list)

  (define-key helm-map (kbd "C-h") 'delete-backward-char)
  (define-key helm-find-files-map (kbd "C-h") 'delete-backward-char)
  (define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)
  (define-key helm-find-files-map (kbd "C-z") 'helm-select-action)
  (define-key helm-read-file-map (kbd "TAB") 'helm-execute-persistent-action)

  ;; Disable helm in some functions
  (add-to-list 'helm-completing-read-handlers-alist '(find-alternate-file . nil))

  ;; Emulate `kill-line' in helm minibuffer
  (setq helm-delete-minibuffer-contents-from-point t)
  (defadvice helm-delete-minibuffer-contents (before helm-emulate-kill-line activate)
    "Emulate `kill-line' in helm minibuffer"
    (kill-new (buffer-substring (point) (field-end))))

  (defadvice helm-ff-kill-or-find-buffer-fname (around execute-only-if-exist activate)
    "Execute command only if CANDIDATE exists"
    (when (file-exists-p candidate)
      ad-do-it))

  (defadvice helm-ff-transform-fname-for-completion (around my-transform activate)
    "Transform the pattern to reflect my intention"
    (let* ((pattern (ad-get-arg 0))
           (input-pattern (file-name-nondirectory pattern))
           (dirname (file-name-directory pattern)))
      (setq input-pattern (replace-regexp-in-string "\\." "\\\\." input-pattern))
      (setq ad-return-value
            (concat dirname
                    (if (string-match "^\\^" input-pattern)
                        ;; '^' is a pattern for basename
                        ;; and not required because the directory name is prepended
                        (substring input-pattern 1)
                      (concat ".*" input-pattern)))))))

日本語入力

日本語入力は普段\C-\ではなく[変換/無変換]を使っているのでその辺の設定をまずする。(2015/02/25修正)Emacs 24.3以降でinactive-input-methodがobsoleteになったので修正した。

;; IMEの設定
(define-key global-map [zenkaku-hankaku] 'toggle-input-method)
;; 変換キーでIME ON
(define-key global-map [henkan]
  (lambda ()
    (interactive)
    (if current-input-method (deactivate-input-method))
    (toggle-input-method)))

;; 無変換キーでIME OFF
(define-key global-map [muhenkan]
  (lambda ()
    (interactive)
    (deactivate-input-method)))

次にmozcの設定。

;; mozc
(require 'mozc)
(setq default-input-method "japanese-mozc")

auto-complete

コードを書くときとかにいい感じで補完してくれる子。emacs lispを書くにもこれがないとつらい。Cとか特定の言語に依存する設定は後で。

(require 'auto-complete)
(require 'auto-complete-config)
(ac-config-default)

magit

emacsからgitを操作するもの。そう言えば結構前は標準で入るVCからgitを使っていたが、VCはgitに特化しておらず色々とやりたいことが出来なかったのでmagitにした。git rebase -iに当たるものをmagit-statusじゃない場所からやるとか使用頻度の少ないキーバインドは消した。

(require 'magit)
(global-set-key "\C-xgs" 'magit-status)
(global-set-key "\C-xgb" 'magit-branch-manager)

iedit

共通部分を全部まとめて編集するもの。変数名とかを変えるときに便利。”\C-;”と書きたいがそれだと動かないのでこんな感じで書いた。

;; iedit
(global-set-key [?\C-;] 'iedit-mode)

Written with StackEdit.

2015年1月1日木曜日

AwkLike classを作った

Google Apps Scriptでawkみたいな行志向でパターンマッチして動かしたくなったのでAwkLikeを作った。 こっから先は後日追記する。

2014年11月20日木曜日

isimをcliで呼んでみた

ISEについているisimは実はcommand line interfaceがある。これを使ってguiを使わずにシミュレーションしようぜっていう話。ISim User GuideとかISim In-Depth Tutorialとかを参考にしている。

isimはGUI modeとCLI modeがあって、CLI modeだとtclの対話環境があってそれを使う。走らせるtestが事前にあるならbatch scriptを走らせることもできる。そうじゃなくても短ければ標準入力からpipeとかで与えると動く。何も考えなければ

 
  run all
とか
 
  run 10ms
とか与えればよい。終わったらexitで抜けられる。

これだと波形が見れないが、debugするのであれば波形を見たい。vcdファイルを吐けば良いが、isimのvcd出力はverilog用っぽくて情報が欠けているようだ。そこでisimの波形のフォーマット(?)のwcfgとwdbを使うと良い。

こういうtclのbatchを書いて、(fadd_sim.tclとする)

  $ ./fadd_sim -wdb fadd.wdb -tclbatch fadd_sim.tcl
のようなことをするとfadd_sim.wcfgとfadd.wdbが生成される。波形を見たいときはこんな感じで見ることができる。

  $ isimgui -open fadd.wdb -view fadd_sim.wcfg

isimで自動テストを回してみた

ハードウェアでも自動テストをやると捗るので自動テストを回してみた。自動テストをやるのにいちいち波形を見る方法は取りづらいので、想定される出力と一致するかのみを判定して、一致しなければsimulationを止める方法で正誤判定を行った。まず、isimの実行ファイルをcliで作るのには依存関係を記述した,prjファイルが必要である。

下記のようなprjファイル(fadd_sim.prjとする)を作る。この例だと、fadd_simを作るのにwork libraryのfadd.vhd,fadd_sim.vhd,fadd_stage1.vhd,fadd_stage2.vhd,fadd_stage3.vhd,right_shift.vhd,ZLC.vhdが必要だという意味である。

次にMakefileを書く。これは普通に書けば良い。


fadd_isim: fadd_sim.prj fadd.vhd fadd_sim.vhd fadd_stage1.vhd fadd_stage2.vhd fadd_stage3.vhd right_shift.vhd ZLC.vhd
        fuse -incremental -prj $< -o $@ fadd_sim
test: fadd_isim
        ./run.sh

最後にtestを回す次のようなスクリプトを書く(run.shとする)。

これを実行すると次のようになる。

[==========] Running 2 tests
[ RUN      ] fadd_isim
[  PASSED  ] fadd_isim
[ RUN      ] i2f_isim
[  PASSED  ] i2f_isim
[==========]
[  PASSED  ] 2 tests.

2014年9月22日月曜日

sizeがよくわかんないarrayの受け渡しをやってみた

Cで


void foo(int* xs,int length)
みたいなことやってる関数をC++11のstd::arrayを使って書き換えようとしたらどうなるのかと思ってやってみた.

とりあえず

  • まあtemplate使えばできるね
  • 呼び出し側もstd::arrayに変更する必要がある.
位のことは気がついた.

2014年9月9日火曜日

jenkinsをpowerpcのgentooにinstallした.

jenkinsをpowerpcのgentooにinstallしました.emergeだけで済まなかったので書きます.ibmのjreをinstallするところまではemergeの言うとおりにやっていればいいので省きます.まず,http://mirrors.jenkins-ci.org/war/latest/jenkins.warからjenkins.warをダウンロードします.これをとりあえずjava -jar jenkins.warで実行します.jreが正しくinstallされていればこれで127.0.0.1:8080につなぐとjenkinsのページにアクセスできます.

次にInstall Jenkins as a Unix daemonのshell scriptの部分のshell scriptを適当にpathの通っている場所に置きます.最後に

# useradd jenkins -m -U
# mkdir /usr/share/java/jenkins
# mv jenkins.war /usr/share/java/jenkins
# mkdir -p /var/lib/jenkins
# mv .jenkins/* /var/lib/jenkins
# chown jenkins:jenkins -R /var/lib/jenkins
# mkdir -p /var/log/jenkins
# chown jenkins:jenkins /var/log/jenkins
で終わりです.起動は作ったscriptをroot権限で実行すればいいです.停止はそれっぽいprocessをkill止めるしかないです.

これでjenkinsのinstallは終わりです.自動で起動したりとかproxyとかで80番ポートに飛ばしたりできます.

2014年8月17日日曜日

mac mini(初代)にgentoo linuxをinstallしてみた

家にあるmac miniをlinuxマシンにしようということでgentooを入れてみた.debianでも良かったがローリング・リリースが良かったのでgentooにした.

基本的にGentoo Linux PPC ハンドブックを読めばなんとかなるが時々原文と比べて古いので原文も参照した.実は今までpowerpcにlinuxをinstallしたことはなかったので色々と手こずった.

詰まったのは主にboot周り.yabootconfigで設定したままではbootできなかった. まずdriveが読めなかった.

filesystem unknown or corrupted
というerrorが出た.http://archives.gentoo.org/gentoo-ppc-user/msg_765cf3c4fac4c22c5130ae98cc4630b6.xmlなどを参考にして
device=/pci@f4000000/ata-6@d/disk@0:
device=hd:
に変更したところまずyabootでデバイスが読めるようになった.

が今度はhda3がないと言われた.kernel optionでPATA_MACIOを使うとhdaではなくsdaになるらしい.(というか今時ideがhdaになるほうのドライバを使っているlive cdにびっくりしたが)おとなしくrootをsda3に変更したところ無事bootできるようになりました.