ぼそっ(今日の独り言)
- 2025年02月01日 xdomain.jpからのお引越し
- 2025年04月14日 ysktrt.moneynoteのデータをインポートできた
- 2025年04月05日 Androidアプリ 次の壁
- 2025年04月02日 AndroidStudioでjavaを使うまでにいきなり壁
- 2025年03月22日 LINEアプリの最新版がAndroid 9に入らなくなった
- 2025年03月08日 スマホを買ってきた
- 2025年02月02日 chatGPTとかSQLとか
- 2025年01月10日 そういえば2025年になってた
- 2024年12月29日 java swingで画面解像度に合わせて文字サイズを設定する
- 2024年12月22日 javaのUIテストについてググってる途中の備忘録
- 2024年12月07日 Java mavenで依存jarのクラスパスなどをMANIFESTに書く
- 2024年11月30日 JavaのリフレクションでEnumを探す
- 2024年11月24日 Effective Javaを読み進むごとにjavaの難しさを感じる
- 2024年11月17日 jdk17ではjacoco0.8.8以上が必要だった
- 2024年11月10日 javaのenumはCのenumとは別物
- 2024年11月09日 高校や大学の教育無償化にはあまり賛成できない
- 2024年11月04日 米百俵の精神
- 2024年11月02日 WindowsのCopilotってのを使ってみる
- 2024年10月27日 SeleniumはJava8で使えなくなってたのね
- 2024年04月06日 エレコムの安いキーボードの潤滑化メンテ手順
- 2022年04月23日 短波ラジオPL-330メモ
xdomain.jpからのお引越し
お知らせです。
このWebページは@niftyとxdomain.jpに置いてありますが、xdomain.jpの方は2025年7月31日にサービスを終了するとのことですので、お引越しします。
廃止: xdomain.jp
移転先: XServer Static
@niftyは今のまま残ります。
はて、xdomain.jpは無料だけれど数か月に一回利用期間の更新が必要で、更新しないと消えてしまうサービスだったのですけれど、XServer Staticはそのような説明書きがありません。もしかしてXServerのサービスが終了するまでずっと残るのかしら
2025年02月01日 このページのリフォーム
ysktrt.moneynoteのデータをインポートできた
Android14で動かないysktrt.moneynoteのデータを読み込めて、今後も小遣い帳として使い続けるためのysktrt.moneynoteとデータ互換のある自作アプリの開発中。
Androidアプリはチュートリアル本見ながらHello worldしただけのレベルだからつらい。
やっとysktrt.moneynoteでエクスポートした小遣い帳データを読み込んでDBに入れる処理が書けた。とりあえず動いたってレベルでしかないけれど。
さて、次はデータを表示する処理を書かねば・・・。その次は日々の入出金を入力する処理。過去データを検索する機能も欲しいな。
最初は5月連休中に使い始められるレベルまでもっていきたかったけれど、この調子では今年中に使えるようになる事やら。
2025年04月14日 プログラミング雑談
Androidアプリ 次の壁
前回までののあらすじ
2011年Android 2.3時代に使い始めた小遣い帳アプリがAndroid14のスマホにインストールすらできないことが判明。これでもプログラマーの端くれ(ただし永遠の初心者)、自分で小遣い帳アプリを作ろうとAndroidアプリ開発のチュートリアル本を見ながら作成に着手。
チュートリアル本を見ながら作り始めたものの、Javaで開発したいのにJavaを選択できない! この問題はしばらくググってやっと解決したのであった
ってことで、今日はメニューを表示して今まで使っていたcsvファイルをインポートする処理を作ることにしました
チュートリアル本を見るとoption_menu.xmlとかいうファイル名でres\menuフォルダの下にMenu Itemを配置するだけで良さそう。でもどうしてもメニューを表示するためのボタン(…が縦に並んだやつ)すら表示されません。チュートリアル本を隅から隅まで読んだわけではないので表示方法がどこかに書いてあったのを読み飛ばしたかしら? でも普通にEmpty Views Activityを作ってそこにoption_menu.xml作ってMainActivity.javaにonCreateOptionsMenu()メソッドを置くことしかチュートリアル本に書いていないし・・・。
たかがメニューを表示することで悩むこと2時間とか。結局今回はGeminiさんに聞いてみたらマニフェストに書かれているthemeがNoActionBarになっているのでは? ってことで、マニフェストファイルを開いてそれっぽいところを見たら確かに書いてありました。そんな。私はそんなところいじっていないよ。Empty Views ActivityのデフォルトがNoActionBar設定なのね? そんなところに罠が仕掛けてあるとは・・・。
一応チュートリアル本は一通り斜め読みして大体雰囲気だけはつかんだ気でいましたけれど、ちゃんと最初から最後まで熟読することが結局近道なのでしょうか。急がば回れとも言いますし・・・・
でもチュートリアル本をざっと見た感じだとAndroidアプリ開発はそんなに難しそうに見えなかったのだけどなぁ。
今日はメニューが表示されたところで力尽きました。メニューを選択したら何か動くところまで作りたかったけれど、まだ表示しただけで何も動いていません・・・・
5月連休が終わるまでに自分が使えるレベルにしたかったけれど、こりゃちょっと難しいかなぁ
AndroidStudioでjavaを使うまでにいきなり壁
やっと重い腰を上げて小遣い帳アプリを書こうとしているのに、AndroidStudioで入門書を見ながらEmpty Activityを作るとjavaが選択できずkotlin一択になる。
Geminiさんに聞いても「最新のバージョンのAndroidStudioではJavaが使えない場合があります」などと冷たいコメントしかないし。
ググってもなんかアフィリエイト目当てっぽい、どこかのチュートリアルをそのまんま引き写したような古い情報に基づく記載しかないサイトばっかりヒットするし。
結局、qiita内のサイトが一番頼りになりますね。javaを選択するにはEmpty Views Activityを選択する必要がありました。
いきなりこんなところに壁を作らなくてもいいのに。
LINEアプリの最新版がAndroid 9に入らなくなった
3月8日にスマホを買ってきてOPPO A79 5Gに切り替えたと書きました。
でかいとか古いアプリが入らないとか文句もありますが、私にとっては新しいオモチャなのでかれこれ2週間なかなか楽しく遊んでいます。
そんな中、LINEの最新バージョンからLINEアプリがメインとサブの2台のAndroidデバイスにインストールできるようになったというニュースがありました。今まで使っていたXperia Ace(初代)のLINEアプリも生かしておいて両方にLINEアプリを入れられるかなと思ったのですが、なんとびっくりLINEの最新バージョンはAndroid 9に入らない。15.3が入らなくて15.2.1までしか入りませんでした。ということで、私としてはギリギリのタイミングでAndroid 9からAndroid 14に移行したのだなと。
その他、以前のAndroidバージョンでもあったようですが、サイレントモードという設定がある事や、Quick Shareの存在を知りました。今までPCとスマホでちょっとしたファイルのやり取りもGoogleドライブを使いたくない場合にはいちいちUSBケーブルで接続していましたが、Quick Shareで十分じゃん!と知りました。早速PCにQuick Shareのアプリをインストールしてしまいました。
そうそう、いろいろな店のアプリをインストールしていて、新しい方のスマホにも一通りインストールしたのですが、アプリの数が多いので通知も多い! でも通知を全部OFFにするのもどうかなと思って通知設定は悩みどころです。
職場の勤務時間帯はスマホをサイレントモードにしていますが、家からの緊急の電話はちゃんと鳴動してほしいし、カレンダーに入れたリマインダーのアラームも鳴動してほしい・・・とかも、ちゃんとサイレントモードの例外アプリの設定が必要だとか、こまごまとした設定がいろいろ必要なのだなと学びました。
今思い出せる範囲で
- おやすみ時間モード はDigital Wellbeingから設定する。googleの時計アプリからも設定可能
- googleカレンダーのフロントエンドに他のアプリ(例えばDigiCal)を使用しているときはgoogleカレンダーかフロントエンドアプリのどちらかのみ鳴動する通知を設定する
- LINEのメッセージ着信時の通知は「メッセージ通知」の着信音をアプリのデフォルトにするといつものLINEの通知音になる。「アプリのデフォルト」が選べる場合は「アプリのデフォルト」に設定するのがよさそう
- カレンダーとどうでも良さそうなアプリの通知音は分けたい。
2025年03月22日 独り言
スマホを買ってきた
今まで使っていたスマホはXperia Ace。2019年秋にSIMフリーで買ったもの。
Android 9、メモリー4GBの多分当時としてはミドルクラスのスマホだったと思う。
2025年現在のスマホとしてはスペックが足りないのか、どこか故障気味なのか、時々フリーズするようになりました。音量ボタンと電源ボタン長押しで強制再起動はかかるので何とかなっていましたが、そろそろ新しい機種を買いたいなと思っていました。
私は通信回線はiijと契約していますのでまずiijのサイトで端末ラインアップを見ながら、おサイフケータイが使える機種で絞り込むと3万円位からかなって感じ。
今メモリー4GBの機種で調子が悪いので6GBか8GBが良いなとか言うと候補が減っていく。
大晦日に実家の両親に買ったタブレットはXiaomiだったなー、とか、昔CPUじゃなくてMPUはモトローラのMC68000とか使いたかったなー、とか思いながら、Xperiaは良さそうだけど高いしな、ってことでほとんどモトローラかXiaomiで決めかけていたのですが、そうだ、歩数計用のセンサーを持っていない機種はその他のセンサーを活用して歩数計機能を実現するのでバッテリーの消費が多いって聞いたことがあるな・・・とか言いながらステップカウント機能がある機種とか思ってスペックを細かく見るとどちらも安い機種にステップカウントのセンサーが入っているという記述が見つからない。モトローラさんXiaomiさんさようなら。
ちょっとお高いけれどOPPO Reno11 Aって一応条件に当てはまるのでこの線で・・・。家電量販店サイトを見たらOPPO A79ってメモリーは4GBになるけれど2万円でおつりがくるお手頃価格のエントリーモデル。5万円弱でスマホを買って5年使うより2万円で買って2年で乗換ってのもありかな。私はLINEとモバイルsuicaが使えれば大体足りるので、高スペックの機種は多分いらないし。
で、買ってきましたOPPO A79 G5
でかい。重い。右手で持ったまま親指で操作できない。まあこのあたりは買う前から覚悟していたので良いのですが、誤算が一つ。
2011年に初めてAndroidスマホを買ったときから使っていた小遣い帳アプリMoneyNoteが古すぎてインストールできない
あらためて調べてみると当時のスマホはAndroid 2.3くらいのバージョン。最近はAndroid 6以前をターゲットにしているアプリはインストールできなくなっているのですって? なんてこったい。これまでの14年分の小遣い帳データはどうなってしまうの? しばらくは今までの機種で小遣い帳を使い続けつつ、エクスポートしたデータを別のアプリに読み込ませる策でも考えようと思います。ありがたいことにMoneyNoteはcsvでデータをエクスポートできるので、最悪自分でSQLを書くとか、アプリを作るとかになるかも・・・
OPPO A79は充電器とかUSBケーブルとか付属していないのですが、なんかサービスで純正充電器がついてきました。ケーブルは無いけど。
いろいろ調べた結果、OPPO A79はSuperVOOCとかいう充電規格に対応していて、これはUSB PDの上位規格らしい。USB PD-PPSとSuperVOOCの違いはまだよく理解できていません
USB PDってUSB Type-C -- USB Type-Cのケーブルでしか使えない規格らしいと思ってたのでそういうでケーブルを買おうかなと思ったら1,000円超。高い。最初に歩いた範囲で一番安かったのがCandoの330円のPD 60W対応ケーブル。
まあ昔のフィーリングだと超高速充電ってバッテリーの寿命を縮めそうだし、普通に充電すれば良いかなって思って帰宅。
充電器に書かれている出力の仕様の細かい文字をスマホで撮影して拡大して読んでみるとUSB Type-Aコネクタ側も11V 3A出力できるらしい。これで33Wになるのか・・・。ふと思って手元にあった数年前XiaomiのスマホについてきたType-A -- Type-Cの線をつないだら超高速充電モードで充電できてしまった
ウォーキングがてら近所のセリアに行ったらUSB PDの充電専用ケーブルが売ってて、20V 3Aで60W対応ってことらしい。これでいけるのかしら。まあダメでも110円だし、と思って購入。高速充電できませんでした。残念。
きちんとPD-PPSかSuperVOOC対応のケーブルを買う必要があるみたい。とりあえずはXiaomiスマホについてきたケーブルが使えるし、日ごろは通常速度の充電でいいので、そのうち探してみようかな。Amazonで見てもSuperVOOC対応ケーブルは1,000円とかするみたいだし。
2025/3/15 追記
- Xiaomi Redmi 9T : クイックチャージ 3.0 18W
- OPPE A79 5G : 33W SuperVOOC と 33W PPS. 11V 3A
2025/3/22 追記
- MoneyNote、手持ちのAndroid 12のデバイス(Redmi 9T)にはインストールできた
2025年03月08日 独り言
chatGPTとかSQLとか
流行りのchatGPSとかは食わず嫌いであまり使っておらず、また、SQLはSQLiteを我流でSQLiteサイトのチュートリアル見てリファレンスのページを見てなんとなく使っている私です。
先日、「その月までの累積の数値」が入ったテーブルから「その月の数値」を求めたいと思いましたが、SQLの書き方がわからず難儀しました。
そんなのExcelに入れて差分を計算すれば瞬殺じゃん、というのがまあ普通の反応だと思います。でも今回はExcelを使わない縛りでどうしても作ってみたいと思ってしまったのですよね。
1時間くらい考えて、やってみた方法は、即値でWHERE month='先月の日付'で先月の数値のviewを作って、同様の方法で今月の数値のviewを作って、SELECT 今月の数値 - 先月の数値 で差分を作るという方法。
何日か経ってしまったので記憶があいまいですが、確か、"SQLite データ 先月との差"みたいな検索ワードでググってみましたが、日付の計算みたいなのばかりヒットしてデータの差分の出し方にうまくたどり着けなかったのですよね。
そういえば職場でもAI活用って話題が出ていたなぁと思い、chatGPT君に尋ねてみることにしました
sqliteで月ごとの料金が入ったテーブルがあり、前の月との差異を出力したい
すると「SQLiteで月ごとの料金データが入ったテーブルにおいて、前の月との差異を求めるには、自己結合を使用する方法が一般的です。」とのことで、次のコードが出てきました
SELECT
t1.month,
t1.charge AS current_charge,
t2.charge AS previous_charge,
(t1.charge - t2.charge) AS difference
FROM
monthly_charges t1
LEFT JOIN
monthly_charges t2 ON strftime('%Y-%m', t1.month) = strftime('%Y-%m', t2.month, '+1 month')
ORDER BY
t1.month;
monthly_chargesがデータの入ったテーブルです。
ここには転記しませんがchatGPT君はクエリの解説までしてくれました
FROMとJOINで同じテーブルを結合するなんて、SQLってそんな使い方ができるの? とか、SELECTの出力対象にmonthly_chargesが無く、後から出てくるFROMやJOINでつけたt1とかt2とかの名前で参照するなんてアリなんだ? とか、目から鱗です。いや、ちゃんとSQL勉強しろよ、って言われた気がしました。
ちなみに、もしかしたら上記SQLは動くかもしれませんが、その時に私が得たSELECTは期待した出力が出てこなかったので、ちょっと手直しして、データを読み込むimportを追加して、次の形になりました
.mode csv
CREATE TABLE monthly_rates (
id INTEGER PRIMARY KEY,
month TEXT, -- YYYY-MM 形式で年月が格納される
rate INTEGER -- 料金
);
.import rates.csv monthly_rates
SELECT
current.month AS current_month,
current.rate AS current_rate,
previous.rate AS previous_rate,
(current.rate - previous.rate) AS difference
FROM
monthly_rates AS current
LEFT JOIN
monthly_rates AS previous
ON
strftime('%Y-%m', date(current.month || '-01')) = strftime('%Y-%m', date(previous.month || '-01', '+1 month'))
WHERE
current.month = strftime('%Y-%m', '2025-02-01');
monthに'YYYY-MM-DD'形式でデータが入っていないので「|| '-01'」を追加しただけだったんですけどね
私がchatGPTに入れた指示が適当だったので完全な答えは得られませんでしたが、chatGPTってスゲーって思いましたね。もう、知らないことをググるよりもchatGPTに聞いてから、それが正しいかどうかググったり自分で実験して検証する という手順の方が良いのかもしれません
この、今日のこの記事を書くにあたり、あらためてchatGPT君に聞いてみました
sqliteで月ごとの料金が入ったテーブルから前の月との差異を出力したい
で、出てきたのは次のSQL
SELECT
month,
fee,
LAG(fee) OVER (ORDER BY month) AS previous_fee,
fee - LAG(fee) OVER (ORDER BY month) AS fee_difference
FROM
monthly_fees
ORDER BY
month;
ちょっと指示が異なるだけなのに全然違うのが出てきちゃったよ
LAGとかORDERって何? この記事を書き終えてから勉強します
chatGPT君のクエリの解説に「前月のデータがない最初の月(データが存在する場合)は、差異が NULL になるので、それを適切に処理したい場合は COALESCE を使って NULL を 0 に変換することができます。」とありました。
SELECT
month,
fee,
LAG(fee) OVER (ORDER BY month) AS previous_fee,
COALESCE(fee - LAG(fee) OVER (ORDER BY month), 0) AS fee_difference
FROM
monthly_fees
ORDER BY
month;
COALESCEって何?(以下略)
ってことで、SQLの本を買ってきました。「初めてのSQL」O'REILLYの翻訳本。ジュンク堂でその他の本もいろいろ手に取りましたが、ほんとのほんとに初歩の初歩から手取り足取りのチュートリアル本が多くて、いや、そのあたりの話は全部すっ飛ばしていいのでもうちょっと実のある話をしてくれないかなぁ? とか思ってこの本になりました。
あと、AIに対するアレルギーを治療するために「ディープラーニングG検定 最強の合格テキスト」(ソフトバンクパブリッシング)ってのも買ってきました。緑本って呼んでほしいみたいです。
2024年は2月にEffective Javaを買ってきて学ばせていただきましたし、今年はSQLとAIの初歩くらい身に着けたいものです。
2025年02月02日 プログラミング雑談
そういえば2025年になってた
2025年になりました。
去年(2024年)は割とこのページを更新した方ですね。
今年もよろしくお願いいたします。
2025年01月10日 独り言
java swingで画面解像度に合わせて文字サイズを設定する
24インチの4KモニタなどというAmazonで探してもLGから出ている1機種しか出てこないようなモニタを使っていると世間のチュートリアル通りにプログラムを書いていても期待通りに動作しないことがたびたび。
「Java GUIプログラミング」なるSwingを使ったチュートリアル本を読みながらヨチヨチプログラムを書いてみています。
WindowsでいうところのウインドウはJavaのSwingではJFrameに相当するようです。
JFrame frame = new JFrame("ウインドウのタイトル");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ウインドウを閉じる処理を登録しておく
JLabel label = new JLabel("Main Text");
frame.add(label);
final int width = 260; // 幅
final int height = 260; // 高さ
frame.setTitle("ListBox"); // ウインドウのタイトル
frame.setSize(width, height); // ウインドウのサイズを設定する
setVisible(true); // 表示する
これだけでウインドウを表示するだけのプログラムになるという事で、30年前にC++でWin32 APIでWindowsアプリのHello world!書いた時よりもずいぶん簡単。多分C#で.netだともっと簡単になっているのでしょうけれど。
で、上記7行のプログラムは24インチ4Kで200%スケーリング表示しているPCだと「200%スケーリング」が反映されていないみたいで表示がちっちゃい。ウインドウの幅と高さを260ピクセルで即値で指定しているのでそれはまあプログラマの私の責任なんだけど、ウインドウの中に表示されるlabelの文字がちっちゃいのが困る。
final Font font = new Font("BIZ UDPゴシック", Font.PLAIN, 12);
label.setFont(font);
ってすれば、Fontのコンストラクタの第3引数は「size - Fontのポイント・サイズ」ですので12ポイントで文字が表示されそうなものですが、文字がちっちゃい。
フォントのポイント・サイズは、本来は1ポイント(1/72)インチのはずですが、画面の解像度に合わせて文字の大きさを制御してくれるわけではなさそう。
private static int ptScale(int point) {
return point * Toolkit.getDefaultToolkit().getScreenResolution() / 72;
}
とか用意しておいて、
final Font font2 = new Font("BIZ UDPゴシック", Font.PLAIN, ptScale(12));
すると、期待通りの文字サイズで表示されました。
んー、ってことは、Fontのコンストラクタで指定した文字サイズはFontのピクセル・サイズみたいですね。
2024年12月29日 プログラミング雑談
javaのUIテストについてググってる途中の備忘録
数年前C++でネイティブ開発こそ至高と考えていた時代にjavaのUIってWindowsでいうところのspyとかで見えないからUIテストができないと思っていました。
今年一年javaプログラミングに取り組んでみて、とりあえずswingというライブラリでGUIプログラムを一つ書いてみようかという気分になったところで改めてjavaのUIテストについてググっています。
この手の細かい話はついついtwitterに呟いてしまい、後日見つけられなくて再びググることになるので今回は自分のwebページに呟くことにします。今は簡単に呟けるようにしたし。
Windowsでネイティブアプリと同様にUIテストしたいならば、java access bridgeを有効にすると良いらしい。
Java Access Bridge の有効化とテスト
最近は私のPCはjdkのフォルダにパスが通っているので
jabswitch -enable
でよさそう。
でもspy++で見えるようになった感じがしない・・・
まだいろいろググっている途中だけれど、自分で作るjavaアプリならばjavax.accessibilityを使えば、というか、accessibilityを提供するようにGUIを作ればjavaの中からGUIを疑似的に操作できるような気がしてきました。
2024年12月22日 プログラミング雑談
Java mavenで依存jarのクラスパスなどをMANIFESTに書く
2024年5月11日にjava -classpath jarファイル パッケージ名+メインのクラス名 で実行jarが動くとか書いていましたが、maven-jar-pluginを入れれば
java -jar jarファイル
で実行jarが動くそうな。pom.xmlに
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
という感じにメインクラス名を書けばいい模様。<mainClass>の中がアプリのメインクラス名、依存jarがある場合は<addClasspath>をtrueにするだけらしい。
Apache Maven Projectの中の説明
2024年12月07日 プログラミング雑談
JavaのリフレクションでEnumを探す
Javaでプログラムを書いていて、publicクラスAppの中のprivate enumのMakerを引数に持つAppの中のprivateメソッドをテストしたい。
リフレクションを使えばできると聞いてはいるけれど、この手の細かいことは覚えてられないので備忘録的なメモ
// Appクラス
public final class App {
private enum Maker {
INDEX("index", Index::new),
KEYWORD("keyword", Keyword::new);
}
private boolean execGen(Maker htmlMode, String inFileName) {
}
}
// AppTestクラス
class AppTest {
@Test
void appTest_execGen() {
try {
Class<?> enumAppMaker = null;
for (Class<?> clazz : App.class.getDeclaredClasses()) {
if ("Maker".equals(clazz.getSimpleName())) {
enumAppMaker = clazz;
break;
}
}
Map<String, Enum<?>> makerMember = new HashMap<>();
for (Object enumConst : enumAppMaker.getEnumConstants()) {
makerMember.put(((Enum<?>) enumConst).name(), (Enum<?>) enumConst);
}
Method method = App.class.getDeclaredMethod("execGen", enumAppMaker, String.class);
method.setAccessible(true);
// 入力ファイルがnullの場合はエラーになる
assertFalse((boolean) method.invoke(app, makerMember.get("INDEX"), ""));
Appクラスの中ではexecGen()もenum Makerもprivateだからいろいろめんどくさい。
execGenの方はメソッドだからググればすぐにヒット。でも引数のenum型の指定方法がわからない。
App.class.getDeclaredClasses()でAppの中のクラス(enumを含む)の配列を取得して、getSimpleName()がenum名、ここでは"Maker"に一致するクラスが探しているenum。
見つけたClass<?>型のenumをgetEnumConstants()するとenum.Values()的な意味合いになる模様。
これを使ってメソッドexecGen()を探したりメソッドexecGen()の引数にしたり。
2024年11月30日 プログラミング雑談
Effective Javaを読み進むごとにjavaの難しさを感じる
今年、2024年2月に書籍Effective Javaを買ってきて、よちよち読んでいますがまだ読み終わりません。
実はEffective Javaをいつ買ったのかなと小遣い帳を見ていたらプログラミング言語Javaは2011年に購入していてちょっとびっくりしていました。てっきり2017年頃買ったのだとばかり思っていたので。Androidのスマホを買ってちょっとAndroid向けのアプリを書いてみたかったのかもしれません
で、Effective Javaの方ですが、やっとページ数で6割くらい読み進んだ感じです。
読めば読むほど自分が幼稚なJavaプログラムを書いていたことを認識してしまいます。まあ仕事ではあまりjavaプログラムを書いていないので主に趣味のコードを書き換えたくなります。
プログラミング言語C++を読んだ時もいろいろショックを受けましたが、あの時は"クラスのあるC"レベルから"C++ 11"に知識をアップデートするのが主目的で、仕事ではC++ 11のコードを書いていないはずなので、自分のプログラミングレベルの幼さよりもC++ 11の新しさに圧倒された感じでした。
で、今週位に読んだ範囲ですと、私は去年の年末あたりからmavenでjacocoあたりにメソッドのサイクロマチック数5とかクラスのサイクロマチック数20とかでmaven installできなくなるので、サイクロマチック数を減らすという観点でstreamなどを使ってjava 1.8の世界に浸っていたわけですが、streamって考えなしに使うなと怒られてしまいました。streamのforEachとかでローカル変数を書き換えてはいけないようです。私ってばコンパイルが通ればあまり気にしていませんでした。
あとはprivate変数でコンテナを持って、コンテナはpublicのgetなんちゃら()というアクセサでアクセス方法を限定して公開していたつもりでしたが、getなんちゃら()でprivateのコンテナをreturnするとコンテナを書き換えられてしまう可能性があるのでセキュアではないとか。
本の最初の方でもequalsやhashCodeのオーバーライドとかComparableの実装とか、クラスを作っても全然意識したことが無かったので目から鱗でしたし。
Effective JavaってJava 9の時代の本なんだよなぁ。ChromeBookに入れられるJDKは既にJava 17だし・・・。Effecitve Javaを読み終わって、Javaが少しわかったような気になったところで世界はもっと先に進んでいるのですよねぇ。全然追いつけません。
jdk17ではjacoco0.8.8以上が必要だった
週末、久しぶりにプログラムを書く気になったので、8月頃に更新したこのwebページ用のhtmlを生成するjavaプログラムをメンテしてました。2か月とか経っているのですっかりどんなコードを書いたか忘れている。
開発環境はWindows 11のPCでjava8でmavenで・・・という感じ。archetype-quickstart-jdk8ってのを使っているのでjunitはjupiter、jacocoとかsurefireとか入ってます。
実行用jarを作るのにmvn installとかするとcheckstyleが口うるさいことを言ってくるけれど都度対応しているし、jacocoもメソッドのサイクロマチック数5以下とか言ってくるのでifとかelse ifとか使っているとあっという間に違反してしまうのでコーディングしたいロジックよりもいかにメソッドのサイクロマチック数を小さくするかにエネルギーを使っていたり。
最近ChromeBookでもjavaの開発環境を作ってみたのでPCからソースファイル一式をChromeBookに持っていってmvn installしてみた。
そしたら単体テスト中にlog4jあたりでExceptionが発生。
java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/util/resources/cldr/provider/CLDRLocaleDetaMataInfo.
at org.jacoco.agent.rt.internal_ (以下省略)
って感じ。Exceptionが発生したらスタックトレースを自分の書いたコードまでさかのぼって修正するものだと思っていますが、log4jでgetLoggerするあたりなもので、log4jのとりまわしはよくわからないままチュートリアル的な処理をコピペしてたのであんまり理解できていないのですよね。
javaってWrite once, run anywhere.じゃなかったんかい?とか愚痴りながら、それでも心当たりがありそうなところを手直ししていました。
PCではちゃんとmvn installが正常終了するのになぜ? という観点で見ていましたが、もしかしてPCはjdk8でChromeBookはjdk17なのが悪さしている? ってことで、ググるキーワードにjdkとか追加してましたらやっと原因らしいものにたどり着けました。
結論: jacoco-mavne-pluginのバージョンを0.8.4から0.8.12(最新)にすべし
jacoco 0.8.8で
JaCoCo now officially supports Java 17 and 18 (GitHub #1282, #1198)
ってことだそうです。
pom.xmlに
<jacoco-maven-plugin.version>0.8.4</jacoco-maven-plugin.version>
ってあったので、0.8.12に書き換えたらExceptionが解消。やっと心穏やかにChromebookでjavaのコンパイルができます。
そうそう、去年の春まで使っていたPCのubuntuを22.?から24.?に入れ替えました。こっちでもVisual Studio Code入れてjdk17を入れてコンパイルできるようにしました。まだgitは入れていません。
WindowsではコードのマージとかにWinMergeを使っていますがLinuxに同様のツールは何があるのだろうとググったらmeldというのがヒット。入れてみました。細かい使い勝手は違うけれど、これで十分っぽい。
linuxでブラウザはあるしエディタはあるしjavaの開発もできるし、なんかWindowsが無くてももしからしたらひどく困ることはないのかも。
2024年11月17日 プログラミング雑談
javaのenumはCのenumとは別物
プログラミングはFORTRANで入門したものの、その後ボードマイコンや低スペックPCを使う中でアセンブラを使い、Cみたいな低レベルのネイティブ開発言語こそが至高!という潜在意識が消えることなく21世紀を迎え、平成末期に仕事の都合でjavaに入門。javaでの開発も良いものだと思い始めたのはここ2年位というプログラミング歴の私。
javaってC++みたいなもの、という気持ちで入門していたのでjavaでC++と同じ用語が使われていると同じ概念かなと勘違いしていたところが多数あります。例えばenum。
これを書く前にちょっとenumでググってみましたが、C界隈ではなんかenumって忌み嫌われた存在のようで、C++的にはenum classを使うのが推奨されるのかな。
javaのenumもCのenumみたいなものかなと思い込んでいましたが、Effecitve Java読んでたらjavaのenumってCのenumやC++のenum classとは全然別の存在であることに今更気が付きました。C++のenum/enum classを私が正しく理解しているという自信もないのですけれど(話す前から言い訳が先行)
Effecitve Java 164ページ(もちろん日本語版)に書かれている「enum型にabstractメソッドを宣言して、各enum定数にそれぞれの振る舞いをoverrideする」コードにちょっと衝撃を受けてます。
そんなことができるの?って感じ。
C/C++気分でenumの列挙値を作っておいて、それぞれの列挙値に対応したKey文字列を使ってMapでValueを管理とかしていたのがもしかしてenumの中だけで完結しちゃうの?
仕事のコードだからコピペで持ってこれないから気分だけ書いてしまうと
public enum Entry {
FIRST, SECOND, THIRD,
};
public class App {
public static Map<Entry, String> xxx = new HashMap<>();
static {
xxx.put(Entry.FIRST, "一番目の文字列");
xxx.put(Entry.SECOND, "二番目の文字列");
xxx.put(Entry.THIRD, "三番目の文字列");
}
}
みたいなコードは不要で、
public enum Entry {
FIRST("一番目の文字列"),
SECOND("二番目の文字列"),
THIRD("三番目の文字列"),
};
としておけば、
System.out.println(Entry.FIRST.toString());
でいいし、
public enum Entry {
FIRST, SECOND, THIRD,
};
public class App {
public static Map<Entry, Supplier<zzz>> xxx = new HashMap<>();
static {
xxx.put(Entry.FIRST, zzzImplFirst::new);
xxx.put(Entry.SECOND, zzzImplSecond::new);
xxx.put(Entry.THIRD, zzzImplThird::new);
}
public void create(Entry key) {
Optional.ofNullable(xxx.get(key)).ifPresent(o -> o.get().xxxMethod());
}
}
も、多分
public enum Entry {
FIRST{public void xxxMethod() { // do something; } },
SECOND{public void xxxMethod() { // do something; } },
THIRD{public void xxxMethod() { // do something; } };
public abstract void xxxMethod();
};
で処理を振り分けられる。
実際のコーディングではjavaコンパイラに受け入れてもらえるようにちゃんと書かなければなりませんけれど、インターフェースを定義してインプリメントのクラスを作って・・・という回りくどいことが不要になるケースが結構ありそう。
2024年11月10日 プログラミング雑談
高校や大学の教育無償化にはあまり賛成できない
中学の給食無償化や高校の教育無償化といった話を聞いていると、日本は懐も心も貧しくなったのだなぁと思うのです。
給食費無償化の話って、お金があっても給食費を払わない家庭の子供に給食を食べるなと言えないとかいうのが本当の理由なのでしょう? いまどき給食費は振込だろうから学校での集金トラブルを避けるという理由は無いだろうし。給食費を払えない貧困家庭は給食費免除にしても学校で集金しなければ生徒たちは誰が給食費免除かわからないし。普通の家庭が子供の給食費を払うのに困窮するような国だとしたらその貧しさこそが大問題です。
高校・大学の教育無償化って、高校や大学に行きたくない、学ぶ意欲が欠如した生徒に対して本来親が「勉強する気が無いなら学校なんか行かずに働け」と言うべきタイミングを消し去って、高校3年間だったり大学と合わせて7年間だったりを無駄に遊びに浪費させてしまうという面が多々あると思うのです。いまどき高校くらい出ていないとできる仕事が無い・・・という感じではないのですよね。ウーバーイーツのリュックを背負った若者たちの仕事に高校以上でしか学ばない知識が必要なのか? と言えば、わかってもらえるでしょうか。
今の高校や大学がどのような教育をしているのか知識をアップデートできていないので的外れなことを言っている可能性大ですが高校は高卒で社会に出る人向けの職業訓練校的な学校と大学以上を目指す学校に明確に分けた方がいい。とりあえず普通科に行っておけばOKみたいな風潮はやめたい。卒業する学生を労働者として受け入れる企業はちゃんと即戦力かどうかテストして学生を値踏みした方がいい。プログラマーを雇うならばプログラムを実際に書かせてみる。新卒社員の初任給が同一学歴なら同額なんてのはナンセンス。今の世の中使い物にならない人材を雇ってしまっても企業側に育成する義務があるらしいので、即戦力と要教育の人材の給与に差があるのはごく自然。
大学はもっと天才を生み出す方にシフトしたら面白い。大学は就職を目指すのではなく、起業を目指すかいきなり企業の幹部を目指すかの2択くらいの方がおもしろい。小中高大の6334という画一の年数ではなくて、高校は2年でも5年でも目的に応じて長さを設定してしまえばいいし、大学も卒業に必要な単位をとるのに5年以上でも6年以上でもかかるように設定すればいい。
高校生も大学生もアルバイトなんかする暇がないくらい学業がハードな方がいい。学生のうちに社会に触れた方がいいならば企業と提携してインターン的な就労体験を1か月でも2か月でも学校のカリキュラムに組み込めばいい。企業は大学から新卒の社員を採用するときに学校に社員(学生)の能力に応じた金を支払うような仕組みにすれば大学の方も熱心に教育してくれるに違いない。能力があるけれど学費が払えない学生も、企業に高く買ってもらえる人材であれば学校側も育てる動機が出てくるでしょう。企業も大学で教育させた人材よりも自前で育てた方が安いという事になれば企業内の教育に熱心に取り組むようになるだろうし。
昭和の頃から世の中がこんなに変わっているのにどうして学校の仕組みや就職の仕組みがこんなに硬直的なまま変わらないのか不思議でなりません。
2024年11月09日 独り言
米百俵の精神
10月26日に「「与党も野党も「バラ色の未来になったらいいなぁ」って言うだけで具体的にどうやったらバラ色の未来が来るかノーアイディアっぽくて。今の私は政治不信じゃなくて、政治を諦めちゃったかんじ。」と書きましたが、わからないなりにどうやったらバラ色の未来が来るか考えてました。
企業が製造設備などの未来への投資ができるように金利を下げましょう!、若者がこれからの日本を支えていけるように学校に通えるように学費や給食費を補助しましょう!ってのが、政治家の言い分なのだけれど、年寄りとしてはピントが外れているような気がして。
20年前、30年前からしている仕事をそのまま規模拡大して生産コストを下げましょう!、そのために製造用の設備を更新しましょう! と言ってみたところで、何十年前から作っているようなジャンルの製品は海外で生産するというトレンドらしいので国内で作っても高値で販売することはできなくて利益が上がらなくて労働者の賃金も上がらないような気がして。
設備投資以前に、何が売れるか知恵を出して、売れるものを作らなければ成長できない時代だと思うのです。
三菱MRJが結局1機も売ることなく開発を断念してしまいました。航空機自体は革命的な製品ではありませんが、燃費の良い航空機を作って売ろうと事業を起こした企業があるのですから、日本政府はもっとかかわるべきだったと思うのです。米国で審査が通らなかったので飛ばすことができません、ではなく、日本で審査を通して日本の空を飛べるよう後押ししなければならなかったのだと思います。それを日本政府はしなかった。
一方でラビダスとかいう半導体製造会社を立ち上げようと日本政府は何百億円とか投じて支援しています。東芝メモリー改めキオクシアでしたっけにも支援しています。前世紀末のジャパンアズナンバーワンの夢よもう一度、ってことで半導体に投資するのでしょうけれど、すでに時代は半導体チップを製造することよりも新しいCPUだったりGPUだったりPGAだったり(これらも既に新しい話ではないのですけれど)を設計して、誰かに製造してもらって、新しい用途で市場を作っていくことで利益を得る時代に移っています。
AppleなりNVIDIAなりが何ミリメートル角のチップ1個何万円で売りますが、どんなに高価で売れるチップを製造しても製造工場の取り分はウエハー一枚何万円とかにしかならないはず。熊本あたりにTSMCの製造工場を誘致したようですが、投資するならば製造工場ではなくTSMCに製造を委託して高値で販売できるチップを設計(チップを使う市場を創造)する分野だと思うのです。
少子高齢化はいろいろな面で問題だと思います。
「子供がいると落ち着いて仕事に行けないし、育児や教育にお金がかかる」ので支援する、という気持ちはわからなくもないのですが、年寄りの感覚とはずれていて。
子供が3歳になるまでは親(母でも父でもいい)がべったりお世話できる社会が良いと思うのです。その後中学卒業くらいまでは日中はジジババが「スープの冷めない距離」でフォローできれば比較的安心かと。このジジババの役割は学童保育でもいいですけれど。子供の面倒を「親自身や信頼できる人が見てくれるから安心」という環境があって、子育てをしていても特に贅沢しなければ普通に暮らしていける家計であれば、改めてそれを行政が支援する必要は薄いと思うのです。
老齢年金は現役世代からの仕送り型ではなく、年金を受け取る本人が老後の自分のために蓄えておくのが基本。将来の現役世代の増減に一喜一憂しない国の仕組みを作ることによって少子高齢化の問題の一つ、老人世代を支えるためという不毛な負担を現役世代に強いる必要がなくなる。
医療費の高騰がもしも超高額の費用がかかる少数の病気のせいであれば、健康保険がカバーする領域を限定して、普通のけがや病気の治療にかかる町医者の取り分を増やしてもいいと思う。超高額の医療費がかかる分野はクラウドファンディング的な対応ができないものかな。
鉄道、赤字ローカル線は問題。でも実は赤字ローカル線の地域の人はそれほど困っていなかったりする。多分廃止されても困らない。おそらく困るのは車がつかえない学生と老人。自動車の自動運転が実現されれば赤字ローカル線は廃止して良いのではないかな。それまでは高校に通う学生については自動車運転免許取得可能な年齢を15歳まで引き下げて対応できないかな。
米の価格上昇や食料自給率が低いとかは私は何か論じれるほど知識がありません。
東北線を大宮-小山くらいまで乗ったときに思いましたが、農地が太陽光発電の発電所に変わってしまったところがかなりありそうな風景でした。主食用の穀物生産が太陽光発電より稼げるようにならないとカロリーベースの食料自給率の向上は無理なのではないかなと思って思考停止しています。
ってことで、全然まとまっていませんが時間切れなので・・・
マクロでは低金利による投資後押しも良いですし、子育て世代の支援も良いのですが、立法や行政がやらなければならないミクロの取り組みを、それが今の現役世代に負担を強いるものであっても、次の現役世代が希望をもって生きていくために必要ならば実施していく必要があるよね、という気分で書き始めた文章をいったん閉じたいと思います。
2024年11月04日 独り言
WindowsのCopilotってのを使ってみる
世間はAI、AIととってもAIブーム。
国会でもAIで作った質問をしたってニュースがあったのはいつのことだったか。
夏に職場に来たインターンの大学生もCopilotでちょっとしたことを調べてたっけ。
今の人工知能って、コンピュータにあるまじき「正しい答えを出してくれるとは限らない。嘘かもしれない答えを平気でしてくる奴」だと思っているのでイマイチ好きになれずにいます。
とはいえ、何度かWindowsのタスクバーに現れては削除し、またしばらくすると勝手にタスクバーに舞い戻っているCopilotを試してみました。
いまどきはgoogle検索でも自然な日本語で質問文を書いても受け付けてくれるようで、google検索結果のトップにAIの要約が出てきますが、Copilotの出力も同程度の印象です。
田舎者なので、鉄道ローカル線廃止が進むと高校生の通学って困るよなぁ、鉄道が日本ほどきめ細かくない米国の高校生はどうやって通学しているのだろう と思ってCopilot君に米国の高校生が通学に使う交通機関の比率を問いかけたらCommuterの調査結果を回答しやがるし、なんかちゃんと自力でgoogle検索して個々のデータにあたって調べた方が安心だなという印象になっています。
少なくとも現時点ではCopilotの回答を鵜呑みにするのは絶対ダメ。
2024年11月02日 独り言
SeleniumはJava8で使えなくなってたのね
htmlファイルのリンクチェックツールを更新しようと思って、SeleniumをJavaで使おうとしたらランタイムエラー。バージョン55が必要なのに52までしか動かない環境だよ、みたいなメッセージ。
htmlファイルのチェックツール、最近作ったときはPlaywright使ってたし、以前Selenium(Selenide)使ったときはJavaではなくてC#(.net)で使ってた気がします。
最近私のPCのJavaをAmazon Correttoに切り替えたばかりなので何か環境に問題があるのかなと思ってあれこれググってたところ、結局SeleniumはJava 11以上のみサポートに変わっていた模様。
Java 11かぁ。もうちょっとJava 8で遊んでいたいので今回はSeleniumは使わないことにします。
別件ですが
Javaって、JDKのフォルダにJREのフォルダもある事には気が付いていたけれど、なんとなくJREをインストールしてからJDKをインストールするものだと思い込んでいました。VisualStudioCode + Amazon Correttoでmavenでのコンパイルに失敗するのでなんでだろうと思ってたけれど、結局JAVA_HOMEがjreの方を指していたのが原因だった模様。うーん、職場のPCにJREをインストールしてたけど、こっちもアンインストールしよう。
2024年10月27日 プログラミング雑談
エレコムの安いキーボードの潤滑化メンテ手順
キーボードをいわゆる「ルブ」したいと思いながらしばらく踏み切れなかったので、同じように踏み切れない人の背中を押すつもりで、エレコムの安いキーボードTK-FDM105TXBKの潤滑化について書きます
用意するもの
- 潤滑化対象のキーボード
- Y字型ドライバー
- 潤滑用のスプレー
Y字型のドライバーはSUNFLAGのNo.17-Cが近所で安かったのでこれを使いました。
ネジの溝部分のサイズが2.2mm向けのドライバーのようです。これでもエレコムのキーボードのネジは回せましたが、もっと大きなドライバーが好ましいと思います。多分3.0mmくらいあった方が良いと思います。
潤滑用のスプレーは呉のドライファストルブを使いました。
分解
ネジの場所は赤く丸をつけたところです。水抜きの穴もあるのですべての穴にネジが入っているわけではありません。
ちゃんと力を入れてドライバーを押し込む感じでネジを回す必要がありました。サイズが合ったドライバーならそれほど気を使わなくても良いと思います。
裏ブタと表のキーボード側の分離はキーボード側に3箇所小さな爪がありますので、爪の場所は裏ブタ側を外に押し広げる感じで外すと良いでしょう。
ネジはこんな感じ
Y字のネジを一般的な+ネジに付け替えたくて近所のホームセンターに行きましたが同じサイズのネジは置いていませんでした。タッピングネジで鍋タイプの3x8よりは1mm位短くて、3x8の先端1mm位を切り落とした感じに見えます。
(追記: B0型タッピング ナベ M3×7 になるみたい)
中の構造
キーボード部分を外した裏ブタ側はこんな感じ。
メンブレンの白いシートは有線タイプのTK-FDM103と同じものだと思います。メンブレンのシートと右上の基板は3つのネジで圧着させる構造。この基板を有線タイプ、無線タイプ、Bluetoothタイプで使い分けるのでしょう。ちょっと高価なBluetoothタイプでメンブレンのシートが接触不良を起こしたら安い有線タイプを買ってきてシートだけ入れ替えれば使えるのではないかな。購入時期が何年も違うと中身が微妙にバージョンアップして互換性が失われているかもしれませんので積極的におすすめはしませんが。そうでなくても5年使った私のキーボードは、今回買い足して気が付きましたが、キートップがツルツルになっていたり左手親指の腹があたるキーボード下部がすり減っていたりしましたので、数年使ったのならば修理とか考えずに買い替えた方が良さそうです。2万円超のRealforceだと10年位使いたいかも?
キーボードの裏側、キートップの取り付け部分
キートップは筐体に爪ではまっている構造です。キートップを引っ張っても抜けないように作られているのですね。
キーを押し込むとこんな感じ
スプレー作業
キーを押し込むとキートップと筐体の接触部分が露出しますので、ここにドライファブのスプレー液を付着させる感じで作業しました。作業時はキーを押し込まなくても筐体をひっくり返して広げた新聞紙の上に置けば自然とキーが押された状態になります。スプレー付属のストローを溝のように見える隙間に差し込んで、スプレー液で濡れようにします。
気にしなくても良いのかもしれませんが、液がちゃんとキートップと筐体の接触部分にまんべんなく付着するように、キー4つくらいずつまとめてスプレーして、乾く前に手でキーをカチャカチャ押し込んでました。キートップが気化熱でひんやりすると、キートップにも液がちゃんとついてるんだなと安心できる感じ。
どのくらいの量をスプレーするのが最適かわかりませんが、キーボードの引っ掛かり感が解消していれば目的は達成できているのでヨシとしています。
天候などの関係で可能ならば屋外、せめて窓を開け放った室内で作業することをお勧めしておきます。有害物質は使われていないと思いますが、ちょっと溶剤っぽいにおいが気になるので。
組み立て
スプレー液がちゃんと乾くのを待って、キーボードを組み立てます。
呉のドライファストルブは乾くと白くなります。ところどころ白い汚れが付着したかなって感じになります。まあ組み立ててしまえば見えないところですので気にしません。
あ、白くなった写真を撮り忘れました・・・。
効果
PCに接続して試し打ち。
気のせいかもしれませんが打鍵音のカチャカチャの高音部が少し静かになった気がします。
押下感は滑らか。わざと斜めに押し込もうとしてもキーの引っ掛かり感はありません。(昔、斜めに押し込んでも引っ掛かりが無いパンタグラフタイプのキーボードが好きだった時期がありました)。メンブレンのラバーカップの変形する感触なのだと思いますが、押し始めがクニュっとして一番重い感じ。このクニュっとした感触がいまいち好きになれなくて、メカニカルのキーボードの方が好みなんだと思います。とはいえ職場で支給されたキー配置レベルでダメダメなキーボードに比べれば、このキーボードは十分ハッピーです。
あと、これも気のせいかもしれませんが、スプレー前よりもキーが重くなった?
今回は1週間くらい使ったくらいのほぼ新品に潤滑スプレー処理をしましたので劇的な改善はありませんが、斜めに押し込もうとしても引っ掛かり感はありませんので私の変な打鍵癖でキーが引っかかって入力されない(特にshiftキー)は改善されると思いますし、これだけ滑らかな打鍵感ならば高価なrealforceは私にはいらないと思いました。キーボード欲しい病がほぼ治りました。少なくともrealforceは欲しいものリストから削除されました。(茶軸のメカニカルはまだちょっと魅力的なのですけれどね)
2024年04月06日 エレコム廉価版キーボード TK-FDM105
短波ラジオPL-330メモ
マニュアルを見ないとわかりにくい使い方をメモ
スリープタイマー設定
電源OFF状態でPOWER長押し → チューニングダイヤルでタイマー時間設定
次から電源ONでスリープタイマーになる
スリープタイマーをOFFにするには再び電源OFF状態でPOWER長押ししてタイマー時間をOFFに設定する。
自動電源ON設定(アラーム)
電源OFF状態でALARM長押し → チューニングダイヤル(時)と音量ダイヤル(分)でON時刻設定 → ALRAM → チューニングダイヤルでONし続ける時間(分)を設定 → ALRAM
自動電源ON状態から操作可能な状態にする
POWER を押す = 操作を受け付けるようになる
自動電源ON状態(アラーム)を一時的に止めてスヌーズ
DISPLAYを押す = 自動電源ONを一時的に止めて、5分後に再び自動電源ON
自動電源ON時の放送局設定
聞きたい放送局に合わせ、"M" → ALARM → Enter(リターン);
中波放送のアンテナ切り替え(マニュアル非掲載)
中波放送受信中に "3"ボタン長押し → CH-S と表示される。バンド表示が"SW"も表示される。
この状態で、アンテナが内蔵バーアンテナから短波・FM用のロッドアンテナ(またはアンテナ端子に接続された外部アンテナ)に切り替わっている。受信周波数を変更するなど、何か操作すると表示は変わらないけれどアンテナが内蔵バーアンテナに戻ってしまう模様
再び "3"ボタン長押し → CH-A と表示され、バンド表示の"SW"も消える。アンテナが内蔵バーアンテナに戻る。
SSB受信時の周波数のキャリブレーション(マニュアル非掲載)
SSB受信中 チューニングステップを10Hzにしてゼロビートを取って "LSB"長押し するとその周波数がKHz単位に丸められる。(上手に表現できなくて申し訳ない)
ファームウェアバージョン表示(マニュアル非掲載)
電源OFF時にVF/VM長押し
ディスプレイがすべて表示され、次に右上に3306等と表示される。おそらく上2桁が機種を表し、下2桁がファームバージョン。
ファームバージョン 3305 は、SSB受信時に10Hzステップでチューニングしていてもチューニングダイヤルを早めに回すと50Hzに自動で切り替わる模様。
ファームバージョン 3306 は、チューニングステップが自動で切り替わらなくなっている模様。
2022年04月23日 短波ラジオ PL-330