etckeepr + github のプライベートリポジトリで /etc 以下をバックアップする
etckeepr + github のプライベートリポジトリで /etc 以下をバックアップする
etckeeper 導入
$ sudo apt-get install etckeeper
etckeeper 側で push 先を設定
diff --git a/etckeeper/etckeeper.conf b/etckeeper/etckeeper.conf index f988c10..1fecf03 100644 --- a/etckeeper/etckeeper.conf +++ b/etckeeper/etckeeper.conf @@ -40,4 +40,4 @@ LOWLEVEL_PACKAGE_MANAGER=dpkg # To push each commit to a remote, put the name of the remote here. # (eg, "origin" for git). Space-separated lists of multiple remotes # also work (eg, "origin gitlab github" for git). -PUSH_REMOTE="" +PUSH_REMOTE="origin"
github でプライベートリポジトリを作成しておいてそれをリモートリポジトリに設定
$ cd /etc $ sudo git remote add origin git@github.com:name/repo-name.git
鍵設定
ルート権限で push する様子なので /root/.ssh/ 以下に鍵を作成(もともと鍵がないか一応注意)。
$ sudo ls /root/.ssh/ known_hosts $ sudo ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): ...
root 用に ssh key を設定して プライペートリポジトリで鍵を追加する。「Allow write access」にチェックが入れられるのでそのリポジトリだけに書き込み権限を追加した鍵を設定することができる(現状ここは bitbucket ではできない)。
最後に
人のサーバとかで鍵を置きたくない場合などにリポジトリ単位で鍵が設定できる github 便利。 プライベートリポジトリ無制限になりさらに便利。 そしてわりと簡単に導入できて apt でアップデートしたり cron.daily だったりで自動的にコミットとプッシュがされる etckeeper 便利。
参考
javadoc の html を生成したときに一番最初のページに説明を追加したい
例えば下記の「このドキュメントはJava(tm) Platform, Standard EditionのAPI仕様です。」と書かれてるようなところ。
下記ページをみると「概要コメント・ファイル」と呼ぶらしいファイルを使うことができればよいらしい。 通常は -overview でパスを指定するとのこと。
maven で javadoc を生成している場合は下記ページ「Overview Comment File: overview.html」を参考に、 src/main/javadoc ディレクトリを作って overview.html を作成してその中に記載すれば良いらしい。
Apache Maven Javadoc Plugin – Using Javadoc Resources
一応上記のように src/main/javadoc/overview.html に記載したものが javadoc の最初のページに反映されたが パッケージの下の部分に表示されてしまい、上のほうに表示されなかったのであとで追記するかも。
JUnit でテスト全体の実行前および実行後の処理を書く
例えば DB を実行する前や後に初期化する場合など BeforeClass や AfterClass よりももっと大きな単位で JUnit テストの前と後で実行したいことがある場合。
org.junit.runner.notification.RunListener を使う。
package my.hogehoge; import org.junit.runner.Description; import org.junit.runner.Result; import org.junit.runner.notification.RunListener; public class MyListener extends RunListener { @Override public void testRunStarted(Description description) throws Exception { } @Override public void testRunFinished(Result result) throws Exception { } }
直接 JUnit を動かす場合は JUnitCore#addListener() などでこれを登録するといいらしい。 実際 JUnit 動かすのは maven-surefire-plugin 経由などで実行すると思うので、その場合は下記のように設定するとよい。 ちなみに 一つも Test アノテーションが付いたものがないと testRunStarted() なども呼ばれない。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <configuration> <properties> <property> <name>listener</name> <value>my.hogehoge.MyListener</value> </property> </properties> </configuration> </plugin> <plugins> </build>
Sparrow が起動しなくなった時について
うちの Macbook は容量がギリギリのため、電池切れなどで容量がないまま終了した場合などに Sparrow が起動できなくなる場合がある。 対処としては Sparrow のディレクトリにある各アカウントの data.db ディレクトリと message.db を削除すればよいらしい。(理由はよく調べてない)
$ cd Library/Application\ Support/Sparrow $ rm -rf data.db messages.db
これで Sparrow を起動すると取得しなおして動くようになる。
zsh なら下記一つのコマンドでいける
$ rm -rf ~/Library/Application\ Support/Sparrow/*.sparrowdb/(data.db|messages.db)
Intellij IDEA でクラスを作る際に自作のテンプレートを使う
使用バージョン
Intellij IDEA 14.1.3
内容
競技プログラミングなどでファイル生成時に標準入力用ライブラリなどを最初から入れておきたい場合があります。
Intellij IDEA の場合はどうするか。
- テンプレートを用意する
- クラス生成時に用意したテンプレートを選択する
Prefereces を開いて Editor > File and Code Template を開いて Templates のタブを選択。 Class を選択してコピー。なかを自由に書き換えます。
生成したテンプレートはたぶん New > Java Class を選択した際に Kind で選択できるはずです。
他のテンプレートをみると include とか使えるようなので共通で使う部分などは inlude で作っていろんなプロコン用のテンプレートをそれぞれ作るとかできるのではないかと思います。
以上。
参考
Spring boot 日記
Q. EnableAutoConfiguration って? A. どうも設定が必要なパラメータを予めデフォルト値を持った設定群をフレームワークで持ってるっぽいのでそれを使うようにするアノテーションらしい。 自分のアプリケーションでのみ使う設定はその設定のプロパティとか Configuration アノテーションが付いたクラスとかで上書きするとかそういうやつっぽい。 Q. WebSocket 使うには? A. EnableWebSocketMessageBroker アノテーションが付いた Configuration アノテーションのクラスを作って AbstractWebSocketMessageBrokerConfigurer クラスを継承して endpoint を追加すれば良い感じっぽい。 import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/"); } } Q. socket.io がクライアントになってる場合は? A. さらっと探したけど java 実装の socket.io サーバが無いので無理臭い。自分で実装する必要がありそう。
Spring Boot で複数の Filter を定義する
例えば下記のように @Bean アノテーションを複数書くことによって複数のフィルタを追加できる。
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public Filter filter() { return new SomeServletFilter(); } @Bean public Filter filter2() { return new SomeServletFilter2(); } }
また、おそらく上記の書き方では上から順番にフィルタが追加されるが、フィルタの登録順を決めてしまいたい場合は下記のように FilterRegistrationBean の setOrder() を用いる。
@Bean public FilterRegistrationBean filter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new SomeServletFilter()); bean.setOrder(2); // 数字が大きいほうが後に呼ばれる return bean; } @Bean public FilterRegistrationBean filter2() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new SomeServletFilter2()); bean.setOrder(1); // 数字が小さいほうが先に呼ばれる return bean; }
他にも Configuring boot servlet context and filters | Level Up Lunch などによると何かしらの初期化時に ServletContext に addFilter() すればよいらしいがうまく行かなかったのでここでは割愛する。
2016/08/05 追記
これらの設定はおそらく Spring Boot は関係なくて Spring Framework の DI の設定らしい。
Spring のコードはちゃんと読んでないけど、おそらく Spring 側の Autowired 時に同じ型のものが複数定義されていた場合に取得する方法( List
参考文献
Configuring boot servlet context and filters | Level Up Lunch
Convert an existing application to Spring Boot - Spring Boot Reference Guide