アーカイブ

‘未分類’ カテゴリーのアーカイブ

[OSX] Snow Leopard移行メモ

2009 年 9 月 16 日 コメントはありません

発売してすぐ買ったものの、2週間以上放置していたSnow Leopardをようやくインストールしました。移行手順をちょっとメモしておきます。

環境

  • MacOSX Leopard(10.5)からの移行
  • マシン: iMac(Early 2008)Core 2 Duo 2.4 GHz

外付けHDDにCarbon Copy Clonerでバックアップ

以下の外付けHDDを購入し、Carbon Copy Cloner でバックアップを作成しました。これで万が一の事があっても大丈夫。
Leopardがインストールされた起動ディスクは123GBほど使用していましたが、バックアップに3時間弱かかりました。おやすみ前の作業をおすすめします。なおCarbon Copy Clonerはドネーション(寄付)ウェアです。

起動ディスクを外付けHDDにまるごとバックアップ

起動ディスクを外付けHDDにまるごとバックアップ



バックアップが済んだら、念のためこのHDDから起動できるか確認しておきます。なおこのHDDの説明書には「OS起動はサポートされておりません」と明記されているので、くれぐれも自己責任でお願いします。

さらにTime Machineでバックアップをとっておく

実はCarbon Copy Clonerを使うのは初めて。それとOSXの移行アシスタントのほうがスムーズかも、という思いがあったので、Time Machineでもバックアップをとっておきました。

さらにさらに、Snow Leopardのインストールは別パーティションに

どこまで用心深いんだというかんじですが、起動ディスクの容量に余裕があったので、Leopardは残したままパーティションを分割し、Snow Leopardは別パーティションにインストールしました。
Disk Utilityを使えば既存のLeopardはそのまま、パーティションを分割できます。

Disk UtilityでSnow Leopard用のパーティションを追加します。

Disk UtilityでSnow Leopard用のパーティションを追加します。

Snow Leopardをインストール

ようやくSnow Leopardのインストールを開始。Leopard上からインストールを実行できる(DVD起動でない)ようになったので、だいぶ速いですね。
インストールオプションは

  • プリンタ: 「近くにあるプリンタ、および一般的なプリンタ」
  • 追加言語環境: 日本語のみ
  • その他: X11, Rosetta, QuickTime 7

を選択しました。

インストールオプション

インストールオプション

インストール直後にTime Machineから移行

インストールが終わりWelcomeムービーが流れると、「すでに Mac をお持ちですか?」画面が表示されます。今回はここでTime Machineから移行作業を実行しました。
いったんログインしてから移行アシスタントを実行することもできるのですが、その場合ログイン中のユーザーは復元することができません。別のユーザーを作るのも面倒なので、ログイン前に済ませてしまいました。

移行アシスタント

移行アシスタント

移行アシスタントで移行したもの、しなかったものは以下のとおりです。

移行したもの

  • 移行したもの
    • ユーザ
      • ミュージック、ピクチャなど
      • 「その他のファイルとフォルダ」(~/.emacsなどが対象になるらしい)
    • 設定
  • 移行しなかったもの
    • アプリケーション
    • 「<ドライブ名>上のその他のファイルとフォルダ」
      • (MacPortsで/opt以下にインストールしたものなどは再インストールしたい)

注意事項

今回は既存のLeopardをそのまま残し、さらに移行アシスタントでDockやメニューバーの設定を復元しました。こうした場合、Snow LeopardでDockに表示されるアイコンがLeopard上のアプリケーションを参照したままとなります。
インストール直後に設定しなおすことをおすすめします。

移行を終えて

今のところの感想としては、

  • よい
    • OSの起動が速い
    • Finderが多少キビキビしている
    • 3,000円程度というお得感
  • 気になる
    • VirtualBoxでWindows XPの画面が乱れる
    • MacPortsでruby, Railsをインストールしたが、マイグレーションなどのRakeタスクが動かなかった(詳細未調査)

といったところでしょうか。全体的にはおおむね快調です。

参考

カテゴリー: 未分類 タグ:

[MySQL] NOT NULLかつDEFAULTなしの列を追加した場合、データタイプデフォルト値が設定される。

2009 年 9 月 15 日 コメントはありません

MySQL(5.0系)で、すでにレコードが存在するテーブルにNOT NULLかつDEFAULTなしの列を追加してもエラーにならなかった。きちんと理解していないので調べておく。

以下のテーブルを作成し、レコードを追加しておく。

mysql> CREATE TABLE users (id INTEGER PRIMARY KEY);
mysql> DESC users;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    |                | 
+-------+---------+------+-----+---------+----------------+
mysql> INSERT INTO users VALUES(1);

NOT NULLでDEFAULTなしの列を追加してみる。

mysql> ALTER TABLE users ADD (name VARCHAR(255) NOT NULL, 
age INTEGER NOT NULL, created_at DATETIME NOT NULL);

エラーにならず、以下の値が設定された。

mysql> SELECT * FROM USERS;
+----+------+-----+---------------------+
| id | name | age | created_at          |
+----+------+-----+---------------------+
|  1 |      |   0 | 0000-00-00 00:00:00 | 
+----+------+-----+---------------------+

どうやら「データタイプデフォルト値」が設定されるもよう。
これは「ストリクトSQLモード」が有効な場合でも同じ結果となる。試してみる。

-- いったん列を削除
mysql> ALTER TABLE users DROP name;
mysql> ALTER TABLE users DROP age;
mysql> ALTER TABLE users DROP created_at;
 
-- ストリクトSQLモードを有効に
mysql> SET sql_mode = 'STRICT_ALL_TABLES';
mysql> SELECT @@sql_mode;
+-------------------+
| @@sql_mode        |
+-------------------+
| STRICT_ALL_TABLES | 
+-------------------+
 
-- ストリクトSQLモードでもエラーにならない
mysql> ALTER TABLE users ADD (name VARCHAR(255) NOT NULL, 
age INTEGER NOT NULL, created_at DATETIME NOT NULL);
mysql> SELECT * FROM USERS;
+----+------+-----+---------------------+
| id | name | age | created_at          |
+----+------+-----+---------------------+
|  1 |      |   0 | 0000-00-00 00:00:00 | 
+----+------+-----+---------------------+

せめてストリクトSQLモードが有効な場合にはエラーにしてほしいですね。要注意です。

参照ドキュメント:

カテゴリー: 未分類 タグ:

[MySQL] int(11)の11は最大桁数ではない

2009 年 9 月 1 日 コメント 1 件

危なかった。勘違いしてた。
int(11)の「11」って表示桁数を揃えるためのものであって、格納できるのはあくまで4バイトなんですね。
参照: 本家ドキュメント

試してみる。

mysql> create table int_test (id int(11) primary key);
Query OK, 0 rows affected (0.04 sec)
 
mysql> desc int_test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       | 
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
 
mysql> insert into int_test values(2147483647);
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into int_test values(2147483648);
ERROR 1062 (23000): Duplicate entry '2147483647' for key 1
カテゴリー: 未分類 タグ:

Ruby会議2009 2, 3日目

2009 年 7 月 21 日 コメントはありません

引き続き2, 3日目。

卜部 昌平氏「Ruby 1.8 のゆくえ」

1.8のメンテナの卜部さんが、現状と今後について説明してくださいました。

  • 1.8.5
    • 終了済み
  • 1.8.6
    • 1.8.7を使いたくないという人もいるそうで、メンテが必要な状況。Engine Yardの方がやっている。
  • 1.8.7
    • 最近のコミットのうち1/3がバグ修正。
    • いつまでメンテするかはなんともいえない。
  • 1.8.8
    • 1.9への移行ギャップを少なくしたいという意図がある。
    • 以下のようなコードがパースエラーにならないようにしたい。
    • if RUBY_VERSION >= "1.9.0"
        # code for 1.9
      else
        # code for 1.8
      end
  • 1.8.9
    • ありません。1.9使ってください。

Yugui氏 「Ruby 1.9.2ロードマップ」

続いてYuguiさんが1.9について説明。

  • 1.9.1
    • p243リリースする。
  • 1.9.2
    • プレビューリリースする。
    • 仕様に対する要望があれば今のうちに。
    • 機能としては地味だが、1.9のgrand designは固まった。as better 1.9.1.

ruby1.9自体は安定してきているので、どんどん移行してほしいとのこと。

大井 宏友氏「Railsサイト安定運用の心構え ~8つのサービスから学ぶ」

Xen上でRailsを運用してますよ、というお話。

  • mongrelからpassengerへ移行してきている。
  • Xen上でRailsを動作させている。
    • webとappだけ仮想マシンに載せている。
    • メモリ:16GB, CPU:Quad x 2のハードウェアに最大13VM(割当メモリ各1GB)
    • mongrelの最大インスタンス数はメモリ1GBで10, 2GBで24
    • よくある注意事項
      • 無意識にActiveRecordを使ってパフォーマンスに問題が発生しがち。
      • ログのローテーションを忘れがち。
      • Xen上ではひとつのVMがスワップを使いだすと、他のVMにも影響する。mongrelの定期リスタートや監視が必要。

遠藤 侑介氏「concov: 時系列に注目したテストカバレッジビューア」

テストカバレッジを時系列で把握することで、テストがないコードの追加やカバレッジの低下を可視化するツールconcovの紹介。
参照: http://d.hatena.ne.jp/ku-ma-me/20090708/

nari氏「RubyのGC改善による私のエコライフ」

GCのお話。
Ruby Enterprise Editionで行われている改善を本家に採用できないか検証したが、「forkが頻繁に発生しないようなアプリだと逆に遅くなる」とのこと。ちょっと期待しちゃいました。

3日目は遅刻&早退+体調不良でセッションの内容があんまり頭に入らなかった…。

私は去年参加した時と今回で勤めている会社が違うのですが、そのせいもあって前回とは違った聞き方をできたような気がします。少しだけ、事前に目的意識を持ったり、今後の取り組みへの判断材料を得たりできたかな。

今年も貴重な体験となりました。ruby会議実行委員会のみなさん、rubyコミュニティのみなさん、ありがとうございました。

カテゴリー: 未分類 タグ: ,

Ruby会議2009 1日目

2009 年 7 月 18 日 コメントはありません

去年に続き、今年もRuby会議に参加しています。参加したセッションで気になったことなどをメモ。

Scott Chacon氏「Using Git and GitHub to Develop One Million Times Faster」

gitいいよ、どんどん使って。という話

  • オフラインな状況でも使える
  • ローカルに対する操作だから速い
  • ブランチ、マージが楽
  • githubとか探せばプロジェクトもいっぱいある

というような話だったように思う。英語自信なし。

いくつかプロジェクトをgithubでwatchしてはいるものの、自分ではまだほとんど使っていません。ちょっと使ってみようと思います。

高井 直人氏「『エンタープライズRails』に学ぶ企業ユーザのためのRails活用の極意」

ご自身が監訳された書籍を紹介しつつ、その内容について講演。「きっと業務に対してrubyをどう適用したらいい結果がでるか、常日頃考えているんだろうな」という印象を受けました。こういう方、尊敬しちゃいますね。

  • 企業にとって最も重要な資産は「データ」
  • データ中心アプローチのメリットを整理
  • RailsにおけるDOAとの類似、相違を整理
    • 類似: モデル中心、CRUD分析重視
    • 相違: データモデルを重視しない、業務ルールはアプリケーション層のみで実現

くらいを導入として話された後、書籍の内容をいくつか紹介

  • データベースの制約をうまく使ってデータを保護しよう
    • NOT NULLだけでなく、チェック制約、外部キー制約など
    • モデルのバリデーションはあくまでユーザー向け
    • マイグレーションではexecuteでテーブル定義
  • 複合主キーを使う
    • 複合主キーだと、無駄なSQLを回避できるなどメリットもあるよね
    • composite_primary_keysプラグイン使って
  • データベースビューを利用する
    • 多数のJOINが必要な場合などは、ビューを定義してそれを参照するARを用意するとシンプルになるよ

セッション後は会場内の書籍売り場が、購入希望者でいっぱいでした。

Yehuda Katz氏「From Rails to Rack: Making Rails 3 a Better Ruby Citizen」

このセッションの英語はあんまり理解できなかった…。だいぶ雰囲気。

Rails3では各種コンポーネントへの密結合を解消し、rubyの色んな資産と協調していくよ、という話。たぶん。
そのためにAPIを定義しなおし、インターフェイスさえ揃えれば他のコンポーネントを利用できるようするみたい。具体的にコードを交えて説明してくださいました。

ActiveSupport::Concernのdepends_onメソッドが気になりますね。AOPっぽいことをスマートに表現してる印象。ちょっと違う?

明日も朝から参加なのでいいかげん寝ます。

カテゴリー: 未分類 タグ: ,

MySQLのvarcharは、最大サイズ65,535(バージョン5.0.3以降)

2009 年 3 月 24 日 コメントはありません

いろいろ勘違いしていたので整理。

  • varchar で指定するサイズは、バイト数ではなく文字数。
    • varchar(5)なフィールドに「あいうえお」を格納できる。
      (クライアント文字コードが正しく設定されている前提の話)
  • varcharの最大サイズは65,535。
    • ただし行にも最大サイズ(65,535「バイト」)があり、これに収まる限り。
  • blob、text型については別格納となるので、行サイズとしてはポインタ分のみ消費。

参照リファレンスは以下

カテゴリー: 未分類 タグ:

MySQLのGROUP BYは、寛容すぎて気持ちが悪い。

2009 年 2 月 25 日 コメントはありません

以前の職場ではOracleばかり使っていたのですが、MySQLを使うようになってちょっとカルチャーショック、というお話。

以下のようなテーブルがあってですよ、

mysql> SELECT table_a.* FROM table_a;
+-------+-------+-------+
| col_a | col_b | col_c |
+-------+-------+-------+
|     1 |     1 |     1 | 
|     2 |     1 |     2 | 
|     3 |     2 |     2 | 
|     4 |     2 |     1 | 
+-------+-------+-------+
4 rows in set (0.00 sec)

以下のように、GROUP BYに含まれない列でもSELECTできちゃうんですね。

mysql> SELECT col_b, col_c FROM table_a GROUP BY col_b;
+-------+-------+
| col_b | col_c |
+-------+-------+
|     1 |     1 | 
|     2 |     2 | 
+-------+-------+
2 rows in set (0.00 sec)

col_cの値はどれがSELECTされるのだろう…。物理的な先頭行の値?

Oracleだとたしか構文エラーになったよなーなんて思っていたのですが、ちゃんと「MySQLによる拡張です」って書いてありました。
本家ドキュメント:MySQL extends the use of GROUP BY…

前述のようなケースは「やっちゃだめ」とも書いてありますね。

Do not use this feature if the columns you omit from the GROUP BY part are not constant in the group.

さらに環境変数 sql_modeONLY_FULL_GROUP_BY を設定すれば、この拡張は抑制されるみたい。

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT col_b, col_c FROM table_a GROUP BY col_b;
ERROR 1055 (42000): 'database_a.table_a.col_c' isn't in GROUP BY

あいまいなSQLを未然に防止するためには、設定しておいた方がいい気がする…。

カテゴリー: 未分類 タグ:

IEのgetElementsByName

IEのgetElementsByNameはform要素しか対象としないっぽい。
しかも’ByName’とか言っておきながらid属性が一致するものまで取得する。

MSDN

いつも驚かせてくれますね。

カテゴリー: 未分類 タグ:

emacsの文字コード自動判別(保存時)をオフにする

2008 年 11 月 20 日 コメントはありません

Railsでのお話。
ビューのテンプレートはUTF-8、クライアントに対するレスポンスはSJISという都合で、metaタグで指定している文字コードとファイルの文字コードが不一致な状況。

で、これをemacsで保存したら、metaタグを見ているらしくSJISで保存されてしまう。(賢い、ね。)ちょっと今はこの自動判別をオフにしたい。

どうやら auto-coding-functions とやらにフック(?)が設定されているらしい。
M-x describe-variable してみると、

auto-coding-functions is a variable defined in `mule.el'.
Its value is 
(sgml-xml-auto-coding-function sgml-html-meta-auto-coding-function)

ですって。とりあえずXMLについては放置でよいので、~/.emacsに以下を追記。

(setq auto-coding-functions (remove 'sgml-html-meta-auto-coding-function auto-coding-functions))

ひとまず解決。

カテゴリー: 未分類 タグ:

MacPortsのインストール

2008 年 8 月 26 日 コメントはありません

iMac(20inch)を買ってしまいました♪今までメインで使っていたPowerBookG4(12inch)と比べるととても速い。画面も広々で快適です。
今日はMacPortsをインストール。以前から使っていましたが、この際なので手順などをメモ。
なお環境はOSX(10.5 Intel)です。

MacPortsの入手や情報はこちらから。

インストール手順

  • OSXのインストールCD/DVDからXcodeをインストールしておく。
  • ~/.profile に以下を追記(なければ作成)。
    export PATH=/opt/local/bin:/opt/local/sbin:$PATH
  • MacPortsのサイトにアクセスし、[Available Downloads] から環境にあったインストーラのディスクイメージをダウンロード&インストール。
  • ターミナルを開き、動作確認。
    port version
  • まずはselfupdate
    sudo port selfupdate
  • とりあえずsubversionでも入れますか。
    sudo port install subversion
  • あらら。
    Error: The following dependencies failed to build: apr-util sqlite3 gawk gettext ncurses ncursesw gmake readline cyrus-sasl2 openssl zlib neon serf
    Error: Status 1 encountered during processing.
  • 「You need to upgrade apr to 1.3.0 before installing apr-util.」らしい。
    sudo port upgrade apr
    sudo port install subversion
  • 入りました♪今日はとりあえずここまで。
    svn --version
    svn, バージョン 1.5.1 (r32289)
カテゴリー: 未分類 タグ: ,