ymt2log https://weblog.ymt2.net/blog/html/ Yuru-fuwa Pythonista en-us Thu, 01 Sep 2016 00:00:00 +0900 https://weblog.ymt2.net/blog/html/2016/09/01/camp_at_marumo.html https://weblog.ymt2.net/blog/html/2016/09/01/camp_at_marumo.html <![CDATA[千葉・金谷で開発合宿やってきた]]> 千葉・金谷で開発合宿やってきた

コミュニティースペース「まるも」さんにお世話になった。利用したのは 開発合宿プラン|千葉県金谷のまるもで開発合宿しませんか? で WiFi はもちろん、宿の手配までお願いできた。いたれりつくせりである。

R0018407

テラス的なのがあったり。

R0018408

お菓子やコーヒーまで用意してもらったり。

R0018410

貸切の作業スペースの広さは申し分なし。聞くところによると 15 名ほどでの作業も余裕とのこと。

R0018422

偶然、花火大会と日程がかぶっていたのでついでに。

14114947_1082843295125132_8563333309871155127_o

町の小さな花火大会だけど距離が近くてなかなかの迫力。

14124519_1082843308458464_6082290351891439660_o

海の側の町なので海産物がおいしいとのことだったが今回はあまり食べられず。次の機会を楽しみにしよう。おわり。

]]>
Thu, 01 Sep 2016 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2016/06/30/how_to_deploy_a_dump_with_mysql_on_docker.html https://weblog.ymt2.net/blog/html/2016/06/30/how_to_deploy_a_dump_with_mysql_on_docker.html <![CDATA[Docker 上の MySQL に dump を適用する]]> Docker 上の MySQL に dump を適用する

hub.docker.com OFFICIAL REPOSITORY mysql なんかを起動して dump ファイルを適用したいときは下記でいける。ポイントは -t オプションをつけないこと。

$ docker exec -i {CONTAINER ID} mysql {CREDENTIALS} {DB} < dump.sql
]]>
Thu, 30 Jun 2016 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2016/06/21/touch_reload_event_listener_for_supervisor.html https://weblog.ymt2.net/blog/html/2016/06/21/touch_reload_event_listener_for_supervisor.html <![CDATA[Supervisor で touch-reload する Eventlistener]]> Supervisor で touch-reload する Eventlistener

つくった。

作った動機とか用途とか

Wercker で CI しつつデプロイする先がさくら VPS 上の FreeBSD jail という構成のアプリを デプロイのたびに再起動する方法を考えていて、uWSGI の touch-reload オプションみたいなのがあればできそうだなーと思いあたってそのまま実装した。

使いかた

動作環境やら事前準備やら

設定

Supervisor の conf ファイルに下記を記載して $ supervisorctl reload する。トリガーファイルを touch すると指定した program が再起動するはず。

今回は jail 内の Supervisor を調整したいのでこんな /usr/jails/{container}/home/{user}/{program}.reload 感じのパスを touch すると無事再起動された。あとは SSH しつつ叩くだけ。

[eventlistener:touch_reload]
command={Python 2.7} {touch_reload_event_listener.py のパス} -p {Supervisor 上の program_name} -f {トリガーファイルのパス}
events=PROCESS_STATE

参考にしたもの

superlancememmon.py を全力で参考にした。

]]>
Tue, 21 Jun 2016 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2015/12/27/jenkins_amazon_ec2_plugin_does_not_start_ec2_slaves_collectory.html https://weblog.ymt2.net/blog/html/2015/12/27/jenkins_amazon_ec2_plugin_does_not_start_ec2_slaves_collectory.html <![CDATA[[Jenkins] Amazon EC2 Plugin でスレーブがうまく動作しないときに確認すること]]> [Jenkins] Amazon EC2 Plugin でスレーブがうまく動作しないときに確認すること

Amazon EC2 Plugin を利用して分散ビルド的なことをしたかった際にいくつかつまづいたのでメモ。プラグインそのものが原因であることはそんなになかったかも。

ラベルをまたいで同じ “AMI ID” を設定していないか

“Jenkins > configuration” 内 “Cloud > Amazon EC2 > AMIs > Labels” にてラベルを設定し、特定のジョブを実行するインスタンスを制限する、ということができる大変便利な機能がある。

しかし “Instance Cap” と “ラベルをまたいで同じ AMI ID を設定” の条件を満たしている場合に、起動数のカウントがラベルをまたいで合算されてしまい “Instance Cap” にひっかかり、期待よりも少ない数のインスタンスしか起動しない、という挙動にぶつかってしまった。

さしあたって AMI をコピーし、別の AMI ID を発行して難をのがれたがしばらく原因がわからず時間を浪費した。

issue としてリストされているようなので、いずれ解決されることに期待。

スレーブのローカルストレージの空きは十分か

“Jenkins > nodes” から設定できるように、ローカルストレージの空きが閾値以下になると該当するノードでのタスク実行を行わなくする機能がある。

Amazon EC2 Plugin ではいちど起動した EC2 インスタンスを再利用するため、タスク実行の際に発生したデータをストレージに貯めてしまい、この閾値にひっかかることがあった。

EC2 インスタンスの起動数上限に逹していないか

Amazon EC2 サービスの制限 にあるとおり、起動できる EC2 インスタンスの数にはリージョンごとに制限がある。 必要であれば制限緩和のリクエストを投げることができるので対応すること。

]]>
Sun, 27 Dec 2015 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2014/03/26/replace_existing_git_repository_to_backlog.html https://weblog.ymt2.net/blog/html/2014/03/26/replace_existing_git_repository_to_backlog.html <![CDATA[既存の git リポジトリを backlog に移行する]]> 既存の git リポジトリを backlog に移行する

自前で管理していた共有の Git リモートリポジトリを backlog に移行したときのメモです。

リポジトリの移行

リモートリポジトリをローカルに clone している前提です。

$ cd {ローカルリポジトリのルート}
$ git remote -v # リモートリポジトリの URL を確認
$ cd ..
$ clone --mirror {リモートリポジトリ} repository_bare
$ cd repository_bare
$ git push --mirror {backlog のリモートリポジトリ URL}

チームへの共有

チームには下記コマンドをローカルリポジトリのルートで叩いてもらいましょう。

$ git remote set-url origin {backlog のリモートリポジトリ URL}
]]>
Wed, 26 Mar 2014 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/11/23/installing_mysql_56_on_mac_os_x_10_9_mavericks.html https://weblog.ymt2.net/blog/html/2013/11/23/installing_mysql_56_on_mac_os_x_10_9_mavericks.html <![CDATA[MySQL 5.6 を MacPorts で Mac OS X Mavericks にインストールしたときのメモ]]> MySQL 5.6 を MacPorts で Mac OS X Mavericks にインストールしたときのメモ

$ sudo port install mysql56-server でいけると思っていたらどうもビルドがこける。 ぐぐるとパッチを当てて回避しているひとがいるみたいなので試してみた。 http://bugs.mysql.com/bug.php?id=70542

環境とか

  • Mac OS X 10.9 Mavericks
    • Command line tools インストール済み
  • MacPorts 2.2.1
  • MySQL 5.6.13

MySQL にパッチを当てる

上記ウェブサイトで fix-build-on-macosx-9.patch を検索するとリンクが見つかるので、そこからパッチを落とす。また、以下のコマンドでインストールせずに MySQL のソースだけを落とす。

$ cd ~
$ sudo port clean mysql56-server
$ sudo port -f patch mysql56-server

ソースのディレクトリに移動してパッチを当てる。

$ cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_databases_mysql56/mysql56/work/mysql-5.6.13/include
$ sudo patch -p 0 < ~/Downloads/fix-build-on-macosx-9.patch

インストールを実行。

$ cd ~
$ sudo port -f install mysql56-server
$ sudo -u _mysql /opt/local/lib/mysql56/bin/mysql_install_db
$ sudo port load mysql56-server
$ /opt/local/lib/mysql56/bin/mysqladmin -u root password 'パスワード'

ログインできたら成功。

$ mysql56 -uroot -p

補足

mysqld_safe が動かなかったので修正した記録と記憶が残っていたのだけど、本当に必要な操作であったかを覚えていない…。念のため diff を貼っておく。

--- mysqld_safe.org     2013-11-20 22:35:24.000000000 +0900
+++ /opt/local/lib/mysql56/bin/mysqld_safe      2013-11-20 22:36:11.000000000 +0900
@@ -719,24 +719,22 @@
# Note: The switches to 'ps' may depend on your operating system
if test -f "$pid_file"
then
-  PID=`cat "$pid_file"`
-  if kill -0 $PID > /dev/null 2> /dev/null
-  then
-    #if
-    #then    # The pid contains a mysqld process
-    #  log_error "A mysqld process already exists"
-    #  exit 1
-    #fi
-  fi
-  rm -f "$pid_file"
-  if test -f "$pid_file"
-  then
-    log_error "Fatal error: Can't remove the pid file:
+    PID=`cat "$pid_file"`
+    if kill -0 $PID > /dev/null 2> /dev/null
+    then
+       # The pid contains a mysqld process
+       log_error "A mysqld process already exists"
+       exit 1
+    fi
+    rm -f "$pid_file"
+    if test -f "$pid_file"
+    then
+       log_error "Fatal error: Can't remove the pid file:
        $pid_file
        Please remove it manually and start $0 again;
        mysqld daemon not started"
-    exit 1
-  fi
+       exit 1
+    fi
fi

#
]]>
Sat, 23 Nov 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/11/11/regular_expression_for_jis_x_0208.html https://weblog.ymt2.net/blog/html/2013/11/11/regular_expression_for_jis_x_0208.html <![CDATA[[Shift_JIS] JIS 基本漢字 (JIS X 0208) 第1・2水準漢字を表わす正規表現]]> [Shift_JIS] JIS 基本漢字 (JIS X 0208) 第1・2水準漢字を表わす正規表現

PHP を使って、ある文字列中に JIS 基本漢字 (JIS X 0208) の第 1・2 水準漢字以外のものが含まれているかどうかの判定を実装したかったのですが、いろいろと苦労した & 結局最悪の実装をしたのでその顛末と途中の成果物をここに記します。

これらのウェブサイトがとても参考になりました。

Unicode と JIS 基本漢字コードではその出現順が異なる

JIS X 0208 (1990) to Unicode 漢字コード表 の 16 区以降を見るとわかる通り、 Unicode と SJIS のコード順は異なります。 よって、UTF-8 の文章に対してよくみる [亜-椀] では、うまく第 1 水準漢字だけにマッチすることはできないのです。

たとえば、 逢:E980A2 (UTF-8)亜:E4BA9C (UTF-8) - 椀:E88595 (UTF-8) の間には収まらない、といった風に。

Unicode で範囲マッチできないなら SJIS でやればいいじゃない

今回の目的を達成するには UTF-8 のまま扱うのはとてもしんどいので、マッチさせるときだけ SJIS にエンコードしてしまいましょう。 Python でやるならこんな感じ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import re

# 第 1 水準漢字(16 - 47 区)にマッチ
regexp_for_JIS_16_TO_47 = re.compile(r'\x88[\x9F-\xFC]|[\x89-\x97][\x40-\xFC]|\x98[\x40-\x9E]')

# 第 2 水準漢字(48 - 84 区)にマッチ
regexp_for_JIS_48_TO_84 = re.compile(r'\x98[\x9F-\xFC]|[\x99-\xE9][\x40-\xFC]|\xEA[\x40-\xA4]')

# SJIS にエンコードしてマッチング
regexp_for_JIS_16_TO_47.match(u"腕".encode('sjis'))

結局 PHP では SJIS コードを指定する正規表現が使えなかった

PHP で正規表現を利用したマッチングといえば preg_match ですが、マルチバイトの文字列を対象とする場合は UTF-8 しか受け付けないとのこと。これでは折角用意した正規表現が使えない…

ならば ereg を使えばよいかというと

この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。

とのこと。結局あきらめて、 第1・2水準漢字すべてを羅列した正規表現 を用意したのでした。これは書くまでもないので割愛。というか思い出したくない。

]]>
Mon, 11 Nov 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/11/01/vnc_with_sakura_vps.html https://weblog.ymt2.net/blog/html/2013/11/01/vnc_with_sakura_vps.html <![CDATA[[Ubuntu][VNC]さくらの VPS で VNC をはじめるまでのメモ]]> [Ubuntu][VNC]さくらの VPS で VNC をはじめるまでのメモ

とにかくインスタントに VNC をはじめるための手順です。

環境

  • さくらの VPS
  • Ubuntu 12.0.4 amd64

手順

デスクトップ環境のインストール

$ sudo apt-get install --no-install-recommends ubuntu-desktop

VNC サーバのインストール

$ sudo apt-get install vnc4server

VNC サーバを起動して初期設定

初回起動で、パスワードの設定を行ないます。とりあえず起動したらすぐ停止。同時に ~/.vnc 以下に設定ファイルが配置されます。

$ vncserver :1
$ vncserver -kill :1

VPS 接続時に GNOME が起動するように下記の設定を追記。

$ echo "gnome-session --session=ubuntu-2d &" >> ~/.vnc/xstartup

設定ができたのでもう一回起動。

$ vncserver :1

Mac OS X から VNC サーバへ接続

Mac OS X から接続してみましょう。デフォルトで VNC クライアントが入っているなんて Mac さん素敵。

  1. Finder で ⌘+k を叩いて「サーバへ接続」を開く
  2. 「サーバアドレス」に「vnc://user_name@ip_address:5901」を入力
  3. 「接続」で「画面共有」が立ち上がり GNOME デスクトップを利用できるようになります。
]]>
Fri, 01 Nov 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/10/08/oniguruma_with_emacs_24.html https://weblog.ymt2.net/blog/html/2013/10/08/oniguruma_with_emacs_24.html <![CDATA[[Emacs 24] ふつうの正規表現を使いたい foreign-regexp で 鬼車を使う]]> [Emacs 24] ふつうの正規表現を使いたい foreign-regexp で 鬼車を使う

Emacs の正規表現 はほんとにつらい。 syntax_classes のブラケットにもバックスラッシュが必要だったりととにかくバックスラッシュ地獄で、リプレイスするのにわざわざ別のエディタ使うレベル。

foreign-regexp でラクしましょう。外部コマンドに Ruby を指定することで、 豊富な表現で再帰まで使える 正規表現ライブラリ 鬼車 をインクリメンタルサーチやリプレイスに利用できます。

インストールした環境

  • Mac OS X 10.8.5
  • Emacs 24.3.1
  • ruby 1.9.3p392 (rbenv)

インストール手順

package-install できます。これを *scratch* バッファにでもコピーして C-x C-e でおしまい。

(package-install 'foreign-regexp)

.emacs に追記。 foreign-regexp/regexp-type には perl / ruby / javascript が指定できるようです。今回は 鬼車 が使いたいので ruby を指定。

(cond ((require 'foreign-regexp nil t)
       (custom-set-variables
       '(foreign-regexp/regexp-type 'ruby)
       '(reb-re-syntax 'foreign-regexp))))

使い方をさっくりと

インクリメンタルサーチ
M-s M-s
インクリメンタルサーチ(逆方向)
M-s M-r
リプレイス
M-s M-%

これでわかりやすい正規表現を使える!!

エスケープ地獄から開放される幸せ。

例:連続したひらがなをインクリメンタルサーチ
M-s M-s \p{Hiragana}+
例:連続したひらがな以外の文字をインクリメンタルサーチ
M-s M-s \p{^Hiragana}+

がんばるともっといろいろできます。 回文や XML にマッチする鬼車の正規表現 - まめめも

]]>
Tue, 08 Oct 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/09/21/where_is_provisioning_profiles_editor.html https://weblog.ymt2.net/blog/html/2013/09/21/where_is_provisioning_profiles_editor.html <![CDATA[[Xcode5.0] プロビジョニングプロファイルの追加がわかりづらくて困った]]> [Xcode5.0] プロビジョニングプロファイルの追加がわかりづらくて困った

ここにあります

Xcode を 5.0 にアップデートして一番困ったのがプロビジョニングプロファイルの追加。以前は Organizer を開いてすぐに見付かる場所にあったのが、メニューの中に移動されてしまったようです。

Organizer を開いた状態で メニューバーの Editor -> Provisioning Profiles -> Import Profile... でファイル選択ダイアログが開きます。

../../../_images/menubar.png
]]>
Sat, 21 Sep 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/09/11/classification_of_audience_with_mysql.html https://weblog.ymt2.net/blog/html/2013/09/11/classification_of_audience_with_mysql.html <![CDATA[[MySQL][マーケティング] *n 層の分類をする SQL]]> [MySQL][マーケティング] *n 層の分類をする SQL

性別、生年月日(8桁数値)のカラムを持つテーブルのデータをマーケティングでよくみる ([MF][1-3]|C|T) 層に分類したところ、えらい残念な SQL ができたのでメモ。

Fn層の分類についてはこの辺 ( F1層 とは - コトバンク ) を参照のこと。

テーブルはこんな感じでした。

1
2
3
4
CREATE TABLE `user` (
   `gender` TINYINT(1) NOT NULL, -- 0が男性, 1が女性
   `birthday` CHAR(8) NOT NULL,
);

で、分類する SQL は以下。もうちょいマシにならないものか。今回、子供を正確に分類する必要がなかったため [MF]0 層として計上しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
SELECT b.class, COUNT(b.class) AS count
FROM (
  SELECT CONCAT(
    CASE gender WHEN 0 THEN 'M' ELSE 'F' END,
    CASE
      WHEN a.age < 20 THEN '0'
      WHEN a.age < 25  THEN '1'
      WHEN a.age < 35 THEN '2'
      ELSE '3' END
    ) AS class
  FROM (
    SELECT
      (YEAR(CURDATE()) - YEAR(date_format(birthday,'%Y-%m-%d')))
      - (RIGHT(CURDATE(),5) < RIGHT(date_format(birthday,'%Y-%m-%d'),5)) AS age
    FROM user
  ) a
) b
GROUP BY b.class

こんな感じの結果が返ってきます。

+-------+-------+
| class | count |
+-------+-------+
| F0    |   100 |
| F1    |   200 |
| F2    |   300 |
| F3    |   400 |
| M0    |   100 |
| M1    |   200 |
| M2    |   300 |
| M3    |   400 |
+-------+-------+

いちおう分類表も書いておきます(表組みの練習もかねて)。

ターゲットユーザの分類
表記 性別 年齢層
M1 男性 20 - 34 歳
M2 男性 35 - 49 歳
M3 男性 50 歳以上
F1 女性 20 - 34 歳
F2 女性 35 - 49 歳
F3 女性 50 歳以上
C 男女 4 - 12 歳
T 男女 13 - 19 歳
]]>
Wed, 11 Sep 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/09/05/fail_migrate_on_flyway.html https://weblog.ymt2.net/blog/html/2013/09/05/fail_migrate_on_flyway.html <![CDATA[DB マイグレーションツール Flyway で fail したときのメモ]]> DB マイグレーションツール Flyway で fail したときのメモ

最近プロジェクトに DB マイグレーションツールであるところの、 flyway を導入しました。

SQL ベースで DB の状態を管理していくので、特定の O/R マッパーに依存することもなく、プロジェクトが走り出してからさくっと導入するぶんには特に問題も起こりませんでした。

そんななか migratefail したときに少々困ったのでメモ。

fail するとどうなるか

fail するとこんな感じでエラーメッセージが表示されて処理が停止します。

1
2
3
4
5
6
7
$ ./flyway.sh migrate
Flyway (Command-line Tool) v.2.2.1

Current version of schema `HOGEDB`: 3.1
Migrating schema `HOGEDB` to version 3.2
ERROR: com.googlecode.flyway.core.api.FlywayException: Migration of schema `HOGEDB` to version 3.5 failed! Please restore backups and roll back database and code!
以下エラー文

schema_version テーブルを見てみると、 version0 になっているレコードが挿入されていました。この状態ではいくら migrate コマンドを実行してもマイグレーションは行なわれません。

repair してあげよう

以下のように repair コマンドを実行することで、 success0 なレコードが取り除かれ、 migrate コマンドを実行できるようになります。もちろん migrate コマンドを実行する前に DB や SQL に起こっている問題は解消しておきましょう。

1
2
3
4
5
$ ./flyway.sh repair
Flyway (Command-line Tool) v.2.2.1

Metadata table `HOGEDB`.`schema_version` successfully repaired (execution time 00:00.001s).
Manual cleanup of the remaining effects the failed migration may still be required.

migrate できた。

1
2
3
4
5
6
$ ./flyway.sh migrate
Flyway (Command-line Tool) v.2.2.1

Current version of schema `HOGEDB`: 3.4
Migrating schema `HOGEDB` to version 3.5
Successfully applied 1 migration to schema `HOGEDB` (execution time 00:00.102s).
]]>
Thu, 05 Sep 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2010/10/19/comment_out_on_batch.html https://weblog.ymt2.net/blog/html/2010/10/19/comment_out_on_batch.html <![CDATA[[Windows]バッチファイルにて処理対象ファイル内でコメントアウトを扱う]]> [Windows]バッチファイルにて処理対象ファイル内でコメントアウトを扱う

仕事で必要になったのでメモします。 利用したいコマンドが、大量データを扱うにもかかわらずファイル内のコメントをサポートしていなかったら、やっぱり寂しいですよね。そんな時に。

手順としては単純です。

  • FINDSTRで正規表現を用いて任意のパターンを含む行を無視してリダイレクト
  • リダイレクトして作った中間ファイルを任意のコマンドに入力

以上です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@echo off

if "%‾1" == "" goto usage

SET VALUE=%1

rem "^#"とマッチする行を無視して中間ファイルを作成
type %1 | findstr /v "^#" &gt; tmp.dat
hoge.exe tmp.dat

pause
goto :eof

:usage
echo Usage: fuga.bat piyo

おまけに引数チェックも。

for文でどうやらコメントアウトが扱えるらしいと聞いたのは、もちろんfor文も書き込んで、ぐるぐると処理が回りきったあとのことでした。

]]>
Tue, 19 Oct 2010 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2011/04/09/sync_facebook_events_to_ical.html https://weblog.ymt2.net/blog/html/2011/04/09/sync_facebook_events_to_ical.html <![CDATA[Facebook の Events を iCal に同期する]]> Facebook の Events を iCal に同期する

FacebookのEventsページにあるExport Eventsから、iCalやGoogle CalenderからEventsを照会できるURLを入手することができます。このURLを利用して、iPhoneのカレンダーにEventsを同期することが可能です。べんり。

  • Export Eventsダイアログに表示されたURLをiPhoneに送信
  • 「設定→メール/連絡先/カレンダー→アカウントを追加→その他→照会するカレンダーを追加」で先程のURLを入力。

以上の手順でiPhoneのカレンダーより照会可能です。

]]>
Sat, 09 Apr 2011 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/08/23/install_migemo_to_emacs_24_3_1.html https://weblog.ymt2.net/blog/html/2013/08/23/install_migemo_to_emacs_24_3_1.html <![CDATA[migemo を emacs 24.3.1 にインストールしたときのメモ, Mac OS X]]> migemo を emacs 24.3.1 にインストールしたときのメモ, Mac OS X

migemo とは

migemo とは、ローマ字を入力することで日本語文章をインクリメンタルサーチするためのソフトウェアです。emacs 拡張を利用すると、いつもの C-s がそのまま日本語に対応します。

今回はC言語で実装された cmigemo をインストールします。

cmigemo のインストール

github から cmigemo を入手してインストールします。オプションはデフォルトのままにしておきました。デフォルトでは /usr/local/ 以下にインストールされます。

$ git clone https://github.com/koron/cmigemo.git cmigemo
$ cd cmigemo
$ ./configure
$ make osx
$ make osx-dict
$ sudo make osx-install

cmigemo を試してみる

下記のコマンドを実行するとプロンプトが表示され、入力待ちの状態になります。

$ cmigemo -d /usr/local/share/migemo/utf-8/migemo-dict
migemo_open("/usr/local/share/migemo/utf-8/migemo-dict")=0x7fb552c03990
clock()=0.120343
QUERY:

QUERY 適当なローマ字を入力してみると、正規表現が生成されることがわかります。正規表現を入力の度に生成し、それを検索クエリとすることでインクリメンタルサーチを可能にするわけですね。

QUERY: paison
PATTERN: (パイソ[ンノネヌニナ]|パイソ[ンノネヌニナ]|ぱいそ[んのねぬにな]|paison|paison)
QUERY: toukyo
PATTERN: (トウキョ|トウキョ|等距離|登極|(|協会)|[教京]|とうきょ|toukyo|toukyo)
QUERY:

migemo.el のインストール

emacs 拡張の migemo.elpackage.el を使うと簡単にインストールできます。 *scratch* バッファで (package-install ‘migemo) を評価でもしてやると入ります。

migemo.el の設定

init.el にこんな感じの設定を追記。 C-s してミニバッファに [MIGEMO] I-search と表示されれば日本語インクリメンタルサーチが可能になっているはずです。

(require 'migemo)
(setq migemo-command "/usr/local/bin/cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(setq migemo-regex-dictionary nil)
(load-library "migemo")
(migemo-init)
]]>
Fri, 23 Aug 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2012/12/13/chatwork_meets_fluid.html https://weblog.ymt2.net/blog/html/2012/12/13/chatwork_meets_fluid.html <![CDATA[ChatWork + Fluidで未読件数の表示をする]]> ChatWork + Fluidで未読件数の表示をする

Fluidで作ったchatwork.comアプリで未読表示

Fluid でユーザスクリプトが使えることを知ってちょろっと探してみると上の記事が見つかったので。

Fluidって?

WebアプリのURLを食べさせるとMacOSのhoge.appを吐き出してくれるものです。ユーザスクリプトはPurchaseしないと利用できない模様。

元の記事と何が違うの?

未読件数の表示に加えて、Docのアイコンが跳ねます。changelogを見ると`window.fluid.requestUserAttention`ってAPIがあったのでこれや!と思って1行追加しただけです。 Fluid Developer 見ても書いてなかったぞ。。。

]]>
Thu, 13 Dec 2012 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2012/12/27/cannot_connect_to_google_play_store.html https://weblog.ymt2.net/blog/html/2012/12/27/cannot_connect_to_google_play_store.html <![CDATA[Google Playストアに接続できなくなったときの対処法]]> Google Playストアに接続できなくなったときの対処法

Xperia S LT26iでいきなりGoogle Playストアが使えなくなって困ったので対処法をメモ。

事象

充電が完全に切れた状態で放置していたXperia S LT26i(OSのバージョンは 2.3.7)を久々に起動し、Google Playストアを立ち上げたところ、真っ白な画面に「接続できません」の文字が。「再接続」ボタンを押しても一向に正常に動作する気配もなし。特に原因を示唆する文言もないためかなり困る。

対処法

内蔵時計がリセットされていたのが原因でした。設定から日付・時刻をしっかり合わせてからGoogle Playストアを立ち上げるとそこには元気なマーケットプレイスの姿が。

]]>
Thu, 27 Dec 2012 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/08/06/enable_google_analytics.html https://weblog.ymt2.net/blog/html/2013/08/06/enable_google_analytics.html <![CDATA[Tinkerer で Google Analytics を有効化する]]> Tinkerer で Google Analytics を有効化する

折角公開したので、 Google Analytics をのせてみました。

まぁ、Tinkerer の ドキュメント を読めば書いてあることです。

トラッキングコードを保存して

_static/google_analytics.js にトラッキングコードをコピペ

$ cd {Tinkerer のルートディレクトリ}
$ mkdir _static
$ touch _static/google_analytics.js

テンプレートを作り

$ touch _templates/page.html

テンプレートからトラッキングコードを読み込んで

_templates/page.html を編集

{% extends "!page.html" %}

{% set script_files = script_files + ["_static/google_analytics.js"] %}

ビルドしておわり

$ tinker -b
]]>
Tue, 06 Aug 2013 00:00:00 +0900
https://weblog.ymt2.net/blog/html/2013/08/02/blogging_with_sphinx.html https://weblog.ymt2.net/blog/html/2013/08/02/blogging_with_sphinx.html <![CDATA[Tinkerer でブログをはじめてみました]]> Tinkerer でブログをはじめてみました

Sphinx を使ってブログが書ける Tinkerer を発見したのではじめてみました。 ホスティングは GitHub を利用しています。

GitHub でブログを公開するまでにやったこと

virtualenv で仮想環境を作る

Sphinx の拡張機能をいろいろ試したかったので仮想環境を用意しました。Github Pages に公開したかったので Git リポジトリも同時に作成。

$ cd {your_git_directory}
$ git init hoge
$ cd hoge
$ mkvirtualenv hoge

あと、 $ workon hoge とかやってすぐに書きはじめられるといいなーと思ったので $VIRTUAL_ENV/bin/.postactivate を以下のように編集。これで workon したときに Git リポジトリのあるディレクトリに移動してくれます。

#!/opt/local/bin/zsh
# This hook is run after this virtualenv is activated.

proj_name=$(echo $VIRTUAL_ENV|awk -F'/' '{print $NF}')
cd {your_git_directory}/hoge

Tinkerer のインストールから記事を書くまで

Tinkerer インストール

$ pip install tinkerer

ブログを作る

$ tinker -s

カレントディレクトリに Sphinx のプロジェクトが展開されます。まずは conf.py をいじってブログタイトルなどを設定しましょう。 TODO: から始まるセクションを編集します。

記事を書く

以下のコマンドで rst ファイルが生成されるので編集しましょう。 blog ディレクトリ内に rst ファイルが配置されます。

$ tinker -p title

ちなみに、以下のコマンドで単一のページを作成することも可能です。こちらは pages ディレクトリ内に rst ファイルが配置されます。

$ tinker --page title

記事が書けたら、 $ tinker -b とするとビルドが実行されます。 index.html が生成されるのでブラウザで開いて出来ばえを確認できます。

GitHub Pages で公開

Hosting on GitHub とか GitHub Help を参考に設定。注意点としては、リポジトリのルートに .nojekyll ファイルを作っておくことと、ブログのデータをコミットするブランチを gh-pages としておくことが必要です。

思ったこと

Sphinx で書けるので、当然 Blockdiag なんかも使えます。 うまいことテーマをいじって wiki とブログを組み合わせたような使い方ができないか考え中。

]]>
Fri, 02 Aug 2013 00:00:00 +0900