Sorry for the delay with the meeting notes and log.

The meeting started and ended a bit earlier than usual. My apologies to
anyone that missed out on the beginning part. Here is a summary of what
was discussed:

  * The GeneralPlugin class was discussed a bit and some modifications
    are planned.

  * Some ideas about how user information is stored and shown in the
    GUI of all the plugins were discussed. This isn't done and still
    needs some more work. I will do some research to see how much of a
    performance hit we will take if use a structure like CEventData for
    the user information as well.

  * Some explanations about the current classes in the Licq Wiki were
    explained a bit.

I would also like to say that the new development branch should try to
make as best use of the STL as possible. The current release of Licq
uses the STL a little bit, mainly because at the time it was written
(1999) the STL was not completely supported on the compilers. But now
all modern compilers support it. I'd also like to see the Boost
(www.boost.org) libraries used were applicable.

The goal is to make it as generic and extend-able as possible to support
many plugins including a sort of plugins of plugins (for example.. to
support video chat). It should be able to be done with C++ using the
modern tools available now. I have a few new books to read that should
also help me out to make better design decisions.

Jon


-- 
________________________________________________________
Jon Keating                ICQ: 16325723
[EMAIL PROTECTED]               MSN: [EMAIL PROTECTED]
http://www.licq.org        GPG: 2290A71F
http://www.thejon.org      HOME: Minamiashigara, Japan
--- Log opened Wed Apr 26 19:45:42 2006
19:45 <@emostar> Ok, lets start the meeting
19:46 <@emostar> It's a little early, so people will join us as we progress
19:46 <@emostar> So, yesterday I started a new branch in SVN and started 
working on the new source files
19:47 < QnD> yes, okay ... enough time ti ask questions about the 
LicqCallback-thing you wrote. I must confess that my C++-knowledge doesn't go 
that far, so I don't understand anything ...
19:47 <@emostar> There are many things to change, so it will take some time 
before we get a working version completed
19:47 < QnD> ti = time
19:47 <@emostar> ok.. are you looking at the wiki now?
19:47 < QnD> yes
19:48 <@emostar> the LicqCallback definition?
19:48 < QnD> yes ...
19:49 <@emostar> so the class for callbacks that will be used is the 
LicqCallback class. its a templated class so it will support any object and any 
function
19:50 <@emostar> that way the plugins can specify their object and the member 
function in that class
19:50 <@emostar> and the daemon doesn't have to know anything about the object
19:50 < QnD> hm ... can you give an example?
19:50 <@emostar> theres one on the wiki :)
19:51 < QnD> really :)? one moment ...
19:51 <@emostar> LicqCallback *pObject = new 
LicqCallback<CClass>("user-status-change", this, CClass::handleStatusChange);
19:51 <@emostar> pDaemon->registerCallback(pObject);
19:51 < QnD> oh, yes, there ...
19:52 < QnD> and what does "operator" mean?
19:52 <@emostar> do you understand the example?
19:53 <@emostar> void operator()(void *) is the () operator
19:53 <@emostar> we overload it
19:53 < QnD> yes, I do ... although I always thought that only static member 
functions of a class can be set as a parameter
19:53 < QnD> why do you overload it?
19:54 <@emostar> to make calling the object easier.. there has to be a way to 
execute the callback
19:54 <@emostar> so it can be done like object(param);
19:55 <@emostar> otherwise we have to add a member function to execute it.. 
liek "run"
19:55 <@emostar> so then it would be object.run(param);
19:55 <@emostar> but the () operator is meant to run a function.. so its best 
to use it
19:56 < QnD> aah! I remember ... have read the "operator" line the wrong way 
(and asked myself "why does he define an "operator"-function), all clear now
19:56 <@emostar> it kinda makes the object be a function object..
19:57 <@emostar> and the LicqCallbackBase is used to put the callback objects 
in an STL container
19:57 <@emostar> std::list<LicqCallback> doesnt work because its a template
19:58 < QnD> yeah!
19:58 <@emostar> so if you make all of them have a common base, you can put the 
pointer  tothe LicqCallbackBase in a STL container
19:59 < QnD> yes, sure ... 
19:59 <@emostar> that or a boost::shared_ptr would do the trick
20:00 <@emostar> and like we talked about last week.. i made a class 
(CEventData) that will allow the params to be taken out by a string name.. and 
support any object (nearly)
20:00 <@emostar> http://wiki.licq.org/ProtocolEvent has the details
20:01 < QnD> okay ... looks good.  another question: how do you give the 
constructor of LicqCallback the callback function? 
20:01 < QnD> yes, already saw that - exactly what I meant
20:02 <@emostar> like the example...
20:02 <@emostar> LicqCallback *pObject = new 
LicqCallback<CClass>("user-status-change", this, CClass::handleStatusChange);
20:02 <@emostar> the function we are giving is CClass::handleStatusChange()
20:02 <@emostar> technically CClass::handleStatusChange(void *)
20:02 < QnD> yes, but as I wrote above I thought that only static member 
functions can be used as a pointer ...
20:03 <@emostar> nope, any function can be used as a pointer
20:03 <@emostar> because it isnt static, we pass the class pointer to the 
constructor as well
20:04 <@emostar> in the operator() part it does object->*function()
20:04 <@emostar> we pass both object and function in the constructor
20:05 < QnD> alright ... (you see: neber hat the time to learn much about C++). 
ah, I see now
20:06 <@emostar> hmm might be good to pick up a book ;) i'd like to see most of 
the work done using STL.. since that makes things so much easier and will save 
us time
20:06 <@emostar> and not to mention that it makes more efficient code
20:06 < QnD> yes, bought a book about C++ ;)
20:07 <@emostar> whos the author?
20:07 < QnD> Stroustrup
20:07 <@emostar> The C++ Programming Language?
20:07 < QnD> hmyes
20:08 <@emostar> ahh, i have that one too.. its very good for STL
20:08 <@emostar> rather dry.. but its the best book out there i believe
20:08 < QnD> yes, and expensive :)
20:08 <@emostar> the only thign i regret is i left that book in america... will 
bring it back the next time i go home
20:08 <@emostar> i have my assembly book with me though :\
20:09 < QnD> yes, seems to be a good reference book.
20:10 <@emostar> 
http://books.google.com/books?id=n9VEG2Gp5pkC&pg=PA2&lpg=PA2&printsec=8&ots=Rci8jmccXR&dq=The+C%2B%2B+Standard+Library&sig=vYOyCr1Gzn2uhkn3pNOBf0lEfTk
20:10 <@emostar> thats the stl "bible"
20:10 <@emostar> anyways..
20:11 <@emostar> i'd like to think we have some solid structures that are quite 
flexible.. but only time will tell when we write code with them :)
20:11 <@emostar> if you saw my latest commit in the newapi branch.. all plugins 
(not protocol though) will derive from this class
20:12 < QnD> $64.99 for this book - what a world .... 
20:12 < QnD> havn't had time to have a look into the new branch yet
20:13 <@emostar> only one new file.. include/licq_generalplugin.h
20:13 <@emostar> and yes.. these books are expensive..
20:13 <@emostar> even more so if you dont live in america
20:15 -!- Rapp [EMAIL PROTECTED] has joined #licq
20:15 <@emostar> you are on the licq-cvs mailling list, right?
20:16 < Rapp> hi
20:16 <@emostar> hello
20:16 <@emostar> Rapp: i got your ssh key.. but i forgot, i will also need your 
sf.net user name
20:16 < QnD> no, just on licq-devel
20:16 < Rapp> oh, i have to look that one up...
20:17 <@emostar> QnD: well, if you are going to participate on the latest 
development.. the licq-cvs mailing list is critical..
20:19 < QnD> hm, always thought licq-DEVEL is for development :)
20:20 < QnD> however, will join it now
20:20 <@emostar> well it is for development, but licq-cvs has the latest code 
changes.. which don't necessarily get discussed on licq-devel
20:21 < QnD> good argument
20:21 <@emostar> i use an svn mailing list at work.. even though the other 
people on the list are within talking range.. just makes it easier for everyone 
to see a diff and review that or peruse it
20:23 < QnD> yes ...
20:24 < QnD> just took a look at generalplugin.h - this should really be 
everything that's needed ...
20:24 <@emostar> yeah, i was hoping so.. not that much different from the 
current method.. just making it C++
20:24 < QnD> (except a thing like a plugin description)
20:25 <@emostar> yeah... not sure if we really need that or what
20:26 <@emostar> but i have no issue with adding it if there is a good reason..
20:26 <@emostar> perhaps its better to have it.. so a descriptoin can be shown 
before the user loads it or something
20:27 < QnD> yes ... although this requires loading (not running) of all plugins
20:28 < QnD> (a description is quite important, because plugins can now be much 
more specific)
20:28 <@emostar> yeah.. but if the user has the plugin "installed" then it may 
not be unreasonable to load it for some information
20:28 < QnD> right
20:28 <@emostar> so i will add that
20:30 < QnD> another thing: I thought about plugin dependencies (here we go 
shake-window-plugin): a shake-window plugin cannot be loaded without the msn 
plugin being installed ...
20:30 <@emostar> hmm yes.. that should be done at the beginning of plugin 
initialization
20:30 <@emostar> that way it can quickly escape if it is not present
20:31 < QnD> and should also be another peace of information the plugin gives 
to the daemon
20:31 < QnD> (before loading)
20:31 <@emostar> hmmm.. it can be done without the daemon handling it i believe
20:32 <@emostar> what i think is best...
20:32 <@emostar> the daemon allows the plugin to see what plugins are loaded.. 
so when it is initialized it can check for that plugin's presence
20:32 <@emostar> if it is not there, throw an exception so the daemon knows it 
is missing a required plugin and can provide the feedback to the user
20:32 < QnD> hm, but this will require things like checking, giving an error 
message ... which must be done by every plugin by itself
20:33 < QnD> ah
20:34 <@emostar> if (!pDaemon->isLoaded("msn")) throw MissingPlugin("msn");
20:34 <@emostar> actually it can past a list to the daemono for it to check..
20:34 <@emostar> i just dont think that it will be used so much
20:35 < QnD> hm, my idea was just to provide a kind of string array to the 
daemon that lists the required plugins. if the required plugins are not there 
they could either be loaded or an error message could be thrown
20:35 <@emostar> hmm with the plugins of plugins idea.. it may be used a lot
20:35 < QnD> yes
20:36 <@emostar> so yeah.. putting that in the daemon would be nice.. and it 
can also be displayed in the plugin info before it is loaded..  so the user 
knows what the requirements are
20:36 < QnD> yes
20:36 <@emostar> i will add that as well
20:37 < QnD> another thing: do you already have plans how the info-struct of a 
user should look like?
20:38 <@emostar> havent gotten to that point yet
20:38 < QnD> ah, okay ... 
20:39 <@emostar> have you given it any thought?
20:40 < QnD> hm, that's everything I wanted to talk about for today :)
20:40 <@emostar> hmm works out well so that i can take the train i wanted to 
then ;)
20:40 <@emostar> just one more thing
20:41 <@emostar> if you are gonna have svn access, i need a public ssh key and 
your SF.net username
20:41 < QnD> no, not really - thought about string accessors again, but this 
might not be a good idea concerning performance
20:41 < QnD> ah, yes ... wait
20:41 <@emostar> yeah, i was thinking the same thing...
20:42 <@emostar> we can have a ton of functions like now (and a huge vtable)
20:42 <@emostar> or somethign like CEventData
20:43 <@emostar> perhaps CEventData isn't that big of a performance hit.. i 
will do some work later to check into this
20:44 < QnD> the most important thing is how to group the information later. it 
would be great to have some kind of info window that can cope with every 
information a proto plugin could provide ...
20:45 <@emostar> yes  that would be nice
20:45 <@emostar> especially since ICQ has the largest info window of any 
protocol
20:45 < Rapp> maybe some sort of tree structure would make sense?
20:46 < Rapp> for grouping the information?
20:46 <@emostar> hmm.. i will have to give it some consideration
20:46 < QnD> also thought about that - but maybe this was not the best idea 
because information may be grouped in a different way to provide a good look 
and "lucidity"
20:47 < Rapp> yeah...
20:47 < Rapp> depends on how "general" we want to be
20:47 < Rapp> a 1:1 mapping for every possible protocol would be quite hard, if 
you had a fixed layout like now
20:48 < QnD> yes ... but these questions will probably be answered as soon as 
there's a concrete way of how to do the GZUI things
20:48 <@emostar> maybe some kind of heirarchy would be best.. to help display it
20:48 < QnD> GZUI = GUI
20:48 < QnD> what do you mean?
20:48 <@emostar> like a General -> Name
20:49 <@emostar> Work -> Company Name
20:49 <@emostar> then the gui knows to show all the General items together
20:49 <@emostar> and the Work is a different grouping
20:49 < QnD> hm... yes
20:50 <@emostar> im sorry, but i have to get going
20:50 < QnD> but still this information cannot be just shown one after the other
20:50 < Rapp> yes, that is actually a tree :) you could do it as tabs or as a 
tree view
20:50 < Rapp> ok, cu
20:50 < QnD> yes, no problem - see you later
20:50 < Rapp> gotta get back to work, too :)
20:50 <@emostar> alright, i will leave the log running if anyone else joins in 
;)
20:50 <@emostar> and will post it after i have dinner with my gf
20:51 < QnD> okay, Bon appétit!
20:51 <@emostar> thanks :) talk with you later.. email me your ssh key and 
sf.net info!
20:51 < QnD> okay :)
20:52 <@emostar> ok.. see ya
20:52 < QnD> yep
20:53 -!- BDick [EMAIL PROTECTED] has joined #licq
20:58 <@Agrajag-> ahh crap
20:58 <@Agrajag-> i got the time wrong
20:58 <@Agrajag-> bugger it
21:05 < Rapp> lol
21:06 <@Agrajag-> heh
21:06 <@Agrajag-> well i read up and i checked out the wiki stuff this morning, 
it's all looking good
21:12 <@Agrajag-> well i got my brother who uses gaim to check out how it does 
user info GUI stuff. it just gets the protocol plugin to give back an html 
string which it displays in one big area. it's simple i guess, but less than 
ideal for displaying the information nicely (and the plugins have to do more 
work)
21:15 < Rapp> yup, that's why i think some form of tree would be great. like 
some simple pointered struct or an XML string. that can be displayed as tabs or 
also as a tree widget or something else.
21:16 <@Agrajag-> yeah, that sounds good. an xml string describing (i guess 
similar to gtk's glade) the tabs/info would be cool
21:17 <@Agrajag-> and it wouldn't have to be too complicated because i don't 
imagine there would be the need for many different types of widgets
21:17 < Rapp> no, it could be simple
21:18 < Rapp> only types needed are string and maybe picture
21:18 < Rapp> the nested XML tags would give the natural hierarchy.
21:19 <@Agrajag-> yeah.. looking the icq info now there's also a tree thing in 
More II
21:19 < Rapp> if one thinks that XML is too bloated, of course everything could 
be mapped to some struct with pointers
21:19 < Rapp> right
21:21 <@Agrajag-> it would also need to be generic enough that it can be 
displayed with any gui, be it qt/gtk/ncurses
21:21 < Rapp> that is not a problem i think
21:21 < Rapp> i can write you a small XML treeview thingy :)
21:21 < Rapp> for console
21:22 < Rapp> we even do not need a full blown XML parser
21:22 < Rapp> we really only need very simple and specialized tags
21:23 <@Agrajag-> yeah.. but i think we'd want it to be extendible to an 
extent, so that if one day some other plugin comes along that wants to display 
something else, it would be simple enough to add
21:23 < Rapp> yes of course
21:23 < Rapp> but i think an XML example for our case would look like:
21:24 < Rapp> <Userinfo><category name=?General?><text label=?Alias? 
value=?John Doe? />...</category>....</Userinfo>
21:24 < Rapp> you will not need much more
21:25 < Rapp> instead of <text> you could also use a <picture> tag
21:25 <@Agrajag-> yep
21:25 < Rapp> i cannot think of much more that one could need
21:59 -!- QnD [EMAIL PROTECTED] has quit [Remote closed the connection]
--- Log closed Thu Apr 26 22:00:39 2006

Attachment: pgpARjDn36vT9.pgp
Description: PGP signature

Reply via email to