Last night I thought about a new frontend design for metalcon. I personally want to go away from this diaspora/google+/facebook like design. So I did some brainstorming about how you can have a lightweight clear design that fits with our ideas of what should be the functionality of metalcon. The result is a desktop like frontend that has a nice search function as the main interface between user and application.
So let’s say a new user enters www.metalcon.de the first time. What he will see is mainly just a textfield:
Typing anything in the textfield will trigger a nice autocompletion. Hitting enter we will open everything important associated to the request text in separated “windows”. So let’s say you are searching for “Metallica”. Than we will open a “gallery”, “forum”, “fans”, “albums”… window. Each window can be closed, moved and minimized.
As soon as you type in another string the windows will be closed and an item in the request history will appear (bottom left hand corner in the example image). Klicking on a history item these windows will get opened again.
If you don’t want a windows to disapear after entering a new search string you can right-click on that one to see at least following functions:
- Always on current desktop
- Show on all desktops
So here you see, that I also want to have a multi desktop functionality: At the bottom right hand cornor you have four buttons that you can use to toggle between the available desktops. So if you search metallica at desktop 1 and search for a friend at desktop 2 the metallica windows will stay opened at desktop 1.
Posted in Design
Tagged design, ideas
Just a small question to the graph DB experts out there:
What is the best way to separate confirmed and unconfirmed friendships in neo4j? As the relations are only unidirectional I see three ways:
1) Use one single relation and add a flag like “isConfirmed”
2) Use two relations: A and B are friends as soon the relations A->B AND A<-B exist
3) Use two different types of relation: “RequestdFriendship” and “IsFriendOf”. So as soon as the request is confirmed I would delete the RequestedFriendship and create IsFriendOf which direction will be ignored.
So what is the most performant way?
to sum up the results (and the points we did not come to) from our phone call I have just taken the initiative and created a todo list in our wiki!
I also set a link to the list within the navigation of our blog!
Ok we need more documentation! That is why I will write down everything that I am doing here right now and see if I really understand what is going on! This text can possibly be wrong!
If I want to create some new feature in Metalcon I just found out that I have to follow this process:
Create a Class in the package de.metalcon.gwt.client.pages;
This class should inherit from AModulePage
Create a class in the package de.metalcon.gwt.client.modules;
This class should inherit from ADynamicModule.
from my understanding this class handels the front end communication and layout of the specific page. An Object of this class has to be created in the first class.
Since also makes RPC calls to the server we need a third class.
Create a class in package de.metalcon.gwt.server.modules;
This class must inherit from: AModuleServer
In this class I can handle all the incoming RPC calls and can talk to the backend of metalcon.
I need to use those Content transmitter classes in order to transmit content. I see how they are serializing an object in a JSON style manner. But I still don’t get why this is particularly necessary
If we really stay with the current class design we need some documentation in our wiki how to use it and work with it. Some pictures that explain how everything depends on each other would really help. I know this seems like a lot of work now and of course it is quicker if you just explain everything to me on a phone call or I just read the source code. But if the project grows and additional programmer join us we are happy to have documentation! I am also not sure if the blog or the wiki is the best place to do the documentation
last friday I was sitting in a talk by a PhD who wrote his thesis on privacy. You can find his homepage and publications at the following adress: http://www.ics.uci.edu/~patil/Home.html He was giving a highly interesting talk from which we could probably learn a lot!
he used the concept of social navigation (so far only to be found on french wikipedia) to show users what privacy settings their friends on average would prefere.
I really liked the idea of evaluating the settings of your friends and feedback this information to the user helping him to choose a good privacy setting!
Privacy while installing / registering
Sameer also did a user study in which he used this social navigation and so on. They could see a tiny statistical significance on this. To me this is rather obvious since They only had 60 test candidates and have been testing several things. But what they did was very interesting and received great feedback.
while installing the software (a instant messanging client) they showed the user the 6 most important privacy settings without any option selected and the user had to choose a setting.
I think we could perfectly do the same thing on metalcon. Whenever a user registers we can ask him to set several settings. I am very sure this would help us a lot to gain users trust!
we could even go so far that a user while registering would first have to select some privacy settings and could then enter name and email as well as birthday and zip code. I think even more people would consider to use their real name afterwards!
I will soon edit some pages concerning Privacy in our projectwiki!
I was very happy about your private mail recently in which you mentioned that you don’t want to write PRD’s but that you really want to start coding. The same holds true for me.
Today I am at ESSIR presenting a poster and graph data base model for social news streams. The advantage of my approach is that it is able to create the newsstreams for any user in a very fast way. That will scale perfectly and is actually independend from the size of our data base! It also uses all the advantages from neo4j in a cool manner.
Latest by friday I will make my slides and the poster I present publicly available and also write a blogpost about this. I would suggest to implement this data base model with our metalcon data base in mind. Thereby creating a newsstream around the following data:
- all relations between those
This is already a very huge project since we have to integrate all the things like discussions, comments, relations between them. Profiles / newsstreams around the band or user and all levles of privacy settings.
Once we are done with that we can easily do some usability testing and see weather our new ideas are being liked and from there start pulling over all the rest.
The advantage of beginning in this way are huge:
- we have already all the technologies (neo4j / gwt) running
- we have a solid data base model that – as you will see – comines the advantages of twitter and facebook approach and has been thought through from several sides.
- it seems to me like a managable project that can easy extend to all the other content (city, location, concert) that we have
I just thought about a problem I regularly have with social streams like in google+. When I haven’t been online for a few days I have so many news and comments in my stream that I can only roughly scan the stream so that I will miss a lot of info. So I thought about a way to help the user with this issue.
So what do you think about implementing a news ticker which is shown on every page (except the main page) at the bottom, scrolling with the page. So what will you see on the ticker: We’ll show a random news we think the user hasn’t read yet. Than probably also the comments will be shown so that you see a different text every few seconds. Than comes the next news until all unseen news have been shown.
If the user minimizes this ticker we will automatically show it again if some new news come up or the user comes back online and some new unseen news exist.
So something about the technical part: When we are writing new news items into neo4j we can add a relation between the user and the news node called something like “unread_news”. Than it’s easy to find those and if the user “reads” the news we can delete the particular relation.
What do you think?
I’v just created a googlecode account (http://metalcon.googlecode.com). Even though I have no code checked in yet, I want to quickly summarize the possibilities we have with googlecode (most of them you should have already seen on other project sites):
Subversion: The code can easily be checked out via:
svn checkout http://metalcon.googlecode.com/svn/trunk/ metalcon-read-only
If you need write access, you have to go to https://code.google.com/hosting/settings and generate a svn password for your r.pickhardt account. Than you can use following to checkout with write permissions:
svn checkout https://metalcon.googlecode.com/svn/trunk/ metalcon –username $yourGogleMail
Googlecode wiki: There is also a wiki (click). I would suggest to move our wiki.metalcon.de to that one. Than we have only two central development sites: googlecode and this blog.
Googlecode issues: Googlecode provides an issue tracker to be found here. Even though it’s not as convenient as a bug tracker like bugzilla, I think we should use it (just like the wiki). There is an eclipse plugin to connect the issue tracker with mylyn which is quite nice.
Mylyn: This is a tasklist framework for eclipse. If you have installed it using the update page (http://download.eclipse.org/mylyn/releases/latest), you can install a connector for mylyn to synchronize tasks between eclipse and googlecode. See http://code.google.com/p/googlecode-mylyn-connector/ for more.
So that’t it for now. As soon as I’m at home I will continue working on the hibernate issue and hopefully upload the code to googlecode today or tomorrow.
Since we are changing our entire developing structure and using a lot of modern things I am not sure how we should treat our bugtracker. Actually I am quite happy with the one we are using right now. I remember that we installed the bugtracker when we first released our beta version of Metalcon. But I had the feeling that the bugtracker is already a great tool to support todos while creating software.
Do you think we should use the bugtracker right away while developing metalcon or do we just communicate over the wiki?
Since the developement of the new metalcon version is going to be much more decentralized I would love to integrate the bugtracker as one of our core communication channels. It really helps to set priorities of tasks and stay more focussed and assign tasks to specific persons on the team.
by the way what happened to the old bugtracker? bugs.metalcon.de directs to metalcon.de
As a social network all is user generated content. We have good experience with this. Why not make the translation of metalcon part of the user generated content. Once we have a system that enables multiple languages we could also have everything translated from our users. I think I once read that facebook was doing this with great success!
Integration of our community in the developement process
Additionally I would love to make the wiki and the blog public soon. We can dominantly display links to it on metalcon and really integrate users. If we have learnt one thing so far it is that early feedback is very useful! We ask / discuss many important questions here on the blog and I would love to receive the feedback of several people on this!
If we do so I am very sure we will get very good suggestions and hopefully we can also attract people that want to support us with programming / design and other skills.