› Foros › PC › Software libre
Hi All and welcome to a whole new world!
In this email, I will be announcing our current plans for aMSN2, finally, the veil is coming off and you will all get to look at the new path we're taking!
I know some of you already know of all this, and some of you were eagerly waiting for it for a long time. No more rumors.. no more maybes... here's the deal!
aMSN2 is a total rewrite of aMSN 0.x. It will not be in tcl/tk. For the greatest pleasure of many of you, we decided that the best suited programming language for such a project is python!!
So, all python lovers rejoice, and all python haters, sorry, too bad, live with it!
We didn't want to say anything publicly about aMSN2 to avoid any kind of flame war or anything like that, we're used to all those flame wars happening whenever the choice of the language is being discussed, now, the choice is made, the code is written (partially) so it is useless to start debating this, so please, refrain from any useless debate.
Another big issue was the choice of the toolkit.. some people might prefer gtk, others would like qt... mac users will want a native cocoa application, and the same goes for windows or whatever toolkit you can think of... We researched that a lot and trying to choose wisely which toolkit to use...
We had a list of requirements and were trying to find which toolkit would answer those requirements the best...
- GTK did not fit the requirement of being able to have a background image on a text widget (unless doing a lot of hacking and reimplementing the text widget)...
- QT did not fit the requirement about the performance....
Which one to choose... well, we decided to go with something completely different : EFL
For those who do not know what it is, the EFL is the Enlightenement Foundation Libraries. It's a set of libraries that makes building UIs such a beauty! It only has one.. euhh.. two... humm.. a few problems :
1 - there are still no releases of the EFL.. so anyone willing to test this needs to compile the huge set of libraries from CVS
2 - the APIs might change until the libraries are released...
3 - we cannot embed an image inside a text widget.. so no smileys support...
The first two issues are easily dealt with : we don't care.. anyways, it should be released by the time amsn2 gets finished... the last one (embeded images/smileys) is resolved with another solution : use webkit (html engine) for drawing the contact list and chat window text widgets....
But most importantly, we wanted to create a 3 level design that would help us have a 'pluggable' front end... allowing the user to choose which toolkit he wants...
So I am pleased to announce that aMSN2 will be a multi-front-end application!!!
We currently have an EFL front end, a native cocoa front end for Mac users, a ncurses front end, and.... a gtk front end!
There might also be someone working on a QT and/or a XUL front end soon...
We obviously do not want to be maintaining all of those front ends, so there will be development teams who take care of their own front ends.. for now, whether the aMSN team will give support for only one officially chosen front end or to none is still unclear... but I am proud to announce that :
The GTK front end will be maintained by the emesene developers team!
We had a few discussions with the emesene developers and they were interested in joining forces with aMSN. We now have 4 new members who will be joining us in the development of aMSN2 :
Mariano : developer of emesene who wants to work on aMSN2 in general.
Dx : also developer of emesene who wants to work on the gtk front end and maybe the core/protocol of aMSN2
Jandem : another developer of emsene who is working on the gtk front end.
Alen : former emesene developer and currently lead developer of the elloquence messenger client. He wants to work on the gtk front end, the protocol layer and maybe the EFL front end too.
So this is great news, as you know, emesene is really a beautiful client that is emerging so fast in the scene, and has become a growing "competitor" to aMSN in the last months, and having the emesene team on board is a great honor!
I am also pleased to announce our collaboration with the pymsn developers (Ali Sabil, Johann Prieur and Ole Andre Vadla Ravnas). aMSN2 will be using the pymsn library for all the protocol related work. Pymsn is a greatly designed library that was the first to implement the MSNP15 protocol and already has the necessary changes (in a branch) for an MSNP16 implementation. I will join them into improving the pymsn library so we can have a growing protocol library that follows aMSN2's features.
Finally, here is a link to a screencast showcasing both the GTK and the EFL front ends of aMSN2.. Note that for now only the login screen and contact list are implemented (partially) :
http://www.amsn-project.net/~kakaroto/e ... n2-v4.mpeg
I hope you enjoy this video!
You can also have a look at this screencast of Elloquence, the client being built by Alen, as well as a screenshot of its login window in the following links :
http://alencool.googlepages.com/elloquenceTest2.avi
http://alencool.googlepages.com/elloquencelogin.png
Or you can run emesene/elloquence to see what aMSN2 might look like when you choose the gtk front end, once the work is completed.
The source code will soon be added to our public SVN so others can enjoy it, read the code, and global collaboration can begin!
Thank you!
KaKaRoTo
K. Ichigo escribió:Notición!!
Y además en Python... Buff pinta muy bien. Desde hace tiempo uso emesene sin embargo.
Si alcanza la velocidad de emesene, con soporte para webcam etc... me pasaré a aMSN.
Por cierto, el hecho de que algunos desarrolladores de emesene colaboren con aMSN2, significa que dejarán de banda emesene para unir sus esfuerzos en un único cliente? (aMSN2)
NaNdO escribió:
aMsn soporta webcam.
Hi All,
This email is to explain a bit the design and structure of aMSN2.. so it's leaning more towards developers than towards users...
As I explained in my previous mail, the design is simle :
1 - three layers : protocol, core, gui
2 - the protocol is taken care of by pymsn
3 - the gui is abstracted and any front end can be used (multi-front end client)
4 - the programming language is python...
So for the technical details, first, download the source code. I've now imported it into our public SVN, and you can get it from the SVN URL : https://amsn.svn.sourceforge.net/svnroo ... runk/amsn2
You will see the three layers in the amsn2 subdir, we have :
gui/
core/
protocol/
The idea is that the protocol layer will be the glue between pymsn and the core, it will receive events from the core and notify pymsn, and it will receive events from pymsn and notify the core.
This allows for one thing : modularity! I do not want to have code mixed everywhere again like we had with aMSN 0.x... This would also 'in theory' allow for switching to a different protocol or to a different library, BUT we do NOT want to do this. It was decided that aMSN is an MSN clone and if you want a multi protocol client, there are many good ones out there.. we want to concentrate on the MSN protocol so users can have a fully featured client, we want all our efforts to go into MSN compatibility. End of the discussion!
The GUI layer takes care of all our GUI needs, we have a 'manager' that basically stores which front ends we have installed and allows us to access their classes... a front end can register itself from anywhere by calling the guiManager.registerFrontEnd, and giving it its module (sys.modules[__name__] ).
Alen has maybe a different idea about this and we'll see what he comes up with, so this design can change a little...
NOTE that everything so far is in proof of concept mode and anything can change at any time!
The way I see the front ends is a bit like a set of mega widgets... or an 'abstracted toolkit API' but higher level...
I will talk again about front ends once I explain the core a bit...
The core.. the most important thing out there.. that's the heart of aMSN2, we want every front end to act the same, to have the same features, and this will be accomplished thanks to the core! The core is the glue between the protocol and the UI, it will take care of profiles, configuration, options, non-protocol/ui features, etc...
The most important part of the Core in terms of the other layers is the 'views' concept. This design will allow us to have a really nice client, easy to build new front ends, and a consistent feature set amongst all the front ends...
What is a View? Well it's simple, it's how we want the user to 'view' our UI. For example, the GUI doesn't need to know if a contact is online, away or busy.. the UI doesn't need to know a contact's nickname or psm, or a group's "count/total".... the UI only needs to know *what* to show the user... If we tell the UI to show a specific icon (depending on the state) for a contact, as well as what 'name' to give the contact (including the PSM.. or not, depending on the user's options)... and if we tell the UI that the group's name is "X (count/total)".. that's all it really needs to know...right ?
well, that's what the views are all about, they tell the UI how to display an object...
So there's this magical thing that I called 'StringView'... it's a 'view' on a 'string'... basically, it's a list of elements specifying how the string should be displayed... A StringView can be something like this :
list : color red text "my nickname" image <img> text "<-- that was a smiley" color grey text "(away)" color red text "\n" italic true text "psm" italic false
(the stringview can also contains tags...)
With a StringView we can represent anything we want.. the nickname of a user, including smileys, including status, including the psm, etc..
The reason why we do it like this is because :
1 - we don't want every front end to have code for parsing the smileys (what about custom smileys)
2 - we don't want every front to need to access the user's preferences like "show psm beside the nickname"/"show psm under nickname"/"don't show the psm"
3 - the UI doesn't need to know the status/whatever of a user, it just needs to know *how* to display it.. because that's what the user will see in the end...
So.. now that you know about the StingView, let's talk about ContactView.. as you can see every ContactView has a unique identifier representing the contact.. an 'icon', which will be an Image that gets built by the core (using the front end Image class API).. it can be a buddy icon depending on the status or the display picture (depends on the user's options), it can also contain 'emblems' like 'blocked', or 'away' emblem on top of the display picture, or a 'alarm' emblem if the user has one...
We do not want the front end to need to look through the options, or to query the core for whether a contact has an alarm or not, or query the protocol to see if the contact is blocked or not....
The ContactView also has a 'name'.. that's a StringView to represent the contact.. it will contain the nickname (or custom nickname), parsed smileys, the psm (depends on option)... the color of the nickname will depend on the status of the contact, or depends if the user sets a 'custom color' on the user.. etc... You now understand that we don't want every UI to start checking if the user has set a custom nickname for the user, or if there's a global custom nickname (or psm), or if he has a custom color for the user, etc...
The ContactView also contains a 'dp' attribute which is an Image with the display picture of the user... the reason why this is different from the 'icon' attribute is because we might want to show them both.. for example :
[icon] nickname [ display ]
psm [ picture ]
Like pidgin does for example... whether that attribute contains the DP or nothing will depend on the user's options again...
Finally, we have a 'menu' which is the contextual menu when you right click on the user (it's a MenuView item describing what the menu contains) and a 'tooltip' which is a TooltipView on what to show in the tooltip...
Now, I'll expain what the GroupView class is... it's a view on a group.. hehe.. it's the same thing again, the unique id, the icon (will change from collapsed to expanded icon), the name (StringView containing the name of the group + the count/total), menu and tooltip.. but we have one more item : 'contacts'.. it's an ordered list of the contacts contained inside that group...
The other view classes are pretty much self explanatory...
Now, we move the front end.. the front end is given to the core as a module object, the module contains all the classes we want/need and the core creates them as he needs...
Any front end should implement the amsn2.gui.base.* classes, we have a few classes in there, it's not that complicated :
mainloop : this is just an abstraction over the main loop.... pymsn needs the glib mainloop (hopefully removed soon), but you might want to run the qt/gtk/efl main loop, depending on what toolkit you use.. you implement this here...
main : the main window, this window will contain the login screen or contact list... the login window and contact list windows will need to use this window to show themselves inside of it.. why.. because we don't want to have a window appear/disappear when you start logging in...
image : simple class to abstract an image.. use whatever library you want to represent an image.. (QImage? gdkpixbug... etc...)
login : this is the login window... the base classe has documentation on each function.. it should be straight forward... this implementation is not yet finished, as we need a way to feed the login window the list of profiles as well as the list of "sign in as " statuses for each profile (if a profile has a saved custom state)....
contact_list : this is the interesting one... the base classes functions are documented so it should be simple but I still want to explain this a bit :
When you look at the api, you will notice something, there are only 4 functions :
contactUpdated, groupAdded, groupRemoved, groupUpdated...
You might be asking "humm.. why isn't there a contactAdded, contactRemoved, etc...", well, it's simple... here's how it would work, on initial connect, you get a bunch of calls to groupAdded with the groups of your contact list, in each of those groups, you have the contacts (remember, GroupView.contacts), so the front end gets this, and displays the group with its contacts...
in every possible scenario of the contact list getting modified, the 4 functions are enough to make the UI sync with the protocol...
nickname changed : groupUpdated + contactUpdated ( the groupUpdated is called if the sorting is done by nickname, so the front end gets the new ordered list of contacts and it reorders the contacts in the UI)
psm changed : contactUpdated
status changed : groupUpdated + contactUpdated (the groupUpdated because the sorting can be done on status, or if the user goes offline (if we group offline contacts together, then we get groupUpdated for both groups) the 'name' (count/total) of the group might also change, and contactUpdated because the '(status)' or color might change)
new user : groupUpdated (the list of contacts has one more, the UI adds it when it synchronizes the UI list with the groupview.contacts list)
deleted user : groupUpdated (same as above)
contact blocked, unblocked, etc... whatever : contactUpdated
sorting changed (ascending/descending/alphabetically, etc..) : groupUpdated
etc...
What this means is that the sorting is of course left to the Core.. the core decides on how to sort the contacts, etc.. it's not the UI's job.. but it also means that the UI must keep on each group widget, the ordered list of contacts that are shown with their unique id, so it can resynchronize itself when it gets a groupUpdated... of course, you can just delete all contacts from the UI and rebuild them.. but try to be optimal in terms of performance please... thanks...
This also means that.. I know, you won't like it.. but! it is necessary... when a user clicks on a group, you must NOT collapse/expand it.. you must tell the core about that event and let the core decide... sending you a groupUpdated() with an empty list of contacts in the GroupView...
The reason is simple :
1 - the GroupView gives you the 'icon' for the group.. and that's what's deciding if the icon is expanded/collapsed...
2 - imagine an option 'never collapse groups'... we don't want a UI that ignores that option...
3 - imagine the option on a contact "always show this contact"... so we would want a 'collapsed' group.. but still showing a contact...
4 - what about 'collapse/expand' on double-click only...
to be able to do all that, we need the UI to work this way! I know that for some toolkits it will be easy/intuitive but for others (like gtk with its treeview) it will actually involve more work... sorry about that!
Also please note that *for now*, we don't have all that working... humm.. yeah.. there's not much done with the icons.. the protocol doesn't do much.. there is no "group_clicked" or anything like that yet.. so be patient and we'll try to make the core evolve as fast as possible...
any comments are appreciated!
Thanks for reading!
KaKaRoTo
keo01 escribió:hombre, en el mail dice que va a colaborar un tipo que era desarrollador del emesene y que se piro y ha sacado otro cliente...
Maxtorete escribió:keo01 escribió:hombre, en el mail dice que va a colaborar un tipo que era desarrollador del emesene y que se piro y ha sacado otro cliente...
En el mail ponen que van a colaborar Mariano y Dx
Hi,
In order to continually give a great experience to our users, we have decided to release our first ever bugfix release!
The aMSN version 0.97.1 is a release which contains only bug fixes from our last stable version 0.97, so this is, as of today, the most stable version we have ever done.
It is important for you to update, because this version also fixes a critical bug that prevents a lot of our users from connecting to the MSN network. This is caused by a recent change in the protocol from the MSN server which made aMSN unable to connect to the network... so if you are having such problems, please update!
You can read the full detailed changelog as well as release notes here.
For those who feel adventurous and want to stay up to date with the latest development version, please refer to our SVN Installation manual.
Enjoy!