2014年11月24日月曜日

[github]fork元からcommitをマージする方法

メモ。
github上でforkしたリポジトリで動いているときにfork元に何らかのcommitがあった場合のmerge方法
git remote add upstream https://fork元のurl
git fetch upstream
こうすると新しくブランチが作成されるのでそれに対してmergeを行えば良い
作業ディレクトリに移動して以下のコマンドでmerge
git merge upstream/repository名
参考公式ページ
fork-a-repo
syncing-a-repo

2014年10月25日土曜日

gradleハンズオン

仕事柄結構gradleのお世話になっているためGradleハンズオン - G*ワークショップZ に参加。 アジェンダとしてはこんな感じ
  • Gradle 2.1動向
  • plugin ポータルを公式ではじめました。
  • plugin script blockにより3rd partyのpluginの使用が簡単に
  • インクリメンタルビルドはじめました。
  • ハンズオン
  • タスクの使い方
  • カスタムプラグインの実装
  • TL
  • gradle 2.2 最新動向
  • oss開発者としての薦め
インクリメンタルビルドは非常にありがたい。これだけでも2.1にアップデートする価値があるかもしれん。(デフォルトではオフ)
allprojects {
  tasks.withType(javaCompile) {
    options.incremental = true;
  }
}
これで有効になるっぽい
pluginポータルと3rd partyのプラグインが使いやすくなる点に関しては将来に期待
カスタムプラグインについてはカスタムプラグインの作成 にほぼ書かれている内容っぽいかな?
gradle publishToMavenLocal
で~/.m2/にpushlishできてmavenLocal()を使って自作pluginをapplyできるようになるっぽい。
色々面倒ならbuild.graldeのそのままpluginを実装するとクラスパスとか気にしなくていい感じ。
なんか面白いネタを見つけたらちょっと作ってみよう。
gradle 2.2でちょっと気になったのはcross-platformの対応が便利になったっぽい?みたいな内容があるらしい。
何?Makefileリプレース出来るの?

クロージャって何じゃ←論外

ちょっと調べてみるとコールバック関数とか関数ポインタっぽい。
ただコンテキストも保持できるので今までの非同期処理周りのコールバック関数より 直感的に使いやすそう。
こんな機会でも無いと中々最新技術とか調べないから、良い機会なったし割と初心者向けだったので自分でもついていけた。
同じような機会があればまた参加したい。

2014年9月30日火曜日

[emacs][ssh][tramp] trampを使ってremote host上でsudo状態でファイルを開く方法。

鯖といじってると特定のユーザにsudo権限を与えてrootのパスとか知らんとかポリシー上よくある。
例でいうとこんな感じ
ssh test@remotehost
test@remotehost ~/ $ sudo su
root@remotehost /home/test #
localからemacsでremoteのファイルを色々弄りたいとか、鯖管をしたいとか言うと結構面倒 なんとかemacs + trampでsudo状態でファイルを開けないかなと調べてたら見つかったので覚書 ファイルオープン
C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET
ちなこれもいける shell
M-x /ssh:you@remotehost|sudo:remotehost:/path/to/file RET
ちなみに内容はそのまま公式にありました。

2014年9月29日月曜日

[emacs][evernote] emacs-evernote-mode

エディタにemacsを使っていてなおかつevernoteを多用している人は結構いるのでは無いだろうか。いやいるに決まっている(反語)。
結構そういう人は
emacs-evernote-mode
を見つけたのでは無いのだろうか。 emacsのevernote-pluginである。 上のリンクが公式っぽいがもはや公式の開発は2011年にリリースされたver 0.41でストップしている。
且つ公式の最新はevernote側のoauthの実装などの変更がありそのままでは使えなくなっている。
ただ,github上ではいくつかforkされているリポジトリが存在しており一番最新で使えるリポジトリは
pymander/evernote-mode
かな。
基本的にREADME.mdを見てもらえばわかると思うがインストールするときに重要なのは2点で
  • evernote Developer Tokenの入力
  • evernote_oauth gemのインストール
これと加えて最近issueとして
Opening existing notes, searching and note browsing fails - undefined method `to_sym' for nil:NilClass
が私の環境でも 発生したので、ちょっと修正してみた。
i-takuya/evernote-mode
は私がforkして修正を入れたevernote-modeのリポジトリである。同じ問題が起きているなら使ってもらいたいと思う。俺の環境では動いた。(結構雑な修正なんで保証はしない)
ダメだったらissueないし、pull requestを送ってもらえるととりあえず見ようとは思う。(修正できるとは言っていない)

2014年9月21日日曜日

[Docker] Dockerfile 初級編

前回は基本的なDockerの使い方の列挙した。
次,Dockerfileを使ってみる。
GitHubにコミットしたリポジトリを元にDocker hubにAUTOMATED BUILD REPOSITORYができる。

元になったリポジトリはこれ
centosを元にsshdをただ立ち上げただけ。

基本的にDockerfileがあるフォルダで
docker build -t [repository name] .

を実行すればDockerfileに書かれた命令を上から順に実行してimageを作成してくれる。
Vagrantfileっぽい様に見えるがプロセスを起動するような命令は一回しか実行出来ない。

ここらへんはどうもdockerの仕様らしいが、やはり一つのコンテナ上で複数のプロセスを立ち上げたいみたいな 需要はあるようでDocker 起動と共にサービスを複数立ち上げたいと思ったらまず Supervisor あたりを試してみようみたいな記事はいっぱいある。

最終的にlighttpdとsshd辺りをコマンド一つで起動させたりしたいのでSupervisor辺りを使って書きなおそうかなとは思っている。

前はカスタマイズしたイメージをDocker hubにあげてたけどDockerfileでレシピを残したほうが筋が良いような気がする。
今までVMとcontainerどう使い分けたら良いかと思ったけど(そもそも技術的には違うけどやれること対して変わらないきがする)
テストオートメートのためのワンショットビルドとかの使い方がいい感じがする。

2014年9月19日金曜日

[docker] dockerの使い方 初級編

最近話題のdocker、基本的な使い方はここ のチュートリアルをみれば大体分かりそう。 今回は基本的なコマンドとその説明を書き留めていこうと思う。
docker ps : containerのリストを取得
docker inspect  : 指定したidのcontainerの情報を取得。ipとか取れる。
docker run -i -t  : コンテナを起動させる。-t ttyをアロケート、-iはstdinをオープンし続ける。
docker commit   : 指定したcontainer idをリポジトリにコミット(多分ローカル)
docker push  : commitした内容をDocker hub上のリモートリポジトリにpush
docker pull :
上記コマンドがdockerの基本的なコマンド、docker runで起動したコンテナに変更を加えて、commit, pushでその変更を Docker hub上に保持できる感じ。 Docker hubなんてネーミングからわかるがすごいgit like.
なお、余分なimageとcontainerの削除は下記ページに記載されていたので参考までに。

Dockerで不要になったコンテナやイメージを削除する 次はDockerfileをちょっと触ってみたい。

2014年4月1日火曜日

[git] git 基本

最近svnの変わりにgitを使うようになったのでそのメモ

git status 
git branch -a -v : local branchやremote branch、最終コミットログが見れる
git checkout -b local_branch origin remote_name : remote_branchからlocal branchを作る
git checkout localfile : localbranch からlocalfileを復元する。 
git add localfile : 指定したファイルをstage状態にする(commit出来る状態にする)
git commit : stage状態にあるファイルをローカルブランチにcommitする(この状態ではremote branchにはcommitされない)
git push origin local branch:origin/remote branch : remote branchにcommitする。これをやると後戻りできない。
基本的な概念がsvnと違うので結構戸惑った。っていうか今も。