<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6468582636720486878</id><updated>2020-12-31T03:58:37.134-05:00</updated><category term="internet"/><category term="Grooveshark"/><category term="win"/><category term="fail"/><category term="hardware"/><category term="devolf"/><category term="guide"/><category term="Google"/><category term="php"/><category term="review"/><category term="twurla"/><category term="unfail"/><category term="update"/><category term="windows"/><category term="android"/><category term="apple"/><category term="gsuser"/><category term="linux"/><category term="state of"/><category term="twitter"/><title type='text'>James Hartig</title><subtitle type='html'>A Blog Created By James Hartig! Keep posted on products and services that I am working on :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.jhartig.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-8295564141907067418</id><published>2011-02-08T15:00:00.000-05:00</published><updated>2011-02-08T15:00:27.411-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="fail"/><category scheme="http://www.blogger.com/atom/ns#" term="guide"/><title type='text'>I&#39;m locked out of my Android phone and my Google Login won&#39;t work!!</title><content type='html'>Just experienced this problem today and here is how to fix it:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Have a friend call you, accept the phone call.&lt;/li&gt;&lt;li&gt;Hit the menu button and goto Contacts&lt;/li&gt;&lt;li&gt;Hit the back button until you hit the home screen&lt;/li&gt;&lt;li&gt;Goto Settings, then Goto Accounts &amp;amp; Sync&lt;/li&gt;&lt;li&gt;Delete (click on contact, then &quot;Remove Account&quot;) every account except for your Gmail account&lt;/li&gt;&lt;li&gt;End phone call&lt;/li&gt;&lt;li&gt;Type in your username (WITHOUT @gmail.com) and your password&lt;/li&gt;&lt;li&gt;Make a new security code.&lt;/li&gt;&lt;li&gt;Re-add synced accounts.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Enjoy! Note, this worked on Android 2.1, I don&#39;t know about compatibility on other versions.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/8295564141907067418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=8295564141907067418' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8295564141907067418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8295564141907067418'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2011/02/im-locked-out-of-my-android-phone-and.html' title='I&#39;m locked out of my Android phone and my Google Login won&#39;t work!!'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-4946903111920431873</id><published>2011-01-18T15:17:00.000-05:00</published><updated>2011-01-18T15:17:54.649-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="guide"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><title type='text'>Enabling real-time notifications in Cloudboard with Node.js</title><content type='html'>When &lt;a href=&quot;https://chrome.google.com/webstore/detail/biiibckinakeiomclcbohpmhbidkfpkk/&quot;&gt;Cloudboard&lt;/a&gt; was created, I had the popup load the &quot;inbox&quot; every time it was opened in an IFrame. Which not only was a complete waste of a server request, it was also a horrible UI experience on the user. If I could find a way to get real-time notifications, then the extension can be fed the pastes and will only have to get the &quot;inbox&quot; on boot. This will come in handy with the introduction of &quot;auto pasting&quot; which allows the user to right-click on any form field and paste the last paste from their Cloudboard.&lt;br /&gt;&lt;br /&gt;I started off trying to do long polling from lighttpd+php, but this was horrible and wouldn&#39;t scale at all (thanks @&lt;a href=&quot;http://twitter.com/yowgi&quot;&gt;yowgi&lt;/a&gt;). My biggest problem was that FastCGI cannot detect with the client connection is aborted unless you use&amp;nbsp;&lt;a href=&quot;https://gist.github.com/761520&quot;&gt;https://gist.github.com/761520&lt;/a&gt;, which only works in nginx/Apache and not in lighttpd, but these commands aren&#39;t in phpredis. Thus, I had a ton of FastCGI threads waiting for a publish on Redis, even though the client already aborted.&lt;br /&gt;&lt;br /&gt;I ended up switching to &lt;a href=&quot;http://nodejs.org/&quot;&gt;Node.js&lt;/a&gt;. The extension sends a request to &quot;listen&quot; to node.js and waits until data is returned. When a new post is made, node.js sends a request to all the listener&#39;s for a user. This works&amp;nbsp;beautifully&amp;nbsp;in a perfect world.&amp;nbsp;But what happens with the client aborts? This was our FastCGI problem. Well, assuming that we have a good client, node.js will get the connection close (&lt;a href=&quot;https://gist.github.com/762267&quot;&gt;https://gist.github.com/762267&lt;/a&gt;) and then close the listen request. However, Chrome is not a &quot;good client&quot; and so we are stuck with the same problem. To work around this problem, each extension is given a client id and and sends this along with the &quot;listen&quot; request. If node.js gets a client id that is already associated with another &quot;listen&quot; request, it shuts down the former. Problem solved. In addition, the server now handles timeouts and not the client so this should reduce the number of closed connections.&lt;br /&gt;To keep the listen connections &quot;alive&quot; every 2 minutes we make sure that we can write to each connection by sending a &quot;-&quot;. When we are finally ready to send a post, we append the stream with a &quot;$&quot; before sending the post so then the client just looks for a &quot;$&quot; and then reads the json-encoded post. Plus, if we actually send something and we end up closing the connection (on timeout), we can read this in the client as a safe return and not a failure.&lt;br /&gt;&lt;br /&gt;The client maintains an inbox and a lastUpdate time. When the browser is started, it fetches the lastUpdate time from node.js and if the lastUpdate time is newer, it pulls a new inbox. From then, posts are appended from the real-time polling. LastUpdate times are cached and updated in node.js when we get new post events. The client also requests lastUpdate times every 30 minutes to keep the local copy in line with the server copy. The server stores all the inboxes in an &quot;inboxes&quot; object and pushes it to disk every few minutes. When the node.js server is restarted, it loads the inboxes file from disk and resumes operation. It also periodically checks all the items for any that expired and can be deleted. This functions a lot like Redis except it is all done with JS objects and inside node.js.&lt;br /&gt;&lt;br /&gt;The latest version of Cloudboard, 0.6.7 has been released and is using the aforesaid technology. You can look into all the source code on &lt;a href=&quot;https://github.com/fastest963/Cloudboard/&quot;&gt;github&lt;/a&gt;. API documentation will be coming soon so you can make your own Cloudboard clients.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/4946903111920431873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=4946903111920431873' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/4946903111920431873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/4946903111920431873'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2011/01/enabling-real-time-notifications-in.html' title='Enabling real-time notifications in Cloudboard with Node.js'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-7270137743402308135</id><published>2010-12-30T12:30:00.000-05:00</published><updated>2010-12-30T12:30:52.561-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>Cloudboard: Share text between computers</title><content type='html'>When I received my CR-48 (read: Chrome notebook), I instantly noticed a need for a shared clipboard between my computer and the CR-48. I downloaded Google&#39;s Web Clipboard, however, it took a while for the pastes to appear on both machines and I had to sit and wait for it them to load. So I made my own extension that simplifies the process and allows you to share any type of text right from the context menu. &lt;a href=&quot;https://chrome.google.com/webstore/detail/biiibckinakeiomclcbohpmhbidkfpkk&quot;&gt;Cloudboard&lt;/a&gt; was born.&lt;br /&gt;&lt;br /&gt;Install the extension, login via Google to the Cloudboard site and get your token, then start sharing. You can right-click on images, urls, pages and text to share with your other computers and all you have to do is click on the clipboard next to the address bar to see a list of your pastes. If you want to refresh, hit the refresh button, or just open the popup again, it is updated&amp;nbsp;instantaneously&amp;nbsp;with your other Chrome installations.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://chrome.google.com/webstore/img/biiibckinakeiomclcbohpmhbidkfpkk/1293644862.04/screenshot_cws/1002&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://chrome.google.com/webstore/img/biiibckinakeiomclcbohpmhbidkfpkk/1293644862.04/screenshot_cws/1002&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Feel free to leave any comments that you have. I will be working on notifications, so you can be automatically notified when a new paste exists.&lt;/div&gt;&lt;br /&gt;Thanks, &lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/7270137743402308135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=7270137743402308135' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7270137743402308135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7270137743402308135'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/12/cloudboard-share-text-between-computers.html' title='Cloudboard: Share text between computers'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-4433833576812867791</id><published>2010-12-16T23:55:00.004-05:00</published><updated>2011-05-17T20:28:25.046-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="guide"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>See the User&#39;s IP Using Lighttpd Behind Cloudflare (Updated with Apigee)</title><content type='html'>Using Cloudflare to protect your website is a great choice, however, it can break your existing applications because the IP that your server sees is not the user&#39;s, it is Cloudflare&#39;s. Cloudflare has a module for Apache to rewrite the IP with the correct one (&lt;a href=&quot;https://www.cloudflare.com/wiki/Log_Files&quot;&gt;here&lt;/a&gt;), but not for lighttpd. The following 3 steps will get your IP rewritten and have your access logs printing out the correct IP for the connecting user.&lt;br /&gt;&lt;br /&gt;Step 1: Open your lighttpd.conf file and append &quot;mod_extforward&quot; to the end of the server.modules list.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TQrqG0uWRlI/AAAAAAAADYs/jX-ACQT3Rbs/s1600/2010-12-16_2341.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TQrqG0uWRlI/AAAAAAAADYs/jX-ACQT3Rbs/s1600/2010-12-16_2341.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Step 2: &amp;nbsp;Paste the following code block anywhere in the file (well at least after the server.modules lines)&lt;br /&gt;&lt;blockquote&gt;$HTTP[&quot;remoteip&quot;] == &quot;204.93.240.0/24&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$HTTP[&quot;remoteip&quot;] == &quot;204.93.177.0/24&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$HTTP[&quot;remoteip&quot;] == &quot;199.27.128.0/21&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$HTTP[&quot;remoteip&quot;] == &quot;173.245.48.0/20&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$HTTP[&quot;remoteip&quot;] == &quot;103.22.200.0/22&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Step 3: Restart lighttpd and you&#39;re good to go!&lt;br /&gt;&lt;br /&gt;You should now see the actual user IPs in the access logs and in your applications.&lt;br /&gt;&lt;br /&gt;If you want to add Apigee as well:&lt;br /&gt;&lt;blockquote&gt;$HTTP[&quot;remoteip&quot;] == &quot;75.101.150.28/32&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$HTTP[&quot;remoteip&quot;] == &quot;174.129.236.240/32&quot; {&lt;br /&gt;extforward.forwarder = ( &quot;all&quot; =&amp;gt; &quot;trust&quot; )&lt;br /&gt;extforward.headers = (&quot;CF-Connecting-IP&quot;)&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/4433833576812867791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=4433833576812867791' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/4433833576812867791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/4433833576812867791'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/12/cloudflare-lighttpd-ip.html' title='See the User&#39;s IP Using Lighttpd Behind Cloudflare (Updated with Apigee)'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Wb48B5iixzg/TQrqG0uWRlI/AAAAAAAADYs/jX-ACQT3Rbs/s72-c/2010-12-16_2341.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-532249659530400346</id><published>2010-12-09T22:07:00.001-05:00</published><updated>2010-12-09T22:10:59.829-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="review"/><title type='text'>Chrome Notebook. My Hands-on Review</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://cactusfiles.com/jhartig.com/chromebook/unbox1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://cactusfiles.com/jhartig.com/chromebook/unbox1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;I received my very own Chrome Notebook today and so far, I love it. Yes it has its quirks, but... its a Google notebook! For the most part everything works, there are just some odd things that fail to work.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;First of all, the &quot;Next tab&quot; button, doesn&#39;t do anything but jump/bump the side of the screen (odd?). &amp;nbsp;Once you open a new Window, it switches between windows, but it should not have been labeled a next tab button if it switched windows.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Sync does work, it just takes forever to load.&lt;/li&gt;&lt;li&gt;There is a slight lag to the keyboard.&lt;/li&gt;&lt;li&gt;&lt;s&gt;Selecting text doesn&#39;t work in all cases (read: text boxes).&lt;/s&gt; Fixed on restart.&lt;/li&gt;&lt;li&gt;Cursor sometimes doesn&#39;t change until you click feverishly.&lt;/li&gt;&lt;li&gt;Trackpad is hard to get used to, sometimes freaks out.&lt;/li&gt;&lt;li&gt;Flash player does not work very well on YouTube, Hulu, etc. Works fine for Grooveshark.&lt;/li&gt;&lt;li&gt;USB/SD cards do not work at all. The content browser comes up but it is empty.&lt;/li&gt;&lt;li&gt;Can take screenshots but there doesn&#39;t appear to be any purpose yet except to send them along with a bug report.&lt;/li&gt;&lt;li&gt;Shortcuts to move to next or previous tab do not work.&lt;/li&gt;&lt;li&gt;Battery time never finishes &quot;Calculating&quot;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Those are all the issues I noticed so far. But otherwise, the startup time was less than 10 seconds. I haven&#39;t ran into any extensions that don&#39;t work and websites seem to load and run very smoothly. Also, bettary life seems to be very good. I miss the delete button, but you can do Alt+Backspace to achieve the same thing. Dedicated search button is sweet, especially since it saves me time trying to work the trackpad.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://cactusfiles.com/jhartig.com/chromebook/shocked.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://cactusfiles.com/jhartig.com/chromebook/shocked.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;Sent from my Chrome notebook.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/532249659530400346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=532249659530400346' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/532249659530400346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/532249659530400346'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/12/chrome-notebook-my-hands-on-review.html' title='Chrome Notebook. My Hands-on Review'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-3712534831298420956</id><published>2010-12-08T17:19:00.000-05:00</published><updated>2010-12-08T17:19:23.063-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>Woopra in your Tumblr</title><content type='html'>&lt;a href=&quot;http://tumblr.com/&quot;&gt;Tumblr&lt;/a&gt; used to not allow third party Javascript in their custom HTML, but this seems to have been lifted. I do not know when but I just tried last night and it seems to work fine now.&amp;nbsp;&lt;a href=&quot;http://woopra.com/&quot;&gt;Woopra&lt;/a&gt; is a website that allows you to view your website traffic in real-time. You can now add Woopra to your Tumblr blog to watch your visitors and get detailed information on how they read your blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to&amp;nbsp;&lt;a href=&quot;https://www.woopra.com/members/&quot;&gt;https://www.woopra.com/members/&lt;/a&gt;&amp;nbsp;and get the Setup code for the JS script.&lt;/li&gt;&lt;li&gt;Go to&amp;nbsp;&lt;a href=&quot;http://www.tumblr.com/dashboard&quot;&gt;http://www.tumblr.com/dashboard&lt;/a&gt;&amp;nbsp;and goto Customize on the right side.&lt;/li&gt;&lt;li&gt;At the top of the customize page, hit Theme, and then click Enable custom HTML&lt;/li&gt;&lt;li&gt;Scroll down to the bottom of the HTML box (also under Theme option) till you see &lt;/li&gt;&lt;li&gt;Paste the Woopra setup code right above  then click Save + Close&lt;/li&gt;&lt;li&gt;Watch the results in Woopra!&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/3712534831298420956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=3712534831298420956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/3712534831298420956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/3712534831298420956'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/12/woopra-in-your-tumblr.html' title='Woopra in your Tumblr'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-5704967823804261495</id><published>2010-12-02T19:31:00.000-05:00</published><updated>2010-12-02T19:31:01.303-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>2 Random PHP Array Functions</title><content type='html'>Convert an Array into XML&lt;br /&gt;&lt;a href=&quot;http://jhartig.pastebin.com/B5sZ0rkK&quot;&gt;http://jhartig.pastebin.com/B5sZ0rkK&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Convert an Array into text like print_r&lt;br /&gt;&lt;a href=&quot;http://jhartig.pastebin.com/J6QWJCTW&quot;&gt;http://jhartig.pastebin.com/J6QWJCTW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Don&#39;t know what you would use them for. But, enjoy!&lt;br /&gt;&lt;br /&gt;Thanks, &lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/5704967823804261495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=5704967823804261495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5704967823804261495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5704967823804261495'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/12/2-random-php-array-functions.html' title='2 Random PHP Array Functions'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-8780639111016096068</id><published>2010-11-30T20:41:00.010-05:00</published><updated>2010-11-30T20:59:51.504-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Grooveshark"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>[Contest Over] Grooveshark Shirt and free VIP Contest</title><content type='html'>Since it is the holiday season, I will be giving away a free Grooveworld tee (pictured below) and a &lt;strong&gt; free year of VIP!&lt;/strong&gt; All you have to do is answer the following question in the comments and I will ship one to you free of charge! &lt;b&gt;Be sure to include your Grooveshark username so I can contact you if you win!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Question: What was the name of Grooveshark&#39;s first released client (application)? &lt;br /&gt;Hint: You could upload and download songs.&lt;br /&gt;&lt;strong&gt;The correct answer is Sharkbyte&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Sizes and colors available:&lt;br /&gt;XS/S/M/L Pink, S/M/L Blue&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://cactusfiles.com/jhartig.com/grooveworld_pink.jpg&quot; style=&quot;float: left; margin-left: 70px;&quot; /&gt;&lt;img border=&quot;0&quot; src=&quot;http://cactusfiles.com/jhartig.com/grooveworld_blue.jpg&quot; style=&quot;float: right; margin-right: 70px;&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;p&gt;&lt;em&gt;No Grooveshark employees allowed&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;Good luck,&lt;br /&gt;James Hartig&lt;br /&gt;&quot;Groove-minnow&quot;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/8780639111016096068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=8780639111016096068' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8780639111016096068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8780639111016096068'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/11/grooveshark-shirt-contest.html' title='[Contest Over] Grooveshark Shirt and free VIP Contest'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-7122203736269121036</id><published>2010-11-20T12:17:00.000-05:00</published><updated>2010-11-20T12:17:27.040-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Disable DNS Suffix</title><content type='html'>If you are using WOW! Internet or your ISP has provided a &quot;Domain Name&quot; when your router gets it IP from the ISP&#39;s modem, all of your requests out of your computer will go to *.{domain name}. For instance, google.wowway.com. This is obviously not what you want your computer to be doing, so you can fix it in 2 ways.&lt;br /&gt;&lt;br /&gt;The easiest is to just fix it on the router:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TOgBpkMRDeI/AAAAAAAADYk/LvDK8n1ayz8/s1600/2010-11-20_1212.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TOgBpkMRDeI/AAAAAAAADYk/LvDK8n1ayz8/s400/2010-11-20_1212.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Just set the &quot;Domain Name&quot; to a period (.) and it will disable the domain name.&lt;br /&gt;Then you need to RESET EVERY DEVICE on the network. If you don&#39;t it won&#39;t work.&lt;br /&gt;&lt;br /&gt;If you don&#39;t have access to the router, then you can change it locally on your Windows computer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Goto Network Connections (or Network and Sharing Center then to Change Adapter Settings)&lt;/li&gt;&lt;li&gt;Right click on your active connection (Probably Local Area Connection) and select Properties&lt;/li&gt;&lt;li&gt;Select Internet Protocol Version 4 and click Properties&lt;/li&gt;&lt;li&gt;Click Advanced&lt;/li&gt;&lt;li&gt;Goto the DNS tab and make it look like this:&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TOgCZs6vmtI/AAAAAAAADYo/uG4HuH3dnjM/s1600/2010-11-20_1215.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TOgCZs6vmtI/AAAAAAAADYo/uG4HuH3dnjM/s1600/2010-11-20_1215.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Once again, that being a period (.) as the domain name.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy!&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/7122203736269121036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=7122203736269121036' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7122203736269121036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7122203736269121036'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/11/disable-dns-suffix.html' title='Disable DNS Suffix'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Wb48B5iixzg/TOgBpkMRDeI/AAAAAAAADYk/LvDK8n1ayz8/s72-c/2010-11-20_1212.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-5527335630654558817</id><published>2010-11-03T17:41:00.000-04:00</published><updated>2010-11-03T17:41:07.444-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fail"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><title type='text'>Chromium&#39;s New Custom DNS Feature</title><content type='html'>Chromium recently introduced a new Custom DNS feature to their about:labs. This would come in great handy to me as I connect to a VPN but want to keep Chromium on my main DNS and not the VPN&#39;s. Sadly the custom DNS feature is &lt;b&gt;Linux-only. &lt;/b&gt;After digging a bit through the source code, you can enable it by adding the switch --dns-server. I tried:&amp;nbsp;--dns-server=208.67.222.222 (for OpenDNS) however, it didn&#39;t work for me and Chromium kept coming back saying that it couldn&#39;t resolve the domain name.&lt;br /&gt;&lt;br /&gt;If you can get it to work on a non-Linux system, let me know how in the comments!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/5527335630654558817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=5527335630654558817' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5527335630654558817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5527335630654558817'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/11/chromiums-new-custom-dns-feature.html' title='Chromium&#39;s New Custom DNS Feature'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-8958340214842414277</id><published>2010-10-25T18:14:00.002-04:00</published><updated>2010-10-26T06:25:25.759-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>LibClamAV Warning: Cannot prepare for JIT, because it has already been converted to interpreter</title><content type='html'>This happens on systems where you installed 0.96.3. Clamav has released a newer version 0.96.4 and in case your repo doesn&#39;t have it listed, you can install it using the following commands (designed for CentOS 5 32-bit):&lt;br /&gt;&lt;blockquote&gt;wget&amp;nbsp;http://packages.sw.be/clamav/clamd-0.96.4-1.el5.rf.i386.rpm&lt;br /&gt;wget&amp;nbsp;http://packages.sw.be/clamav/clamav-0.96.4-1.el5.rf.i386.rpm&lt;br /&gt;wget&amp;nbsp;http://packages.sw.be/clamav/clamav-db-0.96.4-1.el5.rf.i386.rpm&lt;br /&gt;yum -y upgrade&amp;nbsp;clamd-0.96.4-1.el5.rf.i386.rpm&amp;nbsp;clamav-0.96.4-1.el5.rf.i386.rpm&amp;nbsp;clamav-db-0.96.4-1.el5.rf.i386.rpm&lt;br /&gt;rm -f clamd-0.96.4-1.el5.rf.i386.rpm clamav-0.96.4-1.el5.rf.i386.rpm clamav-db-0.96.4-1.el5.rf.i386.rpm&lt;/blockquote&gt;If you happen to be running a 64-bit server:&lt;br /&gt;&lt;blockquote&gt;wget http://packages.sw.be/clamav/clamd-0.96.4-1.el5.rf.x86_64.rpm&lt;br /&gt;wget http://packages.sw.be/clamav/clamav-0.96.4-1.el5.rf.x86_64.rpm&lt;br /&gt;wget http://packages.sw.be/clamav/clamav-db-0.96.4-1.el5.rf.x86_64.rpm&lt;br /&gt;yum -y upgrade clamd-0.96.4-1.el5.rf.x86_64.rpm clamav-0.96.4-1.el5.rf.x86_64.rpm clamav-db-0.96.4-1.el5.rf.x86_64.rpm&lt;br /&gt;rm -f clamd-0.96.4-1.el5.rf.x86_64.rpm clamav-0.96.4-1.el5.rf.x86_64.rpm clamav-db-0.96.4-1.el5.rf.x86_64.rpm&lt;/blockquote&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/8958340214842414277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=8958340214842414277' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8958340214842414277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8958340214842414277'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/10/libclamav-warning-cannot-prepare-for.html' title='LibClamAV Warning: Cannot prepare for JIT, because it has already been converted to interpreter'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-6706228582579177507</id><published>2010-10-20T02:13:00.001-04:00</published><updated>2010-10-20T02:13:56.420-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fail"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>&quot;No such interface supported&quot; Error</title><content type='html'>I was trying to fix a Grooveshark bug which required I install IE7, well I found a standalone and attempted to install it, only to realize it wouldn&#39;t work. That didn&#39;t stop it from ruining some DLLs and causing random Windows shortcuts/links to stop working. Specifically any links to System&amp;nbsp;Properties, Customize toolbar icons, and desktop personalization.&lt;br /&gt;&lt;br /&gt;After looking online for a long time, I finally found a solution:&amp;nbsp;&lt;a href=&quot;http://forums.whatthetech.com/Re_register_system_DLLs_Windows_7_t112016.html&quot;&gt;http://forums.whatthetech.com/Re_register_system_DLLs_Windows_7_t112016.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you don&#39;t want to register, I hosted a version: &lt;a href=&quot;http://cactusfiles.com/windows/ReRegisterDLL.bat&quot;&gt;http://cactusfiles.com/windows/ReRegisterDLL.bat&lt;/a&gt; Just run that file as an Administrator and wait a good 10-15 minutes and you are all set. Enjoy!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/6706228582579177507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=6706228582579177507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6706228582579177507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6706228582579177507'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/10/no-such-interface-supported-error.html' title='&quot;No such interface supported&quot; Error'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-1236251250895054681</id><published>2010-10-12T15:05:00.002-04:00</published><updated>2010-10-12T15:14:13.966-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gsuser"/><category scheme="http://www.blogger.com/atom/ns#" term="unfail"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>Apigee and CloudFlare. A DNS-protected API solution</title><content type='html'>While I look for ways to optimize &lt;a href=&quot;http://gsuser.com/&quot;&gt;GSUser&lt;/a&gt;, I came across &lt;a href=&quot;http://apigee.com/&quot;&gt;Apigee &lt;/a&gt;a few weeks ago to track and monitor the people using GSUser. Their site provides analytics on how the API is used and has been a great addition to the internal tools I have. I especially love their debugger, where you can watch and review requests in real-time. If you pay for Apigee you even get to have them manage your API passwords, OAuth and they will cache responses.&lt;br /&gt;&lt;br /&gt;Starting last week, I started working on getting &lt;a href=&quot;http://cloudflare.com/&quot;&gt;CloudFlare &lt;/a&gt;up on some domains, I moved GSUser over to their Free plan to see how it worked. CloudFlare protects your website by sitting between your site and the visitor. They provide caching and protection against an array of attacks. Already on GSUser, they managed to cache 50% of all requests and protect me from almost 400,000 malicious requests.&lt;br /&gt;&lt;br /&gt;After testing each individually, I decided to move my largest client over to a subdomain that was protected by CloudFlare and yet still running through Apigee and this is where things got messy. I had originally routed this subdomain to gsuser.com on Apigee, which then caused Cloudflare to run into a DNS loop.&lt;br /&gt;&lt;br /&gt;In order to properly setup Cloudflare and an Apigee CNAME, follow these simple steps below:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a new subdomain (A Address) and point it to your server(s). Then turn off Cloudflare protection on the subdomain.&lt;/li&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TLSnnRMbRGI/AAAAAAAADX4/RnJiWkiKd3k/s1600/2010-10-12_1423.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;71&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TLSnnRMbRGI/AAAAAAAADX4/RnJiWkiKd3k/s400/2010-10-12_1423.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Go to Apigee and setup your new api and point it at this the subdomain you just created.&lt;/li&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TLSobkeg4LI/AAAAAAAADX8/KxhBPqdIbJU/s1600/2010-10-12_1426.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;149&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TLSobkeg4LI/AAAAAAAADX8/KxhBPqdIbJU/s400/2010-10-12_1426.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;After creating your API on Apigee, take your API URL (found under Settings) and create a new DNS CNAME record on Cloudflare pointing to this API URL. You will want CloudFlare protection on this subdomain.&lt;/li&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TLSpPEVX2LI/AAAAAAAADYA/UEE9RoSOJFc/s1600/2010-10-12_1430.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;45&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TLSpPEVX2LI/AAAAAAAADYA/UEE9RoSOJFc/s400/2010-10-12_1430.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Now go back to Apigee, go to your API&#39;s Settings and click &quot;Change CNAME&quot;. Then your CNAME is the public subdomain you just created.&lt;/li&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TLSpvwAFfTI/AAAAAAAADYE/YLZZuqIwEgs/s1600/2010-10-12_1432.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;196&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TLSpvwAFfTI/AAAAAAAADYE/YLZZuqIwEgs/s320/2010-10-12_1432.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Now you can direct all your API clients to your public subdomain (public.gsuser.com will be active to prove it works for today).&lt;/li&gt;&lt;/ol&gt;Enjoy your super protected and analytic-friendly API endpoint!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/1236251250895054681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=1236251250895054681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/1236251250895054681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/1236251250895054681'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/10/apigee-and-cloudflare-dns-protected-api.html' title='Apigee and CloudFlare. A DNS-protected API solution'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Wb48B5iixzg/TLSnnRMbRGI/AAAAAAAADX4/RnJiWkiKd3k/s72-c/2010-10-12_1423.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-1477712091179219042</id><published>2010-10-06T17:46:00.000-04:00</published><updated>2010-10-06T17:46:26.444-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Grooveshark"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>Grooveshark Day 10/1/10</title><content type='html'>Grooveshark Day was awesome this year! Strongsville High School students got their own special promotion, as well as a video which was played on the&amp;nbsp;announcements.&lt;br /&gt;&lt;br /&gt;&lt;object height=&quot;340&quot; width=&quot;560&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/_9vpCTKZ1m0?fs=1&amp;amp;hl=en_US&amp;amp;rel=0&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/_9vpCTKZ1m0?fs=1&amp;amp;hl=en_US&amp;amp;rel=0&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Here is a picture of everyone at my school and who wore their shirts and came to get a picture at 7am.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TKzuJVcwFRI/AAAAAAAADXw/tvCzJjvQv5I/s1600/62412_10150093320344688_673509687_7339887_3763360_n.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TKzuJVcwFRI/AAAAAAAADXw/tvCzJjvQv5I/s400/62412_10150093320344688_673509687_7339887_3763360_n.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Also, we gave out 200 free 1-month VIP accounts on Twitter and on Facebook. Be sure to stay tuned to &lt;a href=&quot;http://groovesharkday.com/&quot;&gt;http://groovesharkday.com/&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/groovesharkday&quot;&gt;@groovesharkday&lt;/a&gt; for&amp;nbsp;announcements&amp;nbsp;for next year!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/1477712091179219042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=1477712091179219042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/1477712091179219042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/1477712091179219042'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/10/grooveshark-day-10110.html' title='Grooveshark Day 10/1/10'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Wb48B5iixzg/TKzuJVcwFRI/AAAAAAAADXw/tvCzJjvQv5I/s72-c/62412_10150093320344688_673509687_7339887_3763360_n.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-8363885063051580868</id><published>2010-08-02T00:52:00.000-04:00</published><updated>2010-08-02T00:52:46.911-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Grooveshark"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="win"/><title type='text'>Jailbreak iOS 4.0</title><content type='html'>I know everyone knows all about &lt;a href=&quot;http://jailbreakme.com/&quot;&gt;JailbreakMe&lt;/a&gt;&amp;nbsp;but I&#39;d just like to say, I just used it and it is amazing! I followed the instructions on&amp;nbsp;&lt;a href=&quot;http://www.iphonehacks.com/2010/08/jailbreakme-20-released-to-jailbreak-iphone-4-iphone-3gs-iphone-3g-on-ios-4-ios-401-and-ipad-on-ios-3-2-1-ios-3-2-via-mobile-.html&quot;&gt;http://www.iphonehacks.com/2010/08/jailbreakme-20-released-to-jailbreak-iphone-4-iphone-3gs-iphone-3g-on-ios-4-ios-401-and-ipad-on-ios-3-2-1-ios-3-2-via-mobile-.html&lt;/a&gt;&amp;nbsp;and I had to use &lt;a href=&quot;http://jailbreakme.modmyi.com/&quot;&gt;http://jailbreakme.modmyi.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, if you don&#39;t get the Downloading screen, try restarting your iTouch/iPhone. I couldn&#39;t get anything to happen but after a restart, everything worked beautifully!&lt;br /&gt;&lt;br /&gt;Can&#39;t wait to try out some &lt;a href=&quot;http://mobile.grooveshark.com/&quot;&gt;Grooveshark&lt;/a&gt; on the new iOS!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/8363885063051580868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=8363885063051580868' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8363885063051580868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/8363885063051580868'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/08/jailbreak-ios-40.html' title='Jailbreak iOS 4.0'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-6889077358617144287</id><published>2010-07-10T13:06:00.005-04:00</published><updated>2010-07-10T13:14:40.181-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="review"/><title type='text'>Review: MozyHome == awesome! You can save 10%!</title><content type='html'>&lt;i&gt;If you don&#39;t care what I have to say about Mozy, skip to the bottom for the link to save 10%.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As my friends and I started our movie, we needed a place to backup our video and I was still looking for a good alternative to the &quot;external hard drive&quot;. I looked at a few online backup places but they were all expensive or slow. DropBox was really expensive for backing up 50+ GBs, but I still use them for all my web project stuff. Carbonite was equally priced but they were slow in my&amp;nbsp;initial&amp;nbsp;tests (utilizing only 40% of my&amp;nbsp;available&amp;nbsp;bandwidth). Then I found Mozy, they offer unlimited space for $4.95/month and they can utilize my full bandwidth pipe!&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TDikRlhFFcI/AAAAAAAADXI/48MKCtGHIdw/s1600/2010-07-10_1247.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TDikRlhFFcI/AAAAAAAADXI/48MKCtGHIdw/s320/2010-07-10_1247.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A screenshot of the MozyHome Status screen from testing.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Now, from that screenshot it says 1.4 Mbps and my pipe is technically 1.5Mbps but it stays around 1.3-1.5 consistently, and this allows me to upload around 13GB of data per day. That really comes in handy when you upload a 30GB music library or if you film 4 times a week and every day is 10GB worth of video...&lt;/div&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TDill3ZhzgI/AAAAAAAADXM/sFLhtwxGgcA/s1600/2010-07-10_1253.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/TDill3ZhzgI/AAAAAAAADXM/sFLhtwxGgcA/s400/2010-07-10_1253.png&quot; width=&quot;337&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Their various restore options.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;If something bad happens, you can restore via the client or you can have them conveniently send DVD&#39;s of your files. Since I have 12 Mbps internet, I don&#39;t think it would be too much of a hassle to download the data but in case I couldn&#39;t or wanted hard copies, I have that option. This was really important in my decision.&lt;br /&gt;&lt;br /&gt;Their client works on Mac and Windows and it has predefined &quot;backup sets&quot; which automatically backup things like your financial data and browser bookmarks. I personally chose to not use most of them because I like the control of choosing the folders myself. You can set a schedule for when to backup:&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDimjIHcD-I/AAAAAAAADXQ/Js2CBYf8M-w/s1600/2010-07-10_1257.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDimjIHcD-I/AAAAAAAADXQ/Js2CBYf8M-w/s400/2010-07-10_1257.png&quot; width=&quot;386&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;I wanted to backup all day and I didn&#39;t really care about scheduling.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;You can also set a&amp;nbsp;throttle&amp;nbsp;and backup speed. I throttle down the internet during the week from 9am to 5pm (as you will see&amp;nbsp;grayed&amp;nbsp;out as it is the weekend) because my remote desktop connection sucks if it is using all the internet :P Also, I set the Backup Speed to &quot;Quicker Backups&quot; because I want it to do&amp;nbsp;whatever it can to backup, I have a brand new computer and it doesn&#39;t affect performance at all.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/TDinU55f20I/AAAAAAAADXU/4sznfNNga-Q/s1600/2010-07-10_1300.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;333&quot; src=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/TDinU55f20I/AAAAAAAADXU/4sznfNNga-Q/s400/2010-07-10_1300.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally, a new feature of Mozy 2.0 (by the way, this is the feature that sold me) is &quot;Local Backup&quot;.&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Mozy 2xProtect™ automatically backs up files locally to an external drive in addition to a Mozy data center for double protection of your personal and business information.&lt;/i&gt;&lt;/blockquote&gt;Basically, it will backup all my stuff to my external 1TB hard drive as well as online. This is amazing.&lt;br /&gt;&lt;br /&gt;If you are looking for a backup service, I HIGHLY suggest MozyHome. I use it for all my backups and soon I&#39;ll be implementing it on my servers.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://mozy.popularmedia.net/click/share/91e3138ea1684ca368c27c934810cf35&quot;&gt;Click my affiliate link and save 10% on your MozyHome order today!&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;Yes, I make some money off the affiliate link but this post was designed to share my experience with MozyHome and not make money.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/6889077358617144287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=6889077358617144287' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6889077358617144287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6889077358617144287'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/07/mozyhome-awesome-you-can-save-10.html' title='Review: MozyHome == awesome! You can save 10%!'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Wb48B5iixzg/TDikRlhFFcI/AAAAAAAADXI/48MKCtGHIdw/s72-c/2010-07-10_1247.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-7816384907375799401</id><published>2010-07-08T23:51:00.003-04:00</published><updated>2010-07-08T23:53:56.115-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><title type='text'>SATA vs USB3.0 vs USB2.0</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;We recently bought a new Seagate 1TB SATA ES.2 hard drive (ST31000340NS) for our movie video and I decided to test out how it performed in USB3.0 enclosure, USB2.0 enclosure and then just straight SATA.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDaba7HP5BI/AAAAAAAADW8/u7nfThUDWW4/s1600/20100709054050.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;365&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDaba7HP5BI/AAAAAAAADW8/u7nfThUDWW4/s400/20100709054050.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Our first test was creating a 500MB file with 10MB blocks and 50 blocks.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/TDacCHj4sRI/AAAAAAAADXA/VQkMnviWpZc/s1600/20100709054225.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;365&quot; src=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/TDacCHj4sRI/AAAAAAAADXA/VQkMnviWpZc/s400/20100709054225.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Our second test was creating 2 200MB files (10MB blocks again) threaded.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDacMn1Ak_I/AAAAAAAADXE/8hCfL3Z1BEQ/s1600/20100709054329.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;365&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TDacMn1Ak_I/AAAAAAAADXE/8hCfL3Z1BEQ/s400/20100709054329.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Finally, the last test was reading the first file.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;As you can see, all three methods performed &lt;b&gt;roughly the same&lt;/b&gt;. Every test was performed 5 times (I didn&#39;t have all day) and then averaged. Maybe if the hard drive was 6.0GB/s rated then we would have noticed more of a difference? Overall, I think the USB3.0 would only come in handy if you are reading and writing multiple files at once. We upgraded to USB3.0 because I needed a new hard drive enclosure anyways so why not just get the latest and greatest tech?&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/7816384907375799401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=7816384907375799401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7816384907375799401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7816384907375799401'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/07/sata-vs-usb30-vs-usb20.html' title='SATA vs USB3.0 vs USB2.0'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Wb48B5iixzg/TDaba7HP5BI/AAAAAAAADW8/u7nfThUDWW4/s72-c/20100709054050.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-6410948556651661228</id><published>2010-06-08T19:27:00.004-04:00</published><updated>2010-06-08T23:51:54.462-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Grooveshark"/><category scheme="http://www.blogger.com/atom/ns#" term="update"/><title type='text'>Grooveshark Updates: Desktop Shortcuts and External Player Control API</title><content type='html'>I&#39;ve been hard at work responding to users and making small changes to Grooveshark. &amp;nbsp;While the rest of the team is working diligently at improving the major aspects of the backend and the application itself, I&#39;ve been working on Desktop shortcuts, releasing the External Control API, as well as some crossfade fixes (coming next release).&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right; margin-left: 1em; text-align: right;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TA7HUN9CrrI/AAAAAAAADW0/rrkFJt0fOx0/s1600/externalcontrolapi.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;57&quot; src=&quot;http://3.bp.blogspot.com/_Wb48B5iixzg/TA7HUN9CrrI/AAAAAAAADW0/rrkFJt0fOx0/s320/externalcontrolapi.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;To enable the API, users must goto Desktop Options.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;External Player Control API (&lt;a href=&quot;http://grooveshark.wikia.com/wiki/External_Player_Control_API_Docs&quot;&gt;Docs&lt;/a&gt;) allows developers to design apps that control Grooveshark from outside Grooveshark. This could be a remote iPhone app, a Firefox/Chrome extension, a remote control or anything where it benefits users to not have Grooveshark Desktop (this will not yet work for the Flash version) open.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TA7IN5_Iu5I/AAAAAAAADW4/CgQBfdZQOjA/s1600/keyapplication.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/TA7IN5_Iu5I/AAAAAAAADW4/CgQBfdZQOjA/s320/keyapplication.png&quot; width=&quot;312&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The first&amp;nbsp;applications&amp;nbsp;to benefit from the External Player Control API are Desktop hotkeys. Between &lt;a href=&quot;http://threestrangedays.net/gsdesktophelper/&quot;&gt;Terin Stock&lt;/a&gt; and myself we developed official Windows and Mac clients to listen and enable global shortcuts. These would enable Grooveshark to have shortcuts no matter what window you have focused/open. Both apps will allow you to define your own keys as well as incorporate a better UI in coming versions. You can read more about the Desktop shortcuts on &lt;a href=&quot;http://wanderr.com/jay/keyboard-shortcuts-for-grooveshark-desktop/2010/06/05/&quot;&gt;Jay Paroline&#39;s blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Along with the above released features, I&#39;ve been hard at work improving the crossfade feature that many users have come to enjoy. In the next version, you will be able to enable Fade in/out on pausing and resuming. Also, there will be come fixes coming that will enable crossfade while &lt;a href=&quot;http://twitter.com/fastest963/status/15737118691&quot;&gt;Frowning a song&lt;/a&gt; and removing songs from your queue.&lt;br /&gt;&lt;br /&gt;Also, I encourage you to look through the next version for a sweet new feature ;)&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/6410948556651661228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=6410948556651661228' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6410948556651661228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/6410948556651661228'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/06/grooveshark-updates.html' title='Grooveshark Updates: Desktop Shortcuts and External Player Control API'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Wb48B5iixzg/TA7HUN9CrrI/AAAAAAAADW0/rrkFJt0fOx0/s72-c/externalcontrolapi.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-5265895930139687028</id><published>2010-05-10T22:54:00.001-04:00</published><updated>2010-05-10T22:55:10.964-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="fail"/><title type='text'>Quote from jPod</title><content type='html'>&lt;blockquote&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px;&quot;&gt;It&#39;s weird, but every time I visit the Drudge Report website, I&#39;m the fifty-millionth person to visit it, so there must be a software error on their part, because how could they possibly have more than one&amp;nbsp;fifty-millionth visitor? And I can&#39;t wait to see what my prize will be.&lt;/span&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/5265895930139687028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=5265895930139687028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5265895930139687028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/5265895930139687028'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/05/quote-from-jpod.html' title='Quote from jPod'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-60599966834980915</id><published>2010-04-18T16:18:00.000-04:00</published><updated>2010-04-18T16:18:31.771-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><title type='text'>2Wire Router DMZ-Plus Mode</title><content type='html'>Over the past few days, I have spent many hours trying to get IPv6 working again on my network and getting the Grooveshark VPN to work correctly. I finally got PPTP working after forwarding port 1723 to my computer and loading a few PPTP kernel modules.&lt;br /&gt;&lt;br /&gt;Neither PPTP or IPv6 would work without first enabling DMZ-Plus on my 2Wire router to make sure everything passed through to my routers.&lt;br /&gt;&lt;br /&gt;Here is how to setup your router in DMZ-Plus mode:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Unplug all devices from the 2Wire router except for your router you want to be in DMZ. Also, unplug any TV boxes as they might through the 2Wire router.&lt;/li&gt;&lt;li&gt;Reset your 2Wire router by unplugging, waiting 10 seconds and then plugging it back in.&lt;/li&gt;&lt;li&gt;Login to the 2Wire and goto the Firewall settings. Then select Applications, Pinholes, and DMZ&lt;/li&gt;&lt;li&gt;There should only be 1 device listed under &quot;Select a Computer&quot;. Make sure it is selected and then Choose the radio button: &lt;b&gt;Allow all applications (DMZplus mode).&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Hit Save. Now login to your router that is now under DMZ.&lt;/li&gt;&lt;li&gt;Under setup, make sure the router is set to DHCP.&lt;/li&gt;&lt;li&gt;Goto the Status page and click &lt;b&gt;Release IP Address&lt;/b&gt;&amp;nbsp;then wait 30 seconds and click &lt;b&gt;Renew IP Address&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;The IP address listed should change from 192.168.x.x to your DSL/Cable IP Address. If it stayed at 192.168.x.x, go back to step 3. It might take a few times for your router to pickup the correct IP.&lt;/li&gt;&lt;li&gt;Once your router has the external IP, everything is configured correctly.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Even if your router has the 192.168.x.x the router still appears to be in DMZ however, most obscure-protocols (GRE,IPv6-IPv4)&amp;nbsp;still will not work. The router must have the external IP as its IP address for everything to work correctly.&lt;/div&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/60599966834980915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=60599966834980915' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/60599966834980915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/60599966834980915'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/04/2wire-router-dmz-plus-mode.html' title='2Wire Router DMZ-Plus Mode'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-3825304198711060368</id><published>2010-03-28T19:56:00.001-04:00</published><updated>2010-03-28T19:59:40.791-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><title type='text'>IPv6 on DD-WRT simplified and updated script</title><content type='html'>I have spent the last week testing out various methods of enabling Sixxs IPv6 tunnels and Hurricane Electric IPv6 tunnels and I have compiled and posted the following script which incorporates all of the collected data and even includes how to install traceroute6, ping6, and tcpdump without recompiling!&lt;br /&gt;&lt;br /&gt;I tried to make it as easy as possible.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.dd-wrt.com/phpBB2/viewtopic.php?p=424677#424677&quot;&gt;http://www.dd-wrt.com/phpBB2/viewtopic.php?p=424677#424677&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks and enjoy IPv6!&lt;br /&gt;- James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/3825304198711060368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=3825304198711060368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/3825304198711060368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/3825304198711060368'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/03/ipv6-on-dd-wrt-simplified-and-updated.html' title='IPv6 on DD-WRT simplified and updated script'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-2264726824853449680</id><published>2010-03-09T20:26:00.002-05:00</published><updated>2010-03-09T20:27:52.606-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Grooveshark"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="update"/><title type='text'>Grooveshark Update v2.0 r20100211.21.</title><content type='html'>I was fortunate to be talking with the &lt;a href=&quot;http://grooveshark.com/&quot;&gt;Grooveshark&lt;/a&gt; crew as the latest VIP-only update was pushed just a few minutes ago. The latest update brings the following new features:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/S5bwykNA_ZI/AAAAAAAADUk/4ULW4-pBAGo/s1600-h/2010-03-09_1959.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/S5bwykNA_ZI/AAAAAAAADUk/4ULW4-pBAGo/s400/2010-03-09_1959.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Instead of the old&amp;nbsp;settings&amp;nbsp;lightbox-style popup, you will notice a brand new settings page, complete with profile information, RSS settings, Notification settings and profile picture. Also, you will notice a new services tab...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/S5bx3fpBUeI/AAAAAAAADUo/_udzWvd1Ocg/s1600-h/2010-03-09_1958.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;75&quot; src=&quot;http://4.bp.blogspot.com/_Wb48B5iixzg/S5bx3fpBUeI/AAAAAAAADUo/_udzWvd1Ocg/s400/2010-03-09_1958.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Yes, Grooveshark has finally finished Last.FM scrobbling. I have not tested it (I don&#39;t use Last.FM) but people have already reported it is working for them. &lt;i&gt;Note this is only for VIP members. &lt;/i&gt;On a side note, I can finally close all the discussions on the old (read: check &lt;a href=&quot;http://forums.grooveshark.com/&quot;&gt;Grooveshark Forums&lt;/a&gt;) GetSatisfaction posts.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/S5byZZ7kQNI/AAAAAAAADUs/9m7SnE5_yfc/s1600-h/2010-03-09_1957.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;166&quot; src=&quot;http://1.bp.blogspot.com/_Wb48B5iixzg/S5byZZ7kQNI/AAAAAAAADUs/9m7SnE5_yfc/s320/2010-03-09_1957.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Also, a feature requested in the forums was the ability to shut off the&amp;nbsp;constant&amp;nbsp;nagging to &quot;Restore previous songs&quot;. This feature was enabled in the last update and allowed the user to restore the queue from the last session. There is now a &quot;Remember my answer&quot;-style checkbox on this dialog. I have suggested they accompany this with a checkbox in settings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/S5bzmjnRxQI/AAAAAAAADUw/j4WkHR3J3Mg/s1600-h/2010-03-09_2000.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://2.bp.blogspot.com/_Wb48B5iixzg/S5bzmjnRxQI/AAAAAAAADUw/j4WkHR3J3Mg/s200/2010-03-09_2000.png&quot; width=&quot;147&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, the team has added 2 new languages. Pirate and what appears to be Chinese (confirmed to be Chinese). Hopefully this addition will expand the Chinese market (at least until China blocks it...) and it will be interesting to watch the at-sea market grow as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Along with the above features, there were some major fixes and updates applied to ads, which hopefully will stop all those nasty browser hijacks. One way to get all the above features and totally dismiss ads is to get a &lt;a href=&quot;http://vip.grooveshark.com/&quot;&gt;Grooveshark VIP&lt;/a&gt; account. Enjoy the update VIPers!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig&lt;br /&gt;&lt;a href=&quot;http://twitter.com/fastest963&quot;&gt;@fastest963&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/2264726824853449680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=2264726824853449680' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/2264726824853449680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/2264726824853449680'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/03/grooveshark-update-v20-r2010021121.html' title='Grooveshark Update v2.0 r20100211.21.'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Wb48B5iixzg/S5bwykNA_ZI/AAAAAAAADUk/4ULW4-pBAGo/s72-c/2010-03-09_1959.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-160576705080109025</id><published>2010-02-15T13:43:00.003-05:00</published><updated>2010-02-15T13:56:05.207-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devolf"/><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><title type='text'>Moving domains</title><content type='html'>In an effort to save me money and time, I&#39;m in the process of moving some of my domains and putting them at &lt;a href=&quot;http://dreamhost.com/&quot;&gt;Dreamhost&lt;/a&gt;. The only thing is that Dreamhost costs $9.95 for a registration transfer. Luckily this would be a one-time fee, but still, it is unfortunate that if I already have an existing domain, I&#39;m going to have to re-register it at Dreamhost.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, I will be letting the following domains expire:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;isocy.com&lt;/li&gt;&lt;li&gt;iservere1.com&lt;/li&gt;&lt;li&gt;iservere2.com&lt;/li&gt;&lt;li&gt;rachelfaciana.com&lt;/li&gt;&lt;li&gt;isociale.net&lt;/li&gt;&lt;li&gt;isociale.org&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I think that is it, but there may be another that I&#39;m letting expire. As far as the rest of my domains, almost all of them are already at Dreamhost, the few that are not include, this domain (&lt;a href=&quot;http://jhartig.com/&quot;&gt;jhartig.com&lt;/a&gt;) and &lt;a href=&quot;http://fastest963.com/&quot;&gt;fastest963.com&lt;/a&gt;. I will be moving fastest963.com closer to when it expires, a few months, and same with jhartig.com but not until mid-June or July. I have already sent in requests to eNom for fastest963.com and jhartig.com because I don&#39;t know how long they take for requests and I don&#39;t want to be waiting last minute for the transfer.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I will also be consolidating my Google Apps accounts, I have many and I would like to keep them to a minimum so I don&#39;t have to check a million emails a day (exaggeration).  With deVolf, we have a bunch of Domain Alias&#39;s set up for all the deVolf domains and I plan to do the same with my personal domains. &lt;a href=&quot;http://groovesharkday.com/&quot;&gt;groovesharkday.com&lt;/a&gt; is being configured soon (Google takes 7 days to process this domain switch) and &lt;a href=&quot;http://gs-status.com/&quot;&gt;gs-status.com&lt;/a&gt; is already configured.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Among the other domains that I own, they are either already configured or they are secret. Along the way, I will be posting any problems that I come across.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/160576705080109025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=160576705080109025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/160576705080109025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/160576705080109025'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/02/moving-domains.html' title='Moving domains'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-2723149274225076227</id><published>2010-02-12T17:43:00.007-05:00</published><updated>2010-02-12T21:03:41.611-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devolf"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Perfect regex for removing links when parsing HTML</title><content type='html'>After a few long hours:&lt;br /&gt;&lt;p&gt;PHP Version:&lt;br /&gt;&lt;pre&gt;/\&amp;lt;a.*?href=(&#39;|\&quot;)(.*?)(?:(?&amp;lt;!\\\)\\1|\w+(?=\=)|.(?=\s))[^\&amp;gt;]*?&amp;gt;(.*?)(?:\&amp;lt;\/)(?=[a]).*?(?=\&amp;gt;)\&amp;gt;/i&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Actual Regex&lt;br /&gt;&lt;pre&gt;/\&amp;lt;a.*?href=(&#39;|\&quot;)(.*?)(?:(?&amp;lt;!\\)\1|\w+(?=\=)|.(?=\s))[^\&amp;gt;]*?&amp;gt;(.*?)(?:\&amp;lt;\/)(?=[a]).*?(?=\&amp;gt;)\&amp;gt;/i&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;That regex was designed for deVolf&#39;s new RSS Import feature. It takes an a link and removes the href link and the text inside the &lt;a href=&quot;http://draft.blogger.com/post-create.g?blogID=6468582636720486878&quot;&gt;&lt;/a&gt;. It allows for empty links as well as links without href&#39;s. The regex return matches are as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;match 1 is whether single or double quotes were used, this is required for later on in the regex and is not usual after the regex is run&lt;/li&gt;&lt;li&gt;match 2 contains the href link&lt;/li&gt;&lt;li&gt;match 3 contains the text between the &amp;lt;a&amp;gt;&amp;lt;/a&amp;gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Things to consider:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The regex matches anything after &amp;lt;a&amp;gt; until it hits &amp;lt;/a&amp;gt;&lt;/li&gt;&lt;li&gt;Between the href=&quot;&quot; it looks for a closing quote (that matches the quote used to start it), a space or another html property. Therefore, I recommend checking the end of the url for a quote or space before working with it.&lt;/li&gt;&lt;li&gt;It will NOT match newlines that are in the link anywhere. If you want to, add a s after the i at the end.&lt;/li&gt;&lt;li&gt;It works with PHP 5.3. I have not tested other versions.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a href=&quot;http://regex.powertoy.org/?pat=m/%5C%3Ca.*%3Fhref%3D%28%27%7C%5C%22%29%28.*%3F%29%28%3F%3A%28%3F%3C%21%5C%5C%29%5C1%7C%5Cw+%28%3F%3D%5C%3D%29%7C.%28%3F%3D%5Cs%29%29%5B%5E%5C%3E%5D*%3F%3E%28.*%3F%29%28%3F%3A%5C%3C%5C/%29%28%3F%3D%5Ba%5D%29.*%3F%28%3F%3D%5C%3E%29%5C%3E/gi&amp;syn=perlSyntax&amp;anim=0&amp;rep=&amp;in=%3Ca%20href%3D%22http%3A//devolf.com/%22%3Enormal%3C/a%3E%0A%3Ca%20%0Ahref%3D%22http%3A//devolf.com/%22%3ENO%20NEW%20LINES%3C/a%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/%3E%22%3Enormal%3C/a%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/%5C%22text%22%3Eescaped%20quotes%20inside%3C/a%20blah%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/%22%20style%3D%22display%3Ablock%3B%22%20%3Estyle%20after%3C/a%3E%0A%3Ca%20href%3D%27http%3A//devolf.com/text%27%20%3Esingle%20quotes%3C/a%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/%20text%22%20%3Espace%20inside%20a%20url%3F%21%3F%3C/a%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/text%27%20%3Emessed%20up%20closing%20%3C/p%3C/a%3E%0A%3Ca%20href%3D%22http%3A//devolf.com/text%27%20style%3D%22display%3Ablock%3B%22%20%3Emessed%20up%20closing%20href%20with%20another%20property%3C/a%3E&quot;&gt;Examples of matches&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/2723149274225076227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=2723149274225076227' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/2723149274225076227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/2723149274225076227'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/02/perfect-regex-for-removing-links-when.html' title='Perfect regex for removing links when parsing HTML'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6468582636720486878.post-7105026748507082791</id><published>2010-02-07T10:49:00.001-05:00</published><updated>2010-02-07T18:55:58.220-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="internet"/><category scheme="http://www.blogger.com/atom/ns#" term="twurla"/><title type='text'>PHP and twURLa</title><content type='html'>A few weeks ago I started work on a project, twURLa. Basically, it is a site that tracks domains on Twitter and ranks them. Over the course of the few weeks, I learned a lot about PHP performance and it has been very beneficial, yet stressful. Here are a few things I learned:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sockets are awesome, streams suck&lt;/li&gt;&lt;li&gt;Non-blocking is annoying&lt;/li&gt;&lt;li&gt;Debugging is very hard with very unpredictable data&lt;/li&gt;&lt;li&gt;JSON is better than serialize&lt;/li&gt;&lt;li&gt;Disks are extremely slow&lt;/li&gt;&lt;li&gt;A simple VPS can power twURLa&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Basically, we started out using streams to connect to all the sites we process, which ended up not being fast enough at all! After switching to sockets, I had a lot more control and I was able to get 1 PHP script to process hundreds of &amp;nbsp;URLs per second. Throughout the process, debugging was difficult with our test data being a stream of Tweets from Twitter. What we did was save portions of the feed and then I would manually process them and compare to what the script says. The thing is: it took me an hour to process what the script did in 2 seconds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Our VPS is powered by Fivebean. Fivebean has been extremely helpful and without them twURLa would not be where it is now. We had a very low budget and Fivebean allowed us to work around this and get our site up and running without trouble. Their support is very&amp;nbsp;knowledgeable&amp;nbsp;and fast; the average response time was 10-15 minutes.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;James Hartig</content><link rel='replies' type='application/atom+xml' href='http://www.jhartig.com/feeds/7105026748507082791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6468582636720486878&amp;postID=7105026748507082791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7105026748507082791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6468582636720486878/posts/default/7105026748507082791'/><link rel='alternate' type='text/html' href='http://www.jhartig.com/2010/02/php-and-twurla.html' title='PHP and twURLa'/><author><name>James Hartig</name><uri>http://www.blogger.com/profile/12625080305674857906</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/-qRYznoWD1G8/UvMVy6X7aLI/AAAAAAAAMpM/-C6ENmt4I4w/s1600/*'/></author><thr:total>0</thr:total></entry></feed>