HOKYPOKY.BLOG

おやすみ、宇宙

別れは結局別れでしかなくて、出会いの先に出会いがあるんだなと。今日は送別会だったのだけど、やっぱり別れの寂しさよりも出会えたことに感謝。

お疲れ様。
送別会の主役はこの文章は読んでないと思うんだけど、一応書いておく。

蒸し暑かった夏も少し元気がないようで、そろそろ秋が見え隠れ。いろんなものが一呼吸を終えた感じ。2010年も折り返し(いや、ずいぶん経ってしまっているのだけど)秋が来て冬が来るんだと思うとしんみりしつつワクワクもする。

帰り道タクシーから降りて、とぼとぼ歩きつつこんな風に未来を想像してたのだけど、無性にそれが楽しそうなもんだから、嬉しくなって、勢いでへんてこな文章を書いてしまった。

おやすみ、宇宙

MySQLを5.1にアップデート #mysql50# って何!?

少々煽り気味なタイトルで失礼します。

先日Gitの記事を書いて、自分のサーバーのGitのバージョンが古かったことが結局気になってバージョンアップをしたんですね。

たまにしかアップデートしないサーバーなのでPHPとかMySQLもアップデートしようと考えました。使っているOSはCentOS 5.5です。デフォルトで提供されているリポジトリでのMySQLの最新は5.0.x、PHPも5.1.x。

さすが最愛のCentOSさんです。ちーっす。

yumのリポジトリでそこそこ最新のPHPやMySQLを提供しているのがLes RPM de Remiというリポジトリらしいです。(Utter Ramblingsというのもある。)

では早速yumにリポジトリを追加しましょう。

$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

これでremiが使えるようになります。/etc/yum.conf.d/remi.repoを編集し、remiを有効化したりするのですが、今回はそうしません。一時的に有効にする方法でインストールしていきます。
実はこれからMySQLをアップグレードするのですがコンフリクトしてしまいます。一度MySQLを削除します。

$ sudo yum remove mysql

インストールします。ここで先程のremiを一時的に有効にするため –enablerepo=remi オプションをつけます。
これで無闇に最新バージョンを入れるわけではなく基本は(古臭くて)堅実なCentOSのリポジトリを使うことができます。

$ sudo yum --enablerepo=remi install mysql mysql-server

MySQLがアップグレードされました。

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.50, for redhat-linux-gnu (x86_64) using readline 5.1

しかしこれで安心してはいけません。

$ mysql -u USERNAME -p
mysql > show databases;

+---------------------------------+
| Database                        |
+---------------------------------+
| information_schema              |
| #mysql50#com_nijitaro-wordpress |
| mysql                           |
+---------------------------------+
...

com_nijitaro-wordpressというnijitaro.comブログ(ほぼ使ってない)用DBがあるのですが頭に#mysql50#がついています。
MySQL5.1で有効でない文字が使われていてどうのこうのというわけでバージョンアップするとDBの頭につくことがあるようです。DBのデータも5.1用にアップデートしなくてはなりません。

mysql_updateを実行すればいいようです。

$ mysql_update -u USERNAME -p
$ mysql -u USERNAME -p
mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| com_nijitaro-wordpress |
| mysql                  |
+------------------------+
...

ばっちりですね。

PHPも5.3にアップデートします。
タイトルとは関係ないのですがPHP5.3にするついでにMySQLも上げようとしてた時にはまったのでした。
こちらはremiリポジトリを使って簡単にインストールできました。

$ sudo yum --enablerepo=remi update php

これで関係するphp-mysqlなども一度にアップグレードされます。

WordPressなどのプロダクトは、比較的古いシステムでもインストールできるようになっていますが、Webサービスを構築するフレームワークなどではシステム効率、高速化、記述の簡略化などを優先してかバッサリと古いバージョンを切り捨てることもあったりします。
急いでバージョンを上げる必要はないように感じますが、攻めのWebサービスを構築する場合などはポータビリティは後回しにガンガン最新のバージョンで作っていくというのがトレンド(?)のようです。

とはいえ、ボクみたいに入り口で引っかかって悠長にブログなんか書いちゃって肝心のプログラムが全くすすまないなんてことにならないように!!

GitをGitosisでもっと便利にする


帯をGitとね! #itdajareless than a minute ago via Nambu

バージョン管理にGitを使い始めました。Gitいいですよね。

Gitが何かということについては結構情報もあるのでそちらをどうぞ。

一番手軽に始めるならgithubがオススメです。名だたるオープンソースのリポジトリがここで運用されています。ですが、オープンソースを促進するサービスなので無料ではパブリックなリポジトリまでしか作れなかったり。

ということでサーバーにgitをインストールして、さらにGitosisでリポジトリ管理を簡単にしたいと思います。

今回はクライアントがMac OS X 10.6 (Snow Leopard)とサーバーにCentOS 5を想定しています。また、SSH経由でログイン、新規ユーザーを作れる権限を持っていることを確認してください。

Gitインストール

Snow LeopardにGitをインストールします。
パッケージインストーラーがあるのでDLしてインストールしてください。(git-1.7.2.2-intel-leopard.dmg 2010/8/26 現在)

$ git --version

で「git version 1.7.2.2」と出てきたらインストール成功です。

クライアント側にはユーザー情報を登録します。
それぞれ自分の名前とメールアドレスを入れて下さい。

$ git config --global user.name "Konata Izumi"
$ git config --global user.email "konata@example.com"

次にCentOSにgitをインストールします。
ちなみに色々とやり方があるみたいなので自分のやり方でもいいです。
今回はPro Gitに書いてあるとおりにします。

$ sudo yum install git-core

簡単ですね。yumにgit-coreがない場合などはEPELを有効にします。

$ sudo yum --enablerepo=epel git-core

これでインストールできるのですが、「git version 1.5.5.6」とバージョンが古いです。ま、これでも問題はないでしょう。Cent OSなので仕方ないw

[追記] いや仕方なくない。rpmforgeリポジトリから1.7.2をインストールしました。

64bit (x86_64) の場合:

$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

32bit (i386)の場合:

$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ sudo rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

Gitをインストールします。

既に古いGitがある場合:

$ sudo yum --enablerepo=rpmforge install git-core

Gitをまだインストールしていない場合:

$ sudo yum --enablerepo=rpmforge update git-core

[追記終了]

リポジトリを作ってみる

このセクションは一般的にサーバーにリポジトリを作る方法を載せていますが、今回は最終的にgitosisでの運用を考えているのでこういうモノだと読み飛ばしてください。

サーバーにログインして、

$ mkdir someRepository.git
$ cd someRepository.git
$ git init --bare

これでリポジトリができたのでクローンします。
Macから以下を実行でクローンできます。

$ git clone SSH_USERNAME@YOURDOMAIN:someRepository.git

例えばREADME(空)を追加しできるのでこれにコミットしてプッシュします。

$cd someRepository/
$ touch README
$ git add .
$ git commit -am "READMEを作成"
$ git push

これでサーバーに反映されました。
ではもう一人のユーザーがそのソースをクローンしようとしたらどうでしょう。

同じSSH_USERNAMEで入るのであればいいですが、SSHのユーザー管理とgitのユーザー管理は別にしたいものです。普通はサーバー管理者と、プロジェクト管理者は別ですからね。

GItosisを使う

SSHの管理とGitの管理を分離する。分離したほうがややこしくなるケースというものは往々にしてあり得ることなのですが、サーバー管理とプロジェクト管理という意味で考えれば分離したほうがいいなと。サーバー管理者はgit用のユーザーを作って終わりですからね。

というわけでGitosisというものを使います。
サーバーにGitosis用のユーザーをつくり、そのユーザーにプロジェクトリポジトリ、リポジトリユーザーの管理などを肩代わりさせます。
また、Gitosisが面白いのはプロジェクト管理、プロジェクト毎のユーザー管理自体をgitで管理してしまうというものです。

Gitosisのインストール

$ yum install gitosis

Gitosis用ユーザーの作成

gitというユーザーを作ります。デフォルトではgitosisというユーザー名になるのですがgithub風( git@example.com:repository_name.gitでクローンできるよう)にします。

$ su -
# useradd -g root git
# passwd git

公開鍵をサーバーへコピー

Gitosisの設定を行う前に、クライアントにあるSSHの公開鍵をサーバーにコピーしておきます。
そのためにまず公開鍵を作成します。

クライアント側で下記を実行して公開鍵をつくります。途中パスフレーズを聞かれますが空でもOKです。

$ ssh-keygen -t rsa

Enterを連打した場合 ~/.ssh/id_rsa.pub というファイルが作成されているかとおもいます。
これが公開鍵です。

これをサーバーにコピーします。

$ scp ~/.ssh/id_rsa.pub SSH_USERNAME@YOURDOMAIN:/tmp/YOURNAME.pub

これで自分の公開鍵を /tmp/YOURNAME.pub としてコピーしました。

gitosisの初期化

サーバー上でコピーされた鍵を使いgitosisの初期化を行います。
公開鍵はgitosis-adminの最初のユーザーとなりgitosis-adminの設定ができるようになります。

$ sudo -H -u git gitosis-init < /tmp/id_dsa.pub

次にgitosisの実行権限を設定します。

$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

これで設定は終わりです。あとは全てクライアントで作業できます。

リポジトリの管理

先も言いましたがgitosisはリポジトリ管理をgitで更新します。
つまりリポジトリを管理するするリポジトリ。なんとも不思議な感じです。

$ git clone git@YOURDOMAIN:gitosis-admin.git

ここでクローンしたgitosis-adminというリポジトリが管理用のリポジトリです。ややこしいですねw

中身をみてみると

  • gitosis.conf
  • keydir/
    • USERNAME.pub

となっています。
まずUSERNAME.pubを開くと先程転送した公開鍵がここにはいっていることがわかります。
keydirの中に{ユーザー名}.pubという名前でユーザーを追加することで簡単にユーザーを作成できます。

次にgitosis.confを見てみましょう。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = USRNAME

これはgitosis-adminのリポジトリの情報です。
つまりあたらしいリポジトリhoge-repoをつくるとしたら以下のように追加します。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = USRNAME

[group hoge-repo]
writable = hoge-repo
members = USRNAME USER2 USER3

ついでにUSER2とUSER3を追加してみました。
keydirにもUSER2.pubとUSER3.pubを追加してください。

これをサーバーにプッシュすれば新しいユーザーとリポジトリが増えました。

$ git add .
$ git commit -am 'リポジトリhoge-repoとユーザーUSER2, USER3を追加'
$ git push

プッシュしたら早速新しく作成されたリポジトリを使ってみましょう。
といってもリポジトリが空なのでリポジトリを作って最初のコミットをしましょう。

$ mkdir hoge-repo
$ cd hoge-repo
$ touch README
$ git init
$ git add README
$ git commit -am 'initial commit'
$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master

最初のコミットだけちょっと特別です。

$ git remote add origin git@YOURDOMAIN:hoge-repo.git
$ git push origin master

上の部分は作ったリポジトリをどこのリポジトリにプッシュするのかの定義です。

では、早速サーバーにあるリポジトリをクローンしてみます。

$ git clone git@YOURDOMAIN:hoge-repo.git

READMEに一言追加して見ます。

$ cd hoge-repo
$ echo "Hello world!" > README
$ git add .
$ git commit -am 'edit README'

次のプッシュは簡単になっています。

$ git push

まとめ

以上でGitのインストールからGitosisでの運用まで駆け足に説明していました。
SSHについてやドメインのセットアップなど色々端折っているところもあるので補完してあげてください。

GitosisはGitのhookなどをうまく使った仕組みらしいですよ。Gitは奥深いですね。
これでとりあえずGitが自由に触れるようになってきたので、使いこなしたいところです。

長くなりましたが最後までありがとうございました。

It’s been a long time

お久しぶりです。2010年も大分すぎてしまいました。
前回の更新が2009年の年末だったことを考えると実に8ヶ月ぶりになります。
Feedを購読していただいているみなさん、お元気ですか?

実は4月に務めていた会社( FOURDIGIT Inc. )を退職しまして、現在は半分フリーの活動をしながら半分はアマナインタラクティブに勤務しています。

理由は特にないといったら嘘になるんですが、まあ変化をつけたかったのでしょうね。

おかげ様で環境もかわり、新しい出会いなどもありなかなかに刺激的な日々をおくっている次第でございます。電車通勤は久しぶりなので、考え事をする時間が増えました。
主に、環境問題について考えています。(嘘です

あと、ブログのデザイン変えてみました。中途半端ですけどね。

というわけで記事投稿のテストを兼ねた近況報告でした。
今後ともHOKYPOKYを宜しくお願い致します。

懐かしいとかそういう感覚

それなりにいろんな音楽というものを聞いてきて、いい曲だなーとか、
このジャンルが好きだとかそういうものができてきた。

バンドをやっていたからか、コード進行やリズムなどでテンションが上がったりすることもあるし、
反面、この歌詞まじで泣けるとかがなくなってきたなとか思う。

でもね、そういうんじゃなくてさ、それなりにいろんな曲を聞いてると「懐かしい」って言葉だけで最高な曲ってあるよね。
なにがいいって、何もかもが懐かしいっていうかさ。

未だ知らないこともいっぱいあるけど、それなりに知ってきたこともいっぱいあるなって。
そんな年の瀬。まだ仕事中です(´;ω;`)ブワ

JISキーボードの”いいところを残して”USへ移行

Macのキーボードの話。
少し長いので、上のビデオの曲を聞きながら読んで頂けたらと思います。

キーボードと鞍

米国西部のカウボーイたちは、馬が死ぬと馬はそこに残していくが、どんなに砂漠を歩こうとも、鞍は自分で担いでいく。馬は消耗品であり、鞍は自分の体に馴染んだインタフェースだからだ。今やPCは消耗品であり、キーボードは大切な、生涯使えるインタフェースであることを忘れてはいけない。

USキーボードに変えた理由

ボクは今までJISキーボードを使っていたのだけれど、キーバインディングや、ホームポジションの位置をよくよく考えると「USキーボードに慣れておいた方がいいかもしれない」という謎の強迫観念に襲われた。

  1. キーバインドはUSキーボード 中心
  2. JISキーボードとUSキーボードを並べると、JISキーボードはホームポジションが若干左に寄っている
  3. ほとんど慣れの問題だからどっちでもいい

まず1、リマップしなおせばよかったりするしJISキーボードの方が良かったりするシチュエーションもあるのが文字通りに受け取るとUSキーボードの方がいい気がする。

2については、今まで若干の違和感があったものの特に気になったことはないので良かったが、知ると結構違和感が大きくなってきた。

実は決め手が3。
どっちでもいいということはUSでもいいってことに気がついた事が大きい。
好きな方使えばいい。難しくない。
ボクの場合はUSキーボードってキートップがシンプルだし、プログラマっぽくてカッコいいじゃない?
それだけで十分な理由だったりするのです。

というわけで、USキーボードを購入。今のApple Wireless Keyboardって値下がりしてたのね。
しかも電池が2本だった。マウスとあわせてeneloop4本同時充電できちゃう。素敵。

問題

ここでUSキーボードにして困った点が3つ。

まずは慣れてない。
これは慣れればいいだけだし、そもそもUSキーボードに慣れたいから移行するわけで甘ったれたことを言ってすいませんって感じ。
でもこれが一番移行に踏み出せない理由なんだよね。

次にEnterが小さい。
これも慣れの範疇かもしれない。
ただ一つ言えるのは、配置が変わった事でメリット・デメリットは両方あるということ。
デメリットだけみてNOというのは勿体無い考え方だとボクはいつも思う。
逆にEnterまでの距離は短くなった(ホームポジションが左寄から中央にシフトしたから)ので実際ミスタイプはそこまでないし、慣れれば全然気にならないと思う。
人によってはこの配置がUSのいいところと言うでしょう。というかそう言えるようになりたい。

そして一番の悩みが「英数」「かな」キーがなくなったことだ。

今の仕事について初めてMacを触った時に先輩から「何かわからないことある?」と聞かれ、
その時「かな/英数キーはどこにありますか?」と尋ねた。
先輩は「ないね。気になる?」って言われたのを覚えている。

今となってはその意味がよくわかる。
かなキー、英数キーが二つにわかれていてアルファベットを打つ前には英数キーを必ず押す癖がついた。「今のモード」を気にせずとも、英語が打ちたいから英数キーを押してから入力をはじめるといった慣れてみれば逆にそちらの方がいい。

慣れればCmd+Spaceや、Ctrl+Shift+JとCtrl+Shift+;でもいいのかもしれない。
でもこれだけは10年考えてもJISキーボードの方が優れていると思う。
Windowsのかな/英数キーの方がまだましだ。

KeyRemap4MacBookを使う

2時間くらいUSキーボードをつかい、Cmd+SpaceなりCtrl+Shift+JとCtrl+Shift+;の切り替えでやっていたものの、イライラしていることに気がついた。

そして見つけたのが以下のリマップソフトだ。

KeyRemap4MacBook

やっとタイトルに沿った内容になった。
このソフトをインストールし、システム環境設定からKeyRemap4MacBookを起動し二つのチェックボックスを入れるだけだ。

commandL2eisuu

When you type Command_L only, send EISUU
When you type Command_R only, send KANA

この文言を見たときにUSキーボードはJISキーボードを超えた!と確信した。
スペースの両脇にあるCmdが英数、かなキーになるというのだ。
そしてそれはCmdキーとして難なく両立できる。実にスマートな解決方法。

「iPodとリモコン」とボクは勝手に読んでいるのだが、
HDDレコーダーのリモコンを見たときにびっくりしたのがボタンの数。
機能が増えるとボタンが増える。それは普通の事だと思うしかしiPodはボタンの数が減った。

これに似た衝撃的な発想にびっくりしてこの長い記事を夜中の3時だというのに書いているわけだ。

他にもいろいろな設定があり、自分好みの(基本的には拡張的な)リマップがカーネルレベルで行われるようだ。

TigerからSnow Leopardの64bitまで対応しているし、とりあえずJISキーボードをUSにリマップすることもできるのでハード的な位置やキーの数は変えられないもののUS配置にを体験できるので試してみてはいかがでしょうか。

ソースコードも公開されているので、自分なりのオプション作ってコンパイルしてみては!?
ボクはfn+[mjkluio789]がfn+[0123456789]になるようなオプションにトライしてみようかな。
ちょうどテンキーになるような

追記:デフォルトでなっていた。すばらしい!
http://pqrs.org/macosx/keyremap4macbook/img/keypad.png

話はかわりますが!

貼りつけてあるYouTubeのビデオはボクの会社の後輩。
日付かわってしまいましたが、12/9にCDデビューしました!
99radioserviceというバンドでベースやってます。

タワレコのPOPがドーンと

99radioservice-1

気分が落ち込んだときとかに良い感じの爽やかポップロックです。
身内だから逆に無闇やたらとプッシュするつもりはないけれど、普通にかっこいいバンドだね。

詳しくはこちら!
99RadioService Official Web Site

memo2 – 配列の総当たり

配列

[
  ["A","B","C"],
  ["1","2","3"]
]

"A1","A2","A3","B1","B2","B3","C1","C2","C3"

にする方法

直積というらしい。wikipedia 直積集合

  var directProduct = function (arr) {
    var ans = [];
    var mul = function (a,b) {
      var ret = [];
      for(var i in a) {
        for(var j in b) {
          ret.push(a[i] + b[j]);
        }
      }
      return ret;
    }
    for(var i in arr) {
      if(ans[0] == undefined) {
        ans = qArr[0];
      }else{
        ans = mul(ans,qArr[i]);
      }
    }
    return ans;
  }

  console.log( directProduct(qArr).join(",") );

memo

JavaScriptのprototypeベースでクラスのようなものを作る方法。

function object(o) {
  var F = function () {};
  F.prototype = o.prototype;
  return new F();
}
function SomeClass () {
  // class constructor;
  console.log("SomeClass");
}
SomeClass.prototype = {
  prop1: "value1",
  prop2: "value2",
  method1: function () {
    console.log(this.prop1 +"/"+ this.prop2);
  }
}
var myCar = object(Car); //"SomeClass"
myCar.prototype = {
  prop1: "changed value1"
}
myCar.method1(); //"changed value1/value2"

JavaScriptの関数型言語っぽいアプローチ

var sum = (function (x,y,z) {
  return (x+y+z);
})(1,2,3)
console.log(sum); //6

それの応用。
jQuery.noConflict()をしつつ$を使う方法。

//既存の$を上書きしない(prototype.jsとの共存)
jQuery.noConflict();
//関数型のアプローチでjQueryを範囲限定で$と呼ぶ
(function($){
  /**
   * @function lorem
   * jQuery plugin
   */
  $.fn.lorem = function () {
    this.html("Lorem Ipusum");
    return this;
  }
  //ready
  $(function () {
    //つくったプラグインloremを使ってみる
    $("p")
      .lorem()
      .css("color","#ff0000")
    .end();
  })
})(jQuery);

Windows7雑感

MacにBootcampして64bit Windows7をいれた。
さらにVMWare Fusion 3をいれてBootcampのパーティションから起動したりもした。

Vista vs Windows7は全員がwindows7がいいって言うだろうね。
ただ、XP vs 7はXPって言う人は多いと思う。
Vistaはなんだったんだろう。

WIndows7は会社で導入するところ多そうだね。
XP使ってるってちょっと。。。っていう風潮でてくるんじゃないかな。

あとはIE9が開発中ということでMacがせっかく崩してきているシェアを守るんじゃないかなと予想中。

Macを使っている人はMacに不満があったりもするが、Windowsにもっと不満が多い。
Windowsを使っている人は不満を持っている人が少ないらしい。

これはリテラシーの比率にも繋がるからあれだけど、たしかにWindows使ってた頃はOSってモノに対して興味がなかったな。

こんな駄文を書いたのもすべて、このPV貼付けたかったからです。

「ムーンウォークかっけー。」

センチメートル

冬だから語りが続きます。

センチメートルとセンチメンタルて似てるよね。

そういってスペルを調べると「centimeter」と「sentimental」。
全然似てない。

そう、全部オレの思い込み。世界は全部オレの思い込み。

知らない事が世の中にはいっぱいあって、知っている事はそのほんの一部。
オレの価値観はオレの価値観だし。さらにいうと人間の価値観や倫理なんて人間だけのものだ。

ふとした事から、チョウチンアンコウの雄の壮絶さを知った
カマキリの雄の次に壮絶だ。

でもこいつらはそれを分かっていて、善悪すらなくそうやって命を繋いできた。
常識なんてものはなんて小さな世界で形成されているんだろうか。

ウェブは世界発信とかいわれているけれど、オレはもっと小さなオレの知っている世界の人たちに届いて欲しいなと思う。
あとは、相も変わらずもっと色んな事を知りたい。これはオレの病気らしい。

で、何がいいたいかって言うと「name」と「名前(namae)」って似てるよね。