Akata Works

東京エンジニア。主にRuby,Go,たまにAWSとiOS。ゲーム音楽が好きです。連絡はTwitterかakata.onen@gmail.comまで

ZshでChange DirectoryしたときにList Segmentsする

Zshでcdしたときにlsされると便利かな~って思って適当に実装してみた。

手っ取り早く考えたのがこれ

alias cd="cd $1 ls"

まあコレはちゃんと動かないんですけどね。

エイリアスは引数を取れないので、問答無用でホームディレクトリ帰され、lsに引数が渡されたことになります。

$ cd hoge/

これが

$ cd && ls hoge/

こうなる(┐「ε:)ズコー====


次に考えたのがこれ

alias cd="cdls"
function cdls() {
  cd $1 && ls
}

いけそうな気がする・・

cdls:1: maximum nested function level reached

が……駄目っ……!

コレはcdのエイリアスが有効であるため、再帰的にcdが呼ばれ続けてエラーを吐いている。

と言う訳でbuiltinを使いましょう。

builtinはユーザ実装の関数やエイリアスよりシェル・コマンドを優先的に実行するためのコマンドです。

alias cd="cdls"
function cdls() {
  builtin cd $1 && ls
}

これでエイリアスのcdではなく、シェル・コマンドのcdが呼ばれるようになります。

akata:^_^[~]$ cd hoge
bar  foo  hoge  huga
akata:^_^[~/hoge]$

(∩´∀`)∩ワーイいけました。

ちなみにこれだとlsコマンドの方はエイリアスが有効になっているので、
既存のエイリアスを使い回せます。

後、確認していませんが多分Bashでもちゃんと動くと思います(タブンネ..)

参考URL

Linuxコマンド集 - 【 builtin 】 シェル・コマンドを優先して実行する:ITpro

ここに知りたいことは全部書いていました。

ZshをインストールするためのAnsible-Roleを書いた

AnsibleのRoleシリーズの第3弾はシェルスクリプトZshです。

akatakun/ansible-role-zsh · GitHub

そして、設定がめんどくさい基本ツールのRoleは全部書き終わったような気がします。

やはりほとんど第1弾と第2弾の使い回しです・・
でも、使い回しが容易であることもAnsibleの良いところだと思います(学習コストも低いですし・・)


話は逸れますが、

僕はこれらのリポジトリをPrivateリポジトリのSubModuleとして持っており、
ansible-playbookコマンド一発で環境構築ができるようにしています。

イメージとしてはこんな感じ??

* ansible/   # Privateリポジトリ
  * initialization.yml # Root Playbook
    * roles/
      * git/ # 第1弾
      * vim/ # 第2弾
      * zsh/ # 第3弾

まじsubmodule便利っす


と、まあ、

最初はログインシェルの変更までやるつもりでしたが、飽きちゃったんで設定ファイルのシンクまでです。
気が向いたら更新とTmuxとか他のツールのRoleも書いていこうかな(*´ڡ`●)

というかさっさとScalaやらねば・・

perl: warning: Setting locale failed.

MacからSSHCentOSに接続してPerlを実行すると以下のエラーが出た。

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

現在のロケールの設定の中にインストールされていないロケールがあることが原因らしい。
現在のロケールの設定はlocaleコマンドで確認できるので確認するといい。

インストールされていなければついでにインストールしてしまおう。

localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

根本的なことをいうと、単純にMacの設定を引き継いでいるからってこともある。
"/etc/ssh_config"ファイルから以下の行をコメントアウトするといい。

 Host *
   SendEnv LANG LC_*

ロケールの問題なので他のコマンドでも発生するかも・・

参考URL

centos に gitolite 導入, あとロケール問題 - Please Sleep

IBM Knowledge Center

タイピングゲームを自動化するスクリプトを組んだった

今更ながら、YAPC::ASIA 2011の竹迫さんの発表を見て興味を持ったので、
Win32::GuiTestモジュールを触ってみました。

まあ、.NET Framework使えよって話ですがね。
せっかくオープンソース化されたので、時間があれば読んでおきたいな。

開発環境はCygwinとStrawberry Perlです。
Image MagickやImage::Magickモジュールのインストールがめんどうだった。
ちゃんと32Bitで統一しよう(;´Д`)=3

竹迫さんが発表で仰っていましたが、
タイピングゲームを自動化すると面白そうだったので自動化しました。

akatakun/auto-typing · GitHub

画像ファイルとスクリーンショットをマッチングする簡単な仕組みですが、
X座標でソートして一気に打ち込むのはうまく出来たと思う。

sub match_words {
  my ( $screenshot, $words ) = @_;

  my %match_words;
  for my $word ( keys %$words ) {
    my @coords = $screenshot->match( $words->{ $word }, multiple => 1 );
    my @xs = @coords[ grep { $_ % 2 == 0 } 0 .. $#coords ];
    $match_words{$_} = $word for @xs;
  }
  return \%match_words;
}

これを某サイトで試したところランキングトップを超えるスコアを出せました(^ρ^)

恐らく画像ファイルさえ用意すれば、ほとんどのサイトで動くと思いますが、
ブラウザの解像度やエリアシングの有無でぱたりと動かなくなりますorz

最後に、、ランキング荒らしちゃ駄目だよ

参考サイト

Perlのプラグマについて調べてみた

ふと、プラグマってたまーに聞くけど一体全体何なんだって思ったので調べてみた

個人的にはPerlプログラミング救命病棟の以下の説明がしっくりきた

Perlコンパイラの動作を変更するモジュールである

φ(゚Д゚ )フムフム…

確かにstringもwarningもutf8プラグマもPerl自体の動作を変えますね!!
あと、小文字なのは慣習らしいです

普通の関数やモジュールと何が違うんだろうってずっと思ってましたが
ようやくスッキリしました+.゚(*´∀`)b゚+

VimをインストールするためのAnsible-Roleを書いた

最近忙しくてちょっとペースが落ちてきているのが気になるakataです。
気が付いたら社会人も二年目になっていました。

今回は前回に引き続き、AnsibleでVimをインストールするためのRoleを書きました!!
と言っても、ほとんどGitの使い回しですが・・(^_^;)
一応、".vimrc"ファイルと".vim/"ディレクトリのシンクまでできます。

akatakun/ansible-role-vim · GitHub

あと、Role内の変数名はRole名を付けるのが良いっぽいので、GitのRoleにも少し修正を加えました。

よーし、残りはZshのRoleを書いたら終わりかなー(;´∀`)=3

参考URL

GitをインストールするためのAnsible-Roleを書いた

まあ、タイトルどおりなんですが、AnsibleでGitをインストールするためのRoleを書きました!! でも、実際はセッティングとリポジトリのクローンまでできますよ。

本当はずいぶん前に書いたものもあるのですが、冪等性(笑)状態で、最適化もしていないオレオレAnsible Roleだったので・・

今回は外部に公開するつもりで思いっきり修正してきました!!

というわけで、GitHubに公開しました。
そのうちAnsible Galaxyにも公開すると思います。

akatakun/ansible-role-git · GitHub

git configやgitメソッドリポジトリをクローンするとき、どうやって冪等性を担保しようかなど、Ansibleの勉強にもなったのでよかったです(まあ、git configは元々冪等性が担保されているのですが・・)