2017年12月30日土曜日

JenkinsのPipelineスクリプトでparallelを制御するThrottle Concurrent Builds Plugin

Pipelineスクリプトのparallelを利用すると並列処理を簡単に実装できます。
ただ、並列度を制御する機構はparallelにはありません。
そのため、parallelを実装したものの実行されるジョブが多くなるとJenkinsが落ちてしまうという事態になってしまったので、
何かないかと探して利用したのが、Throttle Concurrent Builds Pluginでした。
実装方法は、GitHubのREADMEに記載のある通りですが、
node()が実行されるたびにワークスペースが変わってしまうので、
Pipelineの設計によってはワークスペースを固定するような一手間が必要になります。

Pipeline Syntax
Throttle Concurrent Builds Plugin - Jenkins - Jenkins Wiki
jenkinsci/throttle-concurrent-builds-plugin · GitHub

2017年7月29日土曜日

jspc-maven-pluginは5分しかコンパイルできない

compilationTimeoutがデフォルト値として、5分になっているからでした。
公開されているWebのドキュメントは古いので、設定できる内容はソースを確認した方がよいです。
余談ですが、compileThreadsというJSPをコンパイルする時のスレッド数を設定するものもありました。
とりあえず2にしてみたところ、時間が半分程度になりました。
ビルドするマシンパワーに余裕があるのであれば、うまく調整するとよいと思います。

Maven plugin to do JSP Compliation

2016年11月12日土曜日

SonarLintとPleiadesプラグインで利用しているライブラリが競合する

SonarLintの解析実行時にPleiadesのライブラリが有効になっていて、
SonarLintが存在しないメソッドを呼び出してエラーになっていました。
Eclipse 4.3 Kepler Pleiades All in OneにSonarLint2.0.1をインストールするという組み合わせで発生しました。
どちらもApache Commons IOライブラリを利用していて、Pleiadesは1.4を使用していました。
そこで、Pleiadesのライブラリを1.4と互換性のある2.2に差し替えて、
解析ができるようになりました。

Commons IO – Upgrade from 2.1 to 2.2

2015年12月28日月曜日

Antで複数のmkdirタスクを実行する。

AntのScriptタスクを利用して、ディレクトリのパスをPathConvertで変換した後に、そのディレクトリを作成します。

build.xml
<?xml version="1.0" encoding="UTF-8"?>
 <target name="pathConvertor" description="">
  <pathconvert property="convertedDir">
   <dirset dir=".">
    <patternset id="convdir">
     <include name="**/java/**"/>
     <include name="**/resources/**"/>
    </patternset>
   </dirset>
   <mapper>
    <filtermapper>
     <replacestring from="java" to="replaced"/>
     <replacestring from="resources" to="replaced"/>
    </filtermapper>
   </mapper>
  </pathconvert>
  <script language="javascript"><![CDATA[
   var toDir = project.getProperty("convertedDir");
   var dirs = toDir.split(";");
   var size = dirs.length;
   var mkdir = project.createTask("mkdir");
   for (var i = 0; i < size; i++) {
    var targetDir = dirs[i];
    mkdir.setDir(new java.io.File(targetDir));
    mkdir.perform();
   }
  ]]></script>
 </target>
</project>


実行結果
e:\work\ant>ant pathConvertor
Buildfile: e:\work\ant\build.xml

pathConvertor:
    [mkdir] Created dir: e:\work\ant\dir\replaced
    [mkdir] Created dir: e:\work\ant\path\to\example\replaced
    [mkdir] Created dir: e:\work\ant\src\main\replaced
    [mkdir] Created dir: e:\work\ant\src\test\replaced

BUILD SUCCESSFUL
Total time: 2 seconds
e:\work\ant>tree
フォルダー パスの一覧
ボリューム シリアル番号は 00000200 A0FE:B066 です
E:.
├─dir
│  ├─java
│  ├─replaced
│  └─resources
├─path
│  └─to
│      └─example
│          ├─java
│          └─replaced
└─src
    ├─main
    │  ├─java
    │  ├─replaced
    │  └─resources
    └─test
        ├─java
        ├─replaced
        └─resources


2015年12月27日日曜日

某ブラウザゲームの画面をスッキリさせる。

D/M/Mの右側に出るレコメンドを消します。
div#ntg-recommend {
 display: none;
}
span.slide-trg {
 display: none;
}
div.list-pickupgame {
 display: none;
}

上記をブラウザのユーザースタイルシートとして設定します。

2015年6月28日日曜日

2015年7月(夏)開始アニメ新番組私的録画メモ

新しく始まるアニメの個人的な録画予約のメモ。
チェックしている放送局は在京キー局とBS、AT-X、TOKYO MX、チバテレビ。


曜日 タイトル 初回放送日時 放送局
赤髪の白雪姫 7月6日(月) 24:00 TOKYO MX
To LOVEる-とらぶる-ダークネス 2nd 7月6日(月) 24:30 TOKYO MX
のんのんびより りぴーと 7月6日(月) 26:05 テレビ東京
それが声優! 7月7日(火) 23:00 TOKYO MX
がっこうぐらし 7月9日(木) 23:30 TOKYO MX
アイドルマスター シンデレラガールズ 2nd SEASON 7月17日(金) 24:00 TOKYO MX
監獄学園 プリズンスクール 7月10日(金) 25:05 TOKYO MX
Fate/kaleid liner プリズマイリヤ ツヴァイ ヘルツ! 7月24日(金) 25:40 TOKYO MX
WORKING!!! 7月4日(土) 24:30 TOKYO MX
戦姫絶唱シンフォギアGX 7月4日(土) 25:00 TOKYO MX

WORKING3期、水島努監督の監獄学園に期待しています。

最後に、情報源は以下のサイトです。ありがとうごとうございます。

GIGZAZINE 2015年夏季開始の新作アニメ一覧

2015年4月26日日曜日

fluent-logger-javaについていくつかのこと。

GitHub fluent/fluent-logger-java

バージョンは、0.3.1です。

Fluentdに送信する実装を変更できる。

ファクトリークラス内が下記のようになっています。
org.fluentd.logger.FluentLoggerFactory#getLogger(String, String, int, int, int, Reconnector)
        Properties props = System.getProperties();
        if (!props.containsKey(Config.FLUENT_SENDER_CLASS)) {
            // create default sender object
            sender = new RawSocketSender(host, port, timeout, bufferCapacity, reconnector);
        } else {
            String senderClassName = props.getProperty(Config.FLUENT_SENDER_CLASS);
            try {
                sender = createSenderInstance(senderClassName, new Object[] { host, port, timeout, bufferCapacity });
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

そこで、org.fluentd.logger.sender.Senderインターフェースを実装したクラスを以下のように設定することで、
デフォルトのorg.fluentd.logger.sender.RawSocketSenderから変更できます。
System.setProperty(Config.FLUENT_SENDER_CLASS, "com.example.HogeSender")
他にも、org.fluentd.logger.sender.NullSenderというクラスは、空振りする動作をします。
諸事情でFluentdにログを送信できない場合、このクラスに切り替えるようなロジックを実装するといった利用が考えられます。

再接続方法を変更できる。

デフォルトの実装は、
org.fluentd.logger.sender.ExponentialDelayReconnector
指数関数的に遅延しながら再接続を試みる物のようです。
これとは別に、org.fluentd.logger.sender.Reconnectorインターフェースを実装することで、
独自の動作を実装できます。
以下のメソッドを利用することで、独自の動作をさせることができます。
org.fluentd.loggerFluentLogger#getLogger(String, String, int, int, int, Reconnector)