かまたま日記3

プログラミングメイン、たまに日常

DockerのUbuntuコンテナでsystemdを動かす

TL; DR とりあえず --privileged をつける。つけないでいい感じで動かすのは大変そう。 CentOSは公式でsystemd用のベースイメージを用意してくれているので、Ubuntuを使いたい人以外はそちらを使うのが良さそう https://hub.docker.com/r/centos/systemd/ ST…

GolangでForループの中でdeferしない

defer はそれが定義された関数が終わったタイミングで実行されるので、forループでdeferを定義してしまうと、forループが終わって所属する関数が終わったタイミングで一斉に実行される。 package main import "fmt" func main() { for i := 1; i <= 5; i++ {…

退職しました4

TwitterやFacebookでフォローされてる方は知っているかと思いますが、3月末で前職を退職していました。短い間ですがお世話になった皆さんありがとうございました。1年弱という社会人生活で一番短い在職期間になりました。 これまで Hosted Embulk for TDであ…

Goで複数バージョンを管理する

まあここに書いてることそのままなのですが、日本語のメモとして。 go get でダウンロード用のバイナリを取ってきて、downloadコマンドを打つ $ go get golang.org/dl/go1.12.5 $ go1.12.5 download Downloaded 0.0% ( 15175 / 127612395 bytes) ... Downloa…

embulk-executor-remoteserver 0.4.0 リリース

github.com このバージョンより、Embulk clientとserver間でTLSでの接続ができるようになりました。 設定方法 (クライアント) まず、use_tls オプションをtrueに設定してください。サーバ側が(クライアントにとって)既知のCA証明書でサインされた証明書を使…

Gradleで動的にプラグインを適用する

モチベーション とあるプロジェクトでgradle-release pluginを使っているのですが、DockerでJarをビルドするときにこのプラグインを設定していると .git ディレクトリをコピーしないと(プロジェクトがGitリポジトリじゃないと)最初のbuild.gradleの検証で失…

CicleCIでDockerイメージを再利用する in 2019

CicleCIでDockerイメージを再利用する - かまたま日記3 こちらの記事の最新版です。 現在CircleCIはバージョン2で、Docker Layer Cachingという機能がありますが、残念ながら追加のフィーが必要です。というわけで、会社とかで使っててフィーを払える方はそ…

embulk-executor-remoteserverを作った #Embulk

Embulkのexecutor pluginの仕組みとネットワークプログラミングを学びたかったので、勉強がてらこのようなプラグインを作ってみました。 github.com できること Embulkのタスクの実行を別に立てた専用のサーバ(以下Embulkサーバと呼びます)上で実行できる 複…

gradle-embulk-plugin v0.5.0 リリース

Release 0.5.0 · kamatama41/gradle-embulk-plugin · GitHub embulk_* のタスクを実行時の config.yml output.yml のオーバーライドを build.gradle 内ではなくプロパティを渡すようにしました。 以前 embulk { configYaml = "myconfig.yml" outputYaml = "m…

Lambdaオブジェクトの型パラメータを取るのは難しい

TL;DR ラムダオブジェクトの型パラメータを取得するスマートな方法は今の所見つかっていない もし基盤プログラムでそういうことをしたい場合は、ラムダを禁止して、匿名クラスを使う いい方法があったら教えてください 本文 Javaで基盤プログラム的なのを作…

embulk-output-multiを作った

前職の同僚の @mtsmfm さんがつぶやいていたので、勢いで作ってみました。 embulk で 1 つの input から複数の output に繋ぐみたいなことはできるのだろうか— Fumiaki MATSUSHIMA (@mtsmfm) 2019年2月25日 github.com 使い方 2019/03/11時点の最新版は 0.4.…

GradleプラグインをGradle community portalにアップロードした

今まで、自作の2つのGradleプラグインはGitHub上のオレオレMavenリポジトリから落とすようにしていたんですが、 buildscript でそのリポジトリを指定しないと行けなかったり、記述がちょっとだけ面倒だったので、Gradle community portalにアップしてPlugins…

JUnit 5 入門

そろそろ使ってみるかということで入門してみました。 JUnit Jupiter こちらにも書かれてますが、JUnit 5は複数のサブプロジェクトからなり、JUnit 5でテストを書いたり拡張機能を書くためのクラスはJUnit Jupiterというプロジェクトにあります。なので、テ…

gradle-embulk-plugin v0.3.0 リリース

Release v0.3.0 · kamatama41/gradle-embulk-plugin · GitHub gem, gemPush のタスクの内容を最新のEmbulkのものに追従しました。詳しい使い方は以下の記事を参照ください。 kamatama41.hatenablog.com

embulk-filter-hash v0.5.0 リリース

GitHub RubyGems イシューで希望をくれたHMACのハッシュ化に対応しました。以下のような感じで algorithm にHMACのアルゴリズムを指定した上で secret_key に秘密鍵を入れると使えます filters: - type: hash columns: - { name: username } - { name: phone…

JavaでRubyのeach_sliceがしたい

each_sliceというのは配列を指定した要素数の配列に分ける処理です。リストの中身をn件ごとに処理するときに便利です。 Javaには同様の処理が(たぶん)標準APIには無いので、こんな感じで行けそうです。 import java.util.Arrays; import java.util.List; imp…

アメリカに行ってきた

先週1週間会社の出張でアメリカ(マウンテンビュー)に行ってきました。海外は前職でのフィリピン出張以来2年ぶりです。 飛行機 行きは羽田からサンフランシスコ国際空港(SFO)の直行便で9時間ほど、帰りは後述の理由からSFOから香港国際空港(HKG)経由の成田へ…

tfenvのオーナーを移管した

色々issueとかPRとかもらっていたのですが、転職も決まってTerraformユーザーではなくなってしまったこともあり、私自身がメンテナンスするモチベーションが上がらなくなっていたため、別の方にオーナーになってもらうことにしました。 I'm looking for new …

CircleCIでgradle testがOOMで落ちるのを防ぐ

とあるプライベートなリポジトリで急にCircleCI上のgradleのテストが落ちるようになってしまい、レポートのxmlも出力されなくなってしまいました。 うーん、CirclrCIでテストに失敗したんだけど例外のログが何も出ない、その上なぜかJUnitのレポートも作成さ…

Chromeで特定のドメインのアクセスをリダイレクトさせる

Twitterのブックマーク機能は現在PC版のサイトでは提供されておらず、mobile.twitter.com を使ったモバイル版でアクセスする必要があります。 An easier way to save and share Tweets Bookmarks are now rolling out globally on Twitter for iOS and Andro…

Parallel Streamの並列数を調整する

Streamの parallel メソッドを呼ぶとストリームの処理を並列に実行できますが、これは内部的には前回紹介したForkJoinPoolが使われています。ForkJoinPoolは内部でcommon poolと呼ばれる共通プールを持っており、明示的にPoolを指定しない ForkJoinTask#invo…

ForkJoinPoolについて

ForkJoinPoolはJava 7から導入された新しいExecutorのフレームワークです。 旧来のExecutorと違うのは、タスクのスケジュールのアルゴリズムとして、work-stealingを採用していることです。これは再帰処理やタスクの中で更に細かな子タスクが生成されるよう…

退職しました3

4月で約2年半所属した前職を退職しました。お世話になった皆さんありがとうございました。 これまで SREチームとしてインフラ周りを幅広く見ていました。アプリケーション開発以外の仕事は大体やったと思います。一部ですが具体的には以下の様なことをやって…

embulk-input-remote v0.4.1 リリース

GitHub RubyGems 約1年ぶりのリリース、0.4.0はGemはリリースできたのですが、CircleCIからの自動タグ付けに失敗したので新しいのをリリースしました..w 0.3系から仕様は変わってませんがEmbulk 0.9にあげたりKotlinとかその他の依存ライブラリやGradleのバ…

embulk-filter-hash v0.4.0 リリース

GitHub RubyGems 約1年ぶりのリリース、Embulk v0.9系だと動かなかったようで、対応しました。 あとKotlinも最新版に上げました。

CircleCI上のRSpecのテスト時間をparallel_split_testを使って短縮する

CircleCIを使ってテストを実行する場合、テストはcircleci tests splitコマンドで分割した上で複数コンテナを使うことでテストの実行時間を短縮することができます(参考リンク)。ただ、コンテナ数を増やすのも限界がありますし*1、少し前までtiming-based sp…

envsubstで簡易テンプレートを実現する

設定ファイルとかで一部だけ可変にしたテンプレートを使いたいんだけど、RubyとかPerlみたいな別言語を使うまでも無くシェルスクリプトだけで完結したい場合、envsubstコマンドを使うとテンプレートに環境変数を埋め込むことが出来ます。 インストール (on U…

クラスインスタンス変数はそのクラスからしか参照できない

RubyのクラスはClassクラスのオブジェクトなので、インスタンス変数を持てます。クラスレベルとかクラスメソッドの中で定義された@付きの変数はクラスインスタンス変数(Class Instance Variable)と呼ばれ、そのクラスからしか参照できません、継承されてる場…

JenkinsでJobを起動して、終了まで待つシェルスクリプト

jqとcurlがインストールされている必要があります。Jenkinsのバージョンは 2.46.3 で認証を有効にしています。 #!/bin/bash # # Trigger a Jenkins build and wait for the build to finish. # set -eu JENKINS_HOST="jenkins.kamatama41.com" JENKINS_USER=…

xargsとddcpで高速にファイルをコピーする

総量350GBくらいの大量にファイルが入ってるディレクトリをコピーしないといけなくなったので、xargsとddcpを使って頑張ってコピーした時の記録 もっと簡単に出来る もっといい方法がある ご指摘お待ちしております! #!/bin/bash SRC_PATH=/foo DST_PATH=/b…