<?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:blogger='http://schemas.google.com/blogger/2008' 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-3266507557825174846</id><updated>2024-08-28T10:30:19.153-04:00</updated><title type='text'>U&#39;s</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-9110130004415890078</id><published>2009-03-28T13:09:00.015-04:00</published><updated>2009-03-28T15:32:02.162-04:00</updated><title type='text'>Alone (ish)</title><content type='html'>/* This continues the topic I started in &lt;a href=&quot;http://usqs.blogspot.com/2008/02/metaphysics.html&quot;&gt;Quantum Observations&lt;/a&gt;. For the initiated the point of the article was that the potential spontaneous appearance of an observer on one of the branches of the superposition, however improbable, would collapse the functions making the slightest chance for the appearance of an observer an inevitable fact.&lt;br /&gt;I am arguing that this is the real explanation of the highly improbable appearance of conscious life or more precisely - observers.&lt;br /&gt;&lt;br /&gt;I&#39;ve mentioned that this also means that we are alone in the universe but in what sense? &lt;br /&gt;&lt;br /&gt;Many of the questions I got are different versions of the following argument:&lt;br /&gt;When the superpositions collapse, is that a local thing or does it apply to the whole universe? If it is local, can&#39;t two separate observers created on two remote galaxies, eventually meet?&lt;br /&gt;&lt;br /&gt;Let&#39;s start by taking a closer look at our abused kitten. When the poison pill explodes the kitten is painfully aware of it. If it doesn&#39;t, it is just lying in the dark, bored and upset. Either way, from its perspective the superposition has already collapsed. Only outside the box is it still undecided. The experiment tells us that superpositions collapse when knowledge is obtained by the observer. The effects are definitely local.&lt;br /&gt;&lt;br /&gt;If you are looking at a distant galaxy that only appears as a bright dot in the night sky, you have very little knowledge about it. All positions that manifest as this bright dot are still undecided. In a manner of speaking this galaxy is one big superposition waiting to happen.&lt;br /&gt;Previous arguments are leading us to suspect that the distant galaxy is crawling with intelligent and inevitable observers so why can&#39;t we meet them? We invent federal tax, build a huge telescope, turn it on and aloha!&lt;br /&gt;Well, the second we turned on the telescope the superposition collapses to one of its more probable positions and sadly this doesn&#39;t include any green men.&lt;br /&gt;&lt;br /&gt;The strongest argument for life other than ours in the universe state that if it happened once it could happen twice: there is nothing special about us that could not theoretically happen again. However, if we accept the singularity of observers as the explanation for the appearance of life, there is something that makes us special: we were first (from our point-of-view at least and yes it is a bit confusing but give it some time).&lt;br /&gt;&lt;br /&gt;When we say that the appearance of an observer is inevitable, it is true for that specific observer. There are infinite universes with Observers in them but only one observer in each one. We are alone in ours.&lt;br /&gt;&lt;br /&gt;* this is using the terminology of the Many-Worlds interpretation of quantum mechanics. If you&#39;d like to use a different interpretation the wording will change but the result would be the same - we are alone in our universe.&lt;br /&gt;&lt;br /&gt;* When I say &quot;specific observer&quot;, it means all of us on this planet. If the first observer had a way to reproduce, it&#39;s off-springs are likely enough to happen. Since evolution (i.e. error prone replicators) happened to be the path that led to our first observer, the second one is part of that same observer &quot;type&quot;.&lt;br /&gt;&lt;br /&gt;*/</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/9110130004415890078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/9110130004415890078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/9110130004415890078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/9110130004415890078'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2009/03/alone-ish.html' title='Alone (ish)'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-6847506550965244988</id><published>2008-12-08T04:31:00.004-05:00</published><updated>2008-12-16T08:50:50.476-05:00</updated><title type='text'>The History of Cameras</title><content type='html'>/* I&#39;ve always been fascinated with cameras. Not the art of photography, mind you but the cameras themselves. The high precision, the complex mechanics and the fact that until recently you could take one apart and understand what each part does and why. Cameras have always been at the forefront of contemporary technology pushing the envelope of mechanical engineering and electronics.&lt;br /&gt;&lt;br /&gt;The iPhone is the perfect platform to tell the story of the camera&#39;s evolution and, most importantly, try and preserve a small chunk of the user-experience and look-and-feel of these technical marvels.&lt;br /&gt;&lt;br /&gt;The result is the History-of-Cameras, an educational iPhone app that covers the major milestones of cameras&#39; evolution and provides a simulator for each one.&lt;br /&gt;&lt;br /&gt;I&#39;ve tried to tell the story as accurately as possible.&lt;br /&gt;For comments, corrections, suggestions and support email me: yuvalperlov at gmail.com&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=299876631&amp;mt=8&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 142px; height: 60px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirsTCRy32fV1DHd_B2STciavLpmeEw-GO6PFPI0wQL5o0PvO1JGlmbnn1TKfMT3PTSButQdkkz3wrNIYvkd-fOxRqFNNPJzxKz0H3PvhOlbhcMkvPvYsZRajSv2bvBef0qIiAvQWGcTttB/s400/appstore.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5280384577193569234&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*/</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/6847506550965244988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/6847506550965244988' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/6847506550965244988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/6847506550965244988'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2008/12/history-of-cameras.html' title='The History of Cameras'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirsTCRy32fV1DHd_B2STciavLpmeEw-GO6PFPI0wQL5o0PvO1JGlmbnn1TKfMT3PTSButQdkkz3wrNIYvkd-fOxRqFNNPJzxKz0H3PvhOlbhcMkvPvYsZRajSv2bvBef0qIiAvQWGcTttB/s72-c/appstore.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-7795426563366539640</id><published>2008-02-17T16:42:00.010-05:00</published><updated>2009-03-28T13:50:46.459-04:00</updated><title type='text'>Quantum Observation</title><content type='html'>/* This one is about Quantum Mechanics and Natural Evolution. Yes, it is a bit off topic. My blog.&lt;br /&gt;&lt;br /&gt;(1) As an historical account of our development, Evolution has one major flaw: It&#39;s probability of ever happening is so extremely close to zero. Despite a mountain of corroborating evidence, skeptics still dismiss the whole idea with sentences that begin with &quot;yes, but do you really believe that...&quot;. Intuitively and mathematically the chances of life ever starting are slim. Combine that with the chances of life surviving the first few million years and the whole thing seems a bit of a stretch. The common answers are (a) human intuition sucks and (b) the universe is so ginormous, everything is possible. Meh. The problem with these arguments is that they are virtually impossible to substantiate with actual numbers. It is not possible for us to imagine all the possible ways for life to appear and deduce a probability from it.&lt;br /&gt;&lt;br /&gt;(2) For the past few hundred years, philosophers and physicists have done their best to ruin our romantic view of the world. Mysticism, magic, even God, have been replaced with boring numbers and formula. However, there is one element that persists despite their best attempts: The concept of the Observer. In quantum mechanics the Observer is a crucial part of any experiment. The theories that try to explain her presence are so strange they make you reminisce old-style, straight-forward witchcraft. If the inquisition ever came across a guy believing in parallel universes he&#39;d be thrown in the bon fire before he had time to say Schrödinger&#39;s cat.&lt;br /&gt;Now this particular cat is part of an experiment that demonstrates the strange part of quantum mechanics. A dog lover sticks a cat in a box together with a poison pill. The poison pill will open if something happens on a quantum level. That something has a 50% chance of happening. The dog lover closes the lid on the box, with a satisfactory smile of a job well done. Now the point of this experiment (beside showing the furry bastard who&#39;s boss) is that until you open the lid and check, the cat is neither dead nor alive - he is in a superposition: 50% alive 50% dead. Only once the observer opens the box does the superposition collapse and the fate of the cat is decided. This is the common consensus; if you have any problems with this part, write a letter to your elected physicist.&lt;br /&gt;&lt;br /&gt;Of course the experiment could be further complicated by requiring two dependent quantum events to break open the poison pill. Now the cat would be 25% dead and 75% alive. The idea is that the events accumulate and all four branches exist in superposition until they collapse into one under the Observer&#39;s watchful eyes. &lt;br /&gt;&lt;br /&gt;The Observer is somewhat of a mystic entity. There is no clear definition of what an Observer is apart from its ability to, well, observe. Er go that a stone is not an Observer yet Sharon Stone is. Somewhere in the stone-Stone range, matter can become an Observer. It&#39;s not just an arrangement of molecules that make an observer. There has to be some level of consciousness (for instance Dr. Livingstone, despite his promising name, can observe no more).&lt;br /&gt;&lt;br /&gt;If you are still with me, here comes the fun part: The universe can be looked at as one big Schrödinger box. Only when it first banged into existence, there was no observer to speak of and all those random quantum occurrences simply accumulated creating one huge superposition. With the lack of an observer, the branches just kept on splitting again and again. The probability of each &quot;leaf&quot; was the accumulated probability of all it&#39;s preceding branches: extremely close to zero.&lt;br /&gt;Until one warm evening, one of these quantum-lines produced an Observer. At that very moment, the whole superposition collapsed, obliviating all other branches (or sending them off to parallel universes which amounts to the same thing). &lt;br /&gt;One could speculate if the first Observer was a biological cell, a prehistoric fish or Homo sapiens (or one of its close relatives). Whoever she was, she appeared rather late in the game, making the first steps of evolution, the hard ones, not only probable but virtually inevitable.&lt;br /&gt;&lt;br /&gt;If you follow this logic, there are some other conclusions to be made:&lt;br /&gt;&lt;br /&gt;We are probably the only Observer level entities in our universe. The chances of the same quantum-branch containing two separate Observer level entities, around the same time, are nil. Once we observers begun collapsing the waveform, there can be no more statistical miracles.&lt;br /&gt; &lt;br /&gt;If the first Observer is human, then the biblical story of creation is a rather nice allegory. All those improbable creations building up to Adam, the first Observer. Given the fact that without an Observer, time passage is extremely hard to define, even the timeframe sounds about right.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U&lt;/span&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;{&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;Choice decide(List&amp;lt;Choice&amp;gt; choices)&lt;/span&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;{&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;Collection.sort(choices, &lt;span style=&#39;color:blue&#39;&gt;new&lt;/span&gt; U.ChoiceSorter());&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// Free will, yey!&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;return&lt;/span&gt; choices.get(&lt;span style=&#39;color:#2B91AF&#39;&gt;Math&lt;/span&gt;.rand() &amp;gt; .75 ? 1 : 0);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &amp;nbsp;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/7795426563366539640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/7795426563366539640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/7795426563366539640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/7795426563366539640'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2008/02/metaphysics.html' title='Quantum Observation'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-6210172835102127745</id><published>2007-12-02T04:19:00.000-05:00</published><updated>2007-12-13T08:17:35.126-05:00</updated><title type='text'>Users</title><content type='html'>As posted on &lt;a href=&quot;http://www.47hats.com/?p=494&quot; target=&quot;outside&quot;&gt;47Hats&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;/* What do you feel toward your users? Take a second to think about it. Picture them, sitting in concentration, scratching their heads, trying to figure out how to use your latest creation. Make a mental note of your feelings. Keep reading. &lt;br /&gt;&lt;br /&gt;My two and half year old daughter has recently decided she wanted to &quot;work&quot; with the computer, just like daddy. I figured painting would be a good place to start so we tried Photoshop for a while. She enjoyed the painting part (throwing the trackball about while colors fill up the screen) but would very quickly get into trouble - she would click outside the window, switch paint tools, hit the start key - the desktop is a hostile environment when you&#39;re starting out. Each time I had to help her out, she grew more frustrated, until it became evident that for sanity&#39;s sake, hers and mine, I better come up with something. Daddy took a day off and wrote &lt;a href=&quot;http://www.download.com/BabyPaint/3000-2132_4-10752610.html?tag=lst-1&quot; target=&quot;outside&quot;&gt;BabyPaint&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The basic requirement was to have a safe painting environment where no accidental key stroke or mouse gesture can have unforeseen consequences. As I was coding along, picturing her trying to use it, new requirements came up: The cursor had to be BIG. She had to be able to select colors but the color palette had to be enormous and hidden until explicitly and easily called up. Mouse button optional. Heavy key strokes ignored. etc. etc.&lt;br /&gt;&lt;br /&gt;The software was ready to ship on time (daycare makes for a hard deadline) and was a huge success. She immediately sat down to use the program and simply got it. Plain joy, no frustration (I could tell by the relative lack of high pitched screams). It was my proudest moment as a developer. The application had all the features and polish needed for her to have a positive experience on the first attempt. I also had a great time writing it.&lt;br /&gt;&lt;br /&gt;So what (you ask)? Creating software for your kids, exciting as it sounds, is not the basis for a compelling business plan (unless you have enough of them for a long-tail strategy). Well, the point is this: the feeling wasn&#39;t new. It was the same feeling I get every time I create an application. I want my users to have a good time and succeed at what they do while also taking pride in my creation (in an infantile &quot;look what I did&quot; sort of way).&lt;br /&gt;&lt;br /&gt;Love thy users is a rare sentiment in the software business but it’s out there. Developing software is as much a creative process as it is an engineering discipline. Pen-to-paper, paint-to-canvas, button-to-form. All subject to the taste and personal preferences of your audience. The people that use your software do so because they like your style, respect the decisions and compromises you made and intuitively grasp your way of doing things. They deserve the same love music fans get from their idols (of course, when I say users I mean people who are actually using your software. The people from purchasing, legal, PM group, requirements committee, let them find someone else to love them).&lt;br /&gt;&lt;br /&gt;Our users are not only our audience and fans but also the true connoisseurs. Your boss/friends/mother can all look impressed and give you a raise/pat on the shoulder/kiss on the cheek (respectively I hope) but they can&#39;t truly appreciate your work - it doesn&#39;t address their need. Our users are the only ones who have the time and depth to fully understand the subtleties of our applications. They are the only ones that have the particular itch we are trying to scratch.&lt;br /&gt;&lt;br /&gt;This feeling, I believe, is at the heart of all great software. Done right, the actual design, coding and testing become mere details, technical activities that need to occur for a vision to take form. Scrum vs. Agile, Ruby vs. PHP, C# vs. Java are all important questions (well, questions) but are not central to the matter (also, let&#39;s face it, you end up writing JavaScript most of the time anyway).&lt;br /&gt;&lt;br /&gt;The love for our users, that&#39;s where the real advantage of microISVs and startups lies (at least the ones that are in it for the right reasons). That is why the next time someone looks at your software and tells you that it would take an IBM or an HP five days to develop and two more weeks to throw you out of the market, you are allowed a humble smile.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;boolean&lt;/span&gt; isHireable(Developer developer) {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;return&lt;/span&gt; isHireable((Person)developer) &amp;amp;&amp;amp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;            &lt;/span&gt;(Interview.testCodeSmithing(developer) * 0.20 +&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;             &lt;/span&gt;Interview.testPassion(developer) * 0.80) &amp;gt; 0.95;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &amp;nbsp;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/6210172835102127745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/6210172835102127745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/6210172835102127745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/6210172835102127745'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/12/users.html' title='Users'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-1531508480628664179</id><published>2007-10-04T19:18:00.001-04:00</published><updated>2008-12-09T15:55:57.753-05:00</updated><title type='text'>Projects</title><content type='html'>/* If you try to teach a physicist how to throw a ball you basically have two options: you can describe the forces that affect the ball (hand, gravity, friction) or the transfer of energies (chemical, kinetic, potential, heat). The first is a detailed, moment-by-moment account while the second is a simpler, high level description. It will give our guy some insights as to what goes into throwing a ball with no serious danger of unleashing a ball-hurling-physicist unto an unsuspecting world.&lt;br /&gt;&lt;br /&gt;Ready? Here is everything you need to know about software projects, provided you never try to actually execute one (if you want to learn how to do that, I recommend failing miserably at your first project and never repeating the same mistake twice).&lt;br /&gt;&lt;br /&gt;A project, any project, is about trading money for some desired output. The trick about managing them is optimizing your expenses and output so your customers and CFO are equally happy (or miserable, depending on the industry you happen to work in).&lt;br /&gt;&lt;br /&gt;With software, there are two surprisingly common misconception regarding each side of this simple equation:&lt;br /&gt;(a) Optimizing programmers&#39; time instead of cost. It doesn&#39;t matter if you measure your input with dollars - the question is how freely can you use your budget to purchase things that improve quality, such as training, services, hardware, software, etc. If you can&#39;t, your input is actually man-months and not money.&lt;br /&gt;(b) Targeting the agreed (and often signed) scope of work. More often than not this approach will involve post-delivery-lawyers or at the very least slowly eat away at a firm&#39;s reputation. The real output of a software project is &lt;a href=&quot;http://usqs.blogspot.com/2007/09/quality.html&quot; target=&quot;outside&quot;&gt;Quality&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5117626154214618626&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTLFTTug1S19HT6A4DJjJLhQzaOVlW6uxjHOtvhWfob6EfCbCHtm_UqaE99SWUm6-N5b70x96JcjgdHF1Yn6pJ5hIsp-R9DO9iAx8zz6tjkj1ZGAne2IST-4EmKYM_HfCVKH_Nh5PxFqk/s400/1d.png&quot; border=&quot;0&quot;&gt;&lt;br /&gt;&lt;br /&gt;On one extreme you can drive down cost by doing nothing. On the other, you spend eternity perfecting your software. Just before that there is a green zone that means your users are at various acceptable degrees of happy.&lt;br /&gt;&lt;br /&gt;There are managers, often senior, who&#39;ll do anything to cut down the cost of a project. These managers are usually not technical and consider the developers a bunch of misfits that wouldn&#39;t be able to find their desk in the morning if it wasn&#39;t for them (so they build a maze of cubicles, just to prove their point). They know about the red zone just beyond quality and are terrified of it. They believe it is the source of all their trouble (it almost never is) and often use it as an excuse to ship horrible software (&quot;it would take you forever to get it right so just ship it now&quot;). They are the main reason software is in such a bad state and I hope hell has a special testing department just for them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78AhrhDUJY2hd1CDwl9BYe_K-AU-V8yaOSngGdMuXYjGoDlOjoFx0aQZY_Wiqh9HJU9tpOu0i0CKpeUsjz1PxCgL_lkChYkIb5R6ss8Qgrlr5LL4UNtnuRRJ4ZcKesQq6SmE1NcyIhHU_/s1600-h/2d.png&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5117876623822419522&quot; style=&quot;margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78AhrhDUJY2hd1CDwl9BYe_K-AU-V8yaOSngGdMuXYjGoDlOjoFx0aQZY_Wiqh9HJU9tpOu0i0CKpeUsjz1PxCgL_lkChYkIb5R6ss8Qgrlr5LL4UNtnuRRJ4ZcKesQq6SmE1NcyIhHU_/s400/2d.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;Although time goes hand-in-hand with cost it deserves special mention because while the law of &lt;a href=&quot;http://en.wikipedia.org/wiki/Diminishing_returns&quot; target=&quot;outside&quot;&gt;Diminishing Returns&lt;/a&gt; is at its worst when applied to software, it is often ignored to simplify project planning (by developers too!). Also, managers believe that they can do that because the effort estimations are exaggerated anyway (and they are: if management believes that the budget is exaggerated the only thing left for the developers to do to protect their project is overestimate).&lt;br /&gt;There are no shortcuts: if you want to change your work force for a particular project, you have to make sure you can re-plan it so you actually finish sooner. I&#39;ve seen projects where taking a few people &lt;font style=&quot;font-style: italic;&quot;&gt;off&lt;/font&gt; the team actually reduced time-to-deliver (btw - if you haven&#39;t read the &lt;a href=&quot;http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;amp;tag=us0a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201835959&quot; target=&quot;outside&quot;&gt;bible&lt;/a&gt;, go read it. now. seriously).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlxb4pxQkO4Z8SoF6PCICfNcr7le9inoeEXpuENmKfReIdcFr0nMiumIT7z58Jm03tmVJJrDbXuEyqp3LTOR-4bMSw6cqXW6MnvZu9Qmy21PfDYKw2sAIG8cX9fP-bG2_JseDgYng7zjmd/s1600-h/2d2.png&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5117626824229516834&quot; style=&quot;margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlxb4pxQkO4Z8SoF6PCICfNcr7le9inoeEXpuENmKfReIdcFr0nMiumIT7z58Jm03tmVJJrDbXuEyqp3LTOR-4bMSw6cqXW6MnvZu9Qmy21PfDYKw2sAIG8cX9fP-bG2_JseDgYng7zjmd/s400/2d2.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cost and Time are just two (albeit important) factors that affect project success. There are countless others. Every decision during the life cycle of a project trades off some parameters, more often than not, affecting quality.&lt;br /&gt;Which technology to use? What development process to apply? Do I unchain the developers from their cubicles at night so they can go home and watch Seinfeld reruns?&lt;br /&gt;Some ad-hoc decisions are just other ways of looking at money and do not deserve a place on the circle. The ones that do, are the ones that deal with principles or general guidelines that are easy to dismiss in favor of short-term goals. When you draw your circle you have to decide which values are part of who you are and how you envision your work.&lt;br /&gt;Take for instance the happiness of the team. A happy team will create better software. However, happiness costs both money and time (also, &lt;a href=&quot;http://www.xkcd.com/323/&quot; target=&quot;outside&quot;&gt;too much beer&lt;/a&gt; and your happy team might yield some silly creations). There is no &quot;right&quot; place to put the X but you have to make a conscious decision of where you want to be - it will make sure you will get there when the pressure starts to build.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWgRgQ6Cc9qh6uoKZDWUea_xM5YouZRsbyGLbfQjnv-Q6og751UtbdX7f8ZAY4HHI5tXXcqpeUWZNvXbfo_RFxSXjsuBNrjvvaBhTXu71guRkktV_lXMcoOun_am1CbPdvRazL-i6ySWUT/s1600-h/3d2.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWgRgQ6Cc9qh6uoKZDWUea_xM5YouZRsbyGLbfQjnv-Q6og751UtbdX7f8ZAY4HHI5tXXcqpeUWZNvXbfo_RFxSXjsuBNrjvvaBhTXu71guRkktV_lXMcoOun_am1CbPdvRazL-i6ySWUT/s400/3d2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5118345028660754018&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Future and past projects often affect your current project far more than the decisions you are currently making (this also gave me a chance to test 3d modeling software to find the one intuitive enough you can use without permanent brain damage - &lt;a href=&quot;http://www.rhino3d.com/&quot; target=&quot;outside&quot;&gt;Rhino&lt;/a&gt;). For instance, a common development approach, formally known as Quick-and-Dirty (QaD) trades speed for future quality (watch &lt;a href=&quot;http://video.google.com/videoplay?docid=-7230144396191025011&amp;amp;pr=goog-sl%E2%80%9D&quot; target=&quot;outside&quot;&gt;this&lt;/a&gt; for a good description of the effect and other interesting ideas).&lt;br /&gt;Using new, unproved, technology trades present quality for future quality (or, if you happen to choose wrong, for the money it costs to redo everything). If you don&#39;t train your people you will get better cost and delivery time until one day you won&#39;t be able to deliver anything, etc, etc.&lt;br /&gt;I once worked with a team that wouldn&#39;t upgrade their development tool because they were afraid it will let in bugs they weren&#39;t testing for. Seven years later they had to upgrade six major releases and ship a version that had some major new functionality, all in one shot. As you might guess, it wasn&#39;t their finest hour (the previous versions weren&#39;t that great either - teams that do silly things tend not to stop at one).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimL_X9lwpEY4Qvvpp4TcczNeLASzZVCOg-QmhvDbF5_DV5bmfWeD8PteSJetjxx1WMB_AN6EcQgsk2rWic4pKTU79B2DXUEOTBrVoQvd4tpNq1_wHnDouhe169HMlZpxghFVxKUvNxxggi/s1600-h/3d.png&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5117627004618143282&quot; style=&quot;margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimL_X9lwpEY4Qvvpp4TcczNeLASzZVCOg-QmhvDbF5_DV5bmfWeD8PteSJetjxx1WMB_AN6EcQgsk2rWic4pKTU79B2DXUEOTBrVoQvd4tpNq1_wHnDouhe169HMlZpxghFVxKUvNxxggi/s400/3d.png&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Orange tells you everything you need to know about software projects: Quality is what you are aiming for but be careful of overshooting, a lot of other constraints make quality hard to achieve, your decisions in previous projects affect your current project which in turn affects your ability to deliver quality in the future. &lt;br /&gt;&lt;br /&gt;The rest is details.&lt;br /&gt;&lt;br /&gt;And like any good model, when you run out of dimensions you can put on paper, it&#39;s done.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;public&lt;/span&gt; Action solution(Problem problem) {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;int&lt;/span&gt; timeToThink = problem.getComplexity();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// Turns out it is more important to get&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// it right...&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// if (World.getPressure()==Pressure.HIGH) {&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;//&lt;span&gt;   &lt;/span&gt;timeToThink = SHOOT_FROM_THE_HIP;&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// }&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;return&lt;/span&gt; courseOfAction(problem, timeToThink);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/1531508480628664179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/1531508480628664179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/1531508480628664179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/1531508480628664179'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/10/projects.html' title='Projects'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTLFTTug1S19HT6A4DJjJLhQzaOVlW6uxjHOtvhWfob6EfCbCHtm_UqaE99SWUm6-N5b70x96JcjgdHF1Yn6pJ5hIsp-R9DO9iAx8zz6tjkj1ZGAne2IST-4EmKYM_HfCVKH_Nh5PxFqk/s72-c/1d.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-1709424076288644586</id><published>2007-09-21T09:23:00.000-04:00</published><updated>2007-09-21T10:22:53.251-04:00</updated><title type='text'>Quality</title><content type='html'>/* Given the amount of energy the software industry spends on Quality it is amazing how elusive it remains (amazing as in stupefying, not awesome) . High quality software is not only hard to achieve but surprisingly hard to define.&lt;br /&gt;&lt;br /&gt;For me, quality describes the fitness of the software to resolve the problem it was designed to deal with.  Fitness in the Darwinian sense: how well is the individual optimized to the environment it lives in. Quality is also measured by ruthless Darwinian standards: is the software being used (life) or are users doing everything they can not to (death).&lt;br /&gt;&lt;br /&gt;Every little detail of the user experience affects its survivability. Quality is not limited to the number of bugs or UI usability. It is also influenced by price and business model (providing the user has to deal with it), deployment method and even intangible properties such as coolness or humor. &lt;br /&gt;&lt;br /&gt;Quality has such a broad span because there is no clear cut between a crashing app and the intangible values the software radiates. They are all affected directly by the way the software was designed and implemented.&lt;br /&gt;&lt;br /&gt;Take for instance Firefox and Opera (&lt;a target=&quot;outside&quot; href=&quot;http://www.w3schools.com/browsers/browsers_stats.asp&quot;&gt;34.5% vs 1.9%&lt;/a&gt; market share). They are both free browsers but Firefox is open-source and Opera is not. This is not just a business decision; it goes to the core of the system and affects every aspect of its design, development, feature set, even the way it is distributed. &lt;br /&gt;You could argue that the end-user doesn&#39;t care if the browser she is using is open source or not. My argument is that the set of values Firefox is associated with and radiates affects its user experience far more than the way it implements tabbed browsing (given they all have some sort of tabs ... seven!!! it took you seven versions?!?).&lt;br /&gt;&lt;br /&gt;Natural Selection as an indicator of quality also leads to some surprising revelations. Consider Microsoft Word (stay with me here). The software everyone loves to hate is by far the most  widespread word cruncher out there . This makes it (admittedly by definition) the highest quality solution for word processing in the current environment. Sure its expensive, buggy, unpredictable, user hostile and altogether annoying. However, it is, at the moment, the &lt;b&gt;optimal&lt;/b&gt; solution to word processing! This means that the aforementioned qualities are offset by others such as interoperability with other office tools, bundled apps, rich feature set and most importantly current spread and resistance to change (which falls in nicely with the evolution analogy).&lt;br /&gt;&lt;br /&gt;This doesn&#39;t mean that dominating software guarantees its &quot;safety&quot; but rather that potential competitors will need a significant advantage in quality for the population to tilt towards them. For this reason, there is a good chance, Word&#39;s worst enemy is not OpenOffice or Google&#39;s hosted solution but rather new versions that tinker with &lt;a href=&quot;http://www.joelonsoftware.com/items/2007/08/18.html&quot; target=&quot;outside&quot;&gt;old conventions&lt;/a&gt;. Combined with a changing environment (web apps, free alternatives, global warming) this might spell the end of the dominant specie (or not).&lt;br /&gt;&lt;br /&gt;But why is it that software quality is so hard to predict it needs an after-the-fact definition? What is the big difference between a mail app and a toaster oven (excluding software embedded ovens that could land the space-shuttle)?&lt;br /&gt;&lt;br /&gt;The common reason given, is that software development is complex and a bit fuzzy around the edges. Despite attempts by the academic world and big software houses, it is as close to an engineering discipline today as my late grandmother&#39;s cooking. Sure,  it  yielded good, fairly repeatable, results but was intuition-based and employed some informal methods, which if published could capture the FDA&#39;s attention (or some other three lettered agency).&lt;br /&gt;&lt;br /&gt;Well, that&#39;s part of the story. The other part is the complex ecosystem in which software lives. Just as the optimal length of the cheetah&#39;s leg is impossible to calculate, there is no way to calculate the optimum point between Power and Simplicity or Speed and Scalability: there are just too many variables. As an example, take the classic Google vs. Yahoo approach: Only in retrospect is it possible to know that in the search-engine domain, users prefer a simple one-text-box solution to a powerful hundreds-of-useful-links page. Enough so, to challenge the dinosaurs of the time (contrary to the belief of many professional analysts).&lt;br /&gt;&lt;br /&gt;So what is the point of these earth shattering insights? First, that great software will continue to rely on programmers with highly developed intuition and will not be replaced with &quot;process&quot; or tools in the foreseeable future. Second, that it is deceptively hard to judge software quality until it&#39;s too late. But maybe most important is the realization that I  have lately exceeded the recommended dose  of &lt;a target=&quot;outside&quot; href=&quot;http://www.amazon.com/gp/product/0199291152?ie=UTF8&amp;tag=us0a-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0199291152&quot;&gt;Dawkins writings&lt;/a&gt;. &lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U &lt;span style=&#39;color:blue&#39;&gt;extends&lt;/span&gt; Person {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;public&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;void&lt;/span&gt; introduce(Meme meme) &lt;span style=&#39;color:blue&#39;&gt;throws&lt;/span&gt; Feedback {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;Person origin = meme.getOrigin();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;if&lt;/span&gt; (idiots.contains(origin)) {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;         &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;//todo: implement a more diplomatic approach&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;         &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;throw&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;new&lt;/span&gt; Feedback(&lt;span style=&#39;color:#A31515&#39;&gt;&amp;quot;You&#39;re an idiot&amp;quot;&lt;/span&gt;); &lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;if&lt;/span&gt; (cutThroughTheCrap(meme)) {&lt;span style=&#39;color:green&#39;&gt;// A bit crude but highly optimized&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;         &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;if&lt;/span&gt; (origin!=&lt;span style=&#39;color:blue&#39;&gt;this&lt;/span&gt;) { &lt;span style=&#39;color:green&#39;&gt;// It happens :-(&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;            &lt;/span&gt;idiots.add(origin);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;         &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;         &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;throw&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;new&lt;/span&gt; Feedback(&lt;span style=&#39;color:#A31515&#39;&gt;&amp;quot;Let me think about this&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;memeDatabase.add(meme);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &amp;nbsp;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/1709424076288644586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/1709424076288644586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/1709424076288644586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/1709424076288644586'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/09/quality.html' title='Quality'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-8157896049389454895</id><published>2007-08-31T17:53:00.000-04:00</published><updated>2007-08-31T18:59:33.993-04:00</updated><title type='text'>Vista-Rant: A Formal Approach</title><content type='html'>/* I&#39;ve been using Vista for a few seconds now and already I hate the dialog box that pops up, dims the screen, and asks you if it was you who just clicked whatever it is you clicked.&lt;br /&gt;My first reaction was &quot;sure, weren&#39;t you here?&quot;. The second time, I became somewhat irritated. Now I hate it. Everyone hates it (except for &lt;a href=&quot;http://www.youtube.com/watch?v=DUPxkzV1RTc&quot; target=&quot;outside&quot;&gt;Apple&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;My guess is the Vista product team has a 6&#39;8 giant in charge of security called &quot;The Crasher&quot;. His first plan was to just turn off the power - &quot;No Power, No Hacker!&quot; (Incidently, The Crasher has a heavy Austrian accent which makes it rhyme perfectly). After many a day of arm twisting they&#39;ve reached a painful compromise which is what we are dealing with today.&lt;br /&gt;&lt;br /&gt;Anyway.&lt;br /&gt;&lt;br /&gt;Instead of bitching about Vista like everyone else, I&#39;ve decided to provide scientific, rock-solid proof that it is a silly feature. We&#39;ll start with a premise, contradict it and hopefully the whole thing will just go away.&lt;br /&gt;&lt;br /&gt;1. The whole point of this ordeal is making sure the active user never does anything with admin privileges unless she asks for it explicitly. &lt;br /&gt;2. Why? If you are downloading some malware (how many times do I have to tell you Mom, not to open attachments from uifwef23vs@fasdcvs.ru) the damage it can do is limited by the fact that it does not run as an Administrator (that does not include all personal data but we will let this one slide).&lt;br /&gt;3. Once you click continue, whatever it is you are running gets Administrator privileges and can do whatever it wants.&lt;br /&gt;4. A user (any user!) has no way of telling which actions will require a &quot;continue&quot; and which won&#39;t.&lt;br /&gt;5. Any program can be configured to run as Administrator which, when launched, triggers the &quot;silly dialog&quot;.&lt;br /&gt;6. A potential malware can replace a non-admin-requiring action with itself and make sure it requires admin privileges.&lt;br /&gt;7. The next time our user is trying to perform the &quot;infected&quot; action, Vista will ask if it was actually her that is performing the action. Our user is sure to click continue (see 4).&lt;br /&gt;8. We now have malware running as Admin. For good measure, it can run the actual task so everything looks nice and normal. This contradicts are starting point (1 I believe was its number), proving, once and for all, that the whole thing is just silly.&lt;br /&gt;QED (and good riddance).&lt;br /&gt;&lt;br /&gt;PS - Crasher, if you&#39;re reading this, I just want to say I&#39;ve always admired your sense of humor. Also, if you need me, I am temporarily staying at the Hilton Tikrit.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;public&lt;/span&gt; Set&amp;lt;Thing&amp;gt; queryUniqueThingsICanDo() {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:green;&#39;&gt;&lt;span&gt;      &lt;/span&gt;// return thingsICanDo().removeAll(World.things()); &lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span style=&#39;mso-tab-count:1&#39;&gt;      &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// Optimized: Found out there is &lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:green;&#39;&gt;&lt;span&gt;      &lt;/span&gt;// Nothing you can do that can&#39;t be done&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;return&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;new&lt;/span&gt; HashSet&amp;lt;Thing&amp;gt;();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &amp;nbsp;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/8157896049389454895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/8157896049389454895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/8157896049389454895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/8157896049389454895'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/08/vista-formal-approach.html' title='Vista-Rant: A Formal Approach'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-3331844989374459403</id><published>2007-08-03T18:48:00.000-04:00</published><updated>2007-08-18T04:35:04.202-04:00</updated><title type='text'>Hello World!</title><content type='html'>&lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;WRITE (UNIT=*, FMT=*) &lt;span style=&#39;color:maroon&#39;&gt;&#39;Hello World!&#39;&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;WriteLn(&lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;printf(&lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!\n&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;PRINT &lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;cout &amp;lt;&amp;lt; &lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;System.out.println(&lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;puts &lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;Console.WriteLine(&lt;span style=&#39;color:maroon&#39;&gt;&amp;quot;Hello World!&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// Can&#39;t wait to see what&#39;s next...&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;public&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;boolean&lt;/span&gt; canWaitToSeeWhatsNext() {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;      &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;return&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;   &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;/span&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://usqs.blogspot.com/feeds/3331844989374459403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3266507557825174846/3331844989374459403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/3331844989374459403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/3331844989374459403'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/08/hello-world.html' title='Hello World!'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-7615766019354162551</id><published>2007-08-03T18:39:00.003-04:00</published><updated>2009-03-27T05:36:52.205-04:00</updated><title type='text'>ARCHIVE</title><content type='html'>&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2007-8-4&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/2007/08/hello-world.html&quot;&gt;Hello World&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;Warming up&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2007-9-1&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;/2007/08/vista-formal-approach.html&quot;&gt;Vista-Rant&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;A formal approach to ranting&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2007-9-21&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://usqs.blogspot.com/2007/09/quality.html&quot;&gt;Quality&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;The cat is out of the bag!&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2007-10-07&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://usqs.blogspot.com/2007/10/projects.html&quot;&gt;Projects&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;Remember The Orange&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2007-12-23&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://usqs.blogspot.com/2007/12/users.html&quot;&gt;Users&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;Yes, them&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2008-02-18&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://usqs.blogspot.com/2008/02/metaphysics.html&quot;&gt;Quantum Observation&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;A little diversion&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;padding-right:15px;&quot;&gt;2008-02-18&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://usqs.blogspot.com/2008/12/history-of-cameras.html&quot;&gt;The History of Cameras&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding-left:40px;&quot;&gt;&quot;iPhoning&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/7615766019354162551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/7615766019354162551'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/08/archive.html' title='ARCHIVE'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3266507557825174846.post-8911344629075952734</id><published>2007-08-03T18:33:00.000-04:00</published><updated>2008-12-09T15:55:58.320-05:00</updated><title type='text'>ABOUT ME</title><content type='html'>/* Hello! I am U (not to be confused with You, which I am not).&lt;br /&gt;My full name is Yuval Perlov and I create software for as long as I can remember now (my long term memory is surprisingly short). I also use parenthasis a lot when I write (it reminds a little of code comments, where all the REAL action takes place).&lt;br /&gt;This blog came about as a place to publish my thoughts about software (God knows we need more of those!). More importantly, in the spirit of the open-source movement, I&#39;ve decided it&#39;s time to publish my own internal implementation (like most people, I&#39;ve been more concerned with exposing my interface). &lt;br /&gt;Feel free to use this code under the open-source license of your choice.&lt;br /&gt;&lt;br /&gt;In what can be described as my spare time, I run &lt;a href=&quot;http://www.r-u-on.com&quot;&gt;R-U-ON&lt;/a&gt;, the coolest monitoring service on the face of the web! */&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;font-size:10.0pt;font-family:Courier New;color:blue;&#39;&gt;public&lt;/span&gt;&lt;span style=&#39;font-size:10.0pt;font-family: Courier New;&#39;&gt; &lt;span style=&#39;color:blue&#39;&gt;class&lt;/span&gt; U {&lt;/span&gt;&lt;br&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;private&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;void&lt;/span&gt; blogInit() {&lt;/span&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;createBlogTemplate();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;writeBlogStuff();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;&lt;span style=&#39;color:green&#39;&gt;// The world is a singleton (i hope)&lt;/span&gt;&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;World.addListener(&lt;span style=&#39;color:blue&#39;&gt;new&lt;/span&gt; Reaction() { &lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;            &lt;/span&gt;&lt;span style=&#39;color:blue&#39;&gt;public&lt;/span&gt; &lt;span style=&#39;color:blue&#39;&gt;void&lt;/span&gt; onReadMyBlog() {&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;                &lt;/span&gt;feelings.gratidute.max();&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;            &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;        &lt;/span&gt;});&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&lt;span&gt;    &lt;/span&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;}&lt;/span&gt;&lt;br&gt; &lt;span style=&#39;font-size:10.0pt;font-family:Courier New; &#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;br&gt; &amp;nbsp;&lt;br&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;display:none;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMjfFsOmvWIg8dHMjZueq54bwN4eWvKX8XC2FfXNMJxRNmWokkc72IRy6OhwTR3VxZQZ7mhI7-tWLFk_uRTnW73qsYJdNjnpfN_8L9-nRwDSfoxhtOic1ZAjmhSzyXcRuiaonigKtIwxp/s1600-h/mbruon_dark.gif&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMjfFsOmvWIg8dHMjZueq54bwN4eWvKX8XC2FfXNMJxRNmWokkc72IRy6OhwTR3VxZQZ7mhI7-tWLFk_uRTnW73qsYJdNjnpfN_8L9-nRwDSfoxhtOic1ZAjmhSzyXcRuiaonigKtIwxp/s320/mbruon_dark.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5100142956202262466&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMUROoZixlHy-oAZYu0YSxkKsXrDNVaYuJ8m8hofyiGfisjcyAdK7nrFOq6SliY5RnRka7OFUmIYRghpfHuA6mVqnte47MmpjFjy2bqnaD_sCasuDxrS67g3rIA_v4gPNAqb5CACG5uk-Y/s1600-h/rss.gif&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMUROoZixlHy-oAZYu0YSxkKsXrDNVaYuJ8m8hofyiGfisjcyAdK7nrFOq6SliY5RnRka7OFUmIYRghpfHuA6mVqnte47MmpjFjy2bqnaD_sCasuDxrS67g3rIA_v4gPNAqb5CACG5uk-Y/s320/rss.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5094606348215106146&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/8911344629075952734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3266507557825174846/posts/default/8911344629075952734'/><link rel='alternate' type='text/html' href='http://usqs.blogspot.com/2007/08/about-me.html' title='ABOUT ME'/><author><name>U</name><uri>http://www.blogger.com/profile/16067409212796577841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMjfFsOmvWIg8dHMjZueq54bwN4eWvKX8XC2FfXNMJxRNmWokkc72IRy6OhwTR3VxZQZ7mhI7-tWLFk_uRTnW73qsYJdNjnpfN_8L9-nRwDSfoxhtOic1ZAjmhSzyXcRuiaonigKtIwxp/s72-c/mbruon_dark.gif" height="72" width="72"/></entry></feed>