DBeaverからRenderのPostgreSQLに接続

ちょっと悩んだのでメモ。

結論

接続情報のURLは「PostgreSQL JDBCのURLの形式に合わせて、外部接続用のURLをいじりましょう」ということ(だと思った)。
素直なコピペじゃダメらしいですね。

経緯

ちょっと遊んでみようと思って、RenderのフリープランでPostgreSQLサーバを立てた。
クライアントソフトはDBeaverがお気に入りなので、それを使って操作が出来るようにしておこうと思った。

しかしPostgreSQLの名前くらいしか知らなかった私は、ただ接続するだけのところで躓いたのであった。

やったこと

RenderのPostgreSQLに外部から接続する場合、External Database URLでつなぐ必要があるらしい。 このURLの形式は、Renderのドキュメントによるとpostgres://USER:PASSWORD@EXTERNAL_HOST:PORT/DATABASEとのこと。

素直なので、接続設定のところにそのままコピペ。

すると、JDBCのURLが正しくないと怒られた(画像は例)

エラーメッセージで素直に検索をすると、PostgreSQLプログラマガイドが出てきたので、そこの記述に従う。 www.postgresql.jp

JDBC を使用する場合、データベースは URL(Uniform Resource Locator)で表されます。Postgres では、これは下の形式のどれか1つになります。
- jdbc:postgresql:database
- jdbc:postgresql://host/database
- jdbc:postgresql://host:port/database

この形式に合わせて、先ほどコピペしていたURLを加工する。

jdbc:postgresql://EXTERNAL_HOST:PORT/DATABASE

ユーザー名とパスワードがURLから消えたものの、すぐ下に入力する欄があるので多分問題なし。

入力したら、テスト接続を押して

問題ないみたいなので「OK」


無事設定完了。

寮食bot不具合:GASトリガー無限発火編

Google Apps ScriptとGoogleスプレッドシートを使って、毎日の献立をツイートするBotを細々と運用中。

2023年第一稼働日の1/10に、予定していたツイートが投稿されないという問題が発生。 色々調べた結果、以下が引き金となったことを確認した。

  1. Googleスプレッドシートにおいて、MM/dd形式の日付は暗黙的にその年のyyyy/MM/ddとなる
  2. トリガーに過去日が設定されていた場合、登録後すぐに実行される
  3. ツイートの実行有無にかかわらず、トリガーを再登録するプログラム

上記1.を解消させることで、とりあえず想定していた動作には戻った。
が、年は毎年明けるので、急ぎではないものの、以下恒久対応も考えておく。

  1. 献立日付欄の書式を、明示的に「yyyy/MM/dd」に変更する(執筆時点で済)
  2. 過去日でトリガーを作らないように制御する
    何らかのエラーやメッセージなど、自分あてにDMを送って気づきやすくするのも考えておく
  3. トリガーの実行時に、同名でのトリガーを削除する処理を追加する
    「トリガーが多すぎます」エラーの回避策。
    無限発火編が始まると止まらないので、慎重に考慮する。

== 以後は詳細 ==

MM/dd形式のルールによるもの

GoogleスプレッドシートExcelでも)のルールとして、MM/dd等で日付を入力した場合、現在の年の日付が自動でセットされる(周知のもの)。

献立表を登録する際、2022年12月のことだが、「1/10」と単純に登録してしまっていたものと考えられる。 その後の日付は、オートフィルでパパパっと作ってしまったため、「2022/01/10」に続く日付が入力されていた。

日付欄の書式が「短い日付」となっていて、気づきにくくなっていたため、書式を「yyyy/MM/dd」に指定することで、間違いに気づきやすくなるよう対応した。

トリガーに過去日が設定されていた場合、登録後すぐに実行される

Google Apps Scriptのトリガーの仕様だと思うが、時間指定型で過去日を指定した場合、登録された直後に実行されてしまう。

この仕様と、後述するプログラムの不具合によって、連続してトリガーが実行されるという結果になったのだと考えられる。

プログラムで「過去日の場合は設定しないようにする」など、過去日の場合を考慮した処理にする必要がある。

プログラムの不具合

不具合、というよりは、考慮不足?

献立を投稿するときのプログラムのフローはだいたいこんな感じになっている。

献立投稿機能のフロー

読み込んだ献立が過去日だった場合、献立ツイートをせずに、過去日で新しいトリガーをセットする、という流れになってしまっている。

このフローと過去日の設定にしていた結果、今回の現象が発生。GASの実行ログは下図のようになってしまっていた。

GAS 実行ログ

ちなみに、トリガーが一定数以上あると「トリガーの数が多すぎる。いい加減にしろ」と怒られるので、どこかしらでは止められる。

トリガーが多すぎる場合のエラー

Exception: このスクリプトに含まれているトリガーの数が多すぎます。さらに追加するには、スクリプトからトリガーを削除する必要があります。

JSF f:convertNumberの丸め処理

`f:convertnumber`は`pattern`属性で指定したフォーマットに従って数値を変換してくれるコンバータ。

value=127, pattern="0000" => 0127

ここでvalueに小数が含まれている場合、f:convertNumberは「偶数丸め(HALF_EVEN)」をする模様。

value=12.49, pattern="0000" => 0012
value=12.50, pattern="0000" => 0012
value=12.51, pattern="0000" => 0013

今回のケースでは「四捨五入」をしてほしかったが、標準のコンバータでは対応不可能らしい。
どうしてもコンバータで変換をかけたい場合は、カスタムコンバータを用意して対応するしかなさそうな印象。


今回はカスタムコンバータを作る時間は無く、そこまでやるような状況でもなかったのもあり、Bean/Valueでよしなに対応した。

在宅勤務の利点

在宅勤務における個人的な一番の利点は、雑音のコントロールが自在にできることだと思う。

周囲がうるさい時は、密閉型イヤホンをしてホワイトノイズでも流していれば、聞きたくない音は耳に入らなくなる。
環境音が欲しければ、YouTubeを使うことで自分の気分と状況に合わせた程度のいい雑音が流せる。

上司も同僚もおらず、チャットが基本のコミュニケーション方法になるから、 同僚の独り言に対して反応して「独り言か」と思うことはなくなるし、 UDP*1 よろしく突然机の向こうから話しかけられて「え、今のは私に話しかけたの? 何?」となることもない。
さらに言えば、上司が先輩や同僚に対して言う小言*2なんかも、聞こえないし、聞かなくてよい。

自分の作業音環境を自由に操れるようになる。これこそが在宅勤務の一番の利点だと私は思う。

なお、一人暮らし独身男性の場合であることを最後に記しておく。

*1:User Datagram Protocol、のつもり。相手との会話のコネクションが確立しないまま話が始まり、そのまま続いていく様子を表したかった。

*2:全く関係がないのに、自分が怒られてるように感じてしまう。

冷凍豚肉で超雑に作る豚肉の生姜焼き

お昼休みにいつも作っているメニューの一つ。
備忘録として。

材料(1人分)

  • 冷凍豚小間 100gくらい
    普通の豚肉でも可。その日の気分で食べたいだけ入れてるので、分量は適当。
  • 玉ねぎ 1/4個
  • 調味料
    • 砂糖 小さじ1程度(※お好み)
    • みりん 大さじ1.5
    • 醤油 大さじ1
  • ショウガ 適量
    みじん切り、またはチューブのおろしショウガを使用する。
    個人の好みがあるので、ここも好きな量入れるとよい。

※砂糖を入れてもいいけれど、焦げやすくなるため注意が必要。

作り方

  1. 玉ねぎを薄切り(好み)にする
    くし切りなどでも可。各々のイメージで切り刻む。
  2. フライパンに冷凍豚肉と玉ねぎを入れ、塩こしょうを振って炒める
    普通の豚肉の場合はサラダ油など、環境に合わせて適宜追加する。
    evercookのフライパンは超優秀なので、油がいらない。
  3. 肉の色が変わったら調味料とショウガを入れる
    辛くないものから入れてなじませるといいらしい。醤油が最後。
  4. 玉ねぎがしんなりするまで炒める
    玉ねぎのしんなり度はお好みで。
  5. 好みの付け合わせとともにお皿に盛り付けて完成
    キャベツの千切りとかをお好みで。特に画像とかはない。

VSCodeのテーマ「Default High Contrast」を自分好みに変更

職場でこっそり使ってるVSCodeの外見を、昼休みの時間を使って自分好みに変更してみた。

f:id:hirorisoon:20201024113626p:plain

VSCode標準のカラーテーマである「Default High Contrast」をもとに、水色の線の部分を緑色に変更して全体的に落ち着いた感じに。
設定の順番は試行錯誤準…。

    "workbench.colorTheme": "Default High Contrast",
    "workbench.colorCustomizations": {
        "tab.border": "#242",
        "titleBar.border": "#242",
        "focusBorder": "#6c6",
        "sideBar.border": "#242",
        "statusBar.border": "#242",
        "editorGroup.border": "#242",
        "panel.border": "#242",
        "contrastBorder": "#242",
        "dropdown.border": "#242",
        "menu.border": "#242",
        "activityBar.border": "#242",
        "editor.lineHighlightBorder": "#6c6",
        "notificationCenter.border": "#020",
        "notificationCenterHeader.background": "#010",
        "notifications.border": "#020",
        "notifications.background": "#000",
        "textLink.foreground": "#6a6",
        "textLink.activeForeground": "#9c9",
    },

最近Java用に構文色をいじった時に「Developer: Inspect Editor Tokens and Scopes」をつかって頑張ったのだけれど、この設定にも同じようなものがあったりするんだろうかと。
まあいじってしまった後だから今更なんだけれども

Google検索キーボードショートカット拡張機能で変な現象

仕事中に調べ物をしていて、Googleでちょっと不思議な現象が発生した。

検索結果の一番下にあるページ割の部分

f:id:hirorisoon:20201017112734p:plain

このGooooooogleのoの字をクリックすると、通常なら2ページ目3ページ目と画面が遷移するはずなんだけれども、クリックすると

f:id:hirorisoon:20201017112741p:plain

このようにoが矢印を避けるように動いてしまう。
この場合、画面の遷移も起こらない。

Edgeや家のブラウザではこんなことは起こらないんだけどなあと、いろいろ見ていたけれど、ふと画面上のある印に思い当たる節が。
この矢印、Chrome拡張機能で以前仕事中に「検索結果を流し見るのにマウスわざわざポチポチするのも面倒だな」と思って導入した拡張機能で出てくるもの。

f:id:hirorisoon:20201017112812p:plain

この拡張機能

chrome.google.com

普段はこのように検索結果の横に出てくる様になっているし、有効にしている限りは出てくる。
この拡張機能を使うと検索バーに戻ったり、ページの送り戻しが楽になるため結構助かってはいたんだけれど、最近はあまり活用できていなくて、存在を忘れてしまってる程だった。

試しにこの拡張機能を無効にしてみると、あっさり問題解決。
Googleがハロウィンに合わせて悪戯し掛けてきてんのかなと思ったけど、全然そんなことはなかった。

この拡張機能GitHubがあったため「これは不具合として報告とか入れてみたほうがいいんだろうか」と思ったりはしたものの「英語出来ないしまあいいかな」と思ってしまった。どうしようかな。