そういえば2025年になってた
2025年になりました。
去年(2024年)は割とこのページを更新した方ですね。
今年もよろしくお願いいたします。
2025年01月10日 独り言
xdomain.jpからのお引越し
お知らせです。
このWebページは@niftyとxdomain.jpに置いてありますが、xdomain.jpの方は2025年7月31日にサービスを終了するとのことですので、お引越しします。
廃止: xdomain.jp
移転先: XServer Static
@niftyは今のまま残ります。
はて、xdomain.jpは無料だけれど数か月に一回利用期間の更新が必要で、更新しないと消えてしまうサービスだったのですけれど、XServer Staticはそのような説明書きがありません。もしかしてXServerのサービスが終了するまでずっと残るのかしら
2025年02月01日 このページのリフォーム
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日 プログラミング雑談
スマホを買ってきた
今まで使っていたスマホは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日 独り言
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日 独り言
AndroidStudioでjavaを使うまでにいきなり壁
やっと重い腰を上げて小遣い帳アプリを書こうとしているのに、AndroidStudioで入門書を見ながらEmpty Activityを作るとjavaが選択できずkotlin一択になる。
Geminiさんに聞いても「最新のバージョンのAndroidStudioではJavaが使えない場合があります」などと冷たいコメントしかないし。
ググってもなんかアフィリエイト目当てっぽい、どこかのチュートリアルをそのまんま引き写したような古い情報に基づく記載しかないサイトばっかりヒットするし。
結局、qiita内のサイトが一番頼りになりますね。javaを選択するにはEmpty Views Activityを選択する必要がありました。
いきなりこんなところに壁を作らなくてもいいのに。
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月連休が終わるまでに自分が使えるレベルにしたかったけれど、こりゃちょっと難しいかなぁ
ysktrt.moneynoteのデータをインポートできた
Android14で動かないysktrt.moneynoteのデータを読み込めて、今後も小遣い帳として使い続けるためのysktrt.moneynoteとデータ互換のある自作アプリの開発中。
Androidアプリはチュートリアル本見ながらHello worldしただけのレベルだからつらい。
やっとysktrt.moneynoteでエクスポートした小遣い帳データを読み込んでDBに入れる処理が書けた。とりあえず動いたってレベルでしかないけれど。
さて、次はデータを表示する処理を書かねば・・・。その次は日々の入出金を入力する処理。過去データを検索する機能も欲しいな。
最初は5月連休中に使い始められるレベルまでもっていきたかったけれど、この調子では今年中に使えるようになる事やら。
2025年04月14日 プログラミング雑談