<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Naive American &#187; Technology</title>
	<atom:link href="http://www.naiveamerican.org/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.naiveamerican.org</link>
	<description>We need to think...</description>
	<lastBuildDate>Sun, 15 Jan 2012 20:27:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>About Software Requirements&#8230;</title>
		<link>http://www.naiveamerican.org/2012/01/15/about-software-requirements/</link>
		<comments>http://www.naiveamerican.org/2012/01/15/about-software-requirements/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 20:27:24 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[donald knuth]]></category>
		<category><![CDATA[lead system architect]]></category>
		<category><![CDATA[ronal rivest]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[steve jobs]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=1060</guid>
		<description><![CDATA[Software projects may be started any day of any year.  There is no special day that could possibly influence the outcome of the project.  What is important is to understand and follow some basic software engineering principles.  That said, the ability, know how and experience of the team members always tends to play a significant [...]]]></description>
			<content:encoded><![CDATA[<p>Software projects may be started any day of any year.  There is no special day that could possibly influence the outcome of the project.  What is important is to understand and follow some basic software engineering principles.  That said, the ability, know how and experience of the team members always tends to play a significant role in the outcome of the project.</p>
<p>In order to describe some basic software engineering concepts I will provide with a set of scenarios and recommendations which if followed should make most (never say all) software projects a success.  So why most software products and projects are a failure?  Read along and you should find the answers for yourself.</p>
<p>Software development is both and science and an art.  As a matter of fact, most (as was previously stated, never say all) engineering disciplines are both a science and an art.  For example, in civil engineering, an architect might design a structure (i.e., building, bridge, etc) which should be strong enough to support the stress and fatigue of it’s intended use and last for the expected / specified lifetime.  Structures are designed and built differently based on location.  A four-lane bridge for general traffic (automobiles, trucks) is designed and built differently when the intended location is Southern California than when its location is somewhere in Maine.  One of the sites the bridge is prone to experience rather warm temperatures, lots of traffic, earthquakes, strong winds, etc, etc, etc.  The counterpart in Maine might expect lower temperatures and perhaps salt corrosion if the structure is near or on the water.  Both bridges will share some basic requirements but they also have unique ones.  Being a layman in civil engineering, I can understand how requirements for structures will differ.  That does not make me a civil engineer nor gives me the ability to design one.<span id="more-1060"></span></p>
<p>Algorithms are at the core of any software development project.  You use your favorite web browser and look up the definition.  Most people would just type the word “algorithm” and follow some of the links returned by the search engine of their choice.  I tried Google and at the top of the search I found a link to Wikipedia and a dictionary.  A dictionary tends to provide a basic definition that is good enough to understand the term (e.g., <em>a set of rules for solving a problem in a finite number of steps, as for finding the greatest common divisor</em>).  If you look at Wikipedia you may find something like “An algorithm is an effective procedure for producing a well-defined function”.  You need to realize that Wikipedia contents are generated by contributions of many people who in most cases do not have the experience or background or have some agenda to contribute.  Personally I seldom look at the contents of Wikipedia.  If I do, I check references and then narrow my search to reliable sources (typically papers and books from accredited universities).  I have taken several courses on computer algorithms and have also read several books on the subject.  It just happens that this quarter I have registered to attend a computer science course on advanced algorithms at the University of Minnesota.  The book for the course is “Algorithms” third edition by Thomas Cormen, Charles Leiserson, Ronald Rivest and Clifford Stein.  I just happen to have contacted Dr. Rivest years ago when I developed the first content addressable storage regarding possible drawbacks in the use of MD5 digests to be used as names / handles for files.  Dr. Rivest is an expert in software encryption and hashes.  The book defines an algorithm as follows:  “<strong><em>Informally</em></strong><em>, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output</em>”.  Hopefully you are able to see the nuances in the definition and be motivated to delve further into the subject matter with the invitation by the initial definition presented in the book.  Please note that by reading a good textbook you will not become an expert in the subject.  You also need the experience and hopefully you will be able to come up with better than average elegant approaches (algorithms) to solve software issues that you may be confronted with in a project.</p>
<p>MapReduce is allegedly the mechanism / technology / algorithm used by Google to manage huge amounts of data.  Allegedly Google has developed a proprietary mechanism (Google’s patent #7,650,331) to manage large sets of data using a distributed architecture.  Google does not make use of a SQL database (i.e., SQL Server, MySQL, etc).  Apparently Google uses no-sql.  By reading books that describe to some extent the technology, MapReduce is nothing else that the implementation of the divide-and conquer paradigm that has been used for decades in multiple algorithms such as merge sort.  Being able to file a patent does not require an elegant or unique algorithm.  As the Google patent demonstrates, one is able to patent an old idea just applied to a different scenario (in this case a distributed system).  Given that America is becoming a very litigious society, it is the best interest of companies to be able to fill their shelves with patents.  The ability to do so tends to be a function of the quality of the methods / processes developed by software engineering teams.</p>
<p>Computer Science (CSci) as its name states is a science backed up by mathematics.  CSci is also considered art.  Once again, going back to a dictionary, art is defined as:  Works produced by such skill and imagination.  When viewed under this definition, CSci requires both education and experience.  We all have reached some level of formal education.  When studying any science or mathematics, we first read the textbook and attend lectures on a subject.  In order to solidify our knowledge we perform some exercises and tend to solve some problems.  Sooner or later in our professional careers (assuming you exercise in some technical, scientific or mathematical field) we have encountered problems that due to our education and experience have been able to recall one or more techniques that when applied to the situation at hand, tend to solve the issue.  Based on education and experience some solutions are more efficient (consume less resources) and elegant (simple to describe, implement and maintain) than others.  I have made on multiple occasions reference to the popular idiom  “<em>There is more than one way to skin a cat</em>”.  As I always say, “<em>yes there is, but of the entire possible set, there is one that is worst and one and only one that is best</em>”.  The ability to most of the times produce solutions that lean towards the best side is the result of education, experience and ability which can easily be described as art.</p>
<p> “The Art of Computer Programming” is what one may say another example that computer programming is not only a science backed up by mathematics, but also an art in itself.  Donald Knuth has written (and as far as I know he is still doing so) a collection of books that deal with the description and analysis of may computer-based algorithms.  Professor Knuth started work on the book set in the 1960’s.  As I recall in the 1980’s most respected software developers and computer scientists frequently referred to the works of professor Knuth searching for algorithms that could be used when confronted with a new design.  I have owned a couple copies of “The Art of Computer Programming”.  The main reason for this is that the set has been growing through the decades.  I currently have this set of book at home on a desk I use to study, read and think.  Perhaps this is an indication that I am not a young pup.</p>
<p>Most of us at several points in time (some more than others) get ill and have the need to seek medical attention. Depending on the severity of the ailment, we make an appointment over the phone with a clerk.  The day of the appointment we show up and a receptionist collects information and typically the co-payment for the visit.  After a few minutes a nurse leads us to a consulting room making a quick stop by the scale.  After taking our temperature and blood pressure we are asked a few questions as to why we are interested in seeing a general / family medicine practitioner.  Finally we see a physician.  If the ailment is obvious the physician prescribes some medicine and out we go to the pharmacy.  In most cases after a few days we are feeling well.  If the issues affecting us are not than obvious, we get sent to the lab for a battery of tests.  Typically some tests are of chemical origin (sugar level, white cells count, etc) while others may be imaging (i.e., x-ray, CT, MR, etc) using some form of x-ray source.  The results might lead to a diagnosis or the issue might be elevated to a specialist.  If the issue requires surgery, one would be referred to a surgeon.  It is clear that just being associated with a healthcare organization does not qualify an individual to perform brain surgery.  The same holds true for software development.  I know of a receptionist that used to make minimal wage at a software development company.  One day I was her reading some “For Dummies” book.  A month later she got a raise that increased her hourly rate by a factor of five (5).  She was now a software developer.</p>
<p>If you watch some television you must have seen a commercial for a prescription drug used to treat / prevent acid reflux.  I watch (typically sleep in front of the television screen) television about an hour a day.  Around 08:00 PM, based on workload, I tend to start shutting down my computers.  I typically run three (3) different computers.  Given the resources available on the different computers and their intended uses, it is not technically or economically feasible to virtualize the dozen machines that I have at home.  That said I do run VirtualBox on a couple machines mostly to access a few VPNs (Virtual Private Networks) that have side effects on the network and to run different operating systems (Linux and different flavors of Windows) on the same hardware.   Getting back to watching television, it was not until a few months ago that for the first time my wife and I, at insistence from one of my sons, that we got DVR from the cable company.  Now we record a few programs during the day that we might watch when we are available to spend an hour or so in from of the flat screen.  No matter what my wife and I have going on during the day, on workdays around 08:30 PM, we watch World News with Diane Sawyer on ABC News.  If you watch television around 05:30 PM, it becomes obvious the demographics watching based on the type and amount of commercials.  In particular there is one that start with an actor wearing a white physicians coat attempting to use a jack hammer on what appears to be a road construct ruction zone in a downtown area.  The person does not fit in the scene.  In the next scene a husky male, wearing blue jeans, boots and a tool belt is wondering in what appears to be a pharmacy aisle looking for medication to cure the symptoms that he appears to portray (heartburn / acid reflux).  In a following scene the physician is discussing with the patient the symptoms, which lead to a prescription for the pharmaceutical in question.  The moral of the story / commercial “<em>you do your job and let the physician do his</em>” or something among those lines.  Perhaps I should get a lawyer and demand some type of royalty from the AtraZeneca Nexium commercial.</p>
<p>One can easily draw an analogy between technicians, engineers, system managers, software developers, computer scientists, QA, chief technical officers, chief information officers, IT managers, and many other people whose job is associated with computers and / or software at different levels (users, super users, system administrators, maintenance, developers, analysts, scientists, etc) whose jobs at different organizations are associated with providing computer and / or software based services / products.  Such organizations tend to have receptionists, clerks, supervisors, managers, etc, etc, etc.  An individual just by belonging to such organizations do not qualify to design software.  There is of course the exception when the person reads a book “For Dummies” and in a couple weeks is developing software.</p>
<p>Requirements are extremely important.  They should unambiguously document the use of some software to be / being developed.  The idea is quite simple.  If the intended use of a software product cannot be unambiguously documented then no one knows what to do.  If no one knows what to do there is no way to generate a design or a set of test procedures to test the software because no one knows what the software is supposed to do.  This simple logic is seldom put to work.  Most software projects are started and in many cases completed or canceled before a useful requirements document are generated.  Different methodologies have different ways of generating and maintaining requirements.  Most methodologies are flawed.  Some make sense but are not well known or their steps are not easy to follow.  One may be led to believe that there is no good software development methodology.  This is far from being true.  As an analogy one can take diets.  Not sure how many diets are available.  Some seem to work for some for some periods of time.  Most fail miserably.  The fact is quite simple.  Our bodies are engines.  Engines need fuel.  If our bodies burn 1,500 calories per day and we intake 2,000 we will just be gaining weight.  On the contrary, if we change our life style by incorporating exercise and reducing our caloric intake, then if we consume 3,000 calories per day but due to exercise and other healthy habits burn 3,000 calories in the same time period, we might not live one hundred years, but on average we will have a longer and healthier life.  Like I said, there are many ways to skin a cat but there is only one way which is best.  Burn the same amount of calories as one consumes on a daily base and forget any other type of diet.  In reality software development is several orders of magnitude more complex so things are not so simple as a diet.  What is extremely important is to have unambiguously defines requirements written in a succinct way.  Writing a Victorian novel is not the proper way to write software requirements.  The detail and number tends to be a function on the level of expertise of the lead system architect and the development team as a whole.  Being involved in many software development projects and having knowledge of different methodologies attain this level of expertise.  As we all know, no matter how the metaphor is applied, there is never such a thing as a free lunch.</p>
<p>Design by committee is a term that is typically used for both design and requirements even though these are two separate aspects (requirements and design) of any software development project.  A good designer needs education and experience.  A person without a software background is able to design basic software.  Today wizards allow individuals with little or no computer science education to create software (specially when it is a GUI web based) not understanding or knowing what they are doing.  Such approaches tend to work now and then form small companies.  As the demands for the software grow, there are no wizards that can help.  One needs to understand what is going on and be able to make the necessary changes or come up with an alternate solution.  While developing software one runs into situations when the desired effect is not achieved with the initial approach.  One then needs to look for alternate ways to achieve the goal.  This process is based on know how and experience.  In cases when one needs assistance, one should be able to look for it consulting with other team members or vendors.  In many cases, the higher the position in a software development project, the least the person is willing to accept that help is needed.  When too much involvement by the entire team on all aspects of the project is reached, no one is responsible for failures.  Humans tend to blame others.  When the software is properly partitioned and individuals are assigned to specific modules, developers tend to take responsibility for their part.  This is especially true when a separate group does testing.  That way the team as a whole responds to issue encountered by QA.  If one looks at standards that have been developed by many individuals from different companies (e.g., DICOM), the results tend not to be elegant, bloated and the software implementations are poor (slow and consume lots of resources).  When single individuals come up with something (e.g., Linux) the result tends to be elegant and performs well.  This does not mean that a single individual developed Linux or that all members that participated in the committees that developed DICOM contributed.  The rule of thumb is to assign parts or a project to a single individual and develop the system in such a way that all interactions are based on clients making requests and a server responding to them.  This can actually be done with client / server interactions or via the use of APIs.  The key is to make each module responsible for their operation based on the requirements for the software.  Once again, being able to partition a project of any size requires know how and experience.</p>
<p>Lead by example is something that is not easy to do and even harder to follow, but when achieved, results are typically success.  The idea is for the senior / lead system architect to show how things are done.  It all starts with requirements and their associated documentation, through design with associated documentation, implementation and associated unit testing to product delivery and if needed initial support.  Less experienced engineers, when properly motivated and interested in learning and advancing tend to imitate success.  As usual this is easier said than done.  If one has a single rather simple project under the belt and the software is supported by an army of technical service personnel, then that might not be the person to put in charge.  The same holds true for people that work as system administrators and are asked to design software with little education and experience.  Being able to issue database queries and use a report writer to generate reports with colorful graphics does not qualify the person to become a lead system architect.  Once again, politics get in the way of reason and after a few years when the software is a failure people stops and thinks on what was done.  At that time it is too late for the software and the project.  It is better to address most (all is not possible) situations before they turn into issues and then into problems.</p>
<p>A couple decades ago I was involved in the development of the first document management system ever.  The project started by processing documents for insurance companies and then shifted to address medical images.  The general manager had a PhD degree in nuclear physics.  He used to work for a well-known company (Xerox), which at the time had a quite known research center in Palo Alto, California.  On paper this individual fit the bill to manage the project.  This individual had quite an amenable personality.  He might have been top notch in nuclear physics but had little understanding (to say the most) on hardware and software development.  At the time, there was no off-the-shelf standard hardware or software to put together the product.  Top executives at the fortune 500 company backed up the project.  The first and probably largest mistake was assigning the lead system architect role to an individual from IT.  He might have had experience with databases and report writing, but that was it.  The lead architect had to experience or knowledge on hardware, networks, imaging, etc, etc, etc.  As the project blew out its schedule, the perceived solution was to throw at it more money.  With that extra funding additional resources were brought in.  The project lasted several years.  Towards the end, software QA was a 24 x 7 operation.  Each day new issues were discovered.  At some point in time after over 100M dollars (in 1980’s value) the original project was cancelled.  Somehow after a few months a second pass for the project, under the same guidance was authorized.  The system architect blamed the computer language used to program.  The first pass used C so the second was done in Pascal.  I left when the first project was cancelled.  After a few more years (do not know the actual cost) the project failed and it was cancelled for a second time.  The lead system architect was able to get authorization with very few resources to run a final and third pass.  This time the software was written in Ada (do you know what Ada is?).  Of course, the language has nothing to do with the success or failure of a project.  After a year or so the project was finally put to rest permanently.  What is interesting to note is that the lead system architect returned to IT to deal with databases and report writers.  I ran into him at a seminar in a hotel in downtown Minneapolis.  He was doing just fine back were he started a decade or so before.</p>
<p>Testing is important in any software development project.  The same individuals developing the software cannot do testing.  Developers must create the methods to perform unit testing.  System testing must be performed by a different organization.  Such tests must be developed following the software requirements.  QA should never see the design documentation nor be exposed to the source code of the project.  The issue is that testing then becomes a function of the actual code and not of the requirements.</p>
<p>For software to be successful it must be flexible.  If the software works perfect for only the specified set of test input and it fails under different situations, the quality is not there.  The software must be designed in a way that it can evolve not breaking previous uses and allowing for foreseeable changes in the business.  Very few software modules are able to adapt to changes and survive a decade or two.  When the software is properly designed and implemented with simple yet robust technology, the software product tends to be useful for long periods of time.  When little though is put into a project, the resulting software tends to become obsolete in as little as a year or two.  Some companies thrive in such models because they imply recurrent business.  If you do not understand this, take a look at the different technologies provided by Microsoft.  Most of them do not last more that a couple years.  Every time they are replaced with something quite different with the promise to solve all problems.  This is type of behavior / approach is known as the “silver bullet”.</p>
<p>Team organization is quite important for any software development effort.  This is true from projects with a single person to ones with hundreds of people in multiple disciplines, which may interface with products / modules form other companies.  Putting together a team is important in order to have a successful project and quality software result.  Tem members should be selected based on expertise and track record.  Getting back to the healthcare analogy, you would not want to have surgery performed on you by a receptionist just because you like him / her.  You can always have some simple surgical procedure done by a general surgeon, but if a specialized procedure were required, only a specialist would be considered.  Software is no different, yet people tend to go against basic logic and allow people with limited qualifications to take charge.</p>
<p>Politics in projects, no mater the size of the organization or the team (at least two people are needed to disagree but a single person with his / her own agenda qualifies) needs to be addressed and managed for a project to succeed.  This subject appears to be foreign to most people, yet many books have been written about the topic.  I have personally read a few.  Software development is a human activity.  We as humans tend to resist change and have preconceived ideas as to what needs to be done.  This is just one reason for having a simple, short and complete set of requirements for a software project.  By no means this statement patronizes the waterfall model.  There are different methodologies better suited to collect and maintain requirements during a software development project.  A properly managed project assigns team members to different tasks / modules based on their education level, experience and track record.  I have run across several individuals with advanced degrees (PhD) that could not develop software even if their life depended on it.  The issue is that humans tend to be polite and not tell individuals that they should be doing something else or they just tell other members their thoughts but no action is taken.  This builds friction which when paired with lack of expertise, produces an environment in which success is typically not achieved.  The best way to prevent political problems is to put together the proper team and assign tasks that are palatable to the individuals.  By having quality requirements and proper architectures, team members can see how their contributions to the software make a difference.  If a problem is encountered, developers are more inclined to look at their pieces and correct them when needed, than just blaming other modules (pointing fingers).  Some times developers go the additional mile by making the necessary changes to their modules to compensate for the shortcomings of others while still keeping the integrity of the software.</p>
<p>After reading most of the contents of this blog entry you might come to the conclusion that the best software development team is a completely homogeneous group.  This is not the case.  Diversity is important.  The issue is to make sure that diversity comes from backgrounds that may contribute to the project and that such individuals are not charged to lead.  Different ideas should always we considered but when all is said and done, someone needs to make a decision as to how the group should proceed.  During my professional career I have had the opportunity to work for small, medium and large size companies.  I have also done contracting / consulting work.  My background is a mix of electrical engineering and mostly computer science.  I have worked in quality assurance groups and have supported systems at customer sites.  That diverse background has helped me come up with innovative approaches to solve design problems.  Some time ago I was working for a company in the east coast.  I was in charge of developing a color console for a process control system.  The company was developing the entire system.  The system could control the environment in buildings or an oil refinery.  The product was software and hardware based.  My team had a PhD in psychology.  Obviously the individual was intelligent.  He was also very dedicated.  Married without children, just a cat at home.  Because of this, we were able to work long days and enjoy them.  In a few occasions this team member would get stuck in a task.  Without technical assistance he would spend several days in a rut.  I recall one occasion when we were dealing with a driver for a UART.  Given that his background was not in computer science or electrical engineering, the concept of how to control the chip to process RS232 input and output in queues at the interrupt level was overwhelming.  After I notice that we were not moving forward, we got together and in a day, with a different design, the issue was addressed and we were able to continue to make very good overall progress.  A year or so ago I was optimizing a file transfer for an application on Windows.  The specific transfer operation was not intended for what it was designed.  I spent a few days optimizing the command line interface using a similar approach as to the RS232 driver I worked with my team member a couple decades ago.  Of course the issue was over the TCP/IP network and had multiple data buffers and queues and was working with multi core processors.  The point is that knowledge and experience were brought up to solve two separate but similar problems decades apart.  Diversity in backgrounds is most of the time beneficial specially when used the proper way.</p>
<p>There is a cryptography expert that has made his home the Twin Cities of Minneapolis and St. Paul.  I have read a few of his books and periodically skim over articles in his newsletters.  He has a friend / co-worker that has repeatedly made the comment (perhaps is more than a comment but a believe) that the software development industry is in shambles.  This person claims that all software is full of bugs, insecure and not stable (and he is not just referring to the Windows platform).  I have read some of his articles and based on my experience have to somewhat agree with his opinions.  The matter of fact is that software, no matter which company is producing it, has many issues that can be traced down to all of the development phases.  In general properly trained individuals with proper experience do not develop software or the team members and management have different goals.  In most cases the goal is just to get a promotion and raise and move or to a higher position in the same or different company.  Company managers in most cases are not interested in the quality of the product but on making money.  This behavior is so widespread in our country that we have become oblivious to it.  A few months ago the biography of Steve Jobs was published.  When it became available, given the current set of books sitting on my nightstand, study desk and other places I do not wish to mention but most people should be able to infer, I decide to skip.  My wife got the book for her Kindle.  She already finished reading it.  Several times a day I would ask about what she was reading or she would just volunteer comments.  I feel like I read the actual book.  Steve Jobs was not an easygoing person.  He had several traits that I just dislike.  On the other side of the token, Steve was a very passionate person as far as the Apple products and services.  He always set his goals to achieve perfection.  Although that was not possible, Apple products are far superior to Microsoft’s.  This is quite obvious at the Mall of America in Bloomington, MN.  On the first floor the Apple store is just across the Microsoft counterpart.  I do not visit the Mall every day, but when I do it calls my attention that the Apple store typically has at least double the amount of customers.  This is how typically taste tests are conducted.  The subject is presented two (2) options and based on statistics, the best tasting food is the one more often selected.  Without a doubt the winner is Apple.  Good job Steve!!!</p>
<p>How to collect and validate requirements for a software product is just one more important part in the software development process.  The same holds true with design, implementation, testing, documentation, etc, etc, etc.  The design aspects, not covered in this blog entry, describe how the software product is designed to cover all the requirements.  Basic design concepts and some techniques used in cloud computing will be described in a future blog.</p>
<p>If you have a comment / question please feel free to leave a message.  I will respond and post it on this website.</p>
<p>The Naïve American</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2012/01/15/about-software-requirements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualization</title>
		<link>http://www.naiveamerican.org/2011/12/31/virtualization/</link>
		<comments>http://www.naiveamerican.org/2011/12/31/virtualization/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 14:02:24 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[VM VirtualBox]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=1046</guid>
		<description><![CDATA[It is around 02:00 AM CST in the Twin Cities of Minneapolis and St. Paul in Minnesota.  Woke up and decided to browse the web for a few minutes.  One thing led to another and here I am finishing an entry that I started earlier this week. Virtualization, as far as computer technology goes, is [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-1052" href="http://www.naiveamerican.org/2011/12/31/virtualization/microsoft_virtualization_products/"><img class="alignleft size-thumbnail wp-image-1052" title="microsoft_virtualization_products" src="http://www.naiveamerican.org/wp-content/uploads/2011/12/microsoft_virtualization_products-150x112.jpg" alt="" width="150" height="112" /></a>It is around 02:00 AM CST in the Twin Cities of Minneapolis and St. Paul in Minnesota.  Woke up and decided to browse the web for a few minutes.  One thing led to another and here I am finishing an entry that I started earlier this week.</p>
<p>Virtualization, as far as computer technology goes, is currently a hot but not a new topic.  Virtualization was developed in the 1960’s by IBM to allow very expensive main frames to be shared by multiple users.  The reason was simply based on cost.  At the time, it took in the order of several minutes to a few hours to set up programs and associated data.  Today, on all modern computers, we are able to invoke programs with the click of a mouse or by typing in a second or two a command on a console.  Depending on the intended use of the computer, we are able to utilize our personal computers in bursts that may hit close to 100% while remaining most of the time almost idle 0% to 1%.  On Windows you can see this by opening Windows Task Manager and selecting the Performance tab.  As I am writing this blob using MS Word, I can see a few CPU utilization spikes per minute in the order of 3% to 5%.  The rest of the time it is 0% to 1%.  What a waste!  Of course, when I am working developing software or using other more demanding applications than just a word processor, the CPU utilization may be at 100%.  This frequently occurs when I am compiling a program or running tests on software that I am developing.<span id="more-1046"></span></p>
<p>How could I possibly benefit from using virtualization?  The answer at this point appears to be just to use technology for the sake of technology.  But wait a second.  I do run some applications that need a different operating system and have some applications that make use of some software that interferes with my network functionality when I use it.  By default my machine boots on Windows 7 Professional, but I often have the need to run different flavors of the Linux operating system.  As in the 1960’s, I could serialize my requirements by booting Windows to run Word and Visio while working on documentation.  I would then close the applications and shutdown the operating system.  I could then boot with Ubuntu Linux and do some software development.  By switching back and forth I could meet my needs, but if I run virtualization software I could simultaneously be running Linux and Windows on my machine or properly speaking, on two (2) virtual machines.  I could then switch from one to another with a click on the mouse.  That makes sense!<a rel="attachment wp-att-1053" href="http://www.naiveamerican.org/2011/12/31/virtualization/virtualbox-3-teaser/"><img class="alignright size-thumbnail wp-image-1053" title="virtualbox-3-teaser" src="http://www.naiveamerican.org/wp-content/uploads/2011/12/virtualbox-3-teaser-150x112.jpg" alt="" width="150" height="112" /></a></p>
<p>A couple weeks ago I attended a one-day Microsoft seminar in a hotel in Bloomington, Minnesota.  The location was easy to get to.  The hotel is next to I-494 and France Avenue.  Food and beverages were provided.  The venue was as good as expected when attending a Microsoft sponsored event.</p>
<p>Overall I enjoyed and learned about Microsoft offerings for virtualization.  The presenters had the sense not to trash competitor’s products.  Overall the general consensus was that most offerings provide similar value and are priced somewhat different.  Of course, if you are considering virtualization and your organization is a Microsoft shop, it does make sense to consider Microsoft offerings for virtualization.  In general products from the same vendor tend to play well among each other.</p>
<p>For the most part, attendees appeared to be system administrators.  Some showed various knowledge levels on the presented products.  A few people pick up their belongings during the presentation and headed out.  They did not seem interested with what was presented or the level and depth of the seminar.  I stayed for the morning session and left before picking up lunch box.  The presentations were fast paced and focused on product features and how simple (or complex) it is to get into and use virtualization.</p>
<p>During the first break, I approached one of the presenters and ask why should one use virtualization in the first place.  Apparently this is not a typical question asked by the average attendee.  I am relatively familiar with the concepts and use VM VirtualBox for work and research.  For my simple needs any virtualization tool is quite adequate.  The presenter appeared to be startled at my questions so I continue to fill in by stating that if the applications of interest run on Windows why should I use virtualization at all.  The answer was quite unexpected.  It went something like not all Windows products play well with each other.  For example, if you are using SQL Server you probably do not want to have in the same machine Exchange because those products do not play well with each other.  My initial comments were that virtualization is a way to hide limitations and issues with Microsoft products.  At that point the presenter kind of gave me a nod with his head like if he had successfully answered my question and moved on to listen to a different question specific to a virtualization products from Microsoft.  It was obvious to me that virtualization as used by most system administrators and for what I saw and learned during the presentation, is just a technology pushed by Microsoft to technicians and system administrators that do not appear to understand the concepts and reasons why one would virtualize.</p>
<p>During the next segments it became obvious the overhead incurred by virtualizing a machine and the additional issues that are present when different machines have different and variable loads.  Memory assigned to a virtual machine can cause it to start paging / swapping even though there might be additional free physical memory in the host computer.</p>
<p>In general, hardware is optimized for use by a computer system.  When an array of virtual machines, each with different requirements are hosted on a computer, the performance of the processors / cores / memory caches are affected.  It is true that hardware instructions have been added to the repertoire of processors to help with virtualization, but they work fine when a single virtual machine is used.  The only valid justification for virtualization is to run disparate operating systems on a single computer.  This reduces the amount of space and energy when compared with discrete computers needed to run disparate operating systems.</p>
<p>When you get a change, open Task Manager on your Windows computer, and without running any applications, take a look at the CPU utilization.  Make sure to show kernel times.  Depending on the system and network connections, one may see from around 1% to 5% CPU utilization.  What you see is the operating system overhead.  Utilization grows as applications run.  The additional overhead is due to operating system tasks that are periodically performed.  Notwithstanding the additional overhead when the system gets some basic load, if ten (10) machines are virtualized on a computer, then each virtual machine will be using 1% to 5% of CPU when idle.  If one takes the sum, the hosting hardware will be using about 10% to 50% of the CPU resources supporting idle operating system tasks.  It does not take much to figure out that having compatible applications / servers running on their own sand boxes just to make use of virtualization does not make sense at all.  The software applications / server running directly on a single instance of the OS would have available a considerable amount of resources that are wasted by duplicating OS tasks on each instance of a virtual machine.</p>
<p>By the way, stop for a second and take a look under the CPU Usage for Memory utilization in the Task Manager windows at the amount of memory that each virtual OS is using just by having it running idle.  A Windows 7 system takes over 1 GB of RAM when idle.  In the above example, ten (10) virtual machines will waste 10 to 15 GBs of RAM.  Of course, who cares when most servers hosting virtual machines are configured with 128 or more GBs of random access memory.</p>
<p>Target is big in the Twin Cities area.  The main example of a company that has ripped the benefits of Microsoft virtualization was what Target has done for their stores.  The project to simplify operations and reduce cost was to replace seven (7) computers with two (2) each running seven (7) virtual machines.  The contents of each virtual machine were not covered during the presentation.  Of course, if different software packages requiring different flavors and versions of operating systems were required, then virtualization made sense.  The two (2) physical machines are running a cluster so if one fails the other picks up the entire load.  One has to assume that in the Target example, some virtual machines were running different operating systems (i.e., Linux, Windows) while others were running different Microsoft servers that do not play well when in the same machine.</p>
<p>In conclusion, the use of virtualization just for the sake of virtualization is a performance hindrance to the entire system.  Poor architecture, design and implementation can be hidden to some extent with the use of virtualization, but this comes at the expense of powerful servers when the proper develo0ped software could run directly on a single non-virtual machine with considerably less resources.</p>
<p>One of the main reasons for the proliferation of virtual machines is that most technicians making IT decisions do not have the background or experience needed to evaluate technology and select it only when it provides a benefit to the organization.  Also, you have vendors whose business thrive in making periodic changes and motivating system administrators to keep up with the latest technology just for the sake of it.</p>
<p>The Naïve American</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2011/12/31/virtualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MD5 Rainbow Tables</title>
		<link>http://www.naiveamerican.org/2011/02/28/md5-rainbow-tables/</link>
		<comments>http://www.naiveamerican.org/2011/02/28/md5-rainbow-tables/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 00:41:15 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[rainbow tables]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=884</guid>
		<description><![CDATA[In the past few weeks I have been learning, discussing and looking for references regarding MD5 Rainbow tables. It appears that they are a method used to reduce storage when attempting to get from an MD5 digest to the associated pass phrase.  Of course given enough storage capacity and time it is possible (but not [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-885" href="http://www.naiveamerican.org/2011/02/28/md5-rainbow-tables/rainbow_tables/"><img class="alignleft size-thumbnail wp-image-885" title="rainbow_tables" src="http://www.naiveamerican.org/wp-content/uploads/2011/02/rainbow_tables-150x111.jpg" alt="" width="150" height="111" /></a>In the past few weeks I have been learning, discussing and looking for references regarding MD5 Rainbow tables.</p>
<p>It appears that they are a method used to reduce storage when attempting to get from an MD5 digest to the associated pass phrase.  Of course given enough storage capacity and time it is possible (but not feasible) to pursue the brute force approach and store at least one pass phrase with every possible MD5 digest.</p>
<p>To give you an idea of the amount of storage needed, the range of MD5 digests is from zero (0) to 16 ^ 16 = 1.84 * 10 ^ 19 which is a rather large set to be stored in disk.  One would have to create a large array associating every entry with at least one (1) pass phrase.<span id="more-884"></span></p>
<p>The idea of MD5 Rainbow is to start with a pass phrase and a MD5 digest and use a reduction to get pseudo random text.  The process repeats several times in order to get a final MD5 digest.  The idea is that somehow one is able to store a fraction of the MD5 digests and pas phrases and perform lookups for the missing ones.</p>
<p>At this point in time I do not see how such an approach could work.  In the next few days I will be spending some time figuring this out.</p>
<p>If it happens that you are into cryptography and wish to provide your two cents please send me your comments in this subject or just a reference to the math associated with MD5 Rainbow tables.</p>
<p>Thanks in advance for your help.</p>
<p>The Naïve American</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2011/02/28/md5-rainbow-tables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CLAMWIN</title>
		<link>http://www.naiveamerican.org/2010/12/15/clamwin/</link>
		<comments>http://www.naiveamerican.org/2010/12/15/clamwin/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 15:34:14 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[virus checker]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=808</guid>
		<description><![CDATA[Hope the readers of this blog have been doing fine during the past few weeks.  I have been busy with standard work tasks, a new research project (still trying to understand some basic concepts and lingo) and most important have been fixing one of my computers at home. A few months ago I downloaded CLAMWIN [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-809" href="http://www.naiveamerican.org/2010/12/15/clamwin/clamwin/"><img class="alignleft size-full wp-image-809" title="clamwin" src="http://www.naiveamerican.org/wp-content/uploads/2010/12/clamwin.png" alt="" width="146" height="136" /></a>Hope the readers of this blog have been doing fine during the past few weeks.  I have been busy with standard work tasks, a new research project (still trying to understand some basic concepts and lingo) and most important have been fixing one of my computers at home.</p>
<p>A few months ago I downloaded CLAMWIN free antivirus software for my PC.  It was easy to install.  Every morning when I powered up my PC, CLAMWIN would download updates.  The best thing is that CLAMWIN is free (at least that is what I thought).</p>
<p>So far all was well.  Then sometime last month something happened.  I was using my PC to test a product I am working on.  The software server shut down.  The log file indicated that there was a problem with the Microsoft SQL Server database and the server could not continue to operate.  The server makes use of Microsoft SQL Server to keep track of configuration parameters and data.  It was towards the end of my workday that I decided to shutdown the computer.  I planned on addressing the server issue first thing next morning.<span id="more-808"></span></p>
<p>On the following day, I powered up my PC.  Several startup services did not come up.  Some icons were not being properly displayed on the desktop.  I ignored these issues and opened the log file.  Apparently SQL Server ceased to run.  For this reason the service I was testing that depends on it had to exit.  I then looked at SQL Server.  It was not running.  Not only that but also the executable and many other DLLs were replaced by a link.  The link pointed to a quarantine folder created and managed by CLAMWIN.</p>
<p>I took a look at the quarantine folder.  It had over 10,500 files, which included DLLs and executables among others.  I could also find in the quarantine folder executables and DLLs for the software that I was working on.  My first thought was a virus that created havoc in my computer.  I decided to run CLAMWIN to see if I could clean the infected files and return them to their original locations.  The CLAMWIN executable was also in the quarantine folder.</p>
<p>I spent time removing and renaming files until CLAMWIN finally came up.  I was not able to find an operation that could rescan the quarantine folder and check what was wrong.  I had a feeling that something besides a virus had caused the problem.</p>
<p>I turn to the web.  Goggled CLAMWIN looking for possible approaches to resolve the issue.  My machine was quite useless at the time.  I was looking for a quick fix.</p>
<p>Apparently the suggested approach is to manually scan the files in the quarantine folder using a third party product.  If all was well then the files had to manually be restored to their original locations.  I was not going to be able to manually restore over 10,500 files I though, first I needed to determine if the quarantined files were actually infected or not (false positive).</p>
<p>Downloaded a couple virus checkers.  None found a problem with the files in the quarantine folder.  Compute MD5 digests for the affected executables and DLLs I was working on.  The MD5 digests matched indicating that the executables and DLLs did not contain a virus.  Apparently something went wrong with CLAMWIN and completely damaged my computer system.</p>
<p>Checking on the web I found out that the only way to restore files from the quarantine folder is to do it manually.  I have been studying computer science and developing software for over thirty years.  Software Engineering is extremely important when developing any type of software (unless you are working on a sample “hello world”).  If the condition I ran into is a possibility (and it was), then perhaps not in the first pass but after a year or two CLAMWIN should consider an automated mechanism to move all files out of quarantine and restore them to their original locations.  I agree that one could manually restore a few files, but over 10,500 are not doable.</p>
<p>At that time I had two options.  The first was to install Windows XP Professional, which was installed on my machine, or bite the bullet and purchase Windows 7 Professional and go form there.  I decided to follow the latter path, which took a few days to get and install in addition to having to purchase the new Operating System (about $150 at the new Microsoft Store in front of the Apple Store at the Mall of America).  Installation of Windows 7 went rather well.  I still believe that Microsoft has a long way to get things right, but Windows interacts much better with business and office applications and systems than the alternative Apple.</p>
<p>In conclusion, I would strongly recommend for CLAMWIN to provide a mechanism to restore selected (with an ALL option) files from the quarantine folder.  As far as I am concerned, in the foreseeable future I will not be installing CLAMWIN in my computers.</p>
<p>The Naïve American.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2010/12/15/clamwin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DICOM Routers a Thing of the Past?</title>
		<link>http://www.naiveamerican.org/2010/05/21/dicom-routers-a-thing-of-the-past/</link>
		<comments>http://www.naiveamerican.org/2010/05/21/dicom-routers-a-thing-of-the-past/#comments</comments>
		<pubDate>Fri, 21 May 2010 18:30:40 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[CAS]]></category>
		<category><![CDATA[DICOM]]></category>
		<category><![CDATA[HIPAA]]></category>
		<category><![CDATA[PACS]]></category>
		<category><![CDATA[router]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=618</guid>
		<description><![CDATA[DICOM is an acronym for:  Digital Imaging and Communications in Medicine.  It is a standard for handling, storing, printing, and transmitting information in medical imaging.  The current version of the standard is 3.0.  I have been dealing with DICOM for the past twenty-five years.  The key to DICOM (or any other standard) is to make [...]]]></description>
			<content:encoded><![CDATA[<p>DICOM is an acronym for:  Digital Imaging and Communications in Medicine.  It is a standard for handling, storing, printing, and transmitting information in medical imaging.  The current version of the standard is 3.0.  I have been dealing with DICOM for the past twenty-five years.  The key to DICOM (or any other standard) is to make products from different vendors to be able to interconnect.  Before DICOM larger companies had a monopoly on systems.  Once a company got a foothold at a healthcare facility it was almost impossible to switch or get better equipment for specific captures.  For example, some companies specialize in ultrasound while others in MRI.  Before DICOM, healthcare facilities had to choose a vendor and run with it or have redundancies to accommodate the different vendors, which was and still is quite expensive.</p>
<p>The problems with DICOM are quite obvious and there are reasons why.  DICOM is cumbersome, inefficient and poorly specified.  The reason is that is was designed by committee whose members were not computer scientists and electrical engineers.  Representatives came from different vendors that wanted to impose their ideas and protocols in order to get faster and deeper market penetration.  One way or another the benefits that DICOM brought to the industry are obvious and welcomed by healthcare providers, not so much by vendors who still try to eliminate competition by stating that if other DICOM products are not certified with their implementations they will not be able to provide service or might even void warranties.  It is interesting that in all the years I have been dealing with DICOM I have run into a situation where a vendor would put such opposition in writing.<span id="more-618"></span></p>
<p>With the advent of globalization, specialization and costs (recent changes in healthcare reform have increased) medical images (e.g., CT, MRI, US) might be captured in an imaging center.  DICOM images need to be sent to a radiologist specializing in the type of modality (e.g., CT, MRI, US).  The radiologist generates a report that must be associated with the images and sent to the referring physician that ordered the study.  If time is not crucial to the outcome, then the DICOM data could be transferred using optical (i.e., CD, DVD) or other removable media (i.e., USB disk, USB memory).  In most cases transfer speeds are important and they are done over open (e.g., Internet) or virtual private networks (VPN).</p>
<p>To add to this, there are some regulations, courtesy of HIPAA (Health Insurance Portability and Accountability Act), that specify, among other things, who is responsible to store the DICOM data, for how long should the DICOM data be stored and who has access to such DICOM data.</p>
<p>There are other issues that fall in the realm of overall system design.  Most of these escape the design and implementation of most products just because of scope and reduced engineering resources available to most companies.  This is especially true now a day when most design and implementation activities are done abroad (i.e., China, India) by companies that bid the lowest on a project.  As an example of some of the missed requirements / qualities are consistency, redundancy and availability.  What if different copies of the same DICOM object are different?  The differences may be valid due to changes made on the object following standard procedures or they may be maliciously performed to hide some evidence that could require an insurance company to pay a considerable settlement in a malpractice lawsuit.  It becomes difficult to manage multiple copies of a DICOM object when they are in disparate media types, on different private systems or in some type of removable media forgotten in a drawer or in a closet in a private or public place.  When multiple copies of a DICOM object are floating around how can they be located when needed if they are in private systems at healthcare providers, referring physicians, or in removable media.</p>
<p>I have been designing and implementing computer based systems for disparate vertical markets for a rather long period of time.  I very well understand that thinking out of the box is quite rare.  Most junior engineers tend to believe that something they learned while attending school or read in the last issue of a technical publication could be blindly applied to improve on something that needs it (i.e., DICOM).  I recall an electrical engineer that had designed a computer bus that was faster that what was available at the time.  For a few years all he would consider was changing from EISA or VME to his creation.  The problems with using non-standard hardware or software are not just a unique feature but compatibility, overall performance, additional modules, and support just to mention a few.</p>
<p>Based on all what has been said so far, perhaps the time and technology is ripe for a next generation of DICOM routers.  The idea would be to come up with a design what is easy to use, does not break existing systems and follows the DICOM standard.</p>
<p>A typical set of DICOM routers would be used as follows:</p>
<p><a rel="attachment wp-att-622" href="http://www.naiveamerican.org/2010/05/21/dicom-routers-a-thing-of-the-past/standard-dicom-router-2/"><img class="size-thumbnail wp-image-622 alignnone" title="standard DICOM router" src="http://www.naiveamerican.org/wp-content/uploads/2010/05/standard-DICOM-router-150x102.jpg" alt="" width="358" height="201" /></a></p>
<p>1] DICOM images for a patient are captured by a modality (e.g., CT, MRI, US) and sent using the DICOM protocol to a DICOM router.</p>
<p>2] The DICOM router would have a set of rules to send a copy of the DICOM objects to local storage in a DICOM archive and another copy to a remote location to be read.</p>
<p>3] A DICOM router receives the DICOM objects and routes then to a local storage and to a viewing station.</p>
<p>4] A radiologist, specializing on the type of image, would read the set of DICOM images and generate a report.  The report would be typed in or transcribed and sent to the DICOM router.</p>
<p>5] The report and images would be sent to a DICOM router to be sent to the referring physician clinic.  A copy of the report would join the local copy of the DICOM images in case there are questions or they need to be resent to the destination or to a new destination at a later time.</p>
<p>6] The DICOM router at the final destination receives the DICOM objects and sends a copy to the local storage and a copy to a viewing station.</p>
<p>7] The DICOM objects, which include the images and report, await the referring physician.  Based on the report the referring physician decides on a course of action for the patient.</p>
<p>The typical system has several isolated private copies of the same DICOM objects.  The system as a whole makes use of several DICOM routers, each with its own set of rules, each controlled by different organizations.</p>
<p>A new DICOM router could be designed and implemented as illustrated in the following figure: </p>
<p><a rel="attachment wp-att-623" href="http://www.naiveamerican.org/2010/05/21/dicom-routers-a-thing-of-the-past/proposed-dicom-router/"><img class="aligncenter size-thumbnail wp-image-623" title="proposed DICOM router" src="http://www.naiveamerican.org/wp-content/uploads/2010/05/proposed-DICOM-router-150x84.jpg" alt="" width="226" height="164" /></a></p>
<p>1]  DICOM images for a patient are captured by a modality (e.g., CT, MRI, US) and sent using the DICOM protocol to a Content Addressable Storage (CAS) with a DICOM front end implementing a DICOM archive.  The archive uses the DICOM protocol to receive the DICOM objects.  It makes multiple copies in different locations and on different types of media.  The number of copies, their location and media type are configurable.</p>
<p>2] The DICOM front-end interface at the offshore reading center determines that the CAS has received DICOM objects specifying it as a destination.  The DICOM front end at that remote location transfers the DICOM objects to a DICOM viewing station for them to be read by a radiologist.</p>
<p>3]  When done with the read, a report is transcribed (if needed) and sent to the CAS.  Please note that the DICOM images do not need to be sent back unless they have been altered.</p>
<p>4] There are at least two ways the DICOM images and report can get to the final destination, which is the referring physician at a clinic.  In the first approach, after the CAS receives the report, the report and DICOM images are sent to the viewing workstation.  On a different approach, the DICOM objects are sent to both the offshore reading center and to the viewing station at the referring physician clinic.  Later when the report is completed and stored in the CAS, it is sent to the viewing workstation via the DICOM protocol.</p>
<p>As a system, the second implementation is quite more elegant, probably less expensive and quite more reliable than the first approach.</p>
<p>I welcome comments and suggestion regarding this blog entry.</p>
<p>The Naïve American</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2010/05/21/dicom-routers-a-thing-of-the-past/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recycle</title>
		<link>http://www.naiveamerican.org/2009/08/17/recycle/</link>
		<comments>http://www.naiveamerican.org/2009/08/17/recycle/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 16:41:34 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[recycle]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=344</guid>
		<description><![CDATA[Today is Monday, garbage collection day in the neighborhood I live in.  Two of my neighbors had both (regular garbage and recycle) bins out on the curb since yesterday afternoon.  They probably were spending the night at their cabin and out on the river on their boat.  Good for them. At 06:30 AM I have [...]]]></description>
			<content:encoded><![CDATA[<p>Today is Monday, garbage collection day in the neighborhood I live in.  Two of my neighbors had both (regular garbage and recycle) bins out on the curb since yesterday afternoon.  They probably were spending the night at their cabin and out on the river on their boat.  Good for them.<img class="alignright size-thumbnail wp-image-351" title="recycling-logo" src="http://www.naiveamerican.org/wp-content/uploads/2009/08/recycling-logo-150x150.jpg" alt="recycling-logo" width="150" height="150" /></p>
<p>At 06:30 AM I have set an alarm on my cell phone to take the dog out for his first walk of the day.  On our way back one of my neighbors was putting her garbage and recycling bins out for collection.  Mine were still in the garage.  After a few seconds of small talk I started walking back to my garage to let the dog in and put out my bins.  As I was heading home my next-door neighbor (popular and friendly neighborhood I live in) was putting his bins out.  I overheard her asking the other “<em>Do you believe in recycling?</em>”  He was very quick in answering in an affirmative voice, “<em>Yes, of course I do</em>”.</p>
<p>I continued with my chores thinking on the answer.  Of course it is good and looks good to recycle.  The issue that came out to mind was how good is it to actually recycle.<span id="more-344"></span></p>
<p>Lets take a few moments to think before answering such a loaded question.  In general if technology is available to take some manufactured object now considered waste, and through a very inexpensive process reuse it for the same purpose or for some other in which it can be cycled at infinitum, then the answer is “<em>Yes, I do believe in recycling</em>”.  The issue is that very few materials recycle well.  One must first consider the cost and pollution it takes for a second truck (one for garbage and a second for recycling) to be driving around collecting the recycling materials.  Most trucks use some type of carbon-based fuel.  The only fuel that should be used is electricity generated by wind or solar power.  We could skip all the side costs (i.e., additional bin, driver, truck, sorting plant, sorters, etc.) and profits involved in the recycle process and be at a point in which the material shows up at the recycling (not sorting) plant in which, for example used paper, is ready to be converted from waste to paper suitable for new cartons or new paper, or empty water bottles which will be converted into plastic pellets to be molded into new ones.</p>
<p>If these processes work, and they do to some extent, then all is well and we can feel that somehow we contributed to some (very small) extent to preserver our planet.  For career politicians the impact is increased by an order of magnitude.  Given all other things being equal, constituents would always vote for a politician that a support recycling as opposed to one that does not, no matter what. </p>
<p>Recycling is to some extent good.  It is like a charity.  Most Naive Americans support charities.  The issue with most charities is how they process the funds they receive.  The key with any charity is:  Of each Dollar received which percentage directly is received by the intended people?  For example, if I am watching TV and an ad for a charity to feed and educate children in Africa comes up, and I feel guilty and decide to donate a hundred Dollars ($100), how much of it will be used to feed and educate a child?  The answer is a very small percentage, typically in the order of 10% or less ($10).</p>
<p>The same holds true for recycling.  We fill our recycling bin with cardboard and plastic because most (if not all) products we purchase are over packaged.  If 100% of the material gets recycled, then is the benefit savings in carbon not released to the atmosphere or space saved in a landfill?  Given that energy savings are so small, then the goodness of recycling must be found in reducing the amount of waste not send to a landfill.</p>
<p>By the way, my wife and I throw away a bag or two (2) in the garbage bin every week.  The recycling bin, which is collected every other week, is typically full with cardboard and plastics.  Little can we do to reduce the packaging on the products we purchase?  My wife and I do try to purchase products in bulk, which tend to incur in less waste and also cost less when compared to completely processed foods individually wrapped.</p>
<p>Just a though for career politicians that might read this blog.  Perhaps the solution to recycling is not found in special bins, trucks, collection facilities for recycled materials, fines to the public for not complying, but encouraging companies to reduce packaging and educate consumers on purchasing products with less wrappers and using bio degradable packaging.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2009/08/17/recycle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Content Addressable Storage or Fixed Content Storage</title>
		<link>http://www.naiveamerican.org/2009/01/03/content-addresable-storage-cas-and-fixed-content-storage-fcs/</link>
		<comments>http://www.naiveamerican.org/2009/01/03/content-addresable-storage-cas-and-fixed-content-storage-fcs/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 02:13:59 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Byte Magazine]]></category>
		<category><![CDATA[CAS]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[FCS]]></category>
		<category><![CDATA[Henry Blodget]]></category>
		<category><![CDATA[John Canessa]]></category>
		<category><![CDATA[SENCOR]]></category>
		<category><![CDATA[Silicon Alley Insider]]></category>
		<category><![CDATA[SNIA]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=192</guid>
		<description><![CDATA[This morning while browsing the news I ran into the article &#8220;Who The Hell Writes Wikipedia, Anyway?&#8221; by Henry Blodget in the &#8220;Silicon Alley Insider&#8221; www.alleyinsider.com.  It describes how the information one finds in Wikipedia is entered and edited.  Wikipedia is presented to the web community as a repository of information, similar to an encyclopedia, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-194" title="wikipedia_logo" src="http://www.naiveamerican.org/wp-content/uploads/2009/01/wikipedia_logo.jpg" alt="wikipedia_logo" width="242" height="247" />This morning while browsing the news I ran into the article &#8220;Who The Hell Writes Wikipedia, Anyway?&#8221; by Henry Blodget in the &#8220;Silicon Alley Insider&#8221; <a href="http://www.alleyinsider.com/">www.alleyinsider.com</a>.  It describes how the information one finds in Wikipedia is entered and edited.  Wikipedia is presented to the web community as a repository of information, similar to an encyclopedia, in which you can read about any (well most) topic you might be interested in.  If you believe the data is incorrect, then you can edit it.  After being moderated, the flaw is corrected.  With time, this simple process should address all erroneous data.  In other words, if you read about a topic in Wikipedia that has not been edited in a while, you should assume it is correct.</p>
<p>Two items to consider with the Wikipedia approach are:  [1] the knowledge of the masses is not always correct and  [2] what the article touches on, most individuals might contribute some information, but very, very few would constantly maintain it.  As the referred article describes it &#8220;&#8230; The bulk of the changes to the original text, then, are made by a core group of heavy editors who make thousands of tiny edits (the 1400 freaks). &#8230;&#8221;<span id="more-192"></span></p>
<p>For an example of incorrect information in Wikipedia regarding CAS / FCS, in the period between 1990 and 1992 John Canessa while working with different Hierarchical Storage Management (HSM) software came up with (invented) a different metaphor for storing data.  The logic behind the technology is as follows.  Humans need cues and mechanisms to help them locate data in disk(s) attached to computers.  File systems allow users to organize data in an inverted tree structure starting from the root.  The leaves in the tree are the actual data files.  Each file in a file system has a unique file ID and occupies a well define location on disk.  For ease of use, humans limit the number of files in a folder.  The names of folders and files, including their extensions, are usually assigned mnemonics for the type of data they hold.  All of this is done in order to help us humans locate data files.</p>
<p>Computers are not bound by the same rules.  As far as a computer is concerned, all files in a file system could be in a single container / folder and given ascending numbers (i.e., block number).  The idea behind CAS / FCS is to have at the application level a unique name associated with the contents of the file.  The CAS / FCS could then implement a coat check metaphor in which the client presents a Global Unique Identifier (GUID) and the CAS / FCS system returns the associated data as a file or a stream.</p>
<p>Independent to storage, application layers already make use of database engines to keep track of metadata.  They have done this for decades since the invention of database engines.  The only change to support a CAS / FCS is to replace the field that holds the path to a file (e.g., a deed, invoice, radiology image, car loan application, the 05:00 PM news on May 22, 2008 among others), which could change in time (e.g., the disk was replaced for a NAS and given a different network path), for a GUID.  A GUID needs to contain more than a sequential number in order to allow it to be unique in multiple distributed Direct Attached Storage (DAS), Network Attached Storage (NAS) or Storage Area Network (SAN).</p>
<p>The reader should note that Content Addressable Storage (CAS) and Fixed Content Storage (FCS) are different acronyms for the same type of technology.  The CAS / FCS technology is intended to store data that does not change (fixed) in time.</p>
<p>In May 1992, then professor at the Laboratory for Computer Science at the Massachusetts Institute of Technology (MIT) Ron Rivest published the &#8220;The MD5 Message-Digest Algorithm&#8221; Request for Comments (RFC).  In a nutshell, a MD5 digest is a sequence of 32 bytes generated by a mathematical procedure performed on the actual contents of a data file or stream.  The MD5 algorithm when applied to the same data always returns the same digest.</p>
<p>The first commercial application of a CAS / FCS was named Diverse Storage Manager (DSM) by the inventor and Directed Storage Manager (also DSM) by his management.  It supported on-line and near-line media in the form of Magneto Optical Discs (MOD) in a Hewlett-Packard (HP) automated library.  The CAS / FCS was supporting a Digital Imaging and Communications in Medicine (DICOM) medical archive at the Radiology Society of North America (RSNA) 1993 show in Chicago, Illinois.</p>
<p>In 1994 John Canessa founded Software Engineering Corporation (SENCOR) <a href="http://www.sencor.com/">www.sencor.com</a>.<img class="alignright size-full wp-image-196" title="sencor_logo" src="http://www.naiveamerican.org/wp-content/uploads/2009/01/sencor_logo.jpg" alt="sencor_logo" width="336" height="78" /></p>
<p>In 1995 John Canessa called a few times Leonard M. Adleman, at the time professor at Stanford University, one of the founders of RSA and contributor to the MD5 algorithm, to get his insights on the uniqueness of the MD5 digest.  Dr. Adleman responded as a true scientist by stating that, for all practical purposes, generating the same MD5 digest for two (2) different documents was mathematically highly improbable, but possible.  Because of this the CAS / FCS software products since then developed by John Canessa always had a unique identifier in addition to a hash value (i.e., MD5 digest).</p>
<p>In 1996 SENCOR spawned a marketing company by the name FileLink with the intent of selling products based on the SENCOR CAS / FCS technology.  FileLink and later SENCOR showed DICOM archives at RSNA boasting the second generation of CAS / FCS technology.</p>
<p>In March 1998 Ron Anderson wrote an article titled &#8220;Storing Smart Saves Space&#8221; in the now defunct Byte Magazine (<a href="http://www.byte.com/">www.byte.com</a>).  The article described the operation and technical advantages of a CAS / FCS system.</p>
<p>In the late 1990&#8242;s FileLink was approached by EMC (<a href="http://www.emc.com/">www.emc.com</a>) to license / purchase the rights to the CAS / FCS software Backup and Archive Manager (BAM).  Management was not able to reach a mutually satisfactory agreement.</p>
<p>In the late 1990&#8242;s Paul Carpentier and Jan van Riel, while working at a Belgian startup FilePool, coined the term Content Addressable Storage (CAS).</p>
<p>By the year 2000, SENCOR had implemented a few commercial products to process car loans, manage video for broadcasting, and managing video clips for investing purposes using CAS / FCS technology.</p>
<p>In 2001 EMC acquire FilePool whose main product became the Centera platform.</p>
<p>In May 2003 John Canessa submitted to the Network Working Group an Informational draft titled &#8220;Fixed Content Storage (FCS) Application Programming Interface (API)&#8221; (<a href="http://www.watersprings.org/pub/id/draft-canessa-fcs-api-00.txt">http://www.watersprings.org/pub/id/draft-canessa-fcs-api-00.txt</a>).  At the time it represented the third generation of the CAS / FCS technology.</p>
<p>The Storage Networking Industry Association (SNIA) <a href="http://www.snia.org/">www.snia.org</a> finalized the first pass on a C programming API for CAS / FCS using XML named &#8220;Information Management &#8211; extensible Access Method (XAM) &#8211; Part 2: C API Version 1.0 TECHNICAL POSITION July 9, 2008&#8243;.</p>
<p>John Canessa is about to start work on the fourth generation of the CAS / FCS technology.</p>
<p>The information here presented differs from what is currently posted on Wikipedia when one searches for &#8220;content addressable storage&#8221; (do not include the double quotes).  John Canessa will be updating Wikipedia in the next few days so readers can use this example to give objective weight to what was stated in the article referenced in this blog.</p>
<p>For some reason the Naive American tends to believe any and every thing that is printed.  When reading something, always check the source.  Never trust a single resource.  The driving force behind these blogs is to always be objective.  This of course is easily said than followed.  The Naive American is a subset of the human race.  For some reason humans tend to be easily persuaded by politicians and sales people.  Perhaps we act like that because we want to believe on what is being sold to us.  In the case of Wikipedia, we could always use it as the single source for all references.  This makes it easy on us because we can then avoid the time and effort it takes to fully research a topic.  The drawback is that it might not have the correct information.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2009/01/03/content-addresable-storage-cas-and-fixed-content-storage-fcs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zune and Microsoft</title>
		<link>http://www.naiveamerican.org/2009/01/01/zune-and-microsoft/</link>
		<comments>http://www.naiveamerican.org/2009/01/01/zune-and-microsoft/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 18:08:21 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[zune]]></category>

		<guid isPermaLink="false">http://www.naiveamerican.org/?p=184</guid>
		<description><![CDATA[This morning I read an on-line article from InformationWeek titled &#8220;Microsoft Scrambling to Thaw Zune Freeze&#8221; by Thomas Claburn. Apparently the Zune is an MP3 player designed by Microsoft to compete with Apple&#8217;s iPod.  These are consumer products, which I do not relate to.  My car radio is tuned to the local public classical radio [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-185" title="zune_image1" src="http://www.naiveamerican.org/wp-content/uploads/2009/01/zune_image1.jpg" alt="zune_image1" width="190" height="226" />This morning I read an on-line article from InformationWeek titled &#8220;Microsoft Scrambling to Thaw Zune Freeze&#8221; by Thomas Claburn.</p>
<p>Apparently the Zune is an MP3 player designed by Microsoft to compete with Apple&#8217;s iPod.  These are consumer products, which I do not relate to.  My car radio is tuned to the local public classical radio station and is set as a background.  My wife and I gave my oldest granddaughter a pink iPod on her last birthday.  For the holidays my son&#8217;s in-laws gave her a blue iPod.  Not sure how different the models are but it seems to me that a different present would have been better appreciated.  By the way the pink iPod has her name engraved on the back.  Not sure if Zune offers such feature.</p>
<p>According to Microsoft, the issue with the 30 GB Zune appears to be caused by a software bug in the clock driver related to leap years.  Consumers or users do not welcome bugs, but on the bright side the issue can be addressed by a simple procedure described in the article.<span id="more-184"></span></p>
<p>What prompted me to write this entry was not the article itself but a comment posted by SkateNY.  SkateNY had nothing good to say about Microsoft and the Microsoft Kool Aid drinkers.</p>
<p>I happen to be a Computer Scientist and have been working with computer for almost 40 years (not that old, started very young).  Around that time my dad found interesting enough the IBM computer purchased by his office, that he took a few courses on how to program the machine.  I recall some color-coded jumpers he would bring home for me to play with.  Those jumpers were about an inch square (huge compared to jumpers on current computer motherboards and cards).  That and my mother talking about the emerging Cybernetics discipline probably motivated my vocation.</p>
<p>Computers and software have dramatically evolved in that period of time.  The size and complexity of software has exponentially increased.  The applications we use today on our computers would not be possible if they had to be written from scratch.  By scratch I mean the assembly language understood by the Central Processing Unit (CPU) that act as the brain of a computer.  Software developers use always evolving specialized tools and libraries to come up with their master pieces.  Case at hand the software for the Zune.</p>
<p>So how do companies deal with the issue of being able to produce reliable products you might ask?  There are proven methodologies and procedures.  They all culminate with testing at the component and the system level.  The issue is that humans design all testing and testing cannot take years.  We all make mistakes, some less than others.  If development and testing for the Zune would be entirely done from scratch by a single individual then depending on the actual complexity it might take from years to decades to put the product in the hands on consumers.  As consumers we are always seeking for the greatest and latest gadget, which we do not tend to keep for too long.  Very few of the 30 GB Zune players that exhibit the leap year issue would be around for the next leap year.</p>
<p>During the past decade the Linux operating system became a craze.  It was touted that it would displace Windows.  It did not happen and chances are it will never do.  The company I currently work for was pressured by partners to move in the Linux direction.  This meant that most of our core software had to be written using cross platform standards that limited us not to take advantage of several technologies developed by Microsoft.  By the way all our products run on the Windows operating systems.  Through the years we had to develop from scratch many features some of which with time have appeared in Microsoft tools and libraries.</p>
<p>Our installed base is a fraction of a percent of any Microsoft product.  That means that Microsoft has many more users that can run into issues, which when addressed properly and in a timely fashion will improve quality and speed development resulting in better products.  All this said, we are still humans and as people come and go similar (but not the same) type of mistake may show up.</p>
<p>Our products are sold worldwide.  In 2004 one of our Graphical User Interfaces (GUI) had a leap year bug (or as we call them, issue).  The issue was first encountered and reported in Australia while most of our engineers were sleeping.  Our developers were notified at home, found the issue and created a patch.  Our support staff was called in to the office early morning and frantically worked for many hours as the start of the workday moved around the globe.  In less than 24-hours the issue was reported, fixed and customers were updated.</p>
<p>I might not agree with all the business practices from Microsoft, but Bill Gates and now Steve Ballmer have been able to make a great American company recognized all over the world making highly desirable products.  You cannot say that about our automobile industry.  As a matter of fact, regardless of size, not too many American companies have done as well.</p>
<p>SkateNY, this Naive American does not know what you do for a living, but my take is that you do not work in an engineering, scientific or technical field and if you do, chances are you are not good at it.  Have you or the company you work for has ever made a mistake on the services or products you offer?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.naiveamerican.org/2009/01/01/zune-and-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

