`fluent-plugin-bigquery` のパラメータ `request_timeout_sec` 、未設定の場合はどうなるの?


要旨

fluent-plugin-bigqueryREADME を読んでいると、 request_timeout_sec のデフォルト値が nil になっている(その下の request_open_timeout_sec には 60 が設定されているのに)のが気になりました。

結論としては、 request_timeout_sec は最終的に httpclientsend_timeout 及び receive_timeout パラメータとして利用され、未設定の場合は そこで指定されているデフォルト値である send_timeout = 120, receive_timeout = 60 が採用されるようです。

Read more ⟶

Spring BootのRestTemplateで text/plain;Windows-31J なRESTレスポンスを処理する


要旨

JSONを返してくるのだけれどMIME typeが text/plain;charset=Windows-31J なレスポンスを、RestTemplateで扱いたい。

@GetMapping(produces = "text/plain;charset=Windows-31J")
public String response() {
    return "{\"text\": \"こんにちは世界\" }";
}
Read more ⟶

reqwest使おうとしたけどよくわからん


はじめに

年の瀬にスクレイピングしたくなって Rust 勉強し始めたけれど、直前に reqwest ライブラリに更新が入ったみたいでコピペコーディングが阻まれた。

知っとかないといけなかったこと

  • 今回の更新 reqwest 0.10.0 で async/await がデフォルトになった(ので従来のサンプルコードは動かなくなった)。
  • Cargo には feature flag(feature toggle) 機能があって、reqwest やら(オフィシャルサンプルで利用している)tokio やらもこれを利用している。
  • tokioを用いる必要があった。
    • 自分が見ていた(古い)サンプルではfuturesfutures::executor::block_onを利用していたので当初それをコピペったのだが次のエラーが出た: ’not currently running on the Tokio runtime.',
    • async/await 構文が標準に取り込まれた、ということは非同期ランタイムを別のものにすげ替えることが可能、みたいなイメージを持っていたのだが、そうではなさそう。
    • おそらく自転車本の補遺が言うところの「非同期エコシステム」が関係する話題。

サンプルを動かすには

https://github.com/seanmonstar/reqwest

Read more ⟶

Rustでライブラリを作成する


はじめに

他の言語で言うところの"ライブラリ"は、Rustでは "ライブラリクレート"(library crate) と呼ぶようです。

Read more ⟶

RestTemplateBuilderに関する覚書


RestTemplateBuilder

  • RestTemplate は Spring Framework(spring-web)だけれども RestTemplateBuilder は Spring Boot。
  • Java の世界の なんちゃらBuilder (StringBuilderとか Lombok のBuilderアノテーションとか、ざっくり総称で Effective Java 版 Builder とでも呼ぶべきか)の使い方は、「まず builder のインスタンスを生成します」から始まるので RestTempalteBuilder もそれだと思っていた。
    • つまり、このクラスインスタンスは Spring Boot のデフォルト状態でインジェクション可能だけれども、このインジェクションされたRestTempalteBuilderインスタンスのスコープは(Spring のデフォルトであるところの)singleton-scope ではない と思っていた。
      • だってbuilderインスタンスが singleton-scope なら、あるbeanbuilderに設定したものが他所のbeanにも波及しちゃうじゃない。
  • けどResttemplateAutoConfigurationの Bean 定義部分どう見ても singleton-scope にしか見えない。何か自分の知らない記法(あるいは暗黙的解釈)がなにかまだあるのか? また 何か Spring マジックが発動しているのか…?

と思ってたけど、RestTemplateBuilderの状態設定メソッド(このへん)見て気づいた、 設定メソッドの中で new RestTemplateBuilder() やっとるんかーい!

Read more ⟶

https://hatena.ne.jp/ にアクセスできてるとお思いで?


はじめに: 試した環境

Windows10 の現時点での最新安定版 Google Chrome および Firefox を用いました。

  • Google Chrome 78.0.3904.108
  • Firefox 70.0.1

また実行に際しては、キャッシュ等の影響を避けるため、Chrome ではゲストモード、Firefox では今回新規作成したプロファイルで確認しました。

Read more ⟶

Spring Boot のプロパティではkebab-formatが推奨されている


Relaxed Binding 2.0 という仕組みにより

spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql

いずれの形式でも正しくバインドできる。
が、公式ドキュメントからは一番上の database-platform が推奨されているように読み取れる。


Relaxed binding - Spring Boot Configuration Binding:

Read more ⟶

native-imageコマンドを実行するために行ったWindows10 への GraalVM インストールがエキサイティングな件


悪い意味で。
なお試した時点での GraalVM 最新リリースバージョンは 19.2.1でした。

GraalVM インストール & 実行

GraalVM のインストール方法はいくつかあるのでお好みで。例えば:

(なお、SDKMAN!は今回試していないのでちゃんと動くかは知らない)

Read more ⟶

MockMvc でURLエンコード済みのpathを渡したいときは new URI(...) を引数にする


OAuth2.0 の redirect_uri をゴニョった実装をテストしたいときにハマった。

mockMvc.perform(get(new URI("/line/oauth/authorize?redirece_uri=https%3A%2F%2Fexample.com")

ってやらないと二重にエンコードされてしまう。

参考

Read more ⟶

Intel iGPU環境でのAmethyst 開発環境セットアップ


TL;DR

Ubuntu18.04, Coffee Lake iGPU で vulkan での実行を可能にするには

  • mesa-vulkan-drivers パッケージインストール

  • /etc/X11/xorg.conf.d/20-intel.conf で DRI3 有効化

の2点が必要。

(おそらく実際には、実行に libvulkan1 、及び開発には加えて libvulkan-dev も必要と思われるが、最初からインストールされていた)

Read more ⟶

Cargo.lock をバージョン管理するや否や


cargo new --bin したパッケージに対して、たまたまデフォルで生成される .gitignore を用いずに https://gitignore.io/ で生成してものを用いていたのですが、 Cargo.lock ファイルの扱いが異なるように思われ、あれ?と思って見直してみました。

Read more ⟶

電子キーボードを買いました


経緯

プログラミングとかビデオゲームとか、かなり目を酷使することばかりやっているので、そうではない趣味を持とうと考えた末、何か楽器を入門することにしました。

Read more ⟶

LINE Messaging API を試してみる


準備

Spring Boot セットアップ

https://start.spring.io/ でテンプレートを作成して次の依存関係を追加します。

<dependency>
    <groupId>com.linecorp.bot</groupId>
    <artifactId>line-bot-spring-boot</artifactId>
    <version>2.7.0</version>
</dependency>

Heroku セットアップ

今回は linebotbeta というアプリケーション名にしました。

Read more ⟶