`fluent-plugin-bigquery` のパラメータ `request_timeout_sec` 、未設定の場合はどうなるの?
要旨
fluent-plugin-bigquery の README を読んでいると、 request_timeout_sec のデフォルト値が nil になっている(その下の request_open_timeout_sec には 60 が設定されているのに)のが気になりました。
結論としては、 request_timeout_sec は最終的に httpclient の send_timeout 及び receive_timeout パラメータとして利用され、未設定の場合は そこで指定されているデフォルト値である send_timeout = 120, receive_timeout = 60 が採用されるようです。
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\": \"こんにちは世界\" }";
}
reqwest使おうとしたけどよくわからん
はじめに
年の瀬にスクレイピングしたくなって Rust 勉強し始めたけれど、直前に reqwest ライブラリに更新が入ったみたいでコピペコーディングが阻まれた。
知っとかないといけなかったこと
- 今回の更新 reqwest 0.10.0 で async/await がデフォルトになった(ので従来のサンプルコードは動かなくなった)。
- Cargo には feature flag(feature toggle) 機能があって、reqwest やら(オフィシャルサンプルで利用している)tokio やらもこれを利用している。
- (async/await を使わない、従来の)blocking 版をどうやって使うのか全然わからなかったけれど、features で明示的に指定する必要があった。
- オフィシャルサンプルを動かすにしてもこれを知っておかないといけなかった。
- tokioを用いる必要があった。
サンプルを動かすには
…Rustでライブラリを作成する
はじめに
他の言語で言うところの"ライブラリ"は、Rustでは "ライブラリクレート"(library crate) と呼ぶようです。
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 なら、あるbeanでbuilderに設定したものが他所のbeanにも波及しちゃうじゃない。
- だって
- つまり、このクラスインスタンスは Spring Boot のデフォルト状態でインジェクション可能だけれども、このインジェクションされた
- けど
ResttemplateAutoConfigurationの Bean 定義部分どう見ても singleton-scope にしか見えない。何か自分の知らない記法(あるいは暗黙的解釈)がなにかまだあるのか? また 何か Spring マジックが発動しているのか…?
と思ってたけど、RestTemplateBuilderの状態設定メソッド(このへん)見て気づいた、 設定メソッドの中で new RestTemplateBuilder() やっとるんかーい!
https://hatena.ne.jp/ にアクセスできてるとお思いで?
はじめに: 試した環境
Windows10 の現時点での最新安定版 Google Chrome および Firefox を用いました。
- Google Chrome 78.0.3904.108
- Firefox 70.0.1
また実行に際しては、キャッシュ等の影響を避けるため、Chrome ではゲストモード、Firefox では今回新規作成したプロファイルで確認しました。
…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:
…native-imageコマンドを実行するために行ったWindows10 への GraalVM インストールがエキサイティングな件
悪い意味で。
なお試した時点での GraalVM 最新リリースバージョンは 19.2.1でした。
GraalVM インストール & 実行
GraalVM のインストール方法はいくつかあるのでお好みで。例えば:
(なお、SDKMAN!は今回試していないのでちゃんと動くかは知らない)
…MockMvc でURLエンコード済みのpathを渡したいときは new URI(...) を引数にする
OAuth2.0 の redirect_uri をゴニョった実装をテストしたいときにハマった。
mockMvc.perform(get(new URI("/line/oauth/authorize?redirece_uri=https%3A%2F%2Fexample.com")
ってやらないと二重にエンコードされてしまう。
参考
…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 も必要と思われるが、最初からインストールされていた)
Cargo.lock をバージョン管理するや否や
cargo new --bin したパッケージに対して、たまたまデフォルで生成される .gitignore を用いずに https://gitignore.io/ で生成してものを用いていたのですが、 Cargo.lock ファイルの扱いが異なるように思われ、あれ?と思って見直してみました。
電子キーボードを買いました
経緯
プログラミングとかビデオゲームとか、かなり目を酷使することばかりやっているので、そうではない趣味を持とうと考えた末、何か楽器を入門することにしました。
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 というアプリケーション名にしました。