Personal Workflow Blog

To content | To menu | To search

general

Articles about eclectic things that don't fit in more specific categories.

Entries feed

Tuesday, 7 April 2009

Should The URL Include a Date, or Not ?

A common URL pattern for a blog entry URL is Year/Month/DayOfMonth/Post_Name. This URL is generated at the blog entry creation time. It will never[1] change anymore afterwards.

Notes

[1] Although it can be manually changed, it is usually discouraged

Continue reading...

Monday, 26 May 2008

Why Negative comments are better than positive ones

Why Negative comments are better than positive ones If you are reading this blog and thinking Hey ! What a He's just talking nonsense... please don't walk away in horror. It would be very much appreciated if you drop me a comment about what is wrong in my post instead. I actually prefer to have negative comments than positive ones... at least when they are well argumented.

As a matter of fact, we mostly learn by our mistakes. If you do something and it works, you are really happy but you don't know why it works. The next time you have to do something quite similar you are tempted to change the least possible in order not to be disappointed. This leads to the infamous Cargo Cult Programming effect. Whereas if it doesn't work you spend some times, but just learned something that you can subsequently reuse.

It's actually by been challenged that you make the most interesting progress. I nevertheless agree that when in isolation your raw productivity is much bigger than when being part of a team. The reason if quite obvious : since you don't have to argue with others, you can spend all your time doing useful stuff. The main problem with this approach is that the real goal (where you really should go), isn't necessarily where you think it is. So you just might go very fast, but aiming the wrong goal. Sometimes the very fact explaining something to someone (that didn't even disagree) can show you the internal problems of your way of thinking.

It's actually the convincing-battle that you have to fight with your audience/co-workers/etc that leads to the most interesting solutions. We are all humans, and each had different experiences, hence different point of views. So the real cleverness is to be able to take the ladder of your opinions, climb with them on the shoulder of giants and give the feed back your fellow giants what your new point of view gives you to see. I really insist on the feed-back stage, knowledge is something you can even increase by giving it, since it usually makes you think ways that you would not have explored normally.

So I do write in this blog with my own convictions. It is certainly not the universal truth, but it's my very own vision of it. If you feel that I'm wrong, feel free to tell me : I don't say I'll agree with you, but it may be a very interesting battle that might even elevate both of us.

Friday, 28 March 2008

Speed Up OpenOffice with LeapHeap

Using a new heap manager like Leap Heap under windows takes OpenOffice to blazing speeds. Tried the same with FireFox with the same conclusions.

Would it be possible to learn from this little add-in ?

Friday, 28 September 2007

Clean-Up Your Code and Boost Your Google Ranking at the Same Time : Post-process Your Links

The search engine ranking of a web site is very important nowadays. As usually every optimisation means an complexification of the code, many developpers just pay that price. It's mostly paid with a javascriptification of the links that we don't want to be followed, and javascriptification of functional dialog popups.

There's an other approch to this. It still makes heavy use of Javascript, but :

  • your site will still work as intended even with javascript disabled
  • your site will be much more maintenable

The idea is to post-process the links with a Javascript function that is triggered just before the end of the loading of the page. Usually it can be done with a body-onLoad, or a <script/> element at the bottom of the page. This script parses all the <a/> elements, and decodes the classes added to it. If you encode the classenames like this code :

<a 
href="my_popup.html" 
class="medium_popup pp/popup">
        explain these words
</a>

We can see that the classes of the link are medium_popup, that is handled normally by the browser, and pp/popup is used by the post-processing code to add a onClick() handler that could be expressed as onClick="javascript:open_popup('my_popup.html');return false;".

The big advantage is that you can very simply add popup to your links, web-spiders knows how to go to your popup with all your shiny glossary, and so can users without javascript or just open in a new tab with a middle-click on some browsers.

If it's a dialog box to ask some more informations, you can encode the link like that :

<a 
href="" 
class="medium_popup pp/link/my_dialog.html">
        choose the date
</a>

This way pp/link/my_dialog.html will be parsed and the href will be dynamically replaced with my_dialog.html.

You can even later add a pp/popup after the pp/link/my_dialog.html, and have the dialob box magically opened in a popup.

I'll post later some example code to parse it.

Monday, 10 September 2007

Are Workflows the Future of IT Computing ?

We are about to change from a "CPU power is cheap"-paradigm to a "CPU are cheap"-one. Everyone knows now that the 10Ghz barrier will not be that easily broken like said Herb Sutter in his famous The Free Lunch Is Over DDJ article.

I also think it will be much cheaper to produce a 3Ghz 128-core CPU than a 10Ghz 1-core one, and that's a huge problem in our current way to code. Current common code just isn't adapted to a many-cpu world as said Jeff Atwood in his comparison of 4- and 2-way systems. It's because real parallel programming is not easy. Even our current practices of locking are quite difficult to get right.

A good way do it efficiently, is to delegate the plumbing of parallelizing the tasks to an automated system. It seems at first less efficient to do, but noone really want to go back to ASM programming. We really have to define a new level of language that auto-parallelize the treatements, like the way we code in a high-level language that is either interpreted or even compiled.

This move in the programming area is of same order than the move from ASM to scripting or compiled language. And here you have 2 differents approaches :

  • the static (compiled) way
  • the dynamic (interpreted) way

In the static way, you have also mostly 2 choices :

  • a language (usually compiled) that handle the dividing & regrouping of tasks, like the model followed by OpenMP using mainly threads, shared memory and locking.
  • a language (usually fonctionnal) that handle the differents tasklets with a message-passing like interface (Erlang is a good example of this)

The dynamic road is less defined. But usually it involves a state-flow machine, that can coordinate all the tasks to do on all the processing units. That is usually done via a Workflow (also called BPM-engine in this particular area), like the Master-Worker pattern Alex Miller speaks about.

This last item is, in my opinion the future. If you put everything in a database, and the BPM-engine interprets each item independantly, wich a high focus on a runtine resolution of the next thing to do. It gives you a highly flexible design that you can change at runtime without much of trouble. Its flexibility is quite the same the one you would have with scripting languages (think Ruby) versus compiled one (think Java).

- page 2 of 3 -