IntelliJ IDEA13 CEのコード実行(Run)の種類
ささっと書いて実行するときにどのショートカットキー(keymap)を使っていいのかわからなかったので。
※MacOSです
コンフィグレーションを選択して実行
Option + Shift + F10
(前回と同じものを)実行
Shift + F10
現在の状況を実行
※現在の状況 = アクティブなエディタや選択中のファイルで実行可能な形式(extends AppなのかUnitTestなのかとかをよしなに判断してくれるっぽい)
Ctrl + Shift + F10
なので、基本はCtrl + Shift + F10を連打しときゃいいのかな
IntelliJ 13 CE + Scala + Gradleでのプロジェクト作成
こんなクールな操作で開発ができるようになりたい
intellij CEをダウンロード
コミュニティエディションをダウンロードしてきます
http://www.jetbrains.com/idea/download/index.html
Gradleプロジェクトを作成
- Use Auto-import(build.gradleを修正すると各種インポートが自動的に行われるっぽい)
- Create directories for empty content roots automatically(今回で言うとScalaプラグインを作成した時のディレクトリ構造が自動的に追加されるっぽい)
- User default gradle warpper(Mac上のgraldeではなくgradle-wrapperを使う)
build.graldeにscala Pluginを追加
build.graldeをエディタで開いて
apply plugin: 'scala'
を追記する
「Create directories for empty content roots automatically」が有効になっていると自動的にsrc/main/scalaディレクトリが自動で作成される
build.gradleにscala-compilerまわりのdependencyを追加
apply plugin: 'java' apply plugin: 'scala' sourceCompatibility = 1.5 version = '1.0' repositories { mavenCentral() } ext { scalaVersion = '2.10' scalaVersionRevision = '3' scalazVersion = '7.0.5' specs2Version = '2.3.4' } dependencies { compile "org.scala-lang:scala-compiler:$scalaVersion.$scalaVersionRevision" compile "org.scala-lang:scala-library:$scalaVersion.$scalaVersionRevision" compile "org.scala-lang:scala-reflect:$scalaVersion.$scalaVersionRevision" }
eclipseを使ってvert.xを起動する
Eclipseでvert.xをローカルで起動するのに、 Gradle テンプレートを使うってのは見かけたけどmavenプロジェクトの記事があまり見当たらなかったので覚え書き。
Eclipse Java EE IDE for Web Developers.Version: Juno Service Release 2
mavenはm2eプラグインを使用。
eclipseでmavenプロジェクトを作成して、Archetypeをvertxを選択する。
maven-dependency-plugin (goals “copy-dependencies”, “unpack”) is not supported by m2e
というpom.xmlのエラーが出るので
こちらの書き込みに従い
これでプロジェクトのエラーが消えるので、試しにfooパッケージに
package foo; import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class HelloWorldVerticle extends Verticle { public void start() { container.logger().info("Verticle start."); vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { req.response().headers().set("Content-Type", "text/plain"); req.response().end("Hello World!"); } }).listen(8080); } }
というテストコードをServer.javaという名前で置いてみる。
さらに
src/main/resources/mod.jsonの
"main":"foo.PingVerticle",
を
"main":"foo.Server",
に変更する
eclipseのプロジェクトを右クリックRunからmaven buildで起動する。
※CLIの場合はmvn vertx:runModEclipseを叩く。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Project - testio 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- vertx-maven-plugin:2.0.0-final:runModEclipse (default-cli) @ testio --- [INFO] CTRL-C to stop server
とかログが出るので,ブラウザからlocalhost:8080でhello worldが出ればおk
pythonでJpeg画像のexifを編集する
ある時子供を撮影するのによく使っているデジカメNEX-5の初期設定を誤ったらしく、全部の写真の日付が一年前になっていることに気づいた。
印刷する時に日付を入れる場合は全部一年ずれて日付がついてしまうので、今までNEX-5で撮った写真のexifを書き換えるためのスクリプトを書いた。
とりあえずpythonでexifをいじるために調べて最初に出てきたのはPython Imaging Libraryだったが、どうやらexifを読み込む機能しかないらしい。
http://www.pythonware.com/products/pil/
pyexiv2というのがイケてるらしいのでこれでスクリプトを書くことにする。
Python で JPEG の Exif などを扱う
チュートリアル
Mac上にvagrantでubuntu12環境を用意した上でpyexiv2をインストールする
apt-get install python-pyexiv2
これで終わり。
あとはpyexiv2を使った普通にexifの日付情報を一年進めて書き換えた上で保存すればOK
import sys import os import stat import datetime import pyexiv2 targetDir = "/home/vagrant/100MSDCF_2/" count = 0 for fileName in os.listdir(targetDir): f = targetDir + fileName s = os.stat(f) times = (s[stat.ST_MTIME], s[stat.ST_MTIME]) mtime = datetime.datetime.fromtimestamp(s[stat.ST_MTIME]) metadata = pyexiv2.ImageMetadata(f) metadata.read() dateTimeTag = metadata['Exif.Image.DateTime'] dateTimeOriginalTag = metadata['Exif.Photo.DateTimeOriginal'] dateTimeDigitizedTag = metadata['Exif.Photo.DateTimeDigitized'] thumbnailDateTimeTag = metadata['Exif.Thumbnail.DateTime'] dateTimeTag.value = dateTimeTag.value + datetime.timedelta(days = 366) dateTimeOriginalTag.value = dateTimeOriginalTag.value + datetime.timedelta(days = 366) dateTimeDigitizedTag.value = dateTimeDigitizedTag.value + datetime.timedelta(days = 366) thumbnailDateTimeTag.value = thumbnailDateTimeTag.value + datetime.timedelta(days = 366) print "convert done " + f + " ->" + dateTimeTag.raw_value metadata.write() count += 1 print str(count) + " files done"
それにしてもぱぱっとubuntuとか必要な環境を作れちゃうvagrantはほんと便利ですなー。
subversionを使ったA successful Git branching modelの運用
現在のプロジェクトではsubversionを使っているのですが、10人ほどの開発メンバーで並行開発をしているためA successful Git branching modelを参考にFeature branchesを活用した開発スタイルにしています。
A successful Git branching model を翻訳しました
しかしどうしてもブランチの統合時に意味不明なコンフリクト(競合)が発生してしまい、その度に手動(というか目視やメンバー同士の確認)でのマージを行なっておりリリースや統合が高コストになっていました。
例えば以下のような場合
2.のマージの時にfeature1ブランチにhello.jpgがコミットされたという変更履歴が残るため、3.のdevelopへのマージの際にはfeature1ブランチの変更点(コミット)を全てマージしようとするため、再度developにhello.jpgをコミットしてしまうようです。
調べた所reintegrateというオプションを見つけました。
ブランチをトランクにマージするときは、--reintegrate オプションを付ける。
- reintegrate オプションを使うこの形式のマージは一つのブランチにつき一回だけ行える (その後ブランチを更新してもそれをトランクにマージできないので、ブランチはただちに削除するとよい)。ブランチでの変更のうち、トランクからブランチへのマージによるもの以外の変更がトランクに適用され、自動的に svn:mergeinfo 属性が更新される。
Eclipseのsubversiveを使っている場合はマージウィンドウのタブに該当の機能がありました。
ここからマージ作業を行えば、晴れてブランチでの修正分のみがdevelopに取り込めましたとさ!
追記:
mergeの方法についてなのですがdevelop -> featureブランチへの取り込み時に手動でマージ(ファイルを上書きするとか差分エディタで書き込むとか)すると、svn管理上のmergeinfoというプロパティがセットされません。
そのため、reintegrateマージの際に上記コミットがマージコミットとして認識されずに、developへのマージ時にコンフリクトしてしまいます。
developからfeatureブランチへの取り込みの際は必ずmergeコマンド(or eclipseのマージ機能)を使うようにしましょう。
http://www.asahi-net.or.jp/~iu9m-tcym/svndoc/svn_mergeinfo.html
Ubuntu 12.04 LTS上にjsアプリケーション環境構築
- vimとtmuxの設定ファイルをcloneして設定
git clone https://github.com/waysaku/dotfiles.git cp ~/ ~/dotfiles/.vimrc cp ~/ ~/dotfiles/.tmux.conf
- vimのvundle環境構築
git clone http://github.com/gmarik/vundle.git ~/.vim/vundle.git
- nvmインストール
- nvmを使ってnodeの最新版をインストール
$ nvm install v0.11.2
- gruntインストール
npm install -g grunt-cli
- ruby1.9とrubygemをインストール
apt-get install ruby1.9.1 rubygems
- sassをインストール
gem install sass
- compassをインストール
gem install compass
- hostを書き換え
echo "[ip] [host]" >> /etc/hosts
- ssh-key作成してGHEに登録
ssh-keygen -t rsa
備忘録
FuckなEclipseのjavascriptのバリデーター機能。
利用しているライブラリのエラーとかも☓マークで指摘してくるからうざい。
しかも
いろいろな設定をオフにしても全然消えてないからさらにうざい。
毎回イラっとくるから備忘録として残しておく。
- Open Properties Dialog of Your Project.
- Choose Builders item.
- Uncheck "JavaScript Validator". And Press OK button.
- Remove current errors and warnings from Problems View
4.のProblemリストにあるエラー表示を手動で削除するってのがいつも忘れる。