KeyRemap4MacBookでControl+hjklをカーソル移動に設定して快適コーディング

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

みなさん、プログラミングをするときや、ブログの文章、レポート、はたまたKobitoでQiita向けにTipsを書いているとき、カーソルの移動ってどうしていますか?
僕は、例えばXcodeやeclipseでコーディングするときはキーバインドの設定を変更してCtrl+hjklをカーソル移動に割り当てています。
これで、わざわざカーソルキーに手を移動しなくても、ホームポジションに手を置いたままカーソル移動ができるわけです。
このようなキーバインドの設定をXcodeやeclipse、Sublime Textなどエディタごとにいちいち設定していたのですが、もうこれならシステム全体でCtrl+hjklをカーソル移動に割り当ててしまおうと。
そうすると、わざわざ設定する手間が省けるばかりか、ブログの文章を書いているときなど、ブラウザからテキストを編集しているときや、そもそもキーバインド設定が出来ないエディタを使ったときでもこの設定を使うことができます!
では、さっそく。


KeyRemap4MacBookをインストール


KeyRemap4MacBook – OS X用のソフトウェア
公式ページからKeyRemap4MacBook をダウンロード、インストールしましょう。


Control+hjklをカーソル移動に設定する


スクリーンショット 2013-06-13 12.50.31.png


KeyRemap4MacBookを起動し、


  • Vi Mode → Control_L+hjkl to Left/Down/Up/Right

をクリックしてください。
これで終わりです!


Macのcaps lockキーをControlキーにしよう


番外編として。


スクリーンショット 2013-06-13 12.12.23.png


MacのUSキーボードでは非常に打ちやすい位置に、一番使用することがない、いや、むしろ誤動作の原因になるcaps lockキーが配置されています。
これを、Controlキーに変更することで、今回設定したControl+hjklカーソル移動がより快適になります。


スクリーンショット 2013-06-13 12.31.39.png


  • システム環境設定 → キーボード → 修飾キー

ここから変更することができます。


まとめ


デフォルトの設定は結構クソなのでいろいろいじろう!

SublimeText Control+hjklでカーソル移動

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

スクリーンショット 2013-06-13 12.12.23.png


僕はMacのUSキーボードでcaps lockキーをControlキーに割り当てなおして運用しています。
一番小指で押しやすいキーがなんでcaps lockなんだよ、という感じですが、これをControlなどに変更するとコーディングが劇的に快適になって、例えば、今回のネタのようにカーソル移動のキーバインドをControl+hjklなどに設定するといい感じになります。
ということで、Sublime Text 2において、Control+hjklを使ったカーソル移動を実現するためのキーバインド設定ネタです。


キーバインドを変更する


Sublime Text 2 → Preferences → Key Bindings – User
と選択すると、キーバインドを設定するための設定ファイルがエディタ上に表示されます。そのファイルに以下の設定テキストを挿入して保存してください。


[
{ "keys": ["ctrl+l"], "command": "move", "args": {"by": "characters", "forward": true } },
{ "keys": ["ctrl+h"], "command": "move", "args": {"by": "characters", "forward": false } },
{ "keys": ["ctrl+j"], "command": "move", "args": {"by": "lines", "forward": false } },
{ "keys": ["ctrl+k"], "command": "move", "args": {"by": "lines", "forward": true } }
]


設定は以上です。


Macのcaps lockキーを無効化し、別のキーに設定する


スクリーンショット 2013-06-13 12.31.39.png


システム環境設定 → キーボード → 修飾キー
ここから変更することができます。

メモリをただ無駄に使い続けるだけの最悪なプログラム

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

メモリリークを大量に起こしてメモリを使い切るだけの無意味かつ最悪なプログラムです。
もう半分ウイルスレベル。

お使いのOSの耐久テストとして使えるかもしれません。
たぶん、98とかだとブルースクリーン。XP以降はシステムまでは落ちないはず。

※プログラムの実行は自己責任で行ってください。このプログラムを使用したことによるいかなる不具合に対して私は責任を負わないことをここに明記します。

mem.c

#include <stdio.h>
#include <stdlib.h>

int main(void){
 while(1){
  if(malloc(1024) == NULL){
   return 0;
  }else{
   printf(“成功\n”); //メモリリークが成功
   system(“mem.exe”); //自分自身を起動し増殖させる
  }
 }
}



mem.exe

(起動してみたいという最悪な方は上のリンクからダウンロードして起動してみてください。タスクマネージャーを見ながら起動するとさらに楽しいです。)
※ファイル名はmem.exeで保存してください(プログラム内でmem.exeを呼び出すため)

2010-02-02_01.jpg
△学校のパソコンで動作させてみた結果。ページファイルとプロセス数に注目。

なぜこのようなプログラムを作ったかと言うと、授業でメモリリークの話をしてやっちゃダメですよ!と教わった。
すると先生が「メモリリークを大量におこすとどうなるか実際にやってみましょう」と言い出した。
そして僕はそれに「自らを呼び出して増殖する」というものを追加してみた、というわけ。

良い子はマネしちゃダメだよ☆

 

発生させた乱数を利用して自動生成迷路を作成するプログラム

Share on Facebook
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

//実験⑧:乱数発生
//2009/06/09
//EXILIAS
//
//発生させた乱数を元に自動生成迷路を作成するプログラム。
//なお、迷路生成のアルゴリズムとして以下のサイトで紹介されている
//「棒倒し法」を用いた。
//http://www5d.biglobe.ne.jp/~stssk/maze/make.html

#include //ブログに載せると消えてしまうようです。スタンダードアイオーをインクルード。
#define N 1000
#define X 31 //迷路の大きさ(奇数)
#define Y 31

/* 数値を入力 */
int scanInt(void){
int a;
scanf(“%d”, &a);
return a;
}

/* main()関数 */
int main(void){
int a, b, m, n, i, j;
int x[N], maze[Y+1][X+1];

//乱数生成ユニット
a = 7;
b = 3;
m = 733; //この組み合わせで732の周期の乱数を得られる
n = m-1; //できる可能性のある最大値
x[0] = b;
//乱数を生成
for(i=0; i x[i+1] = (a*x[i])%m;
if(x[i+1] == b){ n=i; }
}

//外枠を作る
for(i=1; i<=X; i++){
for(j=1; j<=Y; j++){
if(i==1 || i==X){ maze[i][j] = 1; }
else if(j==1 || j==Y){ maze[i][j] = 1; }
else if(i%2!=0 && j%2!=0){ maze[i][j] = 1; }
else{ maze[i][j] = 0; }
}
}

//(i, 3)のレーンの棒を倒す
printf("100以下の好きな数を入力してください:");
a = 0;
while(a=scanInt(), a==0 || a>=100);
i = 3;
for(j=3; j<=X-2; j+=2, a++){
switch(x[a]%4){ //1/4の確立で倒れる方向を決める
case 0: maze[i-1][j] = 1; //上へ倒す
break;
case 1:
if(maze[i][j-1] !=1 ){
maze[i][j-1] = 1; //左へ倒す
}else{ //すでに倒れていて、倒れられない場合
if(x[a+1]%2 == 0){
maze[i-1][j] = 1; //上へ倒す
}else{
maze[i+1][j] = 1; //下へ倒す
}
}
break;
case 2: maze[i+1][j] = 1; //下へ倒す
break;
case 3: maze[i][j+1] = 1; //右へ倒す
break;
}
}

//(j, i)のレーンの棒を倒す
for(i=5; i<=Y-2; i+=2,a++){
for(j=3; j<=X-2; j+=2,a++){
switch(x[a]%3){
//case 0: break;
case 0:
if(maze[i][j-1] !=1 ){
maze[i][j-1] = 1; //左へ倒す
}else{ //すでに倒れていて、倒れられない場合
if(x[a+1]%2 == 0){
maze[i][j+1] = 1; //右へ倒す
}else{
maze[i+1][j] = 1; //下へ倒す
}
}
break;
case 1: maze[i+1][j] = 1; //下へ倒す
break;
case 2: maze[i][j+1] = 1; //右へ倒す
break;
}
}
}

for(i=1; i<=Y; i++){
for(j=1; j<=X; j++){
if(maze[i][j] == 1){
printf("■");
}else{
printf(" ");
}
if(j == X){ printf("\n"); }
}
}

return 0;
}

ソースファイル

ブログにそのままコピペしたのでインデントとか改行とかめちゃくちゃなので、真面目に見たい方は上記の「ソースファイル」をクリックしてC言語ファイルで見ることをお勧めします。

というか、間違っているところもあるかと思われますのでご注意を。

で、このプログラムを動作させると以下のような出力を得られます。

2009-06-14_01.jpg

自動生成迷路の内部が垣間見えて結構興味深かったです。
シレンとかもこんな感じで作ってるのかなぁ……。

「乱数を利用したゲームを作って提出せよ」という課題を出した先生もGJですが、「『棒倒し法』でググると幸せになれるかも」と助言してくれた先生もGJですね。
非常に興味深いアルゴリズムでした。