Archive

Archive for January, 2008

I need a break

After CUSEC, it wasn’t all over. A TikiFest was scheduled in Ottawa on Tuesday. For those who are not aware of these, TikiFests are similar to CodeFests, except that they are focused around Tikiwiki. I was surprised by how many people showed up on a week day. Ten of us were present, plus two visitors during the pub night before. Numbers are quite surprising for Ottawa and a project with such a small scope.

For me, it was an occasion to do some work on Wiki-Translation and meet the other people gravitating around the project. There was no way I could miss it, even with that cold I caught somehow during CUSEC. Now I need to rest. Three activities in three weeks might be just a bit too much.

Activity has been growing recently. The Montreal area is on a roll. I don’t know if it’s only my perspective or the movement is global, but I have the feeling that the tech scene is really exploding, and open source is getting a good chunk of it. Back in the days, we had monthly meetings and some meet-ups. Activities were small-scale. Nowdays, monthly meetings are still around, *Camps appear everywhere and there are small activities all the time. There are many familiar faces, but many new as well. There is really a transformation going, and I am afraid we will all burn out trying to follow it.

There is also a big change in the type of audience. A few years ago, most of the people attending activities were programmers and enthusiasts. Now, we get to have entrepreneurs, researchers, PhDs and quite a lot of non-tech people. In some way, it reminds me a bit of AQP3L/FACIL where many technology and community people were gathered for the greater good through open source. Only this time, everyone truly benefits from it.

Expect a lot of changes in 2008.

Categories: General Tags:

CUSEC 2008

January 21st, 2008 Louis-Philippe Huberdeau 1 comment

An other year of CUSEC is now over. After months of preparation, the event ran smoothly and proposed a great variety to attendees. With 6 keynotes, academic and corporate presentations, tutorials, the career fair and all other activities clustered around the conference, there was not much time to rest.

Organizing conferences is completely addictive. I started many years ago. During the organization period before the actual event, some busy days get you to wonder why you accepted again this year. After the conference, pressure is down, satisfaction level is high, energy level is critically low and commitment for the next year is not even questionable.

Sometimes I wonder what it’s like to just attend a conference. I have not done it for so long. When attending as an organizer, you get to see the back stage. You see a few sessions and get to talk to everyone. Attendees could probably give a much more accurate review of the conference as I am fully biased and my view of the conference was far from the standard attendee experience.

If you could not attend, presentations have been filmed and should be available online at some point. They won’t give the same feeling as if you were at the conference, but at least, the content will be there.

Presentations

Let’s take them all one by one.

  • Hard Problems in Network Computing by Tim Bray (keynote)

    With all his experience, Tim brought back some of hardest challenges left to be solved: integration and concurrency. I liked how past solution attempts were exposed and how their failures was explained before moving on. I remember walking out of the session satisfied about what I heard, but I don’t remember much of the details. Guillaume already made a full review of this session.

  • Developing Visualizations of Web Content with E15 by Kate Hollenbach (academic)

    This one seemed interactive from the title. Presentations with a lot of graphics are always more entertaining. The display of E15 is simply beautiful, and it can do some interesting stuff when it comes to displaying data. Everything has to be scripted using Python, which makes it geeky and fun. The only problem is that the project is still in very early stage, does not have so many real-world applications and only runs on OSX for the moment.

  • The ACL is dead by Zed Shaw (keynote)

    Zed is a very energetic speaker and completely passionate about programming. He has some clear-cut opinions on every topic and they tend to be on the extreme sides. The session was mostly a rant against abusive system complexity and corporate programming. Fun.

  • We didn’t start the fire by Sylvain Carle (tutorial)

    I didn’t actually see this one. I was too busy trying to find some food. I did get in time for the question period though, and the crowd seemed to be very interested. Starting a company, building it and getting financing seems to be a topic everyone is interested in.

  • Living with concurrency by Dr. Peter Grogono (keynote)

    I didn’t like it as a keynote. As an academic presentation, I would have known what to expect. The session was more of a research project presentation than anything else. Some had good comments about it, but the little it brought about the complexity of concurrency felt like old news to me. My main critique about the session was that the project presented is not applicable in industrial contexts. Through later discussions with Dr. Grogono during lunch, I figured out that it was not meant to be. It’s more of a long-term research project (10-20 years) than a solution to current problems.

  • When Theory Matters by Dr. Jeffrey Ullman (keynote)

    The session was mostly about content rating and presented different algorithms to do so. I couldn’t stay until the end. I didn’t have enough sleep the night before to handle so much theory, but the topic was still something I was interested in. This would also have been a good candidate for the academic track.

  • Keeping it fun: Hacking on open source after graduation by Jeff Bailey (corporate, Google)

    This was a good introduction to Open Source, how it works in a business way and you can contribute to have fun and improve your resume. I didn’t learn much from it, but the question period made me realize that F/OSS is not quite as well understood by undergrads as I thought it was. If this presentation could make it any clearer, it was a great presentation.

  • Hacking the Noosphere by Jon Udell (keynote)

    I loved this one. It was all about bringing the social networks and all this collaborative content to a next level. Jon started the presentation with a video from Apple made years ago that demonstrated their vision for the future. High-tech demo stuff that still does not exist to this day. The presentation mixed topics like web services, semantic web, mash-ups and how to display information properly. Very interesting challenges for the future.

  • Is Writing More Important than Programming? by Jeff Atwood (keynote)

    Jeff is a famous blogger. He became famous writing text, not writing code. He had a great presentation explaining why only writing code might not be enough. Writing a blog can help improving communication skills and increase your visibility. Unless someone can find you have done something, you have not done anything. It was a great closing keynote by asking a very important question: What do you want your career to be?

Recruiters

I never really liked career fairs. I think of them as a necessary evil. In a student tech conference, it’s about the only way to get sponsors and keep the prices low. What I noticed this year is that students actually like it. Of course, it does not apply to those not looking for a job, but most of them actually got back from lunch in time for the career fair.

As I have been independent for over a year, a job really is the last thing I am looking for, but I do like speaking to people from the industry and learn what they do and what they are looking for. Plus, unless I know what they do, there is no way I can forward them students that fit the profile when they come talk to me. For some reason, most don’t quite get that detail and still try to recruit me. Can’t we just have an interesting conversation about software?

CUSEC had a great booth line-up for attendees to visit:

  • Direct Energy
  • Telus
  • Mansef
  • RadialPoint
  • Avanade
  • SAP
  • IBM
  • Evertz
  • Microsoft
  • Autodesk

Most of the companies actually sent technical people to discuss with visitors, which was great. HR people tend to do a terrible job when asked ab do out work related questions. During a lunch discussion with one of the guys from SAP, I finally figured out what HR is for in the recruiting process: a filter to let the development team alone while they do their job.

As always in conferences, the sessions themselves and the program are only half of it. Sessions are only a way to stimulate discussions. There is nothing quite like being with 400 other people who share the same passion.

Categories: General Tags:

History

Getting into someone else’s code ain’t easy. For some reason, the aesthetics of the code never quite feels like our preferences. The code seems dirty, naive, unstructured or plain ugly. One thing I have found over time is that, with enough exposure to it, it always ends up not being so bad. Even when you make the mistakes of rewriting it altogether, some details of your own implementation remind you how elegant minor pieces of the previous ones were.

It may be in the way an application was translated in multiple languages even if it was only ever to be used by half a dozen local users, or in the way the complete apparent lack of structure in a CMS allows different components to be really well integrated and provide a great experience to users. I find that beauty in the story of the code and its authors. In fact, I think that learning about the evolution of the piece of software, the experiences of the past authors and the overall context in which the development took place to be the only true way to appreciate working in code written by someone else.

No matter what, what we produce is only ever a reflection of what we are at that point in time. Our personal or collective stories brought us to that point. Unless you understand the motivations that drove the development, there is no way you can understand the basic qualities that were built into the system, there is just no way you can observe those qualities and esteem the code that lies before your eyes.

I tend to become really attached to the code I wrote. Seeing someone destroy my brain dumps without trying to understand them is simply irritating. As we evolve as programmers, we learn new tricks and tend to ditch our past accomplishments, but looking back, I can still respect qualities in my past work. During my first few months in the industry, my code was characterized by my own greenness. I had seen nothing of scale before, and therefore, my code was mostly original. It did not follow any common conventions, but would still bring ingenious solutions.

Later on, it moved to extremely object oriented to avoid the mess, then to astonishingly rigorous, procedural and simplistic for the extact same reasons. Data models went from simplistic and easy to understand, to extremely pure and normalized, and then back to some sort of elegant middleground. At any point in time, I could have justified my design decisions and defend them with pride, but only the story that led you there can explain those decisions. It may have been that the development project was completely exploratory and building new tools not knowing exactly where the road will end, or because we were trying to generalize the company’s processes after spending too much time maintaining code that did nearly the same thing. Each decision makes sense at the time.

These days, my priorities are focused around long term maintainability. They might be different in a few months. My current goals are driven by my current situation. In the past, my goals may have been to learn and experiment rather than serve clients not have to answer their calls forever. One thing for sure, if you try to maintain code that was built to be experimental, you will have a hard time, but you can still enjoy watching it’s evolution through revision control.

One thing for sure, all creations are only a reflection of their authors.

The same thing applies to organizations. Company cultures represent their founders and those who built it. Focus on quality and project control does not get created by itself. If a company is built by someone from the aerospace industry for whom failure is not an option, it will definitely be very rigorous. The company culture will then affect its residents until they will be ready to convince you it is the best thing to do. No one decides one morning to pick up a software estimation book and read it for fun. You get influenced to do so. Culture spreads and evolves. Creations are left all over as artifacts of time.

Books are such a great example. The software industry has so many trends. Some books are known as seminal, but if you read them today, they wouldn’t be so interesting. They would seem outdated, naive or plain bad. If you get back in the context of 1970 with information exchange technologies available, understanding of the computer science and just enough self-trained professionals, formal requirement and design processes make more sense than they do in today’s context. I never skip the preface and always take a quick look at the biography before reading a book. Otherwise, there is no way to understand the context in which it was written.

Time shows significant culture shifts, but market segments are almost more drastic. Agile methods are almost the norm today, yet some industries look at them and don’t quite understand how they fit in. Extreme Programming started on a payroll program as an internal development. No wonder customer relationship worked so great and just in time requirement elaboration worked so great: the client was next door and, seriously, can you think of a more understood program than a payroll? Would a software to control a multi-billion robotic arm controlled in free space around a hundred-billion space station make the same decisions?

When looking at traces left from the past, context is everything.

Even simple events like conferences are strongly influenced by their organizers. Between 2003 and 2005, PHP Quebec had a professional track with use cases from a business perspective. Later on, those were replaced with more process-centric sessions. These days, most of it is about security, scalability and performance. The changes are certainly not only due to market changes. If you look at CUSEC’s speaker line-ups over time, you will notice different trends.

Spend some time to look around and figure our the history of what you encounter, and think about it twice before destroying things. Find the value, then you will be able to judge if it’s worth keeping.

Categories: General, Programming Tags:

Code Release: PDM Works Enterprise Wrappers

As mentioned last year, I am releasing my wrapper classes around the PDM Works Enterprise COM object library. This library was by no means created to map the API functionality to PHP classes. Instead, it provides a minimalistic set of functions I needed to perform my tasks. Feel free to improve them to suit your own needs. The classes are released under the MIT license, so use at will.

To use the library, first create an instance of LPH_PDMWorks_Vault with your credentials. From there, you can obtain an instance of LPH_PDMWorks_Folder, which will allow to reach any file or folder within the vault.

Before the release, I added some documentation and removed some links to external elements. I did not fully test the classes afterward, but am fairly confident they will work. Enjoy!

I am no longer maintaining this code, so this is the first and final release. I can answer questions if any.

Categories: Programming Tags:

CodeFest 2008: A geek workspace

The original idea was to have an other code fest somewhere after the PHP Quebec conference in March. While that CodeFest will still take place, we couldn’t wait that long and planned one for the week-end. Again, it was a huge success. Around 20 people showed up. We actually had name tags the first day because of the new unfamiliar faces. This time around, it was held at La Bande Passante.

During the last CodeFest, we all went there with OpenID in mind and a project to implement it in. This time around, there was a vague idea around Microformats and it took a while before everyone got started on their projects. I didn’t really get to see that part of the event as I was busy on a completely different agenda. Evan Prodromou and I had the objective on writing a converter from MediaWiki to TikiWiki. This was actually the idea that triggered the CodeFest in the first place, but the idea was too small to get many people contributing to it. Our project was nearly done by the end of the afternoon on Saturday. The code is in CVS and ready to be used.

It’s a good thing we did not spend too much time on it, because Sunday was all about Wiki-Translation. We used the opportunity of being all together to really kick-off the project and align priorities. Alain Désilets had the great idea of bringing post-it notes. We did a complete agile-like project launch starting from user stories to task prioritization. These are the steps we went through:

  1. Naming movies we like and post them on the wall.

    Apparently completely useless, but it did get us started and used to write stuff down and throw out ideas. I don’t know if it really was a mandatory warm-up, but the 5 minutes we spent on it was not much of a waste.

  2. Identify use cases and small stories where translation could be useful.

    In a matter of minutes, we came up with over 25 different stories, some similar to others, but showing different aspects and contexts. I really never expected we would get so much. I wish we could actually publish them, but most of the experience was oral and only a few words were ever written on paper as a reminder while we did it.

  3. Regroup and categorize stories

    This was actually a very hard part. What we soon realized was that we couldn’t simply draw a line or two to split them up. Two dimensional space was not enough to categorize those stories. Translation is way too much of a broad topic. Instead, we came up with dimensions to classify them. Divisions were minimalistic, but very easy to determine from a given story. (listed below)

  4. Find concrete applications

    Some of our stories were real, some were plausible fiction. Obviously, there is no way we can hit all targets, so we decided to narrow-down the objectives to our potential test sites. For each test site, we identified where they were located for each dimension. In the end, we selected a single site we should focus on to begin with.

  5. Find roles

    The brainstorm was at it’s peak. I still don’t realize how it happened, but we ended up finding over 20 user roles for the test site. Of course, many were similar, but really, I never expected to fill a wall on this one.

  6. Identify tasks and cross reference

    With the roles in hand, we started identifying the tasks these users would perform. Again, we had tons of them. We made sure all roles had tasks and all tasks had roles and moved on. It was getting late, maybe we could have spent more time on this one.

  7. Prioritize tasks

    This is the moment where we realized we had a whole lot of stuff missing. Trying to build workflows from our tasks made us realize that we had gaps to fill. We were able to split the tasks in 4 groups and put them in order with their dependencies… roughly. The end result is more of a guideline than an actual implementation plan, but it did align everyone on the project’s objectives.

These are the dimensions we came up with. Most of them are connected. We could probably reduce the set even more, but the rules are simple enough this way.

  • Amount of content consumers vs amount of content producers

    This factor really indicates if the community is actively creating content or most of the content stays static.

  • Mandated vs non-mandated

    This factor takes into account wether the effort is volunteer or you can actually expect work to get done by a certain date.

  • Document is an end in itself vs a way to achieve results

    We had scenarios where wikis were used internally as a method of communication and others where it was only building up information (Wikipedia-style).

  • Translations must be aligned vs used in a synergistic way

    For documentation, you really want all languages to have the same content, but in other contexts, you might want to skip some information or make it evolve differently, which is mostly the case where each version should keep cultural aspects.

  • Control is top-down vs organic

    Is the content creation organized or will it just happen in some disorganized way?

  • Content quality is important vs draft sufficient for communication

    It’s likely that a low-volume website with a minority using the translations will not spend tons of efforts translating. The translation may just be used as a way to propagate information quickly. It was proposed that only a summary of the text be translated. The foreign reader could, from the summary, determine if it’s worth the effort to try to understand the whole article.

For the Cross Lingual Wiki Engine Project, I think the CodeFest was really an important moment. I’m quite satisfied with the results we obtained from the brainstorm. Sadly, most of it is only in our heads. Very little could be written from it. The activity gave us perspective on the larger goals ahead of us, even if we decided to narrow-down the project for the first few iterations.

I only wish I could have spent more time looking into the microformats part of the CodeFest and meet the people working on it. I don’t really have any idea of what they achieved.

The next CodeFest will be after the PHP Quebec Conference and will most likely be an optimization workshop. Until then, CUSEC 2008 is only a few days away.

Categories: General Tags:

Code Release: OpenID Adapter for the Zend Framework

There is currently a proposal to include OpenID support to the Zend Framework. Until the implementation is finalized, you can use this very simple Zend_Auth adapter. To use it, simply follow the standard documentation and replace the adapter you would normally use with this one. The adapter relies on version 2.0.0 of the PHP OpenID Library. Enjoy.

The code is not so smart. It’s heavily based on the samples provided by the library. Feel free to improve it to suit your own needs.

Categories: Programming Tags: