タグ

ブックマーク / blog.64p.org (251)

  • Gradle の dependency locking について - tokuhirom's blog

    昔の gradle には dependency locking 機能がなかった。ビルドするタイミングによって、別の依存モジュールが利用されたりしていた。。 最近、gradle に dependency locking 機能がついたので試してみた。 carton.lock とか package-lock.json とか、そういうのと同じようなことができるようになる。 同じレポジトリからビルドしたら同じ jar が生成されるようになる。便利。 dependency locking を利用すると gradle.lockfile というファイルが生成される。 デフォルトだとフェーズ単位でファイルが生成されるから enableFeaturePreview('ONE_LOCKFILE_PER_PROJECT') を settings.gradle に書いて1ファイルにまとめるようにしたほうが良い。gr

    dann
    dann 2020/05/16
  • tokuhirom's blog

    -Dsun.net.inetaddr.ttl=1 するよりも networkaddress.cache.ttl 使おう jvm はデフォルトで DNS cache が 30sec かかっている。これはやや長過ぎると web service では判断されるケースが多い。 そこで、通常ではこれを短く設定して番環境のデプロイをしている場合が多い。 手元のあるコードでは -Dsun.net.inetaddr.ttl=1 が指定されていたが、現在では -Dnetworkaddress.cache.ttl=1 を利用すべき。 https://www.glamenv-septzen.net/view/1346 このページが挙動について詳しい。 基的に sun.net.inetaddr.ttl は歴史的経緯で指定されている名称であり、現代では networkaddress.cache.ttl を利用す

    dann
    dann 2017/12/01
    “-Dnetworkaddress.cache.ttl=1
  • spring.profiles.include は array で指定可能 - tokuhirom's blog

    https://github.com/spring-projects/spring-boot/issues/6995 spring.profiles.include は従来、string型でしか指定できなかったので以下のようなクソみたいな設定をするしかなかった。 --- spring.profiles: default spring.profiles.active: local --- spring.profiles.include: "\ logging-devel,\ mybatis-common,\ freemarker-devel,\ freemarker-common " --- spring.profiles: release spring.profiles.include: "\ mybatis-common,\ freemarker-release,\ freemarker

  • [java] SnakeYaml の機能を利用して Java でも YAML の custom tag を利用する - tokuhirom's blog

    YAML には tag という型を規定する機能がある。 ! が文書固有の型で !! がグローバルな型。 see http://yaml.org/type/ h2o の 2.1 では以下のような設定ファイルが書けるようになるそうです。 !file がカスタムタグになっていて、設定されているハンドラによってファイルが読み込まれる。 hosts: "example.com": listen: port: 443 ssl: !file default_ssl.conf paths: ... "example.org": listen: port: 443 ssl: <<: !file default_ssl.conf certificate-file: /path/to/example.org.crt key-file: /path/to/example.org.crt paths: ... 同じ

    dann
    dann 2016/09/26
  • spring boot で logging の設定のやり方まとめ - tokuhirom's blog

    spring boot にはデフォルトでロギング機構が付いている。spring-boot-starter-web の依存に spring-boot-starter-logging 入ってるので、web 有効にしてたら自動でロギング機構も依存に入っている。デフォルトのバックエンドは logback である。 パッケージごとの loglevel の設定は application.yml で出来る。 logging.level.org.springframework.web.servlet.PageNotFound: ERROR しかし、例えば logback の appender を追加したいなどの場合、もはや logback.xml を設定するしかない。XML で記述するのは苦行だが、耐え忍ぶしかない。(XML ではなく groovy でも設定できるが、groovy の方が情報量が少なく、辛

  • undertow と graceful shutdown と - tokuhirom's blog

    undertow を利用する予定は特にないのだが、undertow だと graceful shutdown はどのように実現可能なのだろうか、ということが気になったので調べてみました。 ここでいう graceful shutdown は listen socket を close したうえで、処理をすべて正常に終了し、終了後にプロセスを exit するようなものを指しています。 いくつかハマりどころがあるので注意。 undertow はドキュメントが貧弱 どうも、貧弱ですね。。ソース読めないと厳しい。ソースか javadoc 眺めて探すとかしないと見つからない。利用方法ものってないからテストから探すとかしないといけない。 DeploymentManager.stop() を呼ばないと Servlet#destroy が呼ばれない これは、Java EE になれた人だと常識なんだろうけど、

  • OSS版 Ansible Tower alternative である Ansible Semaphore を試したぞ! - tokuhirom's blog

    Ansible Tower の OSS Alternative であるところの Ansible Semaphore を試した。 Ansible を利用してデプロイするのの web ui である。 installation guide 通りにやれば利用可能。 docker run -d --name=mysql -p 127.0.0.1:3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql などとして mysqld を立ち上げておく(もちろん、別に docker じゃなくてもいい)。 https://github.com/ansible-semaphore/semaphore/releases から最新版のバイナリを取得(golang なので single binary)。 semaphore -setup として、起動。セットアップが始まる

    dann
    dann 2016/06/25
  • Java mixed-mode flame graphsについてのメモ - tokuhirom's blog

    http://www.brendangregg.com/blog/2015-11-06/java-mixed-mode-flame-graphs.html Java mixed-mode flame graphs ってエントリがどんな問題を解決しているか perf を用いた軽量なプロファイリングを java でも perf-map-agent を利用することで java のメソッドもプロファイリング可能 Java のプロファイリングと kernel/libc などの system profiling をいっぺんにできる この2つのものを同時にプロファイリングできることを mixed-mode といっているようだ flame graphs で見やすいグラフを NYTProf とかで出てる奴ね といった問題を解決しているのだが、解決している問題が多岐に渡っていて理解しにくい。 必要な環境 jd

    dann
    dann 2016/05/10
  • dropwizard metrics servlet で spring-boot app のメトリクスをいい感じに取得する - tokuhirom's blog

    spring-boot の MetricsFilter はしょぼい。ステータスコードごとのリクエスト数のカウンタと、最後にアクセスされたリクエストの処理時間ぐらいしか取得できない。 これは不便。Dropwizard ならデフォルトで以下の項目を取得可能。 status コードごとのrequest の件数のカウンタ 件数/平均リクエスト数/過去1,5,15分の移動平均 *.responseCodes.* 現在 web server が処理中の件数 "instrumented.activeRequests" : 1, リクエストの平均処理速度など。 "instrumented.requests.count" : 2003, "instrumented.requests.fifteenMinuteRate" : 2.2068657173426, "instrumented.requests.fi

    dann
    dann 2016/03/25
  • AssertJ 用の IntelliJ postfix completion plugin を書いた - tokuhirom's blog

    AssertJ の assertThat() をpostfix completion で入力したいと常々思っていて、誰か書いてくれないかなと思っていたけど誰も書いてくれないし、IntelliJ のプラグインというものを書いてみたかったので書いてみた。 https://github.com/tokuhirom/assertj-postfix-plugin ↑レポジトリはこちら。 IntelliJ のプラグインの情報は少なくて、どうもどこが家なのかよくわからなかった。 http://www.jetbrains.org/intellij/sdk/docs/index.html たぶんこの辺。だと思う。 とりあえず検索してみたところ IntelliJ IDEAのPostfix補完プラグインを作るという記事が見つかったので、「こりゃあ、真似すれば簡単に実装できそうだなー」と思ったのが運の尽き。 ど

    dann
    dann 2015/12/14
  • cmake で変数を全部ダンプする - tokuhirom's blog

    cmake で現在利用可能な変数の名前とその値をすべてダンプしたいということがあると思う。そんな時にはこうしたらいい。 get_cmake_property(_variableNames VARIABLES) foreach (_variableName ${_variableNames}) message(STATUS "${_variableName}=${${_variableName}}") endforeach() http://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script

    dann
    dann 2015/11/11
  • valgrind でメモリリークの誤検出が起きる場合、suppression を指定する - tokuhirom's blog

    valgrind は、問題がない場合でも誤検出することがママある。 そのような場合、suppressions ファイルを生成すればよい。 たとえば、dlopen() は内部でエラーメッセージ保存用のバッファを calloc で確保するが、このバッファは開放されないが、これはバグではないということになっている。See. https://sourceware.org/bugzilla/show_bug.cgi?id=14015 このような場合、以下のようにして、--gen-suppressions=all として、suppressions 設定をダンプさせることができる。 $ make -j 4 && valgrind --gen-suppressions=all --leak-check=full --show-leak-kinds=all ./a.out make: Nothing to

    dann
    dann 2015/11/10
  • log4jdbc は logback の設定をミスってるとすげー遅い - tokuhirom's blog

    log4jdbc を使うと jdbc でアクセスしたクエリのログが簡単にとれて便利なのだが、設定を誤るとパフォーマンスを超絶劣化させてくるので注意が必要である。 log4jdbc はデバッグレベルだと Throwable のインスタンスを取得してスタックトレースを取って、呼び出し元の情報を表示する。 これが極めて遅い。当に驚くほど遅い。 ↓具体的にはこのへんである。 private static String getDebugInfo() { Throwable t = new Throwable(); t.fillInStackTrace(); StackTraceElement[] stackTrace = t.getStackTrace(); if (stackTrace != null) https://github.com/arthurblake/log4jdbc/blob/m

    dann
    dann 2015/08/14
  • java と strace - tokuhirom's blog

    java command は clone(2) するので、普通に strace してもダメ。 strace -f java ... のように -f オプションをつければ、clone した先も追ってくれるので、トレース可能となる。 ためしに以下のような何もしないプログラムを用意してみる。 public class Hello { public static void main(String[] args) { } } javac Hello.java とした後、strace -o java.log -f java Hello とすると、java.log というファイルが作成され、どのようなシステムコールを JVM が発行しているかがわかる。 ちなみに /usr/bin/perl -e0 した場合と比べると以下のようになり、Java で開発を行うと何もしないプログラムでもたくさんの syste

    dann
    dann 2015/07/15
  • Graceful shutdown on Embedded Jetty - tokuhirom's blog

    You should set following 2 options. server.setStopAtShutdown(true); server.setStopTimeout(7_000); setStopAtShutdown sets code Runtime.getRuntime().addShutdownHook to stop Jetty at JVM shutdown phase. ref. https://github.com/eclipse/jetty.project/blob/master/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ShutdownThread.java setStopTimeout is required. Without this option, Jetty kills all co

    dann
    dann 2015/07/12
  • Server::Starter を Java で利用する方法。または、System.inheritedChannel() の挙動について - tokuhirom's blog

    Server::Starter を Java でも使いたいなあ、そうすれば LL の場合と同じような運用ができるなあ、という要望をたまに稀によく聞きます。 そんなときに決まって返される答えは、fdopen できないから無理じゃないすかね。。 ということである。 SO_REUSEPORT しよう SO_REUSEPORT なら、java でもちょっとの工夫で使えるんじゃないの? っていう説が出てくる。 で、頑張れば jetty で SO_REUSEPORT 使っていい感じに実装できそうだな、ということはわかって、サンプルコードも書いてみた。 しかし、実装してから指摘されたのだが、弊社では CentOS 6 が標準となっており、CentOS 7 が来るのはいつになるのかさっぱりわからない。 つまり、とりあえずしばらくの間は実践で使える可能性がほぼないということだ。 とりあえず、出来たものは出来

    dann
    dann 2015/05/27
  • Java の AST を解析できる javaparser がアツい!!! - tokuhirom's blog

    https://github.com/javaparser/javaparser javaparser は Java をパースして AST にしてくれるライブラリである。 この手のライブラリは数多あるのだが、ほとんどのものが Java 1.5 ぐらいでメンテナンスが止まっている。 実際このライブラリもメンテナンスが止まっていたのだが、Java 1.8 対応版とし開発が再開されたものだ。 このライブラリはパーサーライブラリであるから、文字列をパースして AST を構築してくれるというものになっている。 実際どのような AST が構築されるのかが気になるところなので、構築された AST をダンプできるツールを groovy で書いた。 #!/usr/bin/env groovy @Grab('com.github.javaparser:javaparser-core:2.1.0') impor

    dann
    dann 2015/05/21
  • Linux 上で5秒で chroot jail を使えるコマンド「jailing」が凄い! - tokuhirom's blog

    https://github.com/kazuho/jailing/ kazuhoさんがやってくれました。 ずいぶん前からlinuxでchroot jailを作るのに簡単な方法ないかなーと思ってました。個人的にはsystemd-spawnというのを使ってたのですが、幾らか気に入らない所があったり構築に時間がかかったり、ディスク容量を消費していました。簡単に使えて、ディスク容量を消費しないやつがほしいなーっておもってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、github にある docker とかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はjailing とても小さく、実装コードだと100数十ステップ程です。しかもpe

    dann
    dann 2015/05/14
  • gradle で maven central にあげる - tokuhirom's blog

    ちょっと前に gradle で maven central にあげようとしたら極めて困難な印象で挫折していたのだが、最近試したらすんなりといったのでご報告申し上げます。 単に gradle が難しいというよりは、maven central 等の toolchain 的な部分に関する知識がだいたいわかったので、すんなりわかったという点も多いんですが。 まず、gradle に maven central にアップロードする方法は、実は公式サイトにまとめられています。 http://central.sonatype.org/pages/gradle.html的にはこの通りに設定すればいいのだが、このドキュメント、gnupg とかについてはすでに設定済みだ、というような前提に基づいているので注意が必要。 アカウントの取得等についてはモリスさんのエントリを読めばよろしい。 http://tag

    dann
    dann 2015/04/19
  • [java] モダンな Annocation Processor の開発手順まとめ - tokuhirom's blog

    APT とは Annotation Processing Tool のことで、Java でコードの自動生成を行う際に利用される。 APT を利用すると、Java クラスやリソースの自動生成が可能となる。 インターネットに情報は結構あるのだが、昔のものが多くて、Eclipse に JAR を追加して云々とかそういう感じのものが多くて辛いので調べたことをまとめておく。 アノテーションを作る 適当なアノテーションを作る。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.SO

    dann
    dann 2015/03/26