インデントの深さで色を変えるEmacs拡張つくりました
https://github.com/laysakura/indent-color-el
にて,インデントの深さに応じて背景色を変えてくれるEmacs Lispを公開しました.
深いインデントであっても色付けすれば見やすく「JavaScript Scope Context Coloring」 という記事を見て,「それってエディタでやることでしょ!!」と思ったときには気付いたらできてました.
手抜きスクリプトですが使ってあげてください.
改良して欲しい点
どんどんforkして改良して教えてください.
ダメな部分はこんな感じ.
- 配色の設定が全然フレキシブルじゃない
- そもそも配色がきもい
- 途中から16進カラーコード考えるのすら諦めてる
- インデント = 2個半角スペースという大胆さ
- タブインデント派,4スペース派,8スペース派を断固無視
- マイナーモードにするのがベストじゃないか説
- メジャーモードごとのインデント方法に綺麗に対応
- こんなの10行あれば書けるだろ
改良を切に願っております.
MySQL 5.6 で動くストレージエンジン・テンプレート
この記事は↓に移転しました。
laysakura.github.io
MySQL 5.6 で EXAMPLE ストレージエンジンを使ってみる
EXAMPLE ストレージエンジンは,ストレージエンジンを作成する人のためのテンプレートです.詳しくはこちら.
http://dev.mysql.com/doc/refman/5.6/en/example-storage-engine.html
今回は,MySQL 5.6 をソースからインストールすることを前提に EXAMPLE ストレージエンジンの導入について記します.
MySQL 5.6 の基本的なインストール方法はこちらをどうぞ.
http://d.hatena.ne.jp/laysakura/20130209/1360422816
インストール時の設定
インストールの際,cmake のフラグに "-DWITH_EXAMPLE_STORAGE_ENGINE" を付けます.
$ cmake -DWITH_EXAMPLE_STORAGE_ENGINE
あとは通常通り make && make install です.
インストール後の設定
mysqld サーバが立ち上がっていて,mysql クライアントで接続できていることを前提とします.
MySQL で使用できるストレージエンジンの一覧は,"show engines" コマンドで確認できます.
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
多分現時点で EXAMPLE ストレージエンジンは見えていないと思います.ですので,これから EXAMPLE ストレージエンジンを使用可能にする方法を書きます.
まず,"$basedir/lib/plugin/ha_example.so" が存在してることを確認して下さい.当環境では "/usr/local/mysql/lib/plugin/ha_example.so" がありました.
この状態で,MySQL のシェルに -u root として入り,次のコマンドを実行します.
mysql> INSTALL PLUGIN EXAMPLE SONAME 'ha_example.so'; Query OK, 0 rows affected (0.01 sec)
これで晴れて EXAMPLE ストレージエンジンが使用可能になったはずです.
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | EXAMPLE | YES | Example storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
使ってみる
実際に使ってみましょう.
http://dev.mysql.com/doc/refman/5.6/en/example-storage-engine.html
のページと同じ事をします.
mysql> CREATE TABLE test (i INT) ENGINE = EXAMPLE; Query OK, 0 rows affected (0.06 sec) mysql> INSERT INTO test VALUES(1),(2),(3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM test; Empty set (0.00 sec)
上記ページの記述と異なり,INSERT はエラーとなりません.仕様が変わったのでしょうかね?
MySQL 5.6 をソースからビルドする
所々で話題の MySQL 5.6 をソースからビルドしたので,その記録を書いておきます.
今回は MySQL 5.6.10 を使用しますが, MySQL 5.6.XX ならそんなに変わらないと思います.
Ubuntu での作業です.ディレクトリ構成など読み替えは適宜.
ソースの取得
1. http://dev.mysql.com/downloads/
2. "MySQL Community Server"
3. "Select Platform" リストボックスで "Source Code" を選択
4. "Generic Linux (Architecture Independent), Compressed TAR Archive"
ソースの展開
$ tar xvf mysql-5.6.10.tar.gz $ cd mysql-5.6.10
cmake, make, make install
MySQL は (確か最近のバージョンから) いわゆる "configure && make && make install" ではなく "cmake && make && make install" なインストール方法を採用してます.
cmake は configure のようなもので, Makefile を作ってくれます.
cmake が入ってなければパッケージインストーラなりで適宜.
$ # Ubuntu の例 $ sudo apt-get install cmake
cmake に付けられるオプション一覧は
$ cmake . -LH
で見ることができて便利です.好みに合わせてオプションをつけることとなるでしょうが,今回はこうしました.
$ cmake -DMYSQL_DATADIR=/var/lib/mysql
テーブルやログなどのデータが入る datadir だけ明示的に指定してます.*1
お次は make. MySQL は make の出力が pretty です :)
$ make Scanning dependencies of target INFO_BIN [ 0%] Built target INFO_BIN Scanning dependencies of target INFO_SRC [ 0%] Built target INFO_SRC ...
警告こそ出るものの,エラーなく make が終わりました.
あとは make install です.インストール先を特に指定していないので,/usr/local/mysql/ 以下に色々とインストールされるようです.
$ sudo make install
起動するまでの諸々
流れとしてはこんな感じです.
1. /etc/my.cnf を作成
2. mysql ユーザ・グループを作成
3. mysql_install_db を実行
4. 起動スクリプトを仕込む
5. MySQL サーバ起動
6. クライアントからの接続チェック
/etc/my.cnf を作成
テンプレートがあるのでそれをコピーします.
$ sudo cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
MySQL 5.6 のテンプレートは随分と簡素ですので,以前から使っていた設定ファイルがある場合はそちらを使ったほうが良いかもしれません.
今回は最低限,basedir (インストール先) と datadir (テーブルやログが入る) を指定しておきましょう (必須かは知りません).
... # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /var/lib/mysql # port = ..... ...
mysql ユーザ・グループを作成
MySQL を走らせる mysql ユーザとグループを作成しましょう.
$ sudo groupadd mysql $ sudo useradd -g mysql -d /bin/false mysql
mysql_install_db を実行
mysql_install_db コマンドは,起動時に必要なデータを datadir に書き込むのですが,今回の作業では datadir にするつもりだった /var/lib/mysql/ ができていなかったので作成します.mysql ユーザ・グループにパーミションを与えるのも忘れずに.
$ sudo mkdir /var/lib/mysql
$ sudo chown mysql:mysql /var/lib/mysql
mysql_install_db コマンドを実行します.
$ sudo /usr/local/mysql/scripts/mysql_install_db
この出力で "OK" と二箇所で言われていれば大丈夫です.*2
この出力は割と重要なことを言っているのでしっかりと読んでおいて下さい.
このコマンドでできたファイルは所有者が root だったりするので,これらも mysql ユーザ・グループから読み書きできるようにします.
$ sudo chown mysql:mysql -R /var/lib/mysql/*
起動スクリプトを仕込む
起動スクリプトを仕込みましょう.
$ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
MySQL サーバ起動
起動スクリプトから MySQL サーバを起動しましょう.
$ sudo /etc/init.d/mysqld start
エラーログは基本的に datadir 直下にあるはずなので,起動に失敗したらチェックしましょう.
クライアントからの接続チェック
接続チェックを行います.
$ /usr/local/mysql/bin/mysql -u root
MySQL のシェルに入れたら成功です.
ついでにテーブルを作ってみましょう.
mysql> use test Database changed mysql> create table foobar (a INT); Query OK, 0 rows affected (0.52 sec) mysql> insert into foobar values (777), (333); Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from foobar; +------+ | a | +------+ | 777 | | 333 | +------+ 2 rows in set (0.00 sec)
やり残したこと
現状,MySQL の root ユーザにパスワードが設定されておらず危険です.
http://www.yukun.info/blog/2008/10/create-user-grant-password.html
などにユーザ管理周りのことが書いてありますので,ご参照下さい.
真・SSEを使って8flops/clockを実現する
この記事は↓に移転しました。
laysakura.github.io