GitBucket 4.43.0をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.43.0をリリースしました。

https://github.com/takezoe/gitbucket/releases/tag/4.43.0

今回はH2の1.x系から2.x系へのアップグレードがメインです。H2は1.x系と2.x系でデータファイルに互換性がないので長らくアップグレードを躊躇っていたのですが、セキュリティ上の問題などもあり、いつまでも古いバージョンを使い続けるわけにもいかないので思い切ってアップグレードすることにしました。

GitBucketの自動マイグレーション機構はDBが生きていないと使えないため、GitBucketのデータ保存先にデフォルトのH2を使用している場合はアップグレード前に以下のような手順で手動でデータファイルの移行(データベースの作り直し)を行う必要があります。

# Export database using the current version of H2
$ curl -O https://repo1.maven.org/maven2/com/h2database/h2/1.4.199/h2-1.4.199.jar
$ java -cp h2-1.4.199.jar org.h2.tools.Script -url "jdbc:h2:~/.gitbucket/data" -user sa -password sa -script dump.sql

# Recreate database using the new version of H2
$ curl -O https://repo1.maven.org/maven2/com/h2database/h2/2.3.232/h2-2.3.232.jar
$ java -cp h2-2.3.232.jar org.h2.tools.RunScript -url "jdbc:h2:~/.gitbucket/data" -user sa -password sa -script dump.sql

また、./.gitbucket/database.confの設定に以下のようになっている場合、urlから;MVCC=trueを削除する必要があります。

db {
  url = "jdbc:h2:${DatabaseHome};MVCC=true" // => "jdbc:h2:${DatabaseHome}"
  ...
}

今回のバージョンではこの他にもバグ修正、細かい改善、内部ライブラリの更新などを行っています。詳細についてはIssueの一覧をご覧ください。

レバテックLABさんでソフトウェアエンジニアのキャリアに関する記事の後編が公開されました

levtech.jp

前編では主にトレジャーデータに転職するまでの経緯について書かせていただいたのですが、後編では現職でのロールの変化やアラフィフの辛みなどについて書かせていただきました。

現職では仕事柄もともと調査やデバッグ作業が多く、コードはそんなに書いていなかったのですが、ロールの変化もあり、最近はまとまった量のコードを書く機会はかなり稀になってきてしまいました。これからはAIによってコードを書く機会はますます減っていきそうですが、そうなるとひたすら面倒な作業だけが残りそうで、ソフトウェアエンジニアという職業も将来的にちょっとどうなのかなと思うところもありますねw

ちなみに記事の中でも紹介させていただいたオライリーの「スタッフエンジニアの道」はこの手のエンジニアキャリア本の中では珍しくポジショントーク的な感じではなく、めちゃくちゃ現実的な内容でよかったです。

takezoe.hatenablog.com

しかし加齢により肩や腰が痛くて長時間作業するのがしんどいのもあるのですが、それは体を鍛えればなんとかなるとして、目が一番ヤバい気がしますね。もうMacBookの最高解像度だと作業できないし、外部ディスプレイで作業していてもターミナルとかエディタで細かい文字が見えなくて結構危機を感じます。ゲームやっててもすぐに目がしょぼしょぼしてくるし…。こればかりは運動や気合いではどうにもならないので皆さん目には気をつけましょう。

世の中の状況を鑑みるにまだあと20年以上働かないといけなそうですが、果たして私の体は引退まで持つのでしょうか…w

Sonatype OSSRHからCentral Portalへの移行

OSSJavaライブラリのMaven Central Repositoryへの公開には長らくSonatypeのOSSRHが利用されてきましたが、Central Portalという新しいサービスへの移行期限が6月末に迫ってきたので重い腰を上げて移行を行いました。

基本的には以下のドキュメントのSelf-Service Migrationの手順で説明されている通り、Central PortalにOSSRHのID/PassでログインするとOSSRHで管理されているネームスペースの一覧が表示されるのでMigrateボタンをぽちぽちクリックするだけで移行できました。

central.sonatype.org

あとはビルドツール側の設定をCentral Portal用に変更するのですが、ScalaのsbtはすでにCentral Portalに対応しており、公式ドキュメントで設定方法が解説されていますのでそれに従って設定すればOKです。Mavenについてはまだ試していないのですが、Sonatypeが提供するcentral-publishing-maven-pluginというプラグインを使えばいいようです。

少し詰まったのはSNAPSHOTをデプロイするにはCentral Portal側でネームスペース毎に明示的に有効化しておく必要があるという点です。最初SNAPSHOTバージョンでpublishできるか試していたのですが403が返ってきたのでsbtの設定を間違えてるのかと思ったのですが、Central Portal側でSNAPSHOTを有効化したらpublishできるようになりました。

central.sonatype.org

とりあえずよく触るScalaプロジェクトだけ設定を変更したのですが、残りはそれぞれ次回リリースするタイミングで少しずつ移行していこうと思います。

Trino 476リリースノート日本語訳

前回のリリースから間が空いたので変更点も多くなっています。474で入ったGracefulシャットダウンの問題の修正が含まれていますが、他にも色々変わっているのでアップグレードの際はきちんと検証を行いたいところです。

原文はこちら: https://trino.io/docs/current/release/release-476.html

General

  • geometry型の比較をサポート (#25225)
  • 破壊的変更: Trinoの実行にJDK 24が必要に (#23498)
  • query.max-memory-per-nodememory.heap-headroom-per-nodeを最大ヒープサイズに対する割合で設定可能に (#25843)
  • リソースグループのバックエンドにDBを使用している場合にresource-groups.db-migrations-enabledで自動マイグレーションを無効可能に (#25451)
  • リソースグループでメモリのソフトリミットをオプショナルに変更 (#25916)
  • tar.gzアーカイブとDockerコンテナからExample HTTP Connectorを削除 (#25128)
  • 高負荷時に稀にサーバーがハングするバグを修正(Jettyのバグのよう) (#25816)
  • Trino 474で入ったGracefulシャットダウンが正常に動作しない問題を修正 (#25690)
  • fault_tolerant_execution_runtime_adaptive_partitioning_enabledtrueに設定されている場合に発生する可能性のあるクエリエラーを修正 (#25870)
  • rowのキャストを含むクエリで発生するエラーを修正 (#25864)
  • ダイナミックカタログのカタログ名に大文字小文字が混在している場合に発生するクエリエラーを修正 (#25701)
  • エクスチェンジにS3ファイルシステムを使用している場合のS3オペレーションのリトライロジックを改善 (#25908)
  • クライアントから提供されたセッションカタログ名またはスキーマ名に大文字が含まれている場合のクエリエラーを修正 (#25903)

BigQuery connector

  • 破壊的変更: Snowflakeコネクタの利用にJVMオプション--sun-misc-unsafe-memory-access=allowの指定が必要に (#25669)

ClickHouse connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Delta Lake connector

  • FOR TIMESTAMP AS OF句をサポート (#21024)
  • AzureFSでUser-assigned Managed Identity認証をサポート (#23447)
  • S3ネイティブファイルシステムでS3リクエストの認証時に使用するAWS署名プロトコルを選択可能に (#25820)
  • S3互換ストレージシステムとの互換性を改善 (#25791)
  • クエリプランニングのパフォーマンスを改善 (#24570)
  • テーブルの読み取りパフォーマンスを改善(delta.max-split-sizeの初期値を64MBから126MBに変更) (#25826)
  • 巨大なINSERT時に発生するS3のスロットリングを改善(s3.streaming.part-sizeのデフォルト値を16MBから32MBに変更) (#25781)
  • optimizeプロシージャ実行後にvariant型カラムの読み取りに失敗する問題を修正 (#25666)
  • Parquetファイルに整数値で保存されているdateカラムの読み取り時に発生するクエリエラーを修正 (#25667)
  • StorageDescriptorなしのGlueビューをクエリすると発生するエラーを修正 (#25894)
  • 一部のカラムが統計情報をサポートしていない場合に全てのカラムの統計情報の計算がスキップされてしまう問題を修正 (#24487)

Druid connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

DuckDB connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Exasol connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Google Sheets connector

  • gsheets.delegated-user-emailコンフィグレーションプロパティでDelegated User Credentialsを使用した認証をサポート (#25746)

Hive connector

  • hive.file-status-cache.excluded-tablesコンフィグレーションプロパティで、ディレクトリ一覧のキャッシュから特定のテーブルを除外可能に (#25715)
  • S3ネイティブファイルシステムでS3リクエストの認証時に使用するAWS署名プロトコルを選択可能に (#25820)
  • S3互換ストレージシステムとの互換性を改善 (#25791)
  • AzureFSでUser-assigned Managed Identity認証をサポート (#23447)
  • タイムスタンプ値を解析する際のOpenX JSONリーダーの堅牢性を改善(以前は日付と時刻の間にスペース区切り文字が含まれるタイムスタンプのみがサポートされていた) (#25792)
  • ディレクトリ一覧のキャッシュの動作の最適化によりメタデータの読み取りパフォーマンスを改善 (#25749)
  • 行数が多いORCファイルの読み取り時に発生するHIVE_CANNOT_OPEN_SPLITエラーを修正 (#25634)
  • 巨大なINSERT時に発生するS3のスロットリングを改善(s3.streaming.part-sizeのデフォルト値を16MBから32MBに変更) (#25781)
  • Parquetファイルに整数値で保存されているdateカラムの読み取り時に発生するクエリエラーを修正 (#25667)
  • StorageDescriptorなしのGlueビューをクエリすると発生するエラーを修正 (#25894)

Hudi connector

  • AzureFSでUser-assigned Managed Identity認証をサポート (#23447)
  • Parquetファイルに整数値で保存されているdateカラムの読み取り時に発生するクエリエラーを修正 (#25667)

Iceberg connector

  • AzureFSでUser-assigned Managed Identity認証をサポート (#23447)
  • S3ネイティブファイルシステムでS3リクエストの認証時に使用するAWS署名プロトコルを選択可能に (#25820)
  • $all_manifestsメタデータテーブルにadded_delete_files_countexisting_delete_files_countdeleted_delete_files_countreference_snapshot_idカラムを追加 (#25867)
  • S3互換ストレージシステムとの互換性を改善 (#25791)
  • EXPLAIN ANALYZE VERBOSEの出力にsplit生成に関するより詳細なメトリクスを追加 (#25770)
  • iceberg.max-partitions-per-writerコンフィグレーションプロパティに対応するmax_partitions_per_writerカタログセッションプロパティを追加 (#25662)
  • マテリアライズドビューを読み取る際のパフォーマンスを改善 (#24734)
  • iceberg.bucket-executionが有効な場合にまれに発生するエラーを修正 (#25125)
  • 行数が多いORCファイルの読み取り時に発生するHIVE_CANNOT_OPEN_SPLITエラーを修正 (#25634)
  • 巨大なINSERT時に発生するS3のスロットリングを改善(s3.streaming.part-sizeのデフォルト値を16MBから32MBに変更) (#25781)
  • 多数のマニフェストファイルを持つテーブルへの同時書き込みによるクエリタイムアウトエラーを修正 (#25667)
  • StorageDescriptorなしのGlueビューをクエリすると発生するエラーを修正 (#25894)

Ignite connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Kafka event Listener

  • 破壊的変更: kafka-event-listener.client-config-overridesコンフィグレーションプロパティを削除。Kafkaクライアントをイベントリスナ用に設定する場合、別のファイルに設定を記述し、kafka-event-listener.config.resourcesでそのファイルのパスを指定すること (#25553)

MariaDB connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Memory connector

  • テーブルからの行の削除がエラーになってしまうことがある問題を修正 (#25670)

MySQL connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Oracle connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)
  • カラム一覧の取得のパフォーマンスを改善 (#25231)

PostgreSQL connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Redshift connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

SingleStore connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Snowflake connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)
  • 破壊的変更: Snowflakeコネクタの利用にJVMオプション--sun-misc-unsafe-memory-access=allowの指定が必要に (#25669)

SQL Server connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

Vertica connector

  • フェデレーションクエリのセレクティブジョインのパフォーマンスを改善 (#25123)

SPI

  • Block.getSizeInBytes()がブロックのコンパクション後のサイズではなく展開後のデータサイズの推定値を返すようになった (#25256)

MSX-BASICでゲームを作ろう 懐かしくて新しいMSXで大人になった今ならわかる

まさか令和の時代にMSX-BASICの本が出るとは…。

作るゲームは基本的な部分だけだったり、掲載されているコードも抜粋だったりということもありますが、テキストベースのものからスプライトを動かしたり効果音を鳴らしたり、限られたページ数で様々なタイプのゲームを一応動く状態まで作るところまで解説されています。解説も分かりやすいですし、題材のチョイスや抜粋されているコードも的確で、往年の少年BASICプログラマの皆さんはコードを見ているだけでも楽しめるのではないかと思います。

MSXエミュレーターというとMSXPLAYerが有名ですが、最近(?)はWebMSXというWebブラウザで動くものもあるようなので、こちらで気軽にBASICプログラミングを楽しんでみるのもよいかもしれません。MSX0 Stackも欲しくなりますねぇ。

www.amusement-center.com

あと、MSX Magazine永久保存版は2までは買っていたのですが、2005年に3も出ていたのを初めて知りました。今では入手困難になっているようなので、当時買っておかなかったことが悔やまれます。

対象読者がピンポイントすぎる気がしなくもないですがw 同世代のプログラマの方だと子供の頃BASICで遊んでいたという人は多いのではないかと思いますし、刺さる人にはめちゃくちゃ刺さるはず(刺さりました)。いや〜、これは懐かしすぎる…。この本を読んでいて、プログラミングって純粋に楽しいものだったなぁということを久しぶりに思い出したような気がします。

サッカー観戦がもっと面白くなる プレミアリーグ熱狂大全

ベンさんの本を買った時に書店で見かけて一緒に買ったのですが、2010-2024年までの各シーズンをビッグ6を中心に振り返るというもので、内容的には割とライトな感じなので長年プレミアを見ていて特定のクラブを応援し続けているような方には物足りないかもしれませんが、最近プレミアリーグを見始めたという方にはちょうど良さそうな感じです。

個人的には各シーズンのスタッツやリーグ全体的な振り返りなどもあると資料的にも使えてよかったかも、とも思うのですが(フォーメーションも優勝クラブしか掲載されていないし)、そういう趣旨の本ではないのでしょう。また、この期間はビッグ6の存在感が大きかった時期でしたが、最近のプレミアリーグは競争力が上がりすぎてビッグクラブが下位に低迷したり、従来の中位クラブが上位に進出したりとパワーバランスがかなり不安定になっているのでもしかすると次の10年はこのようなまとめ方はできなくなるかもしれないと思ったりしました。

しかし2010年というとかなり前のような気がしますが読んでいるとそうでもないですね。後半の2016年以降になるともうつい最近という感じで歳を感じます…。

プレミアリーグ全史 1

ベン・メイブリーさんによるプレミアリーグの歴史本が3分冊で出るとのことで、早速第1巻を購入して読んでみたのですがこれはまさに歴史書ですね。普段プレミア中継の解説でもベンさんは豊富な知識をわかりやすく説明してくれるのですが、それがそのまま本になった感じです。

1巻の前半はプレミアリーグ設立前の話でプレミアリーグ設立の経緯やテレビ局との関係など知らなかったことばかりですが、中盤から後半に入ってくるとダルグリッシュファーガソンカントナやシアラーなど徐々に馴染みのある名前も出てきます。サッカーに関する話だけでなく当時のイギリスの社会情勢や、古い時代の話でもちょいちょい関連する最近のエピソードなどにも触れられていて興味深く読み進めることができました。

2巻はプレミアリーグ開幕から2010年頃、3巻はそれから現代までがカバーされるようです。2巻は少し間が空いて7月に発売の予定のようですが、楽しみに待ちたいと思います。