<?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>Dylan Taylor&#039;s Personal Blog</title>
	<atom:link href="http://www.dylanmtaylor.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dylanmtaylor.com</link>
	<description>A technology blog with updates about my projects, as well as interesting tricks, tips, news, and tutorials</description>
	<lastBuildDate>Tue, 09 Oct 2012 03:25:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Development Temporarily On Hold</title>
		<link>http://www.dylanmtaylor.com/2012/10/09/development-temporarily-on-hold/</link>
		<comments>http://www.dylanmtaylor.com/2012/10/09/development-temporarily-on-hold/#comments</comments>
		<pubDate>Tue, 09 Oct 2012 03:25:17 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dylanmtaylor.com/?p=1129</guid>
		<description><![CDATA[Unfortunately I&#8217;m a busy college student, and I have many things to worry about, such as projects, exams, and studying. I prioritize this more than my open source development and work on new projects. Because of my heavy workload lately, I&#8217;ve put all of my hobbyist (read: unpaid and time consuming) development on hold. However, [...]]]></description>
				<content:encoded><![CDATA[<p>Unfortunately I&#8217;m a busy college student, and I have many things to worry about, such as projects, exams, and studying. I prioritize this more than my open source development and work on new projects. Because of my heavy workload lately, I&#8217;ve put all of my hobbyist (read: unpaid and time consuming) development on hold. However, I did release the full source code of LibreScribe, and it&#8217;s released under the GPL so all of my work is not lost. Anyone can pick it up, fork it, and start working on it. I hope to work on this project again someday, perhaps over Thanksgiving break, but until then, I have to focus primarily on my studies and my financial and academic obligations. Also, I apologize for not updating this blog for quite some time. I assure you, I am fine, I&#8217;ve just been very busy, with a job over the summer, and being at college now, I have a lot on my plate to take care of. Thank you for your understanding.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2012/10/09/development-temporarily-on-hold/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2012/10/09/development-temporarily-on-hold/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fixing Autokey (GTK) on Ubuntu 12.04</title>
		<link>http://www.dylanmtaylor.com/2012/03/31/fixing-autokey-gtk-on-ubuntu-12-04/</link>
		<comments>http://www.dylanmtaylor.com/2012/03/31/fixing-autokey-gtk-on-ubuntu-12-04/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 05:16:07 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1128</guid>
		<description><![CDATA[Autokey is a wonderful scripting tool for Linux. Unfortunately, it doesn&#8217;t work out of the box in Ubuntu 12.04. The reason why is because Autokey isn&#8217;t on the Unity panel&#8217;s system tray whitelist. I submitted a bug report on Launchpad, but for now, if you want to get Autokey working without breaking the Unity panel [...]]]></description>
				<content:encoded><![CDATA[<p>Autokey is a wonderful scripting tool for <a class="zem_slink" title="Linux" href="http://en.wikipedia.org/wiki/Linux" rel="wikipedia" target="_blank">Linux</a>. Unfortunately, it doesn&#8217;t work out of the box in <a class="zem_slink" title="List of Ubuntu releases" href="http://www.ubuntu.com/" rel="homepage" target="_blank">Ubuntu 12.04</a>. The reason why is because Autokey isn&#8217;t on the Unity panel&#8217;s system tray whitelist. I submitted <a href="https://bugs.launchpad.net/ubuntu/+source/autokey/+bug/970581">a bug report on Launchpad</a>, but for now, if you want to get Autokey working without breaking the Unity panel for any other applications, it&#8217;s as simple as running the following command in the terminal:</p>
<pre>if grep -q 'Autokey' &lt;(echo `gsettings get com.canonical.Unity.Panel systray-whitelist`); then echo "'Autokey' exists in Unity panel whitelist. Nothing to do here."; else echo "Adding 'Autokey' to Unity panel whitelist." &amp;&amp; gsettings set com.canonical.Unity.Panel systray-whitelist "`echo \`gsettings get com.canonical.Unity.Panel systray-whitelist | tr -d ]\`,\'Autokey\']`"; fi</pre>
<p>This will check your current whitelist to see if Autokey is present, and if it isn&#8217;t intelligently append it to the whitelist without messing up your current whitelist entries. If it&#8217;s already there, it won&#8217;t add a duplicate entry. This one-liner can be easily modified to add any value you want to Unity&#8217;s system tray whitelist, in order to fix the same problems with other applications. Note that you may have to log out and log back in before the changes take effect. Enjoy! <img src='http://www.dylanmtaylor.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/pixy.gif?x-id=24cf85f1-d93f-40e5-a099-705c19573173" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2012/03/31/fixing-autokey-gtk-on-ubuntu-12-04/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2012/03/31/fixing-autokey-gtk-on-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ordered a Raspberry Pi</title>
		<link>http://www.dylanmtaylor.com/2012/03/13/ordered-a-raspberry-pi/</link>
		<comments>http://www.dylanmtaylor.com/2012/03/13/ordered-a-raspberry-pi/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 04:35:30 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Raspberry Pi]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1110</guid>
		<description><![CDATA[If you haven&#8217;t heard of it, Raspberry Pi is a very interesting project to create an incredibly cheap but powerful computer. It was released on February 29th, and on that same day, I purchased a Model B ($35) through element14&#8242;s site. Due to overwhelming demand, I probably won&#8217;t actually get it for a while, but [...]]]></description>
				<content:encoded><![CDATA[<p>If you haven&#8217;t heard of it, <a class="zem_slink" title="Raspberry Pi" href="http://www.raspberrypi.org" rel="homepage" target="_blank">Raspberry Pi</a> is a very interesting project to create an incredibly cheap but powerful computer. It was released on February 29th, and on that same day, I purchased a Model B ($35) through element14&#8242;s site. Due to overwhelming demand, I probably won&#8217;t actually get it for a while, but when I do, I&#8217;ll post an update on my blog about it. Because of the unbelievable value of the device, and not-too-shabby specifications, there are many potential applications for it. I plan on playing with it and potentially coding some really neat stuff in my free time. I&#8217;ll post further updates about the Raspberry Pi on my blog.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=7aff9845-a326-449e-b287-6f499ae31972" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2012/03/13/ordered-a-raspberry-pi/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2012/03/13/ordered-a-raspberry-pi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to fix com.android.providers.media crash on a rooted Android device</title>
		<link>http://www.dylanmtaylor.com/2012/01/15/how-to-fix-com-android-providers-media-crash-on-a-rooted-android-device/</link>
		<comments>http://www.dylanmtaylor.com/2012/01/15/how-to-fix-com-android-providers-media-crash-on-a-rooted-android-device/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 20:47:46 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1109</guid>
		<description><![CDATA[I noticed that my rooted Android phone, a Samsung Epic 4G was crashing when I opened my Camera application, saying that com.android.providers.media was force closing. It took me about half an hour, but I figured out how to fix the problem using adb. The problem is that it was having trouble writing to and reading [...]]]></description>
				<content:encoded><![CDATA[<p>I noticed that my rooted Android phone, a Samsung Epic 4G was crashing when I opened my Camera application, saying that com.android.providers.media was force closing. It took me about half an hour, but I figured out how to fix the problem using adb. The problem is that it was having trouble writing to and reading from the media database. Deleting the media databases solves the problem without doing a complete factory reset. To do this, run adb shell, and then type su to gain root access. Now type in &#8220;rm /data/data/com.android.providers.media/databases/*&#8221; and hit enter. This will fix the problem.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2012/01/15/how-to-fix-com-android-providers-media-crash-on-a-rooted-android-device/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2012/01/15/how-to-fix-com-android-providers-media-crash-on-a-rooted-android-device/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A List of Words Containing &#8220;Rent&#8221;</title>
		<link>http://www.dylanmtaylor.com/2011/11/29/a-list-of-words-containing-rent/</link>
		<comments>http://www.dylanmtaylor.com/2011/11/29/a-list-of-words-containing-rent/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 15:43:01 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1101</guid>
		<description><![CDATA[So Barnes &#038; Noble College is currently doing a word game called &#8220;Words With RENT&#8221; where you can submit a word with &#8220;rent&#8221; in it in order to have a chance at winning $100. Here&#8217;s a list of all of them (generated using cat /usr/share/dict/words &#124; grep -i &#8220;rent&#8221; in Linux): abhorrent, adherent, adherent&#8217;s, adherents, [...]]]></description>
				<content:encoded><![CDATA[<p>So Barnes &#038; Noble College is currently doing a word game called &#8220;Words With RENT&#8221; where you can submit a word with &#8220;rent&#8221; in it in order to have a chance at winning $100. Here&#8217;s a list of all of them (generated using cat /usr/share/dict/words | grep -i &#8220;rent&#8221; in Linux):<br />
abhorrent, adherent, adherent&#8217;s, adherents, apparent, apparently, apprentice, apprentice&#8217;s, apprenticed, apprentices, apprenticeship, apprenticeship&#8217;s, apprenticeships, apprenticing, belligerent, belligerently, belligerents, coherent, coherently, concurrent, concurrently, current, currently, currents, deferential, deferentially, deterrent, deterrent&#8217;s, deterrents, different, differential, differentials, differentiate, differentiated, differentiates, differentiating, differentiation, differentiation&#8217;s, differently, godparent, godparent&#8217;s, godparents, grandparent, grandparent&#8217;s, grandparents, incoherent, incoherently, indifferent, indifferently, inferential, inherent, inherently, irreverent, irreverently, overenthusiastic, parent, parent&#8217;s, parentage, parentage&#8217;s, parental, parented, parentheses, parenthesis, parenthesis&#8217;s, parenthesize, parenthesized, parenthesizes, parenthesizing, parenthetic, parenthetical, parenthetically, parenthood, parenthood&#8217;s, parenting, parents, preferential, preferentially, recurrent, referent, referent&#8217;s, referential, referential&#8217;s, rent, rent&#8217;s, rental, rental&#8217;s, rentals, rented, renter, renter&#8217;s, renters, renting, rents, reverent, reverential, reverently, stepparent, stepparent&#8217;s, stepparents, torrent, torrent&#8217;s, torrential, torrents, transparent, transparently, undercurrent, undercurrent&#8217;s, undercurrents</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/11/29/a-list-of-words-containing-rent/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/11/29/a-list-of-words-containing-rent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Help Fight Internet Censorship!</title>
		<link>http://www.dylanmtaylor.com/2011/11/17/help-fight-internet-censorship/</link>
		<comments>http://www.dylanmtaylor.com/2011/11/17/help-fight-internet-censorship/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 06:35:03 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1098</guid>
		<description><![CDATA[&#160; &#160; If you didn&#8217;t notice yet, I modified the theme of my site, in particular header.php, in order to show a black censorship bar over my site&#8217;s heading. Why? There is a law being passed that aims to completely censor the internet in the name of stopping copyright infringement. The impact of such a [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://dylanmtaylor.com/2011/11/17/help-fight-internet-censorship/screenshot-17-2/" rel="attachment wp-att-1099"><img class="alignleft size-full wp-image-1099" title="Screenshot-17" src="http://dylanmtaylor.com/wp-content/uploads/2011/11/Screenshot-17.png" alt="" width="610" height="88" /></a>&nbsp;</p>
<p>&nbsp;</p>
<p>If you didn&#8217;t notice yet, I modified the theme of my site, in particular header.php, in order to show a black censorship bar over my site&#8217;s heading. Why? There is a law being passed that aims to completely censor the internet in the name of stopping copyright infringement. The impact of such a bill is much more far-reaching than just copyright infringement. This could completely change the way that we use and experience the internet. I encourage everyone reading this to visit <a href="http://americancensorship.org/">http://americancensorship.org</a> and show their support. Let&#8217;s stand up together to fight for a free internet where information isn&#8217;t restricted! Just look at what it&#8217;s like in China, the level of censorship on the internet through the &#8220;great firewall of China&#8221; is astounding!</p>
<p><iframe src="http://player.vimeo.com/video/31100268?title=0&#038;byline=0&#038;portrait=0" width="640" height="360" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/11/17/help-fight-internet-censorship/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/11/17/help-fight-internet-censorship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sorry For The Lack of Updates</title>
		<link>http://www.dylanmtaylor.com/2011/11/01/sorry-for-the-lack-of-updates/</link>
		<comments>http://www.dylanmtaylor.com/2011/11/01/sorry-for-the-lack-of-updates/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 00:01:14 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1094</guid>
		<description><![CDATA[I&#8217;ve been fairly busy lately (more than usual), and I realize I haven&#8217;t updated my site in quite some time now. There have been several significant changes with LibreScribe. The full details are available in the commit log on github, but most importantly, LibreScribe now functions to the point where pages can actually be pulled [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been fairly busy lately (more than usual), and I realize I haven&#8217;t updated my site in quite some time now. There have been several significant changes with LibreScribe. The full details are available in the commit log on github, but most importantly, LibreScribe now functions to the point where pages can actually be pulled from the device, rendered, and displayed in the native image viewer on the system. I&#8217;ll try to post some more updates soon and get more work done on LibreScribe in the near future.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/11/01/sorry-for-the-lack-of-updates/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/11/01/sorry-for-the-lack-of-updates/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Significant LibreScribe Progress Made</title>
		<link>http://www.dylanmtaylor.com/2011/09/02/significant-librescribe-progress-made/</link>
		<comments>http://www.dylanmtaylor.com/2011/09/02/significant-librescribe-progress-made/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 22:12:10 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[C++ Applications]]></category>
		<category><![CDATA[LibreScribe]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[My Applications]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1095</guid>
		<description><![CDATA[As you may have noticed, I took a break from working on LibreScribe for a while, and the project looked as though it was abandoned. Well, it isn&#8217;t, and I&#8217;ve got tons of good news! Since the last time I wrote an update about LibreScribe, in late May, I made several incredibly significant changes. Some [...]]]></description>
				<content:encoded><![CDATA[<p>As you may have noticed, I took a break from working on <a href="https://github.com/aliendude5300/LibreScribe">LibreScribe</a> for a while, and the project looked as though it was abandoned. Well, it isn&#8217;t, and I&#8217;ve got tons of good news! Since <a href="http://dylanmtaylor.com/2011/05/21/librescribe-progress-update/">the last time I wrote an update about LibreScribe</a>, in late May, I made several incredibly significant changes. Some of these may not seem that exciting, but they are absolutely crucial in order to further develop the program. Some of these new features (such as retrieving and changing the name of the device) didn&#8217;t exist in libSmartpen <em>at all</em>, so implementing them required me to capture packets sent over USB and do a bit of <a class="zem_slink" title="Reverse engineering" href="http://en.wikipedia.org/wiki/Reverse_engineering" rel="wikipedia">reverse engineering</a>. At first, I used the trial version of <a href="http://www.sysnucleus.com/index.html">USBTrace</a>, but I quickly realized that it wasn&#8217;t the tool for the job when I got notifications that I used more than my 256K data limit just by opening <a class="zem_slink" title="Livescribe " href="http://www.livescribe.com" rel="homepage">LiveScribe</a> Desktop. To make it even less appealing, it costs <em>$195 USD</em> <em>for a single license</em>! That&#8217;s ridiculous! So of course, I did a bit of searching, and I found <a href="http://code.google.com/p/busdog/">busdog</a>, which does the same job (although using unsigned filter drivers that require modifying windows settings and rebooting several times) for <em>free</em>! Although getting it setup was significantly more frustrating than getting USBTrace working, it was well worth not paying $195, and it does everything I need it to, albeit without as nice of an interface. Anyways, here&#8217;s a list of significant changes I made:</p>
<ul>
<li>LibreScribe no longer crashes when retrieving the list of applications installed on the device. This was incredibly frustrating when I was trying to develop it. It also filters out the LiveScribe Connect and System files, so that they are not listed if they are present on the device.</li>
<li>Instead of displaying a hard-coded list of notebooks, LibreScribe now retrieves the names of all of the notebooks actually in use on the device.</li>
<li>When a device is not present on the system, or LibreScribe can&#8217;t find it, the page tree now shows a &#8220;No Smartpen Detected&#8221; item, along with an brand new icon that indicates that no device is connected instead of the regular pen icon.</li>
<li>I added <a class="zem_slink" title="Context menu" href="http://en.wikipedia.org/wiki/Context_menu" rel="wikipedia">context menu</a> <a class="zem_slink" title="Event (computing)" href="http://en.wikipedia.org/wiki/Event_%28computing%29" rel="wikipedia">event handlers</a> to the page tree, so now when you right click or press the menu button, LibreScribe can display a menu of options relevant to the item you clicked. More work on this still needs to be done, but if you click the root element (the smartpen itself, or the placeholder when one isn&#8217;t connected), you will now see a new menu allowing you to rename the device, refresh the connection, or display information about the device.</li>
<li>When the device is unplugged or plugged in, the page tree and the applications/audio lists will now automatically refresh themselves.</li>
<li>LibreScribe now retrieves the name of the smartpen from the device, rather than defaulting to &#8220;My LiveScribe Smartpen&#8221;. It can also set the name of the pen, but this feature is still a little bit buggy (it won&#8217;t brick your device, so it&#8217;s safe to test). Interesting discovery: In the LiveScribe desktop software, you can set the name of the pen to anything up to 50 characters. This does not mean that the device doesn&#8217;t allow more than that, it&#8217;s just a &#8216;soft&#8217; limit in the LiveScribe desktop software. There probably is an <em>actual</em> limit, but I was able to set the device name to almost a paragraph of text, including every symbol you can type on a standard <a class="zem_slink" title="Keyboard layout" href="http://en.wikipedia.org/wiki/Keyboard_layout" rel="wikipedia">US keyboard</a>, and retrieving it from the pen worked perfectly. The pen stored the entire thing, and returned it when I checked the name, although it did <em>not</em> display the entire string when I turned the device on, just the first part of it. The string of text I tested was &#8220;<em>~`!@#$%^&amp;*()-_+={}[]:;&#8221;&#8216;&lt;&gt;?/,.\ Testing the maximum name length for a LiveScribe Smartpen&#8230; I wonder if I could fit a paragraph in here&#8230;? You have got to be kidding me&#8230; I typed this much and it STILL works? That&#8217;s incredible. There&#8217;s virtually no limit to how long the smartpen&#8217;s name is. I can&#8217;t believe I can set and receive values this long! I&#8217;m speechless&#8230;</em>&#8220;. Needless to say, you can store almost anything in the name of the Smartpen. I wonder how the LiveScribe desktop software would react if it tried to retrieve this string.</li>
<li>I added a dialog box to rename the device, as well as another dialog box to confirm the new name.</li>
<li>LiveScribe no longer crashes when removing or connecting a smartpen while the program is running.</li>
<li>I merged in the inline functions <a href="https://github.com/luispedro/LibreScribe/commit/a11739481261eb40bca07967ce5ad04ae5664e0c">written by Luis Pedro Coelho on his fork of LibreScribe</a>, which are a better implementation of device type checking than I had</li>
<li><em>Tons</em> of new debugging output was added. You can see this output on the console. This makes figuring out what went wrong in a crash <em>so</em> much easier.</li>
</ul>
<p>Remember, LibreScribe is still alpha quality and should not be used in a production environment. If you have any issues or suggestions, feel free to file a <a href="https://github.com/aliendude5300/LibreScribe/issues/new">bug report</a>. Or, if you&#8217;re skilled enough, I&#8217;d appreciate it if you fixed the bug yourself, and submitted a patch. Ah, the benefits of open source coding! This is only just the beginning. Expect <em>tons</em> of new enhancements and bug fixes over the next several months.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/pixy.gif?x-id=5073270c-b014-4354-9d04-19e8a53ec461" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/09/02/significant-librescribe-progress-made/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/09/02/significant-librescribe-progress-made/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Justice Department Files Lawsuit to Block Takeover of T-Mobile</title>
		<link>http://www.dylanmtaylor.com/2011/09/01/department-of-justice-files-lawsuit-to-block-att-takeover-of-t-mobile/</link>
		<comments>http://www.dylanmtaylor.com/2011/09/01/department-of-justice-files-lawsuit-to-block-att-takeover-of-t-mobile/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 21:01:37 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[AT&T]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Sprint]]></category>
		<category><![CDATA[T-Mobile]]></category>
		<category><![CDATA[Verizon Wireless]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1093</guid>
		<description><![CDATA[In case you didn&#8217;t hear, AT&#38;T is in the process of attempting to acquire T-Mobile for $39 billion. Not only would this make AT&#38;T the nation&#8217;s largest wireless carrier (controlling 43.3% of the wireless market), but it would also mean that more than 75% of the nation&#8217;s wireless customers would be on AT&#38;T and Verizon [...]]]></description>
				<content:encoded><![CDATA[<p>In case you didn&#8217;t hear, <a class="zem_slink" title="AT&amp;T" href="http://www.att.com" rel="homepage">AT&amp;T</a> is in the process of attempting to acquire <a href="http://www.t-mobile.com/">T-Mobile</a> for $39 billion. Not only would this make AT&amp;T the nation&#8217;s largest wireless carrier (<a href="http://www.notakeover.org/sites/all/themes/sprint/images/slideshow/slides/reduces-competition.pdf">controlling 43.3% of the wireless market</a>), but it would also mean that <em>more than</em><em> 75%</em> of the nation&#8217;s wireless customers would be on AT&amp;T and <a class="zem_slink" title="Verizon Wireless" href="http://www.verizonwireless.com" rel="homepage">Verizon Wireless</a>. What this means is that the third largest carrier, <a class="zem_slink" title="Sprint Nextel" href="http://sprint.com/" rel="homepage">Sprint</a>, which I&#8217;m a customer of, would have less than a fourth of the nation&#8217;s wireless customers. This deal is extremely anti-competitive, and anti-consumer. With less carriers, and less choice, this would allow cellular providers to increase prices, decrease choices in phones, and reduce innovation. Just yesterday, the <a class="zem_slink" title="United States Department of Justice" href="http://www.justice.gov" rel="homepage">Justice Department</a> <a href="http://www.justice.gov/opa/pr/2011/August/11-at-1118.html">filed a lawsuit to block the proposed deal.</a> I strongly believe that there would be no benefits to consumers from this acquisition. All AT&amp;T is doing is eliminating a major competitor. If you&#8217;re on T-Mobile, you probably realize that you have access to some of the cheapest prices available in the wireless industry, as well as decent coverage. If AT&amp;T acquires T-Mobile, it&#8217;s fairly obvious that they will change the pricing scheme to match that of their own, allowing them to force consumers into paying a lot more for their wireless service. Service charges are <em>already</em> high as it is, with more carriers charging more money for lesser or equal amounts of features and unlimited data service disappearing in favor of a tiered pricing model, we simply can&#8217;t afford to lose a huge competitor to the major cellular carriers. I believe that everyone who owns a cellular phone in America will be, in some way, hurt by this deal. As consumers, we simply cannot allow AT&amp;T to acquire T-Mobile. The only possible outcome is less competition, less choice in wireless devices, higher prices, and less jobs in the wireless industry.</p>
<p>via <a href="http://www.notakeover.org/">No Takeover Project</a></p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/pixy.gif?x-id=161977da-65de-44f3-9808-29f90cee8445" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/09/01/department-of-justice-files-lawsuit-to-block-att-takeover-of-t-mobile/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/09/01/department-of-justice-files-lawsuit-to-block-att-takeover-of-t-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To: Invite ALL of Your Facebook Friends to Google Plus At Once</title>
		<link>http://www.dylanmtaylor.com/2011/07/30/how-to-invite-all-of-your-facebook-friends-to-google-plus-at-once/</link>
		<comments>http://www.dylanmtaylor.com/2011/07/30/how-to-invite-all-of-your-facebook-friends-to-google-plus-at-once/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 00:30:48 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Plus]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1089</guid>
		<description><![CDATA[Using a neat little trick, I managed to send everyone on my Facebook friend list a Google+ invite. In this post, I&#8217;ll show you how to do that. It&#8217;s actually quite simple. If you don&#8217;t have a GMail account, this will still work for small amounts of contacts, but you need to use a GMail account to [...]]]></description>
				<content:encoded><![CDATA[<div class="zemanta-img" style="margin: 1em; display: block;">
<div class="wp-caption alignright" style="width: 260px"><a href="http://www.crunchbase.com/company/google"><img title="Image representing Google as depicted in Crunc..." src="http://dylanmtaylor.com/wp-content/uploads/2011/07/29578v7-max-450x45011.jpg" alt="Image representing Google as depicted in Crunc..." width="250" height="99" /></a><p class="wp-caption-text">Image via CrunchBase</p></div>
</div>
<p>Using a neat little trick, I managed to send everyone on my <a class="zem_slink" title="Facebook" href="http://facebook.com" rel="homepage">Facebook</a> friend list a <a href="http://dylanmtaylor.com/+">Google+</a> invite. In this post, I&#8217;ll show you how to do that. It&#8217;s actually quite simple. If you don&#8217;t have a <a title="Gmail" href="http://gmail.com/" rel="homepage">GMail</a> account, this will still work for small amounts of contacts, but you need to use a <a class="zem_slink" title="Gmail" href="http://gmail.com" rel="homepage">GMail</a> account to process and invite all of your contacts at once.  First, if you don&#8217;t already have a <a class="zem_slink" title="Yahoo!" href="http://www.yahoo.com" rel="homepage">Yahoo</a> account, sign up for one. Otherwise, sign in and go to <a href="http://mail.yahoo.com">Yahoo Mail</a>. The reason this works is because Yahoo and Facebook have some kind of partnership. Once logged in, go to the &#8220;Contacts&#8221; tab. Click &#8220;Import Contacts&#8221;, and choose the &#8220;Facebook&#8221; option. Allow Yahoo access to your Facebook contacts. On my account, it only imported 100 contacts the first time. After the second try, I had all 257 of my Facebook contacts imported. Now that you have your contacts imported, go back to the &#8220;Contacts&#8221; tab. Click &#8220;Actions&#8221;, and choose &#8220;Export All&#8230;&#8221;. When asked, export as a &#8220;<a class="zem_slink" title="Yahoo!" href="http://www.yahoo.com" rel="homepage">Yahoo!</a> <a class="zem_slink" title="Comma-separated values" href="http://en.wikipedia.org/wiki/Comma-separated_values" rel="wikipedia">CSV</a>&#8221; file, and remember where you saved that. You will need it later. Now go to <a href="http://google.com/contacts">Google Contacts</a>. Create a new group called &#8220;Facebook&#8221;. Once you have a &#8220;Facebook&#8221; group, click the &#8220;Import&#8221; link on the upper right of the page. Select the Yahoo .csv file, and make sure to choose to import it into the newly created &#8220;Facebook&#8221; group. Now that you have all of your contacts imported, if you don&#8217;t have GMail, select all of your contacts and choose &#8220;Email&#8221;, otherwise go to GMail and login to that. In GMail, click &#8220;Contacts&#8221; and then click the &#8220;Facebook&#8221; group. Click the checkbox above the list of contacts to select them all at once. Now click the &#8220;Email&#8221; button. You will now see all of your contacts in the &#8220;To&#8221; field of GMail or your email client. Copy the entire list, and paste it into the Google+ invite form. Click invite. Congratulations, you just invited <em>all</em> of your Facebook friends to join Google+.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=9c4e9c3d-aa19-4880-90c8-f3d410f9fc78" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/07/30/how-to-invite-all-of-your-facebook-friends-to-google-plus-at-once/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/07/30/how-to-invite-all-of-your-facebook-friends-to-google-plus-at-once/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I Finally Snagged a Google Plus Invitation!</title>
		<link>http://www.dylanmtaylor.com/2011/07/11/i-finally-snagged-a-google-plus-invitation/</link>
		<comments>http://www.dylanmtaylor.com/2011/07/11/i-finally-snagged-a-google-plus-invitation/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 03:15:19 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Plus]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1083</guid>
		<description><![CDATA[Unless you&#8217;ve been living under a rock, you&#8217;ve probably heard about Google&#8217;s new invitation only (for now) social network, Google+. If  not, I suggest you check out the site and take the tour. Google+ will likely forever change the way we interact with friends online, by grouping friends into social &#8220;circles&#8221; and sharing only certain [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://dylanmtaylor.com/wp-content/uploads/2011/07/Screenshot-25.png"><img class="alignleft size-full wp-image-1080" title="Google Plus Invitation Screenshot" src="http://dylanmtaylor.com/wp-content/uploads/2011/07/Screenshot-25.png" alt="" width="269" height="151" /></a>Unless you&#8217;ve been living under a rock, you&#8217;ve probably heard about <a class="zem_slink" title="Google" href="http://google.com" rel="homepage">Google&#8217;s</a> new invitation only (for now) <a class="zem_slink" title="Social network" href="http://en.wikipedia.org/wiki/Social_network" rel="wikipedia">social network</a>, Google+. If  not, I suggest you <a href="https://plus.google.com/">check out the site</a> and<a href="http://www.google.com/intl/en/+/demo/"> take the tour</a>. Google+ will likely forever change the way we interact with friends online, by grouping friends into social &#8220;circles&#8221; and sharing only certain material with certain groups of friends. In addition to that, another neat feature is &#8220;hangouts&#8221;, where you can have a group video chat with up to 10 different people. Regardless, today I managed to snag an invitation to the service by posting my email address on <a href="http://www.facebook.com/beatweek">Beatweek&#8217;s Facebook wall</a>. Less than 5 minutes after posting my email, I had an invitation sitting in my inbox from <a href="https://plus.google.com/u/0/113305033825535522724/posts">Bill Palmer</a>. Shortly after that, I even got a <em>second</em> invitation to the service from the same person. Unfortunately, because Google wants to limit how many people are on their service, even with an invitation, I couldn&#8217;t sign up for the service yet, but I&#8217;ll definitely be checking the Google Plus website frequently to see if I can get in. I&#8217;m incredibly excited to try out this new service from Google, and I have incredibly high expectations from it. Anyways, <em>if</em> I do manage to get in, I&#8217;ll be happy to invite anyone who requests an invitation from me. I&#8217;ll update this post (or post another post) once I get into Google+.</p>
<p><strong>UPDATE:</strong> I got <a href="http://dylanmtaylor.com/wp-content/uploads/2011/07/Screenshot-76.png">a <em>second</em> invitation</a> by <a href="https://plus.google.com/u/0/117220625678034723010/posts">Richi Jennings</a> of <a href="http://blogs.computerworld.com/18590/get_a_google_invite_here_join_plus_project_circle?ue">Computerworld</a>, who I emailed before posting on Beatweek&#8217;s wall, asking for an invite. Thanks Richi! However, I still didn&#8217;t manage to get into Google+, unfortunately&#8230; <img src='http://www.dylanmtaylor.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><strong>UPDATE 2:</strong> I finally managed to sign up for Google+! I&#8217;ll try to invite everyone who asked me to send them an invitation, but I can&#8217;t guarantee you&#8217;ll be able to sign up.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/pixy.gif?x-id=bd424e1e-159b-4957-bb9a-22f521076a44" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/07/11/i-finally-snagged-a-google-plus-invitation/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/07/11/i-finally-snagged-a-google-plus-invitation/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>My Blog Is Now Running WordPress 3.2</title>
		<link>http://www.dylanmtaylor.com/2011/07/06/my-blog-is-now-running-wordpress-3-2/</link>
		<comments>http://www.dylanmtaylor.com/2011/07/06/my-blog-is-now-running-wordpress-3-2/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 11:52:55 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Updates]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1079</guid>
		<description><![CDATA[Yesterday I upgraded my blog to the new major revision of the WordPress blogging platform, version 3.2, as soon as it was publicly released. In only a day, the new version was downloaded over 330,000 times. The new version of WordPress is supposedly much lighter and faster than the previous iteration, as a lot of [...]]]></description>
				<content:encoded><![CDATA[<div class="zemanta-img" style="margin: 1em; display: block;">
<div class="wp-caption alignright" style="width: 310px"><a href="http://commons.wikipedia.org/wiki/File:Wordpress-logo.png"><img title="WordPress Logo" src="http://dylanmtaylor.com/wp-content/uploads/2011/07/300px-Wordpress-logo2.png" alt="WordPress Logo" width="300" height="68" /></a><p class="wp-caption-text">Image via Wikipedia</p></div>
</div>
<p>Yesterday I upgraded my blog to the new major revision of the <a class="zem_slink" title="WordPress" href="http://wordpress.org" rel="homepage">WordPress</a> blogging platform, version 3.2, as soon as it was publicly released. In only a day, the new version was downloaded over 330,000 times. The new version of WordPress is supposedly<a href="http://wpcandy.com/presents/everything-we-know-about-wordpress-3-2"> much lighter and faster</a> than the previous iteration, as a lot of bloat has been removed and a lot of the code was optimized to be more efficient. The new version features a new admin panel and an HTML5 compatible default theme. Overall, I am pleased with the new version of WordPress, and I&#8217;m looking forward to even more positive changes to the platform in the future.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=78f1e399-61c0-4926-9cfb-5a9090646457" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/07/06/my-blog-is-now-running-wordpress-3-2/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/07/06/my-blog-is-now-running-wordpress-3-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ROME&#8217;s &#8220;3 Dreams of Black&#8221; WebGL Demo Is Awesome!</title>
		<link>http://www.dylanmtaylor.com/2011/06/22/romes-3-dreams-of-black-webgl-demo-is-awesome/</link>
		<comments>http://www.dylanmtaylor.com/2011/06/22/romes-3-dreams-of-black-webgl-demo-is-awesome/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 23:58:35 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tech Demos]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1075</guid>
		<description><![CDATA[If you haven&#8217;t heard of ROME&#8217;s 3 Dreams of Black WebGL demo, you should seriously check this out. It&#8217;s an interactive music-video like experience that is rendered in the web browser in real-time using JavaScript and WebGL. Because it&#8217;s hardware accelerated, it allows for insanely complex, dynamic, and interactive graphics to be rendered right within your [...]]]></description>
				<content:encoded><![CDATA[<p>If you haven&#8217;t heard of ROME&#8217;s <a title="3 Dreams of Black Demo" href="http://www.ro.me/">3 Dreams of Black WebGL demo</a>, you should seriously check this out. It&#8217;s an interactive music-video like experience that is rendered in the <a class="zem_slink" title="Web browser" href="http://en.wikipedia.org/wiki/Web_browser" rel="wikipedia">web browser</a> in real-time using <a class="zem_slink" title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" rel="wikipedia">JavaScript</a> and WebGL. Because it&#8217;s <a class="zem_slink" title="Hardware acceleration" href="http://en.wikipedia.org/wiki/Hardware_acceleration" rel="wikipedia">hardware accelerated</a>, it allows for insanely complex, dynamic, and interactive graphics to be rendered right within your web browser. Of course, you will need to be using a modern web browser for this to work, such as the latest version of <a class="zem_slink" title="Google Chrome" href="http://www.google.com/chrome" rel="homepage">Google Chrome</a>, <a class="zem_slink" title="Firefox" href="http://www.mozilla.com/firefox/" rel="homepage">Mozilla Firefox</a> (5 was just recently released), <a class="zem_slink" title="Opera Software" href="http://www.opera.com" rel="homepage">Opera</a>, or <a class="zem_slink" title="Safari" href="http://www.apple.com/safari/" rel="homepage">Safari</a>. Unfortunately, Internet Explorer does <em>not</em> support WebGL, which is required to view this demo. Also, this is an open source project, so all of the source code is <a href="http://code.google.com/p/3-dreams-of-black/">available on Google Code</a>. 3 Dreams of Black is more than just a music video. It offers a look at the future of the web, where open web technologies can be used to create interactive experiences never before thought possible, all through a web browser. If you have a modern graphics card that supports a reasonably modern version of the <a class="zem_slink" title="OpenGL" href="http://www.opengl.org/" rel="homepage">OpenGL</a> <a class="zem_slink" title="Application programming interface" href="http://en.wikipedia.org/wiki/Application_programming_interface" rel="wikipedia">API</a>, I highly recommend playing with this demo. For the rest of you, there is a <a href="http://www.youtube.com/watch?v=ReH7zzj5GPc">video on YouTube</a> that shows off the demo.</p>
<p><iframe src="http://www.youtube.com/embed/ReH7zzj5GPc?hd=1" frameborder="0" width="560" height="349"></iframe></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/06/22/romes-3-dreams-of-black-webgl-demo-is-awesome/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/06/22/romes-3-dreams-of-black-webgl-demo-is-awesome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Make a Beeping Timer Using Bash Script and Ubuntu Linux</title>
		<link>http://www.dylanmtaylor.com/2011/06/20/how-to-making-a-beeping-timer-in-bash-script-and-ubuntu/</link>
		<comments>http://www.dylanmtaylor.com/2011/06/20/how-to-making-a-beeping-timer-in-bash-script-and-ubuntu/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 22:39:49 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Bash Scripts]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Public Domain]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ubuntu Linux]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1072</guid>
		<description><![CDATA[I had my wisdom teeth removed this morning, and I&#8217;ve more or less been bedridden with my laptop, so I decided to kill time and keep my mind off of the pain by writing a script to beep whenever I have to alternate between having ice on my face and vice versa. I&#8217;m supposed to [...]]]></description>
				<content:encoded><![CDATA[<p>I had my <a class="zem_slink" title="Wisdom tooth" rel="wikipedia" href="http://en.wikipedia.org/wiki/Wisdom_tooth">wisdom teeth</a> removed this morning, and I&#8217;ve more or less been bedridden with my laptop, so I decided to kill time and keep my mind off of the pain by writing a script to beep whenever I have to alternate between having ice on my face and vice versa. I&#8217;m supposed to switch between the two every 20 minutes, which is a pain to remember and keep track of, so why not have the computer do that for me? Most of the work is already done for me in readily available tools, like <a class="zem_slink" title="Linux" rel="wikipedia" href="http://en.wikipedia.org/wiki/Linux">Linux</a>&#8216;s &#8220;date&#8221; command, and the <a class="zem_slink" title="Music on Console" rel="homepage" href="http://moc.daper.net/">MOC</a> console audio player. The only &#8220;real&#8221; work I had to do was write a few simple <a class="zem_slink" title="Conditional (programming)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Conditional_%28programming%29">conditional statements</a>, look into <a class="zem_slink" title="Command-line argument" rel="wikipedia" href="http://en.wikipedia.org/wiki/Command-line_argument">command line arguments</a> for the programs used (using <a class="zem_slink" title="Man page" rel="wikipedia" href="http://en.wikipedia.org/wiki/Man_page">man pages</a>), and creating a beeping sound using <a class="zem_slink" title="Audacity" rel="homepage" href="http://audacity.sourceforge.net/">Audacity</a>. This took me less than 30 minutes total, and I figured someone somewhere might find it useful or interesting, so I decided to write a tutorial about it and describe how I did it. A lot of this is geared towards those without much programming experience, so it might be useful in teaching the basics of programming and turning logic into code. Note: I realize there is a &#8220;beep&#8221; command available, but my laptop does not have a built-in speaker that works with that, so this is a very easy alternative, and it&#8217;s more compatible, too.</p>
<p>Because the easiest step is creating the audio file, I&#8217;ll start with that. If you&#8217;re just looking for a short beeping sound, and you don&#8217;t feel like opening up Audacity, the file I used can be downloaded below.</p>
<p>Audio File Used: <a rel="attachment wp-att-1073" href="http://dylanmtaylor.com/2011/06/20/how-to-making-a-beeping-timer-in-bash-script-and-ubuntu/beep-440-3s/">440Hz Beep for 3 Seconds</a></p>
<p>This is actually incredibly easy. If you don&#8217;t already have Audacity, download and install it. Now open it up, and choose &#8220;<strong>Tone</strong>&#8221; under the &#8220;<strong>Generate</strong>&#8221; menu. For me, the settings I used were <a class="zem_slink" title="Waveform" rel="wikipedia" href="http://en.wikipedia.org/wiki/Waveform">Waveform</a>: <a class="zem_slink" title="Sine wave" rel="wikipedia" href="http://en.wikipedia.org/wiki/Sine_wave">Sine</a>, <a class="zem_slink" title="Sound" rel="wikipedia" href="http://en.wikipedia.org/wiki/Sound">Frequency</a>: 440Hz, Amplitude: 1, Duration: 3 Seconds. This will quickly generate the beeping sound. Now you need to export this in a format playable by MOC. To do this, go to <strong>File &gt; Export&#8230; </strong>and set the <a class="zem_slink" title="File format" rel="wikipedia" href="http://en.wikipedia.org/wiki/File_format">file type</a> to &#8220;<strong><a class="zem_slink" title="Vorbis" rel="homepage" href="http://www.xiph.org/downloads/">Ogg Vorbis</a> Files</strong>&#8220;. Now save the file as <em>something</em>.ogg in the same directory you want the script to be in. For my script, the file name I used is &#8220;beep-440-3s.ogg&#8221;, but the name really doesn&#8217;t matter. I don&#8217;t recommend using spaces as you probably have to escape them in your script, which is a pain that can easily be avoided.</p>
<p>Now, if you don&#8217;t already have MOC console audio player installed, you need to install it (or another tool of your choosing) in order to play the audio file from the <a class="zem_slink" title="Command-line interface" rel="wikipedia" href="http://en.wikipedia.org/wiki/Command-line_interface">command line</a>. To get MOC audio player in <a class="zem_slink" title="Ubuntu (operating system)" rel="homepage" href="http://www.ubuntu.com/">Ubuntu</a> or <a class="zem_slink" title="Debian" rel="homepage" href="http://www.debian.org/">Debian Linux</a>, you can type the following command in a terminal, assuming the debian package &#8220;moc&#8221; is available in your configured software repositories:</p>
<blockquote><p>sudo apt-get install moc</p></blockquote>
<p>This method requires super-user (administrative) permissions, unfortunately, but that probably won&#8217;t be a problem for you. For more information on the sudo command, see <a href="http://www.pcworld.com/article/230695/ubuntu_linux_day_18_what_is_this_sudo_you_speak_of.html">Ubuntu Linux, Day 18: What Is This &#8216;sudo&#8217; You Speak Of?</a> (pcworld.com). Excuse me for a second, my timer just went off&#8230; now that we got that over with, let&#8217;s get started on coding the script!</p>
<p>Now, In my case, because I have to switch between ice and no ice every 20 minutes, there are three times that I switch between the two as 60 divided by 20 is 3. Because this is an odd number, the range minutes that I will or will not have a bag of ice on my face alternates every hour. To determine whether or not I should have a bag of ice on my face in a given 20 minutes, we can use the <a class="zem_slink" title="Modulo operation" rel="wikipedia" href="http://en.wikipedia.org/wiki/Modulo_operation">modulus operator</a>, which is used to determine the remainder of a division operation. If the modulus operator returns a zero, then there is no remainder (obviously). By getting the remainder of dividing the number of the hour by 2, we can tell if the current hour is even if the remainder is zero. The way I wrote this script isn&#8217;t the most efficient way of doing this, but I wanted to create something that worked quickly without spending too much time on it. Also, yes, I realize I could&#8217;ve done something incredibly simple, like using the watch command to tell me when to alternate between ice and no ice, but this was more fun to code, mostly for practice, and it works for me. An example of how I would use the watch command instead is to have it wait 20 minutes (the argument &#8216;n&#8217;, which is the time to wait, is in <em><span style="text-decoration: underline;">seconds</span></em>, so there are 1200 seconds in 20 minutes), and play the sound after that amount of time. This can be done with the following command from within the folder where the beep audio file is stored, substituting the duration and the file name with the ones you used/need:</p>
<blockquote><p>watch -n 1200 mocp -l beep-440-3s.ogg</p></blockquote>
<p>This will wait 20 minutes from the time of starting the command and then beep, repeating every 20 minutes. However, the title of this guide is &#8220;How To Make a Beeping Timer Using <a class="zem_slink" title="Bash (Unix shell)" rel="homepage" href="http://tiswww.case.edu/php/chet/bash/bashtop.html">Bash Script</a> and Ubuntu&#8221;, so I&#8217;m going to show you how to do that.</p>
<p>First, we&#8217;ll start with the obligatory <a href="http://en.wikipedia.org/wiki/Shebang_(Unix)">shebang line</a>:</p>
<blockquote><p>#!/bin/bash</p></blockquote>
<p>Because the entire script will be repeated indefinitely, until closed (such as using <strong>Ctrl + C</strong>), we want the main contents of our script to be in a while loop. The bash equivalent of a &#8220;while (true)&#8221; loop is &#8220;while [ 1 ]&#8220;, so the entire body of the script will be enclosed in that loop. Instead of brackets, while loops in bash are terminated with &#8220;do&#8221; at the beginning, and &#8220;done&#8221; at the end. The most obvious challenge we need to focus on is getting the current hour and minute in a format that&#8217;s incredibly easy to parse and work with. Linux&#8217;s &#8220;date&#8221; command works wonderfully for this. It does nearly all of the work for you, all you have to do is tell it how to format the date. If you look through the man pages for the date command, you can see that you&#8217;re able to specify how to format the date. All we&#8217;re interested in is the current hour (<strong>%k</strong>) and minutes (<strong>%M</strong>). To retrieve the hour from the date command, you simply type &#8220;date +%k&#8221;, where the formatting we want is after the plus sign. Go ahead and try that. The command to retrieve the current time in minutes is the same thing, substituting &#8220;k&#8221; for &#8220;M&#8221;. The letters are case-sensitive. When initializing a variable using bash script, it&#8217;s possible to set the variable to the return value (output) of a command using back-ticks. So, to get the current hour and minute, our code looks like this:</p>
<blockquote><p>HOUR=`date +%k`</p>
<p>MIN=`date +%M`</p></blockquote>
<p>Now that we have the hour and the minutes, we need to check to see if we should play the beep audio file or not. If the remainder of dividing the current minutes by 20 is zero, then we should be playing the file. The code for this is as follows:</p>
<blockquote><p>let REM=&#8221;$MIN % 20&#8243;</p>
<p>if [ $REM = 0 ];</p>
<p>then</p>
<p>mocp -l beep-440-3s.ogg</p>
<p>fi</p></blockquote>
<p>The &#8220;-l&#8221; argument of the mocp command tells MOC to just play the audio files specified in the command line arguments without messing with playlists, etc. Now that we have the beep working, we could consider the script done, as it goes off every at :00, :20, and :40 after the hour, but other that the fact that it&#8217;s obvious if you should put on ice or take it off, it&#8217;s a coding challenge to determine which one, so I decided to make the program say whether you should put ice on or vice versa. The first thing I did is realized that there are three times in an hour where I alternate between ice or not. Two of the times are the same except for the middle time at 20 minutes. Because 20 / 20 is one, we can check if the current minutes divided by 20 is 1 and display whether or not to put ice on depending on if the hour is an even number or not. In my code, I refer to the current minute divided by 20 with a truncated remainder as the current &#8220;set&#8221; number. The code for this is easy to write:</p>
<blockquote><p>let SET=&#8221;($MIN-$REM)/20&#8243;</p></blockquote>
<p>For debugging information, I list the current hour, minute, set, and whether  I should have ice on or not on the screen. This is also easy to code:</p>
<blockquote><p>echo -n &#8220;Hour: $HOUR Min: $MIN Set: $SET &#8220;</p></blockquote>
<p>In the string echoed to the console and the mathematical expressions, a variable name preceded by a dollar sign (<strong>$</strong>) is replaced with the value of that variable and evaluated as such. The <strong>-n </strong>argument of the &#8220;echo&#8221; command just tells echo not to append a new line character to the end of the string it prints to the output stream (in this case the console). The reason for this is because later in this script I echo whether or not I need to have ice on or off, and it looks neater to have it all on the same line. To determine whether the hour is an even number or not, we get the remainder of dividing the hour by two. If the remainder is zero, the hour is even. We can then use that to help determine whether we alternate cycles this hour. The code for this is incredibly simple:</p>
<blockquote><p>let hrem=&#8221;$HOUR % 2&#8243;</p></blockquote>
<p>As stated earlier, if the set is the middle set (set &#8217;1&#8242;, at 20 minutes after the hour), whether or not I need to use ice is different than the other two sets. Using that logic as well as the fact that the fact that the cycles alternate each hour, we can piece together the logic using very basic conditional statements:</p>
<blockquote><p>if [ $SET -ne 1 ]; then</p>
<p style="padding-left: 30px;">if [ $hrem -ne 0 ]; then</p>
<p style="padding-left: 60px;">echo &#8220;Ice On&#8221;</p>
<p style="padding-left: 30px;">else</p>
<p style="padding-left: 60px;">echo &#8220;Ice Off&#8221;</p>
<p style="padding-left: 30px;">fi</p>
<p>else</p>
<p style="padding-left: 30px;">if [ $hrem -ne 0 ]; then</p>
<p style="padding-left: 60px;">echo &#8220;Ice Off&#8221;</p>
<p style="padding-left: 30px;">else</p>
<p style="padding-left: 60px;">echo &#8220;Ice On&#8221;</p>
<p style="padding-left: 30px;">fi</p>
<p>fi</p></blockquote>
<p>If you aren&#8217;t familiar with bash syntax, &#8220;-ne&#8221; is short for &#8220;is not equal to&#8221;, which is usually expressed in other languages using &#8220;!=&#8221;, or &#8220;not&#8221; before a condition. Finally, to prevent a lot of redundant output, we will use the sleep command to wait a minute (60 seconds in the command) before the next iteration (repetition) of the while loop:</p>
<blockquote><p>sleep 60s #wait 1 minute</p></blockquote>
<p>And we&#8217;re finally done coding the script! Now, we just need to save the script in the same directory as the beep audio file, with the &#8220;.sh&#8221; file extension and set it as executable. To do that, you can use the Properties dialog, or just do it with the command prompt using the following command:</p>
<blockquote><p>chmod +x ice-timer-script.sh</p></blockquote>
<p>Now you can run the script using the command &#8220;<em>sh ice-timer-script.sh</em>&#8220;. I hope that somebody finds this tutorial useful. Writing this certainly helped keep me busy, since I&#8217;ve been in bed for the majority of the day. If you have any questions or feel that anything needs clarification, feel free to leave a comment! The final script used in this tutorial can be found at <a href="http://code.dylanmtaylor.com/bash/ice-timer-script.sh">http://code.dylanmtaylor.com/bash/ice-timer-script.sh</a>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/06/20/how-to-making-a-beeping-timer-in-bash-script-and-ubuntu/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/06/20/how-to-making-a-beeping-timer-in-bash-script-and-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Reset GNOME Panels to Defaults</title>
		<link>http://www.dylanmtaylor.com/2011/06/07/how-to-reset-gnome-panels-to-defaults/</link>
		<comments>http://www.dylanmtaylor.com/2011/06/07/how-to-reset-gnome-panels-to-defaults/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 16:40:13 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1040</guid>
		<description><![CDATA[Recently, I encountered an unusual graphics corruption bug in my lower GNOME panel. The panel still worked perfectly fine, but it was covered in unusual corruption artefacts, and it looked unsightly. I don&#8217;t think many people will actually have this problem, but it was an incredibly simple and easy fix, so I decided to share [...]]]></description>
				<content:encoded><![CDATA[<p>Recently, I encountered <a href="http://dylanmtaylor.com/?attachment_id=1041">an unusual graphics corruption bug in my lower<span class="zem_slink"></span> GNOME panel</a>. The panel still worked perfectly fine, but it was covered in unusual corruption artefacts, and it looked unsightly. I don&#8217;t think many people will actually have this problem, but it was an incredibly simple and easy fix, so I decided to share it on my blog. This may also be useful if you manage to mess up your panel layout, and you just want to start from a fresh slate. The fix is simple: just delete the directory where your <a title="GNOME Panel" rel="homepage" href="http://developer.gnome.org/arch/gnome/corecomponents/panel/">GNOME panel</a> <a class="zem_slink" title="Configuration file" rel="wikipedia" href="http://en.wikipedia.org/wiki/Configuration_file">configuration files</a> are stored, and <a class="zem_slink" title="GNOME" rel="homepage" href="http://www.gnome.org/">GNOME</a> will automatically create a new configuration folder using the default settings the next time you login. The quickest way to do this (in my opinion) is through the terminal. Simply open up a terminal, and paste in the following command:</p>
<blockquote><p>rm -rfv $HOME/.gconf/apps/panel</p></blockquote>
<p>Now log out and log back in. Your GNOME panel settings will be reset to their defaults. Enjoy! <img src='http://www.dylanmtaylor.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://dylanmtaylor.com/wp-content/uploads/2011/06/pixy16.gif" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/06/07/how-to-reset-gnome-panels-to-defaults/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/06/07/how-to-reset-gnome-panels-to-defaults/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FiOS WEP Key Calculator Website Updated</title>
		<link>http://www.dylanmtaylor.com/2011/06/06/fios-wep-key-calculator-website-updated/</link>
		<comments>http://www.dylanmtaylor.com/2011/06/06/fios-wep-key-calculator-website-updated/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 19:37:40 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[FiOS WEP Calc]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1032</guid>
		<description><![CDATA[It&#8217;s been a very long time since I last worked on my Verizon FiOS WEP key calculator website. Over the last few days, I decided that it looked dated, and I decided to make it look a lot cleaner, using the magic of CSS3. I removed several images from the site, such as the header image, [...]]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s been a <em>very </em>long time since I last worked on my Verizon <a class="zem_slink" title="Verizon FiOS" rel="wikipedia" href="http://en.wikipedia.org/wiki/Verizon_FiOS">FiOS</a> <a class="zem_slink" title="Wired Equivalent Privacy" rel="wikipedia" href="http://en.wikipedia.org/wiki/Wired_Equivalent_Privacy">WEP</a> key calculator website. Over the last few days, I decided that it looked dated, and I decided to make it look a lot cleaner, using the magic of <a class="zem_slink" title="Cascading Style Sheets" rel="wikipedia" href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS3</a>. I removed several images from the site, such as the header image, and the background gradient image, and I replaced them with a pure CSS-based approach, reducing the total page size from just above 12Kb to only 6.5Kb, and significantly reducing the already low amount of time taken to load the page, as well as making it feel more modern. The page loads, literally, almost instantly now, even on a <a class="zem_slink" title="Dial-up Internet access" rel="wikipedia" href="http://en.wikipedia.org/wiki/Dial-up_Internet_access">dial-up connection</a>, which is rather impressive if you ask me.  I think visitors will like the new look of <a href="http://fwc.dylanmtaylor.com/">my FiOS WEP key calculator site</a>, and if you have any feedback about it, feel free to leave a comment on this post.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://dylanmtaylor.com/wp-content/uploads/2011/06/pixy15.gif" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/06/06/fios-wep-key-calculator-website-updated/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/06/06/fios-wep-key-calculator-website-updated/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LibreScribe Progress Update</title>
		<link>http://www.dylanmtaylor.com/2011/05/21/librescribe-progress-update/</link>
		<comments>http://www.dylanmtaylor.com/2011/05/21/librescribe-progress-update/#comments</comments>
		<pubDate>Sat, 21 May 2011 06:59:38 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[C++ Applications]]></category>
		<category><![CDATA[LibreScribe]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[My Applications]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1031</guid>
		<description><![CDATA[Since my last post, I have made a lot of progress with LibreScribe. Just a few commits ago, LibreScribe gained the ability to retrieve a list of installed applications on the device, and add them to the list in the applications tab. I also fixed several other significant issues, including: When the smartpen is connected/disconnected, [...]]]></description>
				<content:encoded><![CDATA[<p>Since my last post, I have made a lot of progress with LibreScribe. Just a few commits ago, LibreScribe gained the ability to retrieve a list of installed applications on the device, and add them to the list in the applications tab. I also fixed several other significant issues, including:</p>
<ul>
<li>When the smartpen is connected/disconnected, the application no longer crashes, and the status is automatically refreshed</li>
<li>Device storage usage is now displayed in <a class="zem_slink" href="http://en.wikipedia.org/wiki/Mebibyte" title="Mebibyte" rel="wikipedia">MiB</a> instead of in bytes. This makes it a lot less confusing how much space is remaining on your smartpen.</li>
<li>A bug, where the <a class="zem_slink" href="http://www.livescribe.com/" title="Livescribe" rel="homepage">Echo Smartpen</a> was detected as an &#8220;unknown <a class="zem_slink" href="http://www.livescribe.com" title="Livescribe " rel="homepage">LiveScribe</a> Smartpen&#8221; in certain cases was fixed.</li>
<li><em>All </em>absolute paths have been removed from the project. All resources are now referenced using relative paths.</li>
<li>wxFormBuilder has been replaced with wxSmith. The entire <a class="zem_slink" href="http://en.wikipedia.org/wiki/User_interface" title="User interface" rel="wikipedia">user interface</a> has been recreated from scratch (although it&#8217;s very similar to the old interface, intentionally)</li>
<li>Many C++ source and <a class="zem_slink" href="http://en.wikipedia.org/wiki/Header_file" title="Header file" rel="wikipedia">header files</a> are no longer necessary, so they have been removed, and merged into other files. This makes the codebase a lot more maintainable.</li>
<li>Duplicate <a class="zem_slink" href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" title="Udev" rel="homepage">udev</a> events (such as multiple add events of the same device) are ignored now. Previously, we ended up refreshing the device information up to four times in a row because of duplicate events. This significantly reduces the delay between plugging in a device and seeing a response on the screen.</li>
</ul>
<p>There are still tons of issues that still need to be fixed before LibreScribe becomes usable in a production environment, but I&#8217;ve been steadily making progress, and I hope to have something useful out soon.<br _mce_bogus="1"/></p>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><img style="border: medium none; float: right;" class="zemanta-pixie-img" alt="" src="http://dylanmtaylor.com/wp-content/uploads/2011/06/pixy14.gif"/></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/05/21/librescribe-progress-update/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/05/21/librescribe-progress-update/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Major Bug Fix in LibreScribe</title>
		<link>http://www.dylanmtaylor.com/2011/05/12/major-bug-fix-in-librescribe/</link>
		<comments>http://www.dylanmtaylor.com/2011/05/12/major-bug-fix-in-librescribe/#comments</comments>
		<pubDate>Thu, 12 May 2011 21:34:59 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[C++ Applications]]></category>
		<category><![CDATA[LibreScribe]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[My Applications]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1029</guid>
		<description><![CDATA[A lot of work on the LibreScribe project has been accomplished since I first wrote about it. Just today, I fixed a major regression which was preventing the device information dialog from being displayed. In addition to that, I now have more work done on the interface, so that when the windows is resized, most [...]]]></description>
				<content:encoded><![CDATA[<p>A lot of work on the LibreScribe project has been accomplished since I first wrote about it. Just today, I fixed a major regression which was preventing the device information dialog from being displayed. In addition to that, I now have more work done on the interface, so that when the windows is resized, most of the elements will scale properly to fit the new size. Another major change I made was setting up the layout of the &#8220;Audio&#8221; and &#8220;Applications&#8221; tabs, so that there are now lists, with data split into columns. These changes mark a significant improvement in the <a class="zem_slink" title="Look and feel" rel="wikipedia" href="http://en.wikipedia.org/wiki/Look_and_feel">look and feel</a> of LibreScribe, but it&#8217;s only the beginning. Expect a large number of major changes in the not-too-distant future.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/05/12/major-bug-fix-in-librescribe/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/05/12/major-bug-fix-in-librescribe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Reply From Lexmark</title>
		<link>http://www.dylanmtaylor.com/2011/04/22/a-reply-from-lexmark/</link>
		<comments>http://www.dylanmtaylor.com/2011/04/22/a-reply-from-lexmark/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 07:20:19 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Lexmark]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1028</guid>
		<description><![CDATA[After discovering a bug in Lexmark&#8216;s Debian installer, as described in my previous post, and reporting it to Lexmark&#8217;s support team, I found a response from Lexmark in my inbox, which was sent on the 18th, and I decided to share it on my blog to show that Lexmark is aware of the issue, and [...]]]></description>
				<content:encoded><![CDATA[<p>After discovering a bug in <a class="zem_slink" title="Lexmark" rel="homepage" href="http://www.lexmark.com/">Lexmark</a>&#8216;s Debian installer, as described in <a href="http://dylanmtaylor.com/2011/04/17/fixing-lexmark-printer-driver-installation-in-ubuntu-11-04/">my previous post</a>, and reporting it to Lexmark&#8217;s support team, I found a response from Lexmark in my inbox, which was sent on the 18th, and I decided to share it on my blog to show that Lexmark is aware of the issue, and they are actively working on resolving it. Here is the message I received from Lexmark Support:</p>
<blockquote>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<table cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div id=":10i">
<div>
<div>
<div id=":10k">
<div id=":10j">Dear Dylan,&nbsp;</p>
<p>Here is your Service Request # 1-5145156021</p>
<p>We recently received your feedback.</p>
<p>Thank you for sharing this information. We really appreciate your time and effort in bringing this one to us. I will definitely forward this one to our software engineers so that we can make the necessary changes to our software. We really appreciate your feedback. It&#8217;s through customers like you that we&#8217;re able to make improvements in our current and future products.</p>
<p>If you have any more questions or concerns, please contact me at your convenience and I will be happy to assist you. (If I am not available, another representative may reply to your request.)</p>
<p>To respond, please select &#8220;Reply&#8221; in your e-mail software, and be sure that the past e-mail is included in this reply.</p>
<p>[AOL Users: In order to include the previous e-mail, you must highlight it with your mouse when you are replying.]</p>
<p>If your e-mail client automatically deletes prior e-mail thread information, it will cause a delay while we look up your support history. If this is the case you may want to save the old e-mails as attachments and attach them to the current e-mail.</p>
<p>Sincerely,<br />
Efren<br />
Lexmark eSupport Team<br />
<a href="http://support.lexmark.com/" target="_blank">http://support.lexmark.com</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<table cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div id=":10i">
<div>
<div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>The driver installation failed because there was a typo in the <a class="zem_slink" title="Lua (programming language)" rel="homepage" href="http://www.lua.org">Lua</a> <a class="zem_slink" title="Source code" rel="wikipedia" href="http://en.wikipedia.org/wiki/Source_code">source code</a> for the <a class="zem_slink" title="Linux" rel="wikipedia" href="http://en.wikipedia.org/wiki/Linux">Linux</a> Lexmark <a class="zem_slink" title="Printer driver" rel="wikipedia" href="http://en.wikipedia.org/wiki/Printer_driver">printer driver</a>. To be specific, the variable &#8220;ownership&#8221; was misspelled as &#8220;ownhership&#8221; in one of the lines of the source code. While this is a very easy to fix bug, it prevents the Linux installer from working at all, and I am happy to hear that Lexmark knows about the issue now, and it&#8217;s likely that a quick fix will be released. Hopefully this will eliminate the need for my workaround, and simplify Linux printer driver installation.</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://dylanmtaylor.com/wp-content/uploads/2011/06/pixy13.gif" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/04/22/a-reply-from-lexmark/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/04/22/a-reply-from-lexmark/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fixing Lexmark Printer Driver Installation in Ubuntu 11.04</title>
		<link>http://www.dylanmtaylor.com/2011/04/17/fixing-lexmark-printer-driver-installation-in-ubuntu-11-04/</link>
		<comments>http://www.dylanmtaylor.com/2011/04/17/fixing-lexmark-printer-driver-installation-in-ubuntu-11-04/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 18:20:55 +0000</pubDate>
		<dc:creator>Dylan Taylor</dc:creator>
				<category><![CDATA[Lexmark]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://dylanmtaylor.com/?p=1027</guid>
		<description><![CDATA[Recently I just installed the Lexmark printer driver in my 64-bit Ubuntu 11.04 installation. As you may or may not notice, the installer is broken by default in Ubuntu 11.04, and it just exits with an error message, saying Lua error detected: While parsing install.lua: config/run.lua:1374: attempt to index global &#8216;ownhership&#8217; (a nil value) After [...]]]></description>
				<content:encoded><![CDATA[<p>Recently I just installed the <a class="zem_slink" title="Lexmark" rel="homepage" href="http://www.lexmark.com/">Lexmark</a> <a class="zem_slink" title="Printer driver" rel="wikipedia" href="http://en.wikipedia.org/wiki/Printer_driver">printer driver</a> in my 64-bit <a class="zem_slink" title="List of Ubuntu releases" rel="homepage" href="http://www.ubuntu.com/">Ubuntu 11.04</a> installation. As you may or may not notice, the installer is broken by default in Ubuntu 11.04, and it just exits with an error message, saying</p>
<blockquote><p><a class="zem_slink" title="Lua (programming language)" rel="homepage" href="http://www.lua.org">Lua</a> error detected: While parsing install.lua: config/run.lua:1374: attempt to index global &#8216;ownhership&#8217; (a nil value)</p></blockquote>
<p>After playing with the installer, I finally got it to work <em>perfectly</em>, so I emailed the Lexmark support team to let them know how to fix this, but for now, I&#8217;m going to share what you need to do on my blog.</p>
<p>First, you need to extract the files for the installer. To do this, you need to run</p>
<blockquote><p>./lexmark-inkjet-legacy-wJRE-1.0-1.amd64.deb.sh &#8211;noexec &#8211;keep</p></blockquote>
<p>It&#8217;s worth noting that there are two hyphens before noexec and keep. Once you run that command, the files for the installer will be extracted to the tmp folder in the <a class="zem_slink" title="Working directory" rel="wikipedia" href="http://en.wikipedia.org/wiki/Working_directory">current working directory</a>. For now, just type <strong>cd tmp</strong> and press enter. Now, open up a text editor, such as gedit and navigate to the config folder in the tmp folder we just extracted. Open up the file &#8220;run.lua&#8221;. The problem is that Lexmark misspelled ownership as ownhership, which broke the installer. Around line 1484, you will find a line that says</p>
<blockquote><p>if tonumber(ownhership[1]) == 0 then</p></blockquote>
<p>delete the errant h in the word ownership and save the file. Now, go back to your terminal and run <strong>sudo sh startupinstaller.sh</strong> in the tmp folder. The installer will work as expected now.</p>
<p>Update: Special thanks to Mathieu Triclot for your $5 donation! Glad I could help! <img src='http://www.dylanmtaylor.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://dylanmtaylor.com/wp-content/uploads/2011/06/pixy12.gif" alt="" /></div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 5px; padding-top: 4px; padding-right: 215px;"><g:plusone size="standard" count="1" href="http://www.dylanmtaylor.com/2011/04/17/fixing-lexmark-printer-driver-installation-in-ubuntu-11-04/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.dylanmtaylor.com/2011/04/17/fixing-lexmark-printer-driver-installation-in-ubuntu-11-04/feed/</wfw:commentRss>
		<slash:comments>92</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
Database Caching using disk: basic
Object Caching 1879/2001 objects using disk: basic

Served from: www.dylanmtaylor.com @ 2013-06-19 09:32:19 -->