<?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-5490526467559835376</id><updated>2012-02-16T16:12:15.643-08:00</updated><category term='serproxy'/><category term='predictions'/><category term='games'/><category term='specifications'/><category term='requirements'/><category term='Adobe Flash'/><category term='systems engineerig'/><category term='wireless'/><category term='silicon'/><category term='Windows CE'/><category term='usb serial'/><category term='coding'/><title type='text'>Systems Thinking</title><subtitle type='html'>Computer and Systems Engineering Galore!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.samzilla.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-2425479028583274469</id><published>2011-03-15T19:41:00.000-07:00</published><updated>2011-03-27T22:54:48.464-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usb serial'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='serproxy'/><title type='text'>serproxy random crashes</title><content type='html'>For those of you using serproxy.exe to convert serial IO to TCP messages for serial port communication with Adobe Flash scripts, I would avoid using a USB to Serial adapter if at all possible.  Stick with the serial port on your motherboard, if you have a desktop computer that still has one.&lt;br /&gt;&lt;br /&gt;As I found out while working on some pieces for OMSI's Design Zone exhibit, 2-4 hours of constant serial communication can cause USB to Serial Adapter drivers to raise unhandled serial port errors, thus locking serialproxy.exe, and breaking communication from the Adobe Flash Movies I created to the hardware.&lt;br /&gt;&lt;br /&gt;If you are in a situation where you need to use a USB to Serial adapter, the next step would be to update serproxy.exe to properly use ClearCommError() to constantly clear out errors.  Without this, writefile() (the function call that communicates directly with the serial port driver) will crash serialproxy.exe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-2425479028583274469?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/2425479028583274469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/2425479028583274469'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2011/03/serproxy-random-crashes.html' title='serproxy random crashes'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-3558135666658317300</id><published>2011-01-24T21:45:00.001-08:00</published><updated>2011-01-24T22:07:48.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Computer Game Remake?</title><content type='html'>No blog post in awhile.  From now I will try to do a better job of kicking my butt into &lt;span style="font-style: italic;"&gt;productivity mode&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Today I listened to the first "&lt;a href="http://twit.tv/tri"&gt;Triangulation&lt;/a&gt;" podcast, and was struck by how cool Warren Spector (a top computer game designer) is.  After discussing Wing Command and some of his earlier games, I was sent down memory lane to my childhoold computer games.  ____ Quest, Wing Commander, Rastan, the list continues.  Warren, who also is trained in cinema, talked quite a bit about movies; specifically movies based off of computer games and comic books.&lt;br /&gt;&lt;br /&gt;This discussion spured an idea: why don't they remake old computer games?  This has been the theme the past 5-10 years in cinema.  Examples include Indiana Jones, Star Wars, Tron, and apparently Ghost Busters soon.  Why doesn't someone buy the rights to old Sierra games and remake them?  I (and several others I can think of in my generation) would snap these games up in the heart-beat.  Now that I have a little 9-month old, I'd love to (at some point in the near future) introduce her to modern versions of the games I played as a child.&lt;br /&gt;&lt;br /&gt;I don't have the time nor the money to try to capitalize on this idea, so someone with money--please roll with this.&lt;br /&gt;&lt;br /&gt;As a side note, I am surprised to say that I actually want to buy the Epic Mickey game they discussed.  It sounds super neat to go back in time to all off Disney's old school cartoons that people have forgotten and save some of the characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-3558135666658317300?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/3558135666658317300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/3558135666658317300'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2011/01/computer-game-remake.html' title='Computer Game Remake?'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-9218335061451859707</id><published>2010-09-20T13:31:00.000-07:00</published><updated>2010-09-20T13:43:27.489-07:00</updated><title type='text'>Functional vs Performance Requirements</title><content type='html'>I will now make a statement, look at it, and see if I agree with it:&lt;br /&gt;&lt;br /&gt;"Performance Requirements are about criteria and meeting criteria, Functional Requirements are about describing."&lt;br /&gt;&lt;br /&gt;I think I agree with it.&lt;br /&gt;&lt;br /&gt;So for example, a Performance Requirement could be:&lt;br /&gt;&lt;br /&gt;The laptop shall withstand shock of 20g's.&lt;br /&gt;&lt;br /&gt;The criteria we are talking about is shock. To verify this requirement, we would measure the end product against this criteria, and see if it meets it.&lt;br /&gt;&lt;br /&gt;A functional requirement:&lt;br /&gt;&lt;br /&gt;The add button shall sum the values in fields A and B and present the result in field C.&lt;br /&gt;&lt;br /&gt;We are describing how the end product will function, or (in other words), we are describing the end product.  To verify this requirement, we would exercise this functionality and observe the results.&lt;br /&gt;&lt;br /&gt;I agree with my above statement.  Do you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-9218335061451859707?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/9218335061451859707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/9218335061451859707'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/09/functional-vs-performance-requirements.html' title='Functional vs Performance Requirements'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-1978493276685286008</id><published>2010-06-08T09:07:00.000-07:00</published><updated>2010-06-08T10:39:58.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='requirements'/><category scheme='http://www.blogger.com/atom/ns#' term='systems engineerig'/><category scheme='http://www.blogger.com/atom/ns#' term='specifications'/><title type='text'>A Use-Case is not a Requirement</title><content type='html'>A small conversation from a past interview has popped back in my mind.  The interviewer told me how important use-cases are when going from high-level requirements to the actual software that you write.  I completely agree with this, and to this day I am kicking myself for not saying this first.  I have a feeling the person interviewing me was seeing whether or not he could lead me to discuss the importance  of use-cases and my experience developing them, but for some reason it didn't quite come to me.&lt;br /&gt;&lt;br /&gt;Anyhow, amongst discussing use-cases, I asked him whether or not a use-case is a requirement.  I recall (although my memory is a bit fuzzy) that he said it wasn't a high-level requirement, but a derived, lower-level requirement, or specification that gets into implementation.  I nodded, but realized that I didn't necessarily agree with this (again I am kicking myself for not stating this out-right).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Requirements&lt;/span&gt;&lt;br /&gt;A requirement is a nugget of information that describes a characteristic that a system must fullfill.  A derived requirement, or specification, breaks down these morsels of information further, and typically has a "consists of" or "satisfies" parent-child relationship[1].&lt;br /&gt;&lt;br /&gt;Requirements can be indexed, reused, and (importantly) associated with other requirements.  The end result, a database of associated requirements, can be divided up and used to generate all sorts of things, including the end-deliverable, project plans, and work break down structures.  That is why good requirements and specifications, along with whatever tool presents and manages them, are so powerful.  They drive not just the deliverable, but the entire project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use-Cases&lt;/span&gt;&lt;br /&gt;A use-case is not a requirement.  A use-case is a sequence that involves an actor, start conditions, and an end condition. Like requirements, they describe a system.    But although they most likely they will help determine requirements, they are not requirements themselves.  They are more than just a nugget of technical information.&lt;br /&gt;&lt;br /&gt;Depending on the actor, a use-case can help describe any level of the system.  If the actor is the end-user, the use-case will help clarify and create the highest-level requirements.  If the actor is a class, code module, or process, it will help clarify and create how lower-level derived requirements.  So a use-case can describe and develop both how a system must behave, and how it will work.&lt;br /&gt;&lt;br /&gt;Here is an example; a use case linked to higher level requirements.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Use-Case&lt;/span&gt;&lt;br /&gt;1. The end user opens the door to the aircraft.&lt;br /&gt;2. The end user sits in the seat of the aircraft.&lt;br /&gt;3. The end user press the on button button on the dash of the aircraft.&lt;br /&gt;4. The aircraft engine starts.&lt;br /&gt;&lt;br /&gt;Start Condition: Aircraft is off and unoccupied&lt;br /&gt;End Condition: Aircraft is on and occupied.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Requirement&lt;br /&gt;&lt;/span&gt; 1 The aircraft shall allow the pilot to turn on and off the aircraft.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But more Useful, a set of Associated Requirements:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1 The aircraft dash shall allow the pilot to turn on and off the aircraft.&lt;br /&gt;1.1 The aircraft engine shall turn on when the on and off button on the dash in  the down position.&lt;br /&gt;1.2 The aircraft engine shall turn off when the on and off button on the dash is in  the down position.&lt;br /&gt;2 The aircraft shall have room for one pilot.&lt;br /&gt;2.1 The pilot of the aircraft shall weigh less than 300 pounds.&lt;br /&gt;2.2 The aircraft shall have a cushy leather seat.&lt;br /&gt;2.2.1 The cushy leather seat shall cost less than $1000&lt;br /&gt;&lt;br /&gt;We can see that&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A use case is different that a requirement.&lt;/li&gt;&lt;li&gt;A use case helps create requirements.&lt;/li&gt;&lt;li&gt;A use case can help create any level of requirements.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;[1]As a side note I have seen cases where folks will refer to a requirement  as a "specification" if it has a "satisfies" parent-child  relationship, and as a "derived requirement" if it has a "consists of"  parent-child relationship.  In general I think all systems can be broken down into a requirements hierarchy, and where you draw the line between "what is needed" and "what fulfills" is arbitrary and depends on context.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-1978493276685286008?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/1978493276685286008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/1978493276685286008'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/06/use-case-is-not-requirement.html' title='A Use-Case is not a Requirement'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-3472796447726485831</id><published>2010-05-24T15:51:00.000-07:00</published><updated>2010-06-07T10:15:53.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silicon'/><title type='text'>What were you thinking Intel?</title><content type='html'>Whenever I see an amazing product driven by an ARM based processor, I continually ask myself why Intel sold off its line of ARM processors (known as XScale) to Marvell. Here is quick recap for those who aren't familiar with ARM versus Intel's x86 based CPUs:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ARM&lt;/span&gt;&lt;br /&gt;ARM is not a chip maker, they are a software company.  The software they write is a little different though.  It is called a Hardware Description Language.  This means that its end purpose is not to be interpreted by a machine, but instead to define a machine.  Other companies that make computer chips can take the software definition for the ARM CPU core, license it,  customize it, then fabricate it.  This provides flexibility in what ARM based CPUs are, the end-customer decides what comprises it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;x86&lt;br /&gt;&lt;/span&gt;The word "legacy" best describes x86.  I was around 10 when I first used an IBM compatible x86 based computer.  Since then the processor been upgrading via duck tape and all sorts of complex modifications in order to improve speed but maintain backwards compatibility.  The end result is that I can still play the computer games I played when I was 10 on my PC.&lt;br /&gt;&lt;br /&gt;Although x86 chip makers (Intel and AMD) over the years have tried to simplify the architecture, x86 processors have to do more "stuff" in order to maintain both backwards compatibility, and compatibility with Windows.  This stuff consumes power, which is why you haven't seen anything smaller than netbooks driven by x86.  The more power a CPU consumes, the larger the device using it has to be.&lt;br /&gt;&lt;br /&gt;Because the desktop PC market has saturated,  and smart phones are taking off, Intel really should have kept their ARM processors.   They already had an edge in the market; Blackberries, one of the top iPhone competitors, are powered by xScale CPUs.  But instead Intel sold off the processor line.  They are restricting themselves to netbooks, laptops, and desktops.  Why?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-3472796447726485831?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/3472796447726485831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/3472796447726485831'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/05/what-were-you-thinking-intel.html' title='What were you thinking Intel?'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-5750607767241009065</id><published>2010-05-06T16:39:00.001-07:00</published><updated>2010-05-06T16:40:42.215-07:00</updated><title type='text'>Irony</title><content type='html'>Has anyone ever noticed how ironic the name of the &lt;a href="http://help.netop.com/support/errorcodes/win32_error_codes.htm"&gt;win32 error code&lt;/a&gt; #0 is?&lt;br /&gt;&lt;br /&gt;&lt;table class="data" cells="" style="background-color: rgb(255, 255, 255); width: 650px; border-style: none;" bgcolor="#ffffff" width="650"&gt;&lt;tbody&gt;&lt;tr class="data"&gt;&lt;th class="whs5"&gt;&lt;br /&gt;&lt;/th&gt; &lt;th class="whs5"&gt;&lt;br /&gt;&lt;/th&gt; &lt;th class="whs5" width="75"&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;  &lt;tr class="data"&gt; &lt;td class="data" style="border-style: none;"&gt;&lt;br /&gt;&lt;/td&gt; &lt;td class="data" style="border-style: none;"&gt;&lt;br /&gt;&lt;/td&gt; &lt;td class="data" style="border-style: none;" width="75"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-5750607767241009065?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/5750607767241009065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/5750607767241009065'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/05/irony.html' title='Irony'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-1664814335602041473</id><published>2010-02-22T21:21:00.000-08:00</published><updated>2010-02-22T21:58:00.749-08:00</updated><title type='text'>Some Ships Leak from the Top</title><content type='html'>I marvel at those who have the ability to not speak.  It is true, Information &lt;i&gt;is&lt;/i&gt; Power, and the more you say the more power you give.  I think salesmen know this, so knowing when not to speak and what not to say to them is key.  The best know how to make you talk.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first step is being comfortable with the uncomfortable silence.  So easy to say, but so hard to do.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-1664814335602041473?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/1664814335602041473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/1664814335602041473'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/02/some-ships-leak-from-top.html' title='Some Ships Leak from the Top'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-4294133967021799297</id><published>2010-02-19T08:07:00.000-08:00</published><updated>2010-05-06T16:41:39.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>An Alternative to SLOC</title><content type='html'>Awhile ago I was sucked into development of a DoD proposal.  One thing they wanted us to address was SLOC, or "Source Lines of Code".  The idea is that they judge the level of software effort and complexity by the lines of code there are.  There is a general consensus in the software world that this isn't the best idea.  IE, if you write a function call like this&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if (a==1)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;_tprintf(_T("Status Report:\n")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;_T("Hello!\n"));&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Your SLOC will be much higher than if you wrote it like this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; if (a==1) _tprintf(_T("Status Report:\nHello!\n");&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;There are other arguments I agree on, such as smaller/simpler/efficient source code is better than bloated source code that achieves the same functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I thought of an alternative on the drive in to work today that at least addresses the amount of new lines put in your coding standards.  What if we looked no&lt;a href="javascript:void(0)"&gt;Publish Post&lt;/a&gt;t at the source code, but the size of the post-compiled binary machine code?  In windows, this would be the size of all the EXEs and DLLs that comprise your application.  Now granted, this would probably only be useful for uninterpreted languages (ie C/C++ and Assembly).  You would also have to examine how much code is statically linked into your executable, so it doesn't get recounted.  But at least your processess for assessment isn't based off of how often the development team hit the "enter" key.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-4294133967021799297?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4294133967021799297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4294133967021799297'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/02/alternative-to-sloc.html' title='An Alternative to SLOC'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-4119868075242230030</id><published>2010-02-17T11:00:00.000-08:00</published><updated>2010-02-22T22:05:39.514-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='predictions'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><title type='text'>A prediction...</title><content type='html'>Recently I have been watching the Bill Gates and Steve Jobs &lt;a href="http://allthingsd.com/"&gt;interview&lt;/a&gt;.  It is interesting (a couple years later) to see how some of their technology prediction have panned out.   Bill Gates has been (and is still) very excited about having a video/touchscreen interface on furniture surfaces around your house.   I have always been skeptical of this; there is something old-timey and rustic feeling that makes non-office furniture appealing.  I don't see the merging of technology and furniture being consumed by the masses.    Steve Jobs was much less specific about what the next step of technology which is very consistent with Apple's secretiveness, and probably wise too.&lt;br /&gt;&lt;br /&gt;Funny how while Bill Gates was touting the tablet as the tech device he would be carrying around in the future, Steve Jobs said nothing about tablets.  Two years later, Apple releases the iPad.  I wonder if Bill Gates will purchase one and carry it around as he predicted.&lt;br /&gt;&lt;br /&gt;I'd like to offer a prediction after hearing a report today.  I believe that cell phone providers will deprecate the model of selling phone-call minutes and sell only data plans.  At first I thought the politics of the wireless industry would prevent this next vital step from happening any time soon.  But after hearing how &lt;a href="http://www.engadget.com/2010/02/16/verizon-to-allow-unlimited-skype-calling-over-3g-starting-next-m/"&gt;Verizon is allowing free minutes via Skype&lt;/a&gt; over their data plan, I now see how much wireless carriers are thinking outside of the box to stay competitive.  This also comes amongst the iPad data-only plans.&lt;br /&gt;&lt;br /&gt;I have more predictions too!  But I will save them for future posts, so this post can ship.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-4119868075242230030?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4119868075242230030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4119868075242230030'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2010/02/prediction.html' title='A prediction...'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-7097367688877968098</id><published>2009-10-15T21:13:00.000-07:00</published><updated>2010-01-08T10:43:29.278-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows CE'/><title type='text'>A Warning about Windows CE</title><content type='html'>After working on several Windows CE projects, I am noticing patterns.  There is a "gotcha" with the OS I find interesting, as it evades all sorts of higher-up managers.  Before I say what it is, I'd like to cover first the things people think are gotchas with Windows CE, but are not.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Windows CE is not a RTOS&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The first thing I've heard when Windows CE is under consideration is that it is not truly a real time OS.  After reading some studies, working on projects with Windows CE and real-time requirements, and prepping to teach a Windows CE training, I am convinced that it is a real time operating system.  Interrupt latency is deterministic, and if you know what you are doing, you can use Windows CE as your OS in your embedded system that has hard and soft real-time requirements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Keep in mind though just because you &lt;i&gt;can&lt;/i&gt; use Windows CE doesn't mean you &lt;i&gt;should&lt;/i&gt; use Windows CE for your real time OS.  I doubt any embedded software developer with real time system experience will take Windows CE seriously as a solution to control flow of medicine to a patient.  Or the cooling of a nuclear reactor.  For a front-end setup, without real time requirements,  to drive a display, UI,  and touch screen to these systems?  Sure.  To be in a closed loop safety control system where one late interrupt could kill someone?  No way.  Even though you may be able to get it to work, no one else will be doing what you are doing. Any sort of safety certification won't fly.  And it shouldn't--you are using something in a way that it isn't intended for.  Get something by Wind River or Green Hills.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a side note, I don't think the above statement isn't recognized by Microsoft.   I'm sure they are more than happy for CE not to be in the loop with real time safety critical control systems.  Anything to avoid litigation when things go wrong and people get hurt.  I'm sure 99.99% of Windows CE licenses are for Windows Mobile platforms anyways, that's where the money is for them.    Although who knows what new luscious platforms like the iPhone and Android will do to Windows CE.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Windows CE is not Stable&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This one I hear a lot and disagree.  The times I have seen a Windows CE system unstable, it is always due to the application level code.  When the system is configured right, and the OEM BSP software is production ready, Windows CE runs like a champ.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think this notion is created by folks that haven't dealt with Windows CE, and fill in the gaps with what sort of Windows experience they have.  More often than not this is blue screens on Windows 98 or (even better) Windows ME. But Windows CE is completely different, right down to the kernel.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Windows CE is Closed Source&lt;br /&gt;&lt;/b&gt;This one is partially true.  The kernel is completely open now, so there is no limit to delving into the source code to completely understand the ins-and-outs.  A necessary feature when debugging, especially when timing is involved.  However there are all sorts of standard Windows libraries that are closed source.  Plan to see the source code for the .NET Compact Framework components?  Sorry.  How about the IP Helper API so you can figure out all the weird NDIS driver calls?  Sorry again.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Gotcha:&lt;/span&gt;&lt;br /&gt;So if Windows CE is real time, stable, and open source enough... what is the big gotcha?  It is actually quite simple:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Windows CE doesn't turn Desktop Developers into Embedded Developers.&lt;br /&gt;&lt;/b&gt;Managers love the idea of Windows CE because they think they can take the stock windows programmers they posses and have them create an embedded system.   But just because Windows CE supports the Win32 and a subset of the .NET Framework API, it doesn't mean you aren't developing an embedded system.&lt;br /&gt;&lt;br /&gt;Take a past client I had at a prior job, whose name I won't divulge (as getting sued is lame).While the hardware was being designed, the windows developers got a head start and cranked away on the end-user software.  Their platform of choice was AJAX running on top of pocket internet explorer.  You don't need to be a rocket scientist to predict what would happen upon running their heavy-weight java script/IE based app on a 400MHz PXA270 XScale processor.  Fortunately for them, we were able to accelerate the performance by migrating the system to Adobe Flash for ARMV4I/Windows Mobile.&lt;br /&gt;&lt;br /&gt;Long story short, a good embedded developer will be thinking about software performance, and bench-marking end-user software from day #1.  You need to start desigining your software for your target device, and use any sort of emulation or cross-platform development with extreme caution.  Get the development kit with your embedded processor of choice as a stop-gap until your first rev hardware arrives.  Save yourself the headache of discovering that the software you developed on your 500 Watt PC will run differently than on your 1 Watt embedded processor.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-7097367688877968098?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/7097367688877968098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/7097367688877968098'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2009/10/warning-about-windows-ce.html' title='A Warning about Windows CE'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5490526467559835376.post-4307110920240520871</id><published>2009-10-08T19:18:00.000-07:00</published><updated>2010-05-10T17:00:16.278-07:00</updated><title type='text'>Bicycles and Roads</title><content type='html'>My good pal Anders frequently has told me about how some folks (yes, many of them conservative) think bicyclists should pay taxes for using the roads the cars drive on.  He makes the argument that this shouldn't be necessary, since bicycles produce much less wear and tear on the road than cars.  On a bicycle ride (ironically) I realized how I don't agree with this argument, because of what a road is.  A road is much more than a paved stretch, it is a system.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As a quick side note, please understand that I am not saying bicyclists should pay taxes on the roads.  I for one am a cycling fanatic, and it is absolutely great that so many people bike in my city.  As far as who should be paying for roads I will leave to the IRS (until another bike ride where I come to some more random conclusions).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what sort of parts and processes of this "road" system that costs money?  And most importantly, ones that aren't just the pavement?  Here are just a few I thought of on my ride:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Traffic Lights&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Most roads have traffic lights. Although several rural roads don't have them, I can't think of a bike ride I've been on where I didn't see and use traffic lights.  Both cyclists and cars use traffic lights.  And although neither puts wear and tear on them (since the simple act of looking at them is the use), the simple act of maintaining them could add up.  Electricity.  Weather damage.  Replacing parts as they age past the lifetime they were designed to have.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Evening Lights&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Same as above, except evening lights are much more numerous than traffic lights.  They use quite a bit more power too, as there isn't any fancy LED low-power version.  Yet.  The cost of all those light bulbs add up.  Both cyclist and cars use these, and put equal amount of wear and tear.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Patrol&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Beyond the core infrastructure of stop lights and evening lights, the roads are patrolled.  Cyclists depend on cars to follow the rules, and cops are around to enforce them.  And vice versa.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Cleaning&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Roads get very dirty.  Cars contribute to the mess, but weather does also.  Combine this with the surrounding environment (dirt, sand, leafs).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Engineering&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Roads are constantly being evaluated for safety and throughput, and often times civil engineers will need to add overpasses.  Or create bike lanes (or in our city, bicycle boxes).  Being an engineer, I know expensive this can be.  It is something all users of the road take advantage of, not just cars.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are several more I thought up of too. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A road is more than just pavement, it is a system.  The cost of running it is expensive, but most of the time, all users benefit from the cost that goes into it.  Not just cars.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you do think a road is just pavement, go find a abandoned road and try to drive or bicycle on it.  There are two I've actually tried this on, one in Wyoming and one in Vancouver.  I failed.  The sheer quantity of debris, cracks and washed out regions made it impossible.  When a road becomes just pavement, and nothing else-no service, lights, maintenance-it becomes unusable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5490526467559835376-4307110920240520871?l=blog.samzilla.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4307110920240520871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5490526467559835376/posts/default/4307110920240520871'/><link rel='alternate' type='text/html' href='http://blog.samzilla.com/2009/10/bicycles-and-roads.html' title='Bicycles and Roads'/><author><name>Sam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
