libera/#maemo-leste/ Friday, 2024-11-15

dsc_alright00:16
dsc_thanks for confirming00:16
freemangordonhmm...01:12
freemangordonactually there is no bug01:12
freemangordonthis *is* master contact, but temporary01:12
freemangordondsc_: https://pastebin.com/wYyBdKvG01:24
pereAnyone had time to look at <URL: https://github.com/maemo-leste-extras/dorian/issues/18 > yet?12:47
siceloi saw it when i made my recent MR to dorian, but did not have time to attempt a fix. i will only start to have time at the beginning of December (I hope) ... but my TODO list is already packed.12:52
siceloi'm clueless with C++, but I could add this task on my todo as well if it'll still be useful12:54
pereI guess everyones TODO is packed.  four years later, my <URL: https://github.com/maemo-leste-extras/dorian/pull/17 > is still pending.12:59
freemangordonpere: I understand your frustration, but yes, we are basically 3-4 (at most) devs working in our spare time on the project and yes, things like working audio, conversations, contacts, phone calls, phone settings, etc are considered with higher prio than book reader. Believe me, it is not that we don;t want patches, but day is only 24 hours.13:15
peresure.13:16
freemangordonmaybe you can become maintainer of the said book reader13:16
freemangordondunno, now I see Wizzup being maintainer, but I guess that's because he imported it in the repos13:17
freemangordonWizzup: ^^^ what do you think13:17
pereat the moment maemo do not have any relevant usecases for me, have been considering using it as a ebook reader, but it is not working well, so my motivation for maintaining any of the packages is low.13:19
peredid also consider it as a address book, but lacked the time to figure out how to get my old dongle connected to my ical server.13:20
freemangordonI understand, however, could you elaborate on what is missing (besides the book reader that fits your needs, obviously :) )13:20
freemangordonhmm, I think we have instructions on wiki in regards to ical13:21
pereIt has been a while since I looked at it, but I have vague memories of having no way to keep the ical connect password only in memory, only found a way to store it on disk, and I do not want that.13:22
sicelopere: you use Leste on N900? or different device?13:35
siceloah, my other message was lost ...13:36
pereI got a old N900 which I might use as a simple PDA, not as a phone.13:36
n900i'm biased, but its also great for running weechat and lurking in this channel...13:37
* n900 goes back to lurking13:37
siceloso I was saying I can look at the open dorian issues and fix whatever I can. perhaps mid Dec, since early Dec I really need to focus on the L5 port13:37
freemangordonsicelo: want a short lesson on pointers etc? mow I have 10 minutes free13:39
freemangordon*now13:39
siceloyes, let's do it :-)13:41
freemangordonok, so...13:41
freemangordonimagine, for simplicity, a 16bit processor that supports only real addresses (no virtual addressing)13:42
freemangordonand lets assume it has 64KB of memory attached to its address bus13:43
freemangordonthat's the maximum amount of memory this CPU can address without hacks (like shadow mem , virtual addresses, etc)13:43
siceloyes, following13:44
freemangordonalso, assume linear addressing (no paging)13:44
freemangordonso, each byte of that memory will have address from 0000 to FFFF13:44
freemangordonok?13:45
siceloyes, am with you13:45
freemangordonso, consider this C code:13:45
freemangordonvoid main() {13:46
freemangordon  int a = 2;13:46
freemangordon  int *pa = &2;13:46
freemangordon  *pa = 3;13:46
freemangordon}13:46
freemangordonwhat we do here is:13:46
freemangordonwe declare a var and assign 2 to it13:46
siceloyes. understandable13:47
freemangordonit the 'real life', i.e. the memory of the CPU, this will mean that on some address (in the stack, as this is local variable) we will have value of 0x0002 stored13:47
freemangordonfor simplicity, lets assume that int is 16 bits on that platform13:48
freemangordonoops, I made a typo13:48
freemangordonint *pa = &2; should be int *pa = &a;13:48
freemangordonthis line gets the *address* of the memory where the value of a is stored13:49
sicelostack and heap I'm also not too clear about, but I guess that's not too relevant for this13:49
freemangordonit is not13:49
freemangordonthose are just different parts of memory13:49
freemangordonso, do you get the idea of "gets the *address* of...' statement?13:50
sicelo&a is the address. yes I get that13:50
siceloso *pa is what stores that address13:50
freemangordonso, if the value of a (0x0002) is stored at address 0xBEEF, then pa will have a value of 0xBEEF13:50
freemangordonexactly13:51
freemangordonso, '&' means 'take the address of'13:51
freemangordonis it clear so far?13:51
siceloyes,13:51
freemangordonBTW, the *value* of pa is also stored in the memory, lets assume on address 0xDEAD13:52
siceloright, yes make sense13:52
freemangordonanother thing - pa is *pointer to int*13:52
freemangordonwhich means 'this variable is of such a type, that it holds and address of a memory block that contains int value'13:53
freemangordons/and/an13:53
freemangordonwe can take the address of pa as well, with int **ppa = &pa;13:54
freemangordonmind those '**'13:54
freemangordonthis is pointer-to-poiner-to-int13:54
siceloright, yes13:55
freemangordonand we can do that as many times as we want, but in practice it stops at '***'13:55
freemangordonany questions so far?13:55
siceloi completely understand13:56
freemangordongreat13:56
freemangordonno, what we can do if we want to assign 3 to a13:56
freemangordonwe can simply do a=3;13:56
siceloa = 3 :-)13:56
freemangordonright13:56
freemangordonbut we can cheat, and do '*pa = 3' instead ;)13:57
freemangordonthat's called de-referencing13:57
freemangordonpa 'references' a as it hold a address13:57
sicelostore 3 in the location specified by pa?13:57
freemangordonexactly13:58
freemangordon'*' operator when used with pointer means:13:58
freemangordondo the next operation ( = in our case) with the *memory* that is pointed by the pointer13:58
freemangordonwe can do pa = (int *)3 as well13:59
freemangordonoperation in the brackets is called 'casting'13:59
freemangordonotherwise compiler will spit on us13:59
siceloyes, i know casting13:59
freemangordonso pa = (int *)3 will put 3 at memory address 0xDEAD instead of 0xBEEF14:00
freemangordonclear?14:00
freemangordonread the backscroll for which var is stored where in the memory14:01
sicelothis one's a bit confusing because it sounds like put the address of 3 in pa?14:03
freemangordonlook at it like pa = 314:05
freemangordon(int *) is to make compiler happy14:06
freemangordonif we want to 'take the address of 3' (which is not allowed), we shall do &314:07
siceloah right14:07
freemangordonone may ask why we need pointers at all?14:07
sicelothat i understand ...14:08
freemangordonok14:08
siceloso we can, for example, modify variables in place, e.g. strings14:08
freemangordon2 of the main reasons are - dynamic memory allocation and parameters passing14:08
freemangordonone note: C have no idea what 'string' is ;)14:09
siceloyes, i recall :-)14:10
freemangordoncool14:10
freemangordonok, so far anything unclear?14:10
siceloit's clear.14:11
freemangordoncool14:11
freemangordonnow, about . and ->14:11
freemangordonthose are used with structs14:11
siceloof course the `pa = (int *)3` example i'll need to revisit :-)14:11
freemangordonlemme elaborate on it14:12
freemangordonit will assign 3 to pa, and if you try to dereference pa by doing *pa = 5, most - probably you'll get segfault, as it will try to store 0x0005 at memory address 0x000314:13
siceloi see14:14
freemangordonusually addresses at the beginning of the address space are reserved for the OS, or interrupt vectors, etc. but that's irrelevant here - what is relevant is that you access address that does not belong to your program, simply to speak14:14
siceloignoring the (int *) part, so it's pa = 3 ... i.e. make pa hold 3, so the pointer points at 0x0003?14:15
freemangordonexactly14:15
sicelook. i was hung up on the (int *)14:15
freemangordonthat's just for the compiler14:15
siceloi think i get it properly now14:15
freemangordonnow, you cans see things like char *s = NULL; all over the place14:16
freemangordonusually pointers are initialized with 0 (NULL is defined as (void *)0 most of the times)14:17
freemangordonthis is done so if we use that pointer to hold address of a dynamically allocated memory, we can later on check if we need to free it or not14:17
freemangordonif (s != NULL)14:18
freemangordon  free(s);14:18
freemangordonno, . and ->14:18
freemangordonthose are used to access structure members14:18
freemangordon-> is used when you have a *pointer* to structure14:19
sicelowe need to free it if it's non-NULL?14:19
freemangordonwell, usually is it more complicated:14:19
freemangordonchar *s = NULL;14:20
freemangordonif (some_condition())14:20
freemangordon  s = malloc(128);14:20
freemangordonif (s)14:20
freemangordon free(s);14:20
moparisthebest"assume linear addressing" reminded me of this old gem: https://www.moparisthebest.com/images/how-memory-works.png14:20
freemangordonyeah, that's why I made that note at the very beginning ;)14:21
freemangordonsicelo: so, any specific questions you want to ask?14:23
sicelosorry, got disconnected for a moment14:23
sicelolet me re read14:23
siceloI think I still understand so far,14:24
sicelowhen is -> used14:26
sicelosorry, I mean .14:27
freemangordonso, it is not clear to you when '.' and when '->' are used?14:27
freemangordonsee this:14:28
freemangordonstruct struct1 {int a;};14:29
freemangordonstruct struct1 s1;14:29
freemangordonstruct struct1 *ps1;14:29
freemangordons1.a = 5;14:29
freemangordonps1->a = 8;14:29
freemangordon(*ps1).a = 9;14:29
freemangordonso, when you have a struct variable, you use '.' to access its members14:30
freemangordonwhen you have a *pointer* to struct variable you use -> to access it members14:31
sicelomakes perfect sense14:31
freemangordonor, you can *de-reference* that pointer and use '.' to access its members14:31
freemangordonthe last 3 lines ^^^ all do the same - assign a value (5,8,9) to 'a' member of 's1' variable, which is of type 'struct struct1'14:32
freemangordonsicelo: do you see anything wrong with my code ^^^14:34
sicelonowhere do you set ps1 to the address of s1, I think14:35
* freemangordon :claps:14:35
freemangordonhow would you write that?14:35
sicelostruct struct1 *ps1 = &s1;14:36
freemangordongreat14:36
freemangordon2 more things and I think we are ready:14:37
freemangordonin the ^^^ example ps1 was 'uninitialized pointer', pointing to some random address of the memory, so noone knows what happens when you de-reference it14:38
freemangordonthe same case at with pa = (int *)314:38
freemangordonuninitialized pointers are very bad, so you should be extremely careful, they are one of the reasons why people don;t like C14:39
freemangordonbut, what is even worse, are the so-called 'dangling pointers'14:39
freemangordonsee:14:40
freemangordonchar *s = malloc(128);14:40
freemangordons[10] = 'a';14:40
freemangordonfree(s);14:41
freemangordons[12] = 'b';14:41
freemangordonafter 'free(s);' line, s becomes 'dangling', and de-referencing it again leads to memory access of a memory that does not belong to us, but, the ugly thing is that memory *might* still contain valid data14:43
freemangordon'dangling pointer' bugs are usually very hard to catch14:43
sicelomust first set it to NULL?14:44
freemangordonwill not help14:44
sicelojust manually keep track of what you're doing?14:45
freemangordonbasicly :)14:45
freemangordonmy point was - one should be very careful when using pointers14:46
siceloi need to play with this some more14:46
freemangordonsure14:46
freemangordonlet it settle, please ask if anything is still unclear14:46
sicelowhat was the second thing? <<< freemangordon> 2 more things and I think we are ready:>> ... or it's uninitialized pointers, and dangling pointers?14:48
freemangordonyes14:48
freemangordonthose 2 types for 'bad' pointers14:48
Wizzupyes please take over maintainership15:13
Wizzup@ dorian15:13
Wizzup(if you want)15:13
siceloi can take it ... i think pere said he can't15:16
siceloanyway i guess who maintainer is doesn't matter too much ... MRs will be merged as and when they become available15:17
dsc_C is good if you have unlimited time for a project15:18
dsc_but in the real world... :D15:18
siceloisn't it on par with C++ though?15:22
siceloor what would make C++ dev faster?15:22
pereheh.  C got a lot of rope to hang oneself in, and C++ got all of that in addition a lot of guns to shoot yourself in the foot with. :)15:25
dsc_sicelo: I would say the same about c++ tbh ^^15:49
dsc_the reason everyone uses Electron is time-to-market15:52
perenote, I like both C and C++, and regularly program in both. :)16:16
dsc_my point was that both C and C++ take more effort, which is a useless statement to make because everyone knows already :D16:18
freemangordondsc_: well, if TTM is the only thing one cares about, then in wrong hands c/++ might take more time16:32
freemangordonbut, if you want to make your customer happy with what you do, then there are other things to consider16:33
freemangordonalso, c/++ is programming language, and what really matters are libraries16:34
freemangordonso, I don;t think TTM for a Qt project is much (if at all) longer than any other language16:35
freemangordondsc_: on a abook side: did you see what I pasted ^^^16:36
freemangordon*an16:36
dsc_yes thank you :)16:37
freemangordondoes it work?16:37
dsc_did not try16:37
freemangordonok16:37
dsc_about TTM, i am passionate about making GUI development more accessible/faster for programmers, I do think Qt is quite slow overall in terms of productivity compared to e.g web technology16:46
dsc_so I integrated Qt into a game engine and provide some high level API16:48
dsc_https://godotwebview.com/16:50
freemangordonOTOH, what I do for living is mostly backend development, and there are things we developed 20 years ago that are still in production, running 24/716:54
freemangordonso it really depends on what relations with the customer you have16:54
freemangordonif it is about 'grab the money and run', then yeah, TTM is the most important16:55
freemangordonif you want to establish long-term relations, not so16:55
freemangordonnot to say that it still matters if you require 16 CPUS/64GB RAM vs 2 CPUS/4 GB RAM, with the qt implementation running 10 times faster than the same thing running tomcat/java etc16:57
dsc_hmm yeah so generally speaking I disagree with you, but the context also matters. For Maemo it is good to make use of robust software, or however you want to classify it16:58
dsc_but for a commercial company, its best to focus on productivity, TTM, that kind of thing16:59
dsc_else you just get ran over by a competitor17:00
dsc_who uses Electron :D17:00
freemangordonno, it is not that simple17:00
freemangordontrust me, we basically run out of competitors here for the last 20 years, while using c/++ as main language17:01
dsc_hehe17:01
freemangordonno, really17:01
freemangordonprogramming language is just a techology17:02
freemangordonusually, for big commercial project, 1 or 2 moths mean nothing17:02
freemangordon*months17:02
dsc_but again, the context matters. Your sector absolutely requires robust/stable software. Not software made by college students on adderall, which is what sillicon valley runs on.17:02
freemangordonsure17:02
freemangordonand I agree that there is no "one size to fit them all"17:03
dsc_freemangordon: hmm18:43
dsc_==== haze/jabber/stevejobs_40xmpp_2ewajer_2eorg0-dsc@xmpp.is published: 118:43
dsc_1 = OSSO_ABOOK_PRESENCE_STATE_NO18:43
dsc_https://plak.infrapuin.nl/selif/65yv1a3g.txt18:43
dsc_https://plak.infrapuin.nl/selif/j6znzuqo.png <== added as friend18:45
dsc_let me check subscribed..18:45
dsc_ah ok, nvm it works18:46
dsc_published: 118:47
dsc_subscribed: 018:47
dsc_so I am subscribed but not published, even though the remote party can see my status18:47
freemangordoncould you show me the vcard?18:47
freemangordonroster one18:47
dsc_i noticed it does not print the vcard, but ill try again18:47
freemangordonit does here18:47
freemangordonG_MESSAGES_DEBUG=all OSSO_ABOOK_DEBUG=all18:48
freemangordonhmm, wait18:49
dsc_this is maybe my fault, I might be in a weird XMPP state18:50
freemangordondsc_: define OSSO_ABOOK_DEBUG18:50
dsc_  qputenv("G_MESSAGES_DEBUG", "all");18:50
dsc_  qputenv("OSSO_ABOOK_DEBUG", "all");18:50
dsc_this used to work18:50
dsc_ill try via commandline18:50
freemangordonyou have to #define OSSO_ABOOK_DEBUG18:50
dsc_oh define18:50
freemangordonmhm18:50
freemangordonhttps://github.com/maemo-leste/osso-abook/blob/master/lib/osso-abook-debug.h#L8118:51
dsc_cool18:52
dsc_yes that works18:52
dsc_lets see18:52
dsc_https://plak.infrapuin.nl/selif/pobma4ec.txt18:53
freemangordonX-TELEPATHY-PUBLISHED:no18:53
dsc_X-TELEPATHY-SUBSCRIBED:yes\r\nX-TELEPATHY-PUBLISHED:no18:53
dsc_yeah18:53
dsc_PEKBAC18:53
freemangordonheh18:53
freemangordonwrong message?18:53
dsc_its weird though18:53
dsc_published = no = remote cannot see my status18:54
dsc_but I can see it18:54
freemangordonso, what is the PEBCAK?18:54
freemangordonI see nothing wrong18:54
freemangordonah, right18:55
freemangordon1 is NO, 0 is YES18:55
dsc_status publish is no, so remote should not see my status (online/offline, etc)18:55
dsc_I think? not sure18:55
freemangordonme neither, lets read the docs18:56
dsc_with PEKBAC I meant that maybe I am not accepting the friend requests the right way18:59
freemangordonI see18:59
freemangordonlemme see what eds plugin does18:59
dsc_I do `contact->authorizePresencePublication()` for accepting19:00
dsc_and then I check the subscription state, if its 'no' I send a `contact->requestPresenceSubscription()`19:00
dsc_so that publicity for both directions is the same19:01
dsc_but ehh19:01
dsc_ill read some tp-qt code19:01
freemangordonI see some local/remote states19:02
dsc_freemangordon: I think you should not look into this, its for me to figure out19:07
dsc_thanks19:08
dsc_(since this is probably my fault)19:08
freemangordonstill, I want to understand how is it supposed to work19:08
freemangordonI agree there is no obvious problem in tp/abook19:09
freemangordonthe fuck? freedesktop.org went down :(19:10
dsc_https://plak.infrapuin.nl/selif/iu7je1to.png19:16
dsc_this is from pidgin19:16
dsc_it shows 2 statusses19:16
dsc_not sure if relevant19:16
dsc_nvm, its pidgin + maemo19:17
dsc_hmm ok it works now. I blame some weird state I got myself in earlier.19:23
dsc_(I blame Wizzup's server :P)19:23
freemangordonseems pidgin has issues, at least here19:23
freemangordonyeah, maybe the server is to blame19:24
freemangordongoing offline for a bit, to restart pidgin19:24
freemangordondidn't help19:26
freemangordonX-TELEPATHY-PUBLISHED:local-pending19:28
freemangordonwhatever is that supposed to mean19:28
dsc_http://maemo.org/api_refs/5.0/beta/libosso-abook/libosso-abook-osso-abook-presence.html#OssoABookPresenceState19:28
freemangordonyes, but what is that supposed to mean in TP terms19:29
dsc_:)19:29
freemangordonI see 'not authorized' in pidgin19:29
freemangordonand in the same time I can chat19:29
dsc_you can always chat19:30
freemangordonso, that relates to presence only?19:30
freemangordonwhat if it is blocked?19:30
dsc_yes19:30
dsc_ehhhhhhh19:30
freemangordonno messages from  contact19:31
dsc_X-TELEPATHY-PUBLISHED:local-pending <== I *think* this means you have to publish YOUR status (from maemo)19:31
dsc_to pidgin19:31
freemangordonno, that's the status of remote contact (the one in pidgin)19:32
dsc_i dont think so, but maybe you are right19:33
dsc_the connection manager adds these attributes19:34
dsc_from the perspective of CM19:34
dsc_so local = local19:34
dsc_maybe...19:34
freemangordonyeah, could be, but FDO is down and I can;t look into docs19:35
jrayhawkfreemangordon: oh, that's not good. I'll look into it.19:35
freemangordonjrayhawk: hmm, sorry, lost the context19:35
freemangordonah, FDO19:35
jrayhawkokay, i fixed it for now. not sure why that happened.19:36
freemangordonseems back up19:36
freemangordonjrayhawk: thanks!19:37
freemangordondsc_: https://telepathy.freedesktop.org/spec//Channel_Interface_Group.html#Property:LocalPendingMembers19:37
dsc_no, not group I think19:38
dsc_this is roster stuff19:38
freemangordonthis is the dbus interface that's used19:38
dsc_ok19:38
freemangordonbut the point is that you are right19:38
freemangordonI send "auth request" from pidgin19:38
freemangordon*sent19:39
freemangordonbut, no way to accept it from contacts19:39
dsc_right19:39
freemangordonI wonder if it is possible to to reset that state somehow19:39
freemangordonas it seems that's kept on the server19:40
dsc_yes19:40
dsc_in tp-qt this is `removePresenceSubscription` and `removePresencePublication`19:40
freemangordonremove?!?19:41
dsc_with state you mean subscribption/presence state?19:42
dsc_PendingOperation *requestPresenceSubscription(const QString &message = QString());19:42
dsc_PendingOperation *removePresenceSubscription(const QString &message = QString());19:42
dsc_PendingOperation *authorizePresencePublication(const QString &message = QString());19:42
dsc_PendingOperation *removePresencePublication(const QString &message = QString());19:42
freemangordonhttps://telepathy.freedesktop.org/spec//Connection_Interface_Contact_List.html19:42
freemangordonI think this is the correct doc19:42
dsc_it is, yes19:43
dsc_for removePresenceSubscription, tp-qt eventually calls https://telepathy.freedesktop.org/spec//Connection_Interface_Contact_List.html#Method:Unsubscribe19:43
freemangordonphew: https://telepathy.freedesktop.org/spec//Connection_Interface_Contact_List.html#Contact-Attribute:subscribe19:43
freemangordonfinally19:43
freemangordonyeah, we must read that couple of times :)19:44
dsc_xD19:45
dsc_this removal is another thing I wanted to bring up, because I dont think I get signals when the remote does that19:47
dsc_but not now19:47
freemangordonI think you shall get some 'remote-rejected' state19:48
freemangordonok, there is something wrong with the sever, I was seeing presence before requesting authorization19:52
freemangordon*server19:52
dsc_I delete stevejobs (maemo) from my friendlist and the only thing that seems to change is online->offline, it will still say X-TELEPATHY-SUBSCRIBED:yes\r\nX-TELEPATHY-PUBLISHED:yes19:52
dsc_well ok, this is from perspective of local19:53
dsc_but still, I expect a signal19:53
freemangordonyou have contact-changed signal, no?19:53
freemangordonor rather - contacts-changed19:53
dsc_yes, this fires because status change (online->offline)19:54
dsc_but still X-TELEPATHY-SUBSCRIBED:yes\r\nX-TELEPATHY-PUBLISHED:yes19:54
freemangordonyes, that's the local state, no?19:54
dsc_yes19:54
freemangordonso I see no issue19:54
dsc_true19:54
freemangordonon a side note - I am really glad abook/eds plugin handle all this properly19:55
freemangordonthis code was never tested outside fremantle19:56
dsc_yes :) it works well19:56
freemangordonmhm19:56
Wizzupsicelo: icon for OTP? :D21:02
sicelostill on the way 🤭21:08
Wizzup:D21:23
siceloWizzup: maybe give me access to dorian repo already21:35
Wizzupsure21:40
Wizzupbtw guys, work really caught up with me, which I haven't been too active21:40
WizzupI'm getting back into the all of this soon21:40
dsc_Wizzup: website :)21:41
Wizzupsicelo: you should have access now21:41
Wizzupdsc_: ok, after this mtg I will do it :)21:41
sicelothanks!22:26
dsc_im finished but needs some testing23:12
dsc_will continue tomorrow23:12
Wizzupdsc_: on the website or something else?23:15
dsc_on Tp stuff23:19
dsc_website is OK23:19
siceloWizzup: btw addition in github repo also automatically grants on Jenkins side?23:19
siceloseems not. Please also add me Jenkins side when you find a chance.23:27
arno11is it a new repo or ?23:28
peresicelo: look like I will have to dig out my n900 tomorrow to test the new dorian. :)23:28
sicelopere:  https://github.com/maemo-leste-extras/dorian/issues/18 is fixed now, at least the URL. the error checking will have to wait for another day. should hit the repos as soon as build has happened23:29
siceloyeah, please do ;-)23:29
sicelohowever, https://github.com/maemo-leste-extras/dorian/issues/12 becomes more visible. unfortunately that's something that, at least from my end, has to wait23:30
peresicelo: do you use dorian yourself to read books?23:31
siceloi used to read them a lot on fremantle. nowadays no, not really. and the search function i had never used even under Fremantle23:32
siceloi still have dorian installed on leste for whenever i get an epub to read, hence i fixed the volume key based page navigation about a week ago since i was so used to that from fremantle days23:33
siceloarno11: no, old repo, and i've just taken up maintainership.23:38
sicelodorian e-book reader, in case you do use it :-)23:38
arno11ah ok23:45
arno11i never tried it btw23:45

Generated by irclog2html.py 2.17.0 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!