<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>ShiftB / Brandon Leonardo</title>
    <link>http://shiftb.com/index.php/site/index/</link>
    <description>something clever goes here</description>
    <dc:language>en</dc:language>
    <dc:creator>brandon@shiftb.com</dc:creator>
    <dc:rights>Copyright 2011</dc:rights>
    <dc:date>2011-01-04T17:34:16+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Changing your hostname in Linux</title>
      <link>http://shiftb.com/site/changing_your_hostname_in_linux/</link>
      <guid>http://shiftb.com/site/changing_your_hostname_in_linux/#When:17:34:16Z</guid>
      <description>It&#8217;s actually quite simple.&amp;nbsp; You can change the hostname by using the hostname command:



hostname [new hostname]



However, this will be reset when the machine reboots. To permanently change the hostname you need to edit the /etc/hostname and /etc/hosts files. Note: If you don&#8217;t edit the /etc/hosts file, you could cause some problems using apt&#45;get.</description>
      <dc:subject></dc:subject>
      <dc:date>2011-01-04T17:34:16+00:00</dc:date>
    </item>

    <item>
      <title>Grinding for Easier Gem Installs</title>
      <link>http://shiftb.com/site/grinding_for_easier_gem_installs/</link>
      <guid>http://shiftb.com/site/grinding_for_easier_gem_installs/#When:23:15:22Z</guid>
      <description>I rarely use the rdocs or ri docs that build with gems when you install them, as it&#8217;s usually easier for me to just search it online.&amp;nbsp; I get tired of trying to remember the command line option to not generate the docs, so I created an alias I thought I&#8217;d share with everyone.

For example, in Mac OS X, include this code in your ~/.bash_login file:

alias grind=&#39;gem install&amp;nbsp;&#45;&#45;no&#45;rdoc&amp;nbsp;&#45;&#45;no&#45;ri&#39;

Then, when you want to install a gem (i.e. rails), instead of calling &#8216;gem install rails &#8212;no&#45;rdoc&#8212;no&#45;ri&#8217;, use:

grind rails</description>
      <dc:subject>Programming, Rails</dc:subject>
      <dc:date>2010-03-21T23:15:22+00:00</dc:date>
    </item>

    <item>
      <title>How to View Your Local DataStore Data in Google App Engine</title>
      <link>http://shiftb.com/site/how_to_view_your_local_datastore_data_in_google_app_engine/</link>
      <guid>http://shiftb.com/site/how_to_view_your_local_datastore_data_in_google_app_engine/#When:19:35:03Z</guid>
      <description>I couldn&#8217;t find a local DataStore Data Viewer anywhere. After a lot of searching I found that it&#8217;s actually pretty simple.

Start up your application
Point your browser to: http://localhost:8080/_ah/admin/

I haven&#8217;t tried this with the Python version of App Engine, but I know it works on Java.
Updated: It does work with the Python version of App Engine.
Read the whole discussion where I found the solution to this issue.</description>
      <dc:subject>Programming</dc:subject>
      <dc:date>2009-10-05T19:35:03+00:00</dc:date>
    </item>

    <item>
      <title>The Ubiquitous Kindle</title>
      <link>http://shiftb.com/site/the_ubiquitous_kindle/</link>
      <guid>http://shiftb.com/site/the_ubiquitous_kindle/#When:15:00:03Z</guid>
      <description>As a Kindle user I’ve realized that Amazon needs to make Kindle a platform, not a product.&amp;nbsp; A product will come and go, but a platform creates longevity. Amazon knows this as they&#8217;ve already open sourced a lot of 
the Kindle source code. Although, they were required to do this as part of the license of the Linux kernel from which the Kindle is based.&amp;nbsp; Amazon has also released a Kindle application for iPhone and iPod Touch.&amp;nbsp; I&#8217;ve used this and am amazed at how well it works.&amp;nbsp; The Whispersync automatically updates your reading locations so you can pick up where you left off no matter what device you&#8217;re using.&amp;nbsp; This is a great start but Amazon needs to take this further by extending it to as many systems as possible. 


I&#8217;ve already run into situations where I would like to be able to look up something in my Kindle library, and while I don&#8217;t have my Kindle or iPod touch with me I do have my BlackBerry with me.&amp;nbsp; If the Kindle application ran on Blackberry, Windows Mobile, Android, Mac OS X, and Windows, then one could access their library no matter their location.&amp;nbsp; Amazon needs to make Kindle a completely ubiquitous e&#45;reader application, available on any system.&amp;nbsp; At this point, the existing Kindle reader would become their flagship product and the best way to experience reading a book on Kindle.&amp;nbsp; But it shouldn&#8217;t be the only way.&amp;nbsp; These Kindle reader applications will also serve as a gateway drug: get people used to reading their e&#45;books on the Kindle platform, and they will eventually want the Amazon device.&amp;nbsp; This also opens up and makes quite likely the possibility of Amazon licensing their software to other manufacturers.&amp;nbsp; If Amazon&#8217;s book store became THE standard for purchasing books, and the Kindle platform the standard for reading them across any system, their future would be quite bright. 




Thoughts? Suggestions? Criticisms? Leave a comment!</description>
      <dc:subject>Tech</dc:subject>
      <dc:date>2009-08-03T15:00:03+00:00</dc:date>
    </item>

    <item>
      <title>Grails Webflow Scope and View Issues</title>
      <link>http://shiftb.com/site/grails_webflow_scope_and_view_issues/</link>
      <guid>http://shiftb.com/site/grails_webflow_scope_and_view_issues/#When:08:34:27Z</guid>
      <description>&amp;nbsp; I ran into an annoying problem while developing a Grails application.&amp;nbsp; I could create a message in flash scope and display it in view in a normal controller, but that same flash message would not appear if I was inside a webflow.&amp;nbsp; The variable would just be null.&amp;nbsp; I finally found the reason for this after reading a ton of Grails documentation. Apparently, a webflow in Grails actually merges all the flash, flow, and conversation scoped variables into the Model view before rendering it.&amp;nbsp; So you shouldn&#8217;t reference variables in the view by scope, instead you should reference them just by name.

For example, instead of writing this in your GSP view:

&amp;lt;g:if test=&quot;${flash.message}&quot;&amp;gt;
&amp;lt;div class=&quot;message&quot;&gt;${flash.message}&amp;lt;/div&amp;gt;
&amp;lt;/g:if&amp;gt;

You would just write this:

&amp;lt;g:if test=&quot;${message}&quot;&amp;gt;
&amp;lt;div class=&quot;message&quot;&amp;gt;${message}&amp;lt;/div&amp;gt;
&amp;lt;/g:if&amp;gt;</description>
      <dc:subject>Grails, Programming</dc:subject>
      <dc:date>2009-07-31T08:34:27+00:00</dc:date>
    </item>

    <item>
      <title>Amazon Needs a Kindle App Store</title>
      <link>http://shiftb.com/site/amazon_needs_a_kindle_app_store/</link>
      <guid>http://shiftb.com/site/amazon_needs_a_kindle_app_store/#When:17:20:51Z</guid>
      <description>Kindle + App Store = Great Success My lust for the Kindle 2 spanned over a period of several months.&amp;nbsp; (I&#8217;m a sinner: see #10.) I can now proudly state that I am an excited and very grateful owner of the Kindle 2.&amp;nbsp; As it turns out, the cliches are true: 1) good things come to those who wait; and 2) good things come in small packages.&amp;nbsp; After using it for a couple of weeks I can say that it&#8217;s an amazing device, and if you really want to know more about it you can find tons of reviews everywhere. I’m not going to lie. I tote my Kindle 2 around in its genuine leather M&#45;Edge case, and the stares, questions, and compliments just won’t stop. You can see the wheels turning in the minds of those who are now in the position that I formerly held; they are attempting to justify the price and make the purchase. I&#8217;ll also say that the amount of reading I accomplish has gone up dramatically, because it is much more convenient. 

Kindle App Store 

After playing with my Kindle 2 for a few days, I realized that Amazon desperately needs an Application Store.&amp;nbsp; I discovered the hidden Minesweeper Easter egg (hit alt&#45;shift&#45;M while on the Home screen) while reading a review of the Kindle, and after playing the game I realized that if the Kindle can execute this app it can execute others. Which led me to conclude, that an App Store, with the right apps, would be hugely successful for the Kindle.&amp;nbsp; I don&#8217;t think the Kindle App Store needs to be the 70,000 app goliath that the iTunes App Store is, but if there was a very selective catalog of apps that made sense for the Kindle it would work.&amp;nbsp; People are already accustomed to paying for books, magazines, and blogs on their Kindles, so they could be very receptive to paying for other types of items, like apps.&amp;nbsp; Obviously, not every app would work on the kindle, but there are a lot that would. 


The only requirements for an app to work for the Kindle is that it needs to be able to run in grayscale mode, it should not require instantaneous input, and it should not be processor intensive.&amp;nbsp; While these requirements limit the types of applications, they also ensure that any app created for the Kindle would actually work in that medium.&amp;nbsp; Games, such, as chess, checkers, Mancala and Sodoku, would be insanely popular and a great way to kill some time. Student centered applications, like flash cards, and literary applications, such as choose your own adventure novels, also make sense.&amp;nbsp; Another app that would be popular is a Bible Study application. Right now on the Kindle trying to navigate the Bible is horrendous.&amp;nbsp; You can&#8217;t go to a specific chapter and verse because the table of contents won’t perform this action. Yes, you can search; it&#8217;s just not the same.&amp;nbsp; If it was an application, then you could specify exact chapters and verses, you could save notes (similar to how Kindle lets you do now for regular novels), and you could even have a daily devotion app. 


This is only scratching the surface as there are a host of other possibilities for apps. There&#8217;s no way I could possibly come up with all of them, and neither could Amazon.&amp;nbsp; This is why Amazon should strongly consider opening up the Kindle to apps from other developers.&amp;nbsp; An added benefit is a new revenue stream from the App Store, and also increased value in what the Kindle can do for its users.


Thoughts? Suggestions? Criticisms? Leave a comment!</description>
      <dc:subject>Tech</dc:subject>
      <dc:date>2009-07-30T17:20:51+00:00</dc:date>
    </item>

    <item>
      <title>Why Twittergate was good for the web</title>
      <link>http://shiftb.com/site/why_twittergate_was_good_for_the_web/</link>
      <guid>http://shiftb.com/site/why_twittergate_was_good_for_the_web/#When:08:21:54Z</guid>
      <description>I realize I&#8217;m a little late to the party, but nevertheless with all the hullaballoo around TwitterGate finally settling down, I decided to write my thoughts on why the exposure of Twitter’s inside information is good for the web.

The truth of the matter is that while a handful of interesting documents were published, no one was harmed during the revelation of Twitter&#8217;s internal memos.&amp;nbsp; No names were published, no job interviewees were published: nothing that would kill the company was published.&amp;nbsp; For the most part it was a victimless crime.&amp;nbsp; Twitter was a little embarrassed, but Twitter is quite the resilient &#8220;little&#8221; company and will bounce back. As far as internal negotiations are concerned, Twitter is the hottest property on the web right now. Any potential partners who were offended will stick around and still try to strike a deal, or they&#8217;ll move on and the next eager establishment on the list will happily take the offended party&#8217;s place. I&#8217;m not going to debate the ethics of TechCrunch publishing Twitter’s documents, but I do feel that overall TechCrunch was a lot more selective about what they published than they needed to be.

While I don&#8217;t condone the hacking of Twitter&#8217;s internal documents, you have to wonder how they could let this happen to themselves twice in the last couple months.&amp;nbsp; The first time Twitter was hacked should have been a learning experience.&amp;nbsp; The second time is Twitter&#8217;s fault as there was really no excuse for them to let their guard down a second time.&amp;nbsp; This event was a serious wakeup call for Twitter, and it seems as if they finally were forced to learn a very public lesson—again. Since then, they&#8217;ve implemented more stringent privacy policies as they should have done back in May. Twittergate also brought to the forefront a vulnerability in Google Docs and the entire Google email system.&amp;nbsp; More public knowledge and conversation about security can only be good in the long run.

This was not just a wakeup call for Twitter, but for every web startup and web savvy individual in general.&amp;nbsp; This made anyone with an online account think about the security of their own account(s), and fostered conversation about security.&amp;nbsp; It also forced Google to encourage users to make sure their secondary email address was current and up to date.&amp;nbsp; The general consensus of many of the comments on TechCrunch and the web in general shows that Twittergate allowed individuals to remove their rose colored glasses and take a good look at how negligence breeds embarrassment and blind attacks. I can personally say that I&#8217;ve changed passwords on all of my web related accounts and have begun to lie on my security questions. Mother&#8217;s maiden name? Can&#8217;t find my lie on Google.

It can be concluded that Twitter&#8217;s public embarrassment has made the web safer for those who choose to learn lessons from Twittergate.&amp;nbsp; If you didn&#8217;t learn from their mistakes, chances are you will repeat them.</description>
      <dc:subject>News, Tech, Twitter</dc:subject>
      <dc:date>2009-07-17T08:21:54+00:00</dc:date>
    </item>

    <item>
      <title>TwitStat.us</title>
      <link>http://shiftb.com/site/twitstat.us/</link>
      <guid>http://shiftb.com/site/twitstat.us/#When:06:24:27Z</guid>
      <description>I&#8217;m happy to announce that we just pushed TwitStat.us live! It&#8217;s an easy way to create a Twitter Search badge to stick on your website.&amp;nbsp; It&#8217;s genesis was in a quick one&#45;off type widget I built for myself but kind of shelved.&amp;nbsp; I showed it to my friend Ryan and he just kind of ran with it and so here we are.&amp;nbsp; It&#8217;s very customizable and very lightweight (minified at &amp;lt;2kb).

Let me know if you use it, what you think of it, etc&#8230; Enjoy!</description>
      <dc:subject>News, Twitter</dc:subject>
      <dc:date>2009-07-13T06:24:27+00:00</dc:date>
    </item>

    <item>
      <title>Forcing Grails GORM Relationship Collection Types</title>
      <link>http://shiftb.com/site/forcing_grails_gorm_relationship_collection_types/</link>
      <guid>http://shiftb.com/site/forcing_grails_gorm_relationship_collection_types/#When:19:05:46Z</guid>
      <description>When you define a has&#45;many relationship on a domain model in Grails, it automatically creates the collection for you and the getters/setters to make it a property. By default, doing something like this:


class Author implements Serializable {
    String name

    static def hasMany = [books: Book]
}


creates a java.util.Set called books in your model that you can access using author.books.&amp;nbsp; A problem arises when you don&#8217;t want that collection to be a plain old set (P.O.S.)&amp;nbsp; What if you want it to be a SortedSet or possibly a list so you can access elements like author.books[1]?&amp;nbsp; It&#8217;s easy to force GORM to create that collection as something other than a Set: just create a property with the same name of the type of collection class you want.&amp;nbsp; So our previous example becomes:


class Author implements Serializable {
    String name

    List books
    static def hasMany = [books: Book]
}


Now author.books is a List instead of a Set.&amp;nbsp; It&#8217;s as simple as that.</description>
      <dc:subject>Grails, Programming</dc:subject>
      <dc:date>2009-07-02T19:05:46+00:00</dc:date>
    </item>

    
    </channel>
</rss>
