<?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-699828515576400912</id><updated>2012-01-24T12:35:42.595+02:00</updated><category term='Microsoft'/><category term='Andrei'/><category term='doxygen'/><category term='alphabetical ordering'/><category term='bug'/><category term='Explorer'/><category term='IT'/><category term='web development'/><category term='Customer satisfaction'/><category term='hell'/><category term='Cluj Napoca'/><category term='Categories'/><category term='stupidity'/><category term='Seach'/><category term='shortcut'/><category term='library'/><category term='string'/><category term='C++'/><category term='auditing'/><category term='Cumpara noaptea'/><category term='Virtual Office'/><category term='monitor'/><category term='template parameter'/><category term='Software'/><category term='email'/><category term='HR'/><category term='Settings'/><category term='Bad UI'/><category term='review'/><category term='Directories'/><category term='WinAPI'/><category term='Yahoo'/><category term='comments'/><category term='IM'/><category term='VS 2008'/><category term='TV'/><category term='teachers'/><category term='C++ Programming'/><category term='office'/><category term='goolag'/><category term='law'/><category term='Category Explorer'/><category term='programming'/><category term='guru'/><category term='Logging'/><category term='implementation'/><category term='Fun'/><category term='Search'/><category term='checking email'/><category term='Blogging'/><category term='beta'/><category term='Development'/><category term='Night Buyers'/><category term='copyright'/><category term='MFC'/><category term='C++ Tips'/><category term='features'/><category term='server'/><category term='Livrare la domiciliu'/><category term='Persisting'/><category term='Nerd'/><category term='Boost'/><category term='egui'/><category term='Education'/><category term='management'/><category term='google'/><title type='text'>code @ work</title><subtitle type='html'>I'm getting in touch with my virtual self. Making my thoughts go digital. Just in case I need to later do a search on them...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-5262831327047050224</id><published>2012-01-24T11:04:00.002+02:00</published><updated>2012-01-24T11:24:46.117+02:00</updated><title type='text'>I'm back!</title><content type='html'>... not that I had gone anywhere...&lt;br /&gt;&lt;br /&gt;In the last 4 years, I've been involved in a &lt;span style="font-weight: bold;"&gt;lot&lt;/span&gt; of projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I've worked for Alonia (www.alonia.ro)&lt;/li&gt;&lt;li&gt;I've worked on Windows Mobile&lt;/li&gt;&lt;li&gt;I've worked on some poker related projects&lt;/li&gt;&lt;li&gt;I've done some pretty cool QT GUIs&lt;/li&gt;&lt;li&gt;Done some heavy low-level Windows-hooks programming&lt;/li&gt;&lt;li&gt;Some C# and Java&lt;/li&gt;&lt;li&gt;Some Linux (even though Windows is still my favorite)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The same holds true for all projects, no matter what language: the KISS principle (Keep It Simple, Stupid). If it's simple, you can maintain, fix, extend it as easy as a breeze!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another word of advice - if it's a constant, make it a runtime setting! Can't explain how easy this can make your life! Instead of recompiling to see what happens if "we're using a 100Mb cache instead of 50Mb", just change one line of text, re-run, and boom - you know it!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Well, that's it for now, cya soon!&lt;/p&gt;&lt;p&gt;Best,&lt;br /&gt;John&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/699828515576400912-5262831327047050224?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/5262831327047050224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=5262831327047050224' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5262831327047050224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5262831327047050224'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2012/01/im-back.html' title='I&apos;m back!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7305900597447496630</id><published>2008-06-15T23:28:00.001+03:00</published><updated>2008-06-16T01:54:20.288+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teachers'/><category scheme='http://www.blogger.com/atom/ns#' term='Education'/><title type='text'>Don't let teachers interfere with your education...</title><content type='html'>They usually say "Don't let school interfere with your education..." - but school is only part of the problem.&lt;br /&gt;&lt;br /&gt;You grow up being told that School is the ultimate tool to crave our future, and we need to obey School. You need to learn everything they teach in School. You need to get good grades, you can't skip School, and so on...&lt;br /&gt;&lt;br /&gt;Our parents tell us that we need to respect the Teachers. You can't be a troublesome kid, "do what the Teacher tells you to" - and that's how the problem develops.&lt;br /&gt;&lt;br /&gt;We, as kids, see that Teachers are the &lt;span style="font-style: italic;"&gt;authority&lt;/span&gt;. If the Teacher says X, you do X.&lt;br /&gt;&lt;br /&gt;But worst of all, the Teacher has the right to say "You &lt;span style="font-style: italic;"&gt;failed &lt;/span&gt;this exam. Yes, the Teacher has the holy right to &lt;span style="font-style: italic;"&gt;fail &lt;/span&gt;you - and you'll need to take the exam again and again, until he decides you can pass.&lt;br /&gt;&lt;br /&gt;(side-note: this is seen much clearer in Universities/Colleges, as opposed to High Schools/Primary or Secondary School)&lt;br /&gt;&lt;br /&gt;Teachers know this, and a very lot of them overuse this power. It's going to their head - a lot of Teachers consider themselves  as &lt;span style="font-style: italic;"&gt;super-beings&lt;/span&gt;. Most of them think that the class they teach is a must - you will never succeed in life without their precious advices. And since they have the power to &lt;span style="font-style: italic;"&gt;fail &lt;/span&gt;you, they can subtly force you do stuff you normally don't need to do. Like, in Romania, it's common use for a University Teacher to force you to buy his book (or, you won't pass the exam) - and most such books, just between you and me, are crap.&lt;br /&gt;&lt;br /&gt;In Romania (and it seems quite often abroad as well), attending courses is obligatory. That is plain stupid, to say the least. What if I can learn by myself? What if I have something better to do? Give me a &lt;span style="font-style: italic;"&gt;fair &lt;/span&gt;exam at the end of the semester, and &lt;span style="font-style: italic;"&gt;be objective&lt;/span&gt;. How I study your courses - that's my problem. Why do you have to force me attend your courses? Holy Teacher, is this the best you can do?&lt;br /&gt;&lt;br /&gt;But the cherry on the top - if you fail an exam, you need to take it again and again until you pass it (and sometimes you need to re-take the courses over and over). To this, I have a simple question: "Why?"&lt;br /&gt;&lt;br /&gt;Why do You have to decide for &lt;span style="font-style: italic;"&gt;me&lt;/span&gt; if a class is important to &lt;span style="font-style: italic;"&gt;me&lt;/span&gt;? Just to show me that I'm &lt;span style="font-style: italic;"&gt;small &lt;/span&gt;and you're &lt;span style="font-weight: bold;"&gt;BIG&lt;/span&gt;. So that You'll show me who's the authority... We all know we need to respect authority. We all know we need to respect Teachers.&lt;br /&gt;&lt;br /&gt;Well, not me - I &lt;span style="font-weight: bold;"&gt;don't respect &lt;/span&gt;teachers - just because they're teachers. You, as teacher, need to &lt;span style="font-weight: bold;"&gt;earn &lt;/span&gt;my respect - I don't respect you by default.&lt;br /&gt;&lt;br /&gt;Getting back to the problem at hand - why can't the school let you graduate with some exams failed? Fine, I failed some exams - I don't care - it's most likely classes I never cared, nor will ever care about. At the end of the school, just give me a diploma, and write my grades on it - if anybody want's to know, they'll check that. It's my interest we're talking about - if I fail an exam I care about, I'll feel ashamed, and take that course again because &lt;span style="font-style: italic;"&gt;I want to&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;School - as is right now, is obsolete - and I'm not talking about Romania here. Instead of forcing you to obey (which is what schools do now), they should show you free will. It's very hard to have free will if all your life you've been taught to obey.&lt;br /&gt;&lt;br /&gt;Just think about it, when for your work, you attend a one-week course, those teachers are really amazing and they do everything in their power to make you understand. And at the end of the course, &lt;span style="font-style: italic;"&gt;You give a grade to your teacher&lt;/span&gt;. That's how it should be.&lt;br /&gt;&lt;br /&gt;Because, if we come to think of school as a business,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the teachers are the employees&lt;/li&gt;&lt;li&gt;the students are the customers&lt;/li&gt;&lt;li&gt;and the customer is always right&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So, in the end,&lt;br /&gt;&lt;br /&gt;If you're a teacher, remember&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you're not a super-being, and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;not all the students care about your class - this is ok, those that really care, will actually learn/be interested about your class&lt;br /&gt;&lt;/li&gt;&lt;li&gt;failing students will not help them&lt;br /&gt;&lt;/li&gt;&lt;li&gt;if you truly care about what you teach, make sure your classes are interactive, and that you actually care about what your students have to say&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If you're a student, remember:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you don't need to respect a teacher just because he's a teacher&lt;/li&gt;&lt;li&gt;focus on the classes that you care about&lt;/li&gt;&lt;li&gt;you can learn a lot by yourself from books - often better than what teachers teach&lt;br /&gt;&lt;/li&gt;&lt;li&gt;university (lowercase "u") is not the holy grail - don't let teachers interfere with your education...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7305900597447496630?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7305900597447496630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7305900597447496630' title='51 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7305900597447496630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7305900597447496630'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/06/dont-let-teachers-interfere-with-your.html' title='Don&apos;t let teachers interfere with your education...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>51</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6871607580648812055</id><published>2008-06-04T03:07:00.000+03:00</published><updated>2008-06-04T03:12:26.858+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='egui'/><title type='text'>eGUI++ - Easy GUI for C++</title><content type='html'>Hey guys,&lt;br /&gt;&lt;br /&gt;It's finally here: eGUI++ (Easy GUI for C++). It's the follower of win32gui, much easier to use, much simpler, cool code-completion, events are very simple to use, and a lot more goodies.&lt;br /&gt;&lt;br /&gt;Read about it on &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc534994.aspx"&gt;MSDN&lt;/a&gt;&lt;br /&gt;And download it from &lt;a href="http://torjo.com/egui"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6871607580648812055?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6871607580648812055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6871607580648812055' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6871607580648812055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6871607580648812055'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/06/egui-easy-gui-for-c.html' title='eGUI++ - Easy GUI for C++'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2678437042781831879</id><published>2008-05-24T14:41:00.000+03:00</published><updated>2008-05-24T15:29:44.206+03:00</updated><title type='text'>Craving for more?</title><content type='html'>When describing desires, people fall into 2 categories:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Person F&lt;/span&gt;, who has an income of 4500 euros, or 4700, but strives for 5000 euros&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Person M&lt;/span&gt;, who has an income of 4600 euro, but strives for 400 more euros&lt;/li&gt;&lt;/ul&gt;Person F strives for a fixed amount, while Person M strives for more X euros. Do you see a fundamental difference here?&lt;br /&gt;&lt;br /&gt;If not, let me give you a slightly different example. Say you're looking for a new job, and before going to any interviews, you said: "I'm targeting 5000 euros".&lt;br /&gt;&lt;br /&gt;You get 2 offers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Offer 1: 4800 euros, flexible hours, not very stressful&lt;/li&gt;&lt;li&gt;Offer 2: 5500 euors, 9-to-5 hours, with the possibility of aprox 20% overtime&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Person F will choose Offer 1, while Person M will choose Offer 2.&lt;br /&gt;&lt;br /&gt;Before delving into more details, let me give you the facts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;there are a lot more of Person M in the universe&lt;/li&gt;&lt;li&gt;Person F live a quite happier life than Person M&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;span style="font-style: italic;"&gt;fundamental &lt;/span&gt;difference between Person F and Person M is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Person F has a &lt;span style="font-weight: bold;"&gt;fixed &lt;/span&gt;goal, knows when the goal is reached (in our case, the 5000 euros/mo), and takes the time to enjoy it, before eventually moving on to other goals&lt;/li&gt;&lt;li&gt;Person M will always want &lt;span style="font-weight: bold;"&gt;more&lt;/span&gt;, even if he reaches 6 or 7000 euros (while also ending up working more and being more stressed)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There's something very comforting about reaching a goal, and slowing down for a while, just to enjoy it.&lt;br /&gt;&lt;br /&gt;The trouble with being a Person M, is that it unconsciously means &lt;span style="font-style: italic;"&gt;more &lt;/span&gt;work on your part. You &lt;span style="font-style: italic;"&gt;want &lt;/span&gt;more, you need to &lt;span style="font-style: italic;"&gt;do &lt;/span&gt;more. The fundamental difference is that Person F understands this, while Person M doesn't (and doesn't know when to stop).&lt;br /&gt;&lt;br /&gt;What type are you, and, if you're a Person M, are you willing/do you want to change?&lt;br /&gt;&lt;br /&gt;P.S. It's my birthday today, so Happy Birthday to meee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2678437042781831879?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2678437042781831879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2678437042781831879' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2678437042781831879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2678437042781831879'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/05/craving-for-more.html' title='Craving for more?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8284499214223830575</id><published>2008-05-15T16:01:00.000+03:00</published><updated>2008-05-15T16:21:10.572+03:00</updated><title type='text'>The ancients and their fax machines...</title><content type='html'>Personally, I don't understand people that still use the fax. It truly denotes a lot of stupidity on their part, when email is soooooooo much better.&lt;br /&gt;&lt;br /&gt;Email is so much easier :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;to store&lt;/li&gt;&lt;li&gt;to copy&lt;/li&gt;&lt;li&gt;to search&lt;/li&gt;&lt;li&gt;to send/receive&lt;/li&gt;&lt;li&gt;to categories&lt;/li&gt;&lt;li&gt;to forward&lt;/li&gt;&lt;li&gt;the service is 99.99% available&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And who can be so stupid to use the fax? At least the following: the Romanian Pu(b)lic Administration. Unfortunately, they're not alone: there are other idiots that use it (like, Grupul de Presa Roman, aka, Romania Libera).&lt;br /&gt;&lt;br /&gt;When I hear of an organization that uses the fax, a bell rings - this clearly has quite a few employees that are there just to slow down a process.&lt;br /&gt;&lt;br /&gt;Unfortunately, you do need to deal with idiots now and then. I used to be very pissed before, since I don't have a fax and had to go to the Post Office to send faxes.&lt;br /&gt;&lt;br /&gt;Well, finally, I'm using www.efax.com to send my faxes online. They haven't payed me for advertising, I'm just happy they exist - I've sent a few faxes using their service, and amazingly, it works. Just one less stress for me :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8284499214223830575?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8284499214223830575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8284499214223830575' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8284499214223830575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8284499214223830575'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/05/ancients-and-their-fax-machines.html' title='The ancients and their fax machines...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-797409881655025925</id><published>2008-04-23T01:57:00.000+03:00</published><updated>2008-04-23T02:03:04.324+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><title type='text'>Yahoo Mail is plain stupid...</title><content type='html'>I don't care what you think, but the fact that yahoo has email addresses like someone@yahoo.co.uk, or someone@yahoo.it, etc. - that's &lt;span style="font-weight: bold;"&gt;completely &lt;/span&gt;idiotic.&lt;br /&gt;&lt;br /&gt;Why do I need to remember, besides the username, the yahoo extension? It's like saying "Hey, his name is James, but you need to call him James Jayjay before he answers".&lt;br /&gt;&lt;br /&gt;I really don't care about Yahoo's history, but this should not exist. If it's yahoo, it should be "yahoo.com". I'm more and more inclined to forget about Yahoo completely. Really.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-797409881655025925?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/797409881655025925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=797409881655025925' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/797409881655025925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/797409881655025925'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/04/yahoo-mail-is-plain-stupid.html' title='Yahoo Mail is plain stupid...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-9121428687016865497</id><published>2008-04-18T05:38:00.000+03:00</published><updated>2008-04-18T06:30:49.386+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogging'/><title type='text'>Addicted to blogging?</title><content type='html'>It seems that more and more bloggers have their blogs crowded - that is, 3-6 blog entries per day, or more. Probably they think they'll get more readers that way (the law of the big numbers - I will write more, so that a reader will find at least something I wrote interesting).&lt;br /&gt;&lt;br /&gt;(side-note: I'm not talking about "magazine-like" blogs, where more authors write to the same blog; I'm talking about a single author's blog)&lt;br /&gt;&lt;br /&gt;Well, for some, this has definitely proved to be a winning strategy. But for the rest, this is a waste of time twofold:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;for the blogger, that wastes time finding stories to tell (having links to other blogs, etc)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;for the reader, trying to find something useful, but finding just "cover-stories"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Why am I saying this?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today I unsubscribed from 6 blogs. I value my time, and I don't want to waste it reading pointless stories.&lt;br /&gt;&lt;br /&gt;I really value bloggers that write 1 post every 1-2 days, or even more seldom: &lt;a href="http://www.joelonsoftware.com/"&gt;Joel&lt;/a&gt;, &lt;a href="http://sethgodin.typepad.com/seths_blog/"&gt;Seth&lt;/a&gt;, &lt;a href="http://steve-yegge.blogspot.com/"&gt;Stevey&lt;/a&gt;, etc.&lt;br /&gt;&lt;br /&gt;When I read a story, I see that they took the time to write and refine it. I know reading their posts is not a waste of my time. They give me "The Wow! effect" (I'll blog about this later).&lt;br /&gt;&lt;br /&gt;So, why not write less, but say more?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-9121428687016865497?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/9121428687016865497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=9121428687016865497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9121428687016865497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9121428687016865497'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/04/addicted-to-blogging.html' title='Addicted to blogging?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1916164192439307931</id><published>2008-04-16T11:43:00.000+03:00</published><updated>2008-04-16T11:57:43.738+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Customer satisfaction'/><title type='text'>Answering thy phone...</title><content type='html'>Seth Godin makes a very valid point. And it's happened to me quite a few times - someone bored answering the phone, not giving me the information I need, etc.&lt;br /&gt;&lt;br /&gt;The solution?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Conversations need to be recorded&lt;/li&gt;&lt;li&gt;Bad feedback&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;must reach management; his needs to happen right away - if you can't forward the person directly to a manager, forward him the recording of the call&lt;/li&gt;&lt;li&gt;when receiving bad feedback, ask the caller for a phone no. or email, so that you can later reach him/her&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Allow your customers to rate the person they talked to. I've seen this happen for some enterprise corporations like IBM, HP - kudos to them!&lt;/li&gt;&lt;li&gt;The marks your phone operators get - record them, and also forward them back to the phone operators&lt;/li&gt;&lt;li&gt;Have rewards for operators that are rated best&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It's not that hard, you just need to truly care for your customers...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1916164192439307931?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sethgodin.typepad.com/seths_blog/2008/04/who-answers-t-1.html' title='Answering thy phone...'/><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1916164192439307931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1916164192439307931' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1916164192439307931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1916164192439307931'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/04/answering-thy-phone.html' title='Answering thy phone...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1672656749897728785</id><published>2008-03-31T23:55:00.000+03:00</published><updated>2008-04-01T05:24:24.823+03:00</updated><title type='text'>IM versus Phone</title><content type='html'>I enjoy IM much more than phone. Of course phone is best at times.&lt;br /&gt;&lt;br /&gt;However, mostly, I really enjoy IM&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IM doesn't have the "urgency" attached to it - I can solve a request on my own time&lt;/li&gt;&lt;li&gt;IM is logged by default (while phone is not recorded by default)&lt;/li&gt;&lt;li&gt;sometimes you forget things over the phone, while with an IM, you can later remember them&lt;/li&gt;&lt;/ul&gt;What do you enjoy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1672656749897728785?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1672656749897728785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1672656749897728785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1672656749897728785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1672656749897728785'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/im-versus-phone.html' title='IM versus Phone'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-501087351354586859</id><published>2008-03-22T17:23:00.000+02:00</published><updated>2008-03-22T17:26:35.613+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seach'/><title type='text'>Thy Visual search... - update</title><content type='html'>After a few more clicks, I found out there's another 3d search engine: &lt;a href="http://www.spacetime.com/"&gt;www.spacetime.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First of all, this works &lt;span style="font-weight: bold;"&gt;now&lt;/span&gt;. I downloaded it, it's really really cool. I did find a few bugs, but it's understandable. So, prepare for the &lt;a href="http://www.spacetime.com/"&gt;next era of browsing...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-501087351354586859?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/501087351354586859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=501087351354586859' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/501087351354586859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/501087351354586859'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/thy-visual-search-update.html' title='Thy Visual search... - update'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2669747543427874173</id><published>2008-03-22T16:33:00.000+02:00</published><updated>2008-03-22T16:43:59.829+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><title type='text'>Thy Visual search...</title><content type='html'>I've just seen it - &lt;a href="http://www.searchme.com/"&gt;www.searchme.com.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It shows you search results, visually.&lt;br /&gt;&lt;br /&gt;It's quite amazing, not sure if others had the same idea before, but I think this one came at the right time:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a lot of people have broadband (which you need in order for the search results to be visual)&lt;/li&gt;&lt;/ul&gt;I do believe it can improve your searches, but I need to check it out live, before making further comments. &lt;a href="http://www.searchme.com/"&gt;Take a look!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2669747543427874173?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2669747543427874173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2669747543427874173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2669747543427874173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2669747543427874173'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/thy-visual-search.html' title='Thy Visual search...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4771888877082522558</id><published>2008-03-20T15:14:00.000+02:00</published><updated>2008-03-20T15:51:08.865+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='checking email'/><title type='text'>Email: Check for messages when?</title><content type='html'>Yup, most (if not all) email readers have a "feature" : Check for email messages every X minutes.&lt;br /&gt;&lt;br /&gt;That's a misfeature:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;if you check it too often (like every 10 mins), you get bugged too many times (usually you hear a sound and some message near the system tray)&lt;/li&gt;&lt;li&gt;if you check it too seldom (like, every 2-3 hours), you could find out about stuff too late; things could get worse if the email server is down exactly when you check it (happened to me a few times)&lt;/li&gt;&lt;li&gt;the program should alert you only when &lt;span style="font-style: italic;"&gt;emails that interest you &lt;/span&gt;arrive (see below)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Email checking should be done every 5 minutes (this is a reasonable default, you should be able to customize it).&lt;br /&gt;&lt;br /&gt;However, &lt;span style="font-weight: bold;"&gt;alerting you&lt;/span&gt; when new messages arrive, that's a completely different matter (in other words, the mail reader can check and download new messages every minute if it wants to, but it can tell me about new messages every hour).&lt;br /&gt;&lt;br /&gt;New email messages can be split into 2 categories:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;message from someone you already know, related to some matter you probably know&lt;/li&gt;&lt;li&gt;message from someone you don't know yet (so you don't yet know how you should react)&lt;/li&gt;&lt;/ol&gt;In the first case, you'll have your filters (don't you use filters? you'd better learn how to use them fast!) sort the email and put it into some folder.&lt;br /&gt;&lt;br /&gt;In the latter case, new email will just go into the root folder, which is usually ok anyway.&lt;br /&gt;&lt;br /&gt;Having that, here's what should happen:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;For certain folders, you can have an alert (when a message gets routed to a folder, play a sound).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Otherwise, let the program alert you every hour or so (of new mail)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Now this is a huge advantage over what's happening today. Imagine this: you can instruct your colleagues, partners, etc. to include '[critical]' in the email subject to let you know of something that is indeed critical. Then, when something really urgent hits, you'll know in 2-3 minutes, helping you deal with it ASAP. And you know that the earlier you solve a critical issue, the less damage it does - every minute could count!&lt;br /&gt;&lt;br /&gt;What is achievable now:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;there's an extension for Thunderbird: "Mailbox Alert" which can trigger an action when a new email arrives into a certain folder (the case 1 above)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;anyway, every hour or so, I read new mail (the case 2 above)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Well, it's as close as I could get to perfection ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-4771888877082522558?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4771888877082522558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4771888877082522558' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4771888877082522558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4771888877082522558'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/email-check-for-messages-when.html' title='Email: Check for messages when?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-893521992010244562</id><published>2008-03-19T13:52:00.000+02:00</published><updated>2008-03-19T14:27:32.278+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><title type='text'>We're gonna implement that cool feature! Great, but who's gonna use it?</title><content type='html'>Assume you're a programmer, part of team A to develop product B. You have release X.Y.Z coming up in 2 months, and there's plenty of features to develop. So, lets make up the list of features to develop, for release X.Y.Z.&lt;br /&gt;&lt;br /&gt;A lot of companies these days are democratic - they will create some great meeting(s), involving all the team, and then deciding what (features) to implement next. Then, go ahead and do them, and as release approaches, well, just drop some features (those too hard to implement).&lt;br /&gt;&lt;br /&gt;Sounds (&lt;span style="font-style: italic;"&gt;too&lt;/span&gt;) familiar?&lt;br /&gt;Well, I'm here to tell you - &lt;span style="font-weight: bold;"&gt;it's wrong&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;No matter how democratic a company is, when deciding the features to implement, this should be up to the User Experience department.&lt;br /&gt;&lt;br /&gt;Why? Because programmers will just choose the features that sound coolest for &lt;span style="font-style: italic;"&gt;them &lt;/span&gt;to implement, not with the &lt;span style="font-style: italic;"&gt;benefit to the user &lt;/span&gt;in mind. It's very hard for a programmer to &lt;span style="font-style: italic;"&gt;think like a user&lt;/span&gt;, and even if you think you do, you're too close to the code.&lt;br /&gt;&lt;br /&gt;The features should be in line with your customers' needs, and the priority of the features should always match those needs.&lt;br /&gt;&lt;br /&gt;The challenge for you, the programmer, is &lt;span style="font-style: italic;"&gt;to make it happen&lt;/span&gt;. It's good to be under a bit of pressure, so that&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you'll talk to the User Experience department to understand what this feature offers the user, to implement it right&lt;/li&gt;&lt;li&gt;you can focus on using the best tools (as opposed to subjective thoughts like, I'm not using Language X because it lacks A,B,C)&lt;/li&gt;&lt;li&gt;you can shift focus on getting things done. We programmers tend to spend a lot of time blabbering about which technology is cooler/better/etc. - but it doesn't matter. You first need to understand the problem, and then choose the technology you'll use to solve it (not the other way around)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-893521992010244562?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/893521992010244562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=893521992010244562' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/893521992010244562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/893521992010244562'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/were-gonna-implement-that-cool-feature.html' title='We&apos;re gonna implement that cool feature! Great, but who&apos;s gonna use it?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6466674021382923733</id><published>2008-03-13T05:03:00.003+02:00</published><updated>2008-03-18T14:00:38.130+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Category Explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='Directories'/><category scheme='http://www.blogger.com/atom/ns#' term='Categories'/><title type='text'>Directories - a flawed concept...</title><content type='html'>&lt;p class="MsoNormal"&gt;Yes, I'm talking about thy usual directory. Or &lt;i&gt;folder&lt;/i&gt;, if you wish. What your OS provides you with. And you explore with "Windows Explorer", or some clone, or some *nix tools.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;It's a concept invented by a programmer, long long time ago, and I'm sure it seemed a very nice idea at the time - a way to structure files. And to us, the programmers, folders are 2nd nature - it's so much in our blood, that we never question it.&lt;br /&gt;&lt;br /&gt;It's a &lt;b&gt;flawed &lt;/b&gt;concept!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why?&lt;/b&gt;&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;br /&gt;Because finding a file is just too hard:&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;the user needs to know too      much about the file's location - basically, he needs to know &lt;i&gt;all the      path leading up to it&lt;/i&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;or, he needs to search for      it (which takes CPU time, he could be searching in the wrong place, etc)&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;when dealing with multiple      files/ locations, there's too much burden - on where which file/folder is&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;But now, the root problem: &lt;b&gt;an item (i.e., file) can and usually belongs to more than one place.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The examples are endless:&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;that Excel report you just      made for HR, belongs to at least 2 categories: &lt;i&gt;HR&lt;/i&gt; and &lt;i&gt;Reports&lt;/i&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;that cool header file you      just added to your project, belongs to at least 2 categories: &lt;i&gt;Headers&lt;/i&gt;      and  &lt;i&gt;[ModuleName]&lt;modulename&gt;&lt;/modulename&gt;&lt;/i&gt; (the module it's for)&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;that movie you just saw      belongs to lots of categories: &lt;i style=""&gt;Movies&lt;/i&gt;,      &lt;i style=""&gt;SF&lt;/i&gt;, &lt;i style=""&gt;Thriller&lt;/i&gt;, &lt;i style=""&gt;Kevin Spacey&lt;/i&gt;,      etc&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;just rethink a bit about      some of your files: you'll find at least one more category than the one      they're in&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style=""&gt;Directories just show a too-limited view of the world...&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Workaround #1: Shortcuts, Hard Links, Soft Links&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;... are just a workaround for a flawed way of storing information. Each file that is somewhat important to you would need &lt;i style=""&gt;a few &lt;/i&gt;shortcuts. You’d end up having hundreds or thousands of shortcuts. But who has the time to create them? And then, when you move/rename a file, then what?&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Workaround #2: Virtual Folders&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;... same thing (virtual folder = the results of a search, shown as a folder). This is not what you want. It’s not as if every movie name has “movie” as its prefix so that a search for “movie” will return all movies...&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;The solution: Categories and Aliases&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As I already pointed out, &lt;b style=""&gt;categories &lt;/b&gt;are a much more meaningful way of storing information. Most information belongs to more than one category.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;br /&gt;Aren’t familiar with the term &lt;i style=""&gt;categories&lt;/i&gt;? Maybe you’re more familiar with other terms: &lt;i style=""&gt;labels&lt;/i&gt;, &lt;i style=""&gt;tags&lt;/i&gt;:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;when      you write a blog entry, you can specify multiple labels: it’s the same      thing – an entry can have multiple labels; a user can select a label,      and see all entries that have that label&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;when      using &lt;a href="http://digg.com/"&gt;digg&lt;/a&gt;, you use tags, with the same meaning: a certain site can belong      to multiple tags&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Google      Reader uses the term “folder”; however, when you subscribe to a feed, the      subscription can be placed into &lt;i style=""&gt;multiple      &lt;/i&gt;folders.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;All the above show how easily you can structure information into &lt;i style=""&gt;categories&lt;/i&gt;.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;But how do I browse?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Having this hierarchy-based thinking so built into us, you’ll definitely ask that. Browsing can still happen in an Explorer like fashion:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;assume      you have a root. Lets call it “/”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;expanding      the root will show some aliases; I’ll explain them in a moment (for now,      just think of them as some very clever shortcuts)&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;expanding      an alias will show categories, other possible aliases, and files&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;there      will be an alias called “Everything” – expanding it will show all      categories and all files&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;expanding      a category will show&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li class="MsoNormal" style=""&gt;all the files that are in all categories expanded      so far (including the now expanded category) and&lt;br /&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;all the other categories      that share files with all expanded categories &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;        &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;The last one is a bit tricky, so I’ll give you a &lt;a href="http://torjo.blogspot.com/2008/03/directories-flawed-concept-example-of.html"&gt;short example&lt;/a&gt;.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;What’s an alias?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;An alias is similar to a shortcut, but in the context of categories. An alias is:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;a      union of one or more categories&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;you      can treat it exactly like a category&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;An alias is just a better name, suited for you - the user, one that names what you want in a simpler way. For instance, you could call the group of categories [“&lt;i style=""&gt;Incoming" &lt;/i&gt;and "&lt;i style=""&gt;Document" &lt;/i&gt;and "&lt;i style=""&gt;Resumes&lt;/i&gt;”] as “&lt;i style=""&gt;Incoming CVs&lt;/i&gt;”.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;There’s a fundamental difference between an alias and what you currently know as a shortcut. But it’s not very relevant here, and I’ll let the diligent readers find it.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Benefits&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The benefits are too many, here are just a few:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;straightforward storage&lt;/b&gt;: the      storage is made with the you – the user – in mind; information is      organized into categories, matching the user’s thinking; when a file      logically belongs to a category, just add it there – simple,      straightforward, and easy&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;easier search&lt;/b&gt;: finding information      that belongs to several categories is as easy as expanding those      categories, and seeing what’s there. Just think how easy it can be to find      all &lt;i style=""&gt;movies &lt;/i&gt;that are &lt;i style=""&gt;SF&lt;/i&gt; and &lt;i style=""&gt;comedy.&lt;/i&gt; How about &lt;i style=""&gt;cartoons&lt;/i&gt;      that are &lt;i style=""&gt;SF&lt;/i&gt;?&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;no unneeded duplication&lt;/b&gt;: if you      want to add the file to a category, just do it – you don’t need to copy or      move it; it will then belong to one more category&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;easy to personalize&lt;/b&gt;: you can easily      select groups of categories which you use often, and create aliases for      them; this beats shortcuts by far. Imagine an alias to &lt;i style=""&gt;My Last 3 projects&lt;/i&gt;, or &lt;i style=""&gt;Anything with Kevin Spacey&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Other things you can do:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;History&lt;/b&gt;: can be a category; some      program can update this by keeping a history of, lets say, last 100 opened      files. Each opened file is automatically added to “History” category&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Favorites&lt;/b&gt;: (have a category called      “Favorites”) anything can be added to Favorites, not just URLs&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Last Searches&lt;/b&gt;: the Explorer program      can remember the last 20 searches. After a search is run, an automatic      category is created, called “Searching ... on &lt;date&gt;”, and the files      that match the search will automatically be added there&lt;/date&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;b style=""&gt;Visited Web Pages&lt;/b&gt;: pages that are      viewed, can be placed into aliases called “Today”, “Yesterday”... Assuming      today is &lt;st1:date year="2008" day="12" month="3"&gt;12 March 2008&lt;/st1:date&gt;,      I’ll have a category called “&lt;st1:date year="2008" day="12" month="3"&gt;12       March 2008&lt;/st1:date&gt;”, and “Today” will be an alias to it. When the day      becomes &lt;st1:date month="3" day="13" year="2008"&gt;13 March 2008&lt;/st1:date&gt;,      the “Today” alias will point to “&lt;st1:date month="3" day="13" year="2008"&gt;13       March 2008&lt;/st1:date&gt;”, and “Yesterday” will point to “&lt;st1:date month="3" day="12" year="2008"&gt;12 March 2008&lt;/st1:date&gt;”. This way, you can keep a      more detailed history with pages visited each day, for the last, lets say      50 days.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;b style=""&gt;What next?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Using categories instead of folders should have happened long time ago. WinFS had some intent of implementing something similar.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;All the above is doable – on Windows, simply have a virtual drive on which you implement “Categories”. I’m not saying it’s easy, but it’ll be:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;cool      to implement&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;challenging&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;a      real benefit for the users&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;Sounds like an excellent job for me! I’ll talk to Microsoft, Google and other companies, to see who wants me to implement this for them.&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;And I’ll be the first user of Category Explorer!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6466674021382923733?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6466674021382923733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6466674021382923733' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6466674021382923733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6466674021382923733'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/directories-flawed-concept.html' title='Directories - a flawed concept...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8595019994451912307</id><published>2008-03-12T14:44:00.005+02:00</published><updated>2008-03-18T15:00:51.874+02:00</updated><title type='text'>Directories - a flawed concept... - Example of aliases</title><content type='html'>Say      I have 4 categories: HR, Document, Resume, Report.&lt;br /&gt;&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;I      have the following files:&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style="color: rgb(51, 204, 255);"&gt;My Test Doc&lt;/i&gt;, belonging to &lt;i style="color: rgb(204, 102, 204);"&gt;Document&lt;/i&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style="color: rgb(51, 204, 255);"&gt;John’s Report&lt;/i&gt;, belonging to &lt;i style="color: rgb(204, 102, 204);"&gt;Document&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Report&lt;/i&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style="color: rgb(51, 204, 255);"&gt;Yearly Report&lt;/i&gt;, belonging to &lt;i style="color: rgb(204, 102, 204);"&gt;Document&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Report&lt;/i&gt;&lt;o:p style="color: rgb(204, 102, 204);"&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/i&gt;, belonging to       &lt;i style="color: rgb(204, 102, 204);"&gt;HR&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Document&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Report&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style=""&gt;&lt;span style="color: rgb(51, 204, 255);"&gt;Victor’s Resume&lt;/span&gt;,&lt;/i&gt; belonging to &lt;i style=""&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;HR&lt;/span&gt;, &lt;span style="color: rgb(204, 102, 204);"&gt;Document&lt;/span&gt;&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Resume&lt;/i&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;i style="color: rgb(51, 204, 255);"&gt;HR Evaluation&lt;/i&gt;, belonging to &lt;i style="color: rgb(204, 102, 204);"&gt;HR&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Document&lt;/i&gt;, &lt;i style="color: rgb(204, 102, 204);"&gt;Report&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;    &lt;p class="MsoNormal"&gt;Browsing away:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;I’m      in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything&lt;/span&gt;”. I see all 6 files and 4 categories&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;Document&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Document&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see &lt;span style="color: rgb(204, 102, 204);"&gt;HR&lt;/span&gt;, &lt;span style="color: rgb(204, 102, 204);"&gt;Resume&lt;/span&gt;, &lt;span style="color: rgb(204, 102, 204);"&gt;Report&lt;/span&gt; categories&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see all 6 files&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;HR&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Document/HR&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see &lt;span style="color: rgb(204, 102, 204);"&gt;Resume&lt;/span&gt;, &lt;span style="color: rgb(204, 102, 204);"&gt;Report &lt;/span&gt;categories&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see 3 files: &lt;span style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;Victor’s Resume&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;HR evaluation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;Report&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Document/HR/Report&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        don’t see any more categories&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see 2 files: &lt;span style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;HR evaluation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;Browsing away, take 2:&lt;br /&gt;&lt;br /&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;I’m      in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything&lt;/span&gt;”. I see 6 files and 4 categories&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="circle"&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;Report&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Report&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see &lt;span style="color: rgb(204, 102, 204);"&gt;Document&lt;/span&gt;, &lt;span style="color: rgb(204, 102, 204);"&gt;HR&lt;/span&gt; categories &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Note:        here I don’t see Resume category, since there aren’t any files that        belong to both Report and Resume&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see 4 files: &lt;span style="color: rgb(51, 204, 255);"&gt;John’s report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;Yearly Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;HR        Evaluation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;HR&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Report/HR&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see &lt;span style="color: rgb(204, 102, 204);"&gt;Document &lt;/span&gt;category&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see 2 files: &lt;span style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;HR Evaluation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class="MsoNormal" style=""&gt;I       expand to “&lt;span style="color: rgb(204, 102, 204);"&gt;Document&lt;/span&gt;”&lt;/li&gt;&lt;ul style="margin-top: 0cm;" type="square"&gt;&lt;li class="MsoNormal" style=""&gt;I’m        in “&lt;span style="color: rgb(204, 102, 204);"&gt;/Everything/Report/HR/Document&lt;/span&gt;”&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        don’t see any more categories&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;I        see 2 files: &lt;span style="color: rgb(51, 204, 255);"&gt;My Recruiting Report&lt;/span&gt;, &lt;span style="color: rgb(51, 204, 255);"&gt;HR Evaluation&lt;/span&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;    &lt;p class="MsoNormal"&gt;This is just one way to explore categories. There can be other ways - I'm all for diversity...&lt;/p&gt;&lt;p class="MsoNormal"&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/699828515576400912-8595019994451912307?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8595019994451912307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8595019994451912307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8595019994451912307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8595019994451912307'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/directories-flawed-concept-example-of.html' title='Directories - a flawed concept... - Example of aliases'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2423042634892939278</id><published>2008-03-11T03:53:00.001+02:00</published><updated>2008-03-11T04:28:10.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtual Office'/><title type='text'>Thy virtual office...</title><content type='html'>... do you have one? You'd better!&lt;br /&gt;&lt;br /&gt;What I'm saying below is Sales 101, but still a lot of store owners ignore them...&lt;br /&gt;&lt;br /&gt;More and more people try to find you online these days... When someone wants to buy something from you, he has 2 choices:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;see the merchandise face-to-face&lt;/li&gt;&lt;li&gt;see and order it online&lt;/li&gt;&lt;/ul&gt;Sure, seeing it face-to-face rules, &lt;span style="font-weight: bold;"&gt;but&lt;/span&gt;, once the customer has seen what he wants, he's tested it, he'll most likely want it again. And again...&lt;br /&gt;&lt;br /&gt;And then, "online ordering" comes very much in handy. Why? Because coming to your office is quite a lot of bother. Lets just mention &lt;span style="font-weight: bold;"&gt;traffic &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;parking &lt;/span&gt;- need I say more?&lt;br /&gt;&lt;br /&gt;The physical office is a lot of bother :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For your customers&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;it can be hard to find&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;parking&lt;br /&gt;&lt;/li&gt;&lt;li&gt;standing in line&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;it has a time-table (opens at time X and closes at time Y)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;can be hard to search&lt;/li&gt;&lt;li&gt;for asking detailed information, he might have to wait inline, until some clerk becomes available&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;For you&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;rent - this is volatile, it can go (usually) higher&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;you might need to move to a new office (this is the worst, especially if you've built a customer base)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;The Virtual Office has none of the above problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;virtual office = online store&lt;/li&gt;&lt;li&gt;easily searcheable&lt;/li&gt;&lt;li&gt;customers can access it anytime&lt;/li&gt;&lt;li&gt;customers can order online&lt;br /&gt;&lt;/li&gt;&lt;li&gt;customers can ask queries in a simple manner, and you can answer them effectively&lt;/li&gt;&lt;li&gt;rent is way cheaper&lt;/li&gt;&lt;li&gt;moving to a new office - will never happen&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As long as you have your store online also, you've simply boost your sales and your customer base... What more can you ask for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2423042634892939278?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2423042634892939278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2423042634892939278' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2423042634892939278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2423042634892939278'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/thy-virtual-office.html' title='Thy virtual office...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-454261085161380489</id><published>2008-03-02T15:34:00.002+02:00</published><updated>2008-03-02T16:05:57.765+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='Night Buyers'/><category scheme='http://www.blogger.com/atom/ns#' term='implementation'/><title type='text'>Think, before doing like the crowd!</title><content type='html'>It's funny how people do some stuff, just because most others do them. Yes, I'm talking about IT.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Case 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When developing a site, make sure you do a "captcha", &lt;span style="font-style: italic;"&gt;wherever&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For &lt;a href="http://www.nightbuyers.ro/"&gt;Night Buyers&lt;/a&gt;, I've added captcha, only at login, and only after about 1.5 months since we've started it. Why? It wasn't on my top priorities. Captcha is good to forbid bots to register. But that happens only when you have lots and lots of users. Which is certainly &lt;span style="font-style: italic;"&gt;not when you start the site&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Case 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Validating the user's email. To do that, you send an email to the user, with an activation code. The user opens his email, clicks the activation code, and there you go.&lt;br /&gt;&lt;br /&gt;First, this is a lot of code from your part. Then, it puts a burden on the user - he's using your site because he needs something. All this mambo jambo, and he can lose 10 minutes to one hour or so. Not to say that he might just dump your site and go elsewhere.&lt;br /&gt;&lt;br /&gt;On &lt;a href="http://www.nightbuyers.ro/"&gt;Night Buyers&lt;/a&gt;, we don't have email validation. We trust the user to provide us with a valid email when he registers - we send him confirmation of his order via email. If he doesn't need confirmation, fine, let him provide a dummy email address.&lt;br /&gt;&lt;br /&gt;But, when you develop your site you need to answer 2 questions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do I need email confirmation? Why do I need the user's email? To send him what?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do I need email confirmation &lt;span style="font-style: italic;"&gt;now&lt;/span&gt;?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To the latter question, what if you can wait, lets say, one week, for the user to confirm his email address? If so, you can allow the user to use your site right now, and if he finds the information there worthwhile, trust me, he'll be more than glad to register.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-454261085161380489?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/454261085161380489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=454261085161380489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/454261085161380489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/454261085161380489'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/think-before-doing-like-crowd.html' title='Think, before doing like the crowd!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-178466020573646501</id><published>2008-03-01T05:02:00.000+02:00</published><updated>2008-03-01T05:31:56.806+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='HR'/><title type='text'>Paying your people</title><content type='html'>It's no secret that people go from one company to the next, to the next, and so on. This is even more common in the IT industry.&lt;br /&gt;&lt;br /&gt;Most people leave because of the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the company is on shaky ground&lt;/li&gt;&lt;li&gt;bad management (stressing the employees, giving them too much work, overtime, and so on)&lt;/li&gt;&lt;li&gt;treating them like average&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;If you're in case 1. or 2., you're company is hopeless. However, most companies (especially outsourcing companies) are in case 3.&lt;br /&gt;&lt;br /&gt;You're in a company of type 3. if&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you don't have a bonus system&lt;/li&gt;&lt;li&gt;you don't get paid overtime more than usual hours or you don't get paid overtime at all&lt;/li&gt;&lt;li&gt;if you perform good or very good, there's no message from above; only when your work is less than average, then you're marked as "bad employee"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In such companies, people learn to just do &lt;span style="font-style: italic;"&gt;what's expected of them &lt;/span&gt;(enough not to get fired). Quality then tends to be average.&lt;br /&gt;&lt;br /&gt;These companies are setting themselves for disaster - it might take 10 or more years, but it'll happen. They'll make room for the new companies - where people are rewarded for doing good work. And this will actually make people be more responsible.&lt;br /&gt;&lt;br /&gt;When doing a project, a good company will think and plan for bonuses from the start. This sends an amazing message: you do &lt;span style="font-style: italic;"&gt;great work&lt;/span&gt;, you get &lt;span style="font-style: italic;"&gt;rewarded&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Of course, not everybody is fit for such a company. But if you're in charge of one, you'll also be able to filter out &lt;span style="font-style: italic;"&gt;the average&lt;/span&gt;. And more to the point, your people will stop leaving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-178466020573646501?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/178466020573646501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=178466020573646501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/178466020573646501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/178466020573646501'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/03/paying-your-people.html' title='Paying your people'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6869669060035927036</id><published>2008-02-26T08:54:00.000+02:00</published><updated>2008-02-26T09:06:45.846+02:00</updated><title type='text'>Burning ahead...</title><content type='html'>Yes, it seems I'm a newbie when it comes to blogging... Just a few days ago, a friend asked me "Don't you have &lt;a href="http://www.feedburner.com/"&gt;feedburner&lt;/a&gt;?"&lt;br /&gt;"What's that?", I asked.&lt;br /&gt;&lt;br /&gt;... and then I realized, and of course I got mine. Pretty nifty...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6869669060035927036?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6869669060035927036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6869669060035927036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6869669060035927036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6869669060035927036'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/burning-ahead.html' title='Burning ahead...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2335322615770855861</id><published>2008-02-26T00:54:00.001+02:00</published><updated>2008-02-26T01:02:10.684+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='goolag'/><category scheme='http://www.blogger.com/atom/ns#' term='auditing'/><title type='text'>Goolag - testing thy site's vulnerabilities...</title><content type='html'>Well, one more tool to test thy site - for vulnerabilities, that is... If you've hired someone to do your site, I guess this is just a quick way to see how much he's screwed up (since you'll be suffering from the screw ups, in the end).&lt;br /&gt;&lt;br /&gt;More details &lt;a href="http://www.boingboing.net/2008/02/19/goolagorg.html"&gt;here&lt;/a&gt;.&lt;br /&gt;The main site is, of course, &lt;a href="http://www.goolag.org/"&gt;goolag.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will certainly test it on a few of my sites ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2335322615770855861?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2335322615770855861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2335322615770855861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2335322615770855861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2335322615770855861'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/goolag-testing-thy-sites.html' title='Goolag - testing thy site&apos;s vulnerabilities...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3910377232586095665</id><published>2008-02-22T16:47:00.001+02:00</published><updated>2008-02-22T17:44:48.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='shortcut'/><title type='text'>Your shortcuts, or my shortcuts?</title><content type='html'>&lt;span style="font-weight: bold;"&gt;The shortcut problem..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm getting really tired of these programs and &lt;span style="font-style: italic;"&gt;their &lt;/span&gt;shortcuts...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;some programs don't have shortcuts at all&lt;/li&gt;&lt;li&gt;some programs have some shortcuts, but you can't customize them&lt;br /&gt;&lt;/li&gt;&lt;li&gt;some programs have their own shortcuts, but they're so un-standard that almost nobody uses them&lt;/li&gt;&lt;li&gt;finally some programs have their own shortcuts and they allow you to customize them&lt;/li&gt;&lt;/ul&gt;Kudos to the latter. But still, that doesn't solve &lt;span style="font-style: italic;"&gt;my &lt;/span&gt;problem.&lt;br /&gt;&lt;br /&gt;With every new program, I need to learn a new set of shortcuts. The problem comes when the shortcut is to some activity that can apply to several programs, like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;find, find next&lt;br /&gt;&lt;/li&gt;&lt;li&gt;close tab, move to next tab&lt;br /&gt;&lt;/li&gt;&lt;li&gt;save, save all&lt;/li&gt;&lt;li&gt;rename&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;What users want&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What I want is this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;be able to use &lt;span style="font-style: italic;"&gt;my &lt;/span&gt;shortcuts&lt;/li&gt;&lt;li&gt;whenever I set a shortcut, I want that to be available throughout all my programs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;be able to save all my shortcuts, and restore them (for instance, after a Windows re-install)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Well, good luck with any of the above. None is possible - which is very sad, because computers should work for us, not against us.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What the programmers should do...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's too bad most programmers don't realize &lt;span style="font-weight: bold;"&gt;what the shortcuts are for&lt;/span&gt;. They are to benefit the user, not the programmer. This means that points 1-3 are perfectly reasonable.&lt;br /&gt;&lt;br /&gt;Program-wise, this also means that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;shortcuts are not to be internal to the program&lt;/li&gt;&lt;li&gt;when you load a shortcut, you should be asking a system API function, not assign it some value you came up with, or load it from some crazy file, or from the registry&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;The solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sadly, there's no system API function to call, to load a shortcut. But if there were, here's how it should look like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;string get_shortcut(string shortcut_name);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;os_representation &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;shortcut_to_os(string shortcut);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it! The shortcut name needs to be made standard, like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"find" - for find command&lt;/li&gt;&lt;li&gt;"save" - for save&lt;/li&gt;&lt;li&gt;"save_all" - for Save All&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;And the resulting string needs to be standard, to include shortcut combinations.&lt;br /&gt;&lt;br /&gt;Then, based on your OS, the 2nd function, converts that string to the OS's internal representation.&lt;br /&gt;&lt;br /&gt;So, you programmers out there - how 'bout we make some cool library to handle this? The implementation shouldn't take too long, but the benefits would be enormous...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3910377232586095665?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3910377232586095665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3910377232586095665' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3910377232586095665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3910377232586095665'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/your-shortcuts-or-my-shortcuts.html' title='Your shortcuts, or my shortcuts?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4733345398389494617</id><published>2008-02-19T01:20:00.000+02:00</published><updated>2008-02-19T01:22:01.568+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Do you dare search for Chuck Norris?</title><content type='html'>How to have a fun moment, in 4 steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open your favorite search engine (&lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;Type "google Chuck Norris".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Press "I'm feeling lucky"&lt;/li&gt;&lt;li&gt;Enjoy!&lt;br /&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/699828515576400912-4733345398389494617?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4733345398389494617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4733345398389494617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4733345398389494617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4733345398389494617'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/do-you-dare-search-for-chuck-norris.html' title='Do you dare search for Chuck Norris?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-9138341048865754202</id><published>2008-02-15T15:51:00.001+02:00</published><updated>2008-02-15T15:56:34.732+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>The Google Experiment</title><content type='html'>You gotta love google! (by the way, Firefox - you need to update your spelling, "google" is a word :))&lt;br /&gt;&lt;br /&gt;The guys started &lt;a href="http://www.google.ro/experimental/"&gt;an experiment&lt;/a&gt; - features to improve your search experience. For me, it seems to be working ;)&lt;br /&gt;&lt;br /&gt;You can select "Alternate views", or Keyboard shortcuts, Left-hand search navigation, etc.&lt;br /&gt;&lt;br /&gt;Well, I chose "keyboard shortcuts", since I'm always looking for ways to minimize the use of my mouse. I'm already getting used to it, and it rocks!&lt;br /&gt;&lt;br /&gt;Way to gooo google!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-9138341048865754202?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/9138341048865754202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=9138341048865754202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9138341048865754202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9138341048865754202'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/google-experiment.html' title='The Google Experiment'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4123917180050161688</id><published>2008-02-14T06:47:00.000+02:00</published><updated>2008-02-14T06:55:55.745+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><title type='text'>::PlaySound - sometimes doesn't work</title><content type='html'>The great API function - ::PlaySound, sometimes doesn't actually play the file I'm sending.&lt;br /&gt;&lt;br /&gt;How do I know? I've set up a monitor email system, which should play an alert sound when a new email arrives or when the internet connection is down for at least 5 minutes. However, sometimes, after a few hours of running, when some event actually happens, the ::PlaySound function gets called, but no sound is heard.&lt;br /&gt;&lt;br /&gt;To get 'round this, here's what I do:&lt;br /&gt;Every 10 seconds, I stop the sound, and play it again. The second or the 3rd time, the sound is actually heard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-4123917180050161688?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4123917180050161688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4123917180050161688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4123917180050161688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4123917180050161688'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/playsound-sometimes-doesnt-work.html' title='::PlaySound - sometimes doesn&apos;t work'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-106153525821449192</id><published>2008-02-08T10:51:00.000+02:00</published><updated>2008-02-08T10:59:52.871+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Tips'/><title type='text'>C++ Tip: renaming files from the VS IDE</title><content type='html'>A few  days ago I realized - renaming files can be done from the IDE. Too simple : go to "Solution Explorer" tab, select a file, press F2 (just like in Windows Explorer), type the new name, Enter and that's it!&lt;br /&gt;&lt;br /&gt;Side-note: if your source files are on SVN/CVS, renaming from the IDE is a no-no.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-106153525821449192?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/106153525821449192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=106153525821449192' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/106153525821449192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/106153525821449192'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/c-tip-renaming-files-from-vs-ide.html' title='C++ Tip: renaming files from the VS IDE'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3978011698327002606</id><published>2008-02-03T23:08:00.000+02:00</published><updated>2008-02-03T23:25:05.532+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boost'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Boost Logging v2 - review awaits!</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;Finally, &lt;a href="http://torjo.com/log2/"&gt;Boost Logging v2&lt;/a&gt; is up for review, starting tomorrow. There were a few late reported bugs which I just fixed.&lt;br /&gt;&lt;br /&gt;Now, lets cross our fingers, and reviewers, fire away! I welcome all reviews, good or bad, let me have it!&lt;br /&gt;&lt;br /&gt;Details about the lib:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/doc/html/"&gt;the docs (accessible online)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/"&gt;download the library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.boost.org/svn/boost/sandbox/logging/"&gt;get the library from svn&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;If you want to do a formal review,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;if you're a &lt;a href="http://www.boost.org/"&gt;booster&lt;/a&gt;, you know the drill&lt;/li&gt;&lt;li&gt;otherwise, to do a formal review,&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;go to the &lt;a href="http://www.boost.org/"&gt;Boost site &lt;/a&gt;to find out more about formal reviews&lt;br /&gt;&lt;/li&gt;&lt;li&gt;subscribe to &lt;a href="http://boost.org/more/mailing_lists.htm#users"&gt;boost users&lt;/a&gt; or to &lt;a href="http://boost.org/more/mailing_lists.htm#main"&gt;boost devel &lt;/a&gt;mailing lists&lt;/li&gt;&lt;li&gt;then reply to the mail with a subject similar to "[review] Formal review of Boost Logging lib..."&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Look forward to hear from you!&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3978011698327002606?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3978011698327002606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3978011698327002606' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3978011698327002606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3978011698327002606'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/02/boost-logging-v2-review-awaits.html' title='Boost Logging v2 - review awaits!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1947532419080431324</id><published>2008-01-30T13:54:00.000+02:00</published><updated>2008-01-30T13:57:34.848+02:00</updated><title type='text'>Who Killed the Software Engineer?</title><content type='html'>This teacher talks about the evils of learning Java as a first language.&lt;br /&gt;I completely agree!!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html"&gt;Computer Science Education: Where Are the Software Engineers of Tomorrow?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://itmanagement.earthweb.com/career/article.php/3722876"&gt;Who Killed the Software Engineer? (Hint: It Happened in College)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1947532419080431324?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1947532419080431324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1947532419080431324' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1947532419080431324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1947532419080431324'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/who-killed-software-engineer.html' title='Who Killed the Software Engineer?'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2642980570497120431</id><published>2008-01-29T09:10:00.000+02:00</published><updated>2008-01-29T09:40:28.906+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>An Explorer with tabs...</title><content type='html'>Firefox has tabs. IE has tabs. Trillian has tabs.&lt;br /&gt;&lt;br /&gt;So why shouldn't Explorer have tabs? Because Windows Explorer sucks... It's slow, has weird initialization routine, doesn't remember the last places I browsed, and every now and then it crashes unexpectedly.&lt;br /&gt;&lt;br /&gt;I've been using &lt;a href="http://www.zabkat.com/x2lite.htm"&gt;xplorer2 Lite&lt;/a&gt; lately, and so far I'm impressed. The first thing I loved about it, is that it has tabs. And it remembers them!&lt;br /&gt;&lt;br /&gt;It's got quite a few other cool things. Here's what impressed me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;New Tab&lt;/span&gt; (Ctrl Ins) - just like Firefox, you can start a lot of tabs, which are automatically remembered next time you start it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;File Rename&lt;/span&gt; (F2) - yes, it got it right - when doing rename, only the file name is selected (not the extension). Oh, it it doesn't ask me: "If you change the file name, the file could become unusable". Who came up with that question anyway?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;New File&lt;/span&gt; (F7) - yes, finally it's sooo easy to create a new file: just press F7. A file is created, and the file name is selected, so you can rename it anyway you like. Unlike the stupid Explorer, where: first, no file should be selected (otherwise, it will not have any way to create a new file) and you have an extra step: the file type.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Fixed column sizes&lt;/span&gt; - finally I don't have to resize my "Name" column every time I enter a directory - it's always the same (if I resize it once, it will remember it). Kudos guys!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There are quite a few more things, but I just happened to come across these in my day to day work.&lt;br /&gt;&lt;br /&gt;All in all it seems quite a good product, and I think I'll definitely buy it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2642980570497120431?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2642980570497120431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2642980570497120431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2642980570497120431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2642980570497120431'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/explorer-with-tabs.html' title='An Explorer with tabs...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7037400462449974623</id><published>2008-01-24T10:37:00.000+02:00</published><updated>2008-01-24T10:41:21.753+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><title type='text'>Converting between strings</title><content type='html'>If I were to have a &lt;span style="font-family:courier new;"&gt;std::string&lt;/span&gt; and wanted to convert it to &lt;span style="font-family:courier new;"&gt;std::wstring&lt;/span&gt;, I usually wrote a function that simply took each character from the source string, and added it to the destination string.&lt;br /&gt;&lt;br /&gt;Until someone pointed out to me the obvious solution. It was right in front of me!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;std::string s;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;std::wstring w = "test";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;s.assign( w.begin(), w.end() );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// the vice-versa works too ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, ain't that easy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7037400462449974623?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7037400462449974623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7037400462449974623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7037400462449974623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7037400462449974623'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/converting-between-strings.html' title='Converting between strings'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4044109295971536527</id><published>2008-01-21T20:43:00.000+02:00</published><updated>2008-01-21T20:47:38.975+02:00</updated><title type='text'>Boost Logging v2 - v0.21.1 (profiling and other goodies)</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torjo.com/log2/"&gt;Major release &lt;/a&gt;- for reviewing on 4th of Feb this year.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/doc/html/namespaceboost_1_1logging_1_1profile.html"&gt;Allows profiling itself&lt;/a&gt;&lt;/li&gt;&lt;li&gt;can handle writing to the logger after it's been destroyed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;easier implementation of logger_holder&lt;/li&gt;&lt;/ul&gt;Also, update the docs quite a bit. So, feedback is quite welcome.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-4044109295971536527?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4044109295971536527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4044109295971536527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4044109295971536527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4044109295971536527'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/boost-logging-v2-v0211-profiling-and.html' title='Boost Logging v2 - v0.21.1 (profiling and other goodies)'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3024893584531482055</id><published>2008-01-21T06:10:00.000+02:00</published><updated>2008-01-21T20:50:06.889+02:00</updated><title type='text'>Boost Logging v2 - the only lib allowing full profiling</title><content type='html'>Oh well... This is a very nifty feature - I thought a lot about implementing it, and finally I found the time to do it.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt; is soooo flexible, that I could add profiling to it, without changing the library code (ok - actually I did add one word - &lt;span style="font-style: italic;"&gt;virtual&lt;/span&gt; - to &lt;span style="font-style: italic;"&gt;on_dedicated_thread::write_array&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;In other words, it's very easy to find out exactly how much time is spent logging - &lt;span style="font-style: italic;"&gt;all &lt;/span&gt;of it. For instance, assuming you log using stream' operator&lt;&lt;, you can find out the time spent gathering the message.  I've &lt;a href="http://torjo.com/log2/doc/html/"&gt;updated the docs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can get the &lt;a href="http://svn.boost.org/svn/boost/sandbox/logging/"&gt;latest code from SVN&lt;/a&gt;, and see &lt;a href="http://svn.boost.org/svn/boost/sandbox/logging/lib/logging/samples/scenarios/use_profiler.cpp"&gt;an example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As far as I know, this is the only logging library that allows for this ;)&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3024893584531482055?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3024893584531482055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3024893584531482055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3024893584531482055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3024893584531482055'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/boost-logging-v2-only-lib-allowing-full.html' title='Boost Logging v2 - the only lib allowing full profiling'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4800469595395842233</id><published>2008-01-20T22:43:00.000+02:00</published><updated>2008-01-20T22:50:18.850+02:00</updated><title type='text'>doxygen - applause, again!</title><content type='html'>Yes, doxygen rules. The more I use it, the more I like it!&lt;br /&gt;&lt;br /&gt;Every now and then, I regenerate the docs for &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt;. Today, I just discovered a very cool feature. For classes/functions, if you specify a brief description (using &lt;span style="font-family:courier new;"&gt;@brief&lt;/span&gt; command), when that class/function is referenced in the docs, the brief description will appear as a tooltip.&lt;br /&gt;&lt;br /&gt;Kudos guys! Thanks for the great work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-4800469595395842233?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4800469595395842233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4800469595395842233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4800469595395842233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4800469595395842233'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/doxygen-applause-again.html' title='doxygen - applause, again!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3487969945336523815</id><published>2008-01-18T10:54:00.000+02:00</published><updated>2008-01-18T10:57:05.941+02:00</updated><title type='text'>Up for sale...</title><content type='html'>Yup, I'm up for sale...&lt;br /&gt;&lt;br /&gt;The guys at SourceForge tried something new - the Marketplace - it's where people involved in open source projects post their price - so that other companies can hire/contract them.&lt;br /&gt;&lt;br /&gt;I decided to &lt;a href="https://sourceforge.net/services/service_details.php?service_listing_id=1276"&gt;give them a try...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3487969945336523815?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3487969945336523815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3487969945336523815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3487969945336523815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3487969945336523815'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/up-for-sale.html' title='Up for sale...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6657080247031985557</id><published>2008-01-15T09:58:00.000+02:00</published><updated>2008-01-15T10:15:46.645+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='Night Buyers'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>Night Buyers - monitoring for email</title><content type='html'>The &lt;a href="http://www.nightbuyers.ro/"&gt;Night Buyers&lt;/a&gt;, glad you asked, we're doing quite fine ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;However, since we're at the beginning, there are periods (around 2:30-6:30am) when there are few orders. So, I said, let's help our drivers.&lt;br /&gt;&lt;br /&gt;Which I did - I made a &lt;a href="http://torjo.com/code/monitor_email.zip"&gt;small program&lt;/a&gt; that monitors an email server. When a new email arrives (in our case, an order), a &lt;span style="font-weight: bold;"&gt;very loud &lt;/span&gt;sound is played continuously until the driver acknowledges the email.&lt;br /&gt;&lt;br /&gt;Also, in case the internet connection is lost for more than 5 minutes (which in our case is critical), another sound will be played.&lt;br /&gt;&lt;br /&gt;So far, the drivers are pretty happy with it - they can take a nap in those times, and if an order comes by, they're suddenly awake.&lt;br /&gt;&lt;br /&gt;As libraries, I've used:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ddj.com/cpp/202101554"&gt;Straightforward settings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/poco"&gt;The Poco libraries&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Feel free to use my program - it's configurable. Here's the &lt;a href="http://torjo.com/code/monitor_email.zip"&gt;source code&lt;/a&gt;. I might add new features as my drivers ask them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6657080247031985557?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6657080247031985557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6657080247031985557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6657080247031985557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6657080247031985557'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/night-buyers-monitoring-for-email.html' title='Night Buyers - monitoring for email'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1802698485210346190</id><published>2008-01-11T11:15:00.000+02:00</published><updated>2008-01-15T10:16:28.460+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Night Buyers'/><category scheme='http://www.blogger.com/atom/ns#' term='TV'/><title type='text'>Night Buyers - we're getting more and more known</title><content type='html'>Indeed! ProTV  has taken an interview for Night Buyers and got only positive feedback!&lt;br /&gt;&lt;br /&gt;Here are more details:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.protv.ro/stiri/social/o-firma-din-cluj-face-livrari-la-domiciliu-indiferent-de-ora.html"&gt;the article&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.protv.ro/filme/o-firma-din-cluj-face-livrari-la-domiciliu-indiferent-de-ora.html?id_file=41126#41126"&gt;the video&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1802698485210346190?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1802698485210346190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1802698485210346190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1802698485210346190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1802698485210346190'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/night-buyers-were-getting-more-and-more.html' title='Night Buyers - we&apos;re getting more and more known'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8818496702508645077</id><published>2008-01-09T12:12:00.000+02:00</published><updated>2008-01-09T12:14:15.395+02:00</updated><title type='text'>New Hosting - done...</title><content type='html'>Well, the torjo.com hosting has been successfully changed. Back to the regular email traffic ;)&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8818496702508645077?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8818496702508645077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8818496702508645077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8818496702508645077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8818496702508645077'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/new-hosting-done.html' title='New Hosting - done...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3806178190399098811</id><published>2008-01-08T13:29:00.000+02:00</published><updated>2008-01-08T13:34:24.152+02:00</updated><title type='text'>New host(ing)</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;I am moving torjo.com to a new host. Thus, it might be unresponsive for a few hours - 24 at the most.&lt;br /&gt;&lt;br /&gt;Also, some emails might be lost - so in case you get an error - please resend after one day. Thanks for understanding!&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3806178190399098811?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3806178190399098811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3806178190399098811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3806178190399098811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3806178190399098811'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/new-hosting.html' title='New host(ing)'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6793103527574127382</id><published>2008-01-07T16:55:00.000+02:00</published><updated>2008-01-07T17:05:02.606+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boost'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><title type='text'>Boost Logging v2 - new version (v0.13.6)</title><content type='html'>The &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt; is getting closer and closer to its review (Feb 4).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've just released a new version, lots of new features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.torjo.com/log2/doc/html/namespaceboost_1_1logging_1_1tag.html"&gt;added tags &lt;/a&gt;(attributes a logged message can have, like : line &amp;amp; file, function name, time, etc.)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.torjo.com/log2/doc/html/scoped_logs.html"&gt;scoped logs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.torjo.com/log2/doc/html/caching.html"&gt;caching messages before logs are initialized&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.torjo.com/log2/doc/html/structboost_1_1logging_1_1formatter_1_1high__precision__time__t.html"&gt;high precision time&lt;/a&gt; (as tag as well)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.torjo.com/log2/doc/html/structboost_1_1logging_1_1formatter_1_1spacer__t.html"&gt;added spacer formatter&lt;/a&gt; - you can specify what goes before and after your formatter&lt;/li&gt;&lt;li&gt;new formatter: &lt;a href="http://www.torjo.com/log2/doc/html/structboost_1_1logging_1_1formatter_1_1named__spacer__t.html"&gt;named_spacer&lt;/a&gt; : Allows you to contain multiple formatters. You have a spacer string, and within it, you can escape your contained formatters&lt;/li&gt;&lt;li&gt;new destination : &lt;a href="http://www.torjo.com/log2/doc/html/structboost_1_1logging_1_1destination_1_1named__t.html"&gt;named&lt;/a&gt; - like named_spacer, but for destinations&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;All in all, I've added quite a few features - so, &lt;a href="http://www.torjo.com/log2/"&gt;take a look!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6793103527574127382?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6793103527574127382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6793103527574127382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6793103527574127382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6793103527574127382'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/boost-logging-v2-new-version-v0136.html' title='Boost Logging v2 - new version (v0.13.6)'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-419730969332195625</id><published>2008-01-07T16:13:00.001+02:00</published><updated>2008-01-07T16:38:42.843+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bad UI'/><category scheme='http://www.blogger.com/atom/ns#' term='Settings'/><category scheme='http://www.blogger.com/atom/ns#' term='Persisting'/><title type='text'>Bad UI : Persisting application settings (Windows)</title><content type='html'>This is the sad truth: too many applications forget the fact that things are changing:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a user could change his computer,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;could reinstall Windows,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;could upgrade to a different version of the OS,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;could need to match the same settings on 2 different machines,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;and so on.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Most apps just took for granted "Persist thy settings in the registry", and went on doing it.&lt;br /&gt;&lt;br /&gt;This is not a bad idiom per se, the only problem is that those settings should be easily exported to some other medium, like a text file or so.&lt;br /&gt;&lt;br /&gt;Reinstalling Windows is a pain in itself, you'll have to reinstall a lot of applications - and on top of that, you need to reset each application to give it the feel you've been used to. Reinstalling an OS or whatever I outlined above should be a much easier process.&lt;br /&gt;&lt;br /&gt;Most applications (especially those non-trivial ones) should be able to import/export their settings. Most languages already have libs to deal with settings - however, exporting/importing could be a bit difficult, but hey, shouldn't be too difficult to come up with your own lib. And for C++, you can use &lt;a href="http://www.ddj.com/cpp/202101554"&gt;my lib for free&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To make it even easier for users, there should be 2 global WM_ events:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;one for export settings to file&lt;/li&gt;&lt;li&gt;one for import settings from file&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Thus, people could even automate the process of exporting/importing settings. Am I dreaming?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-419730969332195625?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/419730969332195625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=419730969332195625' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/419730969332195625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/419730969332195625'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2008/01/bad-ui-persisting-application-settings.html' title='Bad UI : Persisting application settings (Windows)'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-5622847067518174285</id><published>2007-12-30T15:21:00.000+02:00</published><updated>2007-12-30T16:08:16.748+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alphabetical ordering'/><category scheme='http://www.blogger.com/atom/ns#' term='Bad UI'/><title type='text'>Bad UI : aphabetical ordering (completion, etc)</title><content type='html'>It's quite stunning to see that completion is still as dumb as it was when it was first invented. And I'm not just talking about completion of code when it comes to programming, I'm talking about completion in general. For instance, email completion in Thunderbird.&lt;br /&gt;&lt;br /&gt;These programs haven't gotten past the "alphabetical ordering" completion - where all completion strings are just sorted alphabetically. This, regardless of the fact that my usage is quite different.&lt;br /&gt;For instance,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Code completion&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;when I write &lt;span style="font-weight: bold;"&gt;std::c&lt;/span&gt;, 99% of the cases I want to type &lt;span style="font-weight: bold;"&gt;std::cout&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;when I write &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;some_container&lt;/span&gt;.b&lt;/span&gt;, 99.9% of the cases I want to type &lt;span style="font-style: italic; font-weight: bold;"&gt;some_container&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.begin()&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Email completion&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;when I type &lt;span style="font-weight: bold;"&gt;ovi&lt;/span&gt; (as email address), 99% of the time I mean &lt;span style="font-weight: bold;"&gt;ovidiu.deac@...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;I have 4 email addresses I commonly use. They are quite separate from one-another - you can consider them 4 different businesses. So, when using a certain email account, email completion should prefer the emails that first wrote me to that account. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Another example that does not fully involve string completion but something quite similar. I think you've met this one way too many times. I will feature the great &lt;a href="http://www.mersultrenurilorcfr.ro/"&gt;Romanian Railroad Site&lt;/a&gt;.&lt;br /&gt;Assume you want to go to Bucharest, and you type it as destination ("Bucuresti"). Since it's such a "smart" site, it will give you a combobox with all destinations starting with "Bucuresti". I think there are about 7 or 8 such destinations, and 99.99% of the time you want to go to the main station ("Bucuresti Nord"). However, you have to manually select it, because the combobox is alphabetically sorted and the first found element is "Bucuresti Baneasa" (and by the way, almost no one goes there).&lt;br /&gt;&lt;br /&gt;Finally, I want to give you a good example, a solution to this "alphabetical ordering" problem, one that I like. I'm sure there are others as well.&lt;br /&gt;Microsoft Word - the "Fonts" combobox. First few entries are the last entries you've selected. After that, there's a separator line, and then items are arranged alphabetically. It served me fine over the years.&lt;br /&gt;&lt;br /&gt;And yes, this could be applied to completion as well - first entries  shown should be those you use most.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-5622847067518174285?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/5622847067518174285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=5622847067518174285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5622847067518174285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5622847067518174285'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/12/bad-ui-aphabetical-ordering-completion.html' title='Bad UI : aphabetical ordering (completion, etc)'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7483636595249809675</id><published>2007-12-15T17:04:00.000+02:00</published><updated>2007-12-15T17:28:14.744+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bad UI'/><category scheme='http://www.blogger.com/atom/ns#' term='IM'/><title type='text'>Bad UI - IMs</title><content type='html'>It puzzles me again and again how stupid those programs are. Today's case is one that I've encountered too many times, and now the glass got full:&lt;br /&gt;&lt;br /&gt;Say you use an IM client, and at a given point you set your &lt;span style="font-weight: bold;"&gt;status message&lt;/span&gt;. That status has come to have quite a lot of meaning - people do care about it. When you've found something cool, or something important happened etc.&lt;br /&gt;&lt;br /&gt;Now, say that either you lose connection to the internet for just a sec, or you do a quick logout, etc. When you get back, your status message is gone - you need to manually do it again.&lt;br /&gt;&lt;br /&gt;That's just plain stupid - those IM programs should focus on the user, and realize something that's fundamental: "Did I tell you to change my status?" So, why do you do it? As long as I don't specifically tell you, leave my status alone. Ok?&lt;br /&gt;&lt;br /&gt;Someone could say - but when nowadays do you lose Internet connection? Well, I have a laptop, I travel, I use wireless. Need I say more?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7483636595249809675?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7483636595249809675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7483636595249809675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7483636595249809675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7483636595249809675'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/12/bad-ui-ims.html' title='Bad UI - IMs'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6532275680040981348</id><published>2007-12-06T22:27:00.001+02:00</published><updated>2007-12-06T22:40:29.138+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Night Buyers'/><category scheme='http://www.blogger.com/atom/ns#' term='Cluj Napoca'/><category scheme='http://www.blogger.com/atom/ns#' term='Livrare la domiciliu'/><category scheme='http://www.blogger.com/atom/ns#' term='Cumpara noaptea'/><title type='text'>Night Buyers, Cluj Napoca</title><content type='html'>It' s a great time to live in Romania!&lt;br /&gt;&lt;br /&gt;My girlfriend and I started a new service, one that at least both of us craved for: home delivery at night.&lt;br /&gt;&lt;br /&gt;For starters, it's just in Cluj Napoca. It's soooo simple - just create an account, select some products (dairy, drinks, etc), click "buy", and there you go - soon one of our drivers will get it to your door.&lt;br /&gt;&lt;br /&gt;For more details, &lt;a href="http://www.nightbuyers.ro/"&gt;see our site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6532275680040981348?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6532275680040981348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6532275680040981348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6532275680040981348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6532275680040981348'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/12/night-buyers-cluj-napoca.html' title='Night Buyers, Cluj Napoca'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-373567149716375237</id><published>2007-11-26T09:56:00.000+02:00</published><updated>2007-11-26T10:17:09.072+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bad UI'/><title type='text'>Bad UI : Firefox "Restore last session"</title><content type='html'>&lt;span style="font-weight: bold;"&gt;The problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Remember that nasty dialog that appears when you start Firefox?&lt;br /&gt;&lt;br /&gt;"Your last Firefox session closed unexpectedly... " with 2 buttons: "Restore session" and "Start New Session".&lt;br /&gt;&lt;br /&gt;Well, simply put, that's just stupid. That's just extra excise - and besides, why do I need to bother remembering what tabs I had opened? This appears even when I click some link from another application (like, Thunderbird), and Firefox is not opened yet.&lt;br /&gt;&lt;br /&gt;But more to the point, I can end up clicking "Start New Session", and have all my previous tabs lost.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First of all, Firefox should not ask that stupid question, and by default start with no tabs. It should then keep a history of the last 10 "Tab Groups", so that in case you want to re-open any of those tabs, you could. You should be able to re-open a full Tab Group, or select some tabs from a Tab Group and open only those.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-373567149716375237?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/373567149716375237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=373567149716375237' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/373567149716375237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/373567149716375237'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/bad-ui-firefox-restore-last-session.html' title='Bad UI : Firefox &quot;Restore last session&quot;'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-9121989867040230831</id><published>2007-11-14T15:11:00.001+02:00</published><updated>2007-11-14T15:12:38.394+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Andrei'/><category scheme='http://www.blogger.com/atom/ns#' term='guru'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Interview with Andrei</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hotnews.ro"&gt;hotnews.ro&lt;/a&gt; just published an &lt;a href="http://english.hotnews.ro/Romanian-Andrei-Alexandrescu-a-C++-guru-articol_46399.htm"&gt;interview with Andrei Alexandrescu&lt;/a&gt;. Very cool read...&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-9121989867040230831?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/9121989867040230831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=9121989867040230831' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9121989867040230831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/9121989867040230831'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/interview-with-andrei.html' title='Interview with Andrei'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2822529824661695074</id><published>2007-11-13T22:29:00.002+02:00</published><updated>2007-11-13T22:31:28.934+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='Nerd'/><title type='text'>The Nerd Handbook</title><content type='html'>I just read &lt;a href="http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html"&gt;The Nerd Handbook&lt;/a&gt;. It's just soooo funny! Probably because us nerds understand it best ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2822529824661695074?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2822529824661695074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2822529824661695074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2822529824661695074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2822529824661695074'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/nerd-handbook_13.html' title='The Nerd Handbook'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8975811362141525992</id><published>2007-11-12T16:48:00.000+02:00</published><updated>2007-11-12T16:54:31.305+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boost'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Boost Logging v2 - Your Killer Feature</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;I know everyone has his favorite feature he thinks a logging lib should provide. I've implemented what most people need. But just in case I forgot something...&lt;br /&gt;&lt;br /&gt;Do you have a feature you can't live without? You can drop me an email, or drop a comment here - and other people can share their thoughts as well...&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8975811362141525992?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8975811362141525992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8975811362141525992' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8975811362141525992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8975811362141525992'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/boost-logging-v2-your-killer-feature.html' title='Boost Logging v2 - Your Killer Feature'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1430290195538076569</id><published>2007-11-12T08:38:00.000+02:00</published><updated>2007-11-12T08:41:38.243+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='MFC'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>MFC v9 - updates</title><content type='html'>It seems that people at Microsoft have been quite busy, with the new MFC to come out with VS 2008...&lt;br /&gt;&lt;br /&gt;Seems to have quite a few interesting features, and I can't wait to get my hands on them :)&lt;br /&gt;&lt;br /&gt;Until then, you can read about it here:&lt;br /&gt;http://blogs.msdn.com/vcblog/archive/2007/11/09/quick-tour-of-new-mfc-functionality.aspx&lt;br /&gt;http://blogs.msdn.com/vcblog/archive/2007/11/09/announcing-a-major-mfc-update-plus-tr1-support.aspx&lt;br /&gt;http://blogs.msdn.com/vcblog/archive/2007/11/09/channel-9-pat-brenner-overview-of-new-mfc-update.aspx&lt;br /&gt;http://blogs.msdn.com/vcblog/archive/2007/11/09/hola-from-barcelona-and-welcome-to-a-major-mfc-update.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1430290195538076569?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1430290195538076569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1430290195538076569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1430290195538076569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1430290195538076569'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/mfc-v9-updates.html' title='MFC v9 - updates'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8204484390018144670</id><published>2007-11-10T15:08:00.000+02:00</published><updated>2007-11-10T19:50:22.766+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boost'/><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Boost Logging v2 - your scenario, tags</title><content type='html'>Hi all,&lt;br /&gt;&lt;br /&gt;I'm very excited. I've added 2 very cool features to the Boost Logging Lib:&lt;br /&gt;- have the library &lt;a href="http://torjo.com/log2/doc/html/namespaceboost_1_1logging_1_1scenario_1_1usage.html"&gt;find out the right logger/filter&lt;/a&gt; based on your application's needs&lt;br /&gt;- &lt;a href="http://torjo.com/log2/doc/html/namespaceboost_1_1logging_1_1tag.html"&gt;allow for tags&lt;/a&gt; (extra information about the context of the logged message)&lt;br /&gt;&lt;br /&gt;In case you're curious, take a &lt;a href="http://torjo.com/log2/doc/html"&gt;peek&lt;/a&gt; ;)&lt;br /&gt;&lt;br /&gt;Note : the latest code is only available on &lt;a href="http://svn.boost.org/svn/boost/sandbox/logging/"&gt;SVN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;John&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8204484390018144670?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8204484390018144670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8204484390018144670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8204484390018144670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8204484390018144670'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/boost-logging-v2-your-scenario-tags.html' title='Boost Logging v2 - your scenario, tags'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4626846922627201411</id><published>2007-11-07T06:18:00.000+02:00</published><updated>2007-11-07T06:53:30.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='template parameter'/><category scheme='http://www.blogger.com/atom/ns#' term='C++ Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ : default template parameters</title><content type='html'>&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;Assume you have a templated class, and some template parameters have default values. What if you want to specify only some parameters, and leave some to their defaults?&lt;br /&gt;&lt;br /&gt;The problem is that you need to specify all parameters until the last you want to change.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;span style=""&gt;template&lt;i&gt;&amp;lt;&lt;br /&gt;class f_base = formatter::base,&lt;br /&gt;class d_base = destination::base,&lt;br /&gt;class f_ptr = f_base*,&lt;br /&gt;class d_ptr = d_base*&amp;gt; &lt;/i&gt;&lt;span style=""&gt; &lt;/span&gt;struct logger { ... }&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If you want to specify &lt;span style=""&gt;d_ptr&lt;/span&gt;, you'll have to specify &lt;span style=""&gt;f_base&lt;/span&gt;, &lt;span style=""&gt;d_base&lt;/span&gt; and &lt;span style=""&gt;d_ptr&lt;/span&gt; as well:&lt;br /&gt;&lt;span style=""&gt;logger&lt;i&gt;&amp;lt;formatter::base,destination::base,my_ptr&amp;gt; &lt;/i&gt;l;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The more complicated the params are, the more complicated the client code will look. And by the way, what if the defaults change?&lt;br /&gt;&lt;br /&gt;There's an easy solution: use a &lt;span style=""&gt;default_&lt;/span&gt; class:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;struct default_ {};&lt;br /&gt;template&lt;i&gt;&amp;lt;class param, class default_type&amp;gt; &lt;/i&gt;struct use_default&lt;br /&gt;{ typedef param type; };&lt;br /&gt;&lt;br /&gt;template&lt;i&gt;&amp;lt;class default_type&amp;gt; &lt;/i&gt;struct use_default&lt;i&gt; &amp;lt;default_, default_type&amp;gt;&lt;br /&gt;&lt;/i&gt;{ typedef default_type type; };&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Now, the client code will look a lot simpler:&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;logger&lt;i&gt; &amp;lt;default_,default_,default_,my_ptr&amp;gt; &lt;/i&gt;l;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;In your class, you'll do something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;template&lt;i&gt;&amp;lt;&lt;br /&gt;class f_base = default_,&lt;br /&gt;class d_base = default_,&lt;br /&gt;class f_ptr = default_,&lt;br /&gt;class d_ptr = default_&amp;gt; &lt;/i&gt;&lt;span style=""&gt; &lt;/span&gt;struct logger {&lt;br /&gt;typedef use_default &amp;lt;f_base, formatter::base&amp;gt; &lt;span style=""&gt; &lt;/span&gt;::type formatter_type;&lt;br /&gt;typedef use_default &amp;lt;d_base, destination::base&amp;gt; &lt;span style=""&gt; &lt;/span&gt;::type destination_type;&lt;br /&gt;typedef use_default &amp;lt;f_ptr, formatter_type*&amp;gt; &lt;span style=""&gt; &lt;/span&gt;f_ptr_type;&lt;br /&gt;typedef use_default &amp;lt;d_ptr, destination_type*&amp;gt; &lt;span style=""&gt; &lt;/span&gt;d_ptr_type;&lt;br /&gt;...&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Your users will be waaay happier with this &lt;i&gt;interface&lt;/i&gt; - especially if you use it across multiple templated classes. All they will need to remember is which parameters to set, while forgetting the rest.&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;As a side-note, I've used this in the &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&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/699828515576400912-4626846922627201411?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4626846922627201411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4626846922627201411' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4626846922627201411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4626846922627201411'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/11/c-default-template-parameters.html' title='C++ : default template parameters'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6085586675027288899</id><published>2007-10-26T21:27:00.000+03:00</published><updated>2007-10-26T21:30:20.662+03:00</updated><title type='text'>Things Your Programming Language Never Told You - must read</title><content type='html'>Herb Sutter did it again:&lt;br /&gt;&lt;a href="http://herbsutter.spaces.live.com/blog/cns%212D4327CC297151BB%21304.entry"&gt;&lt;span style="color:#0000ff;"&gt;&lt;strong&gt;Things Your Programming Language Never Told You&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As he said himself, this is a must read for every modern programmer.&lt;br /&gt;Nothing for me to add, just &lt;a href="http://herbsutter.spaces.live.com/blog/cns%212D4327CC297151BB%21304.entry"&gt;watch and be amazed...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6085586675027288899?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6085586675027288899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6085586675027288899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6085586675027288899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6085586675027288899'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/things-your-programming-language-never.html' title='Things Your Programming Language Never Told You - must read'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3239209645818349153</id><published>2007-10-22T12:38:00.000+03:00</published><updated>2007-10-22T13:24:05.509+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='doxygen'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Doxygen rules!</title><content type='html'>I'd like to give many thanks to Dimitri van Heesch, for his excellent programming tool : the &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/"&gt;Doxygen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I finally got to add examples to &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt;. Well, you can do some amazing things with &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/"&gt;doxygen&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Say you have a file which you want to use as an example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can add the description within the example itself&lt;/li&gt;&lt;li&gt;You can reference (link to) the example's description&lt;/li&gt;&lt;li&gt;You can add the example to the "Examples" tab&lt;/li&gt;&lt;li&gt;When clicking the example in the "Examples" tab, it will show its description&lt;/li&gt;&lt;li&gt;You can even have a page which will contain the source code for all examples&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To achieve the above, within the example file, you'll do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@example your_example_name.cpp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@copydoc your_example_name&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@page your_example_name your_example_name.cpp Example&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;... (your documentation)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, to reference the example's description, you'll do this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/** &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@copydoc your_example_name&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To create a page that will contain all the examples:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/** &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@page all_examples All code examples&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;- @ref example_1 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;- @ref example_2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;\n\n\n&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@section example_1 My Example 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@include example_1_source_file.cpp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;\n\n\n&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;\n\n\n&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; @section example_2 My Example 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; @include example_2_source_file.cpp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; \n\n\n&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The end result is really amazing. &lt;a href="http://torjo.com/log2/doc/html/common_scenarios.html"&gt;Check it out!&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/doc/html/common_scenarios.html"&gt;page that contains the examples' descriptions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/doc/html/scenarios_code.html"&gt;page that contains the examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://torjo.com/log2/doc/html/examples.html"&gt;the "Examples" tab&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3239209645818349153?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3239209645818349153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3239209645818349153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3239209645818349153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3239209645818349153'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/doxygen-rules.html' title='Doxygen rules!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-5273251168510860639</id><published>2007-10-19T23:42:00.000+03:00</published><updated>2007-10-19T23:48:29.152+03:00</updated><title type='text'>VS 2005 : It's great to get meaningful error messages...</title><content type='html'>When dealing with template programming, getting compiler errors can get pretty cryptic. However, VS 2005 did its best to help me:&lt;br /&gt;&lt;br /&gt;(note: I replaced  &lt;&gt;  with { } - since the editor got pretty messed up)&lt;br /&gt;(yes: the error is 5132 characters long)&lt;br /&gt;&lt;br /&gt;1}mul_levels_one_logger.obj : error LNK2001: unresolved external symbol "struct boost::logging::detail::log_keeper{struct boost::logging::logger{struct boost::logging::process_msg{struct boost::logging::gather::ostream_like::return_str{class std::basic_ostringstream{char,struct std::char_traits{char},class std::allocator{char} } },struct boost::logging::writer::format_write{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::format_and_write::simple{struct boost::remove_reference{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;} },struct boost::logging::msg_route::simple{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type} },class boost::logging::array::shared_ptr_holder{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},class boost::logging::threading::mutex_win32},class boost::logging::array::shared_ptr_holder{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type},class boost::logging::threading::mutex_win32} } },struct boost::logging::filter::no_ts},&amp;amp;struct boost::logging::logger{struct boost::logging::process_msg{struct boost::logging::gather::ostream_like::return_str{class std::basic_ostringstream{char,struct std::char_traits{char},class std::allocator{char} } },struct boost::logging::writer::format_write{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::format_and_write::simple{struct boost::remove_reference{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;} },struct boost::logging::msg_route::simple{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type} },class boost::logging::array::shared_ptr_holder{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } &amp;amp;,struct boost::logging::manipulator::detail::default_type},class boost::logging::threading::mutex_win32},class boost::logging::array::shared_ptr_holder{struct boost::logging::manipulator::base{class std::basic_string{char,struct std::char_traits{char},class std::allocator{char} } const &amp;amp;,struct boost::logging::manipulator::detail::default_type},class boost::logging::threading::mutex_win32} } },struct boost::logging::filter::no_ts} &amp;amp; __cdecl g_l_boost_log_impl_(void)} g_l" (?g_l@@3U?$log_keeper@U?$logger@U?$process_msg@U?$return_str@V?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@ostream_like@gather@logging@boost@@U?$format_write@U?$base@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@manipulator@logging@boost@@U?$base@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@234@U?$simple@U?$remove_reference@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@boost@@@format_and_write@34@U?$simple@U?$base@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@manipulator@logging@boost@@U?$base@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@234@@msg_route@34@V?$shared_ptr_holder@U?$base@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@manipulator@logging@boost@@Vmutex_win32@threading@34@@array@34@V?$shared_ptr_holder@U?$base@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Udefault_type@detail@manipulator@logging@boost@@@manipulator@logging@boost@@Vmutex_win32@threading@34@@array@34@@writer@45@@logging@boost@@Uno_ts@filter@23@@logging@boost@@$1?g_l_boost_log_impl_@@YAAAU123@XZ@detail@logging@boost@@A)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-5273251168510860639?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/5273251168510860639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=5273251168510860639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5273251168510860639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5273251168510860639'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/vs-2005-its-great-to-get-meaningful.html' title='VS 2005 : It&apos;s great to get meaningful error messages...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8472887785742131892</id><published>2007-10-19T11:19:00.000+03:00</published><updated>2007-10-19T11:27:10.730+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='law'/><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><category scheme='http://www.blogger.com/atom/ns#' term='stupidity'/><title type='text'>They must be using a group IQ...</title><content type='html'>Some company just thought that since copyright is such a cool thing, why not copyright as much as possible?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pubcit.typepad.com/clpblog/2007/10/you-hereby-agre.html"&gt;http://pubcit.typepad.com/clpblog/2007/10/you-hereby-agre.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://techdirt.com/articles/20071017/092927.shtml"&gt;http://techdirt.com/articles/20071017/092927.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next thing, probably they'll copyright their javascript variable names...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8472887785742131892?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8472887785742131892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8472887785742131892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8472887785742131892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8472887785742131892'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/t.html' title='They must be using a group IQ...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-8968440346029771536</id><published>2007-10-18T09:45:00.001+03:00</published><updated>2007-10-18T10:04:42.201+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='hell'/><title type='text'>The email hell...</title><content type='html'>First, there's spamming - we all get that (forgive the pun).&lt;br /&gt;&lt;br /&gt;And we all find ways to deal with it - but it seems that every email server has its own twisted way of making sure the right email never gets to you.&lt;br /&gt;&lt;br /&gt;For instance, mine (and I didn't know that), &lt;span style="font-style: italic;"&gt;did&lt;/span&gt; an email check on the sender - if the sender email is invalid, the email doesn't get through.&lt;br /&gt;&lt;br /&gt;Alrighty! That &lt;span style="font-style: italic;"&gt;should &lt;/span&gt;be cool, right? Well, not really... Because being afraid of spam, a lot of users purposely obfuscate their email address - and I don't get their email. Oh well - lets say we forget that, and move on... But wait, there's more! Even legitimate users, with legitimate emails can get into trouble:&lt;br /&gt;&lt;br /&gt;Email verification can be used by spammers, to see if an email exists or not. Now, ain't that cute? Sooo... some email servers decided to get smart, and not respond to email verification. Sounds pretty reasonable, right?&lt;br /&gt;&lt;br /&gt;Now, lets see how a server that requests an email verification of the sender plays along with a server that does not respond to it. Well - not good at all: the former server tries several times, and the latter thinks it's spam. End result: an email coming from the latter server will never get through. Aaaaand: you (your ip, email, etc) will end up in the latter server's spam list.&lt;br /&gt;&lt;br /&gt;That's what happened to an email I got from Charles Brockman - anyway, I think that's sorted out (even though I'm still on AT&amp;amp;T's spam list :P )&lt;br /&gt;&lt;br /&gt;I had my email provider remove that &lt;span style="font-style: italic;"&gt;sender email verification &lt;/span&gt;for my address. And just when I though I was out of problems, here's an email I got, when answering to someone else:&lt;br /&gt;&lt;br /&gt;&lt;pre wrap=""&gt;    SMTP error from remote mail server after RCPT TO:&lt;[...]@users.sf.net&gt;:&lt;br /&gt; host mail.sourceforge.net [66.35.250.206]: 550-Postmaster verification failed while checking [...]@torjo.com&lt;br /&gt; 550-Called:   72.52.140.12&lt;br /&gt; 550-Sent:     RCPT TO:postmaster -at- torjo.com&lt;br /&gt; 550-Response: 550 No such email address&lt;br /&gt; 550-Several RFCs state that you are required to have a postmaster&lt;br /&gt; 550-mailbox for each mail domain. This host does not accept mail&lt;br /&gt; 550-from domains whose servers reject the postmaster address.&lt;br /&gt;&lt;br /&gt; 550 Sender verify failed&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Oh well - back to the drawing board - I've emailed my provider - I'll get that "installed".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-8968440346029771536?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/8968440346029771536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=8968440346029771536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8968440346029771536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/8968440346029771536'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/email-hell.html' title='The email hell...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7272256770962630834</id><published>2007-10-14T18:59:00.000+03:00</published><updated>2007-10-14T19:00:26.366+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Nigeria vs Bill Gates</title><content type='html'>This was one of those funnies - that you just can't believe could happen: &lt;a href="http://gizmodo.com/gadgets/stupid/nigeria-asks-if-bill-gates-is-a-mooch-307889.php"&gt;Bill gates was denied visa for Nigeria&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7272256770962630834?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7272256770962630834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7272256770962630834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7272256770962630834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7272256770962630834'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/nigeria-vs-bill-gates.html' title='Nigeria vs Bill Gates'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-4064173770571925791</id><published>2007-10-14T11:46:00.000+03:00</published><updated>2007-10-14T13:35:27.806+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Programming'/><title type='text'>The template&lt; namespace&gt; construct</title><content type='html'>2 days ago, I've discovered an interesting technique, which is equivalent to the&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;template&lt; &lt;span style="font-weight: bold; font-style: italic;"&gt;namespace&lt;/span&gt;&gt; &lt;/span&gt;construct.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;I will first show you an example, because talking about concepts combined with templates is kind of rough ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The need&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have a function '&lt;span style="font-style: italic;"&gt;write&lt;/span&gt;' - that can be overloaded for different types.&lt;br /&gt;I have 3 namespaces in which this resides - and on each namespace, the meaning of '&lt;span style="font-style: italic;"&gt;write&lt;/span&gt;' is completely different:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;prepend&lt;/span&gt; - prepends a string&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;append&lt;/span&gt; - appends a string&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;modify&lt;/span&gt; - modifies a string&lt;/li&gt;&lt;/ul&gt;I have several functors which get the namespace as template argument, and then call the write function. So what I want is something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;template&lt; &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;namespace&lt;/span&gt; &lt;/span&gt;convert = prepend&gt;&lt;br /&gt;struct write_time {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;template&lt;class&gt;&lt;br /&gt;void operator()(const msg_type &amp;amp; msg) {&lt;/class&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  convert::write(msg, src);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why template&lt;namespace&gt;&lt; &lt;span style="font-style: italic;"&gt;namespace&lt;/span&gt;&gt; ?&lt;/namespace&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course, it would be easy to have the same concept as a template&lt;class&gt;&lt; &lt;span style="font-style: italic;"&gt;class&lt;/span&gt;&gt;. However, I want other libs/client code to be able to overload my function, and my functor classes to still have the same default (&lt;span style="font-family:courier new;"&gt;convert_format::prepend&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The construct&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solutions is simple: just defer to a class which forwards to your namespace:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;namespace convert_format {&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;namespace prepend {&lt;br /&gt;void write(const string_type &amp;amp; src, string &amp;amp; dest) {&lt;br /&gt;dest.insert( dest.begin(), src.begin(), src.end() );&lt;br /&gt;}&lt;br /&gt;template&lt; &lt;span style="font-style: italic;"&gt;class string&lt;/span&gt;&gt; void write(const string_type &amp;amp; src, cache_string_one_str&lt;&gt; &amp;amp; dest) {&lt;br /&gt;dest.prepend_string(src);&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;}}&lt;br /&gt;&lt;br /&gt;struct do_convert_format {&lt;br /&gt;struct prepend {&lt;br /&gt;template&lt; &lt;span style="font-style: italic;"&gt;class string&lt;/span&gt;&gt;&lt;br /&gt;void write(const string_type &amp;amp; src, string &amp;amp; dest) {&lt;br /&gt;convert_format::prepend::write(src, dest);&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct append { ... };&lt;br /&gt;struct modify { ... };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/class&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;When implementing my functor classes, I just use:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;template&lt;   &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;class&lt;/span&gt; &lt;/span&gt;convert = do_convert_format::prepend&gt;&lt;br /&gt;struct write_time {&lt;/span&gt; ... &lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've used this in my &lt;a href="http://torjo.com/log2/"&gt;Boost Logging Lib v2&lt;/a&gt; : &lt;a href="http://svn.boost.org/svn/boost/sandbox/logging/boost/logging/format/formatter/convert_format.hpp"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm sure someone has used this before. Is it documented anywhere else?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-4064173770571925791?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/4064173770571925791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=4064173770571925791' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4064173770571925791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/4064173770571925791'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/template-construct.html' title='The template&lt; namespace&gt; construct'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-5240738838466655579</id><published>2007-10-11T20:24:00.000+03:00</published><updated>2007-10-14T19:01:38.470+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='office'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The mobile office - feedback</title><content type='html'>Have comments related to the &lt;a href="http://torjo.com/freelance_articles/mobile_office.html"&gt;Mobile office&lt;/a&gt; article?&lt;br /&gt;Please post them here ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-5240738838466655579?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/5240738838466655579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=5240738838466655579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5240738838466655579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/5240738838466655579'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/mobile-office-feedback.html' title='The mobile office - feedback'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-2692440944314609173</id><published>2007-10-11T18:10:00.000+03:00</published><updated>2007-10-14T19:02:08.060+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Boost Logging v2 - with documentation</title><content type='html'>I've added quite a bit more cool things to the lib, and added documentation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torjo.com/log2/"&gt;http://torjo.com/log2/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://torjo.com/log2/doc/html/"&gt;http://torjo.com/log2/doc/html/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-2692440944314609173?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/2692440944314609173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=2692440944314609173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2692440944314609173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/2692440944314609173'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/boost-logging-v2-with-documentation.html' title='Boost Logging v2 - with documentation'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7739268056629049748</id><published>2007-10-03T11:16:00.000+03:00</published><updated>2007-10-14T19:02:36.105+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logging'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Boost Logging v2</title><content type='html'>Well, it's been a looooong time... But I'm back!&lt;br /&gt;I'm developing the Boost Logging Lib v2 - &lt;a href="http://torjo.com/log2/"&gt;Check it out!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feedback is most welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7739268056629049748?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7739268056629049748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7739268056629049748' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7739268056629049748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7739268056629049748'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/boost-logging-v2.html' title='Boost Logging v2'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-3940038165832230157</id><published>2007-10-02T12:21:00.000+03:00</published><updated>2007-10-14T19:02:54.979+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='C++ Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Tip: commenting variables/constants</title><content type='html'>For too many times, I see code like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;// we allow only 100 words&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;int allow_word_count = 100;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;// we allow only up to 10 users&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;const int MAX_USER_COUNT = 10;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's wrong with the above?&lt;br /&gt;&lt;br /&gt;A program should stay flexible in the face of change. How would you like to see:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;// we allow only 100 words&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;int allow_word_count = 245;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; Not very pleasant - but it happens. So, make your comments descriptive, while &lt;span style="font-style: italic;"&gt;avoiding to use the actual value in the comment&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;// we allow only this many words&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;int allow_word_count = 100;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;// we allow only up to this many users&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;const int MAX_USER_COUNT = 10;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Much better!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-3940038165832230157?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/3940038165832230157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=3940038165832230157' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3940038165832230157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/3940038165832230157'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/10/tip-commenting-variablesconstants-dont.html' title='Tip: commenting variables/constants'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1020158117524855893</id><published>2007-09-28T10:53:00.000+03:00</published><updated>2007-10-14T19:03:16.338+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>I only read it for the comments...</title><content type='html'>Just read &lt;a href="http://www.news.com/8301-10784_3-9785337-7.html?tag=nefd.only"&gt;Why Microsoft must abandon Vista today...&lt;/a&gt; - while the article is not that convincing, anyway, it's one of those greeaaat articles, with &lt;span style="font-weight: bold;"&gt;lots &lt;/span&gt;of comments - since everyone is entitled to their opinion, and they want to share it with the rest of us... And what makes it even better - the fact that most people choose sides - the article is either &lt;span style="font-style: italic;"&gt;enlightening&lt;/span&gt;, or  &lt;span style="font-style: italic;"&gt;crap&lt;/span&gt;.   And, under the hood of anonymity, you get to cheer or flame lots of OSs and OS versions...&lt;br /&gt;&lt;br /&gt;This reminds me of football (soccer) games - where everybody has an opinion of what each player should do/have done. It's fun fun fun!&lt;br /&gt;&lt;br /&gt;We need more of these articles! Yuppie!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1020158117524855893?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1020158117524855893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1020158117524855893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1020158117524855893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1020158117524855893'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/09/i-only-read-it-for-comments.html' title='I only read it for the comments...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-6162913967393755645</id><published>2007-09-26T21:47:00.000+03:00</published><updated>2007-09-26T22:34:48.406+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>#ifdef _DEBUG - baaaad directive!</title><content type='html'>I see a lot of code that uses _DEBUG or NDEBUG to create different versions of functions, variables, etc:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#ifdef _DEBUG&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    void myfunc(my_args);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    void myfunc(my_args);&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However, we can always do better - when using #ifdef, specify &lt;span style="font-style: italic;"&gt;your intent&lt;/span&gt;. The fact that a directive happens to be turned on only in debug mode, that's a different story.&lt;br /&gt;&lt;br /&gt;Why? You have more flexibility, being able to turn the directive on/off in both debug and release configurations, or even in other custom configuration you might have.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Case in point:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family: arial;"&gt;&lt;br /&gt;#include &lt;assert.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;#ifdef CUSTOM_ASSERT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;// even on a failed assertion, we don't break!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;#undef assert&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;#define assert(exp) (void)( (exp) || (custom_assert(#exp, __FILE__, __LINE__), 0) )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;void custom_assert(const char *, const char *, unsigned);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The above allows me to create my custom assert function. This will happen only if CUSTOM_ASSERT is turned on.&lt;br /&gt;&lt;br /&gt;For my application , I need this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;in release, while doing testing&lt;/li&gt;&lt;li&gt;in debug mode, while deploying application to the customer&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-6162913967393755645?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/6162913967393755645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=6162913967393755645' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6162913967393755645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/6162913967393755645'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/09/ifdef-debug-baaaad-directive.html' title='#ifdef _DEBUG - baaaad directive!'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-7460451839364166425</id><published>2007-09-25T08:16:00.000+03:00</published><updated>2007-09-25T08:24:31.123+03:00</updated><title type='text'>Templates @ work</title><content type='html'>This sounds interesting, but a bit to the extreme IMHO:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.artima.com/cppsource/subscription_problem.html"&gt;Subscribing Template Classes with Object Factories in C++&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.artima.com/forums/flat.jsp?forum=226&amp;amp;thread=214541"&gt;See my comments&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-7460451839364166425?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.artima.com/cppsource/subscription_problem.html' title='Templates @ work'/><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/7460451839364166425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=7460451839364166425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7460451839364166425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/7460451839364166425'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/09/templates-work.html' title='Templates @ work'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699828515576400912.post-1489341223603268350</id><published>2007-09-21T20:40:00.001+03:00</published><updated>2007-09-21T20:52:19.164+03:00</updated><title type='text'>The beginning...</title><content type='html'>I've wanted to create a blog for quite a while now, and "I've just been busy"... And I'm busy now too, but I chose to make time...&lt;br /&gt;&lt;br /&gt;It's always good to get in touch with your &lt;span style="font-style: italic;"&gt;virtual &lt;/span&gt;self... So, that's what I'm doing. I'm making my thoughts go digital. Just in case I need to later do a search on them...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;++start;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/699828515576400912-1489341223603268350?l=torjo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torjo.blogspot.com/feeds/1489341223603268350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=699828515576400912&amp;postID=1489341223603268350' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1489341223603268350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/699828515576400912/posts/default/1489341223603268350'/><link rel='alternate' type='text/html' href='http://torjo.blogspot.com/2007/09/beginning.html' title='The beginning...'/><author><name>John Torjo</name><uri>http://www.blogger.com/profile/17969533343197027125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://www.torjo.com/meblog.jpg'/></author><thr:total>2</thr:total></entry></feed>
