<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22646646</id><updated>2012-01-22T10:39:41.558+01:00</updated><category term='Personal'/><category term='Intelligent-Agent'/><category term='Development'/><category term='Data Warehouse'/><category term='Professional'/><category term='Thesis'/><category term='Tourisme'/><category term='Web'/><category term='Open Source'/><category term='Data Mining'/><title type='text'>Martin Ouellet Notes</title><subtitle type='html'>Anything but a blog...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22646646.post-7287528029319550894</id><published>2011-04-11T09:15:00.007+02:00</published><updated>2011-05-03T11:25:24.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Personal Knowledge Management</title><content type='html'>I've always been looking for a tool that could simplify all notes I take to store and gather business knowledge I accumulate along my consulting activities.&amp;nbsp; This could even be leveraged &amp;nbsp;for other aspect of life for that matter, but for now my need is to optimize the knowledge acquisition and retention done when taking on new professional projects.&lt;br /&gt;&lt;br /&gt;The level of &lt;a href="http://en.wikipedia.org/wiki/Cognitive_load" id="t7ih" title="cognitive load"&gt;cognitive load&lt;/a&gt; is directly linked to all the new information (principles, fact, rules, definition, etc.. ) that is &amp;nbsp;to be assimilated early on any new project inception.&amp;nbsp; Any method or tool helping me to optimize my knowledge acquisition and management could certainly be a big benefit for the project.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The key spec I'm looking for in such a tool are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;must be flexible and easy to add new content without having to first organize and structure the content, the relationship among concept and taxonomy&lt;/li&gt;&lt;li&gt;must be light (must not "get in the way" ) and ideally available from the net and stored the info centrally&lt;/li&gt;&lt;li&gt;must easily allow for structuring, re-structuring the content (either through tag, hierarchy, taxonomy, etc...)&lt;/li&gt;&lt;li&gt;and obviously must be intuitive...&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;There are tools more oriented toward online collaboration which have been adapted for personal use: personal wiki ( e.g. twiki for personal, moinmoin personal). &amp;nbsp;But I find these too html-presentation oriented... my concern is to gather information not how should it be represented.&lt;br /&gt;&lt;br /&gt;Although I did not yet find the optimal solution, I find the tools that falls into the area of &amp;nbsp;"mind-mapping" (e.g. theBrain, freeMind, thinkgraph) to offer good characteristics. &amp;nbsp; You are not too worried with how info is presented (since it pretty much follow a fix canvas) so you can fully dedicate yourself with the information content. &amp;nbsp;However, it does suffer from a few limitation: &amp;nbsp; volume content (I don't see collpasing/exploding thousands or more nodes), versioning and/or time-dependent information, ...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;So until I find a better match, I will keep on relying on mind mapping software, and it always help when you can have a good open source and free version such as &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Download" id="mj.e" title="Freemind"&gt;Freemind&lt;/a&gt;. &amp;nbsp;&amp;nbsp;And for an online solution, there is also&amp;nbsp;&lt;a href="http://mind42.com/" id="i43p" title="mind42.com"&gt;mind42.com&lt;/a&gt;. &amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;As an example, I just used it to gather some background knowledge on rules/best practices applicable when one wants to define data layer of aggregation in a typical data warehouse implementation relying solely on relational technology&amp;nbsp;&amp;nbsp;(inspired from&amp;nbsp;&lt;i&gt;&lt;span style="color: black;"&gt;&lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471777099.html" id="i.st" title="Mastering data warehouse aggregates"&gt;Mastering data warehouse aggregates&lt;/a&gt;)&lt;/span&gt;&lt;/i&gt;. &amp;nbsp;Here is a partial view of this guideline (done with Freemind):&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-in_X4-zCTB8/Tb_IZEfEH3I/AAAAAAAABfs/0b0DYVALRfA/s1600/Aggregation-partial.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://2.bp.blogspot.com/-in_X4-zCTB8/Tb_IZEfEH3I/AAAAAAAABfs/0b0DYVALRfA/s640/Aggregation-partial.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Here is the same guideline shown as a dynamic mind map&amp;nbsp;:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;iframe frameborder="1" height="700" src="http://mind42.com/pub/mindmap?mid=a2f4711f-27f8-4fbc-a422-96d0d906171b" width="700"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Martin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7287528029319550894?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7287528029319550894/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7287528029319550894' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7287528029319550894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7287528029319550894'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2011/05/personal-knowledge-management.html' title='Personal Knowledge Management'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-in_X4-zCTB8/Tb_IZEfEH3I/AAAAAAAABfs/0b0DYVALRfA/s72-c/Aggregation-partial.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3398194344381711032</id><published>2010-08-05T17:38:00.018+02:00</published><updated>2010-08-25T17:36:51.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Thesis'/><title type='text'>Thesis</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the reason why I'm holding this blog is to archive things I consider important enough to be kept in a longterm platform as I hope this one to be? A while back, I wanted to put online the thesis I wrote in the mid-90's... wow that sounds old!  Being optimistic I though this would be a simple matter... it is not as if I wrote this with a typewriter requiring me to scan the entire document! &amp;nbsp;Word processor existed back then and I even used what was considered at the time the top of word processor: &lt;i&gt;WordPerfect&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well this wishful thinking was ignoring limitation of technology and its rapid obsolescence.  When I consider what I ended up using to archive this important piece of work&amp;gt;  not USB Flash drive, not CD , not DVD, not even Zip drive.. yes on those 3.5inch floppy disk: there was simply no chance of getting it back.  I did manage to restore one diskette, but was less successful in reading and converting its format (of course I kept the files on their original WP 5.2 format ! ).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;I bet nowadays most modern Universities preserve all post-grad work in their original digital content. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, enough allusion to my age, and here is the main content of this post&amp;gt;  A full scan in pdf of my thesis dated back from 1994:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaYzFjNjcwMGEtYzU3Zi00YTg4LTk1NjQtODk1OGRlYjg3Mjkx&amp;amp;hl=en"&gt;[pdf] Part-1&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaZTUxODZiNTUtMTcxNy00M2IyLTgwZmItZDkyODdhNDQ4NjJh&amp;amp;hl=en"&gt;[pdf] Part-2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaZmIzZDc2NzgtNDBhNS00YzBkLWJhNjQtZGFkNWFhM2E5ZDZj&amp;amp;hl=en"&gt;[pdf] Part-3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaN2U5ZGRiMTAtZDVjZS00Y2QzLWIxMDAtYzc4MTM3MWYzZTE4&amp;amp;hl=en"&gt;[pdf] Part-4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaZGFiMmMxMjgtODg4NC00YzNiLThhYzktODQzNGQyOWNlNTVl&amp;amp;hl=en"&gt;[pdf] Part-5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaZWUyNjEzMmUtYmIwZC00ZWVhLThiNjUtMTQwYTg1MWY5M2I0&amp;amp;hl=en"&gt;[pdf] Part-6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://docs.google.com/fileview?id=0By6yolBnyCUaYWQ4MWY5ZTgtOTEwZi00MmYzLWE5ZTgtNjU3OWUyNjFkMzlj&amp;amp;hl=en"&gt;[pdf] Annex &amp;amp; Biblio&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Martin&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;p.s. Note that the paper copy I could get a hold on to still contains some minor editing to be done, so for the real final copy I'll need to get to McGill University.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3398194344381711032?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3398194344381711032/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3398194344381711032' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3398194344381711032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3398194344381711032'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2010/08/thesis.html' title='Thesis'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2812989306755480280</id><published>2010-04-19T17:50:00.001+02:00</published><updated>2011-10-16T17:46:30.872+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>PALO MOLAP SERVER and Excel Add-in</title><content type='html'>&amp;nbsp; &lt;br /&gt;&lt;b&gt;&lt;span style="font-size: medium;"&gt;What is &lt;a href="http://www.jedox.com/en/products/Palo-Suite/palo-olap-server.html"&gt;Palo MOLAP Server&lt;/a&gt;:&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Palo is cell-related&lt;/li&gt;&lt;li&gt;Palo is an in-memory database&lt;/li&gt;&lt;li&gt;Palo is multi-dimensional&lt;/li&gt;&lt;li&gt;Support &lt;b&gt;Hierarchies&lt;/b&gt; in Dimension&lt;/li&gt;&lt;li&gt;Support &lt;b&gt;Attributes&lt;/b&gt; for Dimension member (e.g. to allow for localization, provide longer name … ) in addition to Element names. Note that these Attributes are stored in separate tables.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp; &lt;br /&gt;A local server is installed on your computer when you install the Palo client. You can log into the local servers of other computers in a network. In practice, this makes each local server public. You can create users and groups and also assign passwords to manage necessary access rights to your server. But &lt;u&gt;you can't add another server on the same computer&lt;/u&gt;. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;A Server can host many different Databases which contain one or more Data Cubes. Dimensions can be shared among different Cubes. A server can be installed and run privately (Localhost, by default: &lt;span style="color: blue;"&gt;http://127.0.0.1:7777&lt;/span&gt;) or on a shared server for concurrent multi-users access. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Palo OLAP Server with Excel Add-In is open source designed to help working with large data quantities represented &lt;i&gt;multidimensionally&lt;/i&gt;. Palo server can host multiple end-users on a network and thus eliminate the need to distribute all Excel tables with all well known problems associated to that. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Although its main focus is to work on top of Excel, it seemed to be supporting the OpenOffice Calc equivalent as well, although I did not try it.  &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&lt;span style="font-size: medium;"&gt;My observations done on the Palo BI Server 3.0 &amp;amp; Excel Add-in&lt;/span&gt;&lt;/b&gt;: &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Very robust and well designed with a full integration with Excel. So if you are a big Excel fan and don’t like the mess that this lead too in big organization this can help mitigate the often disastrous Excel over-used in today’s large enterprise. &lt;br /&gt;&lt;br /&gt;Who has not suffered from Excel hell where merely all managers start their own mini Reporting app initiative within Excel…another illustration of the &lt;b&gt;&lt;i&gt;Peter Principle&lt;/i&gt; applied to software application &lt;/b&gt;;-)!!! &lt;br /&gt;&lt;br /&gt;So if you are very good with Excel, then you can basically create Cube right-off the bath without merely leaving your comfort zone. Even all Cube management and Administration is done through a dedicated Menu &lt;i&gt;Palo&lt;/i&gt; added in Excel. &lt;br /&gt;&lt;br /&gt;Ok, at one point you will need to import data from external source, but even then you can easily use Excel built-in function to load a cube from a simple CSV file and leverage Palo provided Excel function to generate your hierarchies levels, your calculated metrics, your ragged dimensions (for example you could easily create a time dimension from a simple date format by deriving the quarter, week, months and year data using normal Excel functions). &lt;br /&gt;…It is quite cool you actually see these import in real-time with cells being refreshed in front of you (ok yes not so good for performance but you have the option to stop the refresh). &lt;br /&gt;Concerning the dimension, I’ve encountered a few limitations concerning its dimensions structure and Elements. Besides the documented naming restrictions concerning Elements (see below), consolidated Elements cannot have the same names (case insensitive, in contradiction with user-doc) as one of its sub-elements (i.e. parent can’t have the same name as children). It seems to be applicable throughout all the dimension hierarchy, no duplicates can exist at any level! (I remember Essbase having similar constraints?)  &lt;br /&gt;Also, complex dimension structure having multiple independent hierarchies in parallel tends to degrade performance considerably. &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;Documented limitation and rules about Characters allowed in element-names: &lt;br /&gt;Characters allowed in element name: &lt;br /&gt;&lt;i&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;Rules to follow for name of an element:&lt;/i&gt; &lt;br /&gt;&lt;i&gt;- The length cannot be 0.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;- It cannot begin with a blank.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;- It cannot end with a blank.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;- Names in &lt;b&gt;Palo are case sensitive&lt;/b&gt;!&lt;/i&gt; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;The most commons functions you would use within Excel are:&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;--- PALO.DATA()&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;This is used to represent data of a cube inside Excel (work in both read/write mode ) based on the arguments listed. The arguments are used to identify the host, database and the cube. Obviously we must include the dimension/measures elements in order to address the cube cell precisely. &lt;br /&gt;Other similar function exist to represent data (PALO.DATAC and .DATAV) but these differ only by how the data is fetched: each sheet cell individually (PALO.DATA being the slowest), all sheet cells having PALO.DATAC formulas will be calculated in one-pass, whereas the PALO.DATAV is even faster because it leverages Excel array formula (not always possible).&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=22646646" name="OLE_LINK4"&gt;&lt;/a&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=22646646" name="OLE_LINK3"&gt;&lt;b&gt;---&lt;/b&gt;&lt;/a&gt;&lt;b&gt;PALO.EADD()&lt;/b&gt;&lt;b&gt; &lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;This is used to Add Elements within existing Dimension. We have also arguments to provide server/database as well one to provide the Dimension name. Other argument is to give the &lt;b&gt;Type&lt;/b&gt; (‘n’ : base element, ‘c’: consolidated) specify the type of elements. The use of type "n” can always be used since it will anyway be converted to ‘c’ later on during import when sub elements are assigned to parent element. &lt;br /&gt;We need obviously to provide the &lt;b&gt;Element name&lt;/b&gt;, the &lt;b&gt;Parent name&lt;/b&gt; (optional since top parent may not have any) and &lt;b&gt;Weight&lt;/b&gt; (number used to describe the consolidation factor). A final important argument is &lt;b&gt;Clear&lt;/b&gt; : this decides if the dimension should be cleared for all elements before importing, so when this parameter is set to TRUE all elements are deleted before importing and when it is set to FALSE it just updates old and inserts new elements.&lt;br /&gt;So you should change this parameter in all your PALO.EADD functions from TRUE to FALSE to avoid clearing the dimensions. &lt;br /&gt;&lt;i&gt;Possible parameters values are 0 (or FALSE), 1 (or TRUE) and 2&lt;/i&gt; &lt;br /&gt;&lt;i&gt;0: Removes before importing no elements of the dimension.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;1: Removes before importing all elements of the existing dimension.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;2: Removes before importing all existing elements of the C-dimension, basic&lt;/i&gt; &lt;br /&gt;&lt;i&gt;elements&lt;/i&gt;&lt;i&gt; are not deleted.&lt;/i&gt; &lt;br /&gt;&lt;i&gt;&lt;/i&gt; &lt;br /&gt;&lt;b&gt;Attention with Problem of removing Dimension element with PALO.EADD&lt;/b&gt;: &lt;br /&gt;I had this problem until I realised that PALO imports work in the entire workbook (not only the active worksheet)! So when you are importing using the PALO.SETDATA function in one worksheet any PALO.EADD function in other open workbook will also be run. But since new rows are only imported in the active sheet, only the currently displayed (last) row in inactive sheets are imported again using PALO.EADD. &lt;/blockquote&gt;&lt;b&gt;---PALO.EADD() &lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;And obviously you also have a function to load fact data into the Cube: &lt;b&gt;PALO.SETDATA&lt;/b&gt;. This function works similarly as PALO.EADD (must specify server/database/cube), as well as all the coordinates elements (for which dimension member the value is loaded) and obviously the cell value (the value of the measure specify in the coordinate). It has also a Splash (a funny terminology ?!!) argument which indicates whether we can write to a consolidated element (and distribute data evenly among children afterwards..).&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Important Design PALO features&lt;/b&gt;:&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=22646646" name="OLE_LINK2"&gt;&lt;/a&gt;1.&amp;nbsp; &lt;a href="http://www.blogger.com/blogger.g?blogID=22646646" name="OLE_LINK1"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Attributes&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;Attributes are used to provide additional element properties (e.g. other languages, elements description like Product description, code and other attributes, and also special number like Product Unit Prices, etc..). &lt;br /&gt;A very Palo-specific way to manage these Attributes is done through a dedicated special Cube (Attribute-type) stored independently of the Cubes having the fact data. These independencies between Attributes and Elements data is flexible, but force you to switch back and forth between different Cubes during normal Reporting….&lt;/blockquote&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;2.&amp;nbsp; Hierarchies&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;Palo support Hierarchy inside a Dimension, and these hierarchies can be Balance or Unbalanced and even Ragged,. You can even have multiple hierarchies within the same dimension (same elements can belong to different consolidations element, i.e. different Parent). &lt;/blockquote&gt;&lt;b&gt;3.&amp;nbsp; Comments&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;You can add Comment elements (defined as normal elements in Dimension but important to set in &lt;i&gt;String&lt;/i&gt; format and not &lt;i&gt;Numeric&lt;/i&gt; format typically used for normal Elements).  &lt;/blockquote&gt;&lt;b&gt;4.&amp;nbsp; Calculated Elements &lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;To create calculated Elements (typically Calculated measures), we have two options: &lt;br /&gt;1) set up so-called server &lt;b&gt;Enterprise rules&lt;/b&gt; in the database where computations are done within the database… these Enterprise rules may involve complex models and large data volumes impacting potentially the speed as a great deal of computing may be required to calculate the entire cube). &lt;br /&gt;2) a simpler approach and sometimes good alternative is the use of &lt;b&gt;Push Rules&lt;/b&gt;, i.e. operations, which are performed in Excel and the results of which are then written back into the cube, so no need for Server-processing. This is done through the use of PALO.SETDATA function to upload into the cube any elements cells and then leverage all Excel functions used to calculate the Elements. &lt;/blockquote&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;5.&amp;nbsp; Consolidation Factors&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;With hierarchical structures you may factor elements differently among all children of a Parent. Typically you normally have an equal factor (=1), but you may need to weight the elements differently: negative weightings for Measure-type element for which you would derive a consolidated Parent (e.g., when consolidating expenditures and revenue to have a Profit-type consolidated member).&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;&lt;span style="font-size: medium;"&gt;How-tos:&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;- Creating new cubes&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;The following sequences are normally necessary to Create a complete new Cube: &lt;br /&gt;I. Create a new database &lt;br /&gt;II. Create dimensions &lt;br /&gt;III. Create a cube with the dimensions &lt;br /&gt;IV. Importing elements into the dimensions &lt;br /&gt;V. Import data cells &lt;br /&gt;&lt;b&gt;Important: &lt;/b&gt;Dimensions are created independently of Cube (they are stored at the Database-level), so that we can delete complete Cube without loosing any Dimension data. On the other hand, updating a Dimension structure/data will impact all associated Cubes.&lt;/blockquote&gt;&lt;b&gt;- Importing External Data &lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;Although it is quite simple to populate Dimension and Cube directly doing data entry Excel, it is certainly not practical with large volume of data. So other options exist. &lt;br /&gt;Import options (through special Excel built-in functions) from different source: &lt;br /&gt;- text files  &lt;br /&gt;- other Palo cubes  &lt;br /&gt;- database through ODBC driver &lt;br /&gt;- from direct excel Worksheet &lt;br /&gt;- some external ETL standard tools (including PALO ETL Server application) &lt;br /&gt;Final option is through Database back-up: although Palo is memory-based, it obviously keeps a copy of each database into dedicated directory. Each Database-directory has three different files types (1-, 2- and 3- ) directly stored within the server file system.  &lt;br /&gt;It is convenient to do backup copies of database by simply copying the full directory content (after having stopped the PaloServerService)…that you can also use to transfer full Database (with all their cubes/dimensions) into a different host. &lt;/blockquote&gt;&lt;b&gt;- Working with Snapshot&lt;/b&gt; &lt;br /&gt;&lt;blockquote&gt;Also convenient is to work on a normal Excel Worksheet without being connected to the Palo server. This is possible on any worksheet tied to a PaloServer with the options &lt;i&gt;Save as Snapshot&lt;/i&gt;… this will change all Palo-specific formulas in cells by normal data values… as any standard Excel sheet. &lt;br /&gt;Similarly but not quite the same, you can also work on an offline mode (so the cells keep their Palo-specific formulas) to be able to see data without any connection to the Palo MOLAP Server (this requires to activate the &lt;i&gt;Use client Cache&lt;/i&gt; in the Database settings).&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2812989306755480280?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2812989306755480280/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2812989306755480280' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2812989306755480280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2812989306755480280'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2010/04/palo-molap-server-and-excel-add-in.html' title='PALO MOLAP SERVER and Excel Add-in'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3164511830759438554</id><published>2010-04-13T19:10:00.044+02:00</published><updated>2010-08-25T19:07:34.913+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>La région du bassin du Souss-Massa</title><content type='html'>Les dernières vacances m’ont permis de voir pour la première fois un pays du Maghreb, le Maroc.&lt;br /&gt;&lt;br /&gt;Premières impressions depuis l’avion: &amp;nbsp;c’est beaucoup plus vert que ce que j’aurais cru étant donné la proximité du désert…  mais peut-être que la conjonction de l’océan et des chaînes de montagne Atlas fait en sorte que la saison des pluies arrosent tout de même un peu une partie de ce grand pays ? &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Après vérification, la région du bassin du &lt;a href="http://www.morocco-travel.com/morocco/Massa/"&gt;Souss-Massa&lt;/a&gt; où l’on se trouvait est plutôt caractérisée par un climat subdésertique handicapant sérieusement les cultures céréalières.  Par contre, grâce à l’exploitation des nappes phréatiques, la culture arboricole est très présente ce qui explique la présence de grandes étendus de champs de verdure correspondant à exploitation d’arbres agrumes (oranger, clémentine, citronnier,..).  On comprend mieux l’omniprésence de tous les fruits marocains dans nos marchés.   L’agriculture est très importante pour l’économie du pays et est apparemment très conditionnée aux quantités de pluie reçu…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rwVe4_B3I/AAAAAAAABY4/jDQymD2JRz0/s400/Maroc_2010%20160.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rwVe4_B3I/AAAAAAAABY4/jDQymD2JRz0/s400/Maroc_2010%20160.jpg" style="cursor: hand; cursor: pointer; display: block; height: 300px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Paysage pris des collines tout près d'Agadir.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aussi typique de ce pays sont les épices que l’on retrouvent partout exposés et frais dans les souks … entre la coriandre, le safran (épice les plus chers au monde extrait à partir&amp;nbsp;d’une fleur au pétale mauves), le cumin, le gingembre, la cannelle, le clou de girofle, la noix de muscade, ou encore les mélanges préparés pour les tajines et couscous comme le &lt;a href="http://fr.wikipedia.org/wiki/Ras_el_hanout"&gt;Ras el hanout&lt;/a&gt; (composé traditionnellement de plus d'une vingtaine d'ingrédients!).   Le choix est vraiment impressionnant comme en témoigne la photo pris du marché berbère de Taroudant.  La cuisine marocaine en est bien imprégnée surtout dans ses couscous et autres tajines apprêtés avec plusieurs épices raffinées.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;L'épice&amp;nbsp;la plus mythique est sans aucun doute le&amp;nbsp;safran cultivé et exporté principalement du creux de l’anti-Atlas entre Taroudant et Ouarzazate. &amp;nbsp;Y'a aussi le piment doux, la coriandre en grains et bien-sûr la menthe douce qui demeure un symbole fort grâce au thé à la menthe sucrés tradition importante de la vie sociale dans tout le Maghreb.  La menthe du Maroc serait considérée comme une des meilleures du monde !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tous ces épices se retrouvent en abondance dans le souk et autres marchés. &amp;nbsp;Un exemple de marché authentique est celui de la&amp;nbsp;petite ville de Taroudant très recommandée avec ses 2 souk berbères et arabes.  On a un meilleur ratio qualité/prix qu’à Agadir, donc conseil aux touristes il faut se déplacer des villes les plus touristiques pour trouver de bonnes affaires.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_UbBVZqlR1kY/S8rvzEy66CI/AAAAAAAABW8/e1JQfUBE5u0/s400/Maroc_2010%20115.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://lh5.ggpht.com/_UbBVZqlR1kY/S8rvzEy66CI/AAAAAAAABW8/e1JQfUBE5u0/s400/Maroc_2010%20115.jpg" style="display: block; height: 300px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dans le souk on trouve presque de tout... des céréales, des meubles artisanaux jusqu'aux animaux de la ferme!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/3HUQb9nCsqgzxd4o7wBgAvt_-2l41BlANY4twAqbmFs?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rvsrT6BlI/AAAAAAAABWg/gzgye7YaBi0/s400/Maroc_2010%20109.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;C'est assez impressionnant sur cette photo du souk, comment les femmes s'empressent à se cacher le visage: dans la culture musulmane les gens refusent souvent de se faire photographier et ce plus particulièrement les femmes ...  ce serait pour éviter toute idôlatrie de reproduction d'être vivant! &amp;nbsp;J'ai pris réellement connaissance de ce comportement une fois retourné à la maison ...et oui j'ai été digne du parfait touriste.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;Autre particularité du monde végétale du coin est l'Arganier, petit arbre endémique du Maroc. Son amande a des belles qualités et se transforme en huile soit de cuisine ou de produit de soins pour le corps.    D'ailleurs on voit de plus en plus cette huile dans nos magasins...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Me voici avec Mathias explorant les champs de l'Arganier dans un bolide de son choix ! &amp;nbsp;Plus tard, il m'avouera qu'il s'était caché les yeux par peur... peur qu'il combattait en se répétant inlassablement que son papa était un bon conducteur !!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/RBuAXltt7qT0YDT1vyylT_t_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8runW6745I/AAAAAAAABUA/2kVUpw8dYo8/s400/Maroc_2010%20032.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Une autre photo de l'arganeraie où  les plus fins observateurs apercevront les &lt;a href="http://www.nanchen.net/afrique/maroc/carnets/desert-taroudant.htm"&gt;fameuses chèvres grimpeuses&lt;/a&gt; d'Arganier:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;"&gt;From &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Maroc_2010?authkey=Gv1sRgCL-PzLPHuLWl_AE&amp;amp;feat=embedwebsite"&gt;Maroc_2010&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/zv8bILl57pHvR1CHLMjmfPt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rwJfVL_cI/AAAAAAAABYM/ONbY0b263Ps/s800/Maroc_2010%20142.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;une fois le fruit recueilli de cet arbre, on peut en extraire&amp;nbsp;l'huile&amp;nbsp;à partir de son amande:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/X4Odru6Iv3boJuZlicwo4ft_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/S8rv4XeglII/AAAAAAAABXM/_1vQ2_Iuhu4/s400/Maroc_2010%20120.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Autre attrait à voir de Taroudant est la&amp;nbsp;synagogue qui a été convertie en lieu de trésor aux &lt;i&gt;plaisirs pour les yeux&lt;/i&gt; depuis le départ de toute la population juive de cet endroit (la communauté juive du Maroc est aujourd'hui seulement présente dans les grandes villes).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/BoF7_z-8km64570--ycEXvt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: auto; margin-right: auto;"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rv-KIIFfI/AAAAAAAABXk/h9lyrnEVWhs/s400/Maroc_2010%20126.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Vue de l'intérieur de la synagogue avec toutes ces décorations ostentatoires (par ailleurs tous à vendre, à condition d'y mettre le prix )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y'a une autre facette du pays qui nous moins plu: cette&amp;nbsp;culture de marchandage et cette pression commerciale très présente dans les rues... surtout dans les villes plus touristiques où tout touriste est assurément racolé à peu près à chaque coin de rue. &lt;br /&gt;&lt;br /&gt;Ok il faut savoir composer avec cela et c’est pas trop agressif non plus.  Bon il est vrai qu’on va trouvé de beaucoup meilleur prix sur la rue (la voiture louée à 5fois moins cher que celle trouvé via les agences touristiques normales ), mais certains voudront éviter d’avoir à gérer ces négociations et le pourboire une fois le service fourni !&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Parlant de marchandage, on ne pourra passer sous silence le fameux marchand de tapis.   On a eu une agréable surprise d'ailleurs avec cette rencontre d'un marchand des plus typique  qui a fait toute une mise en scène pour expliquer les différences entre Berbère, nomades et bédouins, la signification des dessins et style des tapis et leur origine.  Ok, y’a beaucoup de mise en scène pour augmenter les chances de vente, mais les enfants ont été conquis... et les parents ont finalement plié suite aux milliers de tapis déroulés!&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/G70TYbV7WFR1gNreajdJRvt_-2l41BlANY4twAqbmFs?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rwFeJHgeI/AAAAAAAABYA/4fxwPlyM7NM/s400/Maroc_2010%20133.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/_Z17oKmcl2QP7jaYv-dbIvt_-2l41BlANY4twAqbmFs?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rwG3jkNsI/AAAAAAAABYE/efAY6NIYgWk/s400/Maroc_2010%20134.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ce fut aussi accompagné de cette pratique de convivialité et d’hospitalité avec thé à la menthe. &amp;nbsp; On a eu plusieurs occasions d'y goûter et même les enfants se sont mis au thé.&lt;br /&gt;&lt;br /&gt;On a aussi parcouru le littoral entre Agadir et Essaouira via une route très agréable longeant plus ou moins la rive. &amp;nbsp;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Attention aux flics cachés derrière les panneaux de limite 60 souvent précédés d'une distance d'à peine 200m&amp;nbsp;par d'autres panneaux indiquant plutôt 80. &amp;nbsp;Je ne sais pas si c'est une attrape touriste, mais je me suis bien fait avoir&lt;/span&gt;&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ce littoral est parfois bien découpé, et on a pu constater la force&amp;nbsp;impressionnante&amp;nbsp;de&amp;nbsp;l’océan de ce côté de l'Atlantique!!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/THJ44J-ytLhMtK2UMxDQ0vt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rvlFyPd4I/AAAAAAAABWE/WEg2kB1U_mw/s400/Maroc_2010%20094.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Le long de la route, on voit aussi les avancés du désert qui semble se jeter littérallement dans l'océan!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/yQTXg3xKnSKvLGwXLw-uWft_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/S8ruvXdQvlI/AAAAAAAABUQ/gOA8NFcV90c/s400/Maroc_2010%20049.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Aussi plusieurs dromadaires nous apparurent&amp;nbsp;dans ces parcs&amp;nbsp;tout près de la route... sont-ils à l'état sauvages, je ne crois pas?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/XKx91BKzJ7rMUJwscpB_Vvt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh5.ggpht.com/_UbBVZqlR1kY/S8ruyzVzzQI/AAAAAAAABUc/YEAd8KtMrWQ/s400/Maroc_2010%20043.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On a fini l'excursion de la journée à la ville fortifiée d’Essaouira. &amp;nbsp;Cette ville apparemment très venteuse (confirmée lors de notre séjour) fut fondée au 18e siècle par MohammedIII et construit par des architectes européens. &amp;nbsp;Elle comporta un port marchand de grande importance mais qui est maintenant qu'un port dédié à la pêche.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/3Pp0m4LuNuJpnKMfhb8iUPt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img height="300" src="http://lh3.ggpht.com/_UbBVZqlR1kY/S8rvAzSt9lI/AAAAAAAABU0/PHdepWMLNOo/s400/Maroc_2010%20058.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;"&gt;From &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Maroc_2010?authkey=Gv1sRgCL-PzLPHuLWl_AE&amp;amp;feat=embedwebsite"&gt;Maroc_2010&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/lQAfs7sUU6zLQIlHLz4jR_t_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img height="640" src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rvaBe_xoI/AAAAAAAABVU/Df-6W6lb4wQ/s640/Maroc_2010%20068.jpg" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Voici quelques autres photos prises aux alentours et à l'intérieur de la ville fortifiée :&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/lQAfs7sUU6zLQIlHLz4jR_t_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://picasaweb.google.com/lh/photo/hZuFb1hZfppDhR_4OFSwfft_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rvMG-Tj3I/AAAAAAAABVI/yw5kWPDI8R8/s400/Maroc_2010%20065.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Q0wR5HMFJkqKI7kYM6kW-ft_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh5.ggpht.com/_UbBVZqlR1kY/S8rvHNe-Z5I/AAAAAAAABVA/OIjMx2YBFy0/s400/Maroc_2010%20061.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/xLcEXpdjm7vSSf7WBzmX2ft_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh5.ggpht.com/_UbBVZqlR1kY/S8rvbEQOmQI/AAAAAAAABVY/KaA9jM0WpKo/s400/Maroc_2010%20069.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les enfants toujours aussi sérieux:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/e84njOLFeQL0_4Jy_6uVCvt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rvFxPsz0I/AAAAAAAABU8/MRdWa8PiKfE/s400/Maroc_2010%20060.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finalement mes enfants m'en voudraient vraiment si ja passait sous silence le charmeur de serpent (c'est ce qu'ils ont &lt;i&gt;le plus apprécié du voyage&lt;/i&gt;... dit avec toute l'honnêteté et la candeur propres aux enfants)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/2msVWIISOtS_rxn_65OY2vt_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/S8rw_0m2BLI/AAAAAAAABaA/2tW0JzuDOWc/s400/IMG_0092.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Mathias n'en revient toujours pas de sa rencontre avec le cobra argenté!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://picasaweb.google.com/lh/photo/u3eq-7OFe2uqaonVqcbQO_t_-2l41BlANY4twAqbmFs?feat=embedwebsite" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/S8rxE-RUVYI/AAAAAAAABaI/qaq_vNQYkhI/s400/IMG_0095.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Le dernière anecdote du voyage est la chute de Mathias ...qui a atterri sur la tête&amp;nbsp;pendant une escapade avec Laurie. &amp;nbsp; Laurie,&amp;nbsp;soeur attentive et toujours aux petits soins avec son frère benjamin, donna&amp;nbsp;les premiers soins et ensuite se précipita vers sa mère avec cette phrase assassine: &amp;nbsp;&amp;nbsp;... &lt;i&gt;pendant que toi tu étais en train de te prélasser au bar Mathias se fendait le crâne&lt;/i&gt;! &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3164511830759438554?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3164511830759438554/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3164511830759438554' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3164511830759438554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3164511830759438554'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2010/04/la-region-du-bassin-du-souss-massa.html' title='La région du bassin du Souss-Massa'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_UbBVZqlR1kY/S8rwVe4_B3I/AAAAAAAABY4/jDQymD2JRz0/s72-c/Maroc_2010%20160.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-4959788602284126473</id><published>2009-11-28T11:09:00.000+01:00</published><updated>2010-02-08T18:08:57.662+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>Pentaho platform introduction</title><content type='html'>A few weeks ago, I've done a presentation to introduce the Java/J2EE world to some BI consultant at Sword.   During this presentation, I also covered a little bit the Pentaho platform as it is a good illustration of the challenges and issues one face when trying to integrate various open source heterogeneous components.&lt;br /&gt;&lt;br /&gt;Here is a slideshow on this second part which introduces the Pentaho platform ....&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.flickr.com/photos/25659998@N03/sets/72157622874629124/show/" height="650" width="700"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm hoping to investigate the ROLAP engine (Mondrian) soon ... &lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-4959788602284126473?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/4959788602284126473/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=4959788602284126473' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4959788602284126473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4959788602284126473'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/11/pentaho-platform-introduction.html' title='Pentaho platform introduction'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-637585812591426549</id><published>2009-11-13T16:42:00.019+01:00</published><updated>2009-11-22T17:23:26.257+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Kas, Turkey</title><content type='html'>Last October we headed to Turkey for vacations.    Having a couple of Turkish friends, I had been &lt;i&gt;warned&lt;/i&gt; by its natural beauty and cultural richness, but it did surprise me anyway!  It is a bit surprising that we do not hear much coming from Turkey compared to similar Mediterranean places (do you know anyone not having been to either Greece, Italy, Spain or France?). &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;  Landing on Istanbul, we are quickly reminded that it is a Muslim world by seeing the number of Minaret breaking through the skyline of the city.  One of the first sound we heard the next morning outside our hotel (at the airport), was the &lt;i&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Adhan&lt;/span&gt;&lt;/i&gt; (call to prayers in Islamic religion) coming out from the speakers installed onto the Minaret.   It was our first pleasant change of culture but a bit of stress as we were expected to catch another flight transiting to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Antalya&lt;/span&gt; but had to wait in the small bus for, what I suspect, the driver to complete his &lt;i&gt;&lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Salah&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;  (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;muslim&lt;/span&gt; prayers).    Traditionally, the prayers are the obligatory rites of the religion, and are to be performed five times a day.   However, we found the religious fever in Turkey to be quite moderate ... and apparently the &lt;i&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Salah&lt;/span&gt;&lt;/i&gt; is now spoken in Arabic language which most Turkish do not even understand!&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;So that will be it for the religious signs since the religion is mostly left outside the public affair in this officially "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;laïque&lt;/span&gt;" society (secular).      For the more curious, you can refer to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Atatürk&lt;/span&gt; (founder of the Republic of Turkey) revolution and modernization of the society just after the Ottoman empire fall down...  BTW, Turkish women received rights to vote before most westerner countries: 1930 (ref. http://www.ipu.org/wmn-e/suffrage.htm).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;The place we chose in Turkey was the Mediterranean region just south west of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Antalia&lt;/span&gt; as this area offers quite a lot of variety in terms of natural and cultural attractions.&lt;/p&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p face="georgia" style="margin-bottom: 0cm;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMI1lLImHI/AAAAAAAAAjk/N5CDZT-4qHg/s400/turquie_2009%20132.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMI1lLImHI/AAAAAAAAAjk/N5CDZT-4qHg/s400/turquie_2009%20132.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;Our kids enjoying the view from the house rented from the french tenant.  BTW, quite a lot of retired &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;Europeans&lt;/span&gt; are staying over here and enjoy the nice climate at low price¨.. rent can average around 300€!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Ok&lt;/span&gt; a little bit of &lt;span style="font-weight: bold;"&gt;history&lt;/span&gt; ( Turkey's history is anything but little ;-)) .   I remember not being very good at it during my young age , because I've never been motivated in learning stuff simply for what they were without involving some kind of logical thinking and reasoning..... (it could be related to how history was taught as it seemed to me that the goal was to cram and memorize as many events as possible without much hindsight on the relations and intricacies between these). &lt;br /&gt;&lt;/p&gt;&lt;p face="georgia" style="margin-bottom: 0cm;"&gt;Having said that, my country history was limited to about 400 years!   I can help but have .. a small &lt;i&gt;thought&lt;/i&gt; for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;turkish&lt;/span&gt; kids having to learn their country history at school!&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Referring to my &lt;span style="font-style: italic;"&gt;Guide &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Bleu&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;de&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Turquie&lt;/span&gt;&lt;/span&gt; (&lt;a href="http://www.blueguides.com/our-guide-books/history-of-the-blue-guides/"&gt;Blue guides&lt;/a&gt; are probably the oldest and best of tourism guide.. ), the long history of Turkey has been characterized by many different change of reigns and regime overruled which evolved in time almost from the Bronze age up to now!!    A very brief summary would need to at least give these over-lapping periods :&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;pre&lt;/span&gt;-historic Bronze (XI to 1200 BC) with the first establishment, the &lt;a href="http://en.wikipedia.org/wiki/Hittites"&gt;Hittites empire&lt;/a&gt; taking control of Babylon, until the fall of Troy and of the empire.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Greek (XII to I) civilization from the conquest of Alexander the Great to his death and the later control by Roman.&lt;/li&gt;&lt;li&gt;Roman empire (300 to 565 AD) with the change of &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Byzance&lt;/span&gt;&lt;/span&gt; to Constantinople (new Roma) done by Constantin.&lt;/li&gt;&lt;li&gt;Byzantine (726 to X  AD, the Roman empire continuation into the middle age) from the iconoclasm (ban of religious icons) to the schism &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;seperating&lt;/span&gt; the Orthodox and the Roman church.&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Seljuq&lt;/span&gt; dynasty (1055 to 1303) originating from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Turcoman&lt;/span&gt; tribal around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Bagdad&lt;/span&gt; and going into a long westerner migration to the fall following the invasion of Mongol&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ottoman empire (1326 to 1923) emerging from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Turco&lt;/span&gt;-Persian &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Seljuq&lt;/span&gt; in northern &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Antolia&lt;/span&gt;, the Ottomans will remain in control of the region for a few centuries and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;developping&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;brillant&lt;/span&gt; civilization reaching passed the Balkans, the middle-east and north Africa.  Unable to modernize they will &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;succomb&lt;/span&gt; to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;europeans&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;russians&lt;/span&gt; and finally collapse after the end of  WW1.  &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modern Turkish (1923-) from the recognition of a reduced territory  sovereignty (compared to Ottoman period) and the establishment of a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;laic&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;parlementary&lt;/span&gt;-based republic.   It is during this period that a massive exchange of people &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;occured&lt;/span&gt; (1.3 million) between Greece and Turkey.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;This evolution has left many traces that can still be witnessed in various part of this region.  The evolution of the city of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Kas&lt;/span&gt; is a perfect illustration of this long history....see next.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Kas&lt;/span&gt; and vicinity&lt;/b&gt;:   &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;The archaeological search done in and around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Kas&lt;/span&gt;, revealed the city of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;Antiphellus&lt;/span&gt;.  Originally this ancient town of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Antiphellus&lt;/span&gt;, was the harbour of the town of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Phellus&lt;/span&gt; which stood in front of it. &lt;span style="font-weight: bold;"&gt;Alexander the Great&lt;/span&gt; (Alexander III from Macedon) annexed this region into his kingdom to make it part of &lt;span style="font-weight: bold;"&gt;Greek empire&lt;/span&gt;. During&lt;span style="font-weight: bold;"&gt; Roman empire&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Antiphellus&lt;/span&gt; gained importance and became an episcopal centre during the &lt;span style="font-weight: bold;"&gt;Byzantine&lt;/span&gt; period.   After, it was conquered by the Arab who rename it &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;Andifli&lt;/span&gt; (there are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;turkish&lt;/span&gt; companies with this name nowadays), and later ruled by the &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Tekeogullan&lt;/span&gt; Principality&lt;/span&gt; (I'm confused here...it is probably the first time it happens: I like to grab info from touristic &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;pamphplet&lt;/span&gt;/guide while travelling and later get back home and google these ... I obviously get other info, nice photos, people comments, etc.. ! Now nothing came out with this principality name !!! I guess the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;Tekeogullan&lt;/span&gt; had had very limited historical &amp;amp; geographical impact ... I should ask for the Turkish equivalence and look for it in Turkish).&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;     &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Obviously, the region passed under the control of the &lt;span style="font-weight: bold;"&gt;Ottoman&lt;/span&gt;, where the peninsula became important as sea trade increases. Now &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;Kas&lt;/span&gt; county has become a predominant touristic region admired for its natural &amp;amp; cultural richness settled in between the handsome Taurus mountains and the crystal clear water of the Mediterranean.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;The area around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;Kas&lt;/span&gt; is called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;Teke&lt;/span&gt; peninsula located just beneath the Taurus mountains.    The larger region between the bays &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;Antalya&lt;/span&gt;&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;Fethiye&lt;/span&gt;&lt;/span&gt; corresponds to, what was known in the ancient time, as &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;Lycia&lt;/span&gt;&lt;/span&gt; which regroup different cities considered the first federation in the world with democratic principles (according to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;wikipedia&lt;/span&gt;, the &lt;span style="font-weight: bold;"&gt;US constitution would have been influenced by the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;Lycian&lt;/span&gt;&lt;/span&gt;).    It later became part of the roman empire.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJLWYWOoI/AAAAAAAAAk8/CfZA0Eco-w0/s400/turquie_2009%20153.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJLWYWOoI/AAAAAAAAAk8/CfZA0Eco-w0/s400/turquie_2009%20153.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Typical views seen around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;Kas&lt;/span&gt; with the sea, mountain and vegetation..&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;show picture="" of="" house="" rented="" with="" the="" kids=""&gt;&lt;/show&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJQt9q4sI/AAAAAAAAAlc/7Tyb785_9-A/s400/turquie_2009%20160.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJQt9q4sI/AAAAAAAAAlc/7Tyb785_9-A/s400/turquie_2009%20160.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJV0Aqj8I/AAAAAAAAAl4/8joO_2VCYtU/s400/turquie_2009%20167.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJV0Aqj8I/AAAAAAAAAl4/8joO_2VCYtU/s400/turquie_2009%20167.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;That is Laurie standing on the uphill just above &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;Kas&lt;/span&gt; with its bay and peninsula (the island further away into the sea is actually the most &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;estearn's&lt;/span&gt; Greek island &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;Mesogeios&lt;/span&gt;... basically located a few kilometers from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;Kas&lt;/span&gt;)&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJX0eHoOI/AAAAAAAAAmE/u2msCG_aHk4/s400/turquie_2009%20170.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJX0eHoOI/AAAAAAAAAmE/u2msCG_aHk4/s400/turquie_2009%20170.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLXVexhuI/AAAAAAAAAtk/pgd7KXiTL_8/s400/turquie_2009%20283.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLXVexhuI/AAAAAAAAAtk/pgd7KXiTL_8/s400/turquie_2009%20283.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Again some nice view of the bay at sunset.&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMmpYOy7I/AAAAAAAAAyY/kmr6ft-R6hM/s400/turquie_2009%20356.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMmpYOy7I/AAAAAAAAAyY/kmr6ft-R6hM/s400/turquie_2009%20356.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Small creek commonly seen on the coast from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;Kas&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;Fethiye&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJgkztdAI/AAAAAAAAAmk/v0C3QzNH53g/s400/turquie_2009%20177.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJgkztdAI/AAAAAAAAAmk/v0C3QzNH53g/s400/turquie_2009%20177.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;kas with="" its="" mountains=""&gt; &lt;/kas&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;familiy&lt;/span&gt; just outside the small port of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;Kas&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Also in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;Kas&lt;/span&gt;, you can find a very impressive sarcophagus (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;Kral&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;Mezan&lt;/span&gt; or King's tomb) carved from a single block with scripting in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;Lycian&lt;/span&gt; language (dating from the 4&lt;sup&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;th&lt;/span&gt;&lt;/sup&gt; century BC), see photos:&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJasL05HI/AAAAAAAAAmM/czfZjf4Z5-A/s400/turquie_2009%20172.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJasL05HI/AAAAAAAAAmM/czfZjf4Z5-A/s400/turquie_2009%20172.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;picture kids="" with="" the="" kas="" sarcophagus=""&gt;&lt;/picture&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJdKr9nBI/AAAAAAAAAmU/-AoxtUE8oq8/s400/turquie_2009%20174.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJdKr9nBI/AAAAAAAAAmU/-AoxtUE8oq8/s400/turquie_2009%20174.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJeO-of0I/AAAAAAAAAmc/QctHzVszUuA/s400/turquie_2009%20175.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJeO-of0I/AAAAAAAAAmc/QctHzVszUuA/s400/turquie_2009%20175.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;We finally visited during the week a few other sites:  ...&lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;Patara&lt;/span&gt;&lt;/b&gt; (with the longest sandy beach in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;rergion&lt;/span&gt;..), &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;Kekova&lt;/span&gt;&lt;/b&gt; (the underwater &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_68"&gt;anciant&lt;/span&gt; city), &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;Xanthos&lt;/span&gt;&lt;/b&gt; (a protected &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;Unesco&lt;/span&gt; site), the gorge of &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;Saklikent&lt;/span&gt;, Myra &lt;/b&gt;&lt;span style="font-weight: normal;"&gt;and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;Olympos&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;Patara&lt;/span&gt;:&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;Patara&lt;/span&gt; integrated Lucian u&lt;span style="font-size:100%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;nion&lt;/span&gt; in the 2&lt;/span&gt;&lt;sup&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;nd&lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;span style="font-size:100%;"&gt; century AD as one of its six cities (we have visited 3 of these 6: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_77"&gt;Patara&lt;/span&gt;,  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_78"&gt;Xanthos&lt;/span&gt; and Myra).    It was also the birthplace of &lt;a href="http://www.lycianturkey.com/famous-lycian-citizens.htm"&gt;St. Nicholas&lt;/a&gt; (born c.260-280 AD)  which later lead to the legend of Santa Claus (see Myra below).&lt;/span&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;The site is quite impressive and very well located.    Near the Victory Monument (see photos below of the three arches), &lt;i&gt;excavation 100 meters ahead revealed the world's oldest detailed road map which shows distances between &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_79"&gt;Lycian&lt;/span&gt; cities.    &lt;/i&gt;&lt;span style="font-style: normal;"&gt;Here &lt;/span&gt; I presume the map has been moved to a museum since after walking around and checking all the place out (not much help available on-site ),  no sign of the map could be seen.   This turned out a bit of disappointment for a former &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_80"&gt;GIS&lt;/span&gt; analyst!...  Actually, checking later on the web, there is neither trace nor any image of the map ...just a description!  So this is difficult to verify.&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJD2QfIQI/AAAAAAAAAkc/NX9Fi51QeU8/s400/turquie_2009%20145.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJD2QfIQI/AAAAAAAAAkc/NX9Fi51QeU8/s400/turquie_2009%20145.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The famous Victory monument&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;  &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;photo of="" 3="" arches="" in="" patara=""&gt;&lt;/photo&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;  &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMI_WDM-eI/AAAAAAAAAkM/51ybHawsoKg/s400/turquie_2009%20141.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMI_WDM-eI/AAAAAAAAAkM/51ybHawsoKg/s400/turquie_2009%20141.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_81"&gt;amphitheatre&lt;/span&gt; of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_82"&gt;Patara&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJBkpN-_I/AAAAAAAAAkU/HrPxXaEWzSc/s400/turquie_2009%20143.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJBkpN-_I/AAAAAAAAAkU/HrPxXaEWzSc/s400/turquie_2009%20143.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Also &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_83"&gt;exceptionally&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_84"&gt;Patara&lt;/span&gt; is that they also have found what is possibly the world's oldest Lighthouse ...that could have been destroyed following a Tsunami (&lt;a href="http://www.lycianturkey.com/lycian_sites/patara-lighthouse.htm"&gt;http://www.lycianturkey.com/lycian_sites/patara-lighthouse.htm&lt;/a&gt;).&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJE4zKyZI/AAAAAAAAAkg/HyOl2jyZbT4/s400/turquie_2009%20146.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJE4zKyZI/AAAAAAAAAkg/HyOl2jyZbT4/s400/turquie_2009%20146.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;  &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJIztQm0I/AAAAAAAAAkw/5VhC9yNYxIw/s400/turquie_2009%20150.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJIztQm0I/AAAAAAAAAkw/5VhC9yNYxIw/s400/turquie_2009%20150.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The ongoing effort of restauration, excavation and clearing the sand have allowed to show the main street with its re-erected columns ...&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJJ9NDR8I/AAAAAAAAAk0/MduxkV_daBk/s400/turquie_2009%20151.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMJJ9NDR8I/AAAAAAAAAk0/MduxkV_daBk/s400/turquie_2009%20151.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Some monument with Lycian-language writing&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;Kekova&lt;/b&gt;:&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;This region characterized by the eponym island  is quite incredible as a lot of its ruins are completely under the sea surface level.     An earthquake is believed to have sunken partly the region during the 2&lt;sup&gt;nd&lt;/sup&gt; century.    Being quite touristic, we were not too wary on our way to the site and actually hitchhiked one guy who apparently needed a ride to the village (yes that was quite naive).    Ok we finally got free parking but had to deal with an overpriced boat trip with a local fisherman... anyway we made a good trip and had our own personal boat for the visit...and that the kids could steer for free!    &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJjMxouaI/AAAAAAAAAmw/fINECdzIJ08/s400/turquie_2009%20180.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJjMxouaI/AAAAAAAAAmw/fINECdzIJ08/s400/turquie_2009%20180.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Various ruins in and above sea level&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJk-YWHsI/AAAAAAAAAm4/wX0au4eBU84/s400/turquie_2009%20182.jpg"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJk-YWHsI/AAAAAAAAAm4/wX0au4eBU84/s400/turquie_2009%20182.jpg"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJk-YWHsI/AAAAAAAAAm4/wX0au4eBU84/s400/turquie_2009%20182.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;  &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;picture taken="" from="" our="" boat="" and=""&gt;  &lt;/picture&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJnmVChlI/AAAAAAAAAnE/b_r5DlttHGo/s400/turquie_2009%20185.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMJnmVChlI/AAAAAAAAAnE/b_r5DlttHGo/s400/turquie_2009%20185.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJwNsVhVI/AAAAAAAAAnk/zAcpn7PP4Gg/s400/turquie_2009%20192.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJwNsVhVI/AAAAAAAAAnk/zAcpn7PP4Gg/s400/turquie_2009%20192.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The famous well preserved sarcophagus&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJ0PoJmjI/AAAAAAAAAn0/7RzBzo5bUak/s400/turquie_2009%20196.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJ0PoJmjI/AAAAAAAAAn0/7RzBzo5bUak/s400/turquie_2009%20196.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJ3n9B3xI/AAAAAAAAAoA/freeWYGvBg8/s400/turquie_2009%20201.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMJ3n9B3xI/AAAAAAAAAoA/freeWYGvBg8/s400/turquie_2009%20201.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJ7YUId7I/AAAAAAAAAoM/NFNDsvCc_C0/s400/turquie_2009%20204.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMJ7YUId7I/AAAAAAAAAoM/NFNDsvCc_C0/s400/turquie_2009%20204.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMKLDYrrcI/AAAAAAAAApA/zguy5Ve0NvA/s400/turquie_2009%20216.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMKLDYrrcI/AAAAAAAAApA/zguy5Ve0NvA/s400/turquie_2009%20216.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMKQw47zBI/AAAAAAAAApY/SjMv2aWCi64/s400/turquie_2009%20221.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMKQw47zBI/AAAAAAAAApY/SjMv2aWCi64/s400/turquie_2009%20221.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;Laurie steering the boat with our friendly fisherman&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;Xanthos:&lt;/b&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;This place is somewhat more valued and better serviced with touristic information (there are gov. people working at the site), probably due to its Unesco inscription as a world heritage site.   Based on findings on the acropolis, the city dates back to the 8&lt;sup&gt;th&lt;/sup&gt; century BC but had mostly grew during  the Roman empire who practically re-build the entire city after its destruction caused by Brutus!    &lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMML2_3WoI/AAAAAAAAAww/dXwzqb6lMC8/s400/turquie_2009%20332.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMML2_3WoI/AAAAAAAAAww/dXwzqb6lMC8/s400/turquie_2009%20332.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;The place offered a large variety of ruins for the .. and for kids nice collection of turtles spread out here and there ... our kids were obviously more motivated by searching turtles than anything else.&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMP_53aUI/AAAAAAAAAw8/gqbtbn0DF2I/s400/turquie_2009%20335.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Here are some pics taken there:&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMUAjywhI/AAAAAAAAAxQ/6mYGtksgnbc/s400/turquie_2009%20339.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMUAjywhI/AAAAAAAAAxQ/6mYGtksgnbc/s400/turquie_2009%20339.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMRWBdQcI/AAAAAAAAAxA/5_d5LdJWTKM/s400/turquie_2009%20336.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMRWBdQcI/AAAAAAAAAxA/5_d5LdJWTKM/s400/turquie_2009%20336.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Unfortunatly, the initial excavation carried out in mid-1800 by the english have moved many valuable piece of art to the British museum. This is one example where we only see the relief re-created by clay:&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMYopu0fI/AAAAAAAAAxg/8cYfkoOQlm8/s400/turquie_2009%20343.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMYopu0fI/AAAAAAAAAxg/8cYfkoOQlm8/s400/turquie_2009%20343.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;photos of="" xanthos=""&gt;  &lt;/photos&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMZtEoXeI/AAAAAAAAAxk/EwKIYzOgbZM/s400/turquie_2009%20344.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMMZtEoXeI/AAAAAAAAAxk/EwKIYzOgbZM/s400/turquie_2009%20344.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMMc66S6fI/AAAAAAAAAxw/aiLMTyj0bRE/s400/turquie_2009%20347.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMMc66S6fI/AAAAAAAAAxw/aiLMTyj0bRE/s400/turquie_2009%20347.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMb3BJaZI/AAAAAAAAAxs/pI10CMGeh_g/s288/turquie_2009%20346.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 288px; height: 216px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMMb3BJaZI/AAAAAAAAAxs/pI10CMGeh_g/s288/turquie_2009%20346.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMMWUfSmhI/AAAAAAAAAxY/z-ovVbtgvV0/s400/turquie_2009%20341.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMMWUfSmhI/AAAAAAAAAxY/z-ovVbtgvV0/s400/turquie_2009%20341.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;photo turtle=""&gt;&lt;/photo&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;and... yes Mathias did find one turtle&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; Also not too far from Xanthos are the gorge of &lt;span style="font-weight: bold;"&gt;Saklikent &lt;/span&gt;the second largest in Europe with its 20km long (after Samera in Crete, so it is the longest and deepest in Turkey).  When most of the snow has felt (after april), we can walk about 4km into the gorge.      &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;check photo="" of="" replicat=""&gt;&lt;/check&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMLm0dIB_I/AAAAAAAAAuY/-XRVCqLF3T8/s400/turquie_2009%20295.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMLm0dIB_I/AAAAAAAAAuY/-XRVCqLF3T8/s400/turquie_2009%20295.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMLxN8RNKI/AAAAAAAAAvA/Yd7epbAHprU/s400/turquie_2009%20305.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMLxN8RNKI/AAAAAAAAAvA/Yd7epbAHprU/s400/turquie_2009%20305.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuML3XKYBdI/AAAAAAAAAvY/Pl3P0a0EuBU/s400/turquie_2009%20311.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuML3XKYBdI/AAAAAAAAAvY/Pl3P0a0EuBU/s400/turquie_2009%20311.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuML8hTSzAI/AAAAAAAAAvw/aBjW4sCOzcM/s400/turquie_2009%20317.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuML8hTSzAI/AAAAAAAAAvw/aBjW4sCOzcM/s400/turquie_2009%20317.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;Myra&lt;/b&gt;:&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Another beautiful place belonging to Lycian league is Myra located at the current town called Kale (or Demre, apparently its new name).  It features a necropolis with the tombs scultured directly onto this mountain.&lt;/p&gt;&lt;picture of="" tombs="" and="" sculture="" in="" rocks=""&gt;&lt;/picture&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMK27-5ZoI/AAAAAAAAArs/mSnOkdV_kuk/s400/turquie_2009%20257.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMK27-5ZoI/AAAAAAAAArs/mSnOkdV_kuk/s400/turquie_2009%20257.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMK-zUPriI/AAAAAAAAAsM/oeik2j8xyL8/s400/turquie_2009%20263.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMK-zUPriI/AAAAAAAAAsM/oeik2j8xyL8/s400/turquie_2009%20263.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMK1jA8fvI/AAAAAAAAAro/bVqlwXwY3mU/s400/turquie_2009%20256.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMK1jA8fvI/AAAAAAAAAro/bVqlwXwY3mU/s400/turquie_2009%20256.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLEGA-dZI/AAAAAAAAAsc/Eih5HJURGR8/s400/turquie_2009%20267.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLEGA-dZI/AAAAAAAAAsc/Eih5HJURGR8/s400/turquie_2009%20267.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLOOg2nSI/AAAAAAAAAs4/n1STyqrdrwM/s400/turquie_2009%20274.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMLOOg2nSI/AAAAAAAAAs4/n1STyqrdrwM/s400/turquie_2009%20274.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMLR4rlOaI/AAAAAAAAAtM/mLC6gI68QKU/s400/turquie_2009%20278.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMLR4rlOaI/AAAAAAAAAtM/mLC6gI68QKU/s400/turquie_2009%20278.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Also, Myra is where St. Nicolas was bishop, so we can find his church and tomb which had been partly renovated by the russian when the Tsar Alexander II bought the church in 1863.     The place has been obviously turned into a touristic shopping stop...what else to expect from Santa Claus ancestor!!   The place is full of small shops of Byzantine art.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKl3l5QCI/AAAAAAAAAqs/8KhOsHjP8js/s400/turquie_2009%20242.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKl3l5QCI/AAAAAAAAAqs/8KhOsHjP8js/s400/turquie_2009%20242.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKg6Zx2eI/AAAAAAAAAqc/X1LmfhV39q8/s400/turquie_2009%20238.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKg6Zx2eI/AAAAAAAAAqc/X1LmfhV39q8/s400/turquie_2009%20238.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;some picture="" of=""&gt;&lt;/some&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMKjr-nt8I/AAAAAAAAAqk/t8vgZR6H8eU/s400/turquie_2009%20240.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMKjr-nt8I/AAAAAAAAAqk/t8vgZR6H8eU/s400/turquie_2009%20240.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKvgyeprI/AAAAAAAAArU/aYCjt5RfIjQ/s400/turquie_2009%20251.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKvgyeprI/AAAAAAAAArU/aYCjt5RfIjQ/s400/turquie_2009%20251.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMLW8XkqFI/AAAAAAAAAtg/TsHhZHNbXqU/s400/turquie_2009%20282.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMLW8XkqFI/AAAAAAAAAtg/TsHhZHNbXqU/s400/turquie_2009%20282.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;Olympos&lt;/b&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;span style="font-weight: normal;"&gt;Not much to say here, as my intention was to stop by on our way back to Antalya.      I was mostly curious about the eternal flames to be found there and known as the Chimaera (see mythical link &lt;a href="http://en.wikipedia.org/wiki/Chimera_%28mythology"&gt;http://en.wikipedia.org/wiki/Chimera_(mythology&lt;/a&gt;) ) and which is fueled naturally by methane liberated  from the earth cracks.    However, again we underestimated the time to reach the place and finally only reached a very strange place filled with funny looking tree houses and mud everywhere (I guess the place was under major restauration? ..and the family was not so inspired by the place! ):&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-weight: normal; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-weight: normal; font-family: georgia;"&gt;&lt;photo of="" tree="" house=""&gt;  &lt;/photo&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMMtI6zyLI/AAAAAAAAAyw/YdBb-XvUx68/s400/turquie_2009%20362.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMMtI6zyLI/AAAAAAAAAyw/YdBb-XvUx68/s400/turquie_2009%20362.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;But this gave us the opportinuty to check out the Olympos mountain, which gave its name to the city.  In turkish, it is called the &lt;span lang="tr"&gt;&lt;i&gt;Tahtalı Dağı&lt;/i&gt;&lt;/span&gt; (or Timber Mountain) and alsmots reaches 2400m.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMMxMf1_cI/AAAAAAAAAzA/BsQxmjsFLv4/s400/turquie_2009%20366.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMMxMf1_cI/AAAAAAAAAzA/BsQxmjsFLv4/s400/turquie_2009%20366.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;We finsihed the trip to Antalia where we have stayed for a night in the old city district (Kaleici) strictly reserved for pedestrians.  It has a lot of Ottoman-type architectural buildinds...&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNLCpwEcI/AAAAAAAAA0s/82ds53zi8dg/s400/turquie_2009%20391.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNLCpwEcI/AAAAAAAAA0s/82ds53zi8dg/s400/turquie_2009%20391.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNG1gJgcI/AAAAAAAAA0c/EyR9RUvzZ1A/s400/turquie_2009%20387.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNG1gJgcI/AAAAAAAAA0c/EyR9RUvzZ1A/s400/turquie_2009%20387.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMNDYl-A6I/AAAAAAAAA0I/psciw0sZU3g/s400/turquie_2009%20383.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SuMNDYl-A6I/AAAAAAAAA0I/psciw0sZU3g/s400/turquie_2009%20383.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMNAS9otPI/AAAAAAAAAz8/G3NuP2cUVlE/s400/turquie_2009%20380.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SuMNAS9otPI/AAAAAAAAAz8/G3NuP2cUVlE/s400/turquie_2009%20380.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNNFcgdII/AAAAAAAAA00/J7n8ZdkPLso/s400/turquie_2009%20393.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMNNFcgdII/AAAAAAAAA00/J7n8ZdkPLso/s400/turquie_2009%20393.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;the famous, Kesik Minare (litterally the &lt;span style="font-style: italic;"&gt;broken Minaret&lt;/span&gt;) going through all sort of transformation from various periods and finally partly destroyed during a fire in 1896!&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMNE4pblAI/AAAAAAAAA0U/D7l5sFQ9B44/s400/turquie_2009%20385.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SuMNE4pblAI/AAAAAAAAA0U/D7l5sFQ9B44/s400/turquie_2009%20385.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMM-_HNmzI/AAAAAAAAAz4/qh1L70k3pQM/s400/turquie_2009%20379.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMM-_HNmzI/AAAAAAAAAz4/qh1L70k3pQM/s400/turquie_2009%20379.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia; text-align: center;"&gt;The view of the Taurus mountain from Antalya&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Finally some generic comments about our trip, that could be useful to anyone planning a first-time trip to this place:&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;+the food: great and healthy.  Very much appreciated the Mezeler (starters) which serve very similar purpose as Tapas in Spain and typically very heathly.   A must is the Hummus probably the best I ever had!&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;+Roads : travelling around the region is not so simple as it is quite remote and isolated by mountain and sea ....the mountain litterally reaches the sea making any road construction quite expansive and a more direct roads with tunnel makes it proably much more expansive than a longer roads avoiding the most predominant obstacles.   For example,  Kas – Kaleucagiz  &lt;i&gt;à vol d'oiseau&lt;/i&gt; is 20km ... but when we got there by roads to see Kekova, it took us about 1 hour 30min from our rented house!?   It seems as if the place is more accessible by boats, as confirmed by te number europenan boats at the port, and some having sailed as far away as Norway (actually one couple we met reached Turkey from the east after a complete trip around the world!!).&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKZVbPlpI/AAAAAAAAAp8/Q3lftABWT1Q/s400/turquie_2009%20230.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SuMKZVbPlpI/AAAAAAAAAp8/Q3lftABWT1Q/s400/turquie_2009%20230.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;+ the accessibility of the ruins &amp;amp; vestige.  We can litterally use these sites as a playground...this caused some problem as people can easily bring rocks or other artefacts with them which is obviously illegal.    It is just very different from Italy where they are understandably obsessed by security and preservation issues.      &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;+ trees blossom amid the very dryness soil (however it is surely high in nutrient.. and we often witness what was probably Terra Nossa  (&lt;a href="http://en.wikipedia.org/wiki/Terra_Rossa"&gt;http://en.wikipedia.org/wiki/Terra_Rossa&lt;/a&gt;) with its reddish color!   (reminded me of a trip to Prince Edward Island with its famous &lt;a href="http://www.ecokids.ca/pub/eco_info/topics/landuse/ecosites/pei.cfm"&gt;red beach &lt;/a&gt;...).     A lot of Grenada Pomegranate apple, Orange and Lime trees grow about anywhere ... sometimes amazingly out of concrete and dry soil in dense cities!&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;- On the negative side:  the continuous buying pressure when walking around touristic and commercial district and neighborhood (ok that is also very culture-related, and for them that is also a way of communicating but it is not something I'm comfortable with).    Also there is often confusion with price, as most of the time price not shown and sometimes after negociating we just realized that they were talking in euros, or yet that there is a sur-tax with some plate since they were apparently over-sized... this infamous touristic price versus local .. .  and some nice picture at a &lt;i&gt;friend &lt;/i&gt;price : (this photo was worth 2.50 euros !)&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/Svhs1_3hsJI/AAAAAAAAA5I/CQW5azEj6hc/s400/saklikent-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 275px; height: 400px;" src="http://lh5.ggpht.com/_UbBVZqlR1kY/Svhs1_3hsJI/AAAAAAAAA5I/CQW5azEj6hc/s400/saklikent-1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Ok that is about it for what I can remember... overall it is a place higly recommeded and we will surely go back to visit other regions in the future ... Cappadocia (&lt;a href="http://www.cappadociaturkey.net/"&gt;http://www.cappadociaturkey.net/)&lt;/a&gt; looks like a very good candidate!.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;Martin&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-family: georgia;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-637585812591426549?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/637585812591426549/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=637585812591426549' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/637585812591426549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/637585812591426549'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/11/kas-turkey.html' title='Kas, Turkey'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UbBVZqlR1kY/SuMI1lLImHI/AAAAAAAAAjk/N5CDZT-4qHg/s72-c/turquie_2009%20132.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7258521913327460596</id><published>2009-08-13T15:45:00.005+02:00</published><updated>2009-11-25T16:32:13.477+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Summer break</title><content type='html'>During our last summer vacation we first headed to France to enjoy its renown culinary art...pretty much guaranteed to eat very well no matter where we end up to!&lt;br /&gt;&lt;br /&gt;We spent a week around the region of Drôme, the department located in southeast of France.&lt;br /&gt;Although its geography and climate is different from where we live, we only had to drive about 3.5hours to get there (ok this can vary depending on traffic condition mostly an issue in and around the bottleneck A7 autoroute du Soleil). This region is less touristic than Provence, so it does not have its disadvantages like the overly pricy restaurants and over-crowded places.. This department along with the ones nearby (e.g. Ardèche, Vaucluse) seems to have been better preserved from the wars destruction effect.&lt;br /&gt;&lt;br /&gt;Just next to our house we rented, there was the village of Savasse, located north of Montélimar and on the east bank of the Rhone:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAhRF15fwI/AAAAAAAAAfE/OsE_HK8wmDo/s400/IMG_3785.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAhRF15fwI/AAAAAAAAAfE/OsE_HK8wmDo/s400/IMG_3785.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The house located on the south side of the hill offered the natural advantage of protecting us against the sometimes brutal northerly Mistral wind. Looking at all the vegetation found at the house or nearby, we would say that the climate is very Mediterranean-like. &lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Here are some of the plants we found at the house "Laurier-rose", Artichoke, "Figuier", "monnaie-du-pape"..&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAhbFINj0I/AAAAAAAAAfM/CKuNELw7gyk/s400/IMG_3793.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAhbFINj0I/AAAAAAAAAfM/CKuNELw7gyk/s400/IMG_3793.JPG" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SpAhtz5FPSI/AAAAAAAAAfk/ksFjTIhCDWI/s400/IMG_3818.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SpAhtz5FPSI/AAAAAAAAAfk/ksFjTIhCDWI/s400/IMG_3818.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAhoZYqItI/AAAAAAAAAfc/seqqW9vI1xc/s400/IMG_3813.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAhoZYqItI/AAAAAAAAAfc/seqqW9vI1xc/s400/IMG_3813.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Also present throughout the region are the small perched and fortified villages typical of the middle-age period (built explicitly as a defensive position). During a ride with my bike, I actually stumbled into one of these villages: Rochemaure (an officially classified site), where we returned at night to visit and eat out :&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAidR1Q6rI/AAAAAAAAAgI/pY20hLW1Xzc/s400/IMG_3918.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAidR1Q6rI/AAAAAAAAAgI/pY20hLW1Xzc/s400/IMG_3918.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAihO-nr6I/AAAAAAAAAgQ/Uo2VQf-c_Fk/s400/IMG_3921.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAihO-nr6I/AAAAAAAAAgQ/Uo2VQf-c_Fk/s400/IMG_3921.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAikoX1dmI/AAAAAAAAAgY/ULIQM2OmxBY/s400/IMG_3935.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAikoX1dmI/AAAAAAAAAgY/ULIQM2OmxBY/s400/IMG_3935.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We encountered quite a few other similar village during a getaway to the Gorges d'Ardèche (the french version of the Grand Canyon), there is one that attracted our interest just by its funny name “Bidon” (&lt;a href="http://www.ardeche.guideweb.com/ville/bidon/"&gt;http://www.ardeche.guideweb.com/ville/bidon/&lt;/a&gt;), literally meaning fake or phony in french! &lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;The Gorges itself are less spectacular than the Grand Canyon, but they are worth the trip. This is apparently shared by a great number of people when we consider the number of tourists seen camping and canoeing at the gorge. I now better understand the familiar complains of Europeans about the tourists invasions in France, and why someone could appreciate a country like Canada for its quietness or emptiness ! &lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_UbBVZqlR1kY/SpAjDzhdrvI/AAAAAAAAAgw/rZocgQXksOA/s400/IMG00239-20090731-1145.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh5.ggpht.com/_UbBVZqlR1kY/SpAjDzhdrvI/AAAAAAAAAgw/rZocgQXksOA/s400/IMG00239-20090731-1145.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAjGWl2PCI/AAAAAAAAAg0/rJELAuU6F-U/s400/IMG00244-20090731-1200.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAjGWl2PCI/AAAAAAAAAg0/rJELAuU6F-U/s400/IMG00244-20090731-1200.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAjO1wmAtI/AAAAAAAAAhA/L8L0umzx120/s400/IMG00250-20090731-1318.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh6.ggpht.com/_UbBVZqlR1kY/SpAjO1wmAtI/AAAAAAAAAhA/L8L0umzx120/s400/IMG00250-20090731-1318.jpg" border="0" /&gt;&lt;/a&gt; &lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;One destination that I've reserved only to myself was the Mont Ventoux located in the Vaucluse. Yes, I took the long ride up this mountain often called &lt;i&gt;Géant de Provence&lt;/i&gt;. The riding difficulties are mostly caused by temperature (the first 10km are quite hot although protected by shade of the &lt;i&gt;pinède&lt;/i&gt; -pine forest), the length of the ascent (1617 m over 21,8km from the small and beautiful village of Bédouin), and the constantly grade offering no break or pause getting even worse near the summit with the last 2-3km having the steepest gradient (over 10%). &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Just too bad my mobile phone did not have enough battery to take picture of the beautiful 360degree view up there. In today's Internet era, you are never too far from being exposed to the web. There were people taking pictures to publish them on the Internet and offering the possibility to buy a full resolution image. These guys make a living off vanity of most cyclers...they'll surely get rich!! ...yes as this site is all about self-exposure (;-)), here you go with some snapshots:&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UbBVZqlR1kY/Swf1qi57TPI/AAAAAAAAA-E/qA27NFV_lDU/s1600/montee-mont-ventoux8.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5406559988954647794" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 220px; CURSOR: pointer; HEIGHT: 320px; TEXT-ALIGN: right" alt="" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/Swf1qi57TPI/AAAAAAAAA-E/qA27NFV_lDU/s320/montee-mont-ventoux8.jpg" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UbBVZqlR1kY/Swf1muuzUwI/AAAAAAAAA98/dk7RiWUErSE/s1600/montee-mont-ventoux5.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5406559923409736450" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: pointer; HEIGHT: 215px; TEXT-ALIGN: right" alt="" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/Swf1muuzUwI/AAAAAAAAA98/dk7RiWUErSE/s320/montee-mont-ventoux5.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;span style="font-size:85%;"&gt;as seen by the poor resolution of these advertised pics, I did not actually purchase these pictures..&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;picture of="" in="" velo="" me=""&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;span style="font-size:85%;"&gt;&lt;photo cycling=""&gt;&lt;/photo&gt;&lt;/span&gt;&lt;/p&gt;&lt;pictures of="" me=""&gt;Speaking of cycling, during my vacation I also cycled to Verbier with a friend that visited over. Verbier has a well-known classical festival.... however this time it conflicted with the 15&lt;sup&gt;th&lt;/sup&gt; stage of tour de France. It turned out to be the decisive stage where Cantador completely dominated during the 15km ascent (yes this is again a &lt;a href="http://www.theorypedia.com/Alberto_Contadors_Verbier_Climb_Not_Possible_Without_EPO_t1118b6e7.html"&gt;non-human performance&lt;/a&gt;, but nothing new for this sport always bringing its share of &lt;a href="http://www.sportsscientists.com/2009/07/tour-2009-contador-climb.html"&gt;controversy&lt;/a&gt;). &lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;I've never thought that the tour could be such a popular event... there were near 100,000 people all gathered in the Verbier ascent! Probably a good 25% were cyclers, so it was quite exciting after the race to ride among all pelotons scattered on the way down to Martigny. We also rode with the pros, as most of them quickly returned to their team camper located below!&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Later on in our vacation, we visited Yvoir which is also very near our place. It is a small medieval village located just on the other side of the Leman, and that celebrated its 700&lt;sup&gt;th&lt;/sup&gt; year of history in 2006. coming from Switzerland, the easiest is to go by boat leaving Nyon and only lasting about half an hour. &lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Although the village is very nice-looking with all its flowers and old stones, the shopping industry completely took over. And this has become as expensive or even more than Switzerland.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAjv7sMWgI/AAAAAAAAAhM/gkb3saFbPWA/s400/IMG_4277.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 300px; CURSOR: pointer; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://lh4.ggpht.com/_UbBVZqlR1kY/SpAjv7sMWgI/AAAAAAAAAhM/gkb3saFbPWA/s400/IMG_4277.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/pictures&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_UbBVZqlR1kY/SpAkXCHuxPI/AAAAAAAAAhk/x6nmJDAdAYo/s400/IMG_4313.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://lh3.ggpht.com/_UbBVZqlR1kY/SpAkXCHuxPI/AAAAAAAAAhk/x6nmJDAdAYo/s400/IMG_4313.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Ok that's about it, a special thanks to all my family who shared these visits with us and also provided some of the pictures shown here.&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;Martin&lt;/p&gt;&lt;pictures of="" me=""&gt;&lt;br /&gt;&lt;/pictures&gt;&lt;/picture&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7258521913327460596?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7258521913327460596/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7258521913327460596' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7258521913327460596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7258521913327460596'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/08/summer-break.html' title='Summer break'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UbBVZqlR1kY/SpAhRF15fwI/AAAAAAAAAfE/OsE_HK8wmDo/s72-c/IMG_3785.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-4622780695159536725</id><published>2009-07-09T08:59:00.003+02:00</published><updated>2010-02-08T18:13:01.282+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>My open source toolset</title><content type='html'>I'm always trying to look for open source alternative when it comes to software I'm using.  Here's my software application &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;toolsets&lt;/span&gt; originating almost exclusively from the open source community (&lt;span style="font-style: italic;"&gt;this list is to be maintained&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Editor/Player/Viewer:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.openoffice.org/"&gt;Open Office&lt;/a&gt;:  I used to only exploit &lt;span style="font-style: italic;"&gt;Writer&lt;/span&gt; as a replacement for &lt;span style="font-style: italic;"&gt;Word&lt;/span&gt;, now I even see myself doing &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;presentation&lt;/span&gt; stuff using &lt;span style="font-style: italic;"&gt;Impress&lt;/span&gt; (although I rarely used &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;powerpoint&lt;/span&gt; at all), &lt;span style="font-style: italic;"&gt;Math&lt;/span&gt;, and next target will be &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Calc&lt;/span&gt;&lt;/span&gt; as an &lt;span style="font-style: italic;"&gt;Excel&lt;/span&gt; replacement!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jedit.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;jEdit&lt;/span&gt;&lt;/a&gt;:  although originally meant for developer with syntax color &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;highlighting&lt;/span&gt;... this is a great and lean &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;txt&lt;/span&gt; editor written in Java and a very good notepad replacement. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;freeMind&lt;/span&gt;&lt;/a&gt;: a great mind-mapping tool.  Warning, its multi-purposes usage can become &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;addictive&lt;/span&gt;!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.yworks.com/en/products_yed_about.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;yEd&lt;/span&gt;&lt;/a&gt;: I'm often using this Graph Editor at work to create some &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;hierarchical&lt;/span&gt;-based or tree-based graphing.  It has a few glitches but well compensated by its simplicity of use.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt;:  I don't have the patience and talent to do any photo/picture edition, however this one came in handy a few times...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.videolan.org/vlc/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;VLC&lt;/span&gt;&lt;/a&gt;:    simply the best media player around.  With its &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;independence&lt;/span&gt; of systems &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;codecs&lt;/span&gt;, it supports merely all video &amp;amp; audio encoding format.  It now finally reached release 1.0, so to be downloaded before it gets acquired!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Misc tools:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://keepass.info/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;KeePass&lt;/span&gt;&lt;/a&gt;: a password manager, with this you will only need to remember a unique password:  the &lt;span style="font-style: italic;"&gt;Master Password&lt;/span&gt;!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://free.avg.com/"&gt;Avg&lt;/a&gt;:  a free anti-virus...although this one does not come from open source.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://winscp.net/eng/index.php"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;WinSCP&lt;/span&gt;&lt;/a&gt;: a ftp/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;sftp&lt;/span&gt; client.  &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jzip.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;jZip&lt;/span&gt;&lt;/a&gt;: alternative to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;winzip&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;winrar&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Internet:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Firefox&lt;/span&gt; and all its add-ins:  been a while since this needed &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;introduction&lt;/span&gt;!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rssowl.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Rssowl&lt;/span&gt;&lt;/a&gt;: supports &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;RSS&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;RDF&lt;/span&gt; and Atom &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;newsfeed&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://twiki.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Twiki&lt;/span&gt;&lt;/a&gt;: a nice and easy to install stand-alone Wiki. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.plkr.org/"&gt;Plucker&lt;/a&gt;: a great tool for my palm to read Web content and e-book offline on the train (not open source)!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.getmiro.com/index1.php"&gt;Miro&lt;/a&gt;: I hooked up my old PC into my TV with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;HDMI&lt;/span&gt; at home.  My kids can now enjoy exciting, interesting and fun content from Internet (yes obviously this needs some form of supervision)  &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mozillamessaging.com/en-US/thunderbird/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Thunderbird&lt;/span&gt;&lt;/a&gt;: another good Mozilla application !&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Development and database:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;:  don't use it more directly since I don't code much anymore, however its &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_29"&gt;pervasiveness&lt;/span&gt; is such that you end-up using it indirectly elsewhere (e.g. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Talend&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Pentaho&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Websphere&lt;/span&gt; studio, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;BIRT&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;SAS&lt;/span&gt;...)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://staruml.sourceforge.net/en/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;StarUML&lt;/span&gt;&lt;/a&gt;:  Without going overboard with reverse-engineering and code generation, I like this one to create some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;UML&lt;/span&gt;-type diagram ... can even be used to get quick &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;ERD&lt;/span&gt;! &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://squirrel-sql.sourceforge.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;SQuirreL&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;SQL&lt;/span&gt;&lt;/a&gt;:  a good alternative to the too famous TOAD... which is limited only to Oracle.  Also has a nice Tabbing capacity for your query result (a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;parallel&lt;/span&gt; with what &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_41"&gt;distinguished&lt;/span&gt; for a long time &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;Firefox&lt;/span&gt; from IE).  You just need to avoid trying to cache all DB schema objects from a big Oracle &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;datawarehouse&lt;/span&gt;!&lt;/li&gt;&lt;li&gt;&lt;a href="http://db.apache.org/derby/"&gt;Apache Derby&lt;/a&gt; or any of its reincarnation... very useful when you need a small footprint DB for some SQL prototyping.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BI and Data mining tools:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.pentaho.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;Pentaho&lt;/span&gt;&lt;/a&gt;: these guys have looked around and bundle the best open source projects to offer a full BI platform.  Their original concept is that the platform is more geared toward Process and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;Workflow&lt;/span&gt; concept than other traditional BI solution.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cs.waikato.ac.nz/ml/weka/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;Weka&lt;/span&gt;&lt;/a&gt;:  the Java-based data mining originating from the University of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;Waikato&lt;/span&gt; and now integrated into the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;Pentaho&lt;/span&gt; platform.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://rapid-i.com/content/view/65/1/"&gt;Yale&lt;/a&gt; (now known as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;RapidMiner&lt;/span&gt;):  A more commercial approach has now been adopted as suggested by its new Rapid-I branding, however a community offer is still offered.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.talend.com/index.php"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;Talend&lt;/span&gt;&lt;/a&gt;:  The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;ETL&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;ELT&lt;/span&gt; open source offer now &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_53"&gt;associated&lt;/span&gt; with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;JasperSoft&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-4622780695159536725?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/4622780695159536725/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=4622780695159536725' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4622780695159536725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4622780695159536725'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/09/my-open-source-toolset.html' title='My open source toolset'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5338439032094915651</id><published>2009-06-12T15:29:00.008+02:00</published><updated>2011-05-03T12:09:29.420+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>Star Schema Limitation</title><content type='html'>&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;The &lt;b&gt;star schema&lt;/b&gt; is probably the most over-used data modeling paradigm used today in data warehousing.  It is very attractive due to its simplicity (especially important for business) and its pervasiveness, and as such people has the tendency to overuse it at every layer of the BI data platform.  &lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;There is one use case where its use quickly become problematic and causes more harm than benefice.  This is when we want to track-down all &lt;i&gt;&lt;b&gt;slowly changes &lt;/b&gt;&lt;/i&gt;occurring around the &lt;i&gt;Customer&lt;/i&gt; of the enterprise (this term is used loosely here, as it can mean different thing such as subscriber, client, account, etc..).   The &lt;i&gt;slowly changes&lt;/i&gt; referred here must not be confused with simple attributes (e.g. customer age, name, ...) usually handled within the dimension itself using specific &lt;b&gt;slowly changing dimension rules &lt;/b&gt;(&lt;a href="http://iman77.blogspot.com/2007/12/slowly-changing-dimension.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SCD&lt;/span&gt; type 1,2,3,.., 6 and still counting&lt;/a&gt;).  Here, we refer to important Indicator information usually spread out in separate Dimensions or other data structure.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;More specifically, these &lt;i&gt;slowly changes&lt;/i&gt; can be comprised of very general Indicator characterizing the Customer either directly obtained from operational system (such as &lt;i&gt;account type&lt;/i&gt;, &lt;i&gt;price plan&lt;/i&gt;, &lt;i&gt;subscriber status&lt;/i&gt;, &lt;i&gt;address&lt;/i&gt;, dealer and channel, etc) or features derived/calculated from data within the integration layer of the BI platform (such as &lt;i&gt;customer value&lt;/i&gt;, &lt;i&gt;churn likelihood&lt;/i&gt;, &lt;i&gt;behavior&lt;/i&gt;, &lt;i&gt;customer segmentation&lt;/i&gt;, etc). &lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;The star schema can be used for this goal: we simply design the model around all &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;b&gt;Dimension   &lt;/b&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;representing the features being tracked down, along with the&lt;/span&gt;&lt;span lang="en-US"&gt; dimension &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;Customer&lt;/i&gt;&lt;/span&gt;&lt;span lang="en-US"&gt; and two links to Date/time Dimensions in order to define the validity period of the &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;b&gt;fact row&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-US"&gt; (the &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;start&lt;/i&gt;&lt;/span&gt;&lt;span lang="en-US"&gt; and &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;end &lt;/i&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;date).  In other words, each &lt;/span&gt;&lt;span lang="en-US"&gt;fact row&lt;/span&gt;&lt;span lang="en-US"&gt; represents a new state for the Customer in time and is created whenever one or more &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;slowly changes (&lt;/i&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;&lt;span style="font-style: normal;"&gt;characterized by dimension) have occurred&lt;/span&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;span style="font-style: normal;"&gt;This approach offers a more or less standardized approach in BI (star schema model) allowing a very simple Query logic with multiple dimensions (indicators) to be reported simultaneously.    However, this advantage is trade-off by a &lt;/span&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;number of important negative issues :&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: times new roman;"&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;b&gt;Flexibility:&lt;/b&gt;&lt;/span&gt;  &lt;span lang="en-US"&gt;Physical data model is not amenable to easily  permit changes in terms of new dimension/indicator as this requires  a new version of the model every time (&lt;/span&gt;&lt;span lang="en-US"&gt;&lt;i&gt;people  working in large organization will surely appreciate the implication  cost of changing data model inside database in Production!!&lt;/i&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;).  &lt;/span&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;b&gt;Extensibility:&lt;/b&gt;&lt;/span&gt;  &lt;span lang="en-US"&gt;There is a limit on the number of  dimension/indicator that can be added into the structure as this  requires a significant cost in terms of disk storage for every new  dimension/indicator.   The star schema is simply not designed to  track down a variable number of indicators dynamically.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Volumetry&lt;/span&gt;:&lt;/b&gt;&lt;/span&gt;  &lt;span lang="en-US"&gt;Data structure leads to a great deal of disk  storage waste as dimension/indicator are duplicated in all rows even  when their values remain unchanged (ex. Dealer or Geography  indicator are very unlikely to change throughout the Customer  history but their values will be repeated for each and every new  Customer fact-row state).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;b&gt;Clarity:&lt;/b&gt;&lt;/span&gt;  This particular &lt;span lang="en-US"&gt;model mixes two concepts into a  single fact table (1. event-based fact and 2. snapshot-based fact  representing the state at fixed point in time) blurring its role and  &lt;/span&gt;&lt;span lang="en-US"&gt;increasing query complexity for all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;EOP&lt;/span&gt;,  BOP type of reports.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;span lang="en-US"&gt;&lt;b&gt;Loading:&lt;/b&gt;&lt;/span&gt;  &lt;span lang="en-US"&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ETL&lt;/span&gt; feed is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;likely&lt;/span&gt; to be more complex with  this type of structure, which results &lt;/span&gt;&lt;span lang="en-US"&gt;that  only minor changes are done over time and typically no new  information element is rarely added.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: times new roman; text-indent: 1.25cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman;"&gt;&lt;span style="font-size: 100%;"&gt;There are better solution that we can model in order to provide such typical &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;historized&lt;/span&gt; view of the Customer evolution in time.   One such solution is presented next with a simple logical model:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SjJY8gqrBcI/AAAAAAAAAZo/VjUe81qcXgY/s1600-h/Diagram.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5346433504226510274" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SjJY8gqrBcI/AAAAAAAAAZo/VjUe81qcXgY/s400/Diagram.jpg" style="cursor: pointer; display: block; height: 232px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;This solution is sometimes dubbed 1-dimensional model (because everything evolves around the generic Indicator table), or I've seen alternative terminology like this one ...&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;The more relational inclined will note that this model is flawed as the &lt;i&gt;effective&lt;/i&gt; and &lt;i&gt;expiration&lt;/i&gt; date are duplicated info (the &lt;i&gt;expiration&lt;/i&gt; date is directly linked to &lt;i&gt;effective&lt;/i&gt; date of the subsequent row for a specific customer.. ) and as such should be constraint to ensure integrity by the DBMS engine. &amp;nbsp;This is a good point and can simply be avoided by removing one of the field (see one good &lt;a href="http://sqlblog.com/blogs/jamie_thomson/archive/2009/11/28/debunking-kimball-effective-dates.aspx"&gt;example&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;), but to me it is a physical implementation detail: &amp;nbsp;should the data model enforce this rule or could we trust the SQL feeding codes to handle it (obviously more risky). &amp;nbsp;To keep things simple, I've decided to only show the logical data model, leaving this implementation choice as a side-note. &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;The table 'Customer Indicator Association' is central to this data structure and is similar to the Fact table whose role is to capture all association customer-indicator in time.   Within this context, the Indicator table corresponds to dimension records found in various dimension table, whereas the Indicator Type corresponds to the actual Dimension.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;pre&lt;/span&gt;-requisite of this data model is that all Customer must be only associated &lt;u&gt;to only one&lt;/u&gt;&lt;span style="text-decoration: none;"&gt; Indicator value &lt;/span&gt;by Indicator Type at any point in time.  Some other important aspects of this data structure is summarized here: &lt;/span&gt; &lt;/div&gt;&lt;ul style="font-family: times new roman;"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Each  time state of &lt;i&gt;Customer&lt;/i&gt; would change for one Indicator value,  we would generate a new fact row with the corresponding Effective  start date (and &lt;i&gt;Expiration from&lt;/i&gt; date set to some &lt;i&gt;infinite  &lt;/i&gt;&lt;span style="font-style: normal;"&gt;key &lt;/span&gt;&lt;span style="font-style: normal;"&gt;date&lt;/span&gt;)  &lt;u&gt;and&lt;/u&gt; the previous state would be expired (update done on the  &lt;i&gt;expired to&lt;/i&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Only  necessary changes are tracked down, .... meaning a Customer whose  state never changed from Activation (for a specific Indicator) would  only have a single fact row for this particular Indicator.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Date  (start and end) correspond to real date when the change of indicator  occurred:  usually based on operational system date (for Indicator  obtained from these systems) or business rule for Indicator derived  from integration layer (e.g. Customer Value re-calculation period).&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;No  elapse time period is allowed between the previous &lt;i&gt;Expired&lt;/i&gt;  date and the current &lt;i&gt;Effective&lt;/i&gt; Date.  This ensures data  integrity state to state, so that &lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Key implementation decisions that need to be chosen with this data structure :&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: times new roman;"&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;How  to align all Indicators once a new customer is activated.  Two  options are possible: concurrently aligned all Indicators with the  first Start date even if some Indicator still has no value, or yet  allow for Indicator in time.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;How  to close Indicators once a Customer cancels all activity (no more  customer).  Again, we can align all Indicators with a transition  state such as 'no longer customer', or leave with the latest  Indicator value before cancellation occurred.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;How  to treat technical changes of Indicator (i.e. it is not rare in  operational system that Customer change status within a short period  of time to return to original status... technical changes without  real consequence).  A grace period can be defined to account and  ignore for technical changes.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;The &lt;span lang="en-US"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;indicator&lt;/span&gt; association table will easily supports the full &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;historization&lt;/span&gt; of all slowly changing Customer related indicators (existing ones,  new ones, modified one and future ones) without any model change.   &lt;/span&gt;&lt;span lang="en-US"&gt;&lt;b&gt;This has the potential to become the central and only place in your BI data platform where to hold atomic indicators for Customer&lt;/b&gt;&lt;/span&gt;&lt;span lang="en-US"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;a href="javascript:void(0)"&gt;Publish Post&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Obviously, this solution will present the flip-side disadvantage of the more traditional Star schema solution.   The most important one aspect concerns the Reporting extraction logic which is more complex and  less optimal.   In essence, this structure is not aimed toward end-user Reporting since more complex and far less &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;performant&lt;/span&gt; Query  logic must be employed for data extraction (this is somewhat mitigated with the use of latest &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;SQL&lt;/span&gt; analytical functions).   This is especially true since most query involve multiple predicate conditions imposed on a number of dimension.    So usually, a downstream data structure would exist more geared toward end-user query (a sort a flatten version where all Indicators value would be transposed back to columns...).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: times new roman; margin-bottom: 0cm;"&gt;&lt;span style="font-size: 100%;"&gt;Martin &lt;/span&gt; &lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5338439032094915651?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5338439032094915651/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5338439032094915651' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5338439032094915651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5338439032094915651'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/06/star-schema-limitation.html' title='Star Schema Limitation'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UbBVZqlR1kY/SjJY8gqrBcI/AAAAAAAAAZo/VjUe81qcXgY/s72-c/Diagram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5682212161987292461</id><published>2009-04-27T20:53:00.004+02:00</published><updated>2010-06-12T23:17:04.329+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Half-blog: the container is blog-style but not its content</title><content type='html'>I haven't had much time nor energy to post anything here...  usually this happens when I'm overloaded with technical documentation at work.   The past months have been very busy writing business functional specification, modeling and design and other architecture document.  Not that I despise this or anything, but it seems that whenever I exceed a number of &lt;span style="font-style: italic;"&gt;written words &lt;/span&gt;threshold (for a given time period) then writing becomes less enjoyable.  I guess this is applicable for a lot of things we do in life!&lt;br /&gt;&lt;br /&gt;I'm now taking the opportunity to change the title of this blog to something that reflects more what it's all about:  &lt;span style="font-style: italic;"&gt;Everything but a blog&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ok&lt;/span&gt; don't have to point out the contradiction...  however I could have also defined it more judiciously:  H&lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;alf&lt;/span&gt;-blog : the container is blog-style but not its content&lt;/span&gt;.   This is particularly true with the &lt;span style="font-style: italic;"&gt;everything-must-be-instantaneous&lt;/span&gt; trend reaching new level with &lt;a href="http://www.pcworld.com/article/164103/why_most_twitter_users_give_up.html"&gt;Twitter fad&lt;/a&gt;!   That is simply not my style, as I'd much rather take the time to reflect on things then simply comment them...which is a probably not a bad thing considering the amount of time I spent doing analysis and architecture type of work.&lt;br /&gt;&lt;br /&gt;So for the upcoming time, I will continue using this space more as an archival document repository, a reference tool for technology, a handy place to keep my notes and .... probably more and more as a tool for family experience sharing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5682212161987292461?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5682212161987292461/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5682212161987292461' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5682212161987292461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5682212161987292461'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/04/i-havent-had-much-time-nor-energy-to.html' title='Half-blog: the container is blog-style but not its content'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3113821666514400122</id><published>2009-02-22T10:57:00.007+01:00</published><updated>2009-02-28T16:20:36.244+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Ski à Tignes</title><content type='html'>Parmi les avantages d'avoir plusieurs semaines de vacances en Europe, est l'organisation du calendrier scolaire nous incitant (lire &lt;span style="FONT-STYLE: italic"&gt;contraignant&lt;/span&gt;) à tout arrêter lors des congés scolaires!! Mais ceci s'avère des plus appréciés, par exemple pendant une semaine durant le mois de février, toutes les écoles ferment pour les vacances d'hiver et &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;y'a&lt;/span&gt; pas trop de service de garde, donc ça donne un congé bien mérité pour toute la famille.&lt;br /&gt;&lt;br /&gt;Nous avons voulu en profiter pour initier les enfants au ski et sachant que tout le canton de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Vaud&lt;/span&gt; prenait congé, nous avons eu l'idée d'aller en France pour éviter la cohue sur les pistes... en ignorant &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;bien-sûr&lt;/span&gt; que toute la région parisienne se trouvait aussi en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;vacances&lt;/span&gt;!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bref, malgré ce tourisme de masse ce fût quand même de chouette vacances passées dans la station de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Tignes&lt;/span&gt; située dans le parc national de la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Vanoise&lt;/span&gt; en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Savoie&lt;/span&gt;. La station est d'ailleurs voisine de Val &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;d'Isère&lt;/span&gt; où se tenait la coupe du monde de ski 2009. Nous avons assisté au cortège du trafic de retour lors de notre monté vers la station..&lt;br /&gt;&lt;br /&gt;Voici quelques chiffres de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Tignes&lt;/span&gt; + Val &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;d'Isère&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;-10,000 ha de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;domaine&lt;/span&gt; skiable avec 300km de piste&lt;br /&gt;-altitude maximum: 3450m, altitude à la station : 2100m (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Tignes&lt;/span&gt;), 1550m (Val &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;d'Isère&lt;/span&gt;)&lt;br /&gt;-pistes: plus de 150, remontées mécaniques: 89&lt;br /&gt;&lt;br /&gt;Quelques dates:&lt;br /&gt;-visite des premiers alpinistes: 1860&lt;br /&gt;-les premiers skieurs: années 1920&lt;br /&gt;-premier remonte pente: 1936&lt;br /&gt;-construction du barrage de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Tignes&lt;/span&gt; mettant un terme aux projets de village: 1946&lt;br /&gt;-mise à l'eau du barrage et dispersion des villageois: 1952&lt;br /&gt;-première saison officielle: 1957&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les +:&lt;br /&gt;&lt;br /&gt;- les "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Naturides&lt;/span&gt;" qui sont des pistes noires balisées, sécurisées mais non damnées qu'on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;retrouve&lt;/span&gt; un peu partout!&lt;br /&gt;- la bouffe témoignant du savoir faire culinaire français (sauf les mets plus typique savoyard qui sont un peu lourd à mon goût)&lt;br /&gt;- l'école du ski français... les enfants ont bien progressé tout en profitant de leur semaine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les -:&lt;br /&gt;&lt;br /&gt;- pistes beaucoup trop occupées&lt;br /&gt;- la quantité de neige moyenne considérant l'hiver exceptionnel que connaît &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;l'Europe&lt;/span&gt; (nous avons pas vu la même quantité de poudreuse qu'on trouve en ce moment en Suisse)&lt;br /&gt;- soleil pas mal puissant car la station se trouve à plus de 2100m! (apparemment la force des rayons &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;UV&lt;/span&gt; s'accroît de 4% par tranche de 300m d'altitude)  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Ok&lt;/span&gt;, j'avoue que la plupart des gens recherchent justement ce soleil d'été en plein hiver. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ces vacances nous ont aussi permis de (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;re&lt;/span&gt;)&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;confirmer&lt;/span&gt; les caractères assez distincts de nos deux enfants:&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Laurie&lt;/span&gt;: plus posée, méthodique et prudente ... elle progresse tout au long de son séjour pour finir dans les pistes rouges avec ses propres bâtons! Plus sociable, elle en profite aussi pour ce faire une copine ... Je crois qu'elle peut nous accompagné pratiquement partout et ceci après une semaine de cours.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Mathias&lt;/span&gt;: voulant excellé dès le départ avec son &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;orgueil&lt;/span&gt; et sa fierté bien à lui, il n'aime pas trop l'apprentissage et les leçons du débutant ...par contre une fois ce cap franchi il donne des conseils à sa soeurs et insiste grandement pour me montrer ses prouesses en descente &lt;span style="FONT-STYLE: italic"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;downhill&lt;/span&gt;&lt;/span&gt; sur toute une pente et ce, en se mettant en boule (ce qui donna une syncope à sa mère).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Voici quelques clichés! (malheureusement pris à partir du téléphone portable)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/HWhbccrTFVcZTkUWrz2dEg?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/SaApkaAWR-I/AAAAAAAAAWg/KUN2i4NOfeU/s400/SP_A0054.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;Laurie&lt;/span&gt; avec sa monitrice lors de la remise de médaille.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Pqdhfi91KWxMl_0Y0rXczQ?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/SaAphlpFoaI/AAAAAAAAAWY/CW3nS9pxx5w/s400/2009%20085.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Kim&lt;/span&gt; profitant de son nouveau genou!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Mj-Z7OUNAsrplVoXG2-MkA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_UbBVZqlR1kY/SaApDHEwH3I/AAAAAAAAAVk/ppAQ2owi-As/s400/2009%20073.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;La vue du village prise à partir de notre chalet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/e0c460hDIwEwNRLAfJZX9Q?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/SaApoSAVoZI/AAAAAAAAAWo/XP-uB5fn6bU/s400/SP_A0052.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Laurie&lt;/span&gt; avec ses copains "flocons"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/IbtOrSBN0XEQyR6QeDGjuw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/SaApyBmrmjI/AAAAAAAAAW4/kHhklmrr2bs/s400/SP_A0047.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;Mathias&lt;/span&gt; montrant aussi fièrement sa médaille.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/1vUcrr5iCcPXxECMhqKY9Q?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_UbBVZqlR1kY/SaAp1b3izyI/AAAAAAAAAXA/DCuxz2yH6hw/s400/SP_A0044.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;Mathias&lt;/span&gt; se reposant des nombreuses descentes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/7gJYmmym6w3A4d1SlWspfA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/SaAp_EWOdLI/AAAAAAAAAXY/JZC3GahDngw/s400/SP_A0035.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Ma tentative de ski hors-piste avec mes peaux de phoque et mes fixations adaptées pour mixer ski de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;rando&lt;/span&gt; + descente (je vais essayer de faire un blog sur cette passion qui m'a redonné goût au ski).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/ANr-5mAV0-lWBjlAe-ohzA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/SaAqEINxUDI/AAAAAAAAAXg/BNCqP92oILg/s400/SP_A0032.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Les enfants avant leur dernière journée de cours.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="WIDTH: auto"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Cr9JHxuVpJ0LkwGp-2u0_A?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_UbBVZqlR1kY/SaAqHUqoZpI/AAAAAAAAAXo/jFXPOkL9kDY/s400/SP_A0030.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;From&lt;/span&gt; &lt;a href="http://picasaweb.google.com/martin.l.ouellet/Tignes_2009?feat=embedwebsite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;Tignes&lt;/span&gt;_2009&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3113821666514400122?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3113821666514400122/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3113821666514400122' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3113821666514400122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3113821666514400122'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2009/02/ski-tignes.html' title='Ski à Tignes'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_UbBVZqlR1kY/SaApkaAWR-I/AAAAAAAAAWg/KUN2i4NOfeU/s72-c/SP_A0054.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-6894250615612218424</id><published>2008-09-03T18:13:00.004+02:00</published><updated>2008-11-29T19:47:57.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>vacations</title><content type='html'>The last summer vacation was a bit short, at least relative to the European standard,  taking two non-consecutive weeks.  However, it is impressive how much variety you have access to in a very short travel time here. It all comes down to distance which seems to be compressed in Europe, and with Switzerland right in the middle of it (at least geographically speaking, since the political integration has not progressed much!), we can enjoy a lot of small weekend getaways.&lt;br /&gt;&lt;br /&gt;I can't help but compare this with Canada... when I was about 18, I took a train ride of about 42 hours which took me from Montreal to Regina (roughly 2400 km).  During all this time one could only witness two types of landscape (forest and prairie) and a single culture, english canada!  &lt;br /&gt;&lt;br /&gt;Being totally unfair and bias, this is what I get when looking at all the places I've visited in Europe during my first stay in 2000-2002:&lt;br /&gt;&lt;br /&gt;- Algarve in Portugal&lt;br /&gt;- France (Paris, Lyon, the Alpes region, Provence and Côte d'Azur)&lt;br /&gt;- Spain (Madrid, Barcelona, Alicante, Seville, Valence)&lt;br /&gt;- Baviere region in Germany (Munich)&lt;br /&gt;- Italy (Aoste, Piedmont, Lombardie regions)&lt;br /&gt;- England (London, Wales)&lt;br /&gt;- and of course a lot of regions in Switzerland (Romandie, Suisse Alémanique, Tessin)&lt;br /&gt;&lt;br /&gt;All these trips offering such a diversity of culture within less than 1000km (except probably south of Spain and Portugal which are a bit further)!&lt;br /&gt;&lt;br /&gt;However, now with the kids we are less ambitious ... actually we can reach places within less than 2 hours drive away from home... the exact time before our kids stuck in the car start their rampage!  So that is what we did this summer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are some pictures of these trips.&lt;br /&gt;&lt;br /&gt;Enjoying the small boat in the lake Du Bourget at Aix-les-Bains.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/-OnTz8-byGlhyckK2s4ivw"&gt;&lt;img src="http://lh5.ggpht.com/martin.l.ouellet/SM0BOKqD_hI/AAAAAAAAAOQ/cpYfDiOvvEc/s144/IMG_0017.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is my mom and sister with the kids while visiting Gstaad.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/wSl3KZQf0zIn7WjbT7Zzkg"&gt;&lt;img src="http://lh5.ggpht.com/martin.l.ouellet/SMz-jLcEroI/AAAAAAAAAME/bsFu6rtrf-k/s144/IMG_1862.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eating out at Thoune with my daughter!&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/tg_Scy6O6ifeddVLW3txzg"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/SMz_rK2uMyI/AAAAAAAAANE/L82Oy1_b87A/s400/IMG_1948.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/martin.l.ouellet/JuilletAout2008Partie2"&gt;Juillet - Aout 2008 - partie 2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I did also quite a bit of biking .. with my longest ride from Lausanne to Bern or about 100km.  My longest ascenscion, I did near Thoune (actually between Thoune and Interlaken) where I climb about 1400m.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/RVvrXvIhXa2v2k0kXIkyfg"&gt;&lt;img src="http://lh3.ggpht.com/martin.l.ouellet/SM5JroeOVKI/AAAAAAAAAQQ/HcEe1RiRrQM/s400/Photo007.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next pics were taken about half way toward Beetenberg and Nierderhorn.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/XDISHg17xZqR-Qm2YUY8lg"&gt;&lt;img src="http://lh6.ggpht.com/martin.l.ouellet/SM5JrtERs1I/AAAAAAAAAQA/qK5LzFCaZEI/s400/Photo005.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You feel lucky to go through this tunnel knowing the quality of road in Switzerland, it was so dark the only thing visible is the small spot of light at the end of tunnel.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/lh/photo/mQ6_kX0r2pV5WScxw46LGw"&gt;&lt;img src="http://lh5.ggpht.com/martin.l.ouellet/SM5JrrL4xWI/AAAAAAAAAQI/m0o3KvFy0yM/s400/Photo006.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Actually the highest altitude road usually winds upward (&lt;span style="font-style: italic;"&gt;lacet&lt;/span&gt; in french)  quite smoothly... they are not nearly as challenging as city roads I regularly ride in and around Lausanne (I guess the logical explanation to this is related to accessibility during winter). For example, a small road I often take has average slope at 20% that rides up to reach "Les trois Chasseurs" from Pully-la_Rosiaz.&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/LuALhnraAVhODh0M0Uv-Qg"&gt;&lt;img src="http://lh3.ggpht.com/_UbBVZqlR1kY/SRbi6lrGbhI/AAAAAAAAAUQ/GmH1eqTrv-Q/s400/Photo006.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/martin.l.ouellet/FromMobilePhone"&gt;From-mobile-phone&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BTW, the pictures taken while riding are from my 2 Megapixel Nokia6300, not too bad for a mobile phone!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-6894250615612218424?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/6894250615612218424/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=6894250615612218424' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/6894250615612218424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/6894250615612218424'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/08/vacations.html' title='vacations'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/martin.l.ouellet/SM0BOKqD_hI/AAAAAAAAAOQ/cpYfDiOvvEc/s72-c/IMG_0017.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5777028355166661562</id><published>2008-08-03T15:37:00.005+02:00</published><updated>2008-08-12T17:12:33.661+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Gruyères</title><content type='html'>&lt;span style="font-style: italic;"&gt;Ce blog a pris une tournure plus personnelle depuis notre arrivée en Suisse, ceci en grande partie pour tenir au courant ma famille de nos escapades.  J'ai donc décidé que ma mère &lt;/span&gt;&lt;span style="font-style: italic;"&gt;(Normande Lapointe, la mamie &lt;/span&gt;&lt;span style="font-style: italic;"&gt;assez bien branchée et à la page en ce qui concerne l'internet&lt;/span&gt;&lt;span style="font-style: italic;"&gt;) &lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;qui &lt;/span&gt;&lt;span style="font-style: italic;"&gt;profite &lt;/span&gt;&lt;span style="font-style: italic;"&gt;normalement bien de ce blog, pourrait &lt;/span&gt;&lt;span style="font-style: italic;"&gt;maintentant y contribuer en écrivant un &lt;/span&gt;&lt;span style="font-style: italic;"&gt;petit blog-photo le temps d'une balade!  Je lui cède donc le clavier. &lt;/span&gt; (Martin)&lt;br /&gt;&lt;br /&gt;Quel plaisir pour moi de relater brièvement notre excursion au château de Gruyère en cette magnifique journée du 2 août 2008, lendemain de la fête nationale suisse !  Un ciel bleu agrémenté de quelques nuages, une douce brise, de magnifiques montagnes en toile de fond, voilà comment s'amorce notre visite. Des conditions gagnantes, quoi !  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UbBVZqlR1kY/SJW1gjlgMwI/AAAAAAAAAHM/MYkIQu7abWU/s1600-h/IMG_1765.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_UbBVZqlR1kY/SJW1gjlgMwI/AAAAAAAAAHM/MYkIQu7abWU/s320/IMG_1765.jpg" alt="" id="BLOGGER_PHOTO_ID_5230286113173680898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Voici une vue du château de Gruyères prise par ma petite-fille Laurie qui, à six ans, manifeste déjà des talents de photographe.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UbBVZqlR1kY/SJW1g1e9hPI/AAAAAAAAAHU/Ony3JVRWgrk/s1600-h/IMG_1766.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_UbBVZqlR1kY/SJW1g1e9hPI/AAAAAAAAAHU/Ony3JVRWgrk/s320/IMG_1766.jpg" alt="" id="BLOGGER_PHOTO_ID_5230286117978080498" border="0" /&gt;&lt;/a&gt;Le château de Gruyères est un des plus prestigieux de Suisse, il est perché sur une colline dans un paysage verdoyant au coeur des Préalpes fribourgeoises (à 830 m d'altitude). Il domine la cité médiévale de Gruyères (nom qui dérive de la grue héraldique). L'histoire dit que 19 comtes y ont habité du XIe au XVIe siècle. Michel, le dernier comte de Gruyères, connut de grandes difficultés financières et fit banqueroute en 1554. Le territoire fut alors partagé entre les créanciers : les villes de Berne et Fribourg.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1hBMfTfI/AAAAAAAAAHc/4aha1HkvNlI/s1600-h/IMG_1768.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1hBMfTfI/AAAAAAAAAHc/4aha1HkvNlI/s320/IMG_1768.jpg" alt="" id="BLOGGER_PHOTO_ID_5230286121121828338" border="0" /&gt;&lt;/a&gt;En compagnie de ma belle-fille Kim et de mes deux petits-enfants, Laurie et Mathias, nous montons vers le château.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1h0EQS8I/AAAAAAAAAHk/W1OoUutYziw/s1600-h/IMG_1769.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1h0EQS8I/AAAAAAAAAHk/W1OoUutYziw/s320/IMG_1769.jpg" alt="" id="BLOGGER_PHOTO_ID_5230286134777498562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;On est presque arrivés... Voici le passage et les fortifications du Belluard, accès principal de la cité de Gruyères&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1iMtD-FI/AAAAAAAAAHs/LyUelGx9QPo/s1600-h/IMG_1772.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_UbBVZqlR1kY/SJW1iMtD-FI/AAAAAAAAAHs/LyUelGx9QPo/s320/IMG_1772.jpg" alt="" id="BLOGGER_PHOTO_ID_5230286141391108178" border="0" /&gt;&lt;/a&gt;Nous franchissons les portes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UbBVZqlR1kY/SJW26HyWJFI/AAAAAAAAAH0/iN3gHQwcH6Q/s1600-h/IMG_1774.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_UbBVZqlR1kY/SJW26HyWJFI/AAAAAAAAAH0/iN3gHQwcH6Q/s320/IMG_1774.jpg" alt="" id="BLOGGER_PHOTO_ID_5230287651899581522" border="0" /&gt;&lt;/a&gt;En famille, devant une partie du Calvaire qu'on aperçoit à moitié derrière.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UbBVZqlR1kY/SJW26f2yyyI/AAAAAAAAAH8/fmZvdq8b59w/s1600-h/IMG_1775.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_UbBVZqlR1kY/SJW26f2yyyI/AAAAAAAAAH8/fmZvdq8b59w/s320/IMG_1775.jpg" alt="" id="BLOGGER_PHOTO_ID_5230287658360687394" border="0" /&gt;&lt;/a&gt;Au coeur de la petite place en bas du château... devant Le Chalet, maison qui a été construite ailleurs et récupérée ici.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW2639S3kI/AAAAAAAAAIE/hthLEefbxzU/s1600-h/IMG_1778.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW2639S3kI/AAAAAAAAAIE/hthLEefbxzU/s320/IMG_1778.jpg" alt="" id="BLOGGER_PHOTO_ID_5230287664830406210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mathias devant une ouverture qui nous donne un aperçu des montagnes environnantes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UbBVZqlR1kY/SJW27UjtqtI/AAAAAAAAAIM/DVyb7TQ-T3c/s1600-h/IMG_1779.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_UbBVZqlR1kY/SJW27UjtqtI/AAAAAAAAAIM/DVyb7TQ-T3c/s320/IMG_1779.jpg" alt="" id="BLOGGER_PHOTO_ID_5230287672507738834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Quel visage radieux ! Le clocher de l'église de Gruyères nous apparaît derrière Mathias.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UbBVZqlR1kY/SJW27tm6YgI/AAAAAAAAAIU/-66vumFu3fc/s1600-h/IMG_1784.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_UbBVZqlR1kY/SJW27tm6YgI/AAAAAAAAAIU/-66vumFu3fc/s320/IMG_1784.jpg" alt="" id="BLOGGER_PHOTO_ID_5230287679232041474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Vue de la montagne sous un autre angle.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UbBVZqlR1kY/SJW4aTfFEoI/AAAAAAAAAIc/jA1YDrSOMcA/s1600-h/IMG_1787.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_UbBVZqlR1kY/SJW4aTfFEoI/AAAAAAAAAIc/jA1YDrSOMcA/s320/IMG_1787.jpg" alt="" id="BLOGGER_PHOTO_ID_5230289304307438210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Laurie fait une petite moue, le paysage est toujours époustoufflant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UbBVZqlR1kY/SJW4a4k1xII/AAAAAAAAAIk/2Yd-fIRfnj8/s1600-h/IMG_1788.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_UbBVZqlR1kY/SJW4a4k1xII/AAAAAAAAAIk/2Yd-fIRfnj8/s320/IMG_1788.jpg" alt="" id="BLOGGER_PHOTO_ID_5230289314263712898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Laurie, heureuse dans les bras de son père.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UbBVZqlR1kY/SJW4bKonK9I/AAAAAAAAAIs/xCPI79nt1yA/s1600-h/IMG_1790.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_UbBVZqlR1kY/SJW4bKonK9I/AAAAAAAAAIs/xCPI79nt1yA/s320/IMG_1790.jpg" alt="" id="BLOGGER_PHOTO_ID_5230289319111371730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A l'intérieur du château, elle se prend pour un chevalier.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW4bTxkNsI/AAAAAAAAAI0/-MnLBa_cE48/s1600-h/IMG_1791.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW4bTxkNsI/AAAAAAAAAI0/-MnLBa_cE48/s320/IMG_1791.jpg" alt="" id="BLOGGER_PHOTO_ID_5230289321564845762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nous voici dans la salle des baillis. Le château fut le siège des baillis fribourgeois de 1555 à 1798, après la faillite du dernier comte de Gruyères.  Ceux-ci y ont laissé leur marque en aménageant des intérieurs baroques.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UbBVZqlR1kY/SJW4bqmiVTI/AAAAAAAAAI8/UduoZmRDGiE/s1600-h/IMG_1792.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_UbBVZqlR1kY/SJW4bqmiVTI/AAAAAAAAAI8/UduoZmRDGiE/s320/IMG_1792.jpg" alt="" id="BLOGGER_PHOTO_ID_5230289327692600626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mathias et Laurie sur le poêle en catelles (tuiles en céramique dans le langage populaire suisse-romand).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5UMfhMWI/AAAAAAAAAJE/T_lyY2GDR-M/s1600-h/IMG_1793.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5UMfhMWI/AAAAAAAAAJE/T_lyY2GDR-M/s320/IMG_1793.jpg" alt="" id="BLOGGER_PHOTO_ID_5230290298862645602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Laurie prend des airs de comtesse !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UbBVZqlR1kY/SJW5UnSEW7I/AAAAAAAAAJM/3OpQ_YHSSuw/s1600-h/IMG_1797.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_UbBVZqlR1kY/SJW5UnSEW7I/AAAAAAAAAJM/3OpQ_YHSSuw/s320/IMG_1797.jpg" alt="" id="BLOGGER_PHOTO_ID_5230290306053987250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Une galerie avec vue... Le cours d'eau derrière moi est la rivière Sarine, bassin du lac de la Gruyère artificiellement créé suite à la construction du barrage de Rossens,  donnant naissance au plus jeune lac de toute la Suisse!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5VDfhX-I/AAAAAAAAAJU/hJO1-51YgaA/s1600-h/IMG_1808.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5VDfhX-I/AAAAAAAAAJU/hJO1-51YgaA/s320/IMG_1808.jpg" alt="" id="BLOGGER_PHOTO_ID_5230290313626607586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nous nous promenons dans le jardin français aménagé derrière le château.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5VSCQ9II/AAAAAAAAAJc/Z7iHaaD7i2Y/s1600-h/IMG_1812.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5VSCQ9II/AAAAAAAAAJc/Z7iHaaD7i2Y/s320/IMG_1812.jpg" alt="" id="BLOGGER_PHOTO_ID_5230290317530428546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;La belle Kim, en plein centre ville.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5V-auXUI/AAAAAAAAAJk/1sN0Ozc1GgI/s1600-h/IMG_1813.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_UbBVZqlR1kY/SJW5V-auXUI/AAAAAAAAAJk/1sN0Ozc1GgI/s320/IMG_1813.jpg" alt="" id="BLOGGER_PHOTO_ID_5230290329444179266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Notre visite tire à sa fin. Nous flânons encore un peu dans la rue bordée de magasins de souvenirs et de restaurants.  On est ravis de notre visite mais on a le sentiment d'avoir à peine effleuré des siècles d'histoire.&lt;br /&gt;Peut-être reviendrons-nous un jour...&lt;br /&gt;&lt;br /&gt;Normande&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5777028355166661562?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5777028355166661562/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5777028355166661562' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5777028355166661562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5777028355166661562'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/08/gruyres.html' title='Gruyères'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_UbBVZqlR1kY/SJW1gjlgMwI/AAAAAAAAAHM/MYkIQu7abWU/s72-c/IMG_1765.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8322532003629789447</id><published>2008-07-07T21:07:00.005+02:00</published><updated>2008-07-23T23:12:11.917+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Thermalp Ovronnaz</title><content type='html'>Ce weekend j'avais réservé une journée surprise pour ma petite vieille! Et oui Kim a eu 38 ans la semaine passée et avec tout ce stress accumulé avec les années, rien de tel qu'une fin de semaine passée aux bains thermales accompagnée de soins divers!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://bp2.blogger.com/_UbBVZqlR1kY/SIeZfkjvWTI/AAAAAAAAAG0/pOHTF-sjft0/s1600-h/IMG_0026.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226314660255324466" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_UbBVZqlR1kY/SIeZfkjvWTI/AAAAAAAAAG0/pOHTF-sjft0/s400/IMG_0026.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Le &lt;a href="http://maps.google.ca/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Ovronnaz&amp;amp;sll=46.551911,6.678215&amp;amp;sspn=0.00695,0.018797&amp;amp;ie=UTF8&amp;amp;ll=46.210725,7.168922&amp;amp;spn=0.111901,0.300751&amp;amp;t=h&amp;amp;z=12"&gt;site d'Ovronnaz &lt;/a&gt;se trouve à une heure de la maison en prenant l'autoroute qui longe le Rhône dans le Valais.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_UbBVZqlR1kY/SIeXux0k_MI/AAAAAAAAAGM/8TkiCrr1_V8/s1600-h/IMG_0012.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226312722490391746" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_UbBVZqlR1kY/SIeXux0k_MI/AAAAAAAAAGM/8TkiCrr1_V8/s400/IMG_0012.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Petite parenthèse écolo:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Dans le Valais, on croise les plus &lt;a href="http://www.radioamateur.ch/blog/index.php?2006/11/12/48-visite-de-l-eolienne-la-plus-haute-et-plus-puissante-de-suisse-en-valais-par-hb9y"&gt;puissantes éoliennes de la Suisse&lt;/a&gt;, fait assez rare en Suisse car le pays commence à peine à développer ce secteur. Il faut dire que les grands vents se trouvent plus en altitude et que j'imagine assez bien l'opposition des gens à gâcher ces magnifiques paysages alpins avec de gros ventilateur! La zone située à Collonges est particulièrement bien placée car il y a un phénomène de vent constant dû à l'encaissement de la vallée. La vallée du Valais située entre les plus hautes montagnes de la Suisse a d'ailleurs des &lt;a href="http://www.alpavista.ch/Alp06/index.php?2002/04/24/120-chroniques-d-en-haut-le-climat-du-valais"&gt;caractéristiques météorologiques&lt;/a&gt; très différentes du plateau de la Suisse, comme le &lt;a href="http://www.alpavista.ch/Alp06/index.php?2002/04/24/120-chroniques-d-en-haut-le-climat-du-valais"&gt;foehn &lt;/a&gt;et son très faible taux de pluviométrie (même quantité de pluie que Barcelone). D'ailleurs, j'ai bien remarqué ce &lt;a href="http://www.tourismesuisse.com/valais/activite/loisir/plage/f_b_1_0_1238-La-gouille-du-Rosel.html"&gt;minuscule plan d'eau&lt;/a&gt; qui semble idéal pour la planche à voile.... je vais peut-être considéré une reprise de ce sport qui n'est pas évident à pratiquer autour de l'arc lémanique. Le Léman est plutôt une cuvette avec peu de vents thermiques contrairement à d'autres lacs dans les alpes comme le lac de Côme. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Les enfants nous ont forcément rejoint plus tard dans la journée avec comme espoir de se baigner dans le "gros bain en forme de piscine".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_UbBVZqlR1kY/SIeZINmy7NI/AAAAAAAAAGs/F1AnwjekO7Y/s1600-h/IMG_0018.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226314258957135058" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_UbBVZqlR1kY/SIeZINmy7NI/AAAAAAAAAGs/F1AnwjekO7Y/s400/IMG_0018.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_UbBVZqlR1kY/SIeaVKZYB1I/AAAAAAAAAG8/ZKIDQsUQvqc/s1600-h/IMG_0020.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226315580945467218" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_UbBVZqlR1kY/SIeaVKZYB1I/AAAAAAAAAG8/ZKIDQsUQvqc/s400/IMG_0020.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quant à moi, je me suis aussi réservé un peu de "détente" en grimpant les petites routes qui montent en laçais vers les haut sommets autour du village d'&lt;a href="http://www.ovronnaz.ch/en/"&gt;Ovronnaz&lt;/a&gt;! La monté fût assez pénible mais l'arrivée en valait le détour.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_UbBVZqlR1kY/SIeY2Q-U83I/AAAAAAAAAGk/i0Hvik_EZqs/s1600-h/IMG_0017.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226313950623495026" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_UbBVZqlR1kY/SIeY2Q-U83I/AAAAAAAAAGk/i0Hvik_EZqs/s400/IMG_0017.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_UbBVZqlR1kY/SIedJrFb34I/AAAAAAAAAHE/xTEbkBe6dsE/s1600-h/IMG_0013.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226318682096656258" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_UbBVZqlR1kY/SIedJrFb34I/AAAAAAAAAHE/xTEbkBe6dsE/s400/IMG_0013.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Je me suis finalement arrêté à la buvette Loutze à plus de 1700 mètres d'altitude. Je me sens maintenant prêt pour un vrai col!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_UbBVZqlR1kY/SIeYjsbHfII/AAAAAAAAAGc/XbVZKMK3A9s/s1600-h/IMG_0014.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226313631574490242" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_UbBVZqlR1kY/SIeYjsbHfII/AAAAAAAAAGc/XbVZKMK3A9s/s400/IMG_0014.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;/photos&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8322532003629789447?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8322532003629789447/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8322532003629789447' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8322532003629789447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8322532003629789447'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/07/thermalp-ovronnaz.html' title='Thermalp Ovronnaz'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_UbBVZqlR1kY/SIeZfkjvWTI/AAAAAAAAAG0/pOHTF-sjft0/s72-c/IMG_0026.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7710124692784725726</id><published>2008-06-22T21:28:00.002+02:00</published><updated>2008-07-07T22:15:42.458+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Le barrage d'Emosson</title><content type='html'>Aujourd'hui nous nous sommes payés une petite visite en hauteur pour se rafraîchir par ce temps caniculaire (plus de 33C en plaine...). Nous avons opté pour &lt;a href="http://www.chatelard.net/"&gt;Le Châtelard&lt;/a&gt; situé dans le Valais à deux pas de la vallée française de Chamonix.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A partir de ce petit village, nous avons pris le plus abrupte funiculaire à deux cabines de monde avec une pente maximale de 87% (ce qui donne à peu près 41 degrée! ... présumant que mes quelques souvenirs de la trigonométrique soient justes ).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCK41ugLQI/AAAAAAAAAFM/HcuYLSGPYtw/s1600-h/IMG_0019.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCK41ugLQI/AAAAAAAAAFM/HcuYLSGPYtw/s400/IMG_0019.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215321077594467586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Laurie au moment du départ, en plein confiance?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCLNId3-7I/AAAAAAAAAFU/hH9_Uu2-9VY/s1600-h/IMG_0020.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCLNId3-7I/AAAAAAAAAFU/hH9_Uu2-9VY/s400/IMG_0020.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215321426222382002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nous parcourons par la suite un petit trajet à flanc de côteau en train à la vapeur fonctionnant au charbon.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCLeNxc8OI/AAAAAAAAAFc/Nthl0SlyX2U/s1600-h/IMG_0023.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCLeNxc8OI/AAAAAAAAAFc/Nthl0SlyX2U/s400/IMG_0023.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215321719704449250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ce parcours nous offre une vue imprenable sur le Mont Blanc et ses sommets avoisinnants (on voit très bien les pics des Aiguilles du midi).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCLuq3dEtI/AAAAAAAAAFk/F-Nmw-H33wA/s1600-h/IMG_0027.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCLuq3dEtI/AAAAAAAAAFk/F-Nmw-H33wA/s400/IMG_0027.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215322002392158930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nous arrivons à un 2e funiculaire qui lui nous mène au barrage du lac d'Emosson (à poids voûte).&lt;br /&gt;Ce barrage avec sa hauteur de près de 200 mètre impressionne et donne le vertige! Il est le 2e plus gros de la Suisse en terme de volume d'eau retenu avec plus de 227 million de mètres cubes d'eau (la Suisse compte pas moins de 160 barrages ... ce qui me semble pas mal compte tenu de sa taille).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Voici quelques autres photos...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SGCMRk1_AdI/AAAAAAAAAFs/ny9DXR_gFVU/s1600-h/IMG_0036.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SGCMRk1_AdI/AAAAAAAAAFs/ny9DXR_gFVU/s400/IMG_0036.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215322602070802898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_UbBVZqlR1kY/SGCMqmIcAYI/AAAAAAAAAF0/q57D0iIdRHU/s1600-h/IMG_0040.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/SGCMqmIcAYI/AAAAAAAAAF0/q57D0iIdRHU/s400/IMG_0040.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215323031913365890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Et non nous n'avons pas adopté 2 nouveaux enfants, mais plutôt fait le voyage avec un couple d'amis avec enfants!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCNOQofoBI/AAAAAAAAAF8/vU6quAA0sxU/s1600-h/IMG_0047.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCNOQofoBI/AAAAAAAAAF8/vU6quAA0sxU/s400/IMG_0047.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215323644617531410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Coup de chance en me rendant dans une zone plus isolée pour prendre quelques photos, j'aperçois un chamoix qui ne semble pas trop appeuré de notre présence! Mon fils l'est un peu plus et nous le laisserons tranquille dans son jolie coin de pays:  "&lt;em&gt;papa, on ne devrait pas trop l'approcher... il a quand même des cornes&lt;/em&gt;!!"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCNlMGYx6I/AAAAAAAAAGE/RCqXPpWO5JM/s1600-h/IMG_0051.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SGCNlMGYx6I/AAAAAAAAAGE/RCqXPpWO5JM/s400/IMG_0051.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215324038537725858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Petite déception, nous n'avons pas pu atteindre les empreintes de dinosaures malgré toute la bonne volonté et motivation de Mathias.... la fatigue a tout simplement eu le dessus!!! À une prochaine fois.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les enfants se sont montrés bien brâves et tenaces avec ces longs parcours, ces dénivellés et ascensions ... rien de mieux que d'avoir des amis de leurs âges pour stimuler leur orgeuil!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7710124692784725726?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7710124692784725726/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7710124692784725726' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7710124692784725726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7710124692784725726'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/06/le-barrage-demosson.html' title='Le barrage d&apos;Emosson'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UbBVZqlR1kY/SGCK41ugLQI/AAAAAAAAAFM/HcuYLSGPYtw/s72-c/IMG_0019.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-6586602237507114278</id><published>2008-06-08T15:24:00.002+02:00</published><updated>2008-06-08T19:32:24.400+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Claire Ouellet</title><content type='html'>This is a shameless blog-plug!&lt;br /&gt;&lt;br /&gt;My sister &lt;a href="http://www.conservatoire.gouv.qc.ca/cv/cv.asp?ordre=&amp;amp;idProf=208"&gt;Claire &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ouellet&lt;/span&gt;&lt;/a&gt;, is a professional pianist.   Although, I was sort of annoyed by it while I was younger (these continuous and endless practices caused me a few nervous breakdown!), I must admit that all these long years of discipline did pay off.  She is now a teacher at the &lt;a href="http://www.conservatoire.gouv.qc.ca/montreal/index.asp"&gt;Conservatoire of Montreal&lt;/a&gt;, and her last record out is a hot seller (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ok&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ok&lt;/span&gt;... selling statistics for classical albums are certainly not on the same scale as pop music, so I'm not expecting her to move to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Montreux&lt;/span&gt; soon ;-).&lt;br /&gt;&lt;br /&gt;Here's her most recent album: &lt;a href="http://www.atmaclassique.com/fr/artistes/artistes_show.asp?id=414"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Orford&lt;/span&gt; Six Pianos&lt;/a&gt; with details &lt;a href="http://www.arkivmusic.com/classical/Name/Claire-Ouellet/Performer/35973-2"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Previous albums can also be found at&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.daedalusbooks.com/Products/Detail.asp?ProductID=65891&amp;amp;Media=Music"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Stravinski&lt;/span&gt; &amp;amp; Bartok: two pianos&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.archambault.ca/store/Product.asp?mscssid=&amp;amp;sku=001103686&amp;amp;type=1"&gt;Invitation à la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;danse&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;- &lt;a href="http://www.scena.org/lsmcritics.asp?volume=5&amp;amp;no=4&amp;amp;lan=1"&gt;Nostalgia&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-6586602237507114278?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/6586602237507114278/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=6586602237507114278' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/6586602237507114278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/6586602237507114278'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/06/claire-ouellet.html' title='Claire Ouellet'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8508055070008171567</id><published>2008-05-30T15:50:00.003+02:00</published><updated>2010-06-11T23:46:47.427+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Technology adoption rate in corporate world</title><content type='html'>Corporations are usually slow in adopting new technology internally... there is usually strong resistance usually among employees to change old habit (the famous &lt;span style="font-style: italic;"&gt;comfort zone&lt;/span&gt;) or upgrade application implementation barely meeting requirement and specification. A good illustration of this is the &lt;span style="font-style: italic;"&gt;too often seen&lt;/span&gt; requirement with spec similar as "&lt;span id="weis"&gt;&lt;i id="p4fi0"&gt;files X containing all needed info will be sent to Mr. Y mailbox at some specified time schedule&lt;/i&gt;&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;The email messaging paradigm is still the most natural and the least controversial way for disseminating information to specific recipients among the organization. However, many drawbacks are related to this approach: &lt;ul id="dxm3"&gt;&lt;li id="m5n-"&gt;The publisher application must manage all recipient emails (additions, removals, modifications, etc) &lt;/li&gt;&lt;/ul&gt;&lt;ul id="o89-"&gt;&lt;li id="b6d-"&gt;The publisher application is also responsible in managing temporary substitution among recipients email (e.g. with vacations, etc..)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul id="o89-"&gt;&lt;li id="b6d-"&gt;Sending a large number of messages to various different recipients increase complexity of the publishing application whose scope should focus on the generation of the information &lt;/li&gt;&lt;/ul&gt;&lt;ul id="o89-"&gt;&lt;li id="b6d-"&gt;Email messaging is less practical for larger data volume content&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul id="o89-"&gt;&lt;li id="kh4w"&gt;Lack of security: the data sent over mailing application is rarely protected&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul id="o89-"&gt;&lt;li id="k_x1"&gt;Recipient mailbox is not resilient to failure (e.g. limit space exceeded) resulting in the end-user missing valuable new content delivery &lt;/li&gt;&lt;/ul&gt;Email used as the communication channel of type &lt;i id="lz9a0"&gt;Application-to-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;EndUser&lt;/span&gt;,&lt;/i&gt; is very frequent everywhere, although a much better and flexible solution exist. &lt;span id="bv7c"&gt;&lt;b id="k7it"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RSS&lt;/span&gt; feed&lt;/b&gt;&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RSS&lt;/span&gt; stands for &lt;span id="rouq"&gt;&lt;i id="xvnr"&gt;Really Simple Syndication&lt;/i&gt;&lt;/span&gt;. Without going into too much details &lt;span id="xh15"&gt;&lt;b id="twqs"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RSS&lt;/span&gt; feed&lt;/b&gt;&lt;/span&gt; (aka &lt;span id="pepw"&gt;&lt;b id="fpfc"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RSS&lt;/span&gt; channels&lt;/b&gt;&lt;/span&gt;) is a mechanism to allow any end-user to receive asynchronously some form of message (e.g. headlines, updates) or even data content published periodically by a provider. The end-user utilizes a &lt;span id="jod5"&gt;&lt;b id="a.pi"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RSS&lt;/span&gt; Reader&lt;/b&gt;&lt;/span&gt; (aka &lt;span id="itii"&gt;&lt;b id="yxh4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;RSS&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;aggregator&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;) to stay up to date with new content published without having to know and worry about the publishing schedule. Simple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;RSS&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;aggregators&lt;/span&gt; are directly available inside common web browser and more advanced ones are also available for free. &lt;p id="qtfe"&gt;&lt;/p&gt;&lt;p id="vf0s"&gt;Some commonly uses of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RSS&lt;/span&gt; feed include: &lt;/p&gt;&lt;ul id="o65t"&gt;&lt;li id="o8mr"&gt;Notification of new data content within a web site (either just a summary or the full content), typically used by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;weblogs&lt;/span&gt; and news websites. &lt;/li&gt;&lt;li id="iapd"&gt;Notification of the arrival of new products in a store.&lt;/li&gt;&lt;li id="lao4"&gt;Listing and notifying you of newsletter issues, including email newsletters.&lt;/li&gt;&lt;li id="mgcn"&gt;Notification of additions of new items to a database, or new members to a group.&lt;/li&gt;&lt;li id="mgcn"&gt;Weather and other alerts of changing conditions.&lt;/li&gt;&lt;/ul&gt;&lt;span id="byx0"&gt;&lt;b id="ak5e"&gt;Advantages of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;RSS&lt;/span&gt;:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;-sophisticated security model can be implemented with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;RSS&lt;/span&gt; by leveraging the web security rules and mechanisms available in the company intranet/portal ;&lt;br /&gt;-the management of all different messages content to all different recipients are off loaded from the publisher responsibility into the individual end-user recipients (except for security which can be managed at the web page level).... allowing the publisher to focus on the data content instead of delivery concern;&lt;br /&gt;- Publisher application has a more standard and accepted way to publish and disseminate ad-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;hoc&lt;/span&gt; type message content (report, data, news, etc,,) among the end-user community within the organization.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also interesting is the possibility that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;RSS&lt;/span&gt; can offer to corporate intranet and portal: &lt;a id="y-88" title="RSS in the intranet" href="http://intranetblog.blogware.com/blog/_archives/2006/1/20/1715981.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;RSS&lt;/span&gt; in the intranet&lt;/a&gt;. Some people even suggest &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;RSS&lt;/span&gt; as a &lt;a id="i71e" title="replacement of the email" href="http://www.sitepronews.com/archives/2008/jan/28.html"&gt;replacement of the email&lt;/a&gt;, as a way to get it over with the spamming issue or other shortcomings such as not being able to embed video within email directly.&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8508055070008171567?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8508055070008171567/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8508055070008171567' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8508055070008171567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8508055070008171567'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/05/technology-adoption-rate-in-corporate.html' title='Technology adoption rate in corporate world'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8693169228422193321</id><published>2008-05-18T21:04:00.003+02:00</published><updated>2008-07-07T22:15:16.009+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Sel des Alpes</title><content type='html'>Et oui, le sous-sol de la Suisse ne contient pas trop de pétrole mais on y trouve du sel!  En fait, dans une autre ère géologique (200 million d'années.. ces échelles de temps m'apparaîtront toujours inconcevables??),  la mer se trouvant sur ce territoire s'évapora et le sel laissé par cette évaporation se trouva pris sous le plissement de la formation alpine.&lt;br /&gt;&lt;br /&gt;En jugeant de l'effort qu'ils ont mis pour l'extraire, on comprend bien que le sel était le pétrole de l'époque (début de l'extraction à partir des galeries souterraines fut réalisée en 1684).  Les galeries étaient tout simplement creusées au marteau et à la cisette... avançant quelques cm par jour, un seul puit pouvant prendre plus de 26 ans à construire!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aujourd'hui, le sel de la &lt;a href="http://www.mines.ch/"&gt;mine de Bex&lt;/a&gt; est extrait en injectant de l'eau sous pression dans les trous forés.  Ce forage se fait avec des couronnes (têtes des foreuse couvertes de diamant industriel) qui carottent le roc à plus de 10m par jour!  La saumure arrivant par le retour d'eau est saturée à 30% de sel (10x l'eau de mer) et est par la suite canalisée vers une usine afin d'y extraire le sel.   La mine peut se visiter car, quoiqu'encore fonctionnelle, tout est automatisé et aucun mineur n'est normalement présent (ils recoivent des sms en cas de pannes ou anomalies!).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La particularité de cette mine qui se trouve par endroit à plus de 450m sous-terre (en fait sous la montagne) est qu'il fait une température stable de 17c.  Ceci est dû au gypse déshydraté (roche anhydrite) qui absorbe une grande quantité de l'humidité ambiante... dégageant ainsi de la chaleur.   Donc, température fixe, humidité fixe... endroit idéal pour la conservation du vin.  Et oui ceci est bien une cave à vin en plein mine sous terre:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SDB95Ausf5I/AAAAAAAAAEg/tqSuuP4MIxA/s1600-h/IMG_0038.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SDB95Ausf5I/AAAAAAAAAEg/tqSuuP4MIxA/s320/IMG_0038.JPG" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On y voit aussi d'autres curiosités comme des fistules (sorte de stalactites creuses... l'eau y coulent de l'intérieure) composées de sel formé par la condensation de l'humidité ambiante... elles ont une croissance rapide du mètre par an (lignes fines sur le fond de la photo):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SDB96Ausf6I/AAAAAAAAAEo/vBF0im4OzPM/s1600-h/IMG_0043.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SDB96Ausf6I/AAAAAAAAAEo/vBF0im4OzPM/s320/IMG_0043.JPG" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mathias ici absorbé par toutes ces explications...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SDB96Qusf7I/AAAAAAAAAEw/-Hg_OBEX5xk/s1600-h/IMG_0046.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SDB96Qusf7I/AAAAAAAAAEw/-Hg_OBEX5xk/s320/IMG_0046.JPG" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Laurie et Mathias avant le retour au monde extérieur grâce au train franchissant plus de 1.5 kim de couloir étroit:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SDCM2Qusf9I/AAAAAAAAAFA/S1BNY7Ho0RM/s1600-h/IMG_0056.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SDCM2Qusf9I/AAAAAAAAAFA/S1BNY7Ho0RM/s400/IMG_0056.JPG" alt="" id="BLOGGER_PHOTO_ID_5201812433444569042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Du sel, on en trouve un peu partout...en voici formé le long des parois d'une galerie.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_UbBVZqlR1kY/SDB96gusf8I/AAAAAAAAAE4/SltHIlAzBm8/s1600-h/IMG_0048.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_UbBVZqlR1kY/SDB96gusf8I/AAAAAAAAAE4/SltHIlAzBm8/s320/IMG_0048.JPG" alt="" id="BLOGGER_PHOTO_ID_" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En conclusion, ce fut une journée très agrèable et enrichissante passée en famille!  Maintenant on sait l'origine du sel des Alpes (tout le sel acheté dans le canton de Vaud provient de cette mine), et sa grande pureté conservée par des millions d'années passé au coeur du roc alpin. &lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8693169228422193321?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8693169228422193321/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8693169228422193321' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8693169228422193321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8693169228422193321'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/05/sel-des-alpes.html' title='Sel des Alpes'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UbBVZqlR1kY/SDB95Ausf5I/AAAAAAAAAEg/tqSuuP4MIxA/s72-c/IMG_0038.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5642886816957737284</id><published>2008-05-07T13:23:00.016+02:00</published><updated>2010-10-07T18:07:20.485+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>EAI</title><content type='html'>Most BI architecture found within enterprise today does not exploit the integration capacity offered by more recent technology. These are more typically leveraged by other application systems in the operational area inside the enterprise IT infrastructure. But before giving some thoughts on the reason why (more on this in a coming blog), first I’d like to give more detail on the concept of application integration. Traditionally, this subject has been referred to as the &lt;a href="http://en.wikipedia.org/wiki/Three-letter_acronym"&gt;TLA&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Enterprise_application_integration"&gt;EAI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Instead of relying on a more prose-like form, I thought to make use of the mind map diagram for describing the concept.  I really like &lt;a href="http://en.wikipedia.org/wiki/Mind_map"&gt;Mind map&lt;/a&gt; as a way to illustrate, navigate, and represent knowledge on specific subject.&lt;br /&gt;&lt;br /&gt;So here is my mind map of EIA (using &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; ) .&lt;br /&gt;&lt;br /&gt;1. static view:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCRnRamuNeI/AAAAAAAAAEY/rY3LBV_c_Jo/s1600-h/EAI-2.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5198393418789565922" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCRnRamuNeI/AAAAAAAAAEY/rY3LBV_c_Jo/s400/EAI-2.png" style="cursor: hand; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://mind42.com/pub/mindmap?mid=296af82c-b86c-4b94-afc3-0bcf3286d670"&gt;Dynamic View  at Mind42&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;T&lt;s&gt;he mind map is hosted by mindshare.com which is still in beta, so may not be available at all times!&lt;/s&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the same dynamic view embedded as iframe :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width="700" height="700" frameborder="1" src="http://mind42.com/pub/mindmap?mid=296af82c-b86c-4b94-afc3-0bcf3286d670"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From my personal observation when it comes to EAI, BI applications typically limit its integration to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For the upstream spectrum (i.e. fetching data in) : Bacth-file or database loading in otherwords ETL processing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For the downsteam spectrum (i.e. disseminating the info out) : things usually are limited to sending flat files to external system at scheduled time. Here I only refer to integration between different system applications without including desktop user-type application, where things are different. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5642886816957737284?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5642886816957737284/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5642886816957737284' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5642886816957737284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5642886816957737284'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/05/eai.html' title='EAI'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UbBVZqlR1kY/SCRnRamuNeI/AAAAAAAAAEY/rY3LBV_c_Jo/s72-c/EAI-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3073572914890844526</id><published>2008-05-01T19:10:00.004+02:00</published><updated>2008-07-07T22:14:39.673+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tourisme'/><title type='text'>Visite au château</title><content type='html'>&lt;div align="left"&gt;Aujourd'hui nous sommes allés visiter le &lt;a href="http://www.chillon.ch/en/"&gt;Château de Chillon&lt;/a&gt;! Nous étions déjà allés avant que les enfants soient nés, mais avec les enfants ça comportait un peu plus d'émerveillement et de magie! Ce château est vraiment typique avec ses tourelles, ses toits en pente, ses douves naturels (le château se situe en fait sur une île rocheuse), son donjon.... c'est son emplacement qui le rend unique. Il est protégé d'un côté par les escarpements des alpes vaudoises et de l'autre par le lac Léman. Les plus anciennes mention du château date de 1150 et sa période la plus marquante est liée aux &lt;a href="http://en.wikipedia.org/wiki/Duchy_of_Savoy"&gt;Ducs de Savoie&lt;/a&gt; qui contrôlaient ce territoire stratégique chevauchant la fontière franco-italienne.&lt;br /&gt;&lt;br /&gt;Voici quelques photos de cette après-midi passé en famille...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SCIP3uDNdVI/AAAAAAAAADg/qV01Gp4ORnk/s1600-h/avril_mai+2008+040.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197734369867691346" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SCIP3uDNdVI/AAAAAAAAADg/qV01Gp4ORnk/s320/avril_mai+2008+040.jpg" border="0" /&gt;&lt;/a&gt;Laurie et Mathias !&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SCIQXuDNdWI/AAAAAAAAADo/Z8pia8e_ayo/s1600-h/avril_mai+2008+045.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197734919623505250" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SCIQXuDNdWI/AAAAAAAAADo/Z8pia8e_ayo/s320/avril_mai+2008+045.jpg" border="0" /&gt;&lt;/a&gt;Kim et les enfants se racontant des peurs..&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SCIRAeDNdXI/AAAAAAAAADw/8Cg3sFpMqg8/s1600-h/avril_mai+2008+050.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197735619703174514" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SCIRAeDNdXI/AAAAAAAAADw/8Cg3sFpMqg8/s320/avril_mai+2008+050.jpg" border="0" /&gt; &lt;p align="center"&gt;&lt;/a&gt;une vue sur l'autoroute traversant longeant le lac.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCIRrODNdYI/AAAAAAAAAD4/WVHy0mXhhAM/s1600-h/avril_mai+2008+044.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197736354142582146" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCIRrODNdYI/AAAAAAAAAD4/WVHy0mXhhAM/s320/avril_mai+2008+044.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="center"&gt;une vue sur le lac&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCISDODNdZI/AAAAAAAAAEA/8ZEmTjpSTLU/s1600-h/avril_mai+2008+062.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197736766459442578" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCISDODNdZI/AAAAAAAAAEA/8ZEmTjpSTLU/s320/avril_mai+2008+062.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;a href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SCITjeDNdaI/AAAAAAAAAEI/HonK1t5hKU4/s1600-h/avril_mai+2008+066.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197738420021851554" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SCITjeDNdaI/AAAAAAAAAEI/HonK1t5hKU4/s320/avril_mai+2008+066.jpg" border="0" /&gt; &lt;p align="center"&gt;&lt;/a&gt;moi et les enfants avec le château en arrière plan.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3073572914890844526?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3073572914890844526/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3073572914890844526' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3073572914890844526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3073572914890844526'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/05/visite-au-chteau.html' title='Visite au château'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UbBVZqlR1kY/SCIP3uDNdVI/AAAAAAAAADg/qV01Gp4ORnk/s72-c/avril_mai+2008+040.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2195936157636595616</id><published>2008-04-27T14:07:00.003+02:00</published><updated>2010-06-12T22:38:40.980+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Decorating RPC server call</title><content type='html'>In RPC service layer, I often need special processing to occur before/after some of the call methods.  For example, I may want to gather various access statistics related to some of the methods, compress the response when it exceeds some maximum threshold, or yet simply providing a cache response to speed things up!&lt;br /&gt;&lt;br /&gt;So in essence, I need to intercept specific RPC calls to provide extra service to these calls and optionally even taking responsibility of handling the call without reaching the real service layer (e.g. as in the case of caching). The logical answer to this need would be to use a AOP solution (Aspect-Oriented Programming), however my service layer are already intercepted by some aspects to manage orthogonal concern such as transactional processing and security handling. And defining additional aspects around my service methods seem counter-intuitive especially for aspects that are relatively sparse (i.e. only apply to a few methods/service).&lt;br /&gt;&lt;br /&gt;My solution to this problem is simply leveraging the &lt;a href="http://exciton.cs.rice.edu/JavaResources/DesignPatterns/DecoratorPattern.htm"&gt;Decorator design pattern&lt;/a&gt;. Conceptually, this pattern provides a way to attach additional responsibilities to object dynamically, i.e. here I could add auditing ability or caching ability to the service object. The next UML figure presents the class diagram involved in my solution. It is a slightly modified version of the classic pattern because both my concrete service object (to be wrapped by decorator) and my decorators inherit the same super class. This is more a convenience to centralize the various steps originating from GWT RPC handling mechanism with the template method pattern. The drawback is that all decorators have an annoying dependence on the GWT library. This is fine for my scenario, but I may have to refactor this in order to improving testability.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCH54eDNdTI/AAAAAAAAADQ/OHdIgYrSZLM/s1600-h/uml-decorator.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5197710193496782130" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SCH54eDNdTI/AAAAAAAAADQ/OHdIgYrSZLM/s400/uml-decorator.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;I’m providing the skeleton source code for the main classes involved, feel free to adapt them to your needs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://docs.google.com/View?id=dc7dg7fn_28f3kgjpf6"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://docs.google.com/View?id=dc7dg7fn_29djtfwcf5"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src=" http://docs.google.com/View?id=dc7dg7fn_30cct2kpcm"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2195936157636595616?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2195936157636595616/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2195936157636595616' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2195936157636595616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2195936157636595616'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/04/decorating-rpc-server-call.html' title='Decorating RPC server call'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UbBVZqlR1kY/SCH54eDNdTI/AAAAAAAAADQ/OHdIgYrSZLM/s72-c/uml-decorator.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3561752035971502875</id><published>2008-04-24T09:21:00.009+02:00</published><updated>2010-06-11T23:46:09.704+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>BI and technology adoption</title><content type='html'>To follow-up on a question raised by someone at my consulting firm... why is BI group usually late adopter (compare to other group inside the enterprise) in terms of technology?&lt;br /&gt;&lt;br /&gt;In fact, I've been asked this question by a manager, and at first, I did not exactly what to respond, actually my first reaction was to think that the big organizations were reluctant and hesitant to add more technology to a platform already loaded (or bloated?) with tools, difficult enough to manage and for which ROI is certainly not obvious to calculate.&lt;br /&gt;&lt;br /&gt;After putting additional thoughts, I now feel that reasons are found inside and not outside BI. Traditionally the BI designer and architect come from a database background and culture, and these have a tendency to be more skeptical about new technology (they may well be right on that one!), whereas the general software development crowd usually come from computer science background very much inclined in looking into latest innovations ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In general I have observed that it is among people running more operational systems, who are already used in adopting technologies, that will turn down proposal to connect to the BI platform using less traditional way.   It is rather BI group itself which keeps proposing to send flat files to feed other external systems or give read-only access to their database (because these are familiar communication channel coming from the familiar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ETL&lt;/span&gt;&lt;/span&gt; process).  And when you propose to expose these information as web services instead: you get a funny look!&lt;br /&gt;&lt;br /&gt;The outcome of this fact is that we often end up with BI platform that is very isolated (silo-type application) from the rest of the corporate integrated architecture.   This penalizes the potential usefulness of BI... which could be leveraged better and exploit in a more &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;transparent&lt;/span&gt; and integrated way into the existing corporate Business Process.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hence there is no doubt that BI would gain by adopting technologies like web services, and architecture such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;SOA&lt;/span&gt;&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ESB&lt;/span&gt;&lt;/span&gt;?   And there are a lot of &lt;a href="http://www.dmreview.com/specialreports/2008_65/10000831-1.html"&gt;initiatives&lt;/a&gt; along these lines... this is inevitable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3561752035971502875?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3561752035971502875/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3561752035971502875' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3561752035971502875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3561752035971502875'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/04/bi-and-technology-adoption.html' title='BI and technology adoption'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7329958084055353116</id><published>2008-04-12T11:08:00.018+02:00</published><updated>2008-04-19T10:16:10.150+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Are we settled now?</title><content type='html'>&lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=110547865137515735824.00044aa985d9205a5869f&amp;amp;z=3"&gt;All the places I once called home&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;I was counting the number of places I lived in recently and this number seemed completely unreasonable... so I decided to blog about it mostly for my wife so she can see that it may well be the time to settle. Although things were quite stable at first (I actually lived for the first 18 years in a single place), it all changed once I moved out of my mom's place!&lt;br /&gt;&lt;br /&gt;In case you are wondering, no I'm not 65 but only 36 years old...ok almost 37 now.&lt;br /&gt;&lt;br /&gt;Here's the map:&lt;br /&gt;&lt;iframe marginwidth="0" marginheight="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;s=AARTsJpEa3Z9g2WyZU6-8KMZmPa3FxKz8w&amp;amp;msa=0&amp;amp;msid=110547865137515735824.00044aa985d9205a5869f&amp;amp;ll=46.55886,-47.8125&amp;amp;spn=109.705673,225&amp;amp;z=2&amp;amp;output=embed" frameborder="0" width="640" scrolling="no" height="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a style="COLOR: rgb(0,0,255); TEXT-ALIGN: left" href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=110547865137515735824.00044aa985d9205a5869f&amp;amp;ll=46.55886,-47.8125&amp;amp;spn=109.705673,225&amp;amp;z=2&amp;amp;source=embed"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's the list:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Chicoutimi&lt;/span&gt;: My first Home!&lt;br /&gt;Well almost the first, but I did move there at the age of 2 months-old...and left at the age of 19 years-old! Year: 1971-1990&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Regina&lt;/span&gt; : My first summer trip&lt;br /&gt;Spent about two months there to learn our national second official language! Year: 1989&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Vancouver&lt;/span&gt;&lt;br /&gt;Supposed to spend a full summer there with a friend, but we actually returned home prematurely ... I had to return right after we found our first job. Year: 1991&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: My first apartment&lt;br /&gt;2510 Bldv Édouard-Montpetit, Montréal. Did my first two years of University there..with two other good friends. Year:1990-91&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Worcester&lt;/span&gt;: WPI in the dorms&lt;br /&gt;I've completed my 3rd year of B.Eng. Year: 1992-93&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: Last apartment where I completed my B. at Ecole Polytechnique&lt;br /&gt;3210 Bldv Édouard-Montpetit Year:1993&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: First apartment with Kim&lt;br /&gt;2910 Av Linton Year: 1994&lt;/li&gt;&lt;li value="7"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: Second apartment with Kim&lt;br /&gt;2910 Av Linton Year: 1994&lt;/li&gt;&lt;li value="8"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: Third apartment with Kim&lt;br /&gt;Av Papineau Nice view of the park! Year: 1995&lt;br /&gt;&lt;/li&gt;&lt;li value="9"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: Fourth apartment with Kim&lt;br /&gt;Av Papineau Yes believe it or not, we moved next door to have an extra room, sigh!! Year: 1996&lt;/li&gt;&lt;li value="10"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: Fifth apartment with Kim&lt;br /&gt;6654 de Lanaudiere Well things are getting out of control..I have a solution! Year:1997&lt;/li&gt;&lt;li value="11"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Iasi&lt;/span&gt;: for Work&lt;br /&gt;I've been in and out of this place for work. It literally opened my eyes to the world, and I also met quite interesting and fun people. Year: About 4 months during 1998-1999&lt;/li&gt;&lt;li value="12"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Montreal&lt;/span&gt;: The first place we owned&lt;br /&gt;6554 rue de la Roche. Here's the solution: we bought a nice duplex...things should stabilize now, well that was my plan! Year: 1998-1997&lt;/li&gt;&lt;li value="13"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Tonbridge Wells&lt;/span&gt;: my sister place&lt;br /&gt;Stayed at my sister place for a couple of months waiting for my Swiss work permit Year: 2000&lt;/li&gt;&lt;li value="14"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Lausanne&lt;/span&gt;: Seventh place with Kim&lt;br /&gt;Saint-Roch. First apartment we rented in Lausanne. Small and..expensive (ok this is Switzerland) Year: 2000&lt;/li&gt;&lt;li value="15"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Lausanne&lt;/span&gt;: Eighth place with Kim&lt;br /&gt;Cite-Devant. Our second apartment in Lausanne, much nicer and right in the old part of Lausanne. This is where my daughter was born. Year: 2001-02&lt;/li&gt;&lt;li value="16"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Vaudreuil-sur-le-lac&lt;/span&gt;: Nineth place with Kim&lt;br /&gt;26 des Caryers. The house we bought. Year: 2003-2007&lt;/li&gt;&lt;li value="17"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Laval&lt;/span&gt;: Tenth place with Kim&lt;br /&gt;Du Bouvreuil. The place we rent for 6 months before going back to Europe. Year: 2007&lt;/li&gt;&lt;li value="18"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Epalinges:&lt;/span&gt; Eleventh place with Kim&lt;br /&gt;De la Jaquiere. This is our current location! Year: 2008-?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7329958084055353116?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7329958084055353116/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7329958084055353116' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7329958084055353116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7329958084055353116'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/04/are-we-settled-now.html' title='Are we settled now?'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2002888382839493878</id><published>2008-04-01T17:55:00.007+02:00</published><updated>2010-06-11T23:45:56.626+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>SQL Analytic</title><content type='html'>&lt;span id="ipnj" lang="en-CA"&gt;&lt;br /&gt;In my current consulting activity, I’m involved in a project relying on Oracle 10g for most of its data warehouse infrastructure.  I thought it would be a nice opportunity for me to brush-up on my SQL skills.&lt;/span&gt;&lt;p id="zvah" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt; &lt;/p&gt; &lt;p id="ohnj" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="u_9n" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="r9vn" lang="en-CA"&gt;The OLAP SQL functions (also referred to as Analytic Functions) come in very handy when dealing with data reporting or analytical needs.   So this post will summarize the SQL analytic functions available in Oracle (some of them since 8i and other since 9i).  &lt;/span&gt; &lt;/p&gt; &lt;p id="e75v" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="s7:w" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="s-n." lang="en-CA"&gt;Although reports produced using these functions could very well be done using SQL or PL/SQL workarounds, these would be more clumsy and potentially less than optimal solution (depending on how well Oracle Optimize process these functions).&lt;/span&gt;&lt;/p&gt; &lt;p id="wt-d" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="tteq" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="vrp2" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p id="vrp2" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;These functions can be roughly classified into these categories:  &lt;/p&gt; &lt;p id="y:0t" class="western" style="text-indent: 0.49in; margin-bottom: 0in;" lang="fr-FR"&gt; &lt;span id="y72z" lang="en-CA"&gt;1. Ranking (&lt;i id="hh2r"&gt;show top 5 or bottom 5?&lt;/i&gt;), &lt;/span&gt; &lt;/p&gt; &lt;p id="j55w" class="western" style="text-indent: 0.49in; margin-bottom: 0in;" lang="fr-FR"&gt; &lt;span id="rcwv" lang="en-CA"&gt;2. Reporting Aggregation (&lt;i id="gqvz"&gt;compare values at different level of aggregation, e.g. region sales versus national, market share?&lt;/i&gt;), &lt;/span&gt; &lt;/p&gt; &lt;p id="ayhy" class="western" style="text-indent: 0.49in; margin-bottom: 0in;" lang="fr-FR"&gt; &lt;span id="cu4r" lang="en-CA"&gt;3. Window Aggregation (&lt;i id="q.qa"&gt;moving average, cumulative sum?&lt;/i&gt;)&lt;/span&gt;&lt;/p&gt; &lt;p id="qm23" class="western" style="text-indent: 0.49in; margin-bottom: 0in;" lang="fr-FR"&gt; &lt;span id="rufp" lang="en-CA"&gt;4. Row comparison (&lt;i id="hixz"&gt;studying change or variation over sequential row, LAG/LEAD, or get first and last value of sorted groups with FIRST/LAST?&lt;/i&gt;) &lt;/span&gt; &lt;/p&gt; &lt;p id="joih" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="lwrw" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="grol" lang="en-CA"&gt;It is important to note that these functions operate just before the ORDER BY clause of a query (which occurs last on the SQL process sequence order), or at the very last step when no such clause is present.  Also important, these functions are not allowed within the WHERE, FROM and HAVING clauses, and are really meaningful within the result set of a query (i.e. in the SELECT clause) and more rarely in the ORDER BY clause.  &lt;/span&gt; &lt;/p&gt; &lt;p id="bnd0" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="o8kj" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="cd7u" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="f0_p" lang="en-CA"&gt;The follow the following generic form:  &lt;/span&gt; &lt;/p&gt; &lt;p id="s77s" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="fr-FR"&gt;&lt;b id="sdv1"&gt;&lt;span id="s1bt" lang="en-CA"&gt;function(&amp;lt;&lt;i id="pzth"&gt;arguments&lt;/i&gt;&amp;gt;) OVER(&amp;lt;&lt;i id="k5uk"&gt;analytic clause&lt;/i&gt;&amp;gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p id="jn93" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="en-CA"&gt;where   &lt;/p&gt; &lt;p id="eowo" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="fr-FR"&gt;&lt;span id="zbaz" lang="en-CA"&gt;+function is the analytical function (e.g. &lt;/span&gt;&lt;span id="k1f6" lang="en-US"&gt;&lt;i id="gab3"&gt;AVG&lt;/i&gt;, &lt;i id="pozp"&gt;CORR&lt;/i&gt;, &lt;i id="djdg"&gt;COVAR_POP&lt;/i&gt;, &lt;i id="n5iv"&gt;COVAR_SAMP&lt;/i&gt;, &lt;i id="zz-d"&gt;COUNT&lt;/i&gt;, &lt;i id="lg6o"&gt;CUME_DIST&lt;/i&gt;, &lt;i id="nnvg"&gt;DENSE_RANK&lt;/i&gt;, &lt;i id="swag"&gt;FIRST&lt;/i&gt;, &lt;i id="rryc"&gt;FIRST_VALUE&lt;/i&gt;, &lt;i id="weqv"&gt;LAG&lt;/i&gt;, &lt;i id="p4rk"&gt;LAST&lt;/i&gt;, &lt;i id="w2qk"&gt;LAST_VALUE&lt;/i&gt;, &lt;i id="h9au"&gt;LEAD&lt;/i&gt;, &lt;i id="c2t:"&gt;MAX&lt;/i&gt;, &lt;i id="kurw"&gt;MIN&lt;/i&gt;, &lt;i id="afgq"&gt;NTILE&lt;/i&gt;, &lt;i id="f56y"&gt;PERCENT_RANK&lt;/i&gt;, &lt;i id="cth3"&gt;PERCENTILE_CONT&lt;/i&gt;, &lt;i id="v33l"&gt;PERCENTILE_DISC&lt;/i&gt;, &lt;i id="cbp4"&gt;RANK&lt;/i&gt;, &lt;i id="i00a"&gt;RATIO_TO_REPORT&lt;/i&gt;, &lt;i id="tql5"&gt;STDDEV&lt;/i&gt;, &lt;i id="n97i"&gt;STDDEV_POP&lt;/i&gt;, &lt;i id="eaa6"&gt;STDDEV_SAMP&lt;/i&gt;, &lt;i id="mb-s"&gt;SUM&lt;/i&gt;, &lt;i id="wncb"&gt;VAR_POP&lt;/i&gt;, &lt;i id="q9f2"&gt;VAR_SAMP&lt;/i&gt;, &lt;i id="qfvm"&gt;VARIANCE&lt;/i&gt;)&lt;/span&gt;&lt;/p&gt; &lt;p id="a35x" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="fr-FR"&gt;&lt;span id="cn:m" lang="en-CA"&gt;+&lt;i id="arsf"&gt;arguments&lt;/i&gt; is optional and could include more than one (&amp;lt;argument1, argument2, argument3&amp;gt;) &lt;/span&gt; &lt;/p&gt; &lt;p id="ho6i" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="fr-FR"&gt;&lt;span id="teih" lang="en-CA"&gt;+analytic clause can be of one the following: Query Partition clause (to break a result set into multiple partitions according to a criteria set expression); Order-By clause (for sorting data into each partition); and Windowing clause (to define a window of data).&lt;/span&gt;&lt;/p&gt;&lt;p id="ho6i" style="margin-top: 0.19in; margin-bottom: 0.19in;" lang="fr-FR"&gt;&lt;span id="teih" lang="en-CA"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p id="kkkw" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt;   &lt;p id="ab-d" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ekpk" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="hh1e" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;b id="xe73"&gt;&lt;span id="c_rm" lang="en-CA"&gt;&lt;span id="ks.y"  style="font-size:130%;"&gt;1. Ranking functions&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p id="bmn:" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="sj_g" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="i6qx" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="txaz" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="d6xh" lang="en-CA"&gt;These functions role is to provide ordering info to records based on some given attribute.   The basic three functions available (i.e. ROW_NUMBER, RANK and DENSE_RANK) only differ in the way they manage ordering ties.  Here’s a very simple sample to illustrate the differences:&lt;/span&gt;&lt;/p&gt;&lt;p id="txaz" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UbBVZqlR1kY/SAS0vBtzRwI/AAAAAAAAABc/cUaix2YVS34/s1600-h/fig1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_UbBVZqlR1kY/SAS0vBtzRwI/AAAAAAAAABc/cUaix2YVS34/s400/fig1.jpg" alt="" id="BLOGGER_PHOTO_ID_5189471390645044994" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="znji" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="h5sw" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="n5ew" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="w.si" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="u4lg" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="sc8y" lang="en-CA"&gt;RANK and DENSE_RANK rules allow for the &lt;b id="uyoq"&gt;top-n&lt;/b&gt; query, which is not possible with ROW_NUMBER as it does not treat tie.&lt;/span&gt;&lt;/p&gt;&lt;p id="u4lg" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS09htzRxI/AAAAAAAAABk/Db7NaslfX68/s1600-h/fig2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS09htzRxI/AAAAAAAAABk/Db7NaslfX68/s400/fig2.jpg" alt="" id="BLOGGER_PHOTO_ID_5189471639753148178" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="iz8c" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="l3wh" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="x:p2" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="m2m5" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="qhv4" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;Note that we can also control the orderings of nulls value by specifying the self-explanatory clauses NULLS LAST or NULLS FIRST (default) after the “ORDER BY attr” clause.  &lt;/p&gt; &lt;p id="n-hj" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="ajuz" lang="en-CA"&gt;Other functions can be classified within the Ranking category : PERCENT_RANK, CUME_DIST.  They operate very similarly as the previous ones (e.x. PERCENT_RANK() OVER(ORDER BY attr), but compute the cumulative fraction typical of histograms. &lt;/span&gt; &lt;/p&gt; &lt;p id="pb2g" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="bges" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="y_sj" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="y-6x" lang="en-CA"&gt;In conclusion, the ranking functions offer a better alternative than relying on the well-known hack (creating a subselect virtual table with ORDER BY used in combination with the ROWNUM function) that can handle tie correctly.&lt;/span&gt;&lt;/p&gt;&lt;p id="y_sj" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="y-6x" lang="en-CA"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/p&gt; &lt;p id="fj41" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt;   &lt;p id="tcbu" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ur4r" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ny88" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="kf7v" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;b id="j8ok"&gt;&lt;span id="g.j0" lang="en-CA"&gt;&lt;span id="kp4m"  style="font-size:130%;"&gt;2. Reporting Aggregation functions&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p id="bk4s" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="beif" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="vago" lang="en-CA"&gt;Most common aggregation SQL functions (like SUM, COUNT, AVG, MAX, MIN, VARIANCE, etc) can be used as analytic functions as well, eliminating the constraint of having the aggregate value to be at the same level as the row set (mandatory when using GROUP BY).   We can then have a global aggregated value presented with all data rows, as well as an aggregated value at a different partitioned window level all in a single query statement.  Here’s a self-explanatory example with AVG:&lt;/span&gt;&lt;/p&gt;&lt;p id="beif" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS2mhtzR1I/AAAAAAAAACE/At9JnTcOJ9A/s1600-h/fig4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS2mhtzR1I/AAAAAAAAACE/At9JnTcOJ9A/s400/fig4.jpg" alt="" id="BLOGGER_PHOTO_ID_5189473443639412562" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p id="nx4q" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="bx9i" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="k43t" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="rv6c" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="omks" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="fxsu" lang="en-CA"&gt;Also belonging in this category is the RATIO_TO_REPORT which gives ratio of a value versus an aggregated comparator.  Actually, this function is simply a shortcut version of : value / SUM(value) OVER() == RATIO_TO_REPORT (value) OVER().&lt;/span&gt;&lt;/p&gt; &lt;p id="ft4p" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="rzgs" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="r-gk" lang="en-CA"&gt;We also include in this category the function ROLLUP and CUBE which both provide aggregated values at higher level (the difference being that CUBE will provide aggregate values throughout all combination of attributes) as illustrated by this simple example:&lt;/span&gt;&lt;/p&gt;&lt;p id="rzgs" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS1xxtzR0I/AAAAAAAAAB8/Lu9tJf5za20/s1600-h/fig8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS1xxtzR0I/AAAAAAAAAB8/Lu9tJf5za20/s400/fig8.jpg" alt="" id="BLOGGER_PHOTO_ID_5189472537401313090" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="ielh" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ql:h" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="ecxy" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="zrwj" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt; Notice the use of GROUPING function (which return 1 when aggregation was done over a specified attribute and 0 otherwise) to help differentiate between NULL values in the table and artificial NULL generated for reporting purposes.  &lt;/p&gt; &lt;p id="ezm8" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="voi1" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="dmyw" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="w0vw" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="smrg" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="li15" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="bc4:" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="pgx1" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ph40" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;b id="cpak"&gt;&lt;span id="s9ma" lang="en-CA"&gt;Window Partitioning Operator &lt;/span&gt;&lt;/b&gt; &lt;/p&gt; &lt;p id="yody" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ash4" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;We often used in combination with the Ranking and Reporting aggregation functions, an operator known as the &lt;span id="sw2."&gt;&lt;i&gt;window partitioning&lt;/i&gt;&lt;/span&gt; operator.   This operator role is to provide a way to separate data into grouping and perform the functions on these groupings.  It relies on the use of PARTITION BY placed in the analytic clause.   Here’s a simple example illustration the window partitioning used with the RANK() function:&lt;/p&gt;&lt;p id="beif" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS1IhtzRyI/AAAAAAAAABs/OgBMVExQZOo/s1600-h/fig3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/SAS1IhtzRyI/AAAAAAAAABs/OgBMVExQZOo/s400/fig3.jpg" alt="" id="BLOGGER_PHOTO_ID_5189471828731709218" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p id="ash4" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;   &lt;/p&gt; &lt;p id="o1l0" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="dp-8" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="bbsd" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="u31l" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="lazi" lang="en-CA"&gt;We can see that the second RANK function now operates on a defined grouping (here defined by Grouping column) and not the overall set of rows.&lt;/span&gt;&lt;/p&gt;&lt;p id="u31l" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="lazi" lang="en-CA"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p id="vs8o" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ivx." class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="qkuf" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="iym2" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="sbm0" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;    &lt;/p&gt; &lt;p id="s_te" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt;   &lt;p id="liia" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="vh7d" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;b id="xqra"&gt;&lt;span id="xady" lang="en-CA"&gt;&lt;span id="khyp"  style="font-size:130%;"&gt;3. Window Aggregation functions&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p id="t0r9" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="udto" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="z82h" lang="en-CA"&gt;These functions permit the calculation of moving average on a set of ordered data records.   For example, to get a moving average using three data points window (one in the past, one current and one in future), we could use : &lt;/span&gt; &lt;/p&gt; &lt;p id="vsp_" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt; &lt;span id="b0vx" lang="en-CA"&gt;&lt;span id="rk1t"  style="font-size:85%;"&gt;AVG(value) OVER(ORDER BY t ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p id="yqba" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="wt1g" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;As found in the following sample:&lt;/p&gt;&lt;p id="wt1g" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS27xtzR2I/AAAAAAAAACM/hVpHA9dJDfg/s1600-h/fig5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS27xtzR2I/AAAAAAAAACM/hVpHA9dJDfg/s400/fig5.jpg" alt="" id="BLOGGER_PHOTO_ID_5189473808711632738" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="orfl" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ognx" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="wk1d" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="cbt4" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="c75w" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="ojs-" lang="en-CA"&gt;Note that for missing values on the first and last record, the preceding and following records are considered NULL, and thus not used in the AVG function (see the first moving AVG value: 150 which is calculated from only 100 and 200).&lt;/span&gt;&lt;/p&gt; &lt;p id="kuf4" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="m.hi" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="u_lp" lang="en-CA"&gt;This is a general rule applicable for treating NULL values when doing aggregation function, i.e. always ignored in the calculation.  &lt;/span&gt; &lt;/p&gt; &lt;p id="omq0" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ia7d" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="gn_n" lang="en-CA"&gt;The window aggregate function can also be used to calculate running or cumulative sum.  This is possible using the ROWS UNBOUNDED PRECEDING and CURRENT ROW clauses for the window boundary definition.  This gives:&lt;/span&gt;&lt;/p&gt;&lt;p id="ia7d" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UbBVZqlR1kY/SAS3HRtzR3I/AAAAAAAAACU/aisjIWY-niM/s1600-h/fig6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/SAS3HRtzR3I/AAAAAAAAACU/aisjIWY-niM/s400/fig6.jpg" alt="" id="BLOGGER_PHOTO_ID_5189474006280128370" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p id="hn7e" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="pyrn" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="dr4s" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="jja1" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="g32d" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="qz5c" lang="en-CA"&gt;As a final comment about this category of functions, let’s note that as in the case of ranking and report aggregation, it is possible to partition their calculation using the PARTITION BY clause.&lt;/span&gt;&lt;/p&gt;&lt;p id="g32d" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="qz5c" lang="en-CA"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p id="h6dm" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt;  &lt;p id="o2mz" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt; &lt;/p&gt; &lt;p id="o2mz" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt; &lt;/p&gt;&lt;p id="o2mz" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="vpxa" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;b id="iu:i"&gt;&lt;span id="y_12" lang="en-CA"&gt;&lt;span id="xlx_"  style="font-size:130%;"&gt;4. Row Comparison&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p id="xew_" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="x833" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;The row comparison functions are very useful for showing previous and subsequent records data on the same row as the current one within an ordered sequence of records.   These functions are LAG and LEAD.  These again are very simple to use as demonstrated in this small example:&lt;/p&gt;&lt;p id="x833" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS3UxtzR4I/AAAAAAAAACc/8VnZt1zcU_0/s1600-h/fig7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/SAS3UxtzR4I/AAAAAAAAACc/8VnZt1zcU_0/s400/fig7.jpg" alt="" id="BLOGGER_PHOTO_ID_5189474238208362370" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p id="dwhk" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="a9b_" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p id="yqjj" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="gsni" class="western" style="margin-bottom: 0in;" lang="fr-FR"&gt;&lt;span id="ept8" lang="en-CA"&gt;The more generic format allow us to define offset and default values for NULL, i.e.: LAG(attr, &lt;i id="c3bg"&gt;offset, default_null&lt;/i&gt;).&lt;/span&gt;&lt;/p&gt; &lt;p id="h6gi" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ps4q" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;Again, these functions can also be partitioned similarly as the previous ones.  Anyone who has hacked a solution for this type of report by relying on self-join query can certainly appreciate the clearness and compactness of these functions.&lt;/p&gt; &lt;p id="uijv" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="nd5e" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="xcbe" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;Martin  &lt;/p&gt; &lt;p id="asso" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="lcb." class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="ro:i" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="v7vg" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="wl4y" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="imgn" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="f83b" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="dwl:" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="nr3v" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="f89s" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt; &lt;p id="tt2q" class="western" style="margin-bottom: 0in;" lang="en-CA"&gt;  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2002888382839493878?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2002888382839493878/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2002888382839493878' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2002888382839493878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2002888382839493878'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/04/sql-analytic.html' title='SQL Analytic'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UbBVZqlR1kY/SAS0vBtzRwI/AAAAAAAAABc/cUaix2YVS34/s72-c/fig1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2878899376612682984</id><published>2008-03-22T19:31:00.004+01:00</published><updated>2008-04-27T12:13:32.907+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Functional or Technical Focus</title><content type='html'>In my professional life, I’m constantly confronted and hesitating between two career tracks:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Focus&lt;/span&gt; more on functional area and increase my business expertise and knowledge on specific industries or business domains;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Focus&lt;/span&gt; more on technical area and increase my IT technical knowledge on specific set of technologies, language, framework without any specific business focus.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Note that I've highlighted the verb focus here, since most IT work done in enterprise has a very important business aspect.  So unless you are working for a highly technical business sector, you can't get away in IT without any business knowledge and culture.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Recently I’ve leaned more toward the technical side, mainly because in my freelance practice, I had a lot of software development activity.    Surely the best way to learn and acquire real knowledge about technology is to actually deep into it by doing real development yourself (expressed clearly in this famous B. Franklin quote: &lt;a style="font-style: italic;" href="http://www.quotiki.com/quote.aspx?id=10324"&gt;"Tell me and I forget, teach me and I remember, involve me and I learn"&lt;/a&gt;).    However, this requires  a lot of learning and adaptation because of the fast pace of technology change and evolution. &lt;br /&gt;&lt;br /&gt;Since my arrival to Sword in Switzerland, it seems as if I may have to reconsider this focus as the bulk of software development work is done offshore and I'm more involved in functional specification. I’m not making a big deal out of this, since I’m currently involved in the telco industry which has a lot of technical focus and is also very challenging and constantly evolving!&lt;br /&gt;&lt;br /&gt;And besides, there will always be the open source world where a lot of possibility exist to practice and maintain my software development skills. But for the time being, I can't even consider that…, even my own personal projects had to be put on the backburner.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2878899376612682984?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2878899376612682984/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2878899376612682984' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2878899376612682984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2878899376612682984'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/03/business-or-technology-focus.html' title='Functional or Technical Focus'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-4170954926221416226</id><published>2008-02-14T22:45:00.002+01:00</published><updated>2008-07-07T22:13:58.023+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Vacation over!</title><content type='html'>In our hectic occidental life, we are not used to stop doing what we usually do, i.e. work (and shop by judging on the popularity of shopping mall)!   My break lasted for more than 4 months, in which I did enjoyed playing with the kids, reading more books than the last 4 year, biking around 1000km (although it was late in the year) and did various other things we usually don't have time doing during our short 2 days weekend break (BTW, yes I must confess I also did work during this break!).    I guess it looked fun, since my wife got jealous and decided to take a break with us as well!&lt;br /&gt;&lt;br /&gt;But it seems we are well programmed to live our active life which is not difficult to understand considering that we are brought up to it at very early stages (when I see those 4-5months old at aycare, sigh!).   So after a while I was quite motivated to go back to work, but first I needed to find one.&lt;br /&gt;&lt;br /&gt;Although I have my own consulting company, contracts don’t come so easily when you are a foreigner in a foreign country.   I’ve worked in Lausanne before, but mostly involved in job at the backend, i.e. the RDBMS.    My experience acquired within my consulting firm helped me broaden my knowledge in the J2EE environment and improve my ability as a consultant.  This is the sort of skills I want to exploit in my new job.&lt;br /&gt;&lt;br /&gt;So that means starting all over again and look for jobs the normal way, i.e. sending resumes, meeting new people and company and go through interview.   Not the most fun, however I decided to take it seriously.  The thing is, in my previous two jobs, I did not bother much about sending resumes and going through interviews.   Actually I targeted only a single company, went through the normal hiring process and got lucky enough to get the job I was interested in.&lt;br /&gt;&lt;br /&gt;So before leaving Canada, I actually checked the job market, identified a few potential firms/jobs and send them a link with my online resume.   I started with about 5 or 6 of them, from which there were middle man ("intermédiaire").  I though that this would be enough as a first step and I could find additional target once arrived here.  I must say the job market for my skills is well active in Switzerland, because this initial sending lead to an impressive list of follow-up:&lt;br /&gt;&lt;br /&gt;-6 interviews&lt;br /&gt;-1 psychometry test&lt;br /&gt;-1 technical test&lt;br /&gt;-3 phone interviews,  etc… and 4 job proposal!!&lt;br /&gt;&lt;br /&gt;p.s. Don’t underestimate the effect of the middle-man which can have a multiplicative effect.&lt;br /&gt;&lt;br /&gt;Comparing this with my first job interview at Lausanne, for which I felt I was being sold a job rather than the opposite, I must say that things are more professional and most firms take recruitment very seriously.  I've been through very high-level technical interview, challenging test, and very precise questions requiring thought-out answers and leaving not much place to subjectivity.&lt;br /&gt;&lt;br /&gt;This took me quite some time and energy but I’m happy to have dedicated this effort because at the end this pays off and offered me the luxury to choose a job that meets most of my criteria (in order of importance):&lt;br /&gt;1- type of work involved&lt;br /&gt;2- type of technology involved&lt;br /&gt;3- advantages like salary, vacation (of course!)&lt;br /&gt;4- location of work&lt;br /&gt;5- type of work environment&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I’m happy to announce that I have accepted a job as a consultant for &lt;a href="http://www.sword-group.com/fr/index.html"&gt;SWORD&lt;/a&gt;.  This job will give me the opportunity to see former colleagues (because the first contract is at Orange), work not too far from home (Geneva looked cool but the commuting would be a bit too long, at least until they finally open the new metro &lt;a href="http://www.t-l.ch/m2/"&gt;M2 line&lt;/a&gt; at Lausanne), and I'm given the opportunity to exploit two of my expertise BI and J2EE!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-4170954926221416226?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/4170954926221416226/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=4170954926221416226' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4170954926221416226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4170954926221416226'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/02/vacation-over.html' title='Vacation over!'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5491233480654223882</id><published>2008-01-12T14:25:00.000+01:00</published><updated>2008-01-29T09:46:19.657+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Arrivée en Suisse</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UbBVZqlR1kY/R4jBARa_4UI/AAAAAAAAAAM/y4Jx3lSSQCw/s1600-h/Lausanne_JA08+011.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/R4jBARa_4UI/AAAAAAAAAAM/y4Jx3lSSQCw/s320/Lausanne_JA08+011.jpg" alt="" id="BLOGGER_PHOTO_ID_5154581983946334530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;Les deux dernières semaines ont été très occupées pour toute ma petite famille… nous avons organisé notre départ de Montréal pour aller s’établir à &lt;a href="http://www.epalinges.ch/"&gt;Epalinges&lt;/a&gt; juste au nord de Lausanne à quelques 830 mètres d’altitude (donnée importante dans cette région du monde puisqu’elle détermine la présence de neige en hiver). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;En plus de toute l’organisation reliée au départ d’un pays, on a dû affronter les tâches reliées à l’arrivée dans un autre pays.&lt;span style=""&gt;  &lt;/span&gt;Et l’arrivée fût un peu perturbante puisque le container avec tout notre mobilier est en fait arrivé en retard et ma femme n’a pas encore officiellement son permis de travail (une simple formalité … mais qui nous empêche pour l’instant d’être des citoyens avec les mêmes droits que les autres…. dans nos sociétés “modernes” ceci veut dire consommer).&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;Donc nous avons campé dans notre nouvelle maison avec matelas d’appoint et le stricte minimum pour plus d’une semaine.&lt;span style=""&gt;  &lt;/span&gt;Ceci veut dire pas de tv, pas de radio, pas de téléphone (on a finalement pu acheté un téléphone avec carte prépayée seulement), et ….le plus difficile pour moi, par d’Internet!&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;C’est inquiétant comment je suis rendu dépendant à l’Internet, en fait j’ai pas eu de souci pour la tv, le téléphone et la radio mais impossible de vivre sans ce monstre.&lt;span style=""&gt;  &lt;/span&gt;Je m’aperçois que j’ai comme plusieurs pratiquement tout réorienté mes sphères d’activités vers le TCP/IP… scary !!! &lt;span style=""&gt;  &lt;/span&gt;Ex: communication avec la famille sur Skype, email, et blog, transfert et opération bancaire via site bancaire, projets de développement storés sur site en-ligne, mis au courant des nouvelles, guide d’achat et localisation des commerces, etc...&lt;span style=""&gt;   &lt;/span&gt;(Parenthèse professionnelle: pour quelqu’un qui fait de l’architecture de système, je devrais modifier cette dépendance des plus fragile afin que mes moyens de communication re-deviennent plus résiliente et robuste aux échecs « tolerance to failure »).&lt;span style=""&gt;   &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;En ce qui concerne notre villa, tout est vraiment bien et nous avons en bonus une belle vue sur les alpes à partir des fenêtres des combles (Bernoises/Valaisannes et de la Haute-Savoie française)-- voir photo en debut de texte.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;Martin&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="FR-CA"&gt;p.s. étant éloigné des miens restés au Québec, ce blog va prendre une tangente&lt;span style=""&gt;  &lt;/span&gt;plus orientée personnelle, avec par contre toujours des sujets techniques qui devraient êtres nourris par mes expériences dans le domaine de la consultation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5491233480654223882?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5491233480654223882/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5491233480654223882' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5491233480654223882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5491233480654223882'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/01/arrive-en-suisse.html' title='Arrivée en Suisse'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UbBVZqlR1kY/R4jBARa_4UI/AAAAAAAAAAM/y4Jx3lSSQCw/s72-c/Lausanne_JA08+011.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-961874537918258366</id><published>2007-12-10T23:05:00.001+01:00</published><updated>2010-02-08T18:10:03.933+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Quick solution for Spring &amp; GWT integration</title><content type='html'>As promised in my last post, I'll describe here how I proceeded to integrate my service bean layer managed by the Spring container with the RPC mechanism offered by GWT.&lt;br /&gt;&lt;br /&gt;GWT toolkit offers a custom servlet (&lt;span style="FONT-STYLE: italic"&gt;RemoteServiceServlet&lt;/span&gt;) from which we can inherit in order to let client code calls server-side code asynchronously. The solution I implemented was to create a base Controller which simply extends the Google RemoteServiceServlet. See code below.&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://martin.l.ouellet.googlepages.com/BaseControllerRPC.htm"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;place&gt;&lt;br /&gt;&lt;br /&gt;By subclassing this new base Controller, all my service-bean classes become now GWT-RPC compatible. This simple solution has some drawback such as adding a compile-time dependency between my service-bean and the Spring framework/GWT, however that is just fine for my specific use-case. More clever solution could also make use of reflection in order to leave your service leaving the service-layer classes free of such dependency, however this will come at a  price of more intense processing needs. For those interested see the &lt;a href="http://gwt-widget.sourceforge.net/?q=node/26"&gt;GWT Server Library &lt;/a&gt;initiative.&lt;br /&gt;&lt;br /&gt;However for me, this simple solution offered a very convenient caching mechanism to improve performance all client accessing these service-beans. Since I have &lt;/place&gt;some RPC service objects on the server layer for which result are cached to avoid the expensive database access hit. Because these result objects contain long object graphs (a few number of association at various depth level..), I also wished to avoid the GWT serialization process involved at every hit of these cached object graph. To achieve this, I wanted to store the GWT-serialized version&lt;br /&gt;of my result objects instead of the normal de-serialized graph. The cache is planned to refresh itself at regular interval...&lt;br /&gt;&lt;br /&gt;&lt;place&gt;All my service-bean achieve this by &lt;/place&gt;optionally intercepting the RPC request (i.e. override the method 'processCall') and use the GWT-serialized value when available in cache (see example below).&lt;br /&gt;&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://martin.l.ouellet.googlepages.com/ServiceBean.htm"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;place&gt;&lt;/place&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-961874537918258366?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/961874537918258366/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=961874537918258366' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/961874537918258366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/961874537918258366'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/12/quick-solution-for-spring-gwt.html' title='Quick solution for Spring &amp; GWT integration'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7971422875954846539</id><published>2007-11-23T04:15:00.000+01:00</published><updated>2008-04-19T09:59:44.838+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Web development</title><content type='html'>Up until my current project which uses &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;GWT&lt;/span&gt; to develop a rich web client, I always followed the best practices in terms of Web development.  I used to develop thin and dumb client view (e.g. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;jsp&lt;/span&gt;) which were fed and render based on data model objects and eventually sent back to the web client.&lt;br /&gt;&lt;br /&gt;All web requests are taken care by some dedicated controller (or action in Struts parlance) that are responsible in analyzing the user request, delegating the request to the service layer (the core of the application where business rules usually sits), obtaining the return domain object from the service and preparing the response by selecting the proper view to be rendered and sent  to client.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Ok&lt;/span&gt;, that is a very brief and incomplete description of the &lt;a href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MVC&lt;/span&gt;&lt;/a&gt; pattern adapted to the Web server and HTTP protocol.   Although this design pattern may be overkill for smaller applications, the advantages (e.g. makes web applications that are easier to maintain and are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;logicially&lt;/span&gt; divided into layers that are inherently decoupled and whose focus are on very different software concern) usually &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;outweight&lt;/span&gt; the additional learning curve and relative complexity.&lt;br /&gt;&lt;br /&gt;A great deal of coding must be done on the controller aspect of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;MVC&lt;/span&gt;.  And a lot of this includes details originating from handling the request/response of the stateless HTTP protocol...which has very little to do with the main application business logic.   If I'd have the choice, I'd rather spend this time developing and improving the business objects domain, the  related business rules logic and the database model, i.e. my preferred subjects and expertise!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With the advent of AJAX Web 2.0 fat client, a great deal of the weight that used to sit on the web server shoulder implementing this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;MVC&lt;/span&gt; pattern has now moved toward the client sitting on the other side of the communication channel.  Web clients now make asynchronous &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;RPC&lt;/span&gt; (remote procedure call) to the server without having to deal with the of HTTP concern details (for example the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;RPC&lt;/span&gt; mechanism of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;GWT&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;API&lt;/span&gt; isolates client code these).  They can also now handle their own session state by keeping and handling the data model locally.&lt;br /&gt;&lt;br /&gt;The server can focus less on the "C" of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;MVC&lt;/span&gt;, and more on the service core layer designed to enforce and apply all business rules logic.  The client code can choose to implement the traditional &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;MVC&lt;/span&gt; pattern, when its complexity justifies it.&lt;br /&gt;&lt;br /&gt;In my current project, all web controller codes disappeared and my web application does not move anymore from one page to another (following subsequent user request), but rather change its unique page appearance (by replacing/changing section of page through DOM manipulation) followed by user action and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;RPC&lt;/span&gt; response from the server.&lt;br /&gt;&lt;br /&gt;My next post will present the way I've implemented my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;RPC&lt;/span&gt; client code to talk directly to my service layer using the Spring Framework.    Now, I need to get back to work!&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7971422875954846539?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7971422875954846539/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7971422875954846539' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7971422875954846539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7971422875954846539'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/11/web-development.html' title='Web development'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2093940845157698630</id><published>2007-10-14T22:42:00.002+02:00</published><updated>2010-02-08T18:10:03.934+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>my Web2.0 experience with GWT</title><content type='html'>My last month as a freelancer allowed me to have made quite important progress on my current project. I find it quite motivating since I'm the main analyst/designer/developer/tester and even business analyst (actually, I'm all alone on that one, so no one to blame or complain about;-). Technology wise, it's a perfect situation since I can freely chose all components based on design merit and no decision is based on political constraint of some sort.&lt;br /&gt;&lt;br /&gt;Currently the technologies involved are:&lt;br /&gt;&lt;br /&gt;On the server:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.springframework.org/"&gt;Spring framework&lt;/a&gt;, &lt;a href="http://ibatis.apache.org/"&gt;iBatis&lt;/a&gt;, &lt;a href="http://ehcache.sourceforge.net/"&gt;ehcache&lt;/a&gt;, &lt;a href="http://sourceforge.net/projects/quartz/"&gt;Quartz, &lt;/a&gt;&lt;a href="http://velocity.apache.org/"&gt;Velocity&lt;/a&gt;, and eventually the servlet container (not yet decided.. but the development is obviously done using Tomcat).&lt;br /&gt;&lt;br /&gt;On the client:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt; and a few velocity pages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The novelty for me is the use of GWT (Google Web Toolkit). I've already mentioned my frustration in developing client side code especially using http-based web client. The time spent on the page design messing around with jsp tag, html and css styling seems to me as a big wasted time and effort. That's why in my professional life I'm usually involved muck closer to the back end where my expertise is more profitable for the client.&lt;br /&gt;&lt;br /&gt;Now with the advent of GWT, client side component is no longer restricted to thin and dumb page presenting the view/model already prepared on the server. A lot can happen on the client with the capability to hold on great deal of state information and business logic. And this magic is done without adopting Javascript and sacrificing the strongly-typed property of Java.... the toolkit does the Java--&gt;Javascript conversion for you!!!&lt;br /&gt;&lt;br /&gt;So far I'm quite pleased with the toolkit as it practically eliminate the need to write any html markup... however all styling still depends on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;css&lt;/span&gt;. I'm probably half-way there for the client part and only have a single html page with just a few lines of markup html code.&lt;br /&gt;&lt;br /&gt;The server integration is done through &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RPC&lt;/span&gt; call (done asynchronously à la AJAX style) with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;servlet&lt;/span&gt; on the server end. A great deal of design effort is done by keeping the server scalability as a top priority. Because the application will target the web public at large, most design decisions are affected by this, e.g.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keeping minimal state on the server. As a matter of fact, with the help of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;GWT&lt;/span&gt; most state is kept locally while the server only keeping a session token (cache in memory) to identify valid client &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;connection&lt;/span&gt;. This will avoid issues involved when relying on HttpSession object (to hold client state information within servlet container) such as server affinity and more importantly larger memory footprint per connecting session.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Data is cached both on the client side and on the server side. Because some data is not mission critical, the client keeps some data content (limited size) and the server keeps all data content in cache eliminating the need to hitting the database back-end during most client request.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The cache server data content is refreshed at fixed interval of time which is configurable depending on the data volume and the database query extraction time&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The cache server data content is kept in a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;de&lt;/span&gt;-serialized &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;GWT&lt;/span&gt; form, avoiding the need to serialize the payload of server response at each client request.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I'm confident to be able to put a beta version of the application before the end of year... stay tuned!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2093940845157698630?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2093940845157698630/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2093940845157698630' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2093940845157698630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2093940845157698630'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/10/my-web20-experience-with-gwt.html' title='my Web2.0 experience with GWT'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8636339996852089260</id><published>2007-10-12T21:43:00.008+02:00</published><updated>2010-08-09T18:09:41.344+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>La gang de Chicout!</title><content type='html'>&lt;div style="text-align: left;"&gt;Bon ce qui semblait anodin à l'époque relève maintenant de l'exploit: avec un petit groupe d'amis datant de l'époque du Séminaire de Chicoutimi, nous avons réussi à rester &lt;span style="font-style: italic;"&gt;chums&lt;/span&gt; et garder contact à travers tout ce temps passé (ouch, près de 30 ans ou plus pour certains!!! ).&lt;/div&gt;&lt;br /&gt;Les bases de cette amitié sont assez simples:  on ne se doit rien et aucun reproche pour les manques de nouvelles ou absences plus ou moins prolongées... et le tout reposant sur un passé commun durant une période de vie assez agitée.  Cette période demeure encore la source principale de nos discussions et anecdotes interminables.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ca sera mon post le plus court car malheureusement on ne peut en dire beaucoup sans risquer d'entâcher et compromettre des vies d'adultes responsables  ... quoique le risque d'en voir un tombé sur ce site reste faible!&lt;br /&gt;&lt;br /&gt;Donc pour conclure voici deux clichés pris avec pas mal d'années, de kilos et d'enfants en plus:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Party d'une date quelconque mais assez lointaine :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UbBVZqlR1kY/TGAmQez9f2I/AAAAAAAABdM/PUhf8PO-HJw/s1600/amis-JR.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:left;cursor:pointer; cursor:hand;width: 320px; height: 224px;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/TGAmQez9f2I/AAAAAAAABdM/PUhf8PO-HJw/s320/amis-JR.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5503440809237512034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Dernier party en date :&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="text-align: center;width: auto; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.ch/lh/photo/mb-5ej-uXvV1kQQL7rMl1g?authkey=Gv1sRgCL7igpHd0vqf_QE&amp;amp;feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_UbBVZqlR1kY/S5q8i2-H45I/AAAAAAAABSs/SMG2OO5EfgA/s400/DSC_0053.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.ch/martin.l.ouellet/Photos_amis?authkey=Gv1sRgCL7igpHd0vqf_QE&amp;amp;feat=embedwebsite"&gt;photos_amis&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Martin&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8636339996852089260?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8636339996852089260/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8636339996852089260' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8636339996852089260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8636339996852089260'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/10/la-gang-de-chicout.html' title='La gang de Chicout!'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UbBVZqlR1kY/TGAmQez9f2I/AAAAAAAABdM/PUhf8PO-HJw/s72-c/amis-JR.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3317478247222253552</id><published>2007-09-27T11:53:00.005+02:00</published><updated>2010-12-17T14:59:28.651+01:00</updated><title type='text'>Scoring function</title><content type='html'>&lt;p&gt;&lt;/p&gt;This part discusses scoring issues.  Please refer to &lt;a href="http://martin-ouellet.blogspot.com/2006/09/statistical-general-concept.html"&gt;this&lt;/a&gt; for info.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Definition:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;instances = data objects observed and analysed (sometimes referred to as objects, data points...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;variables= characteristics measured (for continuous) or observed (for categorical) for each instance&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Notation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;i&gt;n&lt;/i&gt; data objects (sample size)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;X generic input variables. When it is a vector, its component variable &lt;i&gt;j&lt;/i&gt; is expressed with subscript: X&lt;sub&gt;j&lt;/sub&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x denotes some observed instance, and when we have &lt;i&gt;p&lt;/i&gt;-variables, we denote x&lt;sub&gt;1&lt;/sub&gt; .. x&lt;sub&gt;p&lt;/sub&gt; as the the real-valued for the 1.. &lt;i&gt;p&lt;/i&gt; variables measured on the particular object or instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x&lt;sub&gt;k&lt;/sub&gt;(&lt;i&gt;i&lt;/i&gt;) correspond to the measure for variable X&lt;sub&gt;k&lt;/sub&gt; of the &lt;i&gt;i&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-th data objects, where i has 1 .. N.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;x&lt;/b&gt; (in bold) correspond to the vector of &lt;/span&gt;&lt;i&gt;n&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt; observation of a single variable x.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;X&lt;/b&gt; (capital in bold) correspond to the matrix N x p, containing N input &lt;/span&gt;&lt;i&gt;p&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-vector x&lt;sub&gt;p&lt;/sub&gt;(1..N).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/Doc?docid=0AS6yolBnyCUaZGM3ZGc3Zm5fMTEwY3pzdGRwZm0&amp;hl=en" frameborder="1" width="100%" height="3000"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3317478247222253552?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3317478247222253552/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3317478247222253552' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3317478247222253552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3317478247222253552'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/09/scoring-function.html' title='Scoring function'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-1961862177989792875</id><published>2007-09-27T09:46:00.002+02:00</published><updated>2010-12-17T14:59:28.652+01:00</updated><title type='text'>Classification model</title><content type='html'>&lt;p&gt;&lt;/p&gt;This part is on classification model.  Please refer to this &lt;a href="http://martin-ouellet.blogspot.com/2006/09/statistical-general-concept.html"&gt;post&lt;/a&gt; for more info.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Definition:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;instances = data objects observed and analysed (sometimes referred to as objects, data points...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;variables= characteristics measured (for continuous) or observed (for categorical) for each instance&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Notation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;i&gt;n&lt;/i&gt; data objects (sample size)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;X generic input variables. When it is a vector, its component variable &lt;i&gt;j&lt;/i&gt; is expressed with subscript: X&lt;sub&gt;j&lt;/sub&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x denotes some observed instance, and when we have &lt;i&gt;p&lt;/i&gt;-variables, we denote x&lt;sub&gt;1&lt;/sub&gt; .. x&lt;sub&gt;p&lt;/sub&gt; as the the real-valued for the 1.. &lt;i&gt;p&lt;/i&gt; variables measured on the particular object or instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x&lt;sub&gt;k&lt;/sub&gt;(&lt;i&gt;i&lt;/i&gt;) correspond to the measure for variable X&lt;sub&gt;k&lt;/sub&gt; of the &lt;i&gt;i&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-th data objects, where i has 1 .. N.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: norma&lt;br /&gt;l"&gt;&lt;b&gt;x&lt;/b&gt; (in bold) correspond to the vector of &lt;/span&gt;&lt;i&gt;n&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt; observation of a single variable x.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;X&lt;/b&gt; (capital in bold) correspond to the matrix N x p, containing N input &lt;/span&gt;&lt;i&gt;p&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-vector x&lt;sub&gt;p&lt;/sub&gt;(1..N).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/Doc?docid=0AS6yolBnyCUaZGM3ZGc3Zm5fMTAzZG52a2t4YzI&amp;hl=en" frameborder="0" width="100%" height="1700"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-1961862177989792875?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/1961862177989792875/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=1961862177989792875' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/1961862177989792875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/1961862177989792875'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2008/09/classification-model.html' title='Classification model'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7324618696145434644</id><published>2007-08-16T05:41:00.001+02:00</published><updated>2008-02-15T15:13:37.253+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Laurie and Mathias</title><content type='html'>I never spent too much time writing about my family here... naturally I tend to value more the time that I can spend with them instead of the time that I could write about them!&lt;br /&gt;&lt;br /&gt;I just wanted to post a few pictures looking at my kids growing up. The thing that come into my mind looking at these pictures is: "Warning: Kids are less calm than they appear in photograph!"&lt;br /&gt;&lt;br /&gt;But nevertheless we've got really two great kids, Laurie my daughter is now 5 and Mathias 3 years old and I'm confident that they'll continue making me a very proud dad!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UbBVZqlR1kY/R7WdN44QGlI/AAAAAAAAAA0/LnF-sLciycQ/s1600-h/scan0396.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_UbBVZqlR1kY/R7WdN44QGlI/AAAAAAAAAA0/LnF-sLciycQ/s320/scan0396.jpg" alt="" id="BLOGGER_PHOTO_ID_5167209009409694290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UbBVZqlR1kY/R7WdPI4QGmI/AAAAAAAAAA8/XDehh1tzHBY/s1600-h/scan0399.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_UbBVZqlR1kY/R7WdPI4QGmI/AAAAAAAAAA8/XDehh1tzHBY/s320/scan0399.jpg" alt="" id="BLOGGER_PHOTO_ID_5167209030884530786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UbBVZqlR1kY/R7WdPY4QGnI/AAAAAAAAABE/a6FrUTsXnv0/s1600-h/scan0406.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_UbBVZqlR1kY/R7WdPY4QGnI/AAAAAAAAABE/a6FrUTsXnv0/s320/scan0406.jpg" alt="" id="BLOGGER_PHOTO_ID_5167209035179498098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;place&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;br /&gt;&lt;/place&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7324618696145434644?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7324618696145434644/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7324618696145434644' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7324618696145434644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7324618696145434644'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/08/laurie-and-mathias.html' title='Laurie and Mathias'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UbBVZqlR1kY/R7WdN44QGlI/AAAAAAAAAA0/LnF-sLciycQ/s72-c/scan0396.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7988754350492636491</id><published>2007-08-06T03:23:00.000+02:00</published><updated>2008-01-29T09:45:35.219+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>That's it I'm changing career path!</title><content type='html'>I've eluded in my previous blog all my frustration concerning closed source software... and today I'm very happy that I finally decided to move on to a different career path: I'm quitting my job at IMS Health where for the last 4 years I've held various positions as BI developer, team leader, etc.&lt;br /&gt;&lt;br /&gt;My goal will be to focus on doing more consultating type of work that will rely primarily on open source libraries/framework to deliver high-quality application.    During the last few years, I've been lucky enough to get some external contract which made use of these libraries.  And I really appreciated the possibilities that OSS can offer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;in terms of quality of source code which helps to increase the quality of the application to build as well as your productivity&lt;br /&gt;&lt;/li&gt;&lt;li&gt;but also in terms of the education opportunities it gives to increase your expertise and knowledge as a software developer &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This career move almost coincides with our plan to return back to Europe... my wife and I have finally decided to go back in Switzerland by the end of this year or early next year.  More on this on a future post...&lt;br /&gt;&lt;br /&gt;What will I do for the these 4 months left to 2007?  Well, I'm very anxious to continue a personal project that I started a few months ago like a fun 'passe-temps', but now is starting to occupy too much time in my mind and I need to get rid of it ... meaning putting it online asap.&lt;br /&gt;&lt;br /&gt;Enough said for now, I need to get back to work.&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7988754350492636491?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7988754350492636491/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7988754350492636491' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7988754350492636491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7988754350492636491'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/08/thats-it-im-changing-career-path.html' title='That&apos;s it I&apos;m changing career path!'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7758168288678433495</id><published>2007-05-17T19:15:00.000+02:00</published><updated>2010-06-11T23:45:34.231+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>OSS, the future of software development?</title><content type='html'>Came across this interview the other day from Lars Trieloff... "&lt;a href="http://sourcekibitzer.org/InterviewPage4.ext"&gt;&lt;span style="font-style: italic;"&gt;I believe that in ten years OS will be the predominant business model in the software industry&lt;/span&gt;&lt;/a&gt;". I usually tend to be quite wary and skeptical about these sort of long-term prognostics, especially in such a dynamic and rapid growth industry as the IT industry.  However, Open Source to me is really the most effective way to produce complex piece of software. Without re-iterating the most cited advantages of this de-centralized approach, I'd just like to comment on a more personal experience.&lt;br /&gt;&lt;br /&gt;At the office we are stuck with proprietary closed source software (no for long though.. more on this in a future post). As expected with software we hit a few limitations (read &lt;span style="font-style: italic;"&gt;bugs&lt;/span&gt;) that were quite difficult to find a workaround or a graceful solution... all we were left with was a potential resolution in some future release of the framework (Reporting Services from Microsoft for this specific example)!&lt;br /&gt;&lt;br /&gt;I can't help but compare this situation with a recent limitation I came across with Spring Framework a few weeks ago.&lt;br /&gt;&lt;br /&gt;When trying to use EhCache for a project, I actually want to use the caching not only for what it is ... well i.e. caching, but also as a way to gather usage stats on the access of some of my service object methods.  So I've defined a EhCacheFactoryBean while configuring it with the standard ehcache property file and decorated with a &lt;a href="http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s4.10.2"&gt;SelfPopulatedCache&lt;/a&gt; by injecting an implementation of the CacheEntryFactory. However, reviewing the code I realized that there was an issue, so in less than 5 minutes I raised a &lt;a href="http://opensource.atlassian.com/projects/spring/browse/SPR-3490"&gt;jira log&lt;/a&gt; and about 2 hours later my issue was assigned to one of the author of Spring, and corrected 2 days later!!&lt;br /&gt;&lt;br /&gt;Well the fact that it took such as small amount of time to resovle the issue is very impressive and honor the commiters at Spring, although this could have very well happened in any other companies... but do you know a lot software vendors with such a quick reactive turnaround on bugs correction?  However to me, the real advantage lies in the possibilities of having all source code at your disposal, it becomes trivial to simply write a corrected version and move on without having to wait for some future release.  I can't help but compare this with similar situations we're faced with when issues are found at work with some Microsoft components.... well just too bad!&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7758168288678433495?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7758168288678433495/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7758168288678433495' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7758168288678433495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7758168288678433495'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/05/oss-future-of-software-development.html' title='OSS, the future of software development?'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8677860426002463388</id><published>2007-04-09T23:45:00.000+02:00</published><updated>2008-01-29T09:45:35.219+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Consultation informatique</title><content type='html'>Dans ma vie professionnelle j'ai la chance de combiner deux types de travail assez distinct.  Le premier est relativement commun car il implique un emploi comme "Lead technique" d'une équipe de développeur d'application de type BI.&lt;br /&gt;&lt;br /&gt;Par contre, ma deuxième vie professionnelle est plus stimulante et comporte son lot de défis.  Dans cette seconde vie, je fais de la consultation informatique (freelance) dans mon domaine d'expertise: i.e. tout ce qui gravite autour des tâches d'analyse, de design et développement d'application développée avec Java et exigeant des interactions avec des systèmes de base de données.&lt;br /&gt;&lt;br /&gt;Mon cheminement professionnel m'a permis de maîtriser ces deux spécialités comportants certaines incompatibilités, soit l'implantation de systèmes de base de donnée basés sur un design de type relationnelles des données, et l'implantation d'applications basées sur un design de type Orienté Objet (dans mon cas c'est Java).  Il faut noter que certaines incompatibilités sont quelques fois une conséquence de la mauvaise fois des gens de chacun des deux clans, mais ceci est une autre histoire....&lt;br /&gt;&lt;br /&gt;La connaissance de ces deux spécialités s'avère d'autant plus utile avec l'explosion d'application sur l'internet dont les caractéristiques justifient l'utilisation de ces deux spécialités.&lt;br /&gt;&lt;br /&gt;Tout cela pour dire, que je suis bientôt mûr pour un changement de carrière ...  mon emploi chez IMS étant moins stimulant car nous servons une industrie beaucoup plus conservatrice avec de  long cycle de vie des applications logiciels (je travail en ce momnent sur une application vieille de plus de 30a ns fonctionnant sur le Mainframe).   Il faut dire que j'arrivais du monde un peu fou de la télécommunication qui est assez intense et garnie en terme d'innovation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8677860426002463388?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8677860426002463388/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8677860426002463388' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8677860426002463388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8677860426002463388'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/04/consultation-informatique.html' title='Consultation informatique'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-117079815372964427</id><published>2007-02-06T22:40:00.000+01:00</published><updated>2010-02-08T18:09:24.637+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>JDBC convenient programming with Spring</title><content type='html'>There is no need to re-iterate what has already been said and spread about the usefulness of the &lt;a href="http://www.springframework.org"&gt;Spring framework&lt;/a&gt;... but it seems that every time I make use of a feature I come to the same conclusion: it simply makes you more satisfactory of your code, that is how I see it anyway !&lt;br /&gt;&lt;br /&gt;Most of my database-related code usually made use of Hibernate because the sizing and the extend of the domain model simply justified leveraging the complexity of this framework.&lt;br /&gt;&lt;br /&gt;However, in my current project I decided to give a shot at Spring jdbc support packages mostly because my domain model is simple enough (less than 10 entities with basic relationship) and because... well exploring more of the Spring library!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Although the library only really offers some thin wrapper around jdbc api (as opposed to a complete ORM solution), it does it in a way that you can create your data access code in a more object oriented fashion while keeping a close access to the underlying jdbc low-level api.&lt;br /&gt;&lt;br /&gt;To illustrate this, I've created some helper classes (one per each business object entity) wrapping Spring jdbc data access object (e.g. SQLUpdate, JdbcTemplate, MappingSqlQuery) and offering a convenient way to centralize all sql-related string (sql command, table name and field, etc..).&lt;br /&gt;&lt;br /&gt;On top of these classes, you can actually implement all generic sql access code (e.g. delete by id) and generic sql commands. Here's how look like the superclass, refer here as BaseSqlHelper:&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://martin.l.ouellet.googlepages.com/BaseSQLHelper.html"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;And Here's one example of how one could implement a particular subclass (in this specific example the subclass handles sql for the User business entity object):&lt;br /&gt;&lt;iframe class="source_code" style="WIDTH: 100%; HEIGHT: 20em" src="http://martin.l.ouellet.googlepages.com/UserSQLHelper.html"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What does this offer you:&lt;br /&gt;1- get all your sql strings contralized in one convenient place&lt;br /&gt;2- benefit from code re-use by moving-up all your common fields (e.g. id, createDate,..) and common sql operations (e.g. delete from ... where id=, select ... from ... where id=) for all business entities into the superclass&lt;br /&gt;3- exploit the MapRow capability to treat query response as real business entities and not merely as data field.&lt;br /&gt;4- Ease for accomodating new fields and remove existing ones&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-117079815372964427?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/117079815372964427/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=117079815372964427' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/117079815372964427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/117079815372964427'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/02/jdbc-convenient-programming-with.html' title='JDBC convenient programming with Spring'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2171347102618967009</id><published>2007-01-27T11:42:00.006+01:00</published><updated>2010-12-17T14:59:28.652+01:00</updated><title type='text'>Regression model</title><content type='html'>This is yet another post on theoretical background and explanation related to data mining... &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;This part is on regression model.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Definition:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;instances = data objects observed and analysed (sometimes referred to as objects, data points...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;variables= characteristics measured (for continuous) or observed (for categorical) for each instance&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Notation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;i&gt;n&lt;/i&gt; data objects (sample size)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;X generic input variables. When it is a vector, its component variable &lt;i&gt;j&lt;/i&gt; is expressed with subscript: X&lt;sub&gt;j&lt;/sub&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x denotes some observed instance, and when we have &lt;i&gt;p&lt;/i&gt;-variables, we denote x&lt;sub&gt;1&lt;/sub&gt; .. x&lt;sub&gt;p&lt;/sub&gt; as the the real-valued for the 1.. &lt;i&gt;p&lt;/i&gt; variables measured on the particular object or instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x&lt;sub&gt;k&lt;/sub&gt;(&lt;i&gt;i&lt;/i&gt;) correspond to the measure for variable X&lt;sub&gt;k&lt;/sub&gt; of the &lt;i&gt;i&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-th data objects, where i has 1 .. N.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;x&lt;/b&gt; (in bold) correspond to the vector of &lt;/span&gt;&lt;i&gt;n&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt; observation of a single variable x.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;X&lt;/b&gt; (capital in bold) correspond to the matrix N x p, containing N input &lt;/span&gt;&lt;i&gt;p&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-vector x&lt;sub&gt;p&lt;/sub&gt;(1..N).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/Doc?docid=0AS6yolBnyCUaZGM3ZGc3Zm5fOTRjN3F2bXBmYg&amp;hl=en" frameborder="1" width="100%" height="3400"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2171347102618967009?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2171347102618967009/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2171347102618967009' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2171347102618967009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2171347102618967009'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/01/this-is-yet-another-post-on-theoretical.html' title='Regression model'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-116792277990727099</id><published>2007-01-04T15:44:00.000+01:00</published><updated>2010-02-08T18:10:17.441+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Utilisation d'Hibernate</title><content type='html'>Pour faire suite au post précédent, j'ai observé que certaines applications sont construites sans tenir compte des limites et contraintes d'Hibernate... ils utilisent cette librairie comme le "silver bullet" qui va se charger de tout ce qui touche la question de la persistance et ce sans effort ou configuration spéciale!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Par exemple concernant l'utilisation du Paramètre Lazy dans le mapping, plusieurs applications sont configurées avec &lt;em&gt;lazy=false. C&lt;/em&gt;eci facilite évidemment la question du fetching des graphes d'objet, mais ceci à un prix et ce prix s'appelle &lt;strong&gt;performance&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Recommandation:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Pratiquement toutes les entités et les associations de compositions devraient être configurées de façon Lazy (i.e. lazy=”true”). Il ne faut pas confondre le paramètre lazy et le paramètre fetch, le premier indique seulement à Hibernate s’il pourra créer un proxy (qui exigera une initialisation en session ouverte) pour la classe en question ou la collection, tandis que dernier indique comment les relations doivent être fetchées (&lt;em&gt;eager&lt;/em&gt; ou non).&lt;br /&gt;&lt;br /&gt;En utilisant lazy=”false” ceci a comme « side-effect » de pre-fetché toutes les dépendances de l’entité et ultimement la base de donnée complète sera chargée en objet ! Cela peut être pratique puisqu’on n'a pas à se poser la question de devoir initialiser ou pas les dépendances, mais ça devient vite catastrophique lorsque le volume de donnée est important.&lt;br /&gt;&lt;br /&gt;La décision de fetcher ou ne pas fetcher (&lt;em&gt;eager fetch&lt;/em&gt;) est une stratégie qui doit être défini en &lt;em&gt;runtime&lt;/em&gt; puisque différente utilisation exige différent accès aux données. La couche DAO peut être utilisée en ce sens en fournissant des options de &lt;em&gt;loader&lt;/em&gt; ou ne pas &lt;em&gt;loader&lt;/em&gt; les dépendances (avec Hibernate.initialize()) avant de fermer la session Hibernate. Configurer avec lazy=”false” élimine tout simplement cette flexibilité.&lt;br /&gt;&lt;br /&gt;Si pour une raison quelconque, une dépendance d’une entité doit toujours être pre-fetché, alors utiliser l’option &lt;em&gt;fetch=join&lt;/em&gt; dans le mapping mais en gardant le lazy à false pour cette entité dépendante.&lt;br /&gt;&lt;br /&gt;L’auteur d’Hibernate a lui-même reconnu ce fait et recommande depuis Hibernate 3.0 que toutes les mapping des class et des collections soient lazy= ‘true’ (ceci est maintenant le défaut utilisé).&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-116792277990727099?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/116792277990727099/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=116792277990727099' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116792277990727099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116792277990727099'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2007/01/utilisation-dhibernate.html' title='Utilisation d&apos;Hibernate'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-4198366501521731671</id><published>2006-11-27T09:30:00.005+01:00</published><updated>2010-12-17T14:59:28.653+01:00</updated><title type='text'>Model &amp; Pattern</title><content type='html'>This is yet another post on theoretical background and explanation related to data mining... &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;This part is on descriptive modelling and pattern structure recognition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Definition:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;instances = data objects observed and analysed (sometimes referred to as objects, data points...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;variables= characteristics measured (for continuous) or observed (for categorical) for each instance&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;Notation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;i&gt;n&lt;/i&gt; data objects (sample size)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;X generic input variables. When it is a vector, its component variable &lt;i&gt;j&lt;/i&gt; is expressed with subscript: X&lt;sub&gt;j&lt;/sub&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x denotes some observed instance, and when we have &lt;i&gt;p&lt;/i&gt;-variables, we denote x&lt;sub&gt;1&lt;/sub&gt; .. x&lt;sub&gt;p&lt;/sub&gt; as the the real-valued for the 1.. &lt;i&gt;p&lt;/i&gt; variables measured on the particular object or instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;x&lt;sub&gt;k&lt;/sub&gt;(&lt;i&gt;i&lt;/i&gt;) correspond to the measure for variable X&lt;sub&gt;k&lt;/sub&gt; of the &lt;i&gt;i&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-th data objects, where i has 1 .. N.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;x&lt;/b&gt; (in bold) correspond to the vector of &lt;/span&gt;&lt;i&gt;n&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt; observation of a single variable x.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="FONT-STYLE: normal"&gt;&lt;b&gt;X&lt;/b&gt; (capital in bold) correspond to the matrix N x p, containing N input &lt;/span&gt;&lt;i&gt;p&lt;/i&gt;&lt;span style="FONT-STYLE: normal"&gt;-vector x&lt;sub&gt;p&lt;/sub&gt;(1..N).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="MARGIN-BOTTOM: 0in"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/Doc?docid=0AS6yolBnyCUaZGM3ZGc3Zm5fODdjcTJmeHg2cg&amp;hl=en" frameborder="1" width="100%" height="4000"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-4198366501521731671?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/4198366501521731671/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=4198366501521731671' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4198366501521731671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/4198366501521731671'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/11/model-pattern.html' title='Model &amp; Pattern'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-116319701645843843</id><published>2006-11-10T23:15:00.000+01:00</published><updated>2010-06-12T23:15:58.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Performance des applications aves des outils ORM</title><content type='html'>&lt;p&gt;Evidemment certains aspects sont plus importants que d'autres lorsqu'il est temps de considérer les performances des application se connectant avec les bases de données de type relationnel. Si on utilise de surcroît des outils de mapping ORM, alors la mauvaise utilisation de l'outil peut venir brouiller encore plus les cartes.&lt;br /&gt;&lt;br /&gt;De façon général, voici par ordre d’importance les éléments qui doivent être considérés lors d’optimisation des applications interagissant avec une base de donné avec un outil ORM:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Le model ER (Entité Relationel) da la base de données Peu importe comment l’application et les modules ORM sont optimisés si le modèle ER de la base de donnée est pourri il sera difficile de produire des applications performantes. Normalement en utilisant des outils ORM, ce problème ne se pose pas puisque la création du modèle suit plus ou moins le modèle UML. Ce problème se pose normalement lorsqu’on dépend du base de données « legacy » qui ne peut pas être modifié.&lt;/li&gt;&lt;p&gt;&lt;/p&gt;&lt;li&gt;La configuration du ORM (« fetching strategies », « caching », « report queries »).  Cet aspect est critique car une mauvaise configuration résultera forcément en de très mauvaises performances peu importe les autres aspects et avec une dégradation linéaire en fonction du volume de données.&lt;/li&gt;&lt;p&gt;&lt;/p&gt;&lt;li&gt;Le model physique de la base de donnée (tables, contraintes, indexes) Présumant que l’aspect précédent est respecté, ceci va garantir de bonnes performances avec l’accroissement du volume de données.&lt;/li&gt;&lt;p&gt;&lt;/p&gt;&lt;li&gt;Le tuning général de la base de données (vendor-specific) Cet aspect est intimement lié au type de base de donnée, chaque vendeur fournit différent mécanisme afin d’améliorer la performance des applications de type OLTP ou bien OLAP. Cet aspect est difficilement généralisable et est la responsabilité du DBA.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Il reste toujours des cas d'exceptions mais en général ces principes s'appliquent assez bien pour les application de type OLTP avec base de donnée.  &lt;/p&gt;&lt;p&gt;Martin&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-116319701645843843?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/116319701645843843/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=116319701645843843' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116319701645843843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116319701645843843'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/11/performance-des-applications-aves-des.html' title='Performance des applications aves des outils ORM'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-116147115293084477</id><published>2006-10-22T00:49:00.000+02:00</published><updated>2008-01-29T09:46:19.657+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Muret de pierre sèche</title><content type='html'>Ouf!&lt;br /&gt;&lt;br /&gt;Cet été j'ai finalement complété mon petit aménagement "style naturel" autour de notre  piscine.  Le plus dur fût sans contredit le mur de pierre sèche qui a nécessité plusieurs centaines de grosses pierres traînant ici et là.  Après la construction de notre maison il restait à faire tout l'aménagement paysager.  Nous avons donner quelques contrats mais les coûts exhaustifs de ce type de main d'oeuvre saisonier m'a convaincu d'en faire une partie moi-même.&lt;br /&gt;&lt;br /&gt;Le sol sur lequel notre maison est construite est littéralement envahi par les pierres, donc j'ai décidé de faire 1 pierre 2 coups (mauvais jeux de mots): ne pas seulement les transporter pour m'en débarasser (à grosses sueurs), mais de les réutiliser du même coup (à plus grosses sueurs) pour en faire un muret, une terrase et des marches pédestres.  Le seul principe important pour le muret est qu'étant donné qu'il n'y a aucun ciment pour assurer la cohésion (il tient que par gravité), il faut s'assurer qu'une pierre repose sur au moins trois autres pierres.&lt;br /&gt;&lt;br /&gt;Et après un grand merci à ma copine et à ma mère pour l'esthétique jardin de fleurs (ok, ok aussi à mes enfants qui se sont enfargés plus d'une fois), voilà le résulat de cet aménagement...!&lt;br /&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2486/2307/1600/maison%20004.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/2486/2307/320/maison%20004.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2486/2307/1600/maison%20003.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/2486/2307/320/maison%20003.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2486/2307/1600/maison%20001.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/2486/2307/320/maison%20001.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-116147115293084477?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/116147115293084477/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=116147115293084477' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116147115293084477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/116147115293084477'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/10/muret-de-pierre-sche.html' title='Muret de pierre sèche'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-7046183034331452412</id><published>2006-10-16T14:58:00.009+02:00</published><updated>2010-12-17T14:59:28.653+01:00</updated><title type='text'>Statistical General Concept</title><content type='html'>This post is part of the notes I'm gathering from various references providing theoretical background and explanation related to data mining, analytics and computer learning (see this &lt;a href="http://martin-ouellet.blogspot.com/2006/09/data-mining-background.html"&gt;post&lt;/a&gt; for the book reference). I'm gathering these notes in hope to be &lt;span style="font-size:0pt;"&gt;a little smarter&lt;/span&gt; in applying and interpreting data mining algorithms taken out-of-the-box from mining tools (I must admit I'm also doing this to serve my endless &lt;a href="http://jenny-and-erin.com/2007/12/things-i-wish-id-known-when-i-was-younger/"&gt;quest for understanding&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This is actually linked (through an "&lt;span style="font-size:0pt;"&gt;iframe&lt;/span&gt;" tag) to a Google Doc that I keep updating as I face projects making use of new mining algorithms... so this is work-in-progress. I realize that blog is probably not the best way to publish &lt;span style="font-size:0pt;"&gt;live &lt;/span&gt;text, but is the easiest one for me.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;This first part gathers basic topics from statistics difficult to classify into a very precise subject... should pretty much serve as a refresher for most people in this domain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Definition:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;instances = data objects observed and analysed (sometimes referred to as objects, data points...)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;variables= characteristics measured (for continuous) or observed (for categorical) for each instance&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Notation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;i&gt;n&lt;/i&gt; data objects (sample size)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;X generic input variables. When it is a vector, its component variable &lt;i&gt;j&lt;/i&gt; is expressed with subscript: X&lt;sub&gt;j&lt;/sub&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;x denotes some observed instance, and when we have &lt;i&gt;p&lt;/i&gt;-variables, we denote x&lt;sub&gt;1&lt;/sub&gt; .. x&lt;sub&gt;p&lt;/sub&gt; as the the real-valued for the 1.. &lt;i&gt;p&lt;/i&gt; variables measured on the particular object or instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;x&lt;sub&gt;k&lt;/sub&gt;(&lt;i&gt;i&lt;/i&gt;) correspond to the measure for variable X&lt;sub&gt;k&lt;/sub&gt; of the &lt;i&gt;i&lt;/i&gt;&lt;span style="font-style: normal;"&gt;-th data objects, where i has 1 .. N.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;x&lt;/b&gt; (in bold) correspond to the vector of &lt;/span&gt;&lt;i&gt;n&lt;/i&gt;&lt;span style="font-style: normal;"&gt; observation of a single variable x.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;X&lt;/b&gt; (capital in bold) correspond to the matrix N x p, containing N input &lt;/span&gt;&lt;i&gt;p&lt;/i&gt;&lt;span style="font-style: normal;"&gt;-vector x&lt;sub&gt;p&lt;/sub&gt;(1..N).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="https://docs.google.com/Doc?docid=0AS6yolBnyCUaZGM3ZGc3Zm5fNzdneGZzbTdjOA&amp;hl=en" frameborder="0" height="2000" width="100%"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-7046183034331452412?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/7046183034331452412/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=7046183034331452412' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7046183034331452412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/7046183034331452412'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/statistical-general-concept.html' title='Statistical General Concept'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115956243262300810</id><published>2006-09-29T22:39:00.000+02:00</published><updated>2008-01-29T09:51:05.161+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>I hate UI-type development</title><content type='html'>Why do I hate having to deal with UI-type development... I don't know but I have some hints:&lt;br /&gt;&lt;p&gt;I simply suck at it!&lt;/p&gt;&lt;p&gt;Although I enjoy using intuitive UI and appreciate the design value of it, I neither have the patience nor the talent to do it! In my view so much time and effort spent simply in designing a nice HTML/JSP page or rich client equivalent (with SWT for ex.) is too frustrating for the end result. I sometimes have to do it when delivering an end-to-end product for clients, and typically most of my time will be wasted on these UI stuff! I guess I could outsource all these, actually I even tried it once... but finding a good designer willing to develop inside JSP page is another challenge on its own!!!&lt;/p&gt;&lt;p&gt;When I first did some RCP stuff in Eclipse, I appreciated all the advanced design patterns available in library such as JFace but I soon got bored and tired again in dealing with all these widgets details consideration, I'm hopeless.&lt;/p&gt;&lt;p&gt;I guess I'll stick to creating domain business layer, service business layer, data access layer, and other more non-visual feature!&lt;/p&gt;&lt;p&gt;Martin &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115956243262300810?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115956243262300810/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115956243262300810' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115956243262300810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115956243262300810'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/i-hate-ui-type-development.html' title='I hate UI-type development'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115869603949105633</id><published>2006-09-19T21:48:00.002+02:00</published><updated>2008-02-15T12:02:05.802+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Parapente</title><content type='html'>J'ai eu la chance d'essayer le parapente pendant mes dernières vacances et j'ai adoré les sensations !!!  Ca confirme mon attirance pour les sports exploitants la dynamique du vent:  j'adore la magie qui opère lorsqu'on est porté par la force du vent...et la prise de vitesse en dépit de l'absence de bruit de moteur.&lt;br /&gt;&lt;br /&gt;J'aime la planche à voile mais trouve sa plage d'utilisation beaucoup trop restreinte (du moins ou j'habite en ce moment)... c'est pourquoi j'insiste toujours à y avoir accès lors de voyages familiales vers le sud.  La dernière fois (à Punta Cana) par contre fut assez décevante: les journées avec un bon vent furent accompagnés d'interdiction, et pour les journées de levée d'interdiction alors les petites voiles suffisaient à peine à sortir des vagues donc impossible à éxécuter, genre de catch22 de la planche!&lt;br /&gt;&lt;br /&gt;Le parapente semble mieux adapté au variation des conditions car on peut y exploiter deux types de vent: dynamique et thermique, ce dernier permet une ascension importante en altitude tandis que le premier est exploité le long de falaise ou parois de montagne! Le site ou j'ai pratiqué était assez bien, quoique loin des altitudes alpiennes, mais offre l'avantage de départ des quatres points cardinaux, assurant un départ garanti (sauf journée orageuse ou trop venteuse).  Pour les intéressés:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Voici une petite séquence de la fin de ma descente en tandem.... juste après avoir fait quelques bonnes vrilles à 360 degré&lt;mettre&gt;, accompagné de je ne sais combien de G, assez pour sentir mon cerveau descendre tout juste au niveau des pieds!  Et oui, la fameuse force centrifuge (ou serait-ce centripète... mes cours de physique du secondaire sont quelque peu enfouis sous la masse d'expérience qui ne cesse d'expansionner avec le temps!) agit beaucoup dans ce genre de manoeuvre...&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/lsdMgGYaFv0"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/lsdMgGYaFv0" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;/mettre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115869603949105633?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115869603949105633/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115869603949105633' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115869603949105633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115869603949105633'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/parapente.html' title='Parapente'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115809388566156448</id><published>2006-09-12T22:35:00.000+02:00</published><updated>2010-06-11T23:45:04.326+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Unit Testing but...</title><content type='html'>I really appreciate developing using the unit testing approach and as such I always have a &lt;a href="http://www.junit.org"&gt;JUnit&lt;/a&gt; library somewhere in my classpath while building an application. This really brings up my confidence into my code and allow me to refactor at ease without worry about breaking all existing functionality.&lt;br /&gt;However, there are a few stricter recommendations commonly found among the unit tester fanatic or the extreme programmer advocate that I find, to say the least, debatable:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;your unit test should focus on a single method of a single class, otherwise it is not really unit test.&lt;/li&gt;&lt;li&gt;always build your unit test first and then your application class afterward.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Point 1 actually emphasizes the term unit, and violating this makes your unit test more like integrated test which I agree. But in my view these tend to be more meaningful and practical.&lt;br /&gt;&lt;br /&gt;First of all, methods should be small, precise, have a single clear responsibility and have descriptive name that conveys their purposes. As such I tend to agree with recommendation that limit the size of a single method (&lt;a href="http://www.springframework.org/node/23"&gt;R. Johnson&lt;/a&gt; gave as a ballpark figure between 30-40 lines of code including all comments, while &lt;a href="http://www.greymatter.com/103523"&gt;J. Kerievsky &lt;/a&gt;goes as far as recommending ten lines of code or fewer, with the majority of them using one to five lines of code). Keeping methods small and giving them intuitive name produce much easier and self-documented code: I like this idea since it helps reduce the need for documenting your code!&lt;br /&gt;&lt;br /&gt;This is why I feel that the principle 1. above is opposed to the "writing short method" approach, since small method do not contain enough complex logic that requires a dedicated unit test on its own. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;A junit class that test and validate the effect of each and every single method produces on the state of current object or some other dependents (through Mock-up objects) is often straightforward and thus overkilled! Also, a large number of method may not deserve a full dedicated test on them, since not only their logic is simple but also the impact on state is minimal. &lt;/p&gt;&lt;p&gt;That's why I twist my unit test a bit to make them more integrated test, i.e. test only important methods in the class in relation with their impact on itself and on its dependencies (external library, other piece of my code..). Ok, this is not always possible especially when the dependency library is costly and resource intensive component (then I'll use Mock-up for such case), but in very frequent usage, this allows me to validate and better understand the external library during my test as well as testing my code against its dependency. I find myslef even doing such integrated test with code at the service layer level (above the DAO layer) and validating its effect at the database tier. Using a small memory-based database engine such as HSQLDB helps negating the perfomance penalty of doing this. &lt;/p&gt;&lt;p&gt;As for the point 2, I usually adopt more of a concurrent approach, i.e. draft the application class and once it stabilizes create the test class and making it evolve simultaneously. The first few version of my class/interface are a bit too dynamic and sketchy to really have an accompanying test class. So to limit the need to duplicate my changes in both, I'd rather wait till I'm more comfortable with the class/ interface and then proceed with writing test case.&lt;br /&gt;The only advantage I see in creating the test case first, is when I really don't know how my object's going to be used in the client code. However, in that case, I'd rather use a pencil and sketch some use case scenario beforehand...&lt;br /&gt;&lt;br /&gt;Martin &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115809388566156448?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115809388566156448/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115809388566156448' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115809388566156448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115809388566156448'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/unit-testing-but.html' title='Unit Testing but...'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115766052834898628</id><published>2006-09-07T22:21:00.000+02:00</published><updated>2010-02-08T18:10:17.442+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Handling persistence with ORM</title><content type='html'>In Java application development, using an Object Relational Mapper to connect to database typically will offer many advantages :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;avoiding the necessity to code against lower level JDBC API &lt;/li&gt;&lt;li&gt;dealing with data persistence concern in a more transparently way more aligned with object oriented code paradigm&lt;/li&gt;&lt;li&gt;providing isolation to database vendor specifics allowing easy porting to a number of different DB backend&lt;/li&gt;&lt;li&gt;providing additional services support built-in such as connection pooling, caching, etc .&lt;/li&gt;&lt;li&gt;reducing the need to be highly skilled in SQL, although ignoring about relational concept and SQL is definitely not realistic.&lt;/li&gt;&lt;li&gt;writing less code&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;On the flip side, I've realized that there are drawbacks as well, such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;providing least common denominator functionality to achieve DB neutrality&lt;/li&gt;&lt;li&gt;losing control of the SQL statetement automatically generated for us&lt;/li&gt;&lt;li&gt;some performance degradation, no matter what the tool vendor will pretend (ORM will always be one layer on top of JDBC...), however smart caching strategy can mitigate this&lt;/li&gt;&lt;li&gt;requiring additional knowledge of the ORM API (so less code to write but more library code to understand and make use of)&lt;/li&gt;&lt;li&gt;failing when the application use case is more focused on data reporting and aggregation of large data volume rather than on data entry transaction-based use case.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Typically on the last project I built using &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, I've enjoyed spending more time on the design of a good domain model layer since I've spent less on the persistent logic concern. However, I discovered later through a more realistic usage and data volume test, that it suffered some nasty performance degradation in some specific use case that were not discovered through unit testing (unit testing is only concerned with functionality testing and not performance scaling issues). &lt;/p&gt;&lt;p&gt;Without going into details, the problem had to do with the number of round-trip Hibernate was triggering to fetch object data graph. I had designed some relation (1:1 or N:1) to be &lt;em&gt;eager fetch&lt;/em&gt; (always fetch the related object) instead of using &lt;em&gt;Lazy &lt;/em&gt;fetching strategy (fetch in database only when necessary). This was good in some scenario, since some data dependencies were always needed and this avoided a second database call to get this dependent object data. However when confronted with getting collection of data, the effect was actually a separate DB call for every single data elements within the collection. So getting a long list of N items resulted in N+1 DB call! Alternative solutions exist for this, but the recommendation is to model most (if not all) object relation using a &lt;em&gt;Lazy&lt;/em&gt; strategy and adjust this default by specifying different fetch mode during run-time. &lt;/p&gt;&lt;p&gt;Bottom line, there is no magic bullet especially when it comes with database interaction. We need a good grasp in relation database concept in order to build application interacting with database, no matter what tools or framework you'll be working on.&lt;/p&gt;&lt;p&gt;Martin&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115766052834898628?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115766052834898628/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115766052834898628' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115766052834898628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115766052834898628'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/handling-persistence-with-orm.html' title='Handling persistence with ORM'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2783979377732831402</id><published>2006-09-03T18:10:00.003+02:00</published><updated>2008-09-03T18:22:46.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Mining'/><title type='text'>Data mining background</title><content type='html'>&lt;p id="jsum1" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum3" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;Data mining h&lt;span id="jsum4"&gt;&lt;span id="jsum5"&gt;as its root, among other thing, in statistics and computer learning. To generalize things greatly, it is observed that depending on your background, these two will tend to view data mining performance very much differently..... Statistical background will rate performance on the statistical significance and inference power and score, whereas the computer scientist tend to measure performance on both the algorithm efficiency and scalability. However I realize that the two approaches really are two sides of the same coin, and this is reflected in the most recent scientific &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;literature&lt;/span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum6" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum8" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span id="jsum9"&gt;&lt;span id="jsum10"  style="font-family:verdana;"&gt;Various definition of data mining can be found in the literature, but I &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;personally&lt;/span&gt; appreciate the more academic point of view than the marketing one commonly marketed by vendors. Here's some explanation excerpt taken from the excellent book « &lt;/span&gt;&lt;/span&gt;&lt;a id="jsum11" href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=3520"&gt;&lt;span id="jsum12"&gt;&lt;span id="jsum13"  style="font-family:verdana;"&gt;Principles of Data Mining&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span id="jsum14"&gt;&lt;span id="jsum15"&gt;&lt;span style="font-family:verdana;"&gt; » from David Hand, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Heikki&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Mannila&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Padhraic&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Smyth&lt;/span&gt; (MIT Press) (seems to be one of the few data mining books respected inside the statistical community). &lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum8" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;br /&gt;&lt;span id="jsum14"&gt;&lt;span id="jsum15"&gt;&lt;span style="FONT-STYLE: italic;font-family:verdana;" &gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum16" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum18" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-family:verdana;"&gt;&lt;i id="jsum19"&gt;It (&lt;/i&gt;&lt;span id="jsum20" style="FONT-STYLE: normal"&gt;Data mining&lt;/span&gt;&lt;i id="jsum21"&gt;) is recognized as &lt;span id="jsum23"&gt;well defined procedures that take data as input and produces output in the form of models (a summarized descriptive form of the data globally) or patterns (a descriptive form of some local phenomenon happening on a fraction of the data). The well defined procedure contrast with computational method which does not guarantee to terminate after a finite number of steps as opposed to a data mining procedure.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;i id="jsum21"&gt;&lt;span id="jsum23"&gt;&lt;/span&gt;&lt;/i&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum24" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum26" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;i id="jsum27"&gt;&lt;blockquote&gt;&lt;span style="font-family:verdana;"&gt;Data mining is concerned with building empirical models that are not based on some underlying theory about the mechanism through which the data arose but rather models consisting of a description of the observed data. In this sense, a good model is qualified as « generative »in the sense that data generated according to the model will share the same characteristics as the real data from which the model was generated.&lt;/span&gt;&lt;/blockquote&gt;&lt;/i&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum28" style="MARGIN-BOTTOM: 0in; FONT-STYLE: normalfont-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum30" style="MARGIN-BOTTOM: 0in; FONT-STYLE: normalfont-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum32" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum32" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;They also offer an interesting decomposition of data mining algorithms into orthogonal &lt;b id="jsum33"&gt;components&lt;/b&gt; which &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;contrasts&lt;/span&gt; with the magical and reductionist view marketed by tool vendors (always around the idea of simply applying specific algorithms to magically accomplish your task at hand). In essence, &lt;span id="jsum34"&gt;Data mining algorithms intends are to perform specific &lt;b id="jsum36"&gt;task&lt;/b&gt; on a sample or a complete multivariate &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;datasets&lt;/span&gt;. But the &lt;b id="jsum38"&gt;task &lt;/b&gt;(1&lt;sup id="jsum40"&gt;st&lt;/sup&gt; component) is one of many other component that a mining algorithm usually address: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum41" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="jsum44"  style="font-family:times new roman;"&gt;&lt;li id="jsum45"&gt;&lt;p id="jsum46" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;Obviously, the Data mining &lt;b id="jsum47"&gt;&lt;i id="jsum48"&gt;task&lt;/i&gt;&lt;/b&gt; in question: whether it be visualization, prediction (classification or regression), clustering, rule pattern discovery, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;summarization&lt;/span&gt; through descriptive model, pattern recognition, etc. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum50"&gt;&lt;p id="jsum51" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;The&lt;b id="jsum52"&gt; &lt;i id="jsum53"&gt;functional form&lt;/i&gt;&lt;/b&gt; of the model or the &lt;b id="jsum54"&gt;&lt;i id="jsum55"&gt;structure&lt;/i&gt;&lt;/b&gt; of the pattern. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;Example&lt;/span&gt; include linear regression forms, non-linear functions such as the one resulting from Neural network, a decision tree form, a hierarchical clustering model, an association rule, etc. These forms delimit the boundary of what we can expect to approximate or learn.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum57"&gt;&lt;p id="jsum58" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;The &lt;b id="jsum59"&gt;&lt;i id="jsum60"&gt;score function&lt;/i&gt;&lt;/b&gt; used to judge on the quality of the fitted model used to summarize the observed data or of the pattern used to characterize a local structure of the data. This score function is what we try to maximize (or minimize) when we fit parameters to our model. It can be based on goodness-of-fit (how well the model describes the observed data), or also on the &lt;i id="jsum61"&gt;generalization&lt;/i&gt; performance, i.e. how well it describes on the data not yet observed (for prediction purposes). &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum63"&gt;&lt;p id="jsum64" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;The &lt;b id="jsum65"&gt;&lt;i id="jsum66"&gt;search&lt;/i&gt;&lt;/b&gt; or &lt;b id="jsum67"&gt;&lt;i id="jsum68"&gt;optimisation method&lt;/i&gt; &lt;/b&gt;used: the computation procedures and algorithm used for maximizing the score function for a particular model. The search can limit itself to select the best parameters value within the k-parameters space (as in the case of k-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;th&lt;/span&gt; order polynomial function form) when the structure is fixed. And we may have to select first from a set or families of different structures.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum70"&gt;&lt;p id="jsum71" style="MARGIN-BOTTOM: 0in"&gt;&lt;span style="font-family:verdana;"&gt;The &lt;b id="jsum72"&gt;&lt;i id="jsum73"&gt;data management technique&lt;/i&gt;&lt;/b&gt; to be used for storing indexing and retrieving the data. This aspect becomes primordial when it is time to process massive data sets excluding the use of the main memory alone.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p id="jsum74" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum77" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum80" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span id="jsum81"  style="font-family:verdana;"&gt;The ideal tool would allow you to use different components independently from each other during some data mining activity. This level of agility and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;flexibility&lt;/span&gt; is however not possible in tools today... which may be justified and reasonable when it comes to the components optimization and data management but much less for the functional form and the score function components. &lt;/span&gt;&lt;/p&gt;&lt;p id="jsum82" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum85"  style="font-family:times new roman;"&gt;&lt;span id="jsum87"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span id="jsum88" style="FONT-STYLE: normal"&gt;In practice, tools usually offer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;pre&lt;/span&gt;-packaged algorithms from which you can easily fall into the algorithm trap where you are only expected to apply some well established mining algorithm to accomplish &lt;/span&gt;&lt;i id="jsum89"&gt;magically&lt;/i&gt;&lt;span id="jsum90" style="FONT-STYLE: normal"&gt; the specific task at hand. This is the typical black-box paradigm that I've learned to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;despise&lt;/span&gt; in data mining (note that black box abstraction is overall beneficial especially in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;software&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;OO&lt;/span&gt; programming model). &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum91" style="FONT-STYLE: normal;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum94"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span id="jsum96" style="FONT-STYLE: normal"&gt;&lt;span id="jsum97"&gt;My curiosity simply forces me to step back and discover what's all the different mining algorithms applied to my data. After reviewing some of the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;literature&lt;/span&gt;, I've realized that &lt;/span&gt;&lt;/span&gt;I came across a lot of theory/practice in statistics during my curriculum, however I cannot say the same for machine learning (although I did some cluster analysis during my master thesis). So in the spirit of increasing your &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;theoretical&lt;/span&gt; grasp of the underlying principles, let me give you a list of the books I highly recommend (in ascending order of statistical theory prerequisite):&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum98"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul id="jsum101" style="FONT-FAMILY: times new roman"&gt;&lt;li id="jsum102"&gt;&lt;p id="jsum103"&gt;&lt;a id="jsum104" href="http://portal.acm.org/citation.cfm?id=554693"&gt;&lt;span style="font-family:verdana;"&gt;Intelligent Data Analysis&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. Michael &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Berthold&lt;/span&gt; (Editor), David J. Hand (Editor). Springer (&lt;i id="jsum105"&gt;note that this one leans a bit toward AI with the inclusion of material such as fuzzy set logic and genetic algorithms&lt;/i&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum106"&gt;&lt;p id="jsum107"&gt;&lt;a id="jsum108" href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=3520"&gt;&lt;span id="jsum109"&gt;&lt;span id="jsum110"  style="font-family:verdana;"&gt;Principles of Data Mining.&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span id="jsum111"&gt;&lt;span id="jsum112"  style="font-family:verdana;"&gt; David Hand, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Heikki&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Mannila&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Padhraic&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Smyth&lt;/span&gt;. MIT Press&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum113"&gt;&lt;p id="jsum114"&gt;&lt;a id="jsum115" href="http://www.springer.com/computer/computer+imaging/book/978-0-387-31073-2"&gt;&lt;span style="font-family:verdana;"&gt;Pattern Recognition and Machine Learning&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. Christopher Bishop. Springer&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="jsum116"&gt;&lt;p id="jsum117"&gt;&lt;a id="jsum118" href="http://www-stat.stanford.edu/~tibs/ElemStatLearn/"&gt;&lt;span style="font-family:verdana;"&gt;Elements of statistical learning Data mining, inference, and prediction&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Tibshirani&lt;/span&gt; &amp;amp; Friedman. Springer.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p id="jsum119"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum122"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;Martin&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum123"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum126"  style="font-family:times new roman;"&gt;&lt;span style="font-family:verdana;"&gt;p.s. I will try to summarize some the principles found in these books that I consider more than useful for any data mining &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_24"&gt;practitioners&lt;/span&gt; to have. Although, blogs are not the ideal platform for such knowledge sharing, it is the most convenient one I have at hand (at least currently). &lt;/span&gt;&lt;/p&gt;&lt;p id="jsum127" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum129" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum131" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum133" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum135" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum137" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum139" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p id="jsum141" style="MARGIN-BOTTOM: 0in;font-family:times new roman;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2783979377732831402?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2783979377732831402/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2783979377732831402' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2783979377732831402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2783979377732831402'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/09/data-mining-background.html' title='Data mining background'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115563685832859283</id><published>2006-08-15T12:06:00.000+02:00</published><updated>2008-01-29T09:45:35.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>Préférences</title><content type='html'>&lt;span style="font-size:100%;"&gt;Avec le temps et surtout l'expérience&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, j'arrive à mieux savoir mes préférences en terme de travail... voici une petite liste de truc dans le format "me convient versus me convient moins":&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;exécuter versus faire exécuter&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;travail sur un plus petit nombre de tâches concurrentes plus exigeantes versus un plus grand nombre de tâches plus routinières et monotones&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;travail dans un cadre précis et concret versus cadre plus flou et plus théorique&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;travail d'analyse et de raisonnement dépendant de la logique versus travail de recherche   dépendant du bagage de connaissance&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;comprendre versus apprendre&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;apprendre grâce à la compréhension versus apprendre grâce à la mémorisation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;travail de gestion technique des projets/ressources versus travail de gestion administrative&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;travail varié et exploratoire versus travail fixe et récurrent donc redondant.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Cette liste est bien évidemment dynamique mais disons que, depuis quelques années déjà, elle se stabilise assez bien.  Les fluctuations semblent être en terme d’addition et non de modification!&lt;br /&gt;&lt;br /&gt;Martin&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Note:&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;  From time to time and usually when my post will be more personal, I'll blog in french.  As you may have already noticed, english is not my first language, but rather the language I often use in my professional life.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115563685832859283?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115563685832859283/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115563685832859283' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115563685832859283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115563685832859283'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/08/prfrences.html' title='Préférences'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-115462931435792524</id><published>2006-08-03T20:21:00.000+02:00</published><updated>2008-01-29T09:51:05.163+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Java and Oracle</title><content type='html'>Oracle has been committed since Oracle8i in integrating Java within its database/application architecture. Being confronted to the development of a particular application highly tied to Oracle, I'm taking this opportunity to review the current state of affair as of Oracle 10g. Here's what I found:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Originally the strategy was to follow a database-centric strategy where merely all software layer would be offered and hosted directly inside the database engine. This controversy strategy (to say the least) has since been reversed from 9i and 10g where some J2EE technologies already integrated inside the database (e.g. EJB container, JSP and servlet) have been desupported. &lt;/p&gt;&lt;p&gt;The focus is now on providing a complete Application Server suite (J2EE compliant) outside the database offering a vast number of services and support, pretty much like IBM WebSphere, BEA WebLogic or JBoss Application Server. &lt;/p&gt;&lt;p&gt;However, this strategy leads to the development (from beginning of Oracle 8i) of a fully functional and compatible Java Virtual Machine inside the database: OracleJVM. &lt;/p&gt;&lt;p&gt;Each of these two components are commented next.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;1- OracleJVM&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As of 10g release the OracleJVM offers these characteristics: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;support the J2SE 1.4.2 as specified by Sun Microsystems&lt;/li&gt;&lt;li&gt;supports only the headless mode of the Java &lt;em&gt;AWT&lt;/em&gt; (i.e. no GUI will be materializable on the server or remotely)&lt;/li&gt;&lt;li&gt;java classes (bytecode), resources files and java source code (optional), all reside at the database and stored at the schema level (knows as the Java schema object)&lt;/li&gt;&lt;li&gt;each session (user connecting to the database and calling Java code) will see its own private &lt;em&gt;JVM&lt;/em&gt; (although for performance reason the implementation does share some part of Java library between session)&lt;/li&gt;&lt;li&gt;core Java class libraries are run natively through the use of Ahead-of-time compilation to platform-specific C code before runtime&lt;/li&gt;&lt;li&gt;core Java libraries are stored and loaded within the PUBLIC schema and thus available to all other schema&lt;/li&gt;&lt;li&gt;application specific Java classes are stored and loaded within the user schema (the owner)&lt;/li&gt;&lt;li&gt;besides writing the Java class, compiling it and running it, OracleJVM requires two extra steps in its development/deployment cycle: 1- class needs to be loaded into the database (done through a utility called loadjava, 2- class needs to be published when callable from SQL or PL/SQL (done by creating and compiling a call specification or a.k.a. PL/SQL wrapper) to map the Java's method parameter and return type to Oracle SQL type. &lt;/li&gt;&lt;li&gt;granting execution rights is also needed when running a Java classes located in other user's schema &lt;/li&gt;&lt;li&gt;class loading is done dynamically as in conventional &lt;em&gt;JVM&lt;/em&gt;, however it is done into shared memory, so only one-time loading speed hit is encountered among all users code requiring the class&lt;/li&gt;&lt;li&gt;instead of a global classpath defined at runtime to resolve and load all application classes, OracleJVM uses a &lt;em&gt;resolver&lt;/em&gt; per each class during class installation specifying in which schema their depending classes reside&lt;/li&gt;&lt;li&gt;multi-threading is usually achieved using the embedded scalability of the database server, making Java language-threads needless since they won't help improve the concurrency of the application (this helps avoid complex multi-threading issue inside Java code)&lt;/li&gt;&lt;li&gt;OracleJVM offers adapted version of JDBC (called server-side internal driver) which is specially tuned to provide fast access to Oracle data from Java stored procedure, as well as a optimized SQLJ server-side translator.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Execution control:&lt;/p&gt;&lt;p&gt;How do we exactly start off a Java application located inside the Oracle database or in other words what is the equivalent entry point of the static main method in a "normal" application launched by a conventional JVM? This process is referred to in Oracle terminology as a &lt;em&gt;Call&lt;/em&gt; and can be done by calling any static method within available loaded and published classes. These published classes must then contain a static method entry point, and are qualified as the Java counterpart of a PL/SQL procedure (referred to by the term &lt;em&gt;Java Stored Procedures&lt;/em&gt;). &lt;/p&gt;&lt;p&gt;Some possible scenario of a Java called includes: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;a SQL client program running a Java stored procedure&lt;/li&gt;&lt;li&gt;a trigger (i.e. event fired off by defined SQL DML statement) running a Java stored procedure&lt;/li&gt;&lt;li&gt;a PL/SQL program calls a Java code&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;These &lt;em&gt;Java Stored Procedures&lt;/em&gt; are callable from PL/SQL code but can also call PL/SQL procedure. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Some thoughts&lt;/strong&gt;: Even though I've never played with &lt;em&gt;OracleJVM&lt;/em&gt;, I'm yet to be convinced about its advantage: stored Java procedures seems a bit like writing Java code with a procedural mindset? It seems that the only advantage is the possibility to write and centralize business rules that are more portable and powerful than PL/SLQ code and that are available to application written to bypass the Application Server tier?&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;2- Oracle OC4J J2EE Application Server (&lt;/em&gt;or a.k.a. OracleAS):&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;This server referred to as OC4J, now includes an ever growing number of components (Web server, J2EE technology, ORM with TopLink, Portlet, wireless, Business Intelligence, etc). Its J2EE support includes: JSP, servlet, JSF and ADF framework (using event-based model for web http processing), EJB, JNDI, XML support (schemas, namespace, DOM, SAX, XPath...), Web Services (WSDL, UDDI, SOAP). &lt;/p&gt;&lt;p&gt;The type of applications supported by this infrastructure are usually large and complex, i.e.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;involve multiple application tier: the central AS tier where the business logic is maintained, a web tier (maybe part of the AS tier) interacting with Web clients, a backend database tier where persistent data is preciously stored, client tier from fat to thin. &lt;/li&gt;&lt;li&gt;involve multiple user with different role and rights accessing concurrently common data&lt;/li&gt;&lt;li&gt;involve different remote user sites (i.e. implies Web access) and heterogeneous environment &lt;/li&gt;&lt;li&gt;involve sophisticated business rule;&lt;/li&gt;&lt;li&gt;involve interaction with other EIS enterprise information system through the J2EE connector Architecture (ERP such as SAP, legacy information system)&lt;/li&gt;&lt;li&gt;involve web services support&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course not all application will need all these, but to pull its weight and leverage this considerable software infrastructure weight, the application specification should meet a fair level of complexity before committing to this framework. This technology overweight is probably responsible of the creation of lighter and simpler initiative coming from opens source community (lightweight Framework only requiring a web jsp/servlet container, such as the one I described &lt;a href="http://martin-ouellet.blogspot.com/2006/05/j2ee-development.html"&gt;here&lt;/a&gt;). &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-115462931435792524?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/115462931435792524/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=115462931435792524' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115462931435792524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/115462931435792524'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/08/java-and-oracle.html' title='Java and Oracle'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114886310504021863</id><published>2006-05-29T02:31:00.000+02:00</published><updated>2008-05-07T14:50:20.907+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>J2EE development</title><content type='html'>&lt;p&gt;Before starting to do any J2EE Web development I did my own research on tools and libraries that would best meet my web transaction-based application requirement (e.g. things like flexibiltiy, simplicity, availability, cost, adoption..).   I finally decided to go with the Spring Framework for all integration code and parameterization settings, Hibernate on the data tier to handle the ORM aspect, and Struts for the Web tier.  I discovered since then that these exact set of tools are promoted by Source Labs (&lt;a href="http://www.sourcelabs.com/?page=software&amp;sub=sash"&gt;http://www.sourcelabs.com/?page=software&amp;amp;sub=sash&lt;/a&gt;) as the SASH stack.  Although I appreciated developing using these libraries, I enjoyed even more the best practices that these frameworks encourage through the adoption of sound principle: loose coupling between component, seperation of concerns, design pattern uage like MVC or dependency inversion, etc.   &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You have a feeling when you're building applications along these principles that it is well architect and clean, however you enjoy it even more when 5-6 months later the client calls you to update its requirements! &lt;/p&gt; &lt;div&gt;Without going into details, the web application developped with these frameworks usually follows architecture along these lines: &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt; A seperate and "dumb" View layer (JSP page);&lt;/li&gt;&lt;li&gt;A seperate Control layer (action and action setting files in Struts)&lt;/li&gt;&lt;li&gt;A separate Model/Business layer (business layer is using simple POJOs following java bean rules which allow dependency injection with Spring)&lt;/li&gt;&lt;li&gt;A seperate Data layer (thourgh DAO and Hibernate ORM)&lt;/li&gt;&lt;li&gt;An integration and configuration to glue all layers through Spring bean application context file&lt;/li&gt;&lt;li&gt;And finally a simple servlet/JSP container server ( e.g. Tomcat) to service and host the application deployment.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt; &lt;p&gt;As a good advocate of open source, I put my principle into practice by putting such an application available to anyone intrested, just contact me by email and I'll send you a copy of the project.&lt;/p&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-114886310504021863?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/114886310504021863/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=114886310504021863' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114886310504021863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114886310504021863'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/05/j2ee-development.html' title='J2EE development'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114511241676631064</id><published>2006-04-15T16:45:00.000+02:00</published><updated>2008-01-29T09:44:13.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Mining'/><title type='text'>JDMAPI: some info</title><content type='html'>Here's some information I've gathered by looking at the API (JDMAPI spec version 1.0) and at the material found here and there:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1- Mining Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First the features that are probably central to the API are called Mining Function.  These functions relate to the objective one wish to achieve and operate on the individual record or case (collection of related attributes belonging to one entity or transaction used as input for building the data mining model, e.g. customer, purchase, etc..).&lt;br /&gt;&lt;br /&gt;These can also be categorized by whether they are supervised (the model is trained and tested using a known target attribute value) or unsupervised (no target value variable is of used).&lt;br /&gt;&lt;br /&gt;Looking at the Enum type called MiningFunction, we find these supervised functions :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Classification&lt;/span&gt; (predict a target attribute of type categorical)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Regression&lt;/span&gt; (predict a target attribute is of type numerical, i.e. continuous)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Supervised Multi-Target&lt;/span&gt; (for model predicting multiple target attribute at once)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;For unsupervised functions, we have&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clustering&lt;/span&gt; (associate record to natural cluster that "closed" )&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Association&lt;/span&gt; (discover hidden interrelationship or correlation among the variables)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Anomaly Detection&lt;/span&gt; (identify rare and unexpected case)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Time Series&lt;/span&gt; (understand the pattern and forecast the time-ordered series of case)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Feature Extraction&lt;/span&gt; (project the set of all attributes into a much smaller set of features useful for visualization capturing important characteristics of the data)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is also a function applicable to both supervised and unsupervised called Attribute Importance which is helpful to reduce the number of attributes and complexity of the model to build.  This function helps identify the most relevant attributes and reduce nose when building mining model.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2- Mining Algorithm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To build mining model for each of these functions, we need to apply specific algorithms.  By checking the Enum class called MiningAlgorithm, we find:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;Decision Tree&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;Feed Forward Neural Net&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;kMeans&lt;/span&gt; (a k-means clustering algo)&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;Naive Bayes&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SVM Classification&lt;/span&gt; (for classification)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SVM Regression&lt;/span&gt; (for regression)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Arima&lt;/span&gt; (for time series)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Arma&lt;/span&gt; (for time series)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*Auto Regression&lt;/span&gt; (for time series)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;*NMF&lt;/span&gt; (Non-negative Matrix Factorization algorithm for feature extraction)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3- Mining Task&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The API includes a definite set of task used to construct the various mining object (see Mining Named object) :  These task defines by the Enum class 'MiningTask' are given next:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;buildTask&lt;/span&gt; (to construct a mining model, see mining function)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;testTask&lt;/span&gt; (for validating the mining model on an independent test dataset, only for supervised)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;applyTask&lt;/span&gt; (for applying the mining model to a new data source)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;computeStatisticsTask&lt;/span&gt; (to get basic statistics of attributes from source physical data)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;importTask/exportTask&lt;/span&gt; (for interacting with external application/framework)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4- Mining Objects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Typically when one submit mining task to the DME (data mining engine), this will generate some persistent objects called NamedObjects.  These objects are normally stored in the mining repository and can be saved and restored with the API:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;buildSetting&lt;/span&gt; (used to specify the model to be built, i.e. the mining function, the source data/attribute, the algorithm to be used with its settings, etc.)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;testMetrics&lt;/span&gt; (used to produce a test result)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;applySetting&lt;/span&gt; (used to define the data on which a model needs to be applied)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;physicalDataSet&lt;/span&gt; (a pointer to the original data used for build, test and apply e.g. a database table a file )&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;logicalData&lt;/span&gt; (optionally describe the physical data set to change attribute name and their types)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;model&lt;/span&gt; (used to store the resulting mining model)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;task&lt;/span&gt; (used to refer to existing task and their status )&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;taxonomy&lt;/span&gt; (used to define hierarchical grouping definition of categorical attribute value)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;costMatrix&lt;/span&gt; (matrix used with classification to associate cost with the actual versus prediction value )&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Note: * refers to release 2.0 functions.&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-114511241676631064?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/114511241676631064/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=114511241676631064' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114511241676631064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114511241676631064'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/04/jdmapi-some-info.html' title='JDMAPI: some info'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114349601468137284</id><published>2006-03-27T23:23:00.001+02:00</published><updated>2010-05-08T20:39:44.213+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Mining'/><title type='text'>Data Mining has now its open interface: JDMAPI</title><content type='html'>I've always been interested in data mining because it mixes some advanced statistical or mathematical methods with complex data computation algorithm (typically developped for computer learning).  On the negative side, its application may have a bad press (sometimes well deserved) because of potential abuse it can lead to... I will not dwell time on identity and privacy sensitive issues, but when the goal is respectful of people privacy's right, one can leverage data mining to bring normal analysis to a much higher level.  This is achieved through data induction (let the data speak for itself...) as opposed to data deduction (deducts conclusion based on specific report produced) typically encountered in more classical BI application.&lt;br /&gt;&lt;br /&gt;Data mining functionality is now built-in inside Oracle 10g through a standardized JSR (&lt;a href="http://www.jcp.org/en/jsr/detail?id=73"&gt;http://www.jcp.org/en/jsr/detail?id=73&lt;/a&gt;). Although this first effort is limited in scope, it will ensure application could be developed independent on vendor proprietary API. It is currently being continued through a more complete initiative (JSR-247, &lt;a href="http://www.jcp.org/en/jsr/detail?id=247"&gt;http://www.jcp.org/en/jsr/detail?id=247&lt;/a&gt;) which will bring more mining functionality and advanced algorithm. Most big players contribute to this standardization effort: Oracle, SAS, Hyperion, SPSS, SAP, IBM, etc.., but yes of course except Microsoft.&lt;br /&gt;&lt;br /&gt;The standard API also offers extensibility (each vendor can provide additional functionality not explicitly defined within the standard) and also covers the use of Web Services which will ensure complete independence of platform and language implementation.&lt;br /&gt;&lt;br /&gt;More info can be found by googling &lt;a href="http://www.google.ca/search?hl=en&amp;q=JDMAPI&amp;amp;meta="&gt;JDMAPI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll try to analyse this API in more detail and let you know my discoveries...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-114349601468137284?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/114349601468137284/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=114349601468137284' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114349601468137284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114349601468137284'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/03/data-mining-has-now-its-open-interface.html' title='Data Mining has now its open interface: JDMAPI'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114280888534476606</id><published>2006-03-19T23:54:00.000+01:00</published><updated>2008-01-29T09:45:35.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professional'/><title type='text'>From ER to OO</title><content type='html'>In my previous posts I've been sharing knowledge valuable for people dealing with the technology underlying relational database management system (RDBMS for short).  This technology is used to store literally any information held by organization.  I've been dealing with this technology since about 1996, and still continue to do so mainly because of its ubiquity in IT world.   Relation databases store information using &lt;em&gt;set theory&lt;/em&gt; and implement transaction and concurrency control to handle a large number of simultaneous connection, and as such their scope are fairly limited (although most big players are trying to include more functionality and processing flexibility into their engine, e.g. Oracle experiencing with the inclusion of JRE within their database...).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After doing modeling and designing architecture for database for some time, I started designing and developing stuff in Object Oriented language environment (around 2002).  At first this can be quite daunting with all the flexibility OO programming can offer...   Compared to database modeling where you have a rigid framework and theory guiding your work, OO modeling seems more to stimulate your artistic and creativity ability than your analytical expertise.&lt;br /&gt;&lt;br /&gt;To overcome this new paradigm, here's some pragmatic steps I did and applied in learning Java, free of charge (or almost):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Getting and reading good reference documentation, such as the free resource from Bruce Eckel, &lt;a href="http://www.mindview.net/Books/TIJ"&gt;Thinking in Java&lt;/a&gt;.  This first step will only help you gaining some knowledge, but to be able to do it yourself in an elegant and flexible way you'll definitely need more experience.  After some practice you'll seem to face recurrent problem over and over... this is where step 2 kicks in.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Getting a good reference on Design Pattern, this will teach in developing code with better quality (from aspects such as flexibility, robustness, adaptive, less error prone, etc.) following pattern developed by experienced developer.  A good introduction book would be &lt;a href="http://www.oreilly.com/catalog/hfdesignpat/"&gt;Head First Design Pattern&lt;/a&gt;, but to get the real reference document you should go to &lt;a href="http://www.awprofessional.com/bookstore/product.asp?isbn=0201633612&amp;rl=1"&gt;Gang of Four.&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you're still shy and afraid of downloading a free copy of &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; to experiment and code yourself (at this point maybe you should simply reconsider coding ;-), then what is still available to you are millions of lines of quality code (mostly in Java) available in the best &lt;em&gt;open source&lt;/em&gt; project, more on that later.  However, most likely you'll actually be programming your own stuff relying one  or many &lt;em&gt;open source&lt;/em&gt; components, at least that's how I did it. &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt; Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-114280888534476606?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/114280888534476606/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=114280888534476606' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114280888534476606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114280888534476606'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/03/from-er-to-oo.html' title='From ER to OO'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-2885971145838327138</id><published>2005-12-16T00:07:00.002+01:00</published><updated>2008-09-13T21:35:58.513+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Design vs Coding, and DDD</title><content type='html'>I have the chance (some would probably not call it that way) to deal with architecture/design stuff in my work, in addition to doing real coding and hands-on development work during my consulting activities.&lt;br /&gt;&lt;br /&gt;For me, it's sort of an experimental way aiming to find which of one of these two would fulfill my day the most.   After doing the two for the past 2 years: I came up to the conclusion: the mix of both is what fits me since coding allow to stay more in touch with the technical aspect and the technology while the design and architecture helps me keep some perspective as to which technology can make some difference and which adds up to ... well mostly hype!&lt;br /&gt;&lt;br /&gt;An interesting approach that I find in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OO&lt;/span&gt;-type of development that actually stresses the importance of having both competence in order to build complex system having all usual quality indicators. This approach originated from Eric Evans and is now well accepted and referred to as Domain-Driven Design (or &lt;a href="http://domaindrivendesign.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;DDD&lt;/span&gt;&lt;/a&gt;). I will not describe it here, please refer to his &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bxgy_b_img_b"&gt;book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However let me just comment of one aspect that I find particularly useful during &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OO&lt;/span&gt; design of a typical business application. It really helps in producing well organized, well designed, well documented and logical &lt;a href="http://en.wikipedia.org/wiki/Domain_model"&gt;Domain Model&lt;/a&gt; construction. Very briefly the way I see this particular concept, is similar to a form of taxonomy that helps you organize and classified each object that you design in your Domain Model based on their roles:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Entity&lt;/strong&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Objects&lt;/span&gt; are those with a very precise identity and transactional &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;lifecycle&lt;/span&gt;, and for which we usually worry when multiple instances of the same identity could be found at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;runtime&lt;/span&gt;. They would typically be mapped to a unique row in the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;persistence&lt;/span&gt; database.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt; Objects are those without any identity where its field attribute are only compared by value (i.e. two instances with same value are considered equal). &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Factory &lt;/strong&gt;Objects are those concerned with the creation of object(s)... more often justified when creating group of objects along with their associated graph. This is required when this creation involve enough complexity to warrant encapsulation through factory.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Service &lt;/strong&gt;Objects are those used to handle and implement business service along with associated business rules. These service objects usually operate on multiple collaborators entity objects as well as their repository.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Repository &lt;/strong&gt;Objects are those used to handle entity &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;lookup&lt;/span&gt; and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;persistence&lt;/span&gt; through an abstract layer hiding any details and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;idiosynchracies&lt;/span&gt; of the related &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;persistence&lt;/span&gt; engine. They are typically used by Service objects, but sometimes by Entity Object, in which case Entity object would have a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;reference&lt;/span&gt; to the Repository passed inside its methods requiring Repository functionality.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I find this taxonomy very &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;insighful&lt;/span&gt; and convenient, and this is certainly useful to adopt..still worth it when only used to help standardizing design terminology among developers and architect!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-2885971145838327138?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/2885971145838327138/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=2885971145838327138' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2885971145838327138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/2885971145838327138'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2005/12/design-vs-coding-and-ddd.html' title='Design vs Coding, and DDD'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-3533284699550153529</id><published>2005-01-11T20:19:00.002+01:00</published><updated>2008-09-05T09:50:43.500+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Intelligent-Agent'/><title type='text'>Intelligent Agent part 4: Implementation with OO programming</title><content type='html'>&lt;span &gt;Intelligent agent implementation using Object Oriented programming paradigm &lt;/span&gt;&lt;p class="western" lang="en-CA" id="r_0e376" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e378" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e379"   style="font-size:100%;"&gt;Wooldridge in Multiagents Systems provides a comparison between object oriented system and agent system paradigm, which seems awkward in the sense that the two paradigms serve different purposes. According to his reasoning, OO does share agent system characteristics by exhibiting autonomy over its state (and object control its state by making it private), however fails in controlling its behaviour (because once object methods are made public, control is switched to external object) contradicting the autonomy notion of agent. Other observations include the fact the agent have their own thread of control whereas in standard object model, a single thread of control is allocated to the entire system.&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e380" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e382" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e383"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e384"&gt;Actually, OO paradigm is sophisticated enough to provide mechanism required by the agent specification. For example, the access control granularity of object could allow to make only state information visible through methods and no operation done on the objects themselves (or condition could be applicable to the operation in order to respect the autonomy notion of the object), furthermore most OO implementation offers robust multi-threading control capacity, etc.). Surprisingly, the article refers to &lt;i id="r_0e385"&gt;active object&lt;/i&gt;, which shares the property just mentioned, and also mentions that OO system can be used to build agent based system. We could add that it is actually being used, see Bigus for specific application example. Furthermore, from an ad-hoc search on the current software architecture currently available in building agent-based system, we see that the majority of development frameworks are actually originated from OO language implementation (reference: &lt;/span&gt;&lt;span id="r_0e386" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e387"&gt;&lt;a id="r_0e388" href="http://www.multiagent.com/"&gt;&lt;span lang="en-CA" id="r_0e389"&gt;http://www.multiagent.com/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e390"&gt;) and most of them are actually from a well accepted general purposes language, i.e. Java:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e391" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e393" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e394"   style="font-size:100%;"&gt;Academic research based:&lt;/span&gt;&lt;/p&gt;&lt;ul id="r_0e395"&gt;&lt;li id="r_0e396"&gt;&lt;p class="western" lang="fr-CA" id="r_0e397" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e398"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e399"&gt;Cougaar Agent Architecture (&lt;/span&gt;&lt;span id="r_0e400" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e401"&gt;&lt;a id="r_0e402" href="http://www.cougaar.org/"&gt;&lt;span lang="en-CA" id="r_0e403"&gt;http://www.cougaar.org/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e404"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e405"&gt;&lt;p class="western" lang="fr-CA" id="r_0e406" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e407"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e408"&gt;Jadex BDI Agent System (&lt;/span&gt;&lt;span id="r_0e409" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e410"&gt;&lt;a id="r_0e411" href="http://vsys1.informatik.uni-hamburg.de//projects/jadex/"&gt;&lt;span lang="en-CA" id="r_0e412"&gt;http://vsys1.informatik.uni-hamburg.de//projects/jadex/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e413"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e414"&gt;&lt;p class="western" lang="fr-CA" id="r_0e415" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e416"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e417"&gt;JATLite (&lt;/span&gt;&lt;span id="r_0e418" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e419"&gt;&lt;a id="r_0e420" href="http://java.stanford.edu/"&gt;&lt;span lang="en-CA" id="r_0e421"&gt;http://java.stanford.edu/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e422"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e423"&gt;&lt;p class="western" lang="fr-CA" id="r_0e424" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e425"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e426"&gt;JATLiteBean (&lt;/span&gt;&lt;span id="r_0e427" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e428"&gt;&lt;a id="r_0e429" href="http://kmi.open.ac.uk/people/emanuela/JATLiteBean/"&gt;&lt;span lang="en-CA" id="r_0e430"&gt;http://kmi.open.ac.uk/people/emanuela/JATLiteBean/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e431"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e432"&gt;&lt;p class="western" lang="fr-CA" id="r_0e433" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e434"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e435"&gt;Java Communicating Agents (&lt;/span&gt;&lt;span id="r_0e436" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e437"&gt;&lt;a id="r_0e438" href="http://jacomma.sourceforge.net/"&gt;&lt;span lang="en-CA" id="r_0e439"&gt;http://jacomma.sourceforge.net/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e440"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e441"&gt;&lt;p class="western" lang="fr-CA" id="r_0e442" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e443"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e444"&gt;JESS, the Java Expert System Shell (&lt;/span&gt;&lt;span id="r_0e445" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e446"&gt;&lt;a id="r_0e447" href="http://herzberg.ca.sandia.gov/jess/"&gt;&lt;span lang="en-CA" id="r_0e448"&gt;http://herzberg.ca.sandia.gov/jess/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e449"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e450"&gt;&lt;p class="western" lang="fr-CA" id="r_0e451" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e452"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e453"&gt;MAP, a Mobile Agent Platform (&lt;/span&gt;&lt;span id="r_0e454" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e455"&gt;&lt;a id="r_0e456" href="http://sun195.iit.unict.it/MAP/"&gt;&lt;span lang="en-CA" id="r_0e457"&gt;http://sun195.iit.unict.it/MAP/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e458"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e459"&gt;&lt;p class="western" lang="fr-CA" id="r_0e460" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e461"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e462"&gt;Excalibur (&lt;/span&gt;&lt;span id="r_0e463" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e464"&gt;&lt;a id="r_0e465" href="http://www.ai-center.com/projects/excalibur/"&gt;&lt;span lang="en-CA" id="r_0e466"&gt;http://www.ai-center.com/projects/excalibur/&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e467"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e468"&gt;&lt;p class="western" lang="fr-CA" id="r_0e469" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e470"  style="font-size:100%;"&gt;&lt;span id="r_0e471" style="COLOR: rgb(0,0,255)"&gt;&lt;a id="r_0e472" href="http://www.multiagent.com/cgi-bin/r?url=http://www2.toshiba.co.jp/beegent/index.htm"&gt;&lt;span lang="en-CA" id="r_0e473"&gt;&lt;span id="r_0e474" style="COLOR: rgb(0,0,0)" &gt;Bee-gent Multi Agent Framework&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e475"&gt; (&lt;/span&gt;&lt;span id="r_0e476" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e477"&gt;&lt;a id="r_0e478" href="http://www2.toshiba.co.jp/beegent/index.htm"&gt;&lt;span lang="en-CA" id="r_0e479"&gt;http://www2.toshiba.co.jp/beegent/index.htm&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e480"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e481"&gt;&lt;p class="western" lang="fr-CA" id="r_0e482" style="LINE-HEIGHT: 100%"&gt;&lt;span id="r_0e483"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e484"&gt;Zeus Agent Building Toolkit (&lt;/span&gt;&lt;span id="r_0e485" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e486"&gt;&lt;a id="r_0e487" href="http://more.btexact.com/projects/agents/zeus/index.htm"&gt;&lt;span lang="en-CA" id="r_0e488"&gt;http://more.btexact.com/projects/agents/zeus/index.htm&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e489"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class="western" lang="en-CA" id="r_0e490" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e492" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e493"   style="font-size:100%;"&gt;Commercial based product:&lt;/span&gt;&lt;/p&gt;&lt;ul id="r_0e494"&gt;&lt;li id="r_0e495"&gt;&lt;p class="western" lang="fr-CA" id="r_0e496" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e497"   style="font-size:100%;"&gt;Jade (&lt;span id="r_0e498" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e499"&gt;&lt;a id="r_0e500" href="http://jade.tilab.com/"&gt;http://jade.tilab.com/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e501"&gt;&lt;p class="western" lang="fr-CA" id="r_0e502" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e503"   style="font-size:100%;"&gt;CybelePro (&lt;span id="r_0e504" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e505"&gt;&lt;a id="r_0e506" href="http://www.cougaar.org/"&gt;http://www.cougaar.org/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e507"&gt;&lt;p class="western" lang="fr-CA" id="r_0e508" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e509"   style="font-size:100%;"&gt;JACK Intelligent Agent (&lt;span id="r_0e510" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e511"&gt;&lt;a id="r_0e512" href="http://www.agent-software.com.au/jack.html"&gt;http://www.agent-software.com.au/jack.html&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e513"&gt;&lt;p class="western" lang="fr-CA" id="r_0e514" style="LINE-HEIGHT: 100%"&gt;&lt;span id="r_0e515"  style="font-size:100%;"&gt;&lt;span &gt;&lt;span lang="en-CA" id="r_0e516"&gt;Living Systems Technology Suite (&lt;/span&gt;&lt;span id="r_0e517" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e518"&gt;&lt;a id="r_0e519" href="http://www.whitestein.com/pages/solutions/ls_ts.html"&gt;&lt;span lang="en-CA" id="r_0e520"&gt;http://www.whitestein.com/pages/solutions/ls_ts.html&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span lang="en-CA" id="r_0e521"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e522"&gt;&lt;p class="western" lang="fr-CA" id="r_0e523" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e524"   style="font-size:100%;"&gt;TSpaces (&lt;span id="r_0e525" style="COLOR: rgb(0,0,255)"&gt;&lt;u id="r_0e526"&gt;&lt;a id="r_0e527" href="http://www.almaden.ibm.com/cs/TSpaces/"&gt;http://www.almaden.ibm.com/cs/TSpaces/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span id="r_0e524"  style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="r_0e371" style="FONT-STYLE: italic;font-size:85%;" &gt;&lt;span lang="en-CA" id="r_0e372" &gt;Taken from&lt;br /&gt;&lt;br /&gt;“Constructing Intelligent Agents with Java” (1998) from J.P. Bigus and Internet ad-hoc researches&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-3533284699550153529?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/3533284699550153529/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=3533284699550153529' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3533284699550153529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/3533284699550153529'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2005/01/intelligent-agent-part-4-implementation.html' title='Intelligent Agent part 4: Implementation with OO programming'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5037143796696082435</id><published>2004-12-12T19:58:00.003+01:00</published><updated>2008-09-05T09:50:14.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Intelligent-Agent'/><title type='text'>Intelligent Agent part 3: Multiagent and Societies</title><content type='html'>&lt;h2 class="western" lang="en-CA" id="r_0e203" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;Multiagent systems and Societies of Agents &lt;/span&gt;&lt;/h2&gt;&lt;p class="western" lang="en-CA" id="r_0e204" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e206" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e207"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e208" &gt;Analyzing and considering only individual agent architecture is neither convenient nor realistic as most environments contain multiple agents interacting together in various ways. An important aspect of these multiagent systems or societies of agents consists of the infrastructure facilitating the interaction between agents during their course of action. These interactions should not compromise autonomy of agent whether they are cooperative, competitive or simply self-interested. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e209" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e211" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e212"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e213" &gt;During message exchanging, some form of protocol or mechanisms dictating the communication are necessary to ensure that agents “understand” each other. These protocols are defined at various communication levels. We have, from lowest to highest respectively, level specifying interconnection, level responsible of format and syntax and level for meaning or semantic. At a more abstract level, another protocol is also necessary to organize interaction between agents as to mimic “real conversation” taking place not just single message exchanged. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e214" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e216" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e217"   style="font-size:100%;"&gt;&lt;b id="r_0e218"&gt;Communication Level Protocol&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e219" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e220"   style="font-size:100%;"&gt;To simplify software agent design, “speech act theory” serves as a model for handling the various aspect of communication. Speech act views human language as actions (e.g. request, suggestion, commitment, replies, etc). These actions have three dimensions; locution (the words), illocution (the intended meaning) and the perlocution (the actions resulted of the locution). &lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e221" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e223" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e224"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e225" &gt;One good example of a protocol for exchanging information and knowledge that rely on “speech act theory” performative model is called KQML (or Knowledge Query and Manipulation Language). This protocol is specifically useful for decoupling both the message and the communication semantic. This is achieved by separating the message into multiple fields; language (e.g. Knowledge Interchange Format -KIF or Lisp, Prolog, etc), content (i.e. representing the message itself and expressed using the language specified) and ontology (representing the objects and their inter-relationship in a domain of interest) are all part of separate fields. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e226" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e228" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e230" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e231"  style="font-size:100%;"&gt;&lt;b id="r_0e232"&gt;&lt;span lang="en-CA" id="r_0e233" &gt;Interaction Level Protocol&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e234" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e235"   style="font-size:100%;"&gt;As for the higher level of communication, concepts such as coordination, cooperation, contract net, blackboard system, negotiation and market mechanisms have all been devised in order to specify agent interaction protocol. &lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e236" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e238" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e239"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e240"&gt;&lt;span &gt;&lt;i id="r_0e241"&gt;Coordination protocol&lt;/i&gt; ensures that global goals are achieved while respecting global constraint and reducing redundant problem solving. Coordinated systems have often been designed in DAI field (distributed artificial intelligence) through techniques that distribute both control and data. However, this leads to some difficulty such as agents having only partial and imprecise information knowledge on the global goals and also having less coherent global behaviour. Coordination uses two keys structures to formalize itself in distributed agent system. The first one called &lt;i id="r_0e242"&gt;commitment&lt;/i&gt; is used by the agent as a pledge to undertake a specified course of action, while the second one called &lt;i id="r_0e243"&gt;convention&lt;/i&gt; is a means of managing commitments in changing circumstances. Commitment ties agent into future activities and convention dictates the rules and constrains under which these commitments are re-evaluated in case of changes and new reality. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e244" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e246" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e247"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e248" &gt;Coordination is not the only abstract level protocol existing, the following gives a brief definition of alternative mechanisms existing to support agent interaction: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e249" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e251"&gt;&lt;ul id="r_0e252"&gt;&lt;ul id="r_0e253"&gt;&lt;li id="r_0e254"&gt;&lt;p class="western" lang="fr-CA" id="r_0e255" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e256"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e257"&gt;&lt;span &gt;&lt;b id="r_0e258"&gt;Task decomposition and distribution&lt;/b&gt;. Often utilized in a more cooperative type environment in which the system designer takes care of the task decomposition of agents. This can be done by spatial decomposition where agents are responsible of task based on the information source and decision point location, or by functional decomposition where agents are defined and allocated by expertise.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e259" style="MARGIN-LEFT: 1in; LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e261"&gt;&lt;ul id="r_0e262"&gt;&lt;ul id="r_0e263"&gt;&lt;li id="r_0e264"&gt;&lt;p class="western" lang="fr-CA" id="r_0e265" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e266"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e267"&gt;&lt;span &gt;&lt;b id="r_0e268"&gt;Contract Net&lt;/b&gt;. This mechanism is modelled following the goods/services exchange economic rule. The roles of agent are not specified before hand but rather through a bidding system in which managers (agent announcing task for bidding) award contractors (agent winning a contract after submitting a bid) specific problem resolution task.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e269" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e271"&gt;&lt;ul id="r_0e272"&gt;&lt;ul id="r_0e273"&gt;&lt;li id="r_0e274"&gt;&lt;p class="western" lang="fr-CA" id="r_0e275" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e276"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e277"&gt;&lt;span &gt;&lt;b id="r_0e278"&gt;BlackBoard System&lt;/b&gt;. Central interaction point shared and used by all agents to reach common solution.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e279" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e281"&gt;&lt;ul id="r_0e282"&gt;&lt;ul id="r_0e283"&gt;&lt;li id="r_0e284"&gt;&lt;p class="western" lang="fr-CA" id="r_0e285" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e286"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e287"&gt;&lt;span &gt;&lt;b id="r_0e288"&gt;Negotiation&lt;/b&gt;. Utilized in situation involving agents having conflicting goal. This needs some form of concession and alternatives search from the agents to reach and move toward agreements. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e289" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e291"&gt;&lt;ul id="r_0e292"&gt;&lt;ul id="r_0e293"&gt;&lt;li id="r_0e294"&gt;&lt;p class="western" lang="fr-CA" id="r_0e295" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e296"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e297"&gt;&lt;span &gt;&lt;b id="r_0e298"&gt;Market mechanism&lt;/b&gt;. Often a direct interaction between agents is just impossible due to the significant number of agents involved. In this scheme, a voting system can be put in place allowing agents to vote between a set of alternatives solution proposed by a smaller group of agent.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e299" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e301" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e187" style="LINE-HEIGHT: 100%; FONT-STYLE: italicfont-family:times new roman;" align="justify" &gt;&lt;span id="r_0e188"   style="font-size:85%;"&gt;Taken from &lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e189" style="FONT-STYLE: italic;font-family:times new roman;" &gt;&lt;li id="r_0e190"&gt;&lt;p class="western" lang="en-CA" id="r_0e191" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;“&lt;/span&gt;&lt;span id="r_0e192"  style="font-size:85%;"&gt;Multiagent Systems, a Modern Approach to Distributed Modern Approach to Artifical Intelligence” Chapter 2 Mutliagents Systems and Societies of Agents, Huhns and Stephens (1999)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e304" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5037143796696082435?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5037143796696082435/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5037143796696082435' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5037143796696082435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5037143796696082435'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2004/12/intelligent-agent-part-2-societies.html' title='Intelligent Agent part 3: Multiagent and Societies'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-8303291753718811896</id><published>2004-05-04T18:02:00.002+02:00</published><updated>2008-09-05T09:49:47.514+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Intelligent-Agent'/><title type='text'>Intelligent Agent part 2: Architecture</title><content type='html'>&lt;span &gt;Here the second part of my research study on software intelligent agent.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h1 class="western" lang="en-CA" id="r_0e102" align="justify"&gt;&lt;span id="r_0e103"   style="font-size:130%;"&gt;Intelligent Agent Architecture &lt;/span&gt;&lt;/h1&gt;&lt;p class="western" lang="en-CA" id="r_0e104" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e105"   style="font-size:100%;"&gt;Current agent architecture can be classified as either 1) logical based agent, 2) reactive agent, 3) BDI agent (belief-desire-intention) and 4) layered architectures. The following summarizes very briefly these approaches and provides some insight in relation to their pros/cons.&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e106" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e108" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e109"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e110" &gt;The &lt;b id="r_0e111"&gt;logic based&lt;/b&gt; approach is when the decision making strategy reduces to a problem of proof (predicate logic), i.e. the agent uses its symbolic representation of the world (usually through logical formulae) to accomplish logical deduction in order to select an appropriate action. In this scheme, the deduction rules that determine the agent behaviour are the “program” (execution), whereas the symbolic information/ representation of the environment is the current database (data).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e112" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e114" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e115"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e116" &gt;This traditional approach originating from early AI work, suffers from disadvantages such as the following:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e117"&gt;&lt;li id="r_0e118"&gt;&lt;p class="western" lang="fr-CA" id="r_0e119" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e120"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e121" &gt;Because of &lt;i id="r_0e122"&gt;Calculative rationality&lt;/i&gt; (the optimal action is deduced at time j based on the environment condition as seen at time i, where j&gt;i), we must assume that the environment did not change during the time agent chooses its action, reducing the practicality of such agents. Although alternative compilation of the logical specification into a more amenable form can provide better efficiency, this issue still persist in time-constraint and highly dynamic environment.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e123"&gt;&lt;p class="western" lang="en-CA" id="r_0e124" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e125"   style="font-size:100%;"&gt;Perception of the agent is realised through a non-obvious mapping from real environment condition to a set of symbolic formulae. It has been acknowledged that as seductive and useful logic is to conceptualise and specify agent, it is quite difficult when one tries to represent and reason about complex, dynamic of physical or non-physical environment using a set of explicit symbolic reasoning.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e126" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e128" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e130" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e131"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e132" &gt;The &lt;b id="r_0e133"&gt;reactive &lt;/b&gt;agent architecture (alternatively referred to as &lt;i id="r_0e134"&gt;behavioural&lt;/i&gt; or &lt;i id="r_0e135"&gt;situated&lt;/i&gt;) proposed by R. Brooks intends to simplify and avoid the difficulty of symbolic representation by providing a more economical, elegant and robust agent whose behaviour is simply a function of its local environment. One of the most famous technique called &lt;i id="r_0e136"&gt;Subsumption architecture&lt;/i&gt; is characterized by an action-perceptual input mapping (situation &lt;span id="r_0e137"&gt;&lt;/span&gt; action) and a layer controlling hierarchy in charge of resolving possible simultaneous action conflicts (lower layer action takes precedence over higher or more abstract layer). Agent performance and complexity which depends on the number of behaviour and number of percept (raw sensor input is used as opposed to complex symbolic representation) can result in a constant decision time when hard-wiring decision making process, making such agent computational simple and attractive. However, this simplicity leads to some disadvantages:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e138"&gt;&lt;li id="r_0e139"&gt;&lt;p class="western" lang="en-CA" id="r_0e140" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e141"   style="font-size:100%;"&gt;Only a local environment information is gathered making non-local information not possibly taken into account &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e142"&gt;&lt;p class="western" lang="fr-CA" id="r_0e143" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e144"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e145" &gt;How could purely reactive paradigm lead to some form of experience learning and performance improvement over time?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e146"&gt;&lt;p class="western" lang="en-CA" id="r_0e147" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e148"   style="font-size:100%;"&gt;Implementation engineering relying heavily on experimentation, trail and error methodology&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e149"&gt;&lt;p class="western" lang="en-CA" id="r_0e150" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e151"   style="font-size:100%;"&gt;The hierarchical form of action control can lead to confusion when a large number of different behaviours are modelled. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e152" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e154" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e156" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e157"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e158" &gt;The &lt;b id="r_0e159"&gt;BDI &lt;/b&gt;or Belief-Desire-Intention architecture is influenced by the study of &lt;i id="r_0e160"&gt;practical reasoning&lt;/i&gt; (human reasoning taking place during continuous decision-action process). This philosophical concept explains any action taken by a combination of intention (what goals are to be achieved) and a chosen option (how to proceed for achieving these goals). It is assumed in BDI system that course of action taken to satisfy goals should not stop simply because of failure but in the mean time it should not persist without any reasonable chance of success (or without the original intention remaining relevant). This represents a dilemma between the right balance of reactiveness and proactiveness behaviour contained in a BDI agent. Pure goal directed agents will never stop to reconsider their intention even after important environment changes that could invalidate the original goal. Meanwhile pure event driven agents never spend enough time trying to achieve their goals and waste all computational time in reacting to their environment. In general the more static an environment is the more pro-active agents should be, whereas in more dynamic environment agents need to have the ability to react to changes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e161" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e163" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e165" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e166"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e167" &gt;The &lt;b id="r_0e168"&gt;layered architecture&lt;/b&gt; aims to accomplish a better balance between agent pro-activeness and re-activeness by introducing the concept of specialized dedicated layer. Layering architecture into subsystems allows one to design specialized subsystems adapted for specific task, for example one subsystem would deal with reactive behaviour while another one with pro-active behaviour. Most of these architectures use either horizontal layering or vertical layering for their information and control flow mechanisms. &lt;b id="r_0e169"&gt;Horizontal&lt;/b&gt; layering requires some form of mediation between all layers since they all have access to input and can all produce some action output. &lt;b id="r_0e170"&gt;Vertical&lt;/b&gt; layering involves a flow sequence between all layers, with lowest level layer receiving the input and forwarding it to highest or more abstract layer if necessary (i.e. when current layer expertise and competence cannot process or deal with input). Input information flowing from lowest to highest is referred to by &lt;i id="r_0e171"&gt;bottom-up activation&lt;/i&gt; while command flowing from highest to lowest is referred to by &lt;i id="r_0e172"&gt;top-down execution&lt;/i&gt;. This architecture is very popular due to its pragmatism and intuitive mapping from pro-active, reactive, social behaviours into specific and dedicated subsystems. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e173" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="western" lang="en-CA" id="r_0e187" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e188"   style="font-size:100%;"&gt;Taken from &lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e189" style="FONT-STYLE: italic;font-family:times new roman;" &gt;&lt;li id="r_0e190"&gt;&lt;p class="western" lang="en-CA" id="r_0e191" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;“&lt;span id="r_0e192"  style="font-size:100%;"&gt;Multiagent Systems, a Modern Approach to Distributed Modern Approach to Artifical Intelligence” Chapter 2 Mutliagents Systems and Societies of Agents, Huhns and Stephens (1999)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-8303291753718811896?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/8303291753718811896/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=8303291753718811896' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8303291753718811896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/8303291753718811896'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2004/05/software-agent-part-2.html' title='Intelligent Agent part 2: Architecture'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-5099926217869925020</id><published>2004-05-01T17:46:00.007+02:00</published><updated>2008-09-05T09:48:46.928+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Intelligent-Agent'/><title type='text'>Intelligent Agent part 1: Definition and Theory</title><content type='html'>&lt;span &gt;I did some research study for a friend of mine (no more details are possible ;-) on intelligent agents (software). This is a quite a broad area and very interesting. While doing this academic-oriented research reminded me on the period of my master degree, I must admit that working around a theoretical framework greatly contrasted with my daily work at the job... which is all about practical and not much about theoretical.&lt;br /&gt;&lt;br /&gt;I've decided to publish some of the theoretical material I've surveyed... here is the first part.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h2 class="western" lang="en-CA" id="r_0e15" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;What are intelligent agents&lt;/span&gt;&lt;/h2&gt;&lt;p class="western" lang="fr-CA" id="r_0e16" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e17"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e18" &gt;Agents are loosely defined as being a computer based system characterized by their autonomy (no direct human intervention required), their social ability allowing them to communicate with other agents or human, their reactivity allowing them to react to the changing environment and finally their pro-activeness which also permit them to take initiative to meet their goal. In fact the key characteristics of &lt;i id="r_0e19"&gt;reactivity&lt;/i&gt;, &lt;i id="r_0e20"&gt;pro-activeness&lt;/i&gt; and &lt;i id="r_0e21"&gt;social ability&lt;/i&gt; can be considered as main differentiator between “normal” agent and “intelligent” agent. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e22" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e24" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e25"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e26" &gt;Other more formal definition would also include some human alike concepts such as knowledge, belief, intention and obligation, as well as additional properties like mobility, veracity, benevolence and rationality. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e27" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e29" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e31" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e32"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e33" &gt;An important aspect of agent has to do with their surrounding environment which they operate in. To see the impact of environmental properties on agent, one can classify them as being:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e34"&gt;&lt;li id="r_0e35"&gt;&lt;p class="western" lang="fr-CA" id="r_0e36" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e37"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e38"&gt;&lt;span &gt;&lt;b id="r_0e39"&gt;Accessible/inaccessible&lt;/b&gt;: accessible environment would be one for which all states are known up-to-date and accurately. In all practical cases, the environment is inaccessible, e.g. surrounding physical world, Internet, etc. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e40"&gt;&lt;p class="western" lang="fr-CA" id="r_0e41" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e42"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e43"&gt;&lt;span &gt;&lt;b id="r_0e44"&gt;Deterministic/non-deterministic&lt;/b&gt;: except for the most trivial case, agents has only partial and non-deterministic control over their environment are, i.e. same action performed twice on seemingly identical circumstances may appear to have different consequences. Although non-deterministic lead to more complex system, to all intents and purposes it is recognized that a highly complex deterministic environment is just as difficult as a non-deterministic. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e45"&gt;&lt;p class="western" lang="fr-CA" id="r_0e46" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e47"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e48"&gt;&lt;span &gt;&lt;b id="r_0e49"&gt;Episodic/non-episodic&lt;/b&gt;: episodic system has performance dependant only on the current discrete episode. This simplifies design since all possible scenarios and interaction in future episodes can be ignored in relation to deciding which actions are to be taken by the agents. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e50"&gt;&lt;p class="western" lang="fr-CA" id="r_0e51" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e52"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e53"&gt;&lt;span &gt;&lt;b id="r_0e54"&gt;Static/dynamic&lt;/b&gt;: static environment only observe changes in reaction to action performed by the agent, in most situation other unknown/known processes operate on the environment making it dynamic. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e55"&gt;&lt;p class="western" lang="fr-CA" id="r_0e56" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e57"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e58"&gt;&lt;span &gt;&lt;b id="r_0e59"&gt;Discrete/continuous&lt;/b&gt;: Discrete environment implies only a finite number of actions and percept to be possible. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="western" lang="en-CA" id="r_0e60" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e62" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e63"   style="font-size:100%;"&gt;It is recognised that with respect to building agent, most complex class of environment are those that are inaccessible, non-deterministic, non-episodic, dynamic and continuous. &lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e64" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e66" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 class="western" lang="en-CA" id="r_0e68" align="justify"&gt;&lt;span id="r_0e69"   style="font-size:130%;"&gt;Agent theory &lt;/span&gt;&lt;/h1&gt;&lt;p class="western" lang="fr-CA" id="r_0e70" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e71"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e72" &gt;A substantial part of agent theories are derived around the concept of intentional system, i.e. system with behaviour that are predicted based on similar human type attitudes: belief and knowledge (referred to as information category), and desire, intention, obligation, commitment and choice (referred to as pro-attitudes). Following this concept, merely all objects from the most simples automata-like objects to the most complex ones, can be described by having some form of intentional stance. This fact helps to provide a level of abstraction useful when dealing with the complexity of the latter. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e73" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e75" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e76"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e77" &gt;As “compelling” as the intentional notions are for an intuitive representation, description, understanding and explanation of agent based system, it can certainly represent a difficult challenge when one wishes to reason about this inside a logical theoretical framework. Theory for representing intentional notion cannot be based using classical relying on truth functional operator, because this notion is said to be &lt;i id="r_0e78"&gt;referential opaque&lt;/i&gt;. Substitution rule applicable to first order logic are not possible with intentional sentence such as “Janine believes p”, since replacing p with an equivalent will not preserve meaning. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e79" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e81" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e82"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e83" &gt;Because of this limitation, other formalisms have been proposed for handling the syntactic rules and the semantic model associated with intentional system. One of the best known semantic model is characterized by the so-called “possible worlds” which is supported by an attractive mathematical tools called the “correspondence theory”. However as compelling as this model is for its logic representation, it suffers from limitations related to the famous “logical omniscience” (see problem due to infinite knowledge caused by statement logical tautology). In this 1995 study, the authors recognized that alternatives theories developed for either belief/knowledge representation (information attitudes) or goals/desire (pro-attitudes) all suffer from various deficiencies and/or limitations representing challenges to the agent theorist. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e84" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e86" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e87"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e88" &gt;A more useful and complete theory for agent system should not only try representing the intentional stance but should also try embracing a larger logical framework interested in other components such as the dynamic aspects of agency, the relationship between the agent’s information and its pro-attitudes, the cognitive states change over time and reaction to the environment stimuli, etc. Some tentative work aims to achieve this very challenging task. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="en-CA" id="r_0e89" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="western" lang="fr-CA" id="r_0e91" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span id="r_0e92"  style="font-size:100%;"&gt;&lt;span lang="en-CA" id="r_0e93" &gt;Of particular interest is communication between agents, which are modelled using the “speech act theory” stating that all communications are considered as actions performed to bring change to the world (usually to the listener internal state). This theory attempts to classify between the various forms of speech acts, with the two prominent ones being &lt;i id="r_0e94"&gt;representative &lt;/i&gt;speech act for informing objectives and the &lt;i id="r_0e95"&gt;directives&lt;/i&gt; one for requesting objective. See Multiagents system discussion below.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="western" lang="en-CA" id="r_0e2" style="LINE-HEIGHT: 100%; FONT-STYLE: italicfont-family:times new roman;" align="justify" &gt;&lt;span id="r_0e3"   style="font-size:100%;"&gt;Taken from &lt;/span&gt;&lt;/p&gt;&lt;ol id="r_0e4" style="FONT-STYLE: italic;font-family:times new roman;" &gt;&lt;li id="r_0e5"&gt;&lt;p class="western" lang="en-CA" id="r_0e6" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;“&lt;span id="r_0e7"  style="font-size:100%;"&gt;Intelligent Agents: Theory and Practice”, Wooldridge and Jennings (1995)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li id="r_0e8"&gt;&lt;p class="western" lang="en-CA" id="r_0e9" style="LINE-HEIGHT: 100%" align="justify"&gt;&lt;span &gt;“&lt;span id="r_0e10"  style="font-size:100%;"&gt;Multiagent Systems, a Modern Approach to Distributed Modern Approach to Artifical Intelligence” Chapter 1 Intelligent Agents, Wooldridge (1999)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-5099926217869925020?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/5099926217869925020/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=5099926217869925020' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5099926217869925020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/5099926217869925020'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2004/05/software-agent-part-1.html' title='Intelligent Agent part 1: Definition and Theory'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114210693118124036</id><published>2003-03-11T20:55:00.000+01:00</published><updated>2008-05-04T17:43:24.707+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>Data Warehouse Modeling guideline Part 3: Aggregate Data Modeling</title><content type='html'>Here's the third and final part of my guideline,  ....this time I'm covering very briefly a complex subject : the aggregation strategy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.        A first level of aggregation should be built on top of the atomic database level, mainly for 1) boosting query performance done on atomic data, 2) for storing pre-calculate KPI which are usually aggregated data, and optionally to archiving historical data not kept at atomic level.&lt;br /&gt;&lt;br /&gt;2.        The first level aggregation is best when in the same infrastructure as the atomic level (i.e. relational model).  It can be accompanied with a second-level which uses OLAP independent Cube technologies.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Dimension Entity&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.       Two roles dimension&lt;br /&gt;&lt;br /&gt;1.1.      In the context of a migration count aggregation, only the dimension of interest must have the dual roles (Origin and Destination), all other dimension functionally dependent on the migration i.e. are modified after the migration, must be defined and fixed as either Origin or Destination.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fact Entity&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.        Definition of the type of fact&lt;br /&gt;&lt;br /&gt;1.1.      In aggregation the rule of not mixing two types of facts into the table (instantaneous event-based vs. interval or end of period snapshot-based) can be violated.  This is because aggregation usually needs to provide a wealth of information and because there is a need to limit the number of aggregate to build/maintain&lt;br /&gt;&lt;br /&gt;1.2.      (1.1 continued) The mix can only be possible under the condition that it does not affect the granularity.  Granularity must always be fixed, i.e. a state-based EOP aggregation cannot accept event-based counts if these affect the subscriber-EOP by axis grain.&lt;br /&gt;&lt;br /&gt;1.3.      (1.1 continued) If any event measure affect the grain (may potentially require to have BOP by axis to be represented because number of subs that have cancelled some conditions may not exist in the original grain) then it can't be integrated.  In this case, it is much more suited to use OLAP Cube which deal easily with the BOP-EOP comparison.&lt;br /&gt;&lt;br /&gt;1.4.      (1.1 continued) Furthermore, great care must be applied in doing this, because the occurrence of all axis is inconsistent, event should track occurrence of axis at the time of the event while EOP state number track them at the EOP snapshot time.  This implies that computation between measures is not possible by axis.&lt;br /&gt;&lt;br /&gt;2.        Definition of Measures&lt;br /&gt;&lt;br /&gt;2.1.      In the aggregation, it is common practice to store explicitly independent measures (e.g  # of active subs, # of ghost subs, or Nb of sms, Nb of normal calls) that correspond to various dimension condition.  This helps decreasing the granularity of the aggregation table and ignores the dimensions only needed to identify the independent measures.&lt;br /&gt;&lt;br /&gt;Martin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22646646-114210693118124036?l=martin-ouellet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martin-ouellet.blogspot.com/feeds/114210693118124036/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22646646&amp;postID=114210693118124036' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114210693118124036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22646646/posts/default/114210693118124036'/><link rel='alternate' type='text/html' href='http://martin-ouellet.blogspot.com/2006/03/data-warehouse-modeling-guideline-part_11.html' title='Data Warehouse Modeling guideline Part 3: Aggregate Data Modeling'/><author><name>Martin Ouellet</name><uri>http://www.blogger.com/profile/11295081581952005995</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22646646.post-114166001710054668</id><published>2003-03-06T16:46:00.000+01:00</published><updated>2008-05-04T17:42:52.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Warehouse'/><title type='text'>Data Warehouse Modeling guideline Part 2: Fact</title><content type='html'>Here's the second part of my small ad-hoc modeling guideline applicable to data warehouse using relational database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Fact Entity&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1.       Definition of the type of fact&lt;/strong&gt;&lt;br /&gt;1.1.      Never mix two types of facts into the same fact table (instantaneous event-based vs. interval or end of period snapshot-based).   Exceptions to this rule are frequent in the aggregation layer (see rule in Aggregation section).&lt;br /&gt;&lt;br /&gt;1.2.      Dimension definition must restrict the use of this dimension to fact of same nature (e.g. a dimension defining transaction type must not be tied into snapshot fact type).&lt;br /&gt;&lt;br /&gt;1.3.      (1.2 continued) The nature of the dimension must be clear enough, in other words its definition should not depend on the fact it is tied to.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.       Definition of Measures&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;2.1.      Store an attribute as measure into the fact table only when this detail info is necessary (e.g. for legal issues) but no end-user query will use this as constraint.&lt;br /&gt;&lt;br /&gt;2.2.      Every limited value space attribute should be designed as dimension and not measure.&lt;br /&gt;&lt;br /&gt;2.3.      Try avoiding the use of intelligent measure taking a contextual meaning linked to some business rule.  All measures should be modeled denormalised even if this implies space wastage.&lt;br /&gt;&lt;br /&gt;2.4.      (2.3 continued) Because these are usually encapsulated into "hidden flag", it is subject to misunderstanding and misuse in the report.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3.       Dimension choice to tie with fact&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;3.1.      All dimensions that qualify the facts should be present in
