29 Dec 2016, 04:06

fish で 最近訪れたディレクトリに peco で選択して移動する

fish シェルを使っていて、最近訪れたディレクトリに peco で選択して移動する方法を紹介します。

zsh のときは

最近訪れたディレクトリをどうやって覚えるかが最大の課題だった。 zsh のときは、zsh の組み込み関数があったので以下のように対応していた。

# ------------------------------------------------------------------------
# Name     : cdr
# Function : 最近訪れたフォルダへ移動
# ------------------------------------------------------------------------
autoload -Uz is-at-least
if is-at-least 4.3.11
then
  autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
  add-zsh-hook chpwd chpwd_recent_dirs
  zstyle ':chpwd:*' recent-dirs-max 5000
  zstyle ':chpwd:*' recent-dirs-default yes
  zstyle ':completion:*' recent-dirs-insert both
fi
# ------------------------------------------------------------------------
# peco-recentd
# 最近訪れたディレクトリに移動
# ------------------------------------------------------------------------
function peco-recentd () {
    local selected_dir=$(cdr -l | awk '{ print $2 }' | peco)
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-recentd

fish 版 z の導入

fish で、最近訪れたディレクトリをどう管理するか? z という fish 用のライブラリがあり、これが利用できそうだ。

以下のコマンドで最近訪れたディレクトリの一覧を取得できる。

$ z -l 

peco と組み合わせる

以下のような関数を用意した。これを config.fish に書くか、 .config/fish/functions ディレクトリ配下に peco_recentd.fish ファイルを作成して書けばよい。

function peco_recentd
        z -l | peco | awk '{ print $2 }' | read recentd
        cd $recentd
end

キーバインドを以下のように設定する。.config/fish/config.fish に以下を記述。

function fish_user_key_bindings
        # 最近見たディレクトリに移動
        bind \cx\cr peco_recentd
end

これで、zsh でできていた、選択的ディレクトリ移動が fish でもできるようになった。

24 Dec 2016, 08:18

デフォルト設定で強力に便利!zsh から fish に乗り換えたまとめ

3 年間くらいずっと zsh を使ってきたけれども、fish という新しいシェルに移行しました。

[toc]

環境

  • Ubuntu 16.04 LTS
  • fish 2.4.0

fish とは

賢くて、ユーザーフレンドリーなコマンドラインシェル。

  • fish shell

    Fish の由来は、Finally, shell らしい。

なぜ fish に乗り換えようとしたか?

るびきち(@rubikitch)さん の書いた記事に煽られたからです。

そんなにすごいものなのか?るびきちさんは、 Emacs の先駆者としてとても尊敬しているので、 そんな彼が進めるのならば、いいものなのではないか?

新しいものが好きなので、早速試してみました。

ちなみに、Google トレンドによると、だんだん上昇しています。

fish のインストール

各ディストリビューションによって異なる。Ubuntu の場合は、

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update
sudo apt-get install fish

いよいよデフォルトのシェルを zsh から fish に乗り換え

以下のコマンドで乗り換える。心の準備はいいかい?

chsh -s `which fish`

設定ファイルの移行 .zshrc -> config.fish

現状の.zshrc はこんな感じ。

これを config.fish に移行しなければいけない。。621 行の移行。これは大変だぞ!

どこから手をつけようか? と、その前に fish-mode.el の導入。

Emacs major mode for fish shell scripts.

(require 'fish-mode)

これで、作業が楽になる。

まずはコピペから

.zshrc を config.fish にコピペする

cp $HOME/.zshrc $HOME/.config/fish/config.fish

そのままだとエラーが多発するので、とりあえず、全部コメントアウト。

zsh 関係の設定は全武消す

ここは、思い切って消してしまう。fish の魅力を信じる。

alias の移行

以下の形式でかけるので、zsh と変わらない。zsh らしさをなくすために=を除去する。

alias NAME DEFINITION
alias NAME=DEFINITION

~/.config/fish/alias.fish に alias と関数をまとめていく。 そのためには、config.fish 冒頭に以下を追記。

. ~/.config/fish/aliases.fish

alias は関数を簡単に書いたものらしい。

file / directory の存在確認

以下でできる。

file:

if test -e ~/.foobar
    echo "File exists"
end

directory:

if test -d ~/.hello
    echo "Dir exists"
end

プログラムの存在確認

if test -x "emacs"
   function fish_title; end
end

関数の移行

関数は以下の function - end で挟み込む。

function dual
        xrandr --output eDP1 --primary --left-of HDMI1 --output HDMI1 --mode 1280x720
end

Emacs の関数たち

# Emacs で dired をひらく
function dired 
        emacsclient -e "(dired \"$PWD\")"
end

cde が移植できませんでした。

PATH の移行

環境変数は .config/fish/env.fish にまとめることにする。以下を config.fish にかく。

if status --is-login
    . ~/.config/fish/env.fish
end

PATH は以下の形式で設定する。set -U がポイント。

set -U fish_user_paths /usr/local/bin $fish_user_paths

プラグイン

oh-my-fish

  • fish shell をさらに魅力的にしてくれるツール.

17@112:追記 : fisherman を使った方がよい。

curl -L http://get.oh-my.fish | fish

インストールすると、画面がカラフルになる。さまざまなフレームワークを含んでいるらしい。

詳しくは README.md で!

function fish_user_key_bindings
        # ghq を選択
        bind \cl peco_select_ghq_repository
        # コマンド履歴を見る
        bind \cr peco_select_history
        # プロセスをキルする
        bind \cx\ck peco_kill        
end

テーマの設定

ここから好きなテーマが選べる。

迷うからデフォルトで

omf theme default

powerline

かっこいいパワーラインを入れてみる。

と思ったけれども、かっこ悪いので封印。

z

訪れたフォルダにジャンプ。

完成した設定ファイル

config.fish

# alias & function 読み込み
. ~/.config/fish/aliases.fish

# 環境変数読み込み
if status --is-login
    . ~/.config/fish/env.fish
end

env.fish

export LANG=ja_JP.UTF-8
export LD_LIBRARY_PATH=/usr/local/lib
export LIBRARY_PATH=/usr/local/lib
export CPATH=/usr/local/include

if test -d ~/script
        set fish_user_paths ~/script/sh $fish_user_paths
        set fish_user_paths ~/script/ruby $fish_user_paths
        set fish_user_paths ~/script/scala $fish_user_paths        
end

set -x EDITOR emacs
set -x VISUAL "emacsclient -nw"

# for ruby
if test -x "`which ruby`"
        set fish_user_paths $HOME/.gem/ruby/2.1.0/bin $fish_user_paths
end

# for go
if test -x go
        set -x GOPATH $HOME/go
        set fish_user_paths $GOROOT/bin $fish_user_paths 
        set fish_user_paths $GOPATH/bin $fish_user_paths 
end

# my bin
set fish_user_paths $HOME/bin $fish_user_paths

aliases.fish

alias o ‘xdg-open’ alias c ‘cygstart’ alias forced_git_local_destroy ‘git fetch origin;git reset –hard origin/master’ alias xmap ‘xmodmap ~/.Xmodmap’

alias m ‘emacsclient -nw’ alias kill_emacs “emacsclient -e (kill-emacs)“” alias boot_emacs “emacs –daemon”

function reboot_emacs kill_emacs;boot_emacs end

alias lock ‘gnome-screensaver-command -l’

alias fault ‘sudo shutdown -P now’

####################################### ## peco ###################################### function peco command peco –layout=bottom-up \$argv end

function fish_user_key_bindings

bind \cl peco_select_ghq_repository

bind \cr peco_select_history

bind \cx\ck peco_kill end

#######################################################

#######################################################

function dual xrandr –output eDP1 –primary –left-of HDMI1 –output HDMI1 –mode 1280x720 end

function dual2 xrandr –output eDP1 –primary –left-of HDMI1 –output HDMI1 –auto end

function single xrandr –output HDMI1 –off end

############ ## Emacs ########### function dired emacsclient -e “(dired “\$PWD)” end

## Chdir to the ``default-directory” of currently opened in Emacs buffer. function cde end

#+end_src

使ってみた感想など

メリット

  • 軽い

    体感だけれども、zsh よりも、サクサク動作する気がする。

  • 色鮮やか

    デフォルトでも十分色鮮やかだ。黒背景にカラフルな色が好きな自分にとってはうれしい。

  • 設定がとても簡単

    驚くほどに簡単だ。zsh の職人技じみた設定はなんだったのだろうか?

    デフォルトで強力な機能が備わっている。

    設定ファイルをみても、zsh では 600 行あったものが 100 行程度に収まっている。

  • 補完がつよい

    困った時は、タブを押す。 すると、補完がきいて助けてくれる。この機能が一番気に入っている。

デメリット

  • ドキュメントやブログ記事が少ない。
  • 利用者がまだまだ少ない。

    このことによって、他人の設定を参考にすることができない。

  • zsh でできたことが fish でできなかったりする

    zsh では、いろいろと自作関数をつくって便利にしたのだけれども、 fish では同じ機能が実現できなかった。たとえば Emacs との連携など。 時間をかければできるかもしれない。暇な時にハックしよう。

参考

21 Dec 2016, 13:27

Emacs で Racket 開発環境を構築

coursera で Programming Languages , PartB を受講し始めた。

開発環境で DrRacket(Racket をインストールするとついてくる開発環境)が指定される のだけれども、Emacs Love な自分はどうしても Emacs からやりたかったので、 Emacs で Racket 開発環境を構築した。

環境

  • Ubuntu 16.04 LTS
  • Racket v6.3

Racket のインストール

sudo apt-get install racket

これで /usr/bin/配下に racket がインストールされる。

優れた IDE の条件

優れた IDE が備えるべき機能は以下.

  • シンタックスハイライト/ インデント
    • racket-mode, aggressive-indent
  • 検索・置換 iedit, multiple-cursors, helm-ag, helm-swoop
  • タグジャンプ racket-visit-definition
  • コード補間
    • auto-complete
    • tab で complete
  • エラーチェック
    • flycheck
  • インタープリタ・デバッカ racket-repl

racket-mode

Racket の開発環境は、24.2 Emacs によると

  • racket-mode
  • Quack
  • Geiser

などがある。

今回は、新しめの racket-mode を利用することにした。 インストールは M-x el-get-install でした。

(require 'racket-mode)
;; tab で補間
(setq tab-always-indent 'complete)

aggressive-indent

賢い indent-mode

names package に依存しているので, require ‘names してからインストールしないとおかしくなる.

(add-hook 'racket-mode-hook #'aggressive-indent-mode)

smartparens

smart + parens カッコ移動を楽々。

(require 'smartparens-config)

auto-complete-mode

補間

(require 'auto-complete)
(add-to-list 'ac-modes 'racket-mode)

RainbowDelimiters

かっこの深さに応じて色付けしてくれる.

(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)

flycheck

エラーチェック

(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)

quickrun

ファイルを実行できる。

quickrun は最近 Racket に対応したようだ。

(require 'quickrun)

参考 URL

20 Dec 2016, 04:33

2016 年のまとめと2017年の目標

今年も終わりなので、2015 年の振り返りと 2016 年の目標を立てる.

2016 年の振り返り

2016 年の目標は以下の通り。

最悪の年だった。うつ病にかかり、2015/12/15 より休職。 未だ休職中だ。復職のめどがいつになってもたたない。

記事数を見てもらえば分かる。ほとんど Output なし。成果なし。

ということで、振り返ることありませーん。

2017 年の目標

ソフトウェア開発よりも、2017 年は TOEIC の勉強に力を入れる。

TOEIC 用のブログも立ち上げた。

ソフトウェアに関して強いてあげれば、おもしろそうな MOOC の講座や書籍があれば 取り組んでみる程度に留める。

とにかく、今年は TOEIC に注力して、900 score を取得したい。

なぜ TOEIC900 なのか?

これは、まだ自分でも踏ん切りがついていない。860 点でもいいんじゃないかと思う。 TOEIC900 とれても、英語ができるわけではないし、転職でもあまり重視されない。 − TOEIC900 点は全くたいしたことがない件について

でも、あえて書くと、以下かな。

  • TOEIC 楽しいから。ハマっている。点数があがっていくのがゲーム感覚で楽しい。現実はこの半年間さがってるけどね。
  • みんなから尊敬される。すごーいといわれたい。
  • 英語力をあげることに注力したい。これからのキャリアを考えると英語は必須。だらだらと今までのように勉強していても、大して変化がない。ブレイクスルーが欲しい。
  • 頑張る目標が欲しい。目標があると、人生にはりがうまれ、生き生きとした生活がおくれる。

ということで、2017 年は、このブログもあまり更新しません。TOEIC ファーストです。

20 Dec 2016, 04:02

twitterで勉強垢をつくりました

Studyplus SNS中毒のtsu-neraです。流行りの??勉強垢を作って見ました。

関連記事

こうして、記事を拾い読みしてみると、批判的な意見が多い。

わざわざツイートする必要あるか?

Twitterしている暇があれば勉強しろよ。

なぜつくったか?

  • Studyplusアカウントの宣伝用・・・twitterで自分のログを公開することで、プログラミングの友達申請がくるかもしれない。とくに、プログラミングはニッチな本を読んでいると、twitterで自分も読んでるんだよという発見してもらいやすい。MOOCも同様。
  • 自己マーケティング・・・自分という存在を世間にアピールするため。ブログ宣伝用。SEO対策。
  • 実績を自慢したい ・・・自分の勉強ログを公開することで、自分はこんなに頑張ってるんだよというのを自慢したい。そのことによって、モチベーションが上がる。
  • 自己満足のツイートをしたい・・・たとえば、お腹空いた〜みたいな、どうでもいい内容や、ネガティブな内容を発言したい。発言することで、自己発散できる。

終わりに

まだ、はじめたばかりなので、長続きしないかもしれないけれども、どうなることやら。

19 Dec 2016, 03:14

成功は自分で決めて進むもの!coursera で Success を受けた

Success という講座を coursera で受講しました。

成功とはなにか?どのようにして成功するか?

成功とはなにか?それは、ひとそれぞれで異なる。人の数だけ、成功の定義がある。

大切なことは、自分の成功を自分で決めて、成功するために進むことだ。

この講義では、以下の質問対して回答を出すことが求められる。

  • Definition of success(成功とはなにか?)
  • Plan for Achieving Success(どのようにして成功するか?)

関連記事

ウォートン・スクールの本当の成功の授業

講義の内容は、以下の本を抜粋して説明されている。なので、英語が苦手な自分は日本語の本を参照しながら、講義に取り組んだ。

video のなかで、引用されるエピソードはほとんどすべて本の中に載っている。本がないと、自分の英語力では、自分は内容を理解できなかった。

感想

英語わかんねー。この一年英語に力を入れてきたので、問題ないかなと思っていたけれども、 半分くらいしかききとれなかったよ。本がなければ、挫折してた。 プログラミング系の講義はなんとなくわかるけど、人文系はまだまだついていくのがつらいことがわかった。

でも、この講義、受けてよかった。

現在、うつ病で会社を一年間休職している。 将来がまったく見えず、この先どうすればいいのか分からなかった。 強い言葉をつかうと、絶望的だった。毎日落胆し、落ち込んでいた。

そんなとき、一筋の光が見えた気がした。 安心感が芽生え、それと同時に自分への自信と将来に対する前向きな見通しが手に入った。 今は、とても清々しい気分だ。

成功の定義は決めた。計画は立てた。この先10年の見通しはたった。 あとは、実行するのみだ。人生がわくわくしてきた。よし、やるぞ!!

講義メモ

week1

簡単なガイダンスのあと、「6つの人生」の演習というものが課される。

6人の人物の経歴が紹介されて、それを読み、どれが自分の持つ成功の価値観に近いかを判定する。 それによって,自分にとっての成功のイメージを明確化できる。

また、成功には内的側面と外的側面があると説明される。内的側面とは、幸せ、満足感、愛。外的側面とは、地位、名声、金。

week2

成功するための素質について語られる。それは、身近なところにあり、探しに行くものではないといわれる。 そして、成功の様々な考えがしめされて、自分の成功を定義するように求められる。

また、” The Legacy Exercise: Reflecting on Your Family”という, pair-grade-assignment が課される。あなたが家族や親戚から受け継いだものについての英作文。

week3

Steve Jobs のスタンフォードスピーチが引用される。

成功とは、幸せになることか?3 つの幸せが紹介される。

  • Momentary Happiness(瞬間的幸せ)
  • Overall Happiness(総合的幸せ)
  • Deep Happiness(魂の幸せ)

Quiz として SAME と呼ばれる心理テストが課される。

自分の結果は以下。

社交的スタイル 行動傾向 思考傾向 感情的気質


内向性 100 計画型 25 実用型 50 情熱型 50 協調型 50 張り詰め型 50 分析型 50 現実型 75 平和型 25 決行型 50 革命型 75 感情抑制型 100 率直型 100 慎重型 50 特化型 75 ストレス虚弱型 50

week4

成功には二種類ある。

  • inner success … Happiness
  • outer success … Achevement

死を意識することで、人生に対するモチベーションが上がる。

お金を意識しなくすることで、新の人生のゴールが見えてくる。 人生のゴールを5,6個書き出してみよう。

仕事には3種類ある。あなたは、どの種類の仕事に従事しているか?

  • job 労働
  • carrior キャリア
  • calling 天職

PERFECT … あなたの仕事の気持ちを燃え立たせるもの

  • P: 個人 の 成長 と 発展
  • E: 起業家 的 独立 性
  • R: 宗教 的 または 精神的 アイデンティティ
  • F: 家族
  • E: アイデア・発明・芸術 を 通し た 自己 表現
  • C: コミュニティー( 大義 に 身 を 捧げ、 支援 の必要 な 人々 を 助ける
  • T: 才能 を 磨く 努力

3 つの名言

It is only when we have the courage to face things exactly as they are, without any self-deception or illusion, that a light will develop out of events, by which the path to success may be recognized. I Ching

Everything you need to be happy is simple EPICTETUS

The unexamined life is not worth living. PLATO

Final Assignment

以下に対する自分の考えを 500-700word のエッセイとして、提出することになっている。

  • Definition of success(成功とはなにか?)
  • Plan for Achieving Success(どのようにして成功するか?)

自分は以下のような回答を提出した。

My definition of success is below.
  - Earn money by using mathematics and programming, 
    contribute to the development of the technologies.
  - Make effort everyday, have a purpose and enthusiastic for my carrier.
  - Using English fluently, became a great software developer.
  - Have a comfortable family.

I am a software developer. I graduated from the university. 
My major is computer science and mathematics.
After graduated from the university, I have never used mathematics knowledges.
But What I really want to do is to apply mathematics knowledges to the technologies.
So I defined that my success is to earn money by using mathematics and programming.
This is outer success.

Inner success is to have a peaceful, comfortable family.
Now I'm single and don't have girlfriend.
But I'm 30 years old. I need partner and I want to have a children.

My Plan for Achieving Success
  - short-term goal
    - get TOEIC L/R 900 score
  - middle-term goal
    - Practice English writing and speaking skill.
    - Learning machine learning.
  - long-term goal
    - Get a job that is needed machine learning knowledge.
    - Contribute Open Source Software.
    - Get a state-of-the-art information from the Internet in English.

I am Japanese. I'm not good at English. 
English skill is necessary. So the most important skill for me now is 
learning English. TOEIC is suitable to measure my skill. 
But TOEIC can't measure writing and speaking skill.
So After I will get TOEIC 900, I shift my study plan to output my thinking in English.

And also, my definition is using mathematics and programming, machine learning is 
suitable for my dream. I plan to study machine learning by using MOOC.
And my goal is to change the Career that use machine learning skill.

And after change my career, I contribute to the development of the technologies.
And do some interesting and exciting things by using learned knowledges.

To Success, I always these word keep in mind.
  - go by short step, and reach big goal.
  - stable understanding is more important than speed.
  - when I don't study, think why I study.
  - to emphasize the process rather than result.
  - Motivate humiliation
  - Time is limited to reach the goals.
  - Don't compare myself to other people.
  - Believe myself and always believe my success.
  - Talent can be overcome with effort.
  - Believe that Effort is always rewarded.

these are my beliefs.My Success image is claiming the mountain.
step by step, I get a skill to do a big task.
As Steve Jobs says, I decided to think that today is the last day of my life everyday.
And make effort every day. I recently read the book, GRIT.
It says that Talent can be overcome with effort.
I am not smart. but I believe my possibility to success.


Finally, I am now not working. I take a sick leave because of depression.
I'm depressed patient.I don't work for 1 years. 
I really confused about my life. Before taking this class, I can't see my future.
But now I can see the future. My goal is clear. 
All I should do is to ride on the train that will go to the success.
Now I don't have any anxiety. I do my best. I have a confidence.

Thank you for the great MOOC course.

19 Dec 2016, 01:11

Windows 環境で Emacs で 自動スペルチェック(aspell, flyspell)

Windows 環境で、Emacs で英文を書くとき、Word のようなスペルチェックをしたい。

そんなときのための、Tips を紹介。ちょっと設定ではまったのて、メモ。

環境

  • NTEmacs 25.1.1

aspell をインストール

aspell というツールをつかうと、スペルチェックが可能になる。 ダウンロードは以下から。

ダウンロードしたファイルを開くとインストールがはじまるので、インストール。

aspell の設定

Emacs の設定ファイルに以下を書く。

;; aspell のインストールパス
(add-to-list 'exec-path "C:/Program Files (x86)/Aspell/bin/")
(require 'ispell)
;; スペルチェックに aspell を使う
(setq ispell-program-name "aspell")
;; 日本語と英語の共存設定
(eval-after-load "ispell"
  '(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")))

 ホームディレクトリに .aspell.conf というファイルを作成して、以下を記入。

lang en_US

そうしないと、以下のようなエラーがでる。

Error: No word lists can be found for the language "ja_JP".

flyspell-mode

自動で英文チェックしてくれるパッケージ。M-x flyspell-mode で有効にする。

または、以下のように自動で有効にしてもよい。

(mapc
 (lambda (hook)
   (add-hook hook 'flyspell-mode))
 '(text-mode-hook
   org-mode-hook
   wl-draft-mode-hook
   twittering-edit-mode))

参考

17 Dec 2016, 16:17

TwitterBrainはつかえない。スパム扱いされる。

TwitterBrainの評判や評判ついて、いろんなサイトで褒めたたえられているが、たぶんアフィリエイト目的だろう。批判をしている記事がないので、書いておく。

TwitterBrainはつかえない

TwitterBrain(ツイッターブレイン)は使えない。

具体的には、リンクを含むツイートをすると、検索結果に反映されない。

行なった設定は、フォーム推奨されているパラメータ(20人/1日)での、自動フォロー、アンフォロー機能。

この件について、2回、ツイッターのサポートセンターに問い合わせフォームから問い合わせを行なった。

2回とも、スパム扱いにされて問題がクローズされた。改善なし。以下は、ツイッターサポートセンターからの返信。

Hello,

You tried to update a case that has been closed. Please submit a new case at http://support.twitter.com/forms. You can also visit our help center at http://support.twitter.com for self-help solutions to common problems.

困り果てた。現状のTwitterBrain では、Twitter のスパム判定アルゴリズムで、アカウントがスパムと判定されるようだ。

もう、自動フォロー、アンフォローはどのツールを使ってもできない気がする。もし、可能なツールがあれば、教えて欲しい。

もちろん、TwitterBrain のbot 機能を使いたかったり、検索結果に引っかからなくても、フォロワー数を獲得したいという用途ならつかえるかもしれない。

ただし、フォロワー数は期待しているほど伸びないことも書いておこう。2アカウント運用したが、どちらもフォロワー数は50前後だ。この程度なのだ。これも、どのサイトにも書かれていない、運用実績の事実だ。

自分のようにサイト誘導が目的の人で、これからTwitterBrainの購入を検討しているひとは、買わない方がいい。

以上のように、使えないツールだからだ。

14 Dec 2016, 16:18

Ubuntus 16.04 LTS でのタイル型ウィンドウマネージャー環境構築(xmonad)

今まで、ArchLinux を利用していたのだけれども、壊れたので、Ubuntu に乗り換えた。

タイル型ウィンドウマネージャーの魅力に取り付かれたので、Ubuntu でも xmonad を導入してみた。

設定ファイルは以前 ArchLinux で利用していたものがそのまま使えた。

誰かの役に立つとは思えないけれども、再度自分で設定するときのために書きました。

Environment

  • Ubuntu 16.04 LTS
  • Let’s Note

xmonad の導入

まずは、xmonad のインストールから。

sudo apt-get install xmonad

これで、ログイン時に xmonad でログインするか選択できるようになる。

xmonad.hs の設定

.xmonad/xmonad.hs を作成。ターミナルは urxvt を利用。

現在の設定は以下。

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO

import XMonad.Actions.WindowGo

import XMonad.Layout.MultiToggle
import XMonad.Layout.MultiToggle.Instances
import XMonad.Config.Desktop (desktopLayoutModifiers)
import XMonad.Layout.Named

-- for keyboard shortcut mod4 is windows ShortcutKey
modm = mod4Mask

tall = Tall 1 (3/100) (1/2)

main = do
        xmproc <- spawnPipe "/usr/bin/xmobar /home/tsu-nera/.xmobarrc"
        xmonad $ defaultConfig
        { manageHook = manageDocks <+> manageHook defaultConfig
        --, layoutHook = avoidStruts  $  layoutHook defaultConfig
    , layoutHook = mkToggle1 FULL $ desktopLayoutModifiers (named "V" tall ||| (named "H" $ Mirror tall))

      -- sometimes, xmonad freese,comment out these lines 
          -- , logHook = dynamicLogWithPP $ xmobarPP
          -- { ppOutput = hPutStrLn xmproc
          --    , ppTitle = xmobarColor "green" "" . shorten 50
          -- }

          -- Border settings
      , borderWidth = 2
          , normalBorderColor  = "#99ccff"
          , focusedBorderColor = "#0033dd" -- blue

          -- Rebind Mod to the Hiragana_Katakana 
      , modMask = mod3Mask
      -- , modMask = mod1Mask        

          -- use rxvt-unicode 
      , terminal = "urxvt" 
          }
          -- windows キーでショートカット
          `additionalKeys`
          [
            ((modm, xK_l), spawn "gnome-screensaver-command -l")
          , ((modm, xK_t), runOrRaise "urxvt" (className =? "URxvt"))
          , ((modm, xK_k), runOrRaise "conkeror" (className =? "conkeror"))
      , ((modm, xK_f), sendMessage (Toggle FULL))
          , ((modm, xK_q), spawn "xinput --set-prop \"SynPS/2 Synaptics TouchPad\" \"Device Enabled\" 0")
          , ((modm, xK_w), spawn "xinput --set-prop \"SynPS/2 Synaptics TouchPad\" \"Device Enabled\" 1")
          ]

Let’s Note を利用しているので、mod キーをウィンドウズキーに設定。 いろいろと、ショートカットを設定。

xmobar の設定

xmobar は xmonad と相性のよいステータスバー。

sudo apt-get install xmobar

設定は以下のとおり。工夫私大でいろいろできる。

Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
       , borderColor = "black"
       , border = TopB
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 90
       , lowerOnStart = True
       , persistent = False
       , commands = [ Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
            -- , Run Swap [] 10
                    , Run Battery ["Bat0"] 600
                    , Run Com "xmobar-clock-monitor.sh" [] "orgClock" 10
                    , Run Com "sh" ["-c", "cat ~/tmp/clocking"] "orgShow" 10
                , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
            ]   
       , sepChar = "%"
       , alignSep = "}{"
--       , template = "%cpu% | %memory% | %battery% }{ <fc=#ee9a00>%date%</fc> %orgClock%clock</fc> %orgShow%"
       , template = "%cpu% | %memory% | %battery% }{ <fc=#ee9a00>%date%</fc> "
             }

dmenu

コマンドランチャー。mod+p に割り当てている。すごく便利。

sudo apt-get install dmenu

PATH が通ったところにあるコマンドを実行できる。時々おかしくなる。 そのような時は、~/.xmonad/dmenu_run を削除する。

タスクトレイの設定

trayer というタスクトレイツールを使っている。

sudo apt-get install tarayer

ここにいろいろなアプリを表示する。.profile に登録しておく。

# trayer タスクトレイ
trayer --edge top --align right --SetDockType true --SetPartialStrut false --expand true --width 10 --transparent true --tint 0x000000 --height 14 &

# ネットワーク
nm-applet &

# サウンド
volumeicon &

# バッテリ
cbatticon &

# Dropbox
~/.dropbox-dist/dropboxd &~/.dropbox-dist/dropboxd &

# TouchPad Default Off
xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0

# wall paper
feh --bg-scale ~/Dropbox/Photos/ubuntu.jpg &

# クリップポードマネージャー
copyq &

以上、自分のための簡単な備忘録でした。便利なツールがあれば、教えてください。

参考リンク

14 Dec 2016, 08:56

Emacs から SML のテストを実行する

元ネタは、ここです。

coursera で Programming Languages のコースを受講している。

Assignment でテストファイルが与えられるのだが、これをうまく実行する方法についてのメモ。

Preparation

  • hw1.sml … 提出用ファイル
fun is_older(date1: int*int*int, date2: int*int*int) =
  (* implementation *)
  • hw1.sml … テストファイル
(* Test is_older *)
val test_is_older_1 = is_older((2012,1,1), (2012,1,1)) = false
val test_is_older_2 = is_older((2012,1,1), (2013,1,1)) = true
val test_is_older_3 = is_older((2013,1,1), (2013,2,1)) = true
val test_is_older_4 = is_older((2013,1,1), (2013,1,2)) = true

Execute

以下のコマンドで実行できる。

$ cat hw1.sml hw1_test.sml | sml
Standard ML of New Jersey v110.74 [built: Fri Dec  7 10:09:50 2012]
...
val is_older = fn : (int * int * int) * (int * int * int) -> bool
...
val test_is_older_1 = true : bool
val test_is_older_2 = true : bool
val test_is_older_3 = true : bool
val test_is_older_4 = true : bool

Emacs を私はつかっているので、=M-!= (shell-command)で、Emacs の中から実行。

grep

結果を以下のように grep するとなおよい。

$ cat hw1.sml hw1_test.sml | sml | grep false

まとめ

Lecture では、use “hw1.sml”; を利用して、ファイルを読み込むことを推奨しているけれども、 こっちのやり方のほうがフィードバックが素早く得られるのでよい。

いわゆる TDD ができる。