もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

EUC-JPなレガシーコードをRedmine&gitで管理する

Redmine他全部入り環境であるAlminiumで未だにEUC-JPなんて使ってやがる環境のソースコードを管理する方法です。

Redmineの設定

当たり前のように設定画面に文字コードの変換が存在します。Redmineに死角なし!

f:id:moguno:20130212003214p:plain

取りあえずEUC-JPと、使わないけどSJISと一応UTF-8を追加します。

gitの設定

ローカルリポジトリのgitの設定を変更します。
これをやらないとコミットメッセージが自主規制だらけになります。
(??1??24??Hanekawa????Sexyみたいな。)

git config --global i18n.commitencoding euc-jp


これでコミットメッセージもファイル内の文字コードも奇麗に見れるようになったはず。

入門Redmine 第3版

入門Redmine 第3版


Redmineによるタスクマネジメント実践技法

Redmineによるタスクマネジメント実践技法

Redmineを遠隔操作してプロジェクトを新規作成するソースコードを書いたよ

誰でも簡単にCentOS上にRedmineやJenkinsが導入できる、Alminiumと言う日本発の素晴らしいプロジェクトがあります。

そのAlminiumで構築したRedmineに既存のソースコードを大量に登録して、リビジョングラフとかを見て何かを管理している気分に浸りたい訳です。

調べてみるとRedmineにはAPIがある模様。
これを利用してリストをバッチ処理するのが現実的かも。

てなわけで、試しにRubyでプロジェクト作成APIを叩いてみました。

事前作業

Redmineの管理画面で「RESTによるWebサービスを有効にする」をONにしておきます。

f:id:moguno:20130211150815p:plain

ソースコードと呼ばれるプログラムの設計図

RedmineでのAPI認証は、APIキーを使用するものとHTTPのBASIC認証(管理者のユーザ名・パスワード)が選択出来ます。
httpsで運用してない場合はどっちの方式もセキュリテリィ的にノーガードなので、よりお手軽なBASIC認証を使ってます。

ちなみに、ドキュメントには無いですが(うらわざ〜)scmタグでバージョン管理システムの種類を指定してやるとリポジトリも一緒に作ってくれます。
(ここではGitにしてます。)

#! /usr/bin/ruby
# coding:utf-8

require 'net/http'

PJ_ID="redminehaxahaxa"
PJ_NAME="れっどまいんちゃんハァハァ"
PJ_DESC="れっどまいんちゃん可愛いよ可愛いよ可愛いよさぁ・・・脱"

Net::HTTP::version_1_2

# プロジェクトの作成
req = Net::HTTP::Post.new("/projects.xml")
req.basic_auth("admin", "admin")
req.content_type = "application/xml"

req.body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<project>
  <name>#{PJ_NAME}</name>
  <identifier>#{PJ_ID}</identifier>
  <description>#{PJ_DESC}</description>
  <scm>Git</scm>
</project>
"

Net::HTTP::start("localhost") { |http|
	res = http.request(req)

	if res.code.to_i != 201 then
		raise res.body
	end
}


# ユーザの登録
req = Net::HTTP::Post.new("/projects/#{PJ_ID}/memberships.xml")
req.basic_auth("admin", "admin")
req.content_type = "application/xml"

# admin:1決めうち
user_id = 1

# 3:管理者、4:開発者、5:報告者
req.body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<membership>
  <user_id>#{user_id}</user_id>
  <role_ids type=\"array\">
    <role_id>3</role_id>
    <role_id>4</role_id>
    <role_id>5</role_id>
  </role_ids>
</membership>
"

Net::HTTP::start("localhost") { |http|
	res = http.request(req)

	if res.code.to_i != 201 then
		raise res.body
	end
}

実行してみる

Redmineに今にも逮捕されちゃいそうなプロジェクトが生成されれば成功です。

f:id:moguno:20130211152124p:plain

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−


Gitポケットリファレンス

Gitポケットリファレンス

Macでもmikutterに喋ってもらうためのプラグインを作ったよ

誰かが言ってた。


「Macにはaplayコマンドが無いからmikutterが喋らないけど、afplayって類似コマンドがあるよ。」


なんだけど、微妙にコマンドラインオプションが違うのでシンボリックリンク程度では、まだmikutterは僕をガン無視。

なのでcoreにあるalsa.rbをちょっと改造してプラグインを作ったっす。

下記をafplay.rbってファイル名でプラグインフォルダに置くと良いよ。

# -*- coding: utf-8 -*-
# afplayコマンドで音を鳴らす

Plugin.create :afplay do

  on_play_sound do |filename, &stop|
    if command_exist? "afplay"
      SerialThread.new {
        bg_system("afplay", filename) if FileTest.exist?(filename) }
      stop.call end end
end

テスト方法

Debianとつぶやきましょう。

「りついーと!」

mikutterがしゃべります。