2011-06-19 Let’s 痛jenkins!
debパッケージで入れたjenkinsとbitbucketの連携
id:w650さんの http://d.hatena.ne.jp/w650/20110415/1302838728 を参考に設定したけど、チェックアウト時にssh認証ができなかったのでメモ。
前提として
- jenkinsはdebパッケージからインストール
- bitbucketの公開鍵の設定済み
"nohup java -jar jenkins.war 〜"でもいいんだけど、debパッケージからインストールした理由はサービス登録がおっくうだから。
debパッケージから入れるとjenkinsという名前のユーザーができるが、jenkinsユーザーでssh用の鍵を作ってもbitbucketに繋げられそうにないので下の手順で変更を入れた。
- bitbucketに鍵認証で接続できるユーザーのホームディレクトリにjenkinsという名前のディレクトリを作成
- /etc/default/jenkinsを編集(下のコードを参照)
- JENKINS_USER=jenkins + JENKINS_USER=(user) - JENKINS_HOME=/var/lib/jenkins + JENKINS_HOME=/home/(user)/jenkins - HTTP_PORT=8080 + HTTP_PORT=(任意の空きポート)
サービスの起動ユーザーを通常のログインユーザーに変更するのはあまり褒められたことじゃない気がするが、気にしないことにする。
おまけ
使い古されたネタだけど、simple-theme-plugin*1とPersonaPlugin*2を使ってhud美さんづくしに。
ただし痛さひかえめ。
さらにおまけ
faviconもhud美さんにしました。
safariではできず、IEでも未確認ですが、Firefox、Chrome、Operaでは一応確認済み。
追記
今さっきjenkinsのアップデートをかけたら再起動した時にちょっとハマッたので追記。
jenkinsの起動ユーザーを切り替えるとwar展開ディレクトリとlog出力ディレクトリでパーミッションの問題が発生して起動しなくなるので、下の方法でどうにかした。
- /var/run/jenkins/* 以下を一旦消してオーナーを起動ユーザーに変える
- /var/log/jenkins のオーナーを変える
これも正直いただけない対応と感じるけど。
2011-06-10 笑うって大事
Macに移ってからの個人的メモ
メインマシンをMacに移してから1ヶ月近く経ったので、ちょっと書きとどめておきたい事についてあれこれメモ。
Macにデフォルトで入ってるPython2.5環境にPILを入れる方法
appengineでつかうので。
上のURLにある通りPILのソースを落とし、
$ export ARCHFLAGS="-arch i686" $ export CFLAGS="-arch i686"
という具合に環境変数を追加して、ビルドしてインストール。
homebrewでブラックリスト入りしててインストール出来ないパッケージのFormulaを無理矢理作ってインストールする方法
sphinx+blockdiagでドキュメント書いてて怒られたので。
この例ではfreetype2。
id:yuunachan さんの http://d.hatena.ne.jp/yuunachan/20110201/1296576384 を参考にしつつ。。。
$ brew create http://download.savannah.gnu.org/releases/freetype/freetype-2.4.4.tar.bz2 --force
でFormula(実態はRubyスクリプト)が生成されてエディタが開くので、好みに応じてゴニョゴニョ編集して保存した後
$ brew install freetype --force
でインストール。
"--force"がミソ。
SnowLeopardでFinderにsshfsをマウントしたい
MacFuse+MacFusion2で追加出来るとは聞くものの、SnowLeopardで出来なくなったとよく耳にした。
その上、GoogleCode上では開発止まってるように見えて半ば諦めかけていたんだけど、いつの間にか開発のフィールドがGoogleCodeからgithubに移ってたみたい。
MacFuse
https://github.com/bfleischer/macfuse
MacFusion2
https://github.com/kernelpaniclite/macfusion2
MacFuseの方はGoogleCodeのwikiにある通りの方法でビルド出来たと思う、多分。
MacFusion2の方はXcode4でそのままBuildすると ~/Library/Developer/Xcode/DerivedData/MacFusion2-xxxxxx/Build/Products/DebugにあるMacfusion.appをそのままアプリケーションに放り込む。
これで上手く動いてるから多分大丈夫でしょう。
ControlキーとCommandキーを入れ替える。でもTerminalは例外とする
HHK使っててショートカットでイラッ☆(古い?)と来るので。
[システム環境設定]→[キーボード]→[修飾キー]で
- CapsLockキー→Commandキー
- Controlキー→Commandキー
- Optionキー→そのまま
- Commandキー→Controlキー
ただ、これだとTerminalやvimの操作で非常に困るので、id:isseium さんの http://d.hatena.ne.jp/isseium/20110101/1293899881 の内容そのままKeyRemap4MacBookをインストールして設定。
これはこれで日本語入力時やアプリ切替時に副作用で悩む事になるんだけど、普段使うようなショートカットの位置が違う事から来るストレスに苦しむよりずっとマシなので我慢。
2011-01-22 チャリ通ケイゾク中
Ubuntuで(自分が)よく使うショートカット集
Ubuntuというよりはgnomeだけど。。。
思いだし次第追記する・・・とか書くと書かないのが自分の悪い癖orz
基本編
- Alt+F2 アプリケーションの実行(Windowsで言うところの「ファイル名を指定して実行」)
- 右Alt 漢字変換(英語キーボード使ってると重宝する)
- Ctrl+Alt+L 画面ロック
- Ctrl+Alt+←or→ 仮想画面の切り替え
nautilus編
- Ctrl+L 場所バーの入力フォーム化
ターミナル編
- Ctrl+Shift+C コピー
- Ctrl+Shift+V ペースト
- Ctrl+Shift+N 新しいウィンドウを開く
- Ctrl+Shift+T 新しいタブを開く
- Ctrl+Shift+W タブを閉じる(タブ表示時)
- Ctrl+Shift+Q ウィンドウを閉じる
- Ctrl+Shift+ー(マイナス) 縮小
- Ctrl+Shift++(プラス) 拡大
- Alt+数字 タブの切り替え(左から1,2,3...)
Firefox編(Chromeでも有効)
- Ctrl+K 検索バー入力(Windows版のCtrl+E)
- Alt+D、Ctrl+L アドレスバー入力
とりあえずこれだけ覚えておけばあまり困らないかなぁ?
2010-12-18 起きたら14時で、寝起きでこんなことやってたら16時過ぎでした。
opencsvでDateを含むBeanにマップする
ちょっとしたメモ。
こんな感じでいいのかしらん?
package com.mycompany.opencsvtest.extend.opencsv; import au.com.bytecode.opencsv.bean.CsvToBean; import java.beans.PropertyDescriptor; import java.text.ParseException; import java.util.Date; import static org.apache.commons.lang.time.DateUtils.parseDate; public class DateCsvToBean<T> extends CsvToBean<T> { private String[] datePatterns; DateCsvToBean() { } DateCsvToBean(String[] datePatterns) { this.datePatterns = datePatterns; } @Override protected Object convertValue(String value, PropertyDescriptor prop) throws InstantiationException, IllegalAccessException { if (Date.class.equals(prop.getPropertyType())) { try { return parseDate(value, datePatterns); } catch (ParseException ex) { throw new RuntimeException(ex); } } return super.convertValue(value, prop); } }
使い方はこんな形のtest.csvってファイルと
1,2010/12/17 2,2010/12/18 3,2010/12/19
こんなBeanがあるとして、
import java.util.Date; public class Hoge { int id; Date date; public int getId() { return id; } public void setId(int id) { this.id = id; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
使ってる側のコードはこんな感じ。
File file = new File("test.csv"); InputStreamReader streamReader = new FileReader(file); CSVReader csvReader = new CSVReader(streamReader); ColumnPositionMappingStrategy<Hoge> strategy = new ColumnPositionMappingStrategy<Hoge>(); strategy.setType(Hoge.class); strategy.setColumnMapping(new String[] { "id", "date" }); DateCsvToBean<Hoge> csvToBean = new DateCsvToBean<Hoge>(new String[] { "yyyy/mm/dd" }); List<Hoge> list = csvToBean.parse(strategy, csvReader);
さて、風呂ってコンタクト買いに行ってきます。
追記
日付の書式決め打ちならわざわざこんなことやらずともこうでいいのか・・・orz
こんな感じのPropertyEditorを作って、
package com.mycompany.opencsvtest.extend.opencsv; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class MyDateTypeEditor extends PropertyEditorSupport { @Override public void setAsText(String string) throws IllegalArgumentException { SimpleDateFormat format = new SimpleDateFormat("yyyy/mm/dd"); Date date = null; try { date = format.parse(string); } catch (ParseException e) { throw new RuntimeException(e); } setValue(date); } }
こう。
File file = new File("test.csv"); InputStreamReader streamReader = new FileReader(file); CSVReader csvReader = new CSVReader(streamReader); PropertyEditorManager.registerEditor(Date.class, MyDateTypeEditor.class); ColumnPositionMappingStrategy<Hoge> strategy = new ColumnPositionMappingStrategy<Hoge>(); String[] columns = new String[] { "id", "date" }; strategy.setType(Hoge.class); strategy.setColumnMapping(columns); CsvToBean<Hoge> csvToBean = new CsvToBean<Hoge>(); List<Hoge> list = csvToBean.parse(strategy, csvReader);
o......rz



