This message was first published on the jaws-dev and jaws-announce mailing list

This has been a very short summer ! I am writing this message with a feeling of accomplishment as this summer has been extremely productive. Every single day of the summer, voices in my head asked: what's next ? And right now, the answer seems to be a bright future for the Jaws 2 project.

I have to acknowledge that all the accumulated experience of Jaws 0.x has been a very close ally to me. I should also mention that without veteran developers like Jonathan Hernandez, Pablo Fischer and Helgi Thormar, I could never have achieved this level of code quality. The support from the community has been incredible. Thank you guys !

I also want to specially thank David Coallier, my mentor, who always provided valuable feedback and ideas. David always supported me during the whole summer and I don't think this experience would have been as successful as it was without him. Thanks David !

I remember my first checkout of the branch. 0 files, 0 lines, everything had to be done. This is where we stand right now: - 2542 physical lines of code (without whitespace and comments)

  • 47 files
  • 294 commits
  • We (nearly) have our first working gadget !

The summer has ended but my role as a Jaws developer is far from being a thing of the past. Such a positive experience encouraged me to stay active in the community. Right now, I have two goals. The first one is to work with the community to achieve a release of Jaws 2 as soon as PHP 6 is released. The second one is to write a similar message, in exactly one year, praising my community for all the great support I had during the summer as a student of the Jaws project. Yes, you've read correctly, as a student for the Jaws project: I don't have any doubts that next year, our project will be mature enough to deserve our own spots in the Summer of Code :-).

I wish everyone the best and thank you for this great summer again !

Nicolas Bérard-Nault

nicobn | General | 25 August, 3:58pm | Comment on this

I previously mentionned Doctrine, our ORM library. It is another PHP Google Summer of Code project and I must say that the Google folks are really getting a lot for their money on this one !

I now want to bring your attention to another project, this one from Hannes Magnusson, Livedocs. Actually, it's not about Livedocs anymore.

If any of you ever edited the PHP manual, you know how a pain it is to only see your changes. The manual is extremely slow to build (takes about 4 hours on my computer). Livedocs was supposed to solve this issue but Hannes realised the goal of being the promised land of the PHP documentation was too much of an Herculean task for Livedocs.

This is where PhD comes into play. It is a new project under the PHP project umbrella that aims to generate Docbook documentation. It is developed by Hannes Magnusson and Gwynne Raskind and it's in a very experimental stage at the moment but I'm already using it when I edit the manual. It helps a lot as I can see the changes I make right away. Well... in about 3 minutes but hey, that's a lot better than 4 hours !

I don't have anymore excuses to not contribute to the documentation now !

Anyway, I invite you to check out that new project, it's really worth it !

Nicolas

nicobn | General | 19 August, 9:34am | Comment on this

I recently compiled PHP 6 with the namespace patch and, shit happens, realised Doctrine uses methods named import().

I can't blame the Doctrine developers for not being so "cutting-edge" - even the PHP manual wasn't updated to include import, namespace and goto as reserved keywords. (of course, I took care of this).

A quick fix was to replace import() by imprt(), which is much more ugly, I agree.

And that's another reason PHP programmers must be aware of PHP 6...

nicobn | General | 15 August, 7:00pm | Comment on this

Keep it simple, stupid ! That's one of the most widely acknowledged wisdom in computer science. I think that Jaws 2 pretty well applies it. Well, that was before my implementation of the registry.

One example of my erm... call it what you want: the Jaws_Registry::createKey() method, prior to my KISS-crackdown. It created a new key but also, if the path to the key did you exist, it created it. Pretty much like mkdir -r, but not really, because mkdir creates folders and createKey can create other types of keys. A one letter error in an application and you end up creating a bunch of useless folders. Bravo !

And then, you have Jaws_Registry::moveKey() which calls Jaws_Registry_Key::moveMe() which in the end calls Jaws_Registry_Key::moveSubkey(). Now you understand how I feel. It's bloated. And I have nobody to blame but me. Which is kindof the worst part in all this ;-).

But I promise this will be fixed !

Stay tuned !

Nicolas Bérard-Nault

nicobn | General | 14 August, 12:25am | Comment on this

My last progress update was at revision 6666 and it seems so much has changed in Jaws since ! Where to start ?

  • The registry is now completed (makes use of Doctrine's nested set feature)
  • Data objects can now contain subsections that can be accessed like this: $dataobj->subsection->foo->bar.
  • New subsystem loading interface
  • Make use of assertions when in debug mode
  • All subsystems make use of their configuration options now
  • Started documenting in the Jaws wiki
  • And so many small fixes...

And of course... more is coming soon ! Cheers,

Nicolas Bérard-Nault

nicobn | General | 8 August, 8:46pm | Comment on this

Hey everybody !

I was waiting for a good occasion to give an update on my progress and here it is ! Jaws is now at revision 6666, thanks to my last commit. The static configuration subsystem along with the session subsystem are completed. I'm entering a critic phase of my project right now where all the decisions I take will affect the future developement of Jaws 2. I think I'll take one or two days to document what I've already done in the Trac wiki and start making some plans. Nothing to say really... I wish I were a superhuman but I guess we all have to sleep from time to time, even if we're computer geeks...

By the way, you can buzz me at anytime if you wish to make comments on the code. That's what opensource is all about isn't it ? Anyway, I appreciate the comments everybody made and I'm glad to have all this support from the community !

Cheers !

Nicolas Bérard-Nault

P.S.: My last commit was number 162 for me.

nicobn | General | 29 July, 5:57am | Comment on this

Hey ! I just wanted to provide some statistics about the last month and a half. This only covers the Jaws 2 code.

  • Start of coding: 1st of June.
  • Days elapsed: 42.
  • Code base with comments: 2538 lines.
  • SVN commits: 84.
  • Average commits per day: 2.

I think I can safely say I'm making some progress !

nicobn | General | 12 July, 9:39pm | Comment on this

Hey !

I hear some of you saying What's up ? I haven't posted for a long time - that's not because I'm lazy, it's simply because I'm too busy ! I'll keep this post short 'n sweet. Here's a short update on my progress.

Succinct list of things I am working on right now:

  • Documenting all unicode functions in PHP (0%)
  • Finishing Doctrine_XML_Import, with full ORM functionalities and support for Doctrine special options (~40%)
  • Documenting Doctrine_XML_Import (0%)
  • Start writing some API documentation in Jaws' wiki (0%)
  • Sessions, authentication and configuration core objects (~30%)

Also, something great to mention, there's currently a vote on Jaws-PHP6's final name on the Jaws-Dev mailing list. If you have not cast your vote / voiced your opinion, do it as soon as possible ! More on that soon.

I also discussed a project idea I had that does not apply directly to my GSoC project (well, not yet) with Pablo Fischer. Basically, we'd like to great a big repository from which any user with an installed Jaws website could fetch/install/update new gadgets/themes/plugins automagically. That means each gadget/theme/plugin would have its own development and version number. The repository would also be available via the web and tarballs will be available for download for the website administrators that do not want the administration panel to take care of everything. I'll soon RFC on the mailing list and I hope you'll all give your ideas on how we could improve and implement this idea !

Finally, I filled in the Google summer of code mid-term survey today which means I'll soon get my second payment (of $2000 USD). Yep, that's great !

Nicolas Bérard-Nault

nicobn | General | 10 July, 12:12am | Comment on this

As it was mentionned here before, I took on the task of writing a class that imports MDB2_Schema style XML schemas in Doctrine. Now that this is accomplished, the next step is to implement the feature in Jaws. If you want more details, I explain everything in devdoc/SCHEMAS [1] !

It's pretty darn hot where I am right now and I can't get my ideas straight so I'll leave it to you to review my work [2] !

Thank you for all the support,

Nicolas Bérard-Nault.

[1] http://dev.jaws-project.com/cgi-bin/trac.cgi/.../SCHEMAS

[2] http://dev.jaws-project.com/cgi-bin/trac.cgi/.../Schema.php

nicobn | General | 27 June, 6:50pm | 1 comments

I recently received karma to work on the PHP documentation and thought I would give it a try and commit my first changeset. I decided to go ahead and document socket_recvfrom() [1]. Thanks for the many comments I received ! I think I'm now ready to attempt documenting i18n functions.

I also implemented the import method in Doctrine [2]. Kudos to zYne- for his patience on teaching me proper Doctrine coding standards ;-).

All this kept me away from Jaws a little bit but I'm pluging right back in as we are speaking. More on that soon.

Cheers !

[1] http://www.php.net/manual/en/function.socket-recvfrom.php

[2] http://doctrine.pengus.net/trac/browser/trunk/lib/Doctrine/Import/Xml.php

nicobn | General | 25 June, 8:01pm | Comment on this

After discussing with Konsta Vesterinen from the Doctrine project, we agreed that we will be implementing new features to comply with the MDB2_Schema XML Standards. This means that we will be creating new methods that will give you the ability to install databases using the same XML Definition files than MDB2_Schema, ensuring that anyone using MDB2_Schema will be able to use the same XML Files within Doctrine.

 

By doing this, we will not have to depend on MDB2_Schema & MDB2 in Jaws and will be able to move on towards a DBAL & ORM application but moreover, we will be able to use the same files we used before, and that other people using MDB2_Schema use already.

 

This will be implemented within the Doctrine_Export and Doctrine_Import classes. Doctrine_Import has methods such as listViews, listTableColumns and a few others and by adding our new methods, we will ensure to build a portable schema definition of the actual databases and Doctrine_Export will be used to build the new Schemas from the actual database definitions.

 

Thanks to pookey for his fast answers on creating our two accounts (nicobn & davidc) for trac and svn commit access.

 

David.

davidc | General | 17 June, 10:25pm | Comment on this

Today, when speaking to Helgi Þormar about using the PEAR_I18nv2 package (of which he is the lead dev.) in Jaws, he sent me a link to a talk Derick Rethans [1] gave about i18n in PHP6. I did some reading and found that a lot of i18n features will be implemented directly in PHP6 but that, as of now, they are not documented (and maybe some of them are not even implemented, I'll find out soon enough). That's why I decided to volunteer to document the functions myself. Some news on my progress will come soon !

 

[1] http://derickrethans.nl/files/php6-unicode.pdf

nicobn | General | 17 June, 6:48pm | Comment on this

Internationalization was not one of the initial goals of my project but it seems clear with the discussions I had with the other developers that complete i18n of the project along with Unicode support would be a big plus ! Right now, my approach is quasi-theoric, as I'm implementing very rudimentory routines to accomplish the most basic tasks. Jaws' i18n routines are, as I'm writing speaking, in a draft stage, as I'm trying to figure out what will be our future needs. You can take a look at include/Jaws/I18n.php and include/Jaws/Module.php to get a big picture of what I've been up to !

 

I also wanted to mention, Jaws' Trac's encoding is now UTF-8, thanks to Pablo.

Cheers !

 

nicobn | General | 17 June, 7:34am | Comment on this

Finally, I found a satisfactory and elegant (well, in my opinion !) solution to the "global variable" problem. In fact, global variables dissapear in PHP6 (and it was about time !) It will be replaced by a core abstract class called Jaws. After it is initialized, all the modules (log, sessions, database, etc.) will be available using static variables. In exemplis, the singleton Jaws_Log class for logging functions will be accessed via Jaws::$Log. Don't throw rocks at me, that's the better solution I found ! Also, it's good to know that all classes are autoloaded via Jaws::autoload(), so no need to include the files manually (unless they are external libraries).

 

Also, I wanted to mention that I ran into some problems with Doctrine but the developers were extremely helpful. I sent two patches to fix little glitches and they were commited. I have the strange feeling I'll have to work closely with them this summer... Not that it really frustrates me. After all, one of the reasons of my project is to test other people's toys !

nicobn | General | 16 June, 12:45am | 1 comments

Since this is a complete refactory, I, as well as the rest of the community, had to make a tough decision: which DBAL to use. First, I was OK with going to something ultra-lightweight, not even providing total abstraction (like PDO) but was rapidly convinced that it was not a good idea by Helgi. I decided to RFC on the Jaws developper list and here is the discussion that followed. Click here to see it in the archive.

 

What came out of it is that Doctrine might be a better choice since we could take advantage of its ORM features in the future. The downside to this is that we'll have to make our own schema routines (I have some ideas for this - more later) to replace MDB2_Schema.

 

I also discovered that Doctrine is in a very... early stage of developement, which means the documentation is sometimes incomplete, sometimes approximative. Also, since there is no stable release, I had to directly checkout from their SVN repository, which means I'll have to follow the developement of yet another application !

 

It seems to be worth the price right now, as it is extremely well built and it has rich features which will be helpful in the future development of Jaws.

nicobn | General | 14 June, 3:35am | Comment on this

Hello everybody ! First of all, I must say it is a very beautiful summer that we have up here in Sherbrooke, Québec. After a few days of rest (you have to excuse me, my school semester was painful !), I started working on the SoC project. I started by going through some of the Jaws code. I like it very much, even if it is very php4ish ;-). This gave me good ideas for the new design. Since jaws-php6 is not a fork but really a new start from scratch, I have to start with very basic things, like logging and database abstraction. I reviewed the basic design with David and real coding can now start ! I'll keep everyone in touch with the new developements.

Also, something to mention, I received the start of coding surprise from Google. It's a book called Producing open source software - How to run a successful free software project by Karl Fogel (and it's signed by him !). It is definitly going to be an interesting read ! Here's a link to the story on his blog. Click on the book to go to the publisher's page.

 

A nice surprise from the Google folks !

nicobn | General | 11 June, 7:33pm | 2 comments

The project has finally started with Nicolas being 99% done with school and having received his first Google Inc. check.

For the people interested, I will be putting pretty much anything we do on this blog so everyone can stay in touch and stay up to date:

Here we go, first part is links about PHP6 and important notes, gotchas, general unicode information, etc.

 

PHP6 Links:

Jaws Links:

 

TODO First Tasks:

  • I would like to see a list of all the global variables and their respective files within the Jaws Project (GLOBALS['db'] in InitApplication.php for instance) and also show where it's used. Using a google document would be great for this.
  • Next point is, I would like you to build a very simple UML design of the current architecture (Very simple (basic classes, inheritance quickly (You can do only one gadget for this design model))).
  • Install PHP6 and give feedbacks on this
  • Once you are done, contact me by emai, and we'll be ready to start thinking forward!

Many thanks to Google Inc. and Nicolas Berard-Nault for the work that he will be doing this summer.

 

David

davidc | General | 29 May, 5:29am | 1 comments

Here's an article about my project !

David Coallier gives you first hand information about the first source framework using PHP6. The abstract reports that big applications are the motor of the development of languages. With them, you can test the limits of the language, detect bugs and suggest ameliorations. This also applies to PHP and is even more important in a period of intense development like the one PHP is living right now.

The abstract also contains reference about Jaws, a content management system written in PHP. The web site informs you that it is intended in this Google Summer of Code project to revamp the internals of Jaws and migrate it from PHP 4 to PHP 6.

It further tells you about the three phases of the project. The first one is the planning of the new internals, based on the current code base. This will be done in concordance with all the current developers of the project and mentors and will last about two weeks. The second and longest phase is the actual development of the new internals, which will last eight weeks, during which contributions to the code base will be on a daily basis. The third phase is the testing phase, where the new code base is implemented in a real-life environment and extensively tested.

Source: SDA Asia Magazine.

 

nicobn | General | 18 April, 4:50am | Comment on this

Finally, after a long wait, the names of the accepted projects for the 2007 Google Summer of Code (GSoC) have been released. And my project was selected ! My mentor will be David Coallier (great guy by the way !) I am very happy and unusually surprised by the news and I'm looking forward to this summer to show my talents and have fun with the Jaws and the PHP communities ! I'll keep everybody updated on a (almost) daily basis when the project is started so revisit the pages if you wonder where the project is heading ! As this is an introductory post, I joined the abstract of my project, also available on the GSoC page.

It is not a secret to anybody that big applications are the motor of the development of languages. In fact, with them, we can test the limits of the language, detect bugs and suggest ameliorations. This also applies to PHP and is even more important in a period of intense development like the one PHP is living right now.

Jaws, an incredibly powerful content management system written in PHP, is a good example of such an application. To keep its pertinence as a driving force of the PHP community, Jaws has to maintain a level of currentness with the fast-evolving PHP language. This is why it is intended in this Google Summer of Code project to revamp the internals of Jaws and migrate it from PHP 4 to PHP 6. This includes, but is not limited to, E_STRICT compliance, the systematic use of real object programming, Unicode character support, the transparent use of different database types and the use of the most current features available in PECL and PEAR, including if needed operator overload and the Standard PHP Library (SPL). This will not only improve the user experience but will also serve as a testing platform for the newest branch of the PHP project, promising the discovery of new bugs, the elaboration of new feature requests and the improvement of documentation. Overall, both the Jaws community and the PHP community will profit from this ambitious project to redesign the internals of Jaws with the most current available features of the PHP language.

This project will contain three phases. The first one is the planning of the new internals, based on the current code base. This will be done in concordance with all the current developers of the project and my mentors and will last about two weeks. The second and longest phase is the actual development of the new internals, which will last eight weeks, during which contributions to the code base will be on a daily basis. The third phase is the testing phase, where the new code base is implemented in a real-life environment and extensively tested. Feedback will also be sent to the PHP-internals list for developers to see how well PHP6 performs in such a big endeavour.

Oh and, by the way, if you wonder, I also have homepage.

nicobn | General | 18 April, 4:48am | 2 comments
Total Visitors:139693