<?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>Ask The Oracle</title>
	<atom:link href="http://asktheoracle.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://asktheoracle.com/blog</link>
	<description>A Tech blog for Engineers, Software Devs, and Computer Geeks</description>
	<lastBuildDate>Thu, 03 Feb 2011 23:36:43 +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>Selecting an Online Backup for Power Users</title>
		<link>http://asktheoracle.com/blog/selecting_an_online_backup_for_power_users/</link>
		<comments>http://asktheoracle.com/blog/selecting_an_online_backup_for_power_users/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 21:53:29 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[backup solutions]]></category>
		<category><![CDATA[backup strategy]]></category>
		<category><![CDATA[online backup]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=189</guid>
		<description><![CDATA[I am big fan of online backup. It is an easy way to automatically protect your important files with minimum effort. To be effective, a backup strategy has to be easy to set up and maintain. My consulting company’s clients rely on my company to keep their data and the projects safe. A good backup [...]]]></description>
			<content:encoded><![CDATA[<p>I am big fan of online backup. It is an easy way to automatically  protect your important files with minimum effort. To be effective, a  backup strategy has to be easy to set up and maintain.</p>
<p><span id="more-189"></span></p>
<p>My consulting company’s clients rely on my company to keep their data and the projects safe. A good backup strategy plays a big part in protecting data and work in progress. It is very important to have a backup plan that provides quick, secure access to any files in case of a computer system failure.</p>
<p>I have found that a backup procedure that requires manual user intervention, (i.e. loading a tape or plugging in an external backup drive) makes it very difficult to keep reliable backups. At the beginning, it is easy to be diligent about doing backups. However, as time goes by, it is too easy to forget about scheduling regular backups.</p>
<h1>Online Backup</h1>
<p>Online backup solutions make the process simple. You install a program on your computer, tell it what directories to backup, how often to backup and let it run. The program runs in the background while you do your work. It sends your data off to the cloud where it can be retrieved when needed. Online backup also provides safety in case of a flood or fire at your office because the data is saved offsite.</p>
<h1>Selection Criteria</h1>
<p>Here are my requirements for Online backup:</p>
<p>1)      <strong>Reliability</strong><br />
Reliability is key. In the event that my computer goes down or the hard drive fails, I want to be able to retrieve all of your files as quickly as possible. I also want to know that I can contact a helpful technical person at customer support in case of difficulty.</p>
<p>2)     <strong> Unlimited (or very large) data backups</strong><br />
Many of the online backup systems have a relatively low cap on the amount of data that can be stored. My backup set is around 400 Gbytes so I need a lot of storage. After the initial backup, which can take a while, the daily backups are small since I only need to update the files that have changed.</p>
<p>3)      <strong>Secure Encryption</strong><br />
The data on my computer is confidential. I want high quality encryption for the transmission of the data. I want the data stored offsite to have an encryption key that only I can use. I don’t want to rely on the security provided by the backup provider. If I am the only one that holds the data encryption keys then I do not have to worry about a hacker accessing their system. My data will remain secure no matter who accesses it.</p>
<p>Some services hold the encryption keys themselves. This allows them to help a user that loses his key. It is also a potential security risk allowing company employees or hackers to access my data.  I will not use a service that does not allow me exclusive access to the keys.</p>
<p>4)     <strong> Low cost</strong><br />
It has to be affordable.</p>
<p>5)      <strong>Low CPU overhead</strong><br />
The backup program is going be running in the background all of the time on my   system. If it slows my computer down enough that I can notice it, then I won’t use it.</p>
<p>6)      <strong>Easy to use but with lots of options</strong><br />
It should set up easily and allow me to customize my backup procedure.  I want full control of my backup options.</p>
<h1>Selecting An Online Backup Company</h1>
<p>Since I need large storage capability (my backup set is over 400 Gb) I eliminated many of the companies that provide data caps. I looked at<a title="Mozy" href="http://www.mozy.com"> Mozy</a>, <a title="Carbonite" href="http://www.carbonite.com">Carbonite</a>, <a title="CrashPlan" href="http://www.crashplan">CrashPlan</a> and <a title="BackBlaze" href="http://www.backblaze.com">BackBlaze</a>.  <a title="CrashPlan" href="http://www.crashplan.com">CrashPlan</a> came out at the top of my list.</p>
<p>I had been a satisfied <a title="Mozy" href="http://www.mozy.com">Mozy</a> user for years until they dropped their unlimited plan with almost no notification. I found this out when I happened to pull up the status screen and saw a message saying my account would expire in 5 days, even though my account was set up to automatically renew every month.</p>
<p><a title="Crashplan" href="http://www.crashplan.com">CrashPlan</a> provides unlimited online storage at $49.99 per year.  It has a free offsite storage option if you have access to a second computer at a remote location. It allows multiple backups at sites that are local and remote. The program is easy to setup but also allows customization of every detail. My computer has been uploading over 30 Gbytes of data a day to their server (during the initial upload) without noticeably slowing my computer. They give you the option to password protect your encryption keys or to generate your own for the ultimate in security.</p>
<p><a title="Carbonite" href="http://www.carbonite.com">Carbonite</a> may be a good option for some users, but they cap the bandwidth for large uploads. Form their website, , ” …. for exceptionally large backups – 200GB or more – backup speed will slow noticeably (100 Kbps) after the first 200GBs have been backed up.” They also do not allow users to hold their own encryption keys. That kills it for me.</p>
<p><a title="BackBlaze" href="http://www.backblaze.com">BackBlaze</a> looks like a pretty good choice. It does not have a Linux option or the many backup storage choices that CrashPlan offers, but if those options are not important to you, you might want to check it out.</p>
<h1>Links For More Information</h1>
<p>You can find some reviews of these products and others at:</p>
<p><a title="Storage Monkey Blog" href="http://storage-monkey.com/blog/?p=49">Storage Monkey Blog</a></p>
<p><a title="LifeHackers Alternatives to Mozy" href="http://lifehacker.com/5749845/the-best-alternatives-to-mozy-for-big-or-unlimited-backups">Lifehackers Alternatives to Mozy</a></p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/selecting_an_online_backup_for_power_users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SRecord Utility Should be in Every Toolbox</title>
		<link>http://asktheoracle.com/blog/srecord_utility_should_be_in_every_toolbox/</link>
		<comments>http://asktheoracle.com/blog/srecord_utility_should_be_in_every_toolbox/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 14:11:09 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[CRC]]></category>
		<category><![CDATA[embedded system design]]></category>
		<category><![CDATA[medical device]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[SRecord]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=172</guid>
		<description><![CDATA[SRecord is utility that should be in the toolbox of every embedded systems engineer. It is an amazingly useful, open source, cross platform tool. It is like a Swiss Army knife for reformatting programming files. Among the things SRecord (not to be confused with the Motorola S-record format) can do: 1) Add CRCs to files. [...]]]></description>
			<content:encoded><![CDATA[<p><a title="SRecord" href="http://srecord.sourceforge.net/">SRecord</a> is utility that should be in the toolbox of every embedded systems engineer. It is an amazingly useful, open source, cross platform tool. It is like a Swiss Army knife for reformatting programming files.</p>
<p><span id="more-172"></span></p>
<p>Among the things SRecord (not to be confused with the Motorola  S-record format) can do:</p>
<p>1)	Add CRCs to files.<br />
2)	Read a program file in most common programming formats (including Intel, Motorola, Binary, Ascii,  Atmel, any many others) and output it into a different format<br />
3)	Join or Split files into multiple EPROMs.<br />
4)	Compare user selected portions of files.<br />
5)	Add embedded text including serial numbers or copyright notices.<br />
6)	Generate data files that can read by C files, Verilog, or VHDL</p>
<p>Here is an example to show you how I have used it. I was working on a new embedded system design for an infusion pump that is part of a  medical device. It is important to verify that the firmware on the infusion pump has not been corrupted before it is allowed to control the delivery of drugs to a patient. On power up, the unit does a CRC on the code and compares it against the CRC stored in the firmware. If the CRC matches, the code starts up and runs the pump. If the CRC fails, the pump issues an error warning that the pump has failed and needs repair.</p>
<p>Unfortunately, many compilers have no support for embedding a CRC into the code. Some of the ones that do support a CRC have no details on the CRC implementation they use. There are dozens of standards available. You want a widely used standard that you can implement in your microprocessor at boot time to check the compiled CRC (see &#8220;<a href="http://asktheoracle.com/blog/why-you-should-avoid-checksums-and-use-crcs-instead/">Why You Should Avoid Checksums and Use CRCs Instead</a>&#8220;).   This is where SRecord saves the day.</p>
<p>SRecord can read a compiler output file (in almost any format), calculate a CRC16 (using the CCITT standard), embed it into the file, and output the file in a number of user selected formats. Code for writing a CCITT CRC is available on the web and can easily be converted to run on any microprocessor. Since SRecord is open source, you can download the source code for the CRC and adapt it’s CRC algorithm for your needs.</p>
<p>SRecord has user selectable options to handle the needs an embedded systems designer. For example, if you generate a CRC on the output of the compiler, it will probably not match the CRC you generate on the microprocessor. Most compilers generate an output file that contains only the compiled code, not the empty gaps between routines. Your embedded CRC calculation is going to CRC the entire program space. The CRC will not match unless you fill the empty space with a known value (usually 0xff). SRecord can read in the file, fill the empty spaces with 0xFF and calculate a CRC that will match your embedded code. It can skip areas where a bootloader, or system code resides.</p>
<p>The SRecord package contains three main tools. Srec_cat is main routine that performs all of the magic. Srec_cmp is used to compare files. Srec_info is used to display summary information about a file. The latest version of<a href="http://srecord.sourceforge.net/"> SRecord is available here</a>.</p>
<p>Here is an example that will read and Intel Hex file and embed a CRC. This batch file for Windows assumes you are giving the filename with no extension. .HEX is assumed.  Of course, SRecord is available for Linux as well.</p>
<p>AddCRC.bat</p>
<p><code><br />
@ECHO OFF<br />
REM   Created by Bob Weiman, www.AskTheOracle.com<br />
ECHO<br />
ECHO usage: AddCrc filename<br />
ECHO AddCrc takes a Intel Hex16 file and embeds a 16 bit CCITT CRC at location 0xF001<br />
REM<br />
srec_cat %1.hex -intel  -crop 0x0 0xF000   -fill 0xff 0x00 0xF000 --Big_Endian_CRC16 0xF001 -Output %1_crc.hex  -intel<br />
</code><br />
The package includes detailed documentation that describes all the ways you can use SRecord.</p>
<p>Here is a description of the command line parameters that I used:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="223" valign="top"><strong>Parameter</strong></td>
<td width="367" valign="top"><strong>Description</strong></td>
</tr>
<tr>
<td width="223" valign="top"><strong>%1.hex </strong></td>
<td width="367" valign="top">takes the specified filename and appends .hex to it</td>
</tr>
<tr>
<td width="223" valign="top"><strong>-intel</strong></td>
<td width="367" valign="top">read the file in Intel hex format</td>
</tr>
<tr>
<td width="223" valign="top"><strong>-crop 0&#215;0 0xF000</strong></td>
<td width="367" valign="top">include only the area from 0 to 0xF000</td>
</tr>
<tr>
<td width="223" valign="top"><strong>fill 0xff 0&#215;00   0xF000</strong></td>
<td width="367" valign="top">the unused gaps from 0 to 0xF000 with 0xFF</td>
</tr>
<tr>
<td width="223" valign="top"><strong>&#8211;Big_Endian_CRC16   0xF001</strong></td>
<td width="367" valign="top">Generate a CCITT CRC16 in big endian format and place it   at 0xF001</td>
</tr>
<tr>
<td width="223" valign="top"><strong>-Output %1_crc.hex</strong></td>
<td width="367" valign="top">Output the file as [Input filename]_crc.hex</td>
</tr>
<tr>
<td width="223" valign="top"><strong>-intel</strong></td>
<td width="367" valign="top">output the file in Intel hex format</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/srecord_utility_should_be_in_every_toolbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rules for Well Behaved Window’s Utilities</title>
		<link>http://asktheoracle.com/blog/rules_for_well_behaved_utilities/</link>
		<comments>http://asktheoracle.com/blog/rules_for_well_behaved_utilities/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:13:07 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Utility]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=161</guid>
		<description><![CDATA[There are many excellent software utilities available for Windows. There are also many other utilities that have great potential, but missed the mark because of poor program design. I am careful about the impact a program has on my computer. Sometimes programmers fail to realize that I use my computer for many tasks besides occasionally [...]]]></description>
			<content:encoded><![CDATA[<p>There are many excellent software utilities available for Windows. There are also many other utilities that have great potential, but missed the mark because of poor program design. I am careful about the impact a program has on my computer. Sometimes programmers fail to realize that I use my computer for many tasks besides occasionally running their program. I may only run their program once a month and I expect their software to maintain a small footprint on my computer.</p>
<p><span id="more-161"></span></p>
<p>I have run into programs that use a ridiculous amount of resources, install lots of useless things on my computer, and generally annoy me. In order to promote good programming, I have come up with my list of “Rules for Well Behaved Window’s Utilities”. There are some utilities (network, anitvirus, email etc.) that have to run all of the time. These utilities should clearly state their runtime requirements and demands on my system. Then I can decide if it is worth installing them. Utilities that do not follow my rules will not be recommended and are banned from my computer.</p>
<p>1)   <strong>Do not stay resident in RAM</strong>. The application should run, do its thing and then close. Most utilities do not need to remain running after I’m done with. Disk space is relatively cheap. If your program is big, make sure it loads from disk only when needed and that it leaves no footprint in RAM after it closes. I don’t need a tray icon (with its multi megabyte RAM task) so that I can run it again. I can always run it from the Start Menu.</p>
<p>2)	<strong>Be small</strong>. If the utility needs to resident in RAM, then it must be small. This means a small RAM footprint and small disk size. A dozen or so utilities in RAM can quickly eat up lots of RAM, increasing system startup time, and slowing down my computer. If the program has to be large, then follow rule #1.</p>
<p>3)	<strong>Do not permanently install device drivers.</strong> They occupy wasted RAM space. Windows allow you to install (and uninstall) device drivers dynamically as needed from the program itself. Don’t leave them loaded all of the time.  I do not want drivers sitting permanently in RAM for programs that I use very rarely. Not only does this increase swapping and system load time, these unused utilities increase the chance of driver conflict problems.</p>
<p>4)	<strong>Do not install any other programs without my permission.</strong> I have had to uninstall the Yahoo toolbar many times even though I never purposely installed it. I have seen utilities that load 4 or 5 separate tasks in memory. These tasks stay in memory after I’m done with the program. I don’t want to spend my time hunting through the installed program list or the Task Managers active list for “stealth programs”.</p>
<p>5)	<strong>For maintenance operations use the Task scheduler</strong>. Many programs (Java’s jusched.exe routine for example) install a RAM resident program that just runs once a month to check for updates. That is a waste of RAM. A more efficient method is to add an entry to the Task Scheduler (Google Voice does this) for a disk based update program that runs once a month. This allows the update program to run, check for updates, and remove itself from memory. (see Rule #1)</p>
<p>6)	<strong>If it needs a tray icon, add an exit function</strong> on the tray context menu to remove the program from memory. Even better, add a configuration option to allow me to decide if the program should even load a tray icon in the first place. Too many utilities stick around in the tray after they have been used and have no removal mechanism (other than uninstall). Do not assume that I want the program to load at startup.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/rules_for_well_behaved_utilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Run Windows on Multiple Domains and IP addresses The Easy Way</title>
		<link>http://asktheoracle.com/blog/run-windows-on-multiple-domains-and-ip-addresses-the-easy-way/</link>
		<comments>http://asktheoracle.com/blog/run-windows-on-multiple-domains-and-ip-addresses-the-easy-way/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 15:22:31 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[multiple IP addresses]]></category>
		<category><![CDATA[multiple Windows Domains]]></category>
		<category><![CDATA[Windows networks]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=149</guid>
		<description><![CDATA[If you plug your laptop into different corporate networks as I do, you might run into some common Windows network problems. I will share my solutions to these problems. Since I am an Embedded Systems consultant, I frequently take my laptop computer with me when I visit clients. I connect to my clients networks for [...]]]></description>
			<content:encoded><![CDATA[<p>If you plug your laptop into different corporate networks as I do, you might run into some common Windows network problems. I will share my solutions to these problems.  Since I am an Embedded Systems consultant, I frequently take my laptop computer with me when I visit clients.  I connect to my clients networks for internet access.  I may also need a static IP on a different subnet to talk to the development hardware project I am working on. The first problem I face is that Windows does not have a way to set up a computer with multiple IP addresses, unless you have multiple network adapters.  When I connect to the development network which is isolated from their internal network, I loose internet access.  Switching back and forth between networks is not very practical. The second issue is that Windows only allows computers to be part of a single Windows Domain (different from Windows Workgroups). Each client has a different domain to connect to and switching domains is even more problematic.</p>
<p><span id="more-149"></span></p>
<p>Windows does let you change your IP information by going through several submenus to the network setting TCP/IP properties menu. You can set up a single static IP for your computer. You can change this every time you need a different static IP.  There are some problems with this method. If you do this frequently it is time consuming and error prone. If you mistype a number, it won’t work.  When you change the settings, Windows does not remember your previous settings. Many times I have been debugging hardware or software that is connected via TCP/IP. Something is not working properly and I spend time tracking the problem down only to find that I typed something wrong (or forgot) to switch network settings. This method does not let you have multiple IP addresses for a single network adapter.</p>
<p>The second problem is that many companies require all computers to login through a Windows Domain.  If you frequently move between domains, this is a problem. Windows does not allow a computer to be part of more than one domain at a time.  Switching between domains is a cumbersome task. When you switch away from a domain, Windows erases the cached network credentials that verify your identity to the domain. If you are physically on site, this is not a problem. Then next time you login your credentials will be restored. However, if you are logging in remotely via a VPN, this may not work. I have had to drive back to my client’s site to log in after switching domains.</p>
<p>Here is my solution to first problem of operating multiple IPs on a single network connection. I keep my Windows networks settings for my office network as the default settings.  I let Windows assign my network IP dynamically. When I travel to a client, my computer will automatically get its first network address dynamically. This gives me internet access. I then use <a href="http://www.asktheoracle.com/blog/free-windows-graphical-app-combines-ipconfig-route-netstart-commands/">WinIpConfig</a> to add a temporary static IP for the development hardware I am working on. <a href="http://www.asktheoracle.com/blog/free-windows-graphical-app-combines-ipconfig-route-netstart-commands/">This wonderful utility</a>, among other uses, allows you to instantly add a second (or third or fourth) IP address to a single network adapter. In the IP Info tab, just right click on the adapter and select add IP address.</p>
<p>This does not change your current IP address, it adds another one. My computer will respond to both addresses. The IP addresses can even be on total different subnets (i.e. 192.168.1.3 and 10.12.82.83). You can easily add and delete IP addresses with one click. Best of all, since these are temporary, when I reboot my laptop and connect to my office network it works because my default settings have not changed. Whenever I reboot my computer it always maintain the same base network settings. I temporarily adjust those for various client needs with WinIpConfig.</p>
<p>Multiple network domains are a trickier problem but I have found a solution that works for me. Many companies require that you login through a Windows domain (as opposed to a Windows workgroup) for security reasons. They may also require users to run various scripts and utilities, such as the companies approved antivirus software.  These utilities may conflict with software already on your computer.</p>
<p>The best solution I have found so far is to setup a virtual Windows environment for each client. I use the Windows Virtual PC software, which is free, but there are other virtualizing programs as well.  I use this to create a virtual Windows XP PC with the necessary utilities and login into the client’s domain. When I am done, I close the virtual PC and my actual Windows setup is unchanged. Since each virtual XP can only login to a single domain, I use a separate Virtual PC for each domain. All of the utilities and scripts are kept in separate virtual machines. They are kept isolated from my real machine.</p>
<p>These solutions work for me. I hope you find these tips useful for you. If you have better solutions, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/run-windows-on-multiple-domains-and-ip-addresses-the-easy-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free Utility Disables Trackpad While Typing</title>
		<link>http://asktheoracle.com/blog/free-utility-disables-trackpad-while-typing/</link>
		<comments>http://asktheoracle.com/blog/free-utility-disables-trackpad-while-typing/#comments</comments>
		<pubDate>Wed, 19 May 2010 13:59:24 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[laptop computer]]></category>
		<category><![CDATA[trackpad]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=145</guid>
		<description><![CDATA[If you have used a laptop computer you have probably run into this problem. You are typing on your laptop and your wrist accidentally touches the trackpad. Of course, you don’t realize it until you look back at your screen and see that you have just deleted a section of your code or accidentally overwritten [...]]]></description>
			<content:encoded><![CDATA[<p>If you have used a laptop computer you have probably run into this problem. You are typing on your laptop and your wrist accidentally touches the trackpad. Of course, you don’t realize it until you look back at your screen and see that you have just deleted a section of your code or accidentally overwritten your last 20 minutes of work in your Word document.  If this has ever happened to you, then you will love this free utility, Touchfreeze.</p>
<p><span id="more-145"></span></p>
<p>Touchfreeze is a small, free utility that automatically disables the trackpad while you are typing. When you stop typing, it re-enables the trackpad. There is nothing to configure. It is tiny, requiring only 596K of RAM. Touchfreeze does its job and lets you do your job.</p>
<p><a href="http://code.google.com/p/touchfreeze/" rel=nofollow>Download TouchFreeze here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/free-utility-disables-trackpad-while-typing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using High Energy Protons, FPGAs and Firmware, to Kill Cancer</title>
		<link>http://asktheoracle.com/blog/using-high-energy-protons-fpgas-and-firmware-to-kill-cancer/</link>
		<comments>http://asktheoracle.com/blog/using-high-energy-protons-fpgas-and-firmware-to-kill-cancer/#comments</comments>
		<pubDate>Thu, 06 May 2010 21:51:24 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[cancer treatment]]></category>
		<category><![CDATA[cyclotron]]></category>
		<category><![CDATA[magnetic quench]]></category>
		<category><![CDATA[medical device]]></category>
		<category><![CDATA[proton beam radiotherapy]]></category>
		<category><![CDATA[radiation therapy]]></category>
		<category><![CDATA[superconducting magnet]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=129</guid>
		<description><![CDATA[One of the benefits of being a medical device consultant is the opportunity to work with new technologies that can make a difference in peoples lives. One of our newest projects may provide a superior treatment for many types of cancer. A traditional treatment for many cancers involves using X-ray radiation to kill the cancer [...]]]></description>
			<content:encoded><![CDATA[<p>One of the benefits of being a medical device consultant is the opportunity to work with new technologies that can make a difference in peoples lives. One of our newest projects may provide a superior treatment for many types of cancer.</p>
<p><span id="more-129"></span></p>
<p>A traditional treatment for many cancers involves using X-ray radiation to kill the cancer cells. Radiation damages the cancer cells (and hopefully stops the cancer from spreading), but also causes collateral damage to surrounding healthy tissue. If the cancer tumor is deep within the body, the radiation dosage has to be increased due to the absorption by the healthy tissue along the way. This increases the unintended damage to the healthy tissue surrounding the tumor.</p>
<p>We have been working with our client on a treatment that is superior to X-ray radiation and has fewer side effects. Proton radiation offers a number of advantages over conventional X-ray radiotherapy.  Protons can be used to deliver their energy at precise depths and locations. This minimizes the damage to surrounding tissue. Lower dosages can be used because there is no absorption by the healthy tissue. The energy can be precisely delivered to the tumor. This yields a treatment with fewer side effects for the patient.</p>
<p>The cost of the technology has limited the availability of Proton Beam Radiotherapy (PBRT).  A PBRT system requires a particle accelerator to energize the protons, which is more costly than X-ray technology. Traditional particle accelerators cost between $90 &#8211; $180 million dollars. One of our clients, Still River System, is using innovative technology to bring the cost of Proton Beam Radiotherapy way down so that is within reach of more hospitals, even community hospitals.</p>
<p>The <a href="http://www.stillriversystems.com/products.aspx?id=50">Monarch250 PBRT system</a> uses a superconducting magnet to direct its proton beam.  The coil of this magnet has zero resistance when cooled with liquid Helium. This allows large coil currents to generate very high fields in a compact magnet. The system uses a cyclotron to accelerate the protons and deliver the precise amount of energy needed to the tumors to destroy them.</p>
<p>My consulting firm, <a href="http://www.AskTheOracle.com">Oracle Engineering Inc</a>, worked with medical device manufacturer <a href="http://www.stillriversystems.com">Still River Systems</a> to design the firmware and FPGA code for the RF subsystem that controls the proton delivery system. We also worked on the design of the <a href="http://en.wikipedia.org/wiki/Superconducting_magnet#Magnet_quench">magnetic quench system</a> that protects the superconducting magnet from sudden increases in resistance of the coil that could cause heating and damage to the magnet.</p>
<p>This system should be available to hospitals in your area in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/using-high-energy-protons-fpgas-and-firmware-to-kill-cancer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why you should Avoid Checksums and Use CRCs Instead</title>
		<link>http://asktheoracle.com/blog/why-you-should-avoid-checksums-and-use-crcs-instead/</link>
		<comments>http://asktheoracle.com/blog/why-you-should-avoid-checksums-and-use-crcs-instead/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 20:13:07 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[CRC]]></category>
		<category><![CDATA[crc algorithm]]></category>
		<category><![CDATA[crc16]]></category>
		<category><![CDATA[cyclic redundancy check]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=118</guid>
		<description><![CDATA[Error detection is an important consideration for the designers of embedded systems. When the computer in your spacecraft sends a message to the main engine to shut off, it is important to make sure the message is received correctly. You want to make sure it can tell the difference between commands to, turn on, turn [...]]]></description>
			<content:encoded><![CDATA[<p><strong> </strong></p>
<p>Error detection is an important consideration for the designers of embedded systems. When the computer in your spacecraft sends a message to the main engine to shut off, it is important to make sure the message is received correctly. You want to make sure it can tell the difference between commands to, turn on, turn off, and self destruct. You might choose to use a “standard CRC algorithm” to guarantee the integrity of your data transmission. However, you might be surprised to find out how many “standard algorithms” there are. Here is some information to help you choose your implementation wisely.</p>
<p><span id="more-118"></span></p>
<p><strong>Checksums and why you should avoid them</strong></p>
<p><strong> </strong></p>
<p>Many non-critical systems use a simple checksum to detect a transmission error.  On the transmitting side, all of the bytes in the message are summed and stored in a checksum byte. The receiving end performs the same summing function and compares this value to the stored checksum. If it matches, the message is assumed to be OK.</p>
<p>A problem with this approach is that a corrupted message has a 1 in 256 chance (8 bits gives 256 possible checksums) of passing the checksum test.  For example, if a message has a checksum of 0xE3, there are many possible erroneous messages that also have a checksum of 0xE3.</p>
<p>You might think you can solve this by making the checksum wider, maybe 16 bits wide. You figure that should give you a 1 in 65,535 chance that a bad message gets through. Unfortunately, that is not the case because bytes in the message are 8 bits and don’t sufficiently affect the value of the checksum. Here is a simple example message with 2 corrupted bits to demonstrate this:</p>
<p><strong>Original Message</strong><br />
0&#215;00 0&#215;00 0&#215;00 0&#215;02  (checksum = 0&#215;02,   ENGINE_SHUTDOWN_MSG)</p>
<p><strong>Corrupted Message</strong><br />
0&#215;00 0&#215;00 0&#215;01 0&#215;01  (checksum = 0&#215;02, SELF_DESTRUCT_MSG)</p>
<p>Both the good message and the corrupted message have the same “correct” checksum. You could make the checksum 16 bits (0&#215;0002) or 100 bits wide. It would still not detect the error in the bad message because the 8 bit data does not affect the value in the upper bits of the checksum.</p>
<p><strong>That’s why we use CRCs</strong></p>
<p><strong> </strong></p>
<p>What you really want is an algorithm that creates large changes in the checksum value regardless of whether the data contains all zeroes or random data. CRCs (Cyclic Redundancy Check) are magical algorithms that provide a more robust error detection technique. These algorithms may seem compled, but it turns out that is not that hard to understand how and why CRCs work.  In his article, “<a title="Painless Guide to CRCS" href="http://www.repairfaq.org/filipg/LINK/F_crc_v31.html#CRCV_004">A Painless Guide to CRC Error Detection Algorithms</a>”, Ross Williams walks the reader through the details of CRCs. He explains about the “polynomial”, seeds, reflection and other parameters you will encounter in the various CRC implementations.</p>
<p><strong>Quick Guide to CRCs</strong></p>
<p>For those who are more interested in using CRCs than understanding how they work, here are the important points. There is no “standard CRC algorithm”, rather there are a great many standard CRC algorithms.  For example, there are many completely different, incompatible, CRC implementations that are commonly called CRC-16.</p>
<p>Here is <a title="List of CRCS implementations" href="Catalogue of parametrised CRC algorithms, http://regregex.bbcmicro.net/crc-catalogue.htm">a list of some of the standard CRC implementations</a>. Here is another <a href="http://en.wikipedia.org/wiki/Cyclic_redundancy_check">List</a>.</p>
<p>Pick one of the established standards. There is no need to reinvent theses algorithms as the source code for many of these algorithms is available on the web (here is a <a title="CRC Source Code Generator" href="http://www.tty1.net/pycrc/crc-models_en.html">C source code generator for CRCs</a> <a href="http://www.tty1.net/pycrc/crc-models_en.html"></a>). Document in your code which algorithm you use. Don’t invent your own CRC algorithm unless you are an expert in mathematics. Not all implementations are equal.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/why-you-should-avoid-checksums-and-use-crcs-instead/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Add Graphics in Doxygen PDF files</title>
		<link>http://asktheoracle.com/blog/how-to-ad-graphics-in-doxygen-pdf-files-2/</link>
		<comments>http://asktheoracle.com/blog/how-to-ad-graphics-in-doxygen-pdf-files-2/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 13:50:09 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[doxygen]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=110</guid>
		<description><![CDATA[In a previous post, &#8220;Document Your Software the Easy Way with Doxygen&#8221;, I discussed how to use Doxygen to create documentation for you software project.  This post shows you how to add graphics to the PDFs generated by Doxygen. The software can generate very nice graphics, including call graphs for functions showing which functions they [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous post,<a href="http://asktheoracle.com/blog/document-your-software-the-easy-way-with-doxygen/"> &#8220;Document Your Software the Easy Way with Doxygen&#8221;</a>, I discussed how to use Doxygen to create documentation for you software project.  This post shows you how to add graphics to the PDFs generated by Doxygen.</p>
<p><span id="more-110"></span></p>
<p>The software can generate very nice graphics, including call graphs for functions showing which functions they call and which functions they are called by. Surprisingly, these only show up in the html generated documentation, not the PDF files. I searched online and could not find out how to get the graphics into the PDF files, so I created some code to fix this problem. I am going to show you some simple script files that allow you to include the graphics in the PDF version. I wrote the script using AWK, but you can easily rewrite it the scripting language of your choice.</p>
<p><strong>Setup Steps</strong></p>
<p>1) Make sure you have all of the required packages installed (I use MikTex (<a href="http://miktex.org/">MikTex.org</a>) for a LaTex installation, and GraphViz is also required).</p>
<p>2) Follow all installation instructions for generating standard pdfs . I am assuming that you have a complete setup now that can generate html output with graphics or pdf files without graphics. (I will show you how to include the graphics later.)</p>
<p>If this is not working for you refer to the Doxygen help files and the website documentation to get it working.</p>
<p>3) For the script files, I set up my directory structure as follows:</p>
<p><code>Src\<br />
Docs\ html<br />
Docs\ latex<br />
Docs\ pdf<br />
</code><br />
If you use a different structure, adjust the paths in the script files accordingly.</p>
<p>4) My .bat file calls an awk script to modify the refman.tex file. I used the gawk from Cygwin. You can install the awk version of your choice or rewrite it in another scripting language.</p>
<p><strong>How it Works</strong></p>
<p>The refman.tex file generated by Doxygen needs to be modified. You have to add one line to it. Find the line that starts:</p>
<p><code>\makeindex</code></p>
<p>and add this line after it<br />
<code>\graphicspath{{../html/}}</code></p>
<p>You could do this manually, but then you have to do it every time you generate a pdf, since refman.tex is rewritten each time.</p>
<p>This awk script does the modification:</p>
<p><strong>makepdf.awk<br />
</strong><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><code># This is an awk program that modifies the refman.txt file created by Doxygen<br />
# to add the line needed to generate PDFs with graphics embedded.<br />
#<br />
# This file is called from makepdf.bat<br />
#<br />
{<br />
if ($1 == "\\makeindex")                          # Find this line<br />
{<br />
print $0;<br />
printf ("%s\n", "\\graphicspath{{../html/}}");  # Add this line after it<br />
}<br />
else<br />
{<br />
print $0<br />
}<br />
}</p>
<p><strong>--------------------------------------------------------------</code>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>You can easily rewrite this in another scripting language if you prefer.</p>
<p>This script is called from the following simple .bat file, which also renames the refman.pdf file generated by Doxygen to the filename of your choice.</p>
<p><strong>makepdf.bat<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
</strong></p>
<p><code>REM This bat file converts a Doxygen latex file to PDF with embedded graphics<br />
REM It calls a awk script that modifies refman.tex<br />
REM It should be run after Doxygen is run.<br />
REM<br />
REM This .bat file should be in the Src directory!<br />
REM<br />
REM usage: makepdf &lt;DocumentName&gt;<br />
where DocumentName is the you want for the PDF output file<br />
REM<br />
REM  this awk script modifies refman.tex<br />
gawk -f makepdf.awk ..\Docs\latex\refman.tex &gt;  ..\Docs\latex\temp.tex<br />
copy /y  ..\Docs\latex\temp.tex ..\Docs\latex\refman.tex<br />
del temp.txt<br />
REM<br />
REM call Make to generate the PDF file.<br />
cd ..\Docs\latex<br />
make pdf<br />
REM<br />
REM Create PDF directory if it does not exist<br />
if not exist ..\pdf mkdir ..\pdf<br />
REM<br />
REM Rename refman.pdf to &lt;YourFilenam&gt;.pdf<br />
copy refman.pdf  ..\%1.pdf<br />
del refman.pdf<br />
cd ..\..\Src</code><br />
<strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><strong>How to Run It</strong></p>
<p>1) Make sure that makepdf.awk and makepdf.bat are in the Src directory (or adjust the paths in these script files accordingly)</p>
<p>2) Run Doxygen normally (I run it from the doxywizard, however you can run it from the command line if you prefer)</p>
<p>3) When it finishes successfully, type:<br />
<strong>makepdf  MyDocumentName</strong></p>
<p>4) This will create a pdf named MyDocumentName.pdf (or whatever you called it) in your pdf directory. It will contain the same graphics as the html output. (If you want graphical call trees, make sure you select those options when you run Doxygen)</p>
<p>I don&#8217;t know why the ability to produce graphical PDFs was not included in Doxygen in the first place. Maybe it will included in a future release. However, this script will do it for you now.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/how-to-ad-graphics-in-doxygen-pdf-files-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Google Voice to Update Your ToDo List</title>
		<link>http://asktheoracle.com/blog/use-google-voice-to-updat-your-todo-list/</link>
		<comments>http://asktheoracle.com/blog/use-google-voice-to-updat-your-todo-list/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 16:03:58 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[GTD]]></category>
		<category><![CDATA[Todo List]]></category>
		<category><![CDATA[voice transcription]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=23</guid>
		<description><![CDATA[Have you ever noticed that your best ideas come when you have left the office, are driving your car, or are walking the dog?  Maybe you just remembered that you need to send flowers for your Mom&#8217;s birthday. Don&#8217;t lose those inspirational ideas and ToDo items. Just call your specially configured free Google Voice number [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever noticed that your best ideas come when you have left the office, are driving your car, or are walking the dog?  Maybe you just remembered that you need to send flowers for your Mom&#8217;s birthday. Don&#8217;t lose those inspirational ideas and ToDo items.</p>
<p><span id="more-23"></span></p>
<p>Just call your specially configured free Google Voice number on your cellphone, record your idea and it will be transcribed and sent to you as an email. You can review the original audio as well. The<a href="http://www.drewvogel.com/2010/04/05/google-voice-transcription/"> following post</a> from Drew Vogel shows you how to set it all up using Outlook. This works in Thunderbird and other email programs as well.</p>
<blockquote><p><em>Google Voice provides a great, free solution that enables me to leave Jott-like messages for myself, receive an SMS with the transcription, and receive the transcription via email. And the original audio is available if I need it.</em></p>
<p><em>All it takes is a little bit of configuration.</em></p></blockquote>
<p>via <a href="http://www.drewvogel.com/2010/04/05/google-voice-transcription/">Google Voice Transcription | DrewVogel.COM</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/use-google-voice-to-updat-your-todo-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Document Your Software the Easy Way with Doxygen</title>
		<link>http://asktheoracle.com/blog/document-your-software-the-easy-way-with-doxygen/</link>
		<comments>http://asktheoracle.com/blog/document-your-software-the-easy-way-with-doxygen/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 15:29:36 +0000</pubDate>
		<dc:creator>BobW</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Software Tools]]></category>
		<category><![CDATA[doxygen]]></category>
		<category><![CDATA[open source tool]]></category>

		<guid isPermaLink="false">http://asktheoracle.com/blog/?p=72</guid>
		<description><![CDATA[Many software developers like writing code but hate writing documentation for it. There is a free program called Doxygen that can generate the documentation for you and safe you time and heartache. Doxygen is an open source tool that can generate printed or online documentation from your source. It works for C++, C, Java, Objective-C, Python, [...]]]></description>
			<content:encoded><![CDATA[<p>Many software developers like writing code but hate writing documentation for it. There is a free program called <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> that can generate the documentation for you and safe you time and heartache.</p>
<p><span id="more-72"></span></p>
<p>Doxygen is an open source tool that can generate printed or online documentation from your source. It works for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors), Fortran, VHDL, PHP, C#.  It is supported on Windows, Linux, and Mac OS X. It can really take the drudgery out of documentation and generates a high quality documentation manual for your software. As long as you keep your function and fie headers up to date as you modify your code, you can instantly generate up to date documentation.</p>
<p>Here are some <a title="Sample Documentation" href="http://www.stack.nl/~dimitri/doxygen/results.html">links</a> to show real examples of documentation generated by Doxygen.</p>
<p>Doxygen comes with extensive documentation, but lacks a quick start manual for new users. This can make it look harder and more intimidating to use than it actually is. Once you set it up and learn a few easy rules, great documentation becomes an easy task. In this post, I want to point you to some information that will get you up and running in no time.</p>
<p><strong>Tutorials<br />
</strong><a href="http://www.jiggerjuice.net/software/doxygen.html">Doxygen Tutorial</a><br />
Here is another quick start tutorial for Visual C++ users:<br />
<strong><a title="VC example" href="http://www.codeproject.com/KB/tips/doxysetup.aspx#fivesteps">10 Minutes to Document your Code</a><br />
</strong></p>
<p><strong>Example Header comments for use with Doxygen</strong></p>
<p><strong> </strong></p>
<p>You can run Doxygen without making any changes to your source. However, to get the maximum benefit from this software, you need to include some tags to help Doxygen extract important information from your code. It is actually easy to modify your function headers to work with Doxygen.  Here is an example function header.</p>
<p>Function Header<br />
<code><br />
/****************************************************************/<br />
/** @brief<br />
*        &lt;Enter 1 line description here&gt;<br />
*<br />
*   @details<br />
*        &lt;Enter detailed description here&gt;<br />
*<br />
*   @param [in] &lt;parameter name&gt; &lt;parameter description&gt;<br />
*<br />
*   @param [out] &lt;parameter name&gt; &lt;parameter description&gt;<br />
*<br />
*   @return &lt;describe return value&gt;<br />
*<br />
****************************************************************/</code></p>
<p>The tags that begin with ‘@’  (@brief, @details, @param, etc.) are the keywords that tell Doxygen how to extract information. There are many more tags you can use, but these will get you started. If you don’t have an input (or output) variable then delete the appropriate @param line. The special tag /** tells signals the start of Doxygen tags. Replace anything within &lt; &gt; with your information, which can span multiple lines.</p>
<p>Here is an example File Header<br />
<code><br />
/****************************************************************/<br />
/** @file       &lt;Filename&gt;<br />
*    @brief      &lt;Brief description of what the file does&gt;<br />
*<br />
*    @note       (c) Copyright 2010, Oracle Engineering Inc,<br />
<a href="http://www.asktheoracle.com/">*                         www.AskTheOracle.com</a> \n<br />
*                         All Rights Reserved.<br />
*<br />
****************************************************************/</code></p>
<p>Of course, you can add fields and put your own copyright notice.  There are many other possible formats (read the docs) to set up these headers.  These are presented to give you a quick start. Put these (or you own) headers into the file and Doxygen will do the rest generating beautiful, up to date documentation.</p>
<p>If you have hints, templates or links to Doxygen tuturials, please share them in the comments section.</p>
]]></content:encoded>
			<wfw:commentRss>http://asktheoracle.com/blog/document-your-software-the-easy-way-with-doxygen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced (User agent is rejected)

Served from: asktheoracle.com @ 2012-02-08 20:50:09 -->
