トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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;

とか.楽しいかも.