今日は家族で大竹の「階杉」に出かけ、嫁さんは白髪ネギラーメンを、娘は汁なし担々麺を「辛さ5」で注文。

俺はいつものようにまずはビールと唐揚げ5個を注文した上で、汁なし担々麺を「ヨガインフェルノ」(1番辛いやつ)で注文した。

半年ぶりのヨガインフェルノである。

20260531_kaisugi1.jpeg 20260531_kaisugi2.jpeg 20260531_kaisugi3.jpeg

辛い・・・辛すぎる・・・失敗であった(^^; ここまで辛いと食事を楽しめない(^^;;; 「俺はこんなに辛いものでも平気で食べられるぜ」って自慢したいアホ以外、辛さは5までで止めておくのが良いと思う(笑)

試しに俺のヨガインフェルノを二口、三口と食べた娘は唇が痛いと悶絶していた(笑)

そして俺も、食後に温かいコーヒーを飲んだら唇が痛いは、18時頃に横川の仕事部屋に戻ったんだけどなんか気がついたら時計の針は22時を回っていた。
魂が抜けてしまっていたようだ・・・辛いものは脳を破壊するしな(笑)

最後に「追い飯」を残った汁に混ぜてフィニッシュするんだけど、ほんま、最後の最後まで辛かった・・・

半年前のブログで「しっかり夜中に腹が痛くなって目が覚めた」と書かれている。今夜、俺は大丈夫なのだろうか?(^^;;;
20260530_spring1.jpg

とりあえず、

Spring Boot DevTools
Lombok
Spring Batch
Spring Data JPA
PostgreSQL Driver

この辺を使用すればバッチ組めるんかな?
Web 関係のものが含まれていると勝手に tomcat が起動したりするんで、ちゃんと非使用にしておこう。

で、DB関係は Spring Data JPA を設定すれば(JPA で DB 操作を書くなら?)、Spring Data JDBC はいらんのよね?

今やってる案件は JDBC を使って、ごりごり生の SQL を書いてるんだけど、勉強のために家では JPA 使ってみようかなっと。
昨夜は高校の同級生N◎と本川町の「鉄華」へ。鉄板焼屋なのに日本酒や焼酎の品揃えが充実している店だ。

20260528_tekka1.jpeg
早速俺はこの日のおすすめであった「賀茂金秀」を注文したのだが、店の女の人が「それよりこっちはどうですか?」と勧めてくれたのが「楽器正宗 別撰 垂れ口」であった。本醸造酒なんだけど、これが上品な甘みのある俺好みのクソ旨酒であった。

これよ、これ。これがなぜかお好み焼屋に酒を飲みに通ってしまう理由なのよ。この酒のチョイスはなんなん。すごいわ。

で、いつものようにお好み焼ではなくセロリの浅漬やら大根のビール漬け、らっきょうなどジジ臭いツマミを突きながら、どうしたら新井カープ監督が辞任してくれるか熱く語り合ったのであった。

ほんま、まだまだ、もう一年やるんか?新井!!
怒りで腹が減ってきたので、そこで海鮮お好み焼を一枚。それをN◎と分け合いながら生ビール。

おお!!今日の20時からゾンビタバコの羽月が会見をするというニュースをゲット(実際は会見ではなく動画配信であった)!!

「頼むからゾンビタバコを吸ってるとき隣に新井監督が居ましたって言うてくれぇ!!」「ついでにオーナーも居ましたって言うてくれぇ!!」

もう、酒を呑んでないとやってられんわ!・・・そんな俺たちが次に呑んだのは新潟の日本酒「〆張鶴 純 純米吟醸酒」。
これ、昭和天皇が愛飲されてた酒なんだって。いや、もちろん「純」を呑んでたわけではなく、多分俺たちは口にできない「〆張鶴 帝 MIKADO」とかそういう特別な酒なんだと思うけど(笑)

20260528_tekka2.jpeg
俺達も〆張鶴を口にすると自然と一人称が「朕」となる。「朕は新井監督の解任を要求するぞよ」「朕はハジメオーナーの引退を要求するぞよ」そんなことを言いながら〆張鶴を呑み、新たに注文したせせりを焼いたのやタコをオリーブオイルで炒めたやつなんかをつつく。うめぇ。
「〆張鶴 純 純米吟醸酒」は辛くてさっぱりした感じ。スーパーなんかで売ってる「上善如水」みたいな味やなあ。ごくごく行ける(笑)。危険な酒や。俺的にはこの前に呑んだ「楽器正宗」のほうが好みだった。

そうしてすっかり気分は天皇になった俺たちであったが、羽月の話はまったく期待外れで、「朕はもうがっかりや」と言いつつ芋焼酎のお湯割りを一杯やって店を出たのであった・・・

いやあ、しかし、「鉄華」はやっぱり良い。
俺がこよなく愛する「どんどん」。このブログにも何度も出てくる焼き肉とラーメンの店だ。所在地は十日市町。

20260512_dondon1.jpeg
40年近く前、この店ができたときからのファンである。なにせ当時の俺は田舎者で、ラーメンといえば国道沿いのドライブインで出てくる醤油ラーメンや、「どさん子ラーメン」の味噌ラーメンくらいしか知らなくて(あ、屋台の塩豚骨の味は知ってたけど(笑))、「どんどん」で初めて食べた「ちゃんとした豚骨ラーメン」の味に一発で虜になったのだ。

ちなみに当時の「どんどん」の焼き飯はクソまずかったけど(笑)。

決して「常連」ではなかったが、それ以来、細く薄くずっと「どんどん」のラーメンとともに生きてきたのである(笑)

20260512_dondon2.jpeg
そんな「どんどん」もすっかり変わった。5/12に土橋で作業をした帰りに久しぶりに「どんどん」に寄ったが、店の中には若い男性3人と以前からいた給仕の中年女性が一人。大将は引退されたのか?すっかり若返っている。店員多すぎっと思ったが、一人は入ったばかりのバイト君のようで色々説明を受けながら作業をしていた。(大事だからもう一度言うが)若返ってるなあ(笑)

しかも、注文がタッチパネル端末になってるやん!!これが一番驚いたわ。時代やな。そして完全に「どんどん」は第2世代に移行したんやな。

まずは「センマイ天」880円也を肴に「生ビール」600円也や!
モツの中ではセンマイが一番好きやね。ザラザラした舌触りと噛み切るときのザクザクという食感。

半分ほど食べたところで、ラーメンを注文。
いつもの「ニンニクラーメン」を注文・・・しようとしたら、なんとトッピングメニューがあるやないの。これはタッチパネル端末による注文ならではやな。
そこで「激辛」というのを追加する。これが 100円で合計1,100円也。

20260512_dondon3.jpeg
いやあ・・・激辛とニンニクは別に食べるべきやったね。「激辛」でニンニクの風味がよくわからん(^^;; これは失敗だった。
「どんどん」のラーメンの味がちゃんと引き継がれているかわからんかった(笑)。

麺が変わってないのはいいね。代替わりしたとき、自分色を出そうとして麺を変えちゃう人もいるみたいだけど、そんな暴挙には及んでいないようで(笑)。(業者製だと思うが)やや細めの中太ストレート麺がええのよ。

そして、次回はちゃんと味のわかるラーメンを注文して「どんどん」の味が引き継がれているかを確認せねば・・・
多分、これだけ長い期間通っているにもかかわらず、余計な話は一切せず、いつもうつむき加減でラーメン食べて速攻帰る俺のことを先代も一切覚えていないであろう、そんな「裏の常連客」として・・・(笑)
いやあ、試しに色々なサイトのソースを参考に Spring Batch を試してたんだけど、一向に実行できない(^^;
ソース上のエラーは全部消しても、実行時に

***************************
APPLICATION FAILED TO START
***************************

みたいなエラーを出して止まってしまう。原因は色々だが、どこが問題なのかわからない・・・
ただ、調べていくうちに、どうも参考にしているサイトの Spring Batch が古いのが問題なのではないか?という気がしてきた。

なので、まさに俺の環境(最新の Spring Batch 6 / Spring Boot 4 環境)で説明がされている IK.AM さんの


というページを参照。

結局、下のようなソース(著作権は IK.AM さんにあると思いますが、一応、若干 import 先が違っていたりするので公開します)でついにバッチ実行ができた。

<BatchTestApplication.java>

package com.netandfield.test;

import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableBatchProcessing
public class BatchTestApplication {

public static void main(String[] args) {
SpringApplication.run(BatchTestApplication.class, args);
}

}

<config/JobConfig.java>

package com.netandfield.test.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.job.Job;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.Step;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.infrastructure.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class JobConfig {

    private final Logger log = LoggerFactory.getLogger(JobConfig.class);

    private final JobRepository jobRepository;

    public JobConfig(JobRepository jobRepository) {
        this.jobRepository = jobRepository;
    }

    @Bean
    @StepScope
    public Tasklet helloTasklet() {
        return (contribution, chunkContext) -> {
            log.info("Hello World!");
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Step step1(Tasklet helloTasklet) {
        return new StepBuilder("step1", jobRepository).tasklet(helloTasklet)
                .build();
    }

    @Bean
    public Job job1(Step step1) {
        return new JobBuilder("job1", jobRepository).start(step1).build();
    }

}

この2ファイルを作成。(俺は Eclipse 上で作成しているので)プロジェクトエクスプローラーで BatchTestApplication.java を選択し、右ボタンメニューから「デバッグ」→「Javaアプリケーション」で実行される。

やっと Eclipse のコンソールに

[BatchTest] [  restartedMain] com.netandfield.test.config.JobConfig    : Hello World!

と表示された。

しかし、Spring Batch 6 を使って説明している Web ページ、少ないなあ・・・
「まずは丸々コピーで参考サイトのソースを持ってきて、それを実行しながらプログラムの勉強をする」スタイルの俺からすると、「プログラムと実行結果を見比べながら記述内容の確認をして言語を理解していく」ことができないので、「動かないことには動くようにできない」というパラドックスにハマってしまったのであった・・・

エロい、いや、偉い人たち、最新環境での参考ページ制作をよろしくお願いします(笑)
別に差別的な意味ではなく、ただ純粋に県営住宅は怖い(^^;。あの高層住宅ね。個人的に「広島の九龍城砦」と思っている(笑)

20260319_sumi1.jpeg
俺は住宅内にインターネット関係の仕事で入って住民と触れ合ったこともあるが、日本語がほぼ通じない外国人の人も多いし(配偶者が日本人?)、父子揃って無職で昼間っから酒飲みながら、父子揃ってやたら携帯でどっかに電話してる謎行動の日本人家族もいた。ベランダに支持政党の幕や旗を掲げてる人も一人や二人じゃないし。日の丸掲げて歩いてたら絶対絡まれそうな雰囲気ビンビンである。
まあ、中に知人なんかがいる人は「全然怖くないわ」とおっしゃるんでしょうが(もちろんまともな人も実際居る)、そうでない人にとってはやはり怖い場所だと思う。

・・・が、そんな場所だからこそ足を踏み入れてみたいのだ(笑)

この巨大な県営住宅の中には飲み屋や飯屋が入った商店街がある。3月の下旬だがいつもより早い時間に仕事が終わった俺は、いつもならまだ仕事をしている 17時を少し回った時間にその商店街を訪ねたのである。暗くなったら怖いもの(笑)。

20260319_sumi2.jpeg
人はほとんど歩いていない。でも、所々に置かれたベンチにはやたら老人が座っていて、じろじろとこちらに遠慮のない視線を向けてくる、「他所者」ってバレちゃってるんだろうなあ(^^;;;

そして俺が訪店したのは「居酒屋 すみ」。L字のカウンターだけの小さな店である。

入口の引き戸を開けて中に入ると、カウンターの中のおばあさんと、一人酒を呑んでいた常連らしきおじいさんが驚いた顔で俺を見る。明らかに「え?誰?誰?お願いです、殺さないで」と思っているのがビンビン伝わってくる怯えを含んだ目だ。「客だよ、客」と思いながら俺は構わず中に入った。二人の老人の緊張感が高まる。さすがに俺も心配になり、「あの、入っても大丈夫ですか?」と訪ねた。そこでおばあさんはハッと我にかえったかのように「ど、どうぞ」とカウンターを手で指し示すのであった。

いやあ、中は小料理屋と場末のスナックを足して二で割ったような感じ。

20260319_sumi3.jpeg
俺は黒板にかかれていた「今日のおすすめ」からアジの刺し身をチョイスした。なんか、常連は我慢して食べるような生臭いのが出てきそうと勝手に思っていたのだが、これがまたサイズも良いし、臭みなんかも全然無い、脂の乗った美味い刺身が出てきたのである。ほっほう。

こいつを「本洲一」の熱燗とやる。「本洲一」は「千福」なんかと同じ「アル中寸前の酔っ払い親父」たちを対象とした大衆酒で、日頃口にすることはまずないんだけど、こういう店で飲む熱燗は美味かったなあ(笑)

というわけで、酒も肴も予想外(失礼)に美味かった(笑)

そして俺は、注文以外には一言も発することなくこの店をあとにしたのであった。女将さんと常連客のホッとした思いを背中に感じながら(笑)
20260518_postgres.jpg

Windows版の psql を立ち上げると、新しいウィンドウが開き、サーバ名やデータベース名などを最初に聞かれるんだが、ここで Client Encoding で UTF8 を指定してしまい、テーブルを作成しようとして失敗し、情報も文字化けという悲しいことになった。

Server [localhost]:
Database [postgres]: rmdb
Port [5432]:
Username [postgres]: runmanager
Client Encoding [SJIS]: UTF8
ユーザー runmanager のパスワード:

psql (18.3)
"help"でヘルプを表示します。

rmdb=> CREATE TABLE t_receive_log (
rmdb(>
rmdb(>  id               int NOT NULL, -- レースID
rmdb(>  log_no           int NOT NULL, -- レース内ログ・ファイル番号
rmdb(>  log_path         varchar(1024) NOT NULL, -- ログファイルのフルパス
rmdb(>  note             varchar(128), -- ログ・ファイルの説明
rmdb(>  cdate            timestamp without time zone,
rmdb(>  udate            timestamp without time zone,
rmdb(>
rmdb(>   CONSTRAINT t_receive_log_pkey PRIMARY KEY (
rmdb(>     id, log_no
rmdb(>   )
rmdb(> );
ERROR:  invalid byte sequence for encoding "UTF8": 0x83
rmdb=> \d
                  リレーション一覧
 \x83X\x83L\x81[\x83} | \x96\xBC\x91O |     \x83^\x83C\x83v     | \x8F\x8A\x97L\x8E
----------------------+---------------+-------------------------+-------------------
 public               | m_race        | \x83e\x81[\x83u\x83\x8B | runmanager
(1 行)


そう。Windows の端末文字コードって、Windows11の今でも Shift_JIS なんやね。
まあ、俺は DB のエンコードのことかと完全に認識が間違ってたんだけど(笑)

というわけで、Client Encoding を Shift_JIS に修正してもう一度 TABLE CREATE を実行。
問題なくテーブルが作成された(まあ、CREATE文の日本語でのコメントを消せば実行できたんだけど(笑)。それは本質的な解じゃないからな(笑))

rmdb=> set client_encoding to SJIS;
SET
rmdb=> CREATE TABLE t_receive_log (
rmdb(>
rmdb(>  id               int NOT NULL, -- レースID
rmdb(>  log_no           int NOT NULL, -- レース内ログ・ファイル番号
rmdb(>  log_path         varchar(1024) NOT NULL, -- ログファイルのフルパス
rmdb(>  note             varchar(128), -- ログ・ファイルの説明
rmdb(>  cdate            timestamp without time zone,
rmdb(>  udate            timestamp without time zone,
rmdb(>
rmdb(>   CONSTRAINT t_receive_log_pkey PRIMARY KEY (
rmdb(>     id, log_no
rmdb(>   )
rmdb(> );
CREATE TABLE
rmdb=> \d
                 リレーション一覧
 スキーマ |     名前      |  タイプ  |   所有者
----------+---------------+----------+------------
 public   | m_race        | テーブル | runmanager
 public   | t_receive_log | テーブル | runmanager
(2 行)

ばっちり。
この間、import とするクラスがどこにあるのかわからないときに「インポートする型の選択」を実行するといい具合に目的のクラスを見つけてきてくれる話を書いたが、もちろん間違いもある(笑)

本当は、
org.springframework.batch.core.job.Job
を import しなければいけないのに
org.springframework.boot.batch.autoconfigure.BatchProperties.Job
を import して「型の不一致: Job から BatchProperties.Job には変換できません」なんてエラーになったり。

あと、
org.springframework.batch.core.job.JobExecution
を見つけずに
org.springframework.batch.core.repository.persistence.JobExecution
の方を import してしまったり。

で、「型 JobCompletionNotificationListener のメソッド afterJob(JobExecution) はスーパータイプ・メソッドをオーバーライドまたは実装する必要があります」とか言われちゃって。

20260514_spring_batch1.jpg

そういう時はとりあえず現在の import をコメントにしたら候補が複数出るので正しいものを選択する。

ちなみに、a-ikeshitaさんの「Spring Batchについて基礎からまとめてみた」って記事を今参考にさせてもらっております。
俺の通勤路であるパセーラ下の地下道にオープンした「ロピア 広島パセーラ店」。

4月の開店以来、俺が帰宅時に通る18時過ぎにもずっと行列ができていて、さすがにスーパーに並んでまで入る気もしなかったので無視してたんだけど、ここのところやっと皆も飽きてきたのか行列が全然なくなっていた。

ということで、表に貼ってあるチラシを写真に撮って嫁さんに送って「これって安い?」って聞くと「安いねえ」ってことだったので訪店してみた。

20260510_nikusushi1.jpeg
・・・が、結論として「単身赴任のおっさんが買うには1つのパッケージの量が多い」って感じで、なんぼか安いんかもしれんけど、なかなか買えるものがなかった。ビールとかも確かにイオン系の安いスーパーと比べても数%~10%くらい安い感じだけど、重い荷物を持って歩くことを考えたら躊躇するし(^^;

なので、とりあえず訪店記念に「ローストビーフ&牛タン寿司」1200円也を購入。昨夜の晩飯にした。肉屋が母体のスーパーなんでまあまあ美味かった。

うなぎなんかも安かったんだけど、量がねえ・・・。でっかいのが二匹(養殖外国産)で 1,620円って安い気もするけど一人じゃ食べられない量だし。この四分の一が400円台で売ってたら買うんだけどなあ・・・って嫁さんに言ったら、「4つに分けて冷凍しとけばいいじゃん」って。

確かに。今回、横川の仕事場に冷凍庫を導入したからな。今度、うなぎ買ってみよう。でも、一週間うなぎばっかになるな。嬉しいけど(笑)
サーバの自動監視をしているプログラムからの状況連絡のメールが Gmail に届かない。

いや、届かない理由はわかってる。RFC5321に違反した From メールアドレスは Gmail で弾かれる。

Gmail のサーバからの、

Remote_host_said:_553-5.1.7_The_sender_address_<#@[]>_is_not_a_valid_RFC_5321_address._For_more/553-5.1.7_information,_go_to/553-5.1.7__https://support.google.com/a/answer/3221692_and_review_RFC_5321/553_5.1.7_specifications._d2e1a72fcca58-839684a49e3si35399207b3a.131_-_gsmtp/

なんてメッセージがログに残っている。

ここで言う From アドレスはメールを見るときに表示されている From アドレス(いわゆる MAIL FROM)ではなく、メールソフトやメールサーバがメールデータの頭に自動でセットしている Envelope From アドレスである。

具体的には、メールの頭の

Return-Path: <hoge@exsample.com>

とかね。Envelope From を指定せずに sendmail とかでメールを送ると、ここが

Return-Path: <>

みたいに空になってたりして、Gmail から「RFC5321に違反してる」と判断され捨てられてしまうわけだね。

なので最近はちゃんとプログラム内で Envelope From を指定してるんだけど、古いプログラムはそのままだ(^^;;;。まあ、うちのメールサーバはそれでも受信するので今までは問題なかったんだけど、最近、メールを Gmail に転送して外出時なんかにスマホでチェックするようになったので困ったことになったんよね。
古い監視プログラムとかからのメールが届かなくなっちゃって。

というわけで修正。ま、-f オプションを付けるだけだけど(笑)

Perl ならこんな感じ。

if (!open(OUT,"| /usr/sbin/sendmail -t -f hoge\@exsample")) {
return(0);
}

print OUT <<EOM;
From: hoge hoge <hoge\@exsample>
To: atesaki\@exsample.co.jp
Subject: Test Mail
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
X-Mailer: The original perl script - LOLI POPPER

Test Test Test Go Go Go
EOM

close(OUT);

これでちゃんと Gmail に転送しても送られるぞ。もちろん直接 Gmail のアドレスに送ってもグー。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら