<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Inside Out</title>
	<atom:link href="https://belhob.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://belhob.wordpress.com</link>
	<description>Dare to Dream. If u can Dream, U can make the Dreams come true.</description>
	<lastBuildDate>Thu, 12 Jun 2014 07:16:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='belhob.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>Inside Out</title>
		<link>https://belhob.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://belhob.wordpress.com/osd.xml" title="Inside Out" />
	<atom:link rel='hub' href='https://belhob.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Testing</title>
		<link>https://belhob.wordpress.com/2014/06/12/testing/</link>
					<comments>https://belhob.wordpress.com/2014/06/12/testing/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Wed, 11 Jun 2014 21:03:35 +0000</pubDate>
				<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[integration testing]]></category>
		<category><![CDATA[product development life cycle]]></category>
		<category><![CDATA[Software Testing]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=186</guid>

					<description><![CDATA[A product goes through n number of steps or stages of a Product Development Life Cycle before it is launched in the competitive markets. The process involves gathering requirements, high level design, low level design, detailed design, create code, some unit testing, integration testing and start—finally— final test. We wont deny that that most of the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img class="alignleft" style="margin:0 3px 3px 0;border:1px solid #c0c0c0;" src="https://i0.wp.com/cdn.ttgtmedia.com/rms/computerweekly/40769_relative-cost-of-defects.gif" alt="" width="376" height="212" />A product goes through n number of steps or stages of a Product Development Life Cycle before it is launched in the competitive markets. The process involves gathering requirements, high level design, low level design, detailed design, create code, some unit testing, integration testing and start—finally— final test.</p>
<p>We wont deny that that most of the projects run late and are behind the schedule. So what is eliminated from the process? <strong>Testing </strong>&#8211; of course. The implication is that a bug ridden product is delivered to the customers.</p>
<p>In software world, testing is like an ugly step child and no one likes it and is often ignored despite the fact that testing is a crucial part of all engineering disciplines. Many embedded systems design community have now embraced test as a core part of their processes, and recommends creating tests synchronously with coding, realizing that leaving such a critical step till the end of the project could be disastrous.</p>
<p><strong>Economics of Testing &#8211; </strong><strong>Relative cost of defects</strong></p>
<p>The chart shown above is a summary of the relative cost of fixing defects detected at various stages in the software development life cycle process in a typical project. The cost of defect removal increases exponentially as the development lifecycle progresses. In addition, the later defects are found and fixed, the greater the risk to the business they pose.</p>
<p><strong>Pass or Fail</strong></p>
<p>Two questions that we need to ask our self during testing are</p>
<p>1. Why are we testing the product &#8211; To prove that every thing works or To prove that no faulty conditions exists that could be reported as a bug later.</p>
<p>2. When do we say that the test is successful &#8211; when we don&#8217;t find bugs or when we do?</p>
<p><strong>Links:</strong></p>
<p><a href="http://www.computerweekly.com/opinion/The-economics-of-software-testing" target="_blank">http://www.computerweekly.com/opinion/The-economics-of-software-testing</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2014/06/12/testing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>

		<media:content url="http://cdn.ttgtmedia.com/rms/computerweekly/40769_relative-cost-of-defects.gif" medium="image" />
	</item>
		<item>
		<title>Optimization</title>
		<link>https://belhob.wordpress.com/2010/11/05/optimization/</link>
					<comments>https://belhob.wordpress.com/2010/11/05/optimization/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Fri, 05 Nov 2010 10:00:19 +0000</pubDate>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Development Tools]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[MCS51]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[C Programming]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[Data declarations]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[optimizer]]></category>
		<category><![CDATA[Preprocessor]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=181</guid>

					<description><![CDATA[Although the word &#8220;optimization&#8221; shares the same root as &#8220;optimal,&#8221; it is rare for the process of optimization to produce a truly optimal system. The optimized system will typically only be optimal in one application or for one audience. One might reduce the amount of time that a program takes to perform some task at [&#8230;]]]></description>
										<content:encoded><![CDATA[<div style="width: 308px" class="wp-caption alignright"><a href="http://blogs.msdn.com/blogfiles/securitytools/WindowsLiveWriter/COptimizingCompiler_A0AD/IL.jpg"><img class="  " title="Optimization" src="https://i0.wp.com/blogs.msdn.com/blogfiles/securitytools/WindowsLiveWriter/COptimizingCompiler_A0AD/IL.jpg" alt="Optimization" width="298" height="269" /></a><p class="wp-caption-text">Optimization</p></div>
<p>Although the word &#8220;optimization&#8221; shares the same root as &#8220;optimal,&#8221; it is rare for the process of optimization to produce a truly optimal system. The optimized system will typically only be optimal in one application or for one audience. One might reduce the amount of time that a program takes to perform some task at the price of making it consume more memory. In an application where memory space is at a premium, one might deliberately choose a slower algorithm in order to use less memory. Often there is no “one size fits all” design which works well in all cases, so engineers make trade-offs to optimize the attributes of greatest interest. Additionally, the effort required to make a piece of software completely optimal—incapable of any further improvement— is almost always more than is reasonable for the benefits that would be accrued; so the process of optimization may be halted before a completely optimal solution has been reached. Fortunately, it is often the case that the greatest improvements come early in the process.</p>
<p>&nbsp;</p>
<p>Links:</p>
<p><a href="http://en.wikipedia.org/wiki/Program_optimization">http://en.wikipedia.org/wiki/Program_optimization</a></p>
<p><a href="http://www.tantalon.com/pete/cppopt/main.htm">http://www.tantalon.com/pete/cppopt/main.htm</a></p>
<p><a href="http://en.wikipedia.org/wiki/Compiler_optimization">http://en.wikipedia.org/wiki/Compiler_optimization</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2010/11/05/optimization/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>

		<media:content url="http://blogs.msdn.com/blogfiles/securitytools/WindowsLiveWriter/COptimizingCompiler_A0AD/IL.jpg" medium="image">
			<media:title type="html">Optimization</media:title>
		</media:content>
	</item>
		<item>
		<title>Stack</title>
		<link>https://belhob.wordpress.com/2010/10/17/stack/</link>
					<comments>https://belhob.wordpress.com/2010/10/17/stack/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Sun, 17 Oct 2010 09:38:17 +0000</pubDate>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Development Tools]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[MCS51]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C code optimization]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[cstack]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[optimizer]]></category>
		<category><![CDATA[rstack]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=176</guid>

					<description><![CDATA[LIFO stack Stacks are a type of container adaptors, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from the end of the container. stacks are implemented as containers adaptors, which are classes that use an encapsulated object of a specific container class as its underlying container, providing a [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<p><strong></p>
<div style="width: 339px" class="wp-caption alignleft"><a href="http://www.staff.ncl.ac.uk/hermann.moisl/ell236/lecture10.htm"><img title="Stack" src="https://i0.wp.com/www.staff.ncl.ac.uk/hermann.moisl/ell236/stack3.gif" alt="Stack" width="329.2" height="384" /></a><p class="wp-caption-text">Stack - PUSH/POP</p></div>
<p>LIFO stack</strong></p>
</div>
<div id="content">Stacks are a type of container adaptors, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from the end of the container.</p>
<p><strong>stack</strong>s are implemented as <em>containers adaptors</em>, which are classes that use an encapsulated object of a specific container class as its <em>underlying container</em>, providing a specific set of member functions to access its elements. Elements are <em>pushed</em>/<em>popped</em> from the <em>&#8220;back&#8221;</em> of the specific container, which is known as the <em>top</em> of the stack.</p>
<p>The underlying container may be any of the standard container class templates or some other specifically designed container class. The only requirement is that it supports the following operations:</p>
<ul>
<li><tt>back()</tt></li>
<li><tt>push_back()</tt></li>
<li><tt>pop_back()</tt></li>
</ul>
</div>
<p><strong>Link:</strong></p>
<p><strong><a href="http://www.cplusplus.com/reference/stl/stack/">http://www.cplusplus.com/reference/stl/stack/</a></strong></p>
<p><strong><a href="http://en.wikipedia.org/wiki/Stack_(data_structure)">http://en.wikipedia.org/wiki/Stack_(data_structure)</a><br />
</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2010/10/17/stack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>

		<media:content url="http://www.staff.ncl.ac.uk/hermann.moisl/ell236/stack3.gif" medium="image">
			<media:title type="html">Stack</media:title>
		</media:content>
	</item>
		<item>
		<title>Asserts</title>
		<link>https://belhob.wordpress.com/2010/10/10/asserts/</link>
					<comments>https://belhob.wordpress.com/2010/10/10/asserts/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Sat, 09 Oct 2010 19:00:28 +0000</pubDate>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[#error]]></category>
		<category><![CDATA[codes]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[cstack]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[microprocessors]]></category>
		<category><![CDATA[optimizer]]></category>
		<category><![CDATA[Real time]]></category>
		<category><![CDATA[rstack]]></category>
		<category><![CDATA[stack]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=170</guid>

					<description><![CDATA[&#160; &#160; Expert programmers use the assert() macro to seed their code with debugging statements. So should we all. The macro must have no effect on the system &#8211; it shouldn&#8217;t change memory, interrupt state, or I/O, and it should make no function calls. The user must feel free to sprinkle these at will throughout [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<div style="width: 461px" class="wp-caption alignright"><a href="http://palisade.plynt.com/issues/2006Feb/assert-safely/"><img class=" " title="Assert Safely" src="https://i0.wp.com/palisade.plynt.com/images/asserts.png" alt="Assert Safely" width="451" height="304" /></a><p class="wp-caption-text">Assert Safely</p></div>
<p>&nbsp;</p>
<p>Expert programmers use the assert() macro to seed their code with debugging statements. So should we all.</p>
<p>The macro must have no effect on the system &#8211; it shouldn&#8217;t change memory, interrupt state, or I/O, and it should make no function calls. The user must feel free to sprinkle these at will throughout the program. Disabling the asserts in released code must never change the way the program operates.</p>
<p>The macro generally looks something like:</p>
<pre>#define
assert(s)
if (s)
{}else (printf("Error at %s %d: ", __FILE__, __LINE__)</pre>
<p>It&#8217;s sort of an odd way to write code &#8211; if the condition is true (in which case assert() takes no action) there&#8217;s a null pair of braces. Why not test the negation of the statement &#8220;s&#8221;?</p>
<p><strong>Links: </strong><a href="http://www.ganssle.com/articles/adifasts.htm">http://www.ganssle.com/articles/adifasts.htm</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2010/10/10/asserts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>

		<media:content url="http://palisade.plynt.com/images/asserts.png" medium="image">
			<media:title type="html">Assert Safely</media:title>
		</media:content>
	</item>
		<item>
		<title>Efficient CRC calculation with minimal memory footprint</title>
		<link>https://belhob.wordpress.com/2008/03/18/efficient-crc-calculation-with-minimal-memory-footprint/</link>
					<comments>https://belhob.wordpress.com/2008/03/18/efficient-crc-calculation-with-minimal-memory-footprint/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Tue, 18 Mar 2008 04:50:37 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[binary polynomial division]]></category>
		<category><![CDATA[communication errors]]></category>
		<category><![CDATA[CRC]]></category>
		<category><![CDATA[digital information exchange]]></category>
		<category><![CDATA[Efficient CRC calculation]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[error detection and correction]]></category>
		<category><![CDATA[LFSRs]]></category>
		<category><![CDATA[minimal memory footprint]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=168</guid>

					<description><![CDATA[Almost every form of digital information exchange can introduce communication errors. Sometimes, these errors can be ignored (for example, an erroneous pixel in a high-resolution video is merely unnoticeable). However, most of the time, they cannot be ignored, and we want to ensure that the receiver gets an absolutely correct stream of information. In order [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://www.relisoft.com/Science/images/crc.gif"><img SRC="https://i0.wp.com/www.relisoft.com/Science/images/crc.gif" BORDER="0" HSPACE="15" VSPACE="15" WIDTH="306" HEIGHT="246" ALIGN="left" /></a>Almost every form of digital information exchange can introduce communication errors. Sometimes, these errors can be ignored (for example, an erroneous pixel in a high-resolution video is merely unnoticeable). However, most of the time, they cannot be ignored, and we want to ensure that the receiver gets an absolutely correct stream of information.</p>
<p>In order to overcome the inherent inaccuracy of information transmission, a few methods for error detection and correction have been developed. Generally speaking, these methods introduce some redundancy to the actual message, which in turn can be used to detect errors and in some cases to recover the original data.</p>
<p>One of the most common methods is the use of the CRC (cyclic redundancy check) function, a family of codes commonly used to ensure data integrity in digital data streams by detecting errors due to noise or dropouts of bits in the message stream. The CRC calculates a series of bits (also commonly referred to as a CRC) that is appended to the data stream and transmitted along with the message. The receiver performs a CRC function on the message and compares the result with the received CRC code to verify the integrity of the message. CRC is commonly used in a number of applications such as digital communications and computer data storage systems.</p>
<p>The CRC is performed through binary polynomial division between the transmitted message and a polynomial divisor and is usually implemented using a linear feedback shift register (LFSR). An LFSR is a shift register where its next state is a linear combination of its previous state and input bits. In our context, the linear operators are Logical XOR and Logical AND. Since the operation of an LFSR circuit is deterministic, and the CRC is shorter than the message, typically few messages are mapped to each CRC value. A well-chosen polynomial ensures an evenly distributed mapping of messages to CRC values (for example, if all messages were mapped to the same CRC, detection of an error in a message bit would be impossible).</p>
<p>The trick in an embedded systems design is to implement this technique in the most efficient way possible and in the smallest possible footprint. In this article, we discuss aspects of the theory and implementation of LFSRs and CRCs, illustrated using a family of instructions on Analog Devices&#8217; Blackfin processor specifically defined for addressing the task of efficient LFSR implementation. We also provide a method for converting an implementation from an Internal LFSR form to an External LFSR form.</p>
<p><strong>Links:</strong> <a HREF="http://embedded.com/design/206901030">http://embedded.com/design/206901030</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/18/efficient-crc-calculation-with-minimal-memory-footprint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
		<item>
		<title>The Rule of Fifty</title>
		<link>https://belhob.wordpress.com/2008/03/17/the-rule-of-fifty/</link>
					<comments>https://belhob.wordpress.com/2008/03/17/the-rule-of-fifty/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Mon, 17 Mar 2008 04:50:46 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Circadian Technologies Shiftware Practices]]></category>
		<category><![CDATA[Fred Brooks]]></category>
		<category><![CDATA[German Embassy]]></category>
		<category><![CDATA[hour week]]></category>
		<category><![CDATA[John Nevison]]></category>
		<category><![CDATA[overtime]]></category>
		<category><![CDATA[Overtime Hours]]></category>
		<category><![CDATA[productive hours]]></category>
		<category><![CDATA[Rule of Fifty]]></category>
		<category><![CDATA[working too many hours]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=167</guid>

					<description><![CDATA[Though we all have a gut-sense that working too many hours is counterproductive, a very short paper by John Nevison called &#8220;Overtime Hours: The Rule of Fifty&#8221; at Project Solutions (where you need to register) cites data from four studies conducted over a half century to show how productivity either drops, or at best maxes [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://suttonplace.mlblogs.com/photos/uncategorized/working_overtime.jpg"><img SRC="https://i0.wp.com/suttonplace.mlblogs.com/photos/uncategorized/working_overtime.jpg" BORDER="0" HSPACE="15" VSPACE="15" WIDTH="302" HEIGHT="413" ALIGN="right" /></a>Though we all have a gut-sense that working too many hours is counterproductive, a very short paper by John Nevison called &#8220;Overtime Hours: The Rule of Fifty&#8221; at Project Solutions (where you need to register) cites data from four studies conducted over a half century to show how productivity either drops, or at best maxes out, as overtime increases.</p>
<p>The studies&#8217; results vary quite a bit. One shows that at 50 hours/week workers do about 37 hours work, dropping to just over 30 once the workweek increases to 55. The &#8220;best,&#8221; if you can call it that, results were from a 1997 survey showed wielding the whip can have ever-increasing productive rewards, edging up to about 52 productive hours for a 70 hour week. But they all show a nearly-impenetrable barrier of around 50 useful hours or less, regardless of overtime.</p>
<p>Unsurprisingly the data shows a sharp drop in results for those working excessive OT for weeks on end, averaging around a 20% drop after 12 weeks of servitude. That means, as the author concludes, the Rule of Fifty is a best case estimate.</p>
<p>The 2005 Circadian Technologies Shiftware Practices survey showed that productivity can decrease by as much as 25% for a 60 hour workweek, which jibes pretty well with Nevison&#8217;s data. Circadian&#8217;s results also demonstrate that turnover is nearly three times higher among workers putting in a lot of OT, and absenteeism is twice the national average. I&#8217;m not sure what that result means, since it&#8217;s awfully hard for an absent worker to be putting in overtime.</p>
<p>Fred Brooks claims that the average software engineer devotes about 55% of his week to project work. The rest goes to overhead activities, responding to HR, meetings about the health insurance plan, and supporting other activities.</p>
<p>The German Embassy&#8217;s Washington  web site claims on its web  site that the nominal workweek in Germany is 37.5 hours because &#8220;The original reason for introducing this system was to combat rush-hour traffic congestion, but among the more direct gains are an improvement in employee morale, greater productivity, significant decreases in absenteeism, greater flexibility for women who juggle the demands of work, home and children, and the increased sense of individual dignity that the employees get from having a greater say in organizing their own time.&#8221;</p>
<p><strong>Links:</strong>  <a HREF="http://embedded.com/columns/breakpoint/206902869">http://embedded.com/columns/breakpoint/206902869</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/17/the-rule-of-fifty/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
		<item>
		<title>Taming software complexity</title>
		<link>https://belhob.wordpress.com/2008/03/14/taming-software-complexity/</link>
					<comments>https://belhob.wordpress.com/2008/03/14/taming-software-complexity/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Fri, 14 Mar 2008 04:42:51 +0000</pubDate>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cyclomatic complexity]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[measure the complexity of your code]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Taming software complexity]]></category>
		<category><![CDATA[Thomas McCabe]]></category>
		<category><![CDATA[tragedies]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=166</guid>

					<description><![CDATA[&#8220;Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.&#8221; Folk wisdom, as reflected in Brian Kernighan&#8217;s clever riff on clever code, is that insight we all know but generally ignore. But [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://www.spinellis.gr/blog/20031003/iexplore2.gif"><img ALIGN="left" HEIGHT="274" WIDTH="302" VSPACE="15" HSPACE="15" BORDER="0" SRC="https://i0.wp.com/www.spinellis.gr/blog/20031003/iexplore2.gif" /></a>&#8220;Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.&#8221;</p>
<p>Folk wisdom, as reflected in Brian Kernighan&#8217;s clever riff on clever code, is that insight we all know but generally ignore. But how can we measure &#8220;cleverness?&#8221; Supreme Court Justice Potter Stewart, trying to characterize pornography, memorably lamented that it somewhat defies definition, but &#8220;I know it when I see it.&#8221; Likewise, most of us can sense excessively clever code but may disagree when examining specific code chunks.</p>
<p>We do know complicated functions are tough to understand, an agony to debug, and usually require excessive amounts of maintenance.</p>
<p>One of the tragedies of software engineering is that, in industry at least, we&#8217;ve successfully avoided the metrics-based quality revolution that transformed manufacturing. Few companies know their pretest bug rates in, say, defects per line of code. Or productivity in lines of code per hour. Or which are the worst functions in a project. In an experiment I conducted surreptitiously last year, only a third of correspondents could answer the seemingly simple question &#8220;how big is your code&#8221; in any metric they wanted to use (MB, lines of code, lines they developed, value in dollars, or, heck, the weight of the listings).</p>
<p>A management mantra states &#8220;if you can&#8217;t measure it, you can&#8217;t manage it.&#8221; Though surely true for building widgets, it&#8217;s a lot harder to apply to engineering. But some objective measures provide valuable insight into the art of developing firmware. Since we know complex functions are problematic, it seems logical that we measure and control complexity in functions.</p>
<p>And it turns out that&#8217;s pretty easy to do.</p>
<p>But first, there are two kinds of complexity: essential, which is a quality about the problem being solved, and incidental, which is the complexity introduced by our engineering approaches. Here we&#8217;re talking about incidental complexity, as that&#8217;s the only kind we as developers can manage.</p>
<p>Thirty-one years ago, Thomas McCabe proposed a metric called &#8220;cyclomatic complexity&#8221; to attach a quantitative measure to a function&#8217;s complexity. It&#8217;s one of many such measures but is by far the one most used. It measures the number of &#8220;edges&#8221; and &#8220;nodes&#8221; in a function, where a node is a computational statement and an edge represents the transfer of control between nodes. Cyclomatic complexity is then:</p>
<p><strong><i>v(G)=edges–nodes+2</i></strong></p>
<p><strong>Links:</strong>  <a HREF="http://embedded.com/columns/technicalinsights/206901032">http://embedded.com/columns/technicalinsights/206901032</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/14/taming-software-complexity/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
		<item>
		<title>How to write secure C/C++ application code</title>
		<link>https://belhob.wordpress.com/2008/03/13/how-to-write-secure-cc-application-code/</link>
					<comments>https://belhob.wordpress.com/2008/03/13/how-to-write-secure-cc-application-code/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Thu, 13 Mar 2008 04:28:42 +0000</pubDate>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Embedded Systems]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[address space]]></category>
		<category><![CDATA[buffer overflow]]></category>
		<category><![CDATA[flaws]]></category>
		<category><![CDATA[GOT]]></category>
		<category><![CDATA[heap memory space]]></category>
		<category><![CDATA[How to write secure C/C++ application code]]></category>
		<category><![CDATA[OpenBSD]]></category>
		<category><![CDATA[PLT]]></category>
		<category><![CDATA[shared libraries]]></category>
		<category><![CDATA[vulnerable program]]></category>
		<category><![CDATA[WAX policy]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=165</guid>

					<description><![CDATA[Many flaws are exploitable because the address space of the vulnerable program has memory that is both writable and executable. As a result, an attacker can write to memory using a buffer overflow, for example, and then transfer control to the address of the injected code. This problem can be addressed by ensuring that memory [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://www.scapackaging.com/upload/About%20us/BE-SECURE-icon-72dpi.jpg"><img SRC="https://i0.wp.com/www.scapackaging.com/upload/About%20us/BE-SECURE-icon-72dpi.jpg" BORDER="0" HSPACE="15" VSPACE="15" WIDTH="295" HEIGHT="276" ALIGN="right" /></a>Many flaws are exploitable because the address space of the vulnerable program has memory that is both writable and executable. As a result, an attacker can write to memory using a buffer overflow, for example, and then transfer control to the address of the injected code.</p>
<p>This problem can be addressed by ensuring that memory pages have the minimal permissions required for proper operation (an application of the principle of least privilege). This is not a comprehensive defense against all exploits, but simply a mechanism designed to extend your defense-in-depth strategy by increasing the difficulty for an attacker to exploit a vulnerability.</p>
<p>Several existing systems enforce reduced privileges in the kernel so that no part of the process address space is both writable and executable. This policy has been named &#8220;W xor X&#8221; or more concisely WAX. Enforcement of this policy results, for example, in a nonexecutable stack.</p>
<p>OpenBSD is an example of a system that implements a WAX policy. In OpenBSD, an application can still request explicit permissions with mprotect() to override the default.</p>
<p>The implementation of a WnX policy depends on the central processing unit (CPU) and memory management unit (MMU) architecture. For processors that feature an execute bit for each page of memory; OpenBSD implements two changes to make this possible:</p>
<p>1. The signal trampoline is removed from the stack. The signal trampoline page is given read and execute permissions, while the stack segment is given read and write permissions. By doing this, the stack becomes nonexecutable.</p>
<p>2. The mapping of shared libraries and heap memory space is changed so that the data segments do not contain objects which are read, write, and executable. This entails moving the shared library global offset table (GOT), the shared library procedure linkage table (PLT), C++ constructors (.ctors), and C++ destructors (.dtors).</p>
<p>The GOT and PLT are mapped onto their own pages, which are made nonwritable. Minor changes to the dynamic linker are needed to accommodate this change. The . dtors and . ctors sections are moved in with the GOT and consequently become nonwritable as well. Making these changes eliminates executable objects from the data segment.</p>
<p>The implementation for architectures that do not support a per-page execute bit (such as IA-32) is more involved but achieves a similar result.</p>
<p>To supplement this scheme, OpenBSD also reduces permissions on readonly strings and pointers stored as constant data. Historically, these objects were stored in the text segment and had permissions of PROT READ IPROT EXEC. This meant that constant data could potentially be executed as shell code.</p>
<p>Because OpenBSD uses the ELF object file format, a new segment, aptly named . rodata, was created to store this data. As a result, this behavior was changed so that now these objects only have PROT READ and they lose PROT EXEC.</p>
<p><strong>Links:</strong> <a HREF="http://embedded.com/columns/technicalinsights/202802744">http://embedded.com/columns/technicalinsights/202802744</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/13/how-to-write-secure-cc-application-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
		<item>
		<title>Lilo</title>
		<link>https://belhob.wordpress.com/2008/03/08/lilo/</link>
					<comments>https://belhob.wordpress.com/2008/03/08/lilo/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Sat, 08 Mar 2008 04:26:42 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Alessandro Rubini]]></category>
		<category><![CDATA[BootLoaders]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[bootstrap loader]]></category>
		<category><![CDATA[Cameron Spitzer]]></category>
		<category><![CDATA[disk drive]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[Lilo]]></category>
		<category><![CDATA[Lilo installations]]></category>
		<category><![CDATA[Lilo User's Guide]]></category>
		<category><![CDATA[linux Boot Loaders]]></category>
		<category><![CDATA[LiveCDs]]></category>
		<category><![CDATA[paper tape]]></category>
		<category><![CDATA[punched card]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[ROM]]></category>
		<category><![CDATA[USB flash drives]]></category>
		<category><![CDATA[x86]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=164</guid>

					<description><![CDATA[LILO is the most used Linux Loader for the x86 flavor of Linux; I&#8217;ll call it Lilo rather than LILO here because I don&#8217;t appreciate uppercase. This file describes some typical Lilo installations. It&#8217;s intended as a supplement to the Lilo User&#8217;s Guide. I think examples are informative even if your setup isn&#8217;t much like [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://www.slackbook.org/html/booting/setup-lilo-w.png"><img SRC="https://i0.wp.com/www.slackbook.org/html/booting/setup-lilo-w.png" BORDER="0" HSPACE="15" VSPACE="15" WIDTH="301" HEIGHT="188" ALIGN="left" /></a>LILO is the most used Linux Loader for the x86 flavor of Linux; I&#8217;ll call it Lilo rather than LILO here because I don&#8217;t appreciate uppercase. This file describes some typical Lilo installations. It&#8217;s intended as a supplement to the Lilo User&#8217;s Guide. I think examples are informative even if your setup isn&#8217;t much like mine. I hope this saves you trouble. Since Lilo&#8217;s own documentation is very good, who&#8217;s interested in the details is referred to /usr/doc/lilo* (once upon a time said gentlemen like Cameron Spitzer and Alessandro Rubini who have made early versions of this document)</p>
<p>LILO (LInux LOader) is a generic boot loader for Linux.</p>
<p>LILO was originally developed by Werner Almesberger, while its current developer is John Coffman.</p>
<p>LILO does not depend on a specific file system, and can boot an operating system (e.g., Linux kernel images) from floppy disks and hard disks. One of up to sixteen different images can be selected at boot time. Various parameters, such as the root device, can be set independently for each kernel. LILO can be placed either in the master boot record (MBR) or the boot sector of a partition. In the latter case something else must be placed in the MBR to load LILO.</p>
<p>At system start, only the BIOS drivers are available for LILO to access hard disks. For this reason, with very old BIOSes, the accessible area is limited to cylinders 0 to 1023 of the first two hard disks. For later BIOSes, LILO can use 32-bit &#8220;logical block addressing&#8221; (LBA) to access practically the entire storage of all the harddisks that the BIOS allows access to.</p>
<p>LILO was the default bootloader for most Linux distributions in the years after the popularity of loadlin. Today, most distributions use GRUB as the default bootloader.</p>
<p><strong>Links:</strong></p>
<p><a HREF="http://tldp.org/HOWTO/LILO.html">http://tldp.org/HOWTO/LILO.html</a></p>
<p><a HREF="http://en.wikipedia.org/wiki/LILO_(boot_loader)">http://en.wikipedia.org/wiki/LILO_(boot_loader) </a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/08/lilo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
		<item>
		<title>GRUB</title>
		<link>https://belhob.wordpress.com/2008/03/07/grub/</link>
					<comments>https://belhob.wordpress.com/2008/03/07/grub/#respond</comments>
		
		<dc:creator><![CDATA[Belhob]]></dc:creator>
		<pubDate>Fri, 07 Mar 2008 11:58:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux Devices]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[BootLoaders]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[bootstrap loader]]></category>
		<category><![CDATA[disk drive]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[LiveCDs]]></category>
		<category><![CDATA[paper tape]]></category>
		<category><![CDATA[punched card]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[ROM]]></category>
		<category><![CDATA[USB flash drives]]></category>
		<guid isPermaLink="false">http://belhob.wordpress.com/?p=163</guid>

					<description><![CDATA[ GRUB is independent of any particular operating system and may be thought of as a tiny, function-specific OS. The purpose of the GRUB kernel is to recognize filesystems and load boot images, and it provides both menu-driven and command-line interfaces to perform these functions. The command-line interface in particular is quite flexible and powerful, with [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a HREF="http://www.cyberciti.biz/tips/wp-content/uploads/2006/10/super-grub-disk-linux-options.png"><img ALIGN="right" HEIGHT="175" WIDTH="291" VSPACE="15" HSPACE="15" BORDER="0" SRC="https://i0.wp.com/www.cyberciti.biz/tips/wp-content/uploads/2006/10/super-grub-disk-linux-options.png" /></a> GRUB is independent of any particular operating system and may be thought of as a tiny, function-specific OS. The purpose of the GRUB kernel is to recognize filesystems and load boot images, and it provides both menu-driven and command-line interfaces to perform these functions. The command-line interface in particular is quite flexible and powerful, with command history and completion features familiar to users of the bash shell.</p>
<p>GRUB is in its element with the multiboot, multidisk systems typical of Linux and open-source adventurers who may simultaneously test or track several Linux distributions, the BSDs, GNU/Hurd, BeOS and perhaps that vestigial partition for Mr. Bill. Even if you stick with LILO as your system&#8217;s primary boot loader, it&#8217;s smart to keep a GRUB boot floppy handy as the best and fastest way to get your system back if you otherwise cream your master boot record (MBR). If you have done any number of multiboot installations, you know exactly what I&#8217;m talking about. Should you need any more reasons for considering GRUB, check out the sidebar, “Why GRUB”. Let&#8217;s get started!</p>
<p><strong> Links:</strong></p>
<p><a HREF="http://www.linuxjournal.com/article/4622">http://www.linuxjournal.com/article/4622</a></p>
<p><a HREF="http://www.gnu.org/software/grub/">http://www.gnu.org/software/grub/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://belhob.wordpress.com/2008/03/07/grub/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://2.gravatar.com/avatar/bbc6c66a3faed8c651ed88c9f484c204fad03d8b1ca1379f228fda2ecc4cb2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bipin Gautam Taksande</media:title>
		</media:content>
	</item>
	</channel>
</rss>
