We read:
Planet PHP
Planet MySQL
Exciting E-Commerce
E-Commerce Blog
Fischmarkt
fukami
Lars Jankowfsky
Themenblog
Thomas Bachem
Matt Asay on OpenSource
Joel on Software
Ibrahim Evsan
Hasematzel
Techcrunch
Indiskretion Ehrensache
Sichelputzer
Alexander Schwinn
Managing Tech
F-LOG-GE
trycatchfinally
PHProjekt V6, our little beastbee and Open Source project management software, kicks out of the door on March 18th as GA. It's a complete rewrite (and thus, a major version update was needed) with Zend Framework and dojo and now licensed under LGPL (earlier versions were licensed under GPL). You may ask what you want to do until March 18th? Well, besides eating popcorn for Film@11:
The bee is watching you!
dojo.xhrPost({
url: myUrl,
error: function(error, handle) {
handleError(myUrl, error);
},
load: function(response) {
if (false != response.data) {
showToaster(response.data);
}
},
handleAs: 'json'
});
$counter = 0;
$maxLoops = 4;
$data = array();
while ($counter != $maxLoops) {
$counter++;
$data = $this->getMessage($userId); // get data from database
if (false === empty($data)) {
return $data; // there is something new, return immediately
}
sleep(5); // nothing is new, sleep for 5 sec.
}
return $data; // return the empty array
At the Barcamp 2009 Alex, Michele, Michel, Markus, Sven and I continued a project that had already begun at the Barcamp 2008 - Creating an LDAP structure for internal Mayflower use and implementing a basic tool set for the administration.
A new LDAP scheme was created, a maintenance tool based on Zend Framework and Dojo was created and the tool was embedded as addon in the current PHProjekt 5
Gestern wurde endlich die Version 1.0 von Dojo released (http://dojotoolkit.org). Im Vergleich zu Dojo 0.43 hat sich in Version 1.0 einiges getan, die wichtigste Änderung: es werden nun die Funktionalitäten sauber getrennt in drei kleinere "Projekte". Persönlich freue ich mich, dass in Sachen Performance sich einiges getan hat und die Engine massiv beschleunigt wurde. Bereits in PHProjekt 5 haben wir Dojo für einige Teile eingesetzt, für die Version PHProjekt 6 nutzen wir nun neben einigen Widgets auch die Möglichkeiten des Event- Handlings und der DOM- Manipulation von Dojo, sowie natürlich die Ajax- Funktionalität. In PHProjekt 6 wird eine MVC- Architektur auch auf Seiten des Clients umgesetzt. Unabdingbar für die Entwicklung des Client- MVC ist für mich ebenfalls die Tatsache, dass Dojo ein "normales" objektorientiertes Interface für JavaScript zur Verfügung stellt, das Klassen und Vererbung anbietet. Um es in den Worten von Kollege Hartmann auszudrücken: „Dojo ermöglicht dadurch ernsthafte Programmierung mit JavaScript!“
Leider ist auch mit dieser Version das Problem der Dokumentation nicht endgütig verbessert worden, es bleibt einem nicht erspart, sich durch das „Dojo- Book“ auf den Webseiten zu kämpfen. Hoffentlich gibt sich das im laufe der Zeit, denn das ist immer noch ein großes Manko.
MAYFLOWER announces that Version 5.2 of its free popular open source groupware suite “PHProjekt” is available immediately and ready for download.
With the new version a foundation is made for a clearly arranged and intuitive usable PHProjekt. This is made by a refactoring of the user interface and the integration of the Dojo JavaScript Toolkit, which enables an effective realisation of Web 2.0 functionalities. The Migration is going to take place in steps, the main changes of the user interface will take place in the next releases. The clou: PHProjekt remains barrier-free.
The popular feature of 'tagging' content is nothing new. The average netizen should have encountered it by now. Tagging was made popular by sites like del.icio.us and flickr, where users can attach free-form strings, so-called 'tags' to their bookmarks and images. The viewer can then use these tags to navigate through one or more user's contents and locate related content.
The most-cited work on tagging is this research paper from HP, which starts categorizing tagging as 'folksonomy' (folk taxonomy) in contrast to the conventional term taxonomy. A taxonomy is usually a categorization of content according to a hierarchical and exclusive tree of attributes, while the folksonomy is neither. Also, usually a taxonomy is created by an individual or a small group, whereas the folksonomy can be created and expanded by any number of users.
The most obvious use of tags attached to a set of items is to be able to quickly search for a subset without having to care about spelling or being limited because the items are only indexed by title. The most common user interface for searching according to tags is the 'tag cloud', a cluster of tags sorted alphabetically. For ease of use the font size in which each individual tag is shown corellates to the number of items it is attached to.
It is quite convenient to search in a tag cloud with a couple of hundred items. A drawback of the cloud, though is that one can only search for one tag at a time. When the search hits are shown, a list of related tags is shown that share at least one item with the chosen tag. The user can then proceed to view the items attached to one of these tags, but the first tag is subsequently forgotten.
To understand why tagging was invented it is neccessary to look at the
prior status quo of hierarchical ordering like it is done in directories
like dmoz.org, ISP portals or most probably in your browser's bookmarks
feature. Items are sorted into
a kind of taxonomy. This leads to difficulties since the universe of
topics is multidimensional.
One might have a folder 'Tutorials' for sites that contain tutorials,
and a folder 'Software' for sites on software. Consider further, that
he might want to divide the bookmarks between 'Windows' and 'Linux'. The
hierarchical model now makes it necessary to duplicate one set of the
tree's nodes to attach them to both branches, i.e. you either have a
first-level dichotomy between Windows and Linux and two second level
ones between Tutorials and Software or the other way round.
Since there's more aspects to expect, this is not a feasible solution,
not even if you flatten out the hierarchy by combining the two aspects
and create four folders.
A method that combines the flexibility of tagging with the search-narrowing power of a deep hierarchy is to combine the tags to an 'instant hierarchy': The user chooses from a pool of keywords. Like in tag clouds, he gets to see some items then and a list of subsequient keywords. He can then choose a second keyword and get the items that are tagged with both chosen keywords, and so on. This instant tree is at it's deepest in the path of the item with the most tags.
These four images show an example of navigation through the instant
hierarchy. The choice of keywords in the selectboxes narrows downn, in
each step the items that match the exact set of keywords are shown. The
best results are achieved when the items are tagged diversely and
with a diverse number of keywords, because every step then show some
information. If all items have, for instance, three keywords, the first
two steps show nothing new.
Database-wise, this approach is a lot more complicated than the single-tag navigation of del.icio.us or technorati. Depending on the database available, n-fold joining or subquerying can be used. In both cases we start with a set of three tables, 'bookmarks', 'keywords' and 'relations' since we want to map an n:m relationship:
+--------------+ +--------------+ +--------------+ | bookmarks | | keywords | | relations | +--------------+ +--------------+ +--------------+ | ID | | ID | | ID | | url | | keyword | | bookmark | | title | +--------------+ | keyword | +--------------+ +--------------+The ID columns are the primary keys (although the relations table might not need an extra key), the keywords should be unique anyway as long as no ownership is implemented.
The query to retrieve the first set of keywords is obvious:
SELECT DISTINCT k.id,k.keywordThat might look complicated, but it easily sorts out the keywords that have nothing attached, and it fits in with the recursion that follows
FROM relations as r, bookmarks as b, keywords as k
WHERE r.keyword=k.id
AND r.bookmark=b.id
SELECT DISTINCT k.id,k.keywordsince the id of keyword "Programming" is 5 (you can do this with another join of course, but the information has to retrieved to get the bookmarks beforehand)
FROM relations as r, bookmarks as b, keywords as k, relations as r0
WHERE r.keyword=k.id
AND r.bookmark=b.id
AND r0.keyword=5
SELECT DISTINCT k.id,k.keywordFrom there, it's simply recursion.
FROM relations as r, bookmarks as b, keywords as k, relations as r0, relations as r1
WHERE r.keyword=k.id
AND r.bookmark=b.id
AND r0.bookmark=r.bookmark
AND r.keyword!=5
AND r0.keyword=5
AND r1.bookmark=r.bookmark
AND r.keyword!=7
AND r1.keyword=7
SELECT DISTINCT b.ID,b.url,b.title
FROM bookmarks as b, relations as rc, relations as r1, relations as r2, relations as r3
WHERE rc.bookmark=b.id
AND r1.keyword='5'
AND r1.bookmark=b.id
AND r2.keyword='7'
AND r2.bookmark=b.id
AND r3.keyword='12'
AND r3.bookmark=b.id
GROUP BY b.id
Newer MySQL versions offer the use of subqueries to replace some joins. A query to get a list of keywords with a prior choice looks like this:
SELECT DISTINCT k.id,k.keyword,We retrieve all keywords that have x other keywords attached, where the other keywords are chosen from our list.
(SELECT count(r0.keyword)
FROM relations r0
WHERE r0.bookmark=b.id
AND r0.keyword IN (5,7,12)) x
FROM bookmarks b,
relations r,
keywords k
WHERE k.id=r.keyword
AND b.id=r.bookmark
AND k.id not in (5,7,12)
HAVING x=3
ORDER BY k.id
I assembled a small Addon for our OpenSource software PHProjekt and plan to release it on PHProjekt.com as soon as it's presentable (it's a hobby project so it proceeds a little slower than I would wish it to). If you are interested in a snapshot, drop me a mail (brotzeller at mayflower dot de). Currently it lets the user add and delete keywords and bookmarks and assign keywords to the bookmarks. The above screenshots show the navigation, which can also return xml and can therefore be used as sidebar in gecko browser. I also added a feature to get RSS feeds for keyword choices, so firefox users can add dynamic bookmarks. Since it's about bookmarks, usage is observed via redirection, so the RSS feeds can also show new or most used or last used bookmark lists.
Wow! Our development team did a terrific job baking some new releases this week. While Albrecht is enjoying his holidays very much, I can feel the sweat of the team preparing everything for launching in time two releases.
The 5.0 branch got a new release: 5.0.2. It mainly is a bug fix release and marks the last release of the 5.0 branch which will be closed as of today. Just hang over to the release announcement by Franz Graf on phprojekt.com.
As of today, we are proud to announce the release of the first beta version of PHProjekt V5.1. Our Mayflower fellow Nina Schmitt tells: "Our main goal was to further enhance the usability and functionality of PHProject with this new Version, but some new features were added as well". She points out that we need further tests from the community and report bugs on the bug tracker at our thinkforge.org development forge.
Continue to read this post to see what is new in this 5.1 branch. And don't forget to download it!



















