FrontPage
みよ@わさもん.ねっと
遊んだこととか、ちょっとしたメモを書いています。
最近の更新
Diary/2026-3-2 / Diary/2026-3-1 / Diary/2026-2-23 / Diary/2026-2-22 / Diary/2026-2-21
Miyo's Diaryの最新の5件
2026-3-2
クリーンルーム
東大のクリーンルームの見学をさせてもらった.
連邦基準のクラス1,100,1000.
こういうところで日々実験するの大変そうだけど楽しそうだなあ.
2026-3-1
気づいたら
3月.今年も1/6が過ぎました.
2026-2-23
akonadiでカレンダみてみる
KOrganizerのバックエンドであAkonadiにSQLiteでアクセスできるようなので,
Python使ってアクセスしてみた.
とりあえずベーシックにはこんな感じ.
SQL文でデータ減らせるのが望ましいけど,複雑な条件書くのも面倒だよね,という感じ.
ちなみに,PartTableはblob形式で文字列ではないので注意.
import os
import sqlite3
from icalendar import Calendar
from datetime import datetime, date
import pytz
def main():
db = f'{os.environ["HOME"]}/.local/share/akonadi/akonadi.db'
conn = sqlite3.connect(db)
cur = conn.cursor()
cur.execute(f'''
SELECT p.id,
CAST(pt.data AS TEXT)
FROM PimItemTable p
JOIN PartTable pt ON pt.pimItemId = p.id
WHERE p.mimeTypeId = 3
AND instr(pt.data, 'BEGIN:VCALENDAR') > 0
''')
count = 0
for item in cur:
count += 1
k,v = item
print(v)
print(f'#. of items = {count}')
if __name__ == '__main__':
main()
ちょっとビューワ作ってみようかと思ったけど,
繰り返しの予定(RRULE)で,日付が変更になったり取消しがあったりするものの扱い(RECURRENCE-ID,EXDATE)や
複数の日に渡る終日の予定など,結構,扱いが面倒なものがあって,一旦ペンディング.
ちなみに,データの更新は,
busctl --user call org.freedesktop.Akonadi.Agent.akonadi_google_resource_0 / org.freedesktop.Akonadi.Resource synchronize busctl --user call org.freedesktop.Akonadi.Agent.akonadi_google_resource_2 / org.freedesktop.Akonadi.Resource synchronize
とした.
ここで,引数の,
org.freedesktop.Akonadi.Agent.akonadi_google_resource_0
と,
org.freedesktop.Akonadi.Resource synchronize
は,
busctl --user list | grep Akonadi
で得られた結果
org.freedesktop.Akonadi.Agent.akonadi_google_resource_0 876669 akonadi_google_ miyo :1.854 session-c3.scope c3 -
をみて,さらに,
busctl --user introspect org.freedesktop.Akonadi.Agent.akonadi_google_resource_0 /
とすると,
org.freedesktop.Akonadi.Resource interface - - - .name method - s - .requestItemDelivery method axaay - - .setName method s - - .synchronize method - - no-reply .synchronizeCollection method x - no-reply .synchronizeCollection method xb - no-reply .synchronizeCollectionAttributes method x - no-reply .synchronizeCollectionTree method - - no-reply .synchronizeRelations method - - no-reply .synchronizeTags method - - no-reply .attributesSynchronized signal x - - .collectionTreeSynchronized signal - - - .nameChanged signal s - - .synchronized signal - - -
と,して探し出す.
2026-2-22
自転車出勤
天気が良いようなので久しぶりに.
今日は,少し遠回りになるけど分かりやすい道を選んでのんびりと.
おかげで,会社についてすぐに仕事に取りかかれる程の疲労感.
2026-2-21
KOrganizer
個人で取得しているGoogleアカウントとQ社のGoogle Workspaceのカレンダを
切り替えるのが面倒と思いながらも,
Q社のGoogle Workspaceで独自のOAuthトークン取るのが面倒(仕事用なのでなんか違う気もする)
という状況で,両方のカレンダをうまく閲覧する解決策を思いついてなかった.
正確に言うとmacOSやiPadのカレンダアプリは便利だなと思いながら,
普段の生活環境がLinuxなのでどうにかならないかなと思っていた.
というところで,KDEのakonadiだと独自にOAuthトークンとらなくても
認証通せるようなので,akonadiとkorganizer環境を作ってみることに.
ホストはXUbuntu 24.04.インストールは,
sudo apt install korganizer akonadi-backend-sqlite
でOK.
korgnaizerを起動して,Settings -> Configure KOrganaizer...で設定ダイアログひらいて,
GeneralのCalendarsでGoogleカレンダを登録する.
とりあえず,どちらのカレンダも表示することができた.
しばらく生活してみるか.
しかし,OkularといいKOrganaizerといい,随分KDEアプリが増えてきた.
そのうち,デスクトップ環境をKDEに移行するかなあ.
ちなみに,akonadiのDBは,SQLiteなので,sqlite3で叩ける.
$ sqlite3 ~/.local/share/akonadi/akonadi.db sqlite> .database main: /home/miyo/.local/share/akonadi/akonadi.db r/w sqlite> .tables CollectionAttributeTable PimItemTagRelation CollectionMimeTypeRelation RelationTable CollectionPimItemRelation RelationTypeTable CollectionTable ResourceTable FlagTable SchemaVersionTable MimeTypeTable TagAttributeTable PartTable TagRemoteIdResourceRelationTable PartTypeTable TagTable PimItemFlagRelation TagTypeTable PimItemTable sqlite> SELECT COUNT(*) FROM PimItemTable;
とか.楽しいかも.