Apr 12, 2007
Not selected
Mar 28, 2007
Student Deadline is over!
Waiting!!!
Mar 26, 2007
GNU/DEBIAN AND UBUNTU: Per Package Wiki and API
Abstract
This application is based on another application named "Possibility
to comment and rate packages in Synaptic" which was also written by
me. It was published on my blog and submitted to GSoC for the GNU/
Debian and Ubuntu organisations. I got a lot of feedback from the
mentor (Erich Schubert), from synaptic developers (Sebastian Heinlein)
and the Ubuntu and Debian community (ubuntuforums.com, #ubuntu-devel
in freenode, debian in freenode, the ULPGC software libre mailing
list, and everybody who send comments and critics).
Sometimes a new package makes your life easier, a music player, an editor, a new library... this don't come in the standard GNUDebian/(X|K|EDU)Ubuntu/Debian based distribution and it isn't too common to apperar in a guide. You discover the package thanks to a friend, a blog, a tutorial.
Every package has a "metaconscience" in the user comunity: screenshot, opinions, comments, Howtos, bugs, issues. That is named as user metainformation.
The idea is a community maintained metainformation system with an Api. The main frontend will be a like-wiki web application, crossing information from users and other sources like package repositories, popcon, debtags, debram, user tags...
http://wiki.debian.org/CRMI maybe a good starting point.
Some Use Cases
I'm a user, when I was installing some package did some postinstall configuration, I sing-in and add some comments to the package wiki and a howto link.
The same user discover a free good game in the repository, he rate it in the wiki and upload some screenshots.
Other user looking for a good video player, do a search and select the most rated one, reading the comments of other users in the web application.
A developer upload some screenshots about new features in his software.
Description
I'm the kind of guy that read and reread the "new packages" section, looking for good software, I think the feedback given by popularity contest is incomplete because the use of a package does not means that it is popular, only that a lot of people had installed. That people do not know if there is a better package for his necessities.
I apply for a way to know new and good software, to now bugs, to see screenshot, to talk about with users and developers and contributte with de project.
Desing autodiscussion
History and changelog from packages, some kind of package tracking.
User control.
And the trolls? a sysop, a moderator, a moderator team?
Bandwith problems? a mirror system. replicate and propagate the changes.
sort by package class/debtags/usertag/popcon...
Rate packages, user ranking? some kind of karma?
Some ajax will help, mind the step with this (requestrequet)
Details
I think this is a instance of Model-controller-View pattern. For the model I think in a relational database, postgresql or mysql.I've have experience in Ruby on Rails and Perl Catalyst, I've preffer Ruby. Using REST (http://rest.blueoxen.net/cgi-bin/wiki.pl?RestInPlainEnglish) interfaces will help, added in 1.2 Ruby on Rails. Here http://weblog.infoworld.com/stratdev/archives/2007/01/rest_and_ruby_o.html
and here http://devnull.blogs.banot.net/articles/category/ruby Spanish (Richard Dale,rubyqt developer success history)
For some ajax (only where be necesary), the prototype rails pluging
Packages side
Package Info Tracker: in orther to retrieve new packages.gz and diff files from the repositories, calling the method which do the task to update.
Package Info Updater: Update the database, creating the wikipage, setting a directory (for screenshots). some lexical analisis for the packages.gz and de diff/* files
Package Info Model: Stored in relational database,
A package table with id(key) field, md5sum, name, section, mantainer, versions (with changelog), size, Arch.
A dependecies table with id, idpackage, idpackage, relation 1-*.
A suggested table, identica al anterior
Metainformation
Debtags, I dont know exacty how retrieve debtags, but in http://debtags.alioth.debian.org/cloud/, is a good example, I'm sure that it's possible and not too difficult.
Description Wiki alike, first filled which package description, next edited by the users, moderated by someway (maintainer, developet, wiki maintainer?). Some kind of text render like Textile http://whytheluckystiff.net/ruby/redcloth/
The model data is a table which Id, PackageId, UserId, Date, Description, last (boolean), keeping the history of changes.
The wiki controller, manage the modifications, log de changes, send to admin controller the changes to be approbed, recieve the approbation and make the changes in database.
Rating information
The model will be a table Id, PackageId, rate (float) 1-10. No history rates.
The rate controller, calc and set new the rate with (previousrate+newrate*Someuserkarma)/2, get rate from a package.
Usertags
I will use http://wiki.rubyonrails.org/rails/pages/ActsAsTaggablePluginHowto, for the model two tables, tags for tag info and taggings for relationsComments
Database model, a table with commentid, comment, userid and another table id with id, packageid and commentid.
Users
Common user system with categories. The model are tables in the same database. The user controller will calc the user karma, I dont know the ways, investigate ¿Digg?.
Roadmap
- Study the CRMI project, complete and decide.
- Modelize the store system, decide the best option
- Decide what metainformation we want to handle.
- how store it? structure of files or/and databases
- UMLize the project.
- write some examples of metainfo
- Package tracking
- A bot generate the static information from the package system
- Metainfo reader/writer class (some kind of adapter or control, look for paterns).
- Possibility to set and get metainfo from the net.
- A simply web frontend (to incremental approach)
- The user control
- some kind of user ranking or karma (need to discuss)
- history of contributtions
- Web frontend with user control
- Test and retest, get some feedback.
- De-bug the code. repeat 10,11 until I'm happy.
- Look for the propagate system, do some test with more users, diferent mirrors etc...
- inprove and inprove.
Possible problems
Data incosistensy through mirrors
Server congestion.
Trolls, spam.
Possible security problems
Trust the data
Privacity for the users
Application under Creative Commons Attribution License.
Mar 21, 2007
GNU/DEBIAN and UBUNTU: Possibility to comment and rate packages in Synaptic
Sometimes a new package makes your life easier, a music player, an editor, a new library... this don't come in the standard GNUDebian/(X|K|EDU)Ubuntu/Debian based distribution and it isn't too common to apperar in a guide. You discover the package thanks to a friend, a blog, a tutorial.
My idea is to give synaptic the infraestruture to make comments and rate the packages by the users.
To develop the idea, synaptic need an external centralized system to store the data.
Scenario
I'm a user, when I was installing some package did some postinstall configuration, I comment it in synaptic for the community.
The same user discover a free good game in the repository, he rate it.
Other user looking for a good video player, do a search and select the most rated one, reading the comments of other users.
Description
The project will improve the features of synaptic giving some community direct interaction with the package system. I'm the kind of guy that read and reread the "new packages" section, looking for good software, I think the feedback given by popularity contest is incomplete because the use of a package does not means that it is popular, only that a lot of people had installed. That people do not know if there is a better package for his necessities.
Domain
User looking for new software or feathures.
Packages and package system (apt).
User who like to share his experience.
Desing autodiscussion
We need some infraestructure to store online the comments and the ranking.
User control? I think no, only a username
And the trolls? a sysop, a moderator?
Bandwith problems? a mirror system. replicate and propagate the changes.
Get the comments on demand will be best option.
Get the ranking should be very fast (its only a number) to sort lot of packages by ranking.
The ranking system should be separately from the comments systems.
What kind of data for the comments, some rich text, quotes, bullets, links.
Possibiliti to deactivate de comments and the ranking system
Use Cases
1: right click in a package --->contextual menu with the usual options, "rate", "add comment", "read comments" .
2: select "rate"---> submenu with stars rate system
3:select number of stars ---> "rate successful" and store information.
4: select "add comment"--->display a window with a text field to add coments and a button "OK"
5: select ok --> store the comment.
6: select "read comments"-->download the comments about a package and show it pagining.
7: sort by ranking -->current packages view is sorted by rank
Roadmap
- Modelize the store system, decide the best option.
- Study the synaptic source, get some feedback from the project admins
- UMLize the project.
- Coding a prototype of the ranking system.
- Test and retest, get some feedback.
- De-bug the code. repeat 5,6 until I'm happy.
- Codding a prototype of the comments system.
- Test and retest, get some feedback, take care about load times.
- De-bug the code. repeat 8,9 until I'm very happy.
- Look for the propagate system, do some test with more users, diferent mirrors etc...
- inprove and inprove.
Possible problems
Data incosistensy through mirrors
Server congestion.
Trolls, spam,
Possible security problems
Trust the data
Privacity for the users
Mar 16, 2007
DEBIAN: Apt Checkpoint
Sometimes, a GNU/Debian user becomes crazy and install a lot of packages, sometimes with repeated features. Then the user tests the software and want to rollback to previous state.
In other hand, a developer find an issue in a package, then install the build dependencies, and fix the problems. When the problems are fixed the developer may want rollback to her old state, keeping the updates but removing or downgrading the packages installed to satisfy the build dependencies. In this cases, a rollback software will do the life easier.
There is an existing project "apt-checkpoint" on sourceforge which has last been worked on in 2004 (version 0.1), written in Python. Maybe it can serve as a basis.
Domain
A user set checkpoints on package system (apt), some packages without possibility to rollback.
A user want to rollback to old system.
A developper want to do a diferencial rollback when finish some project because in his work use a diferent version of gcc, or libraries... set a first differential checkpoint (or a rollback point, it's the same), install build dependencies for something, set a second differential checkpoint. The packages between the first and the second checkpoint will be the ones rollbacked.
Scenario
A system administrator would like to do a snapshot of his GNU/Debian system for some reasons:
- Check new versions with a go back step if something go wrong
- Save his "perfect configuration"
- Clean the system whenever.
Self desing discuss
First we need an exhaustive list of packages which could be problematic to rollback, then we need a system to detect new packages with the same problems.
The security it's no trivial here, we need trust the packages to goback to older versions.
The checkpoint should be like apt tools, and easy to use.
What if a version of a package is not in the repository: ignore, ask,lookfor, give the url? needle to study the best option.
apt-repack maybe a good option when a package version is not in the repository (if we select the option to cache the packages which arent in the repositories)
Use cases
0: Admin--->"apt-checkpoint set": mesagge, "you are going to set a checkpoint in ($now), the follow packages and her dependecies can not be rolledback, are you sure (Y/n)"
1:Admin---> Select yes: save the state of the package system, encript and set date time and ID
2: Admin --->"apt-checkpoint rollback": show a list of posible checkpoints numbered to select one of them.
3:Admin ---> select one checkpoint: show the list of changes and "continue Y/n"
4: Admin --->select Y and enter: the packages rollback to the old state.
5:Admin ---> select no: exit.
6: Developer -->"apt-checkpoint set-differential first": mesagge, "you are going to set a first diferential checkpoint in ($now), are you sure (Y/n)"
7: Developer -->"apt-checkpoint set-differential second": mesagge, "you are going to set a second diferential checkpoint in ($now), the follow packages may be rollback.($list of packages) are you sure (Y/n)"
8: Developer -->"apt-checkpoint diffrollback": Select what differential checkpoint you want ($List of diferential checkpoints, ordered by date)
9: Developer ---> select one checkpoint: show the list of changes and "continue Y/n"
10: Developer --->select Y and enter: the packages rollback to the old state.
11:Developer ---> select no: exit.
Roadmap
- Study the possible rollback problems, decide what to do with configuration files (save the checkpointed, ask, nothing...) light task back not trivial
- Study the existing apt-get checkpoint project, contact with the developer if is possible. Study code form others usually is complex.
- Decide a new name for the project. (semitrivial task :))
- Modelize the checkpoint store system, what need to save to rollback, how store (XML gziped..., plain text files, a mix, databased, packages cache...). A hard task, and very important
- UML modeling.
- Coding to prototype.
- Test get some feedback
- GOTO 6.
the packages and the information checkpoints must be trusted.
Possible problems
For some packages, diferent versions of configuration files has not backward compatibility.
Contributors
Erich Schubert send me two comments, one about apt-repack and other requesting the differrential feature.
Second application is out
Mar 15, 2007
UBUNTU Application: Revision-controlled home directories
In Ubuntu.com said
Ubuntu should have home directories under revision control so users can go "back in time" to older versions of their documents. This should be easy to point at a central server, but default to the local machine. This would be similar to a feature in Apple's forthcoming OS X 10.5 "Leopard."The Domain
- Users have one home directory where are they files.
- Users actions over files are create, delete and modify.
- Mixing user actions over files we have hibrid actions, move, copy-paste, cut-paste (move like).
- Directory, file, create,delete,modyfy, copy-paste, cut-paste and move are well know concepts
Scenario
A user make a tipical user error, like shift+del some files in nautilus, or rm * in a terminal. Ok, no problem, go back in time on my old home directory.
Desing Discuss myself
I see two ways to save the home directories states:
- Dinamically: the daemon listen for any modifying action in the homes, when this happens, save a differential state.
- Statically: With Time marks, something say when save a differential state ([ana]cron, user...)
The incremental backup systems is a good item to start, an efficient way is to use rsync, in http://rsync.samba.org/tech_report/tech_report.html, we have a full description.
We can get ideas from bazaar ( http://bazaar-vcs.org/BzrFeatures ).
By the moment, we speak about whole directories ¿Why if user want go back only for one document?. We should have this in mind.
Use Cases
For now, we only take care full directory restore. This is only a point to start.
0: User---> execute program
1: User---> Back to old home: Shows a calendar with marks of possibles "go back dates"
2: User---> Select a "go back date": Shows message "Are you sure?", List of changes an two options: yes or no;
3: User---> Select no: go back.
4: User---> Select yes: New windows with progress bar, call to Restore Process, set a time mark ($now)
5: User---> Set a time mark: Show nessage "You are goin to set a time mark on $now" options yes or no
6: User---> Select no: go back
7: User---> Select yes: New windows with progress bar, call to Set a Mark Process
8: Daemon --->Setup: save the state of the home directories separately, the date and a ID.
9: Daemon ---> Save the state of a home directory: save a differential state of a home directory
10: Daemon ---> get home state: give information about directory state indexed by ID and date
5, 6 and 7 are not necesary for dinamical option (see Desing discuss)
Possible security issues
We need autentificate the backup before restore and trust the connections .
Possible problems
The configuration files, solutions Ask, do nothig or downgrade.
System performance problems on filesystems events.
Contributtions
Thanks Soren Hansen advise me to look at inotify, pyinotify and bazzar .
Happy for the help.
Pedro asked me in the comments of the application post to write the --help option for svn, I think I'm not the appropiate guy do ask for this, but is possible that the svn project think about this sooner or later.
Thanks
My first application
Mentoring Org, comming soon
The list of accepted orgs will be posted here soon.
The students can now fill the student formulary an add applications. There are, the add applications form, a drop-down field with a listing of organizations that is growing, I think they (Google guys) are inserting the mentoring organizations in de DB just now.
Mar 14, 2007
Summer of code, March 14th.
For a first post, it's ok. Lot of thanks for your attenciĆ³n and bye.