サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
MacBook Neo
cero-t.hatenadiary.jp
すっかりポイ活ブログになりつつある当ブログですが、本業はITエンジニアですので、久々に技術的な投稿をします。 Spring Boot 4.0 で OpenTelemetry 対応がようやく理想的な形になったという話です。*1 0. はじめに 監視・可視化はこの10数年くらいの間、特に分散サービス化が進むと共に重要度が上がり、オブザバビリティ(Observability)という概念で語られるようになりました。 そしてその標準化も進み、最近では OpenTelemetry に準拠した監視データを転送・収集することがデファクトスタンダードになってきました。 Spring Boot も 3.x の頃からその流れに乗り始め、昨年11月にリリースされた Spring Boot 4.0 ではメトリクス・トレース・ログの3種類をすべて OpenTelemetry で転送できるようになりました。 そこで今回
Grafanaスタックによるアプリケーション監視の第3回、今回はGrafana + Tempoです。ローカル環境(+ Docker)でGrafanaとTempoを使ってトレースの可視化を行います。 ソースコードなどはすべてGitHubに置いています。 https://github.com/cero-t/spring-store-2022 トレース収集の構造 マイクロサービスにおいては特に「分散トレーシング」と呼ばれています。分散アプリケーションに対するトレーシングという意味であり、この図のように呼び出し階層や、それぞれの処理に掛かった時間などを可視化するために利用されます。 可視化された分散トレーシング このような呼び出しの関係を作るためには、それぞれのアプリケーションが「誰から呼ばれたのか?」ということを認識する必要があります。そのために用いるのが「トレースID」です。 分散トレーシング
前回のエントリー では動かし方のみ説明し、GrafanaスタックやMicrometerがどのように動いているのかについて触れていなかったので、これから何度かに分けて説明していきます。 第1回目はGrafana + Prometheusです。 Grafanaスタックの各プロダクトについて 説明に入る前に、Grafanaスタックになじみがない方(1ヶ月前の僕とか)も多いと思いますので、まずは簡単に各プロダクトのことを説明しておきます。 Grafana https://grafana.com/oss/grafana/ GrafanaはGrafana Labsが開発している監視用のダッシュボードやアラート機能などを提供するUIです。Elastic Stackになじみ深い方にとっては「要するにkibana」と言うと説明が早いでしょうか。 GrafanaはPrometheus、Loki、Tempo、E
前回のエントリーで自作Spring Dataの扉を開けましたので、今回は実際に全件検索、findAllが動くところまで進めてみます。 TL;DR このエントリーは長文すぎて誰も読まないと思うので、先にまとめておきます。 findAllだけ動く独自Spring DataとサンプルアプリケーションをGitHubに置いといたよ(リンク) spring-data-relational の SqlRenderer StatementBuilder Select Table column クラスなどを利用してSQLの文字列を作成することができるのが、ちょっと楽しかったよ この先は Spring Data JDBc のコードリーディングしたメモみたいなものだよ 「ここから先の長文を読む者は一切の希望を捨てよ」 1. Repositoryクラスのインスタンス生成の流れを追う findAllについては提供し
僕は約束を守る男なので、Spring Data SQLを作り始めたというお話です。 背景 これまでBootiful SQL TemplateというJdbcTemplateの薄いラッパーを(作って)使っていたのですが、INSERT文とかSELEcT ALLくらいは自動生成して欲しいよなと思い、Spring Dataを使おうかなと思って調べ始めました。 Spring Dataの中でも最も素直に動いてくれそうな Spring Data JDBcを試したところ、簡単なクエリはSQLを書かずに生成できるし、アノテーションでSQL文を渡すこともできるのですが、動的に組み立てたクエリを渡すことができないようでした。 さすがにそこまで割り切った仕様のフレームワークは使いづらく、かと言って他に好みのO/Rマッパーがあるわけでもありません。 「好みのO/Rマッパーがないなら、作れば良いのよ」とはもう数百年くら
※本事象はmacOS 12.3.1にアップデートすることで改善されました。記録のために残しておきます。 事の起こり 待望のユニバーサルコントロールが提供されたmacOS 12.3、ついにリリースされたので僕も喜び勇んで即アップデートをしました。 ただ、アップデート後、Mac miniが起動しない。正確にはジャーーンという音がしてリンゴマークが出た後に、画面が真っ暗なまま。何度か電源長押しで強制シャットダウン→再起動を繰り返すも症状は変わらず。 画面は真っ暗でもキーボードを叩いているとビープ音がするので、画面が映っていないだけで、起動はしているようです。 映像出力がおかしいのだと思って、ディスプレイと接続しているUSB-cやHDMIを接続し直して何度か起動を繰り返した結果、何とか起動できる状態まで復旧したのですが(方法は後述)こんな不安定な状態になってしまうのは、さすがに困ります。 他にも同
こんにちは、Dapr Advent calendar 8日目です。今週は会社で全エンジニアとの1 on 1などやっており、なかなかの忙しさなのですが、何とかブログを続けられています! DaprとZipkinで分散トレーシングをしてみよう 今回はDaprとZipkinを使って分散トレーシングをしてみます。最近色々なサービスやミドルウェアが分散トレーシングに対応するようになったので、だいぶ世の中に認知される技術になりましたよね。使ってるかどうかは別として😏 分散トレーシングやZipkinについての解説をすると長くなるので、あまりご存じないという方は先に調べておいてくださいね。 今回作成するアプリケーションのソースコードはgithubに置いてあります。 https://github.com/cero-t/dapr-advent-2021/ 今回は、過去に作成した「hello」「publish」
年に一回くらい、突然Javaの話をブログに書き始めるJava championの @cero_t です。 数年前、「Spring BootでもSQLファイルを使いたいな」と思って勢いで作った Bootiful SQL Template ですが、何気に仕事で使うことがたまにあるので細々とメンテナンスを続けています。 最近、APIを全面的に見直してFluent API化したバージョン2.0.0をリリースし、日本語のドキュメントも書き始めました。 sqltemplate/README_ja.md at main · cero-t/sqltemplate · GitHub 今回は、これをRecordに対応させたというお話です。Record対応されたバージョンは2.1.0になります。 TL;DR JdbcTemplateがRecordに対応してないから自分で対応したよ Java16から追加された c
皆さんこんにちは、調べてみましたブログです。 要約 先に本文の内容をまとめておくと、こんな感じです。 4KディスプレイをPcディスプレイとして利用する場合、通常は4Kネイティブではなく拡大して利用する 21〜23インチの4Kディスプレイは、1920 x 1080(200%拡大)で利用する人が多い 27インチの4Kディスプレイは、2560 x 1440(150%拡大)で利用する人が多い 32インチの4Kディスプレイは、Macなら3008 x 1692、Windowsなら3072 x 1728(125%拡大)で利用する人が多い 41インチぐらいなら4Kネイティブで利用できる Retinaディスプレイは、実解像度の1/2の疑似解像度で使うのがベスト 21.5インチは、4K(3840 x 2160)を1920 x 1080(200%拡大)で使うのがベスト 27インチは、5K(5120 x 2880
要約 技術的な話だけ教えて、という方のために先に結論だけ書いておきますと、PostgreSQLはクエリを実行した時点で全レコードの情報を一気に読んできてヒープを埋めてしまう場合がある、ということ話です。 たとえば、ResultSet#nextメソッドを使いながら処理を回すようなコードを書いて、少ないヒープでも処理できるようにするのは常套手段だと思いますが、そういうコードを書いていても一気にヒープを消費してしまうことがあるのです。詳しくはこのドキュメントを見てください。 https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor ことの発端 ちょっと仕事でJava + jOOQ + PostgreSQLで、DBのデータを集計するようなバッチ処理を書いてまして、もちろん俺様の書いたコードにバグなんてある
FEXLのためにRAP.N HAYABUSAを買ってアケコンデビューしたわけですが、アケコンについて調べていると、ボタンや天板をカスタマイズしている事例をよく目にします。 特に痛々しい痛アケコンなど見るにつけ、自分もやりたい気持ちが高まります。 またそもそもアケコンの天板やボタンは消耗品みたいなものなので、ボタンや天板を交換することで、アケコン自体の寿命も延ばせそうです。 そう思ってRAPの天板交換をしている事例を調べていたのですが、いずれも接着されている天板を剥がしてしまい、カットしたアクリルパネルと印刷した紙に差し替えています。いやいや、買ったばっかのアケコンの天板を剥がすとか貧乏性なのでできないし、のちのち譲ったり売ったりする時にも困りそうです。 もっと普通に、アケコンの天板と同じサイズのステッカーを作って貼ればいいんじゃないの? ステッカーを貼るだけなら作業工程が大げさにはならなさ
急に冷え込んだ昨今、さすがにこの寒さではメッシュの服など着ることができませんので、せめてルーターだけでもメッシュにしてはどうでしょうか。 なーんて、寒さに拍車を掛けかねない妖怪、@cero_t です。みなさまお風邪など召されておりませんでしょうか。 さて、今年のはじめ頃に、Linksys Velopというメッシュルーターを買いました。 cero-t.hatenadiary.jp メッシュルーターというのは、複数のルーターで同じSSIDを使い、家中でどこにいても快適にWi-Fiが使えるというものです。既存のルーターを複数使って、ただただ同じSSIDを使うだけだと、電波の悪いルーターに繋ぎっぱなしになることがありますが、メッシュルーターであれば端末さえ対応していれば(大体対応してる)通信状況の良いSSIDが選択されます。 そんなわけで実際にメッシュルーターを使って色々試し、なるほどこれは便利だ
先日、MicrosoftがDaprというプロダクトをOSSで公開しました。 www.publickey1.jp Distributed Application Runtimeの略だそうで、なんかIstio的な感じなのかなーと思ったのですが「ステート管理」みたいな機能もある所が少し気になって、ドキュメントとかを眺めていると、ステート管理、メッセージング、アクターなど、ただのサイドカーよりも機能が多めになっていて、かつ、分散トレーシングの機能も持っている辺りを見て、あぁなるほどとなりました。ステート管理やメッセージングをプラットフォーム側が持つようになれば、AOPやBcIなしで分散トレーシングができるようになるし、これはアリだなという謎の納得感を得ました。 まぁ細かいことはさておき、Daprのアプローチがちょっと面白いなと思い、Daprそのものというよりも、このようなアプローチがゲームチェンジ
去年の3月頃に、MacBookからThinkPad X1 Yogaに乗り換えたという話を書きました。 MacBookからThinkpad X1 Yogaに乗り換えます。 - 谷本 心 in せろ部屋 その8ヶ月後、Surface Bookに乗り換えました。 ThinkpadからSurface Book with Performance Baseに乗り換えました - 谷本 心 in せろ部屋 MacからWindowsにした理由は、USB Type-AとかHDMIもまだ欲しかったことと、WindowsでもDockerとかWSLとかBabunとか使えばで割とふつうに開発できるんじゃないかと期待したことでした。その点については概ね期待通りであり、何ら問題ありませんでした。 そしてThinkPad X1 YogaにしろSurface Bookにしろ、ペンで手書きできることは予想以上に良くて、設計や執
仕事でAWS Lambdaを使う機会が増えてきたのですが、やはり書き慣れたJavaでLambdaを書きたいなと思うことが少なくありません。ただAWS LambdaでJavaアプリを動かすと、初回アクセスに十秒近く掛かるし、メモリ消費量も大きいしで、パフォーマンス的にも運用コスト的にも嬉しくありません。そう思ってるところで、JavaのアプリをGraalVMでネイティブビルドをすれば初回起動時間もメモリ消費量も抑えられると聞いたので、これに取り組んでみました。 ただ実際にやってみると、わりとエラーが頻発してしまって、トライ&エラーを繰り返しながら先に進むという感じになりました。せっかく色々と試したので、起きた問題とその解決策・回避策なんかをここにメモしておきます。 やったこととか参考にしたサイトとか やったこと まずJava8(1.8.0_202)と、Micronaut(1.1.3)のライブラ
転職する人って4月1日から新しい勤務先で稼働することが少なくないと思うんですけど、その日がエイプリルフールっていうのも、何だか嘘か本当か分からなくて面白いですよね。 ということで僕もそんな、真偽のハッキリしない話を書きたいと思います。 本日より、株式会社Everforthにて正社員として働き始めます。 そして、Acroquest Technology株式会社の正社員としても継続します。 2つの会社で正社員をやります。 2社の名刺です ちょっと何を言ってるのか分からないかも知れませんが、両方の会社でふつうに正社員として働くということです。 別に日本には「2つの会社に正社員として働いてはいけない」という法律はなく、むしろ「法律上は正社員などの身分はない」という感じなのです。なので、2つの会社で正社員として働くことは可能です。 今回、Everforth社を知る機会があって、とても面白そうだなと思
日本語環境でUS配列のキーボードを使う時に、IMEのON/OFFをどうするか問題。ずっとWindowsを使い続けてきた人は「Alt + `」で構わないでしょうし、あとは「Shift + cAPS」や「ctrl + Space」あたりがメジャーかも知れません。 しかしMacの日本語キーボードを利用していた人は、「左AltでIME-ON、右AltでIME-OFF」というアサインにしたくなります。現在ONかOFFを気にせずにON/OFFを切り替えられるので、とても便利です。 これを実現するために、alt-ime-ahkというツールがよく使われます。これは左右のAltキー空打ちを、それぞれIMEのONとOFFにアサインするツールです。 https://github.com/karakaram/alt-ime-ahk ただ使い始めて3日もするとキー入力に慣れてきて、文章を書いている途中で「Altを離
Spring Boot (1.3) + cloud (Brixton) で、デモ用にEcサイトのサンプルを作っていました。 https://github.com/cero-t/e-commerce-example これをSpring Boot (2.0) + cloud (Finchley) のマイルストーン版に置き換えてみたところ、問題が出るとは予想してたけど、思った以上に問題が起きたので、その解決策のメモ。 spring-boot-actuatorだけじゃだめ、spring-boot-starter-actuatorを使う。 actuatorを使いたいのでspring-boot-actuatorをdependenciesに入れていました。1.5.9まではこれでも良かったんですが、2.0からは構成が変わり、このままだと依存するbeanが見つからないというエラーになりました。きちんとspr
このところ、夜な夜な格ゲーの動画を撮ってはYoutubeにアップしては、SRK(shoryuken.com)に取り上げられて承認欲求を満たしている [twitter:@cero_t] です。SRKは世界最大の格ゲーコミュニティだよ! http://shoryuken.com/?s=Shin+Tanimoto このエントリーは Go2 Advent calendar 2017 の7日目です。 https://qiita.com/advent-calendar/2017/go2 はじめに まえがき 学生時代、僕は格闘ゲームの連続技(コンボ)の研究を嗜んでおりまして、学校に行くぐらいならゲーセンを行く、試験勉強するぐらいならコンボの研究をする、卒論を書くぐらいならコンボビデオを撮るという、クズみたいな学生生活を送っておりました。当時、いまは亡き「ゲーメスト」というアーケードゲーム雑誌で体験ライタ
急激な冷え込みのせいで「寒い!」というつぶやきがTLに散見されるこの頃ですが、皆さんお風邪など召していらっしゃらないでしょうか。 否応なしに寒いという言葉に反応してしまう、けなげなエンジニアの [twitter:@cero_t] です。 このエントリーは Java Advent calendar 2016 の8日目です。 昨日は [twitter:@haruo31] さんの「Java Stream APIでハマったこと」で、 明日は [twitter:@deaf_tadashi] さんの「マイクロベンチマークツール、JMHについて」でした。 今日のエントリーでは、Javaのパフォーマンス系書籍を紹介したいと思います。 Optimizing Java - O’Reilly Media URLを見るにつけ、あのオライリー様のサイトですら拡張子が由緒正しい .do なのですから、日本のSIerが
以前のエントリーで、AWS LambdaでJavaを使ってDynamoDBを呼び出した際に、初回起動にとても時間が掛かったという話を書きました。 http://d.hatena.ne.jp/cero-t/20160101/1451665326 今回は、この辺りの原因をもう少し追求してみます。 なぜ1回目と3回目のアクセスが遅いのか? AWS Lambdaの中身はよく知りませんが、おそらく、アップロードしたモジュールをTomcatみたいなコンテナとして起動させて、外部からコールしているんだろうと予想しました。それであれば、2回目以降のアクセスが早くなることは理解ができます。 ただ、1回目と3回目だけが極端に遅くて、2回目、4回目以降は早くなるというところは腑に落ちません。 その辺りを調べるべく、staticなカウンタを使って、値がどんな風に変化するかを調べてみました。 こんなソースコードです
あけましておめでとうございます! 現場でいつも締め切りに追われデスマーチ化している皆様方におかれましては、年賀状がデスマーチ化していたのではないかと憂慮しておりますが、いかがお過ごしですか。 エンジニアの鑑みたいな僕としましては、年始の挨拶はSNSでサクッと済ませ、年末年始は紅白など見ながらAWS Lambdaのソースコードを書いていました。 ということで、Lambda。 Lambdaを書く時に最初に悩むのは、どの言語を選択するか、なのです。 まず手を出すのは、サクッと書けるNode.js。 ただNode.jsの非同期なプログラミングになかなか馴染めず、わからん殺しをされてうんざりしていました。みんなどうしているのよとtwitterで問いかけたところ [twitter:@making] からPromiseを使うべしと教わり、なるほど確かにこれは便利ですナと思いつつも、これが標準で使えないぐ
AWSを仕事で使い始めて1年半、 ようやく頭がクラウド脳に切り替わってきた [twitter:@cero_t] です。 好きなAWSサービスはKinesisです。まだ使ってませんけどね! さて、今日のテーマは「AWSでTomcatのセッション共有」です。 Ec2上で動くTomcatのセッションオブジェクトを、DynamoDBを使って共有するというものです。 話題としてはそれなりに枯れていると思うのですが、 実案件で使おうと思ったら問題が出そうになって困ってる、という話です。 発生する問題は? どういう問題が起きるか、先に書いておきます。 発生する問題は、 複数のTomcatをELBで分散させている時に、 スケールインやスケールアウトが短時間に連続して発生すると、 セッションが巻き戻る(先祖返りする)可能性がある、というものです。 セッションが消えるならまだしも、 先祖返りするというのは、実
前回のエントリーでは、Spring Bootで@Restcontrollerアノテーションを使ったサーバを作り、 RestTemplateでクライアントを作ることで、リモートサービス呼び出しを実装しました。 http://d.hatena.ne.jp/cero-t/20150618/1434645164 しかしこの方法は、クライアント/サーバ間に何の契約もなく、 サーバから呼び出し元のクライアントをたどることもできません、 言ってしまえば、リフレクションによるメソッド呼び出しをしているようなものでした。 リモートサービス呼び出しにインタフェースを導入する この問題を解決するために、クライアント/サーバ間の契約として インタフェースを挟むことを検討します。 サンプルは、以下に置いています。 https://github.com/cero-t/moa-sample/tree/master/mo
最近のアーキテクチャ界隈の話題と言えば、Microservice。 MSAと略すかMOAと略すか、みたいな議論もあるようですが、 cEROMETAL的にはMOAを一押しせざるを得ない状況です。 MOAMETAL - google画像検索 いいとして。 システムをMicroservice的に設計すると、小さな粒度のWebサービスができあがります。 そしてこのWebサービス間の通信をするためには、 HTTPなりAMQPなりのプロトコルを使ったリモートサービス呼び出しが必要となります。 SOA的に考えれば、ESBやcamelのようなメッセージングバスを利用するという仕組みもアリですが、 もう少しライトに、簡単なHTTPコールで呼び出しを済ませたいと思うことも多いでしょう。 今回はその辺りをゼロベースで考えて「僕が考える最強のリモートサービス呼び出し」を見つけるべく、 実装しながら試行錯誤したので
年末に作ったSqlTemplateですが、自分の仕事でも使いたいっていうか使ってるので、 ソースコードを多重管理しなくて済むよう、Mavenリポジトリで公開することにしました。 こんな指定で使えます。 <dependencies> <dependency> <groupId>ninja.cero.bootiful-sqltemplate</groupId> <artifactId>bootiful-sqltemplate-core</artifactId> <version>1.0.1</version> </dependency> ... </dependencies> ドメイン名は、ninja.cero-tにしようかと思ったんですが、 ハイフンとかアンダースコアとかをURLに入れるな勢が多いので、 ninja.ceroっていうちょっと語呂のよくないドメイン名になっています。 そんな話は
「SQLが書きたいんや!」という想いのもと、 Spring Bootと組み合わせて簡単に使える、 JdbcTemplateのラッパーライブラリを勢いで作ってみました。 GitHubに置いています。 https://github.com/cero-t/sqltemplate JdbcTemplate / NamedParameterJdbcTemplateをベースにして、 1. SQLファイルが使えること 2. Date and Time APIに対応すること 3. publicフィールドに対応すること 4. APIが今風であること の4つを目的にして作りました。 それならMirageでいいんじゃね? という想いは消えませんが、 Spring標準機能のみを使うことによる、政治的な使いやすさを取りました。 作りましたって言っても、ただのラッパーですので ソースコードはすっごく小さくて、空行とコ
次のページ
このページを最初にブックマークしてみませんか?
『せろりの匂いがする部屋』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く