2023年の振り返り

ビールを飲みながら今年の振り返りを書きます。 家族 今年の4月から2人の娘達がちょい地方の大学に入学することになり一人暮らしを始めた。それに先立って3月半ばに家族で現地に行ってアパート・マンションを探しに行ったのだけど、ちょい地方なので物件が少…

2022年のふりかえり

【億万長者の挑戦】正体隠して1億円稼げ!無一文からの90日間ビジネスサバイバル | Ep1. 起業チャレンジ!覆面ビリオネア - YouTube のBBQフェス回を観た後でこれを書いています。面白かった。大変だなぁと思って観てたけど、割と問題点が明確(個人の能力…

2021年のふりかえり

今年も完全にリモートワークで引きこもってて同僚とのランチや勉強会の懇親会での雑談が無いので、去年に引き続き生存確認的な意味合いも込めて雑に今年の振り返りをしたいと思います。 お仕事 Treasure Data 9年目です。去年から Digdag – Open Source Work…

2020年の振り返り

普段、年末の振り返りブログを書いてない勢なのですが、今年は同僚とのランチや勉強会の懇親会での雑談が無くなってしまったので、生存確認的な意味合いも込めて今年の振り返りをしたいと思います。 お仕事 Treasure Data 八年目です。前前職であるNaver Jap…

サーロインステーキの焼き方メモ

試行錯誤の末、最近焼き方が安定してきたのでまとめておく(下記はレア向けになっているので、ちゃんと焼きたい場合は時間を倍にしてもok)。 肉は出来るだけ厚めなもの 調理の一時間前には冷蔵庫から出す 肉の両面に塩胡椒を振り擦り込む。塩は肉の重さの1%…

既存の秘密鍵・証明書からJavaのTrustStore & KeyStoreを作る手順メモ

すぐに忘れそうなので、メモメモ。 KeyStore openssl pkcs12 -inkey server.key -in server.crt -export -out keystore.pkcs12 keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype pkcs12 -destkeystore keystore.jks -destkeypass keypas…

IntelliJでRobocodeのRobot開発メモ

毎回忘れて色々試しては時間を食っている気がするのでメモ。 1. Robocode自体のインストール (See http://robowiki.net/wiki/Robocode/Download) 2. IntelliJで適当にprojectを作り、`Project Settings` -> `Modules (Dependencies)` に `JARs or directory`…

JVM Tool Interfaceを少しさわってみたメモ

ふと、JVM(TM) Tool Interface 1.2.3 に触れたことがないことに気がつき、少しさわってみたのでメモ。OpenJDKのソースコードの jdk/src/share/demo/jvmti の下に幾つか例があるので、それを試してみることに。ちなみに概要は上記URLのドキュメントの各APIの…

Rustを使ってPostgreSQLの拡張ライブラリ (FDW) を書いてみた話

というタイトルですが、具体的には "Rustで拡張ライブラリ全体を書いた" のではなく "Cで拡張ライブラリの本体を書いてその中からRustのライブラリを呼んで、非同期でRust側からの結果を取得" してます。ちなみに、Foreign Data Wrapper (FDW) とは、Postgre…

PostgreSQL内の外部テーブルをBIツールからアクセスできるように試みた話

この記事は Treasure Data Advent Calendar 2015 - Qiita の14日目の記事で、現在12/21です。なぜこの記事がTreasure DataのAdvent Calendarに入っているかというと、Treasure DataのDataTanksというオプションサービスでPostgreSQLが利用されているためちょ…

FluencyというYet another fluent Java loggerを作った話

この記事は、Fluentd Advent Calendar 2015 - Qiita の七日目の記事です。先日、komamitsu/fluency · GitHub というFluentd (in_forward) 用のJava loggerを作ってみました。元々、fluent/fluent-logger-java · GitHub の開発を見ていたのですが、Fluentd ML…

"Presto in Treasure Data" @ db tech showcase 2015 tokyo

という題で話をしてきました。 db tech showcase Tokyo 2015 | Insight Technology, Inc.www.insight-tec.com スライドはこちら。 Presto in Treasure Data from Mitsunori Komatsu www.slideshare.net

PrestoのPlan

Prestoのコードを眺めていて、com.facebook.presto.execution.SqlQueryExecution#doAnalyzeQuery内で生成されるPlanを見てみたかったのでPrestoのJVMをアタッチしてPlanクラスの中を覗いてみた。対象のクエリはこちら(catalogはtpch)。 select c.nationkey…

MessagePack v07とJacksonの文字列を対象とした性能比較

int cnt = 800000; { ObjectMapper mapper = new ObjectMapper(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); List<String> strList = new ArrayList<String>(cnt); for (int i = 0; i < cnt; i++) { strList.add("01234567"); } System.gc(); Thre</string></string>…

PostgreSQLのWITH RECURSIVE練習でフィボナッチ数列

PostgreSQLにはWITH RECURSIVE句というものがあって、これを使うと再帰的な問い合わせが可能らしい。で、一度も使ったことがなかったのでちょっと試しにフィボナッチ数列を生成してみた。 with recursive r(a, b) as ( select 0::int, 1::int union all sele…

ByteBufferへのコピー速度比較

JavaでByteBufferへのコピーを行う際の速度を簡単に比較してみました。java.nio.ByteBuffer#put(byte)で1byteずつ書き込んでいくのでなければ大体同じですね。 Heap上のbyte arrayをコピー java.nio.ByteBuffer#put(byte[], int, int) byte[] bs = new byte[…

TypeProfileが取得される場合、所得されない場合について

JavaではJITコンパイルに関連するTypeProfileという機構がありますが、これがどのような状況で取得されるのかちょっと興味があったので簡単に試してみました。komamitsu/TypeProfileTest komamitsu/TypeProfileTest · GitHubChildというinterfaceを継承するC…

JavaのEscape AnalysisでNoEscapeがGlobalEscapeになってしまうケースの検証

Java ™ HotSpot Virtual Machine Performance Enhancements Escape analysis is supported and enabled by default in Java SE 6u23 and later. ということで最近のJVMでは有効になっているEscape analysisですが、こんな記事を見つけました。Richard Burnis…

jackson-dataformat-msgpack

数ヶ月前から komamitsu/jackson-dataformat-msgpack というのを細々と作ってました。これは何かというと、 msgpack/msgpack-java at v07-develop · GitHub で開発が進められているMessagePack Javaのv0.7系の実装と FasterXML/jackson-databind · GitHub の…

chef-client実行時のエラーをHipChatに通知する方法

TreasureDataではエンジニア間のコミュニケーションツールとしてHipChatをがっつり使っているのですが、同じくTDで使われているchefのchef-client実行時のエラーをHipChatの部屋に流すようにしてみました。という小ネタ。Chefには About Handlers — Chef Doc…

コンパイル時に特定のAnnotationが付いているClassのmodifierをチェックする方法

先日、@ Messageのついたunpack対象のclassの定義に public staticとつけていないのが原因だった。— Kumazaki Hiroki (@kumagi) 2014, 2月 28 @komamitsu_tw これ、コンパイル時に怒らせる事ってできないんでしょうか。できないんですよねリフレクションだか…

Raspberry PiでFluentdを立ち上げてTDにデータを流してみた話

一ヶ月程前に同僚である @doryokujin 先生からRaspberry Pi(面倒なので以下Pi)を頂いたのだけど、Piに必要なSDカードが手元に無くてすっかり放置していたのですが、満を持してSDカードを買ってきたのでちょっとPiを立ち上げてみた。という話を備忘録的に。…

fluent-logger について

こんにちは。Fluentd Advent Calendar 11日目担当の @komamitsu です。ワイワイ。Fluentd Advent Calendarにノリで登録したもののfluentd本体やプラグインに余り関わっていないので途方に暮れていましたが、fluent/fluent-logger-java のメンテナンスをして…

OCatraをLwt使うようにした

OCatraをいろいろ直したり、ベンチマークとってみたり - komamitsu.log で作っていたOCamlのおもちゃ的Webサーバー OCatraをLwtを使うように修正してみた。 1st 2nd 3rd 4th Ave. OCatra (byte) 4238 4424 4299 4285 4311 OCatra (opt) 11806 12384 12381 12…

Androidでのnew String(byte[])とCharsetDecoder.decode()の違い

byte[] -&gt; String 変換のパフォーマンス、とAndroidでCharsetDecoder#decode(ByteBuffer in).toString()が遅い件 - komamitsu.log でAndroidではnew String(byte)の方が速い結果が出たので[https://github.com/OESF/OHA-Android-4.0.3_r1.0:title=コード]…

byte[] -> String 変換のパフォーマンス、とAndroidでCharsetDecoder#decode(ByteBuffer in).toString()が遅い件

Android上でMessagePackのベンチマークコードを動かしつつprofile取ってみたら、msgpack-java/src/main/java/org/msgpack/unpacker/StringAccept.java at master · msgpack/msgpack-java · GitHub辺り(CharsetDecoder#decode(ByteBuffer in).toString())で…

型変換テンプレートで変換する際、中間オブジェクトを生成しないようにした

Android上でJSONとMessagePackの簡単なベンチマークをとってみた - komamitsu.log の続き。http://syuki.skr.jp/files/201204041/furuhashi-master-last-iso-pdfa.pdf を読んだところ、Unpacker.read(Class)は中間的な動的型付けオブジェクトを生成しないと…

Android上でJSONとMessagePackの簡単なベンチマークをとってみた

使ったコードはこちら => https://github.com/komamitsu/AndroidMsgpackBenchmark/blob/master/src/com/komamitsu/android/msgpackexample/MsgpackExampleActivity.javaベンチの概要としては、100byte x 50000の配列、100byte(value) x 30000の辞書をJSON, M…

quicksort

今日はコード書いて無かったので何となくクイックソートを。

Boyer–Moore string search algorithm

実装したことが無かったなぁ、とふと思ったので、ちょっと書いてみた