<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Apreche.net &#187; Technology</title>
	<atom:link href="http://www.apreche.net/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.apreche.net</link>
	<description>One geeks thoughts on the geekeries of the world.</description>
	<lastBuildDate>Mon, 16 Jan 2012 23:08:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tutorial: Programatically Post a Status Update to Your Facebook Page</title>
		<link>http://www.apreche.net/tutorial-programatically-post-a-status-update-to-your-facebook-page/</link>
		<comments>http://www.apreche.net/tutorial-programatically-post-a-status-update-to-your-facebook-page/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 17:00:31 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1279</guid>
		<description><![CDATA[In my last post, To OAuth or Not to OAuth, I said I would write a complete tutorial on how to use the Facebook API to post status updates to your own Facebook page. This is that tutorial. Get ready, &#8230; <a href="http://www.apreche.net/tutorial-programatically-post-a-status-update-to-your-facebook-page/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last post, <a title="To OAuth or Not to OAuth" href="http://www.apreche.net/to-oauth-or-not-to-oauth/">To OAuth or Not to OAuth</a>, I said I would write a complete tutorial on how to use the Facebook API to post status updates to your own Facebook page. This is that tutorial. Get ready, it&#8217;s a doozy.<span id="more-1279"></span></p>
<h2>Definitions</h2>
<p>Before we begin there are some definitions I have to set down.</p>
<dl>
<dt>Facebook Account</dt>
<dd>The actual Facebook account you use to talk to friends and family.</dd>
<dt>Facebook Page</dt>
<dd>A separate page you have setup for your brand or online community.</dd>
<dt>Facebook Application</dt>
<dd>An application you create which is basically just an set of IDs you need to connect to the Facebook API.</dd>
</dl>
<h2>Setup</h2>
<p>Before we begin you have to create your facebook account, page and application. I&#8217;ll assume you already have an account, or know how to create one. That&#8217;s clearly outside the scope of this tutorial. Make sure you remain logged into your Facebook account throughout this entire process.</p>
<p>If you don&#8217;t already have one, you need to create a Facebook page. Go to <a title="https://www.facebook.com/pages/create.php" href="https://www.facebook.com/pages/create.php">https://www.facebook.com/pages/create.php</a>, and follow the instructions. When you are all done you will end up looking at your new page. It will have a URL that will have the following format.</p>
<pre>https://www.facebook.com/pages/PAGE_NAME/PAGE_ID_NUMBER</pre>
<p>Save the PAGE_NAME and PAGE_ID_NUMBER. If you already have a page, visit it and look at the URL for the name and/or id number. Make sure that your Facebook account has permission to post status updates on that page. I&#8217;ve only tested this on pages where my account is the page administrator. Your mileage may vary otherwise, but I see no reason it wouldn&#8217;t work as long as you have the necessary permissions.</p>
<p>The next step is to create a Facebook application. To do that go to <a title="https://www.facebook.com/developers/createapp.php" href="https://www.facebook.com/developers/createapp.php">https://www.facebook.com/developers/createapp.php</a> and follow the instructions. You will go through a configuration process. You can leave all settings as the defaults. Just save the Application ID and Application Secret, and you will be good to go.</p>
<p style="text-align: center;"><a href="http://www.apreche.net/wp-content/uploads/2011/07/createapplication.png" target="_blank"><img class="size-full wp-image-1284 aligncenter" title="Creating a Facebook Application" src="http://www.apreche.net/wp-content/uploads/2011/07/createapplication.png" alt="Creating a Facebook Application" width="971" height="335" /></a></p>
<h2>Get the Access Tokens Through OAuth</h2>
<p>Now it&#8217;s time for the tricky parts. You have to give the application permission to access your account. Take the URL below and replace both instances of APP_ID with the ID of the application you just made.</p>
<pre>https://www.facebook.com/dialog/oauth?client_id=APP_ID&amp;
redirect_uri=https://www.facebook.com/apps/application.php?
id=APP_ID&amp;scope=manage_pages,offline_access,publish_stream</pre>
<p>Visit this URL in your browser and you will get a dialog box that will ask you whether to allow or deny granting permissions on your account to the application. The page needs to redirect somewhere after you click allow, and it will only allow you to redirect to a page your application owns. That&#8217;s why we put the URL of your application&#8217;s profile page as the redirect_uri.</p>
<p>The three permissions we are granting are manage_pages, offline_access, and publish_stream. Manage_pages grants the application access to pages which your account has access to. Offline_access means that the application will get an access token that never expires so we never have to do this complicated process ever again. Publish_stream allows the application to post new updates to your account, or any other place your account is able to post updates to, including the page we just created.</p>
<p>Click the allow button. Immediately go to the location bar of your browser and copy and paste the URL to a text editor. Do not lose it. You will see that the URL looks something like this.</p>
<pre>https://www.facebook.com/apps/application.php?id=APP_ID
&amp;code=CRAZY_LONG_CODE</pre>
<p>That crazy long code is the magic we need. Take that code and use it to create yet another URL in the format that follows. Replace APP_ID with the Application ID as usual. Replace APP_SECRET with the Application Secret. Lastly, put that CRAZY_LONG_CODE where it belongs. Paste the resulting gigantic URL into the location bar of your browser and visit it.</p>
<pre>https://graph.facebook.com/oauth/access_token?client_id=APP_ID
&amp;redirect_uri=https://www.facebook.com/apps/application.php?
id=APP_ID&amp;client_secret=APP_SECRET&amp;code=CRAZY_LONG_CODE</pre>
<p>If you did everything right you should now be looking at a big beautiful access_token. We will call this the account access token. It gives your facebook application permission to access your account. If you just want to post status updates to your personal account, you can take this access token to the next section. Otherwise, proceed to get the page access token.</p>
<p>In order to get the page access token, we need to visit yet another URL, it looks like this.</p>
<pre>https://graph.facebook.com/USER_ID/accounts/?
access_token=ACCOUNT_ACCESS_TOKEN</pre>
<p>The USER_ID is the user id of your Facebook account. Mine is apreche because my Facebook profile can be found at <a title="https://www.facebook.com/apreche" href="https://www.facebook.com/apreche">https://www.facebook.com/apreche</a>. You might not have a profile URL, in which case you can use a numerical ID instead. If your personal profile is at a URL such as https://www.facebook.com/profile.php?id=NUMBERS then use the NUMBERS as your USER_ID. Take the account access token we got from the previous step and put it in place of ACCOUNT_ACCESS_TOKEN.</p>
<p>Now visit this URL in your browser. You are going to see some slightly complicated text that is in a format known as <a title="http://www.json.org/" href="http://www.json.org/">JSON</a>. It should look something like this.</p>

<div class="wp_syntax"><div class="code"><pre class="json" style="font-family:monospace;">{
   &quot;data&quot;: [
      {
         &quot;name&quot;: &quot;PAGE_NAME&quot;,
         &quot;access_token&quot;: &quot;PAGE_ACCESS_TOKEN&quot;,
         &quot;category&quot;: &quot;Website&quot;,
         &quot;id&quot;: &quot;PAGE_ID&quot;
      },
      {
         &quot;name&quot;: &quot;APPLICATION_NAME&quot;,
         &quot;access_token&quot;: &quot;APPLICATION_ACCESS_TOKEN&quot;,
         &quot;category&quot;: &quot;Application&quot;,
         &quot;id&quot;: &quot;APPLICATION_ID&quot;
      }
   ]
}</pre></div></div>

<p>Depending on how many different pages and applications you have on your Facebook account, you may see more than this. Regardless, you are only interested in one thing. Find the section with the PAGE_NAME of the page you want to post to and extract the PAGE_ACCESS_TOKEN from that section. This is the token we have been looking for. Save it and keep it safe.</p>
<h2>Making the Post</h2>
<p>Now that we have the page access token, we can finally do the actual status update. I will use <a title="http://curl.haxx.se/" href="http://curl.haxx.se/">curl</a> in my examples since that is language agnostic. All you really need to do is make an HTTP POST. In Python you could use <a title="http://docs.python.org/library/urllib.html" href="http://docs.python.org/library/urllib.html">urllib</a>. You could also use an appropriate Facebook library for your language, such as the <a title="https://github.com/facebook/php-sdk" href="https://github.com/facebook/php-sdk">Facebook PHP SDK</a>. It&#8217;s up to you to learn how to get this done in your programming language of choice.</p>
<p>Here is what a complete POST looks like using curl in the shell. Remember to put the PAGE_NAME and PAGE_ACCESS_TOKEN where they belong.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ curl <span style="color: #660033;">-F</span> <span style="color: #007800;">access_token</span>=<span style="color: #ff0000;">&quot;PAGE_ACCESS_TOKEN&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">message</span>=<span style="color: #ff0000;">&quot;testing&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">picture</span>=<span style="color: #ff0000;">&quot;http://i.imgur.com/2uLkT.jpg&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">link</span>=<span style="color: #ff0000;">&quot;http://frontrowcrew.com&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">name</span>=<span style="color: #ff0000;">&quot;Front Row Crew.com&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">caption</span>=<span style="color: #ff0000;">&quot;FRC In the house!&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">description</span>=<span style="color: #ff0000;">&quot;Homepage of GeekNights and other fine free entertainment.&quot;</span> \
<span style="color: #660033;">-F</span> <span style="color: #007800;">source</span>=<span style="color: #ff0000;">&quot;http://www.youtube.com/e/NKWpGJ4Xhw8?autoplay=1&quot;</span> \
https:<span style="color: #000000; font-weight: bold;">//</span>graph.facebook.com<span style="color: #000000; font-weight: bold;">/</span>PAGE_NAME<span style="color: #000000; font-weight: bold;">/</span>feed</pre></div></div>

<p>You don&#8217;t actually have to include all of that information with every post. Just include the information that is relevant. I have simply included all of the possible information to demonstrate a complete example. Here is what the post above will look like on your Facebook page.</p>
<p style="text-align: center;"><a href="http://www.apreche.net/wp-content/uploads/2011/07/example-facebook-post.png" target="_blank"><img class="size-full wp-image-1299 aligncenter" title="Example Facebook Post" src="http://www.apreche.net/wp-content/uploads/2011/07/example-facebook-post.png" alt="Example Facebook Post" width="507" height="180" /></a></p>
<p>The avatar and the username on the posting are going to be the avatar and username of the page itself. You can&#8217;t change those from post to post.</p>
<p>The word &#8220;testing&#8221; that you see there is the message of the post. Most of the time I imagine you are going to be posting just messages without any other information.</p>
<p>After that is a separate section with the link, picture, video, and everything else. Depending on which combination of information you post, that section will work differently. You only get one of these sections per post, so depending on what you want to do, you might need to stretch it out over multiple postings. If your post only contains a message, this section won&#8217;t exist at all.</p>
<p>The link field controls the URL where the user will be sent if they click on the blue text at the top of the section. The name field controls the blue text itself. If you don&#8217;t specify a name then Facebook will visit the link and figure out a name to use. In this example the link is http://frontrowcrew.com and the name is &#8220;Front Row Crew.com&#8221;. If you know HTML you can think of it like a basic &#8220;A&#8221; tag, since that is what it is.</p>
<pre>&lt;a href="LINK_GOES_HERE"&gt;NAME_GOES_HERE&lt;/a&gt;</pre>
<p>The caption controls that light gray text directly beneath the link. The description controls the block of text that is one space beneath the caption. If you leave either of these blank then Facebook will visit the link in question and try to figure out a caption and description on its own.</p>
<p>The picture is where things start to get a little bit complicated. First of all, if you specify a link without a picture, then Facebook will actually pick an appropriate picture based on the link, just like it does with the name, caption, and description. Since it will probably pick a bad picture, I suggest you set the picture manually whenever specifying a link. The picture is just a link to any image on the web. Clicking on the picture thumbnail will take the user to the URL of the link.</p>
<p>You can actually specify a picture all on its own without any link at all. In that case clicking on the picture will take the user to see the picture in its full size. The caption, and description will be extremely barebones unless you manually specify them.</p>
<p>Source may as well be called video instead of source. It needs to be a URL directly linking to a video file, usually a flash video. I&#8217;m pretty confident other HTML5 video formats will work, but I haven&#8217;t tested them myself. Don&#8217;t make the mistake of setting the source to a video&#8217;s page like this.</p>
<pre>http://www.youtube.com/watch?v=NKWpGJ4Xhw8</pre>
<p>That won&#8217;t work. You have to set the source to be the actual video file as in the example.</p>
<pre>http://www.youtube.com/e/NKWpGJ4Xhw8?autoplay=1</pre>
<p>You are on your own on how to structure these links on other video sites besides YouTube. I think I can safely assume the vast majority of people are using YouTube.</p>
<p>If a source is set without a picture, you may get an error if Facebook can&#8217;t figure out a video thumbnail on its own. In this case, you must specify a picture to successfully make the post. The picture will be used as the thumbnail. Clicking on the picture will cause the video to play. For YouTube the player is embedded within Facebook itself. As always, your mileage may vary with other video formats and sites.</p>
<p>Now, Facebook is actually pretty smart. Let&#8217;s say you specify just a link, and that link goes directly to a YouTube page. Facebook will automatically figure out the source and picture on its own, assuming you do not manually override them.</p>
<p>Lastly, what if you specify absolutely everything as in the example above? Obviously you will have complete manual control over all of the text appearing in the post as well as the picture. Clicking on the picture will play the source video. Clicking the blue text link will always go to the specified link. In this way you can actually link to two different things. Clicking on the picture will play a video, but clicking the link can take people to your blogpost about the video or other related place on the web.</p>
<p>Also, it should be noted that there is nothing forcing the picture and video to match. You can post a thumbnail for a video that is not related to the video at all. Users might be very confused if you abuse it, but there are legitimate reasons for doing so. You might just a brand logo as a thumbnail on a video which does not include that logo.</p>
<p>One last thing. The post will always return some information formatted in JSON. If it fails there will be an error for you to read. If it success there will be an ID that is the ID of the status update you just posted. You can save and use that ID for later if you want to edit or delete the post.</p>
<h2>Conclusion</h2>
<p>Figuring this out cost me many hours. If this saves even one person from that struggle, then it was worth it.</p>
<p>I hope this can also serve as an example to other people who write technical tutorials or howtos. You can&#8217;t just skip over details. You need to include every step and explain the what, why, and how of all those steps. Otherwise readers have to go to ten different sites to piece together the complete picture like I did. Even worse, users might blindly copy and paste without understanding what they are doing.</p>
<p>And of course, I hope this shows just how much of a pain OAuth can be when it is used unnecessarily. With my suggestion of every account also being an application, many of the OAuth steps would be eliminated without sacrificing any security or privacy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/tutorial-programatically-post-a-status-update-to-your-facebook-page/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>To OAuth or Not to OAuth</title>
		<link>http://www.apreche.net/to-oauth-or-not-to-oauth/</link>
		<comments>http://www.apreche.net/to-oauth-or-not-to-oauth/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 23:22:42 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1269</guid>
		<description><![CDATA[You&#8217;re feeling some pains, so you go see a doctor. The doctor sends you to have some tests done at a lab on the other side of town. The results come in a week later and you have to get &#8230; <a href="http://www.apreche.net/to-oauth-or-not-to-oauth/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;re feeling some pains, so you go see a doctor. The doctor sends you to have some tests done at a lab on the other side of town. The results come in a week later and you have to get those results into your doctor&#8217;s hands. You could just go back across town and get them, but that&#8217;s a pain. It would be much easier if your doctor could get the results directly from the lab. It would be even better if they could be transferred digitally.</p>
<p>But now we run into problems of security. What if someone else calls the lab impersonating your doctor and gets your test results? What if you change doctors and the lab releases the test results to your old doctor against your wishes? What if the lab is full of jerks and they send all sorts of crap to your doctor in your name. We have this exact same problem on the Internet, and that is why <a title="OAuth" href="https://secure.wikimedia.org/wikipedia/en/wiki/OAuth">OAuth</a> was created.<span id="more-1269"></span></p>
<p>For decades the most popular means of authentication on computers has been usernames and password combinations. You want to prove to some system that you are a certain person, so you enter in a secret piece of information that only you know to prove you are you. Now that you have identified yourself the system will allow you to engage in activities permitted to your account.</p>
<p>Now let&#8217;s say you have a newsletter system, and you want it to send out emails on your behalf. Even to this day a very popular way of doing this is to give the newsletter system the username and password to your email account. The newsletter system will authenticate on your behalf, so your email server will think that the newsletter system is you. That&#8217;s what authentication is all about. As far as your email server is concerned the newsletter system <em>is you</em>, and has permission to do everything you do, including changing your password or deleting your account.</p>
<p>It&#8217;s obvious that this is a problem. Even though that goes against everything you&#8217;ve ever learned about security and passwords, people still do things this way. You should never tell your password to any other person ever, not even your closest and most trusted people like spouses. You definitely shouldn&#8217;t tell it to other computer systems. You should only ever send a password to the system for which it is intended. Your email password is for you, your email server, and that&#8217;s it.</p>
<p>Well, I made this fun game on the web, and my users want to tweet out their high scores. I could just suggest they do it with copy/paste, but that&#8217;s like driving back and forth across town to get the test results. Instead, I want my game to do the tweeting on behalf of the users for the greatest efficiency. Now I could, and many systems did, just ask for the users to give me their twitter usernames and passwords. It is possible I could be honest and not abuse that, but do you trust me? Even if I was an entirely client-side application, and your password is being sent directly to Twitter, this game is not officially endorsed by Twitter. How do you know I&#8217;m not secretly sending your password to my own servers or doing something else shady?</p>
<p>Thankfully we have solved this problem, and the solution is OAuth. OAuth is slightly complicated, but it gets the job done. Let me explain it as simply as I can using our high score game tweet example. We&#8217;ll call the game shootyguy.</p>
<p>You have a Twitter account, and I want you to let shootyguy send tweets on that account. First shootyguy gets its own special twitter application account. That account has an ID and a secret, which is basically the same as a username and password. Now shootyguy can authenticate with Twitter and prove that it is indeed shootyguy.</p>
<p>When you get a high score for the first time it will give you a link saying &#8220;click here to let me send tweets for you!&#8221; That link is a link to Twitter. It contains shootyguy&#8217;s ID number and a list of the things shootyguy wants you to let it do. In this case the game is only asking permission to send tweets, but it could also ask permission to edit your avatar, change your profile, etc.</p>
<p>You click on this link and you are sent to Twitter itself. It&#8217;s safe to give your Twitter password to Twitter, obviously. You do so, and Twitter asks you, &#8220;Hey, do you want to let shootyguy do the following things with your account?&#8221; If you say no, nothing will happen. If you say yes, then Twitter will remember that shootyguy has permission to send tweets for you. It will also send shootyguy a special secret password that it can use to act on your behalf. If shootyguy is a popular game, it&#8217;s going to have to remember those secret passwords for every user who has tweeting enabled. As long as the game holds onto these secrets, and you don&#8217;t take permission away from it, it won&#8217;t have to ask permission again. This painful user interface problem of jumping back and forth between web sites only has to happen once ever.</p>
<p>This is what is called authorization. You see, both you and shootyguy authenticate with Twitter to prove you are who you say you are. You are authorized to do whatever you want with your own account. Shootyguy is authorized to send tweets, but nothing else, on a whole bunch of accounts that have granted it permission. Up until relatively recently we didn&#8217;t have authorization, just authentication. Now that we have it, it&#8217;s easy to see why it is so incredibly important.</p>
<p>Perhaps the most important feature of authorization is the ability to deauthorize. Imagine if shootyguy got hacked like the PSN and it had a database full of Twitter passwords. That would be extremely bad. You would have to change your password before hackers started using it. If they had used OAuth, you could just remove authorization for the compromised application, and your account would be perfectly safe. Worst case the hacker starts doing the few things you authorized them to do before you turn them off.</p>
<p>I think I have made it very clear that in cases where you want to give a third party access to one of your accounts, OAuth, or a similar authorization system, is an absolute necessity. Anything less is grossly negligent.</p>
<p>Given that, what is up with the title of this blog post? Shouldn&#8217;t it be &#8220;Always OAuth&#8221;? Well, that seems to be the opinion of many sites out there such as Twitter and Facebook who are forcing OAuth as the only way to interact with their APIs. I can see why they do this. OAuth is more complex to implement, so developers would keep taking the easy way out by collecting passwords if they were not forced to use OAuth. It&#8217;s also next to impossible to educate users on not giving out their passwords.</p>
<p>Yet, there are still those rare occasions when OAuth becomes a huge pain in the ass for no benefit whatsoever. Let&#8217;s turn the tables around a little bit. Let&#8217;s say that we make an official shootyguy twitter account. We want to automatically tweet on that account whenever a player beats the game at shootyguy.com. How does that work?</p>
<p>In this case, we don&#8217;t need to ask the player for authorization. We aren&#8217;t using the player&#8217;s Twitter account. Shootyguy is using its own account. There&#8217;s no benefit to using OAuth in this case. It would just be easier for shootyguy to authenticate with its own username and password, and have full authorization to tweet with its own account.</p>
<p>The problem is that shootyguy is a program, not a person. It can&#8217;t just visit twitter.com and send a tweet. It has to use the API to tweet programmaticaly. But the API forces you to use OAuth no matter what. Since it is a program, and not a person, how can it click the &#8220;Allow&#8221; button in the browser? It can&#8217;t. What you have to do is manually do the OAuth in a browser and collect and save all the secret keys along the way. Then you put all the secret keys on the shootyguy.com server so it can send tweets.</p>
<p>Is it really that hard? No, there are many things that are more difficult, but it&#8217;s still a pain. In a way it makes sense. The shootyguy account is giving permission to the shootyguy.com application to tweet on its behalf. But Twitter is actually pretty simple as far as OAuth goes. If you want to see frustration, try it with Facebook.</p>
<p>Pretend that instead of posting to a shootyguy twitter account, we want to post onto the wall of the official shootyguy Facebook page. Well, a Facebook page isn&#8217;t a Facebook account, or is it? And a Facebook account isn&#8217;t a Facebook app. I&#8217;m going to write a tutorial on every step involved in doing this, but here&#8217;s the TL;DR version. You have to create a facebook account, a page, and an application. You have to authorize the account to post onto the page. Then you have to authorize the application to have a bunch of permissions on the account. Then the application has to use its secret keys on the account to get yet another secret key it can use to access the page.</p>
<p>Again, this is actually a great system when you are using it for what OAuth was designed for. If you want to give the game permission to post on your personal Facebook wall, this is fantastic. For the game to post on its own Facebook wall this is awful.</p>
<p>Of course, my complaining isn&#8217;t for naught. I actually have a solution that doesn&#8217;t require changing OAuth itself in any way. The solution is actually quite simple, and it actually opens the door to more features for users that have been unexplored.</p>
<p>I won&#8217;t hold back, the answer is to make every account also an application that has full authorization of itself. Why are applications and accounts separate entities? Why do I have to make my own Facebook application and connect it to my account? If my account were also an application, it would only need authorization to do things with other accounts, but not as itself. I shouldn&#8217;t have to pretend to be an authorized third party application to post on my own personal Facebook wall through the API.</p>
<p>One side benefit of this is that every user account can be authorized to perform actions on other user accounts. That can be dangerous if people give too much authorization away, but I think it will be very clear to people what is going on. &#8220;Do you want to give your friend joeyjoejoe1337 the ability to edit your profile? Yes or No?&#8221; It&#8217;s not a question too many people are going to get wrong.</p>
<p>While you may not immediately realize it, there are many cases where people will want to say yes. A parent can give their children their own personal private accounts, but can then authorize their own accounts to have a certain amount of access. You could authorize your trusted friends to handle your accounts in case of emergency without giving anyone your passwords. You could have a company account and give many people access to it without sharing a password around the office. You could then easily add and remove authorization as employees come and go. There are many duct tape third party systems that add this functionality for businesses that could be done away with completely if my idea were implemented.</p>
<p>I hope from reading this that you have a good conceptual understanding of the difference between authentication and authorization. I also hope you understand what OAuth is, why we have it, and why it is so great. And though I know it won&#8217;t change anything, I just wanted to complain about the unnecessary complexity that can make OAuth sucky under certain circumstances. If you are building an application, make sure you use it appropriately, and please try out my idea of every account being an application. And remember, never ever give your password for anything to absolutely anyone at any time under any circumstance. It is never necessary. No, not even in that circumstance you just suggested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/to-oauth-or-not-to-oauth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Don&#8217;t Impress Me. Try These Hacks Instead.</title>
		<link>http://www.apreche.net/you-dont-impress-me-try-these-hacks-instead/</link>
		<comments>http://www.apreche.net/you-dont-impress-me-try-these-hacks-instead/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 04:09:11 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1261</guid>
		<description><![CDATA[Recently there have been a lot of computer security attacks. It&#8217;s actually hard to say if they are more frequent now than they have been in the past. What is certain is that they are being publicized more now than &#8230; <a href="http://www.apreche.net/you-dont-impress-me-try-these-hacks-instead/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently there have been a lot of computer security attacks. It&#8217;s actually hard to say if they are more frequent now than they have been in the past. What is certain is that they are being publicized more now than before. Even so, the majority of these attacks are lame. I may agree or disagree with the motivations behind some of them, but they are almost all just pathetic. I am disappointed.<span id="more-1261"></span></p>
<p>Firstly, these attacks are not really all that effective. Defacing web sites? Releasing customer data? That doesn&#8217;t make any difference in the grand scheme. Do you remember viruses like <a title="Ogre Virus" href="http://www.research.ibm.com/antivirus/SciPapers/Chess/PCCOMVIR/note209.html">the ogre</a>? It erased all drives in a computer. When was the last time someone wrote a virus that  actually did serious damage like that? I&#8217;m not aware of any  in recent memory.</p>
<p>Why don&#8217;t we see such harmful attacks anymore? Is it because that sort of attack doesn&#8217;t serve the motivations of the hackers? Is it because our modern systems are properly hardened against these kinds of attacks? Are these attacks happening and not being publicized?</p>
<p>Whatever the reason is, it is both disappointing and encouraging. You see, I can respect this sort of attack in the way that I can respect someone like Mike Tyson. His boxing is a sight to behold, but I have no desire to behold a man having his ear bitten off. You can impress me by writing a virus that turns off CPU fans and forces people to buy new PCs, but I don&#8217;t actually want to see that to happen. That makes the world a worse place by wasting a bunch of valuable resources for no benefit.</p>
<p>Secondly, these attacks lack technological sophistication. SQL injection and DDoS against soft targets? Please. These techniques aren&#8217;t demonstrative of deep technological knowledge. Regardless of my feelings on the motivations or target of an attack, as a technology professional I have a hard time respecting such easy hacks.</p>
<p>Imagine someone who burglarizes an old grandma who left the door unlocked. Even if it was a mean old grandma who needed to be taught a lesson about security, that thief isn&#8217;t going to get love from anyone. Because the burglary was so easy, the perpetrator is easily branded as a coward and lowlife scum.</p>
<p>Meanwhile, there are two other kinds of thieves who do get love and respect that makes up for their evil ways. The first is the professional thief or con-man. Their talents are so great that we can romanticize their stories and root for them. Despite acting immorally, their biographies become hit movies. The other kind is the Robin Hood who commits a crime for a good purpose. They do something that is illegal, but is not viewed as wrong given the circumstances.</p>
<p>What I want to see happen are some attacks that are both technologically difficult and have effects that benefit the world in some great way. If you are willing to so blatantly ignore the law, unlike myself, then cut it out with the lame hacks. Do something big and serious that in and of itself will have a huge positive effect for all people on the planet. Don&#8217;t be that guy who robs a convenience store at gunpoint. Instead, strive to be like <a title="Lupin III" href="https://secure.wikimedia.org/wikipedia/en/wiki/Ars%C3%A8ne_Lupin_III">Lupin III</a> or <a title="Frank Abagnale" href="https://secure.wikimedia.org/wikipedia/en/wiki/Frank_Abagnale">Frank Abagnale</a>.</p>
<p>Since things like this haven&#8217;t really been done before, I think I have to give some examples. Here are my top ten ideas of possible hacks that would have a huge positive benefit on society. The perpetrators of these attacks would definitely earn a great deal of respect to go with their time in prison. Post your own ideas in the comments!</p>
<ol>
<li>Hack stores like iTunes or Steam to give everyone free games, movies, music, etc. Remove region locking on services like Hulu and Spotify. Allow art and culture to be spread around the world for free.</li>
<li>Release the source code to important programs like Adobe Creative Suite, Microsoft Windows, iOS, the Google Search algorithm, etc.</li>
<li>Take control of ISPs to remove filtering, bandwidth limiting, wire tapping, and other nefarious systems.</li>
<li>Hack into the systems that host and sell academic journal articles, and get the full text of all the articles onto the net somewhere for free.</li>
<li>Hack into the world&#8217;s financial systems and bring down all the evil investment banks like JP Morgan, Goldman Sachs, etc.</li>
<li>Hack into government and corporate back office systems to expose corruption around the world. I&#8217;m sure there are plenty of Enrons waiting to be discovered.</li>
<li>Completely disable industrial facilities that are hazardous to the environment. Even if they come back online, a few days without something like coal burning makes a big difference even at the expense of a power outage.</li>
<li>Completely bring down the great firewall of China or other Internet censorship systems.</li>
<li>Attack the television satellites and turn off almost every TV in the world for a significant time period. At the very least replace Fox News with Al-Jazeera English.</li>
<li>Disable the nuclear arsenals of every country that has them. Let the power plants stay, just disable all the missiles.</li>
</ol>
<p>I think you get the idea now. LulzSec and others have been thinking too far inside the box. The lack of imagination and lack of technological skill is why nothing like the attacks I&#8217;ve describe has happened, or will happen anytime soon. If anything like the items on my list even comes close to happening, I will be more impressed than I have been in my entire life. As of right now, I&#8217;m still yawning.</p>
<p>I fully expect to wake up tomorrow to see that my computers will not boot, and they just display laughing skulls all over the screen. I&#8217;d be mad that I would have to fix all my computers, but a little bit happy that that can still happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/you-dont-impress-me-try-these-hacks-instead/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Keep your California out of my New York</title>
		<link>http://www.apreche.net/keep-your-california-out-of-my-new-york/</link>
		<comments>http://www.apreche.net/keep-your-california-out-of-my-new-york/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 23:33:33 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1257</guid>
		<description><![CDATA[More and more the entrepreneurial community has integrated itself into the technology community. You have to commend them on what an excellent job they have done. At this point startup news and technology news are basically synonymous. At least half &#8230; <a href="http://www.apreche.net/keep-your-california-out-of-my-new-york/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>More and more the entrepreneurial community has integrated itself into the technology community. You have to commend them on what an excellent job they have done. At this point startup news and technology news are basically synonymous. At least half of articles posted on tech sites are actually about business and have little at all to do with technology. I&#8217;ve mostly just observed and lightly complained about them, but now they are trying to attack my home turf. They are attacking New York City.<span id="more-1257"></span></p>
<p>Just about every day I read about some article about turning New York City into Silicon Valley 2. What bothers me is they take it for granted that this is a thing that is a good idea, and move right along to discussing how it can be done. It&#8217;s obvious why the startup people want to do this. There are a lot of people and, more importantly, a lot of dollars in NYC. It&#8217;s the most important city in the world. Yet, there are few technology-centric businesses based here. To these people the city is a huge untapped mine filled with gold.</p>
<p>The thing is, the location of technology companies doesn&#8217;t really matter that much does it? If I were starting a tech company I would probably pick Kansas City once Google brings the fiber there. The Netherlands is also a good choice, and has the fiber right now. The only real reason they come to NY is because they need more developers. The valley is tapped.</p>
<p>If they have marketed these entrepreneurial ideas so well, why are they having a hard time getting these developers? Why can&#8217;t they replicate the valley in New York? What is giving them all this trouble? I&#8217;ll make a general trollish statement and say that New Yorkers aren&#8217;t morons like those Californians are. Less trollish statement, New Yorkers aren&#8217;t as naive as Californians.</p>
<p>You see anyone who has a silicon valley attitude already probably moved there, or wants to move there. If someone stayed in New York it&#8217;s because they have a New York attitude. We aren&#8217;t the kind to work all night eating only instant noodles in exchange for a miniscule chance of getting rich and making some venture capitalist much richer. We have something here called rent, and it&#8217;s really expensive. We also like to eat good food, which is also very expensive. If you want us to work for you you have to pay us in cash, and lots of it. Venture capitalists don&#8217;t like that. They want kids right out of college who will work for peanuts because they don&#8217;t know any better.</p>
<p>Also, while New York lacks technology companies, it doesn&#8217;t lack technologists. Every desk has a computer on it. There are thousands of technologists in this city, many of them among the best in the world. The thing is, we all work for companies that do something else besides technology. Many work for financials that make money by having money to begin with. Some work for insurance companies, media companies, advertising firms, or *gasp* companies that actually have a product to sell. In other words, we work for businesses that actually make a real profit with a real sustainable business model that hasn&#8217;t been made obsolete like Hollywood has.</p>
<p>All these venture funded startups, how many make real profits? LinkedIn just had a huge IPO, how much profit do they actually make? Apparently  the company is valued at <a title="LinkedIn Valued at 521 times its profits" href="http://blogs.wsj.com/deals/2011/05/19/linkedin-now-valued-at-521-times-profits/">521 times its profits</a>. I don&#8217;t know how math works in CA, but in NY we know how to use a calculator. That doesn&#8217;t add up. If we&#8217;re going to work somewhere and get paid, it better be someplace that actually makes money. If you promise me the salary I demand, you better damn well not bounce that check.</p>
<p>These people are treating investment dollars like they&#8217;re revenues. In NY people are still living in the real world. We&#8217;ll get excited about real things, like sales figures going way up. If some morons decide to invest a huge sum in a company that isn&#8217;t turning a profit, that&#8217;s not something to cheer about. It&#8217;s something to be very worried about. If I see the champagne opening, my first instinct is to run.</p>
<p>I also have a suspicion that the weather makes a big difference. New York has nice weather, but the winter is cold and snowy. That has a huge psychological effect on people. Because we are often grumpy, we want to escape. If you make a New Yorker rich, you know what they&#8217;ll do? They&#8217;ll buy a luxury apartment, a house in the Hamptons, and a tropical beach house. Then they&#8217;ll retire immediately never to be seen again. Make a valley entrepreneur rich, and they&#8217;ll show up to work the next day like nothing happened. The weather is so nice, they are happy with their late nights and ramen dinners. They don&#8217;t want to escape, they are happy to work forever.</p>
<p>If you&#8217;re one of those people trying to push your silicon valley mentalities in New York, let me be the first to tell you to literally get out of town. You&#8217;re not wanted here. If anything, I think you guys should take a little New York back home with you. When you have real money and are ready to pay my rent, then give me a call. Until then, save your cash for plane tickets.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/keep-your-california-out-of-my-new-york/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Game Developers &#8211; Stop Failing at Online Multiplayer</title>
		<link>http://www.apreche.net/game-developers-stop-failing-at-online-multiplayer/</link>
		<comments>http://www.apreche.net/game-developers-stop-failing-at-online-multiplayer/#comments</comments>
		<pubDate>Sat, 28 May 2011 14:40:29 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Video Games]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1250</guid>
		<description><![CDATA[Independent video games are all the rage lately. Minecraft and Angry Birds are the premiere examples of how games developed outside of the big commercial industry can become huge successes. This is mostly because of platforms like Steam and other &#8230; <a href="http://www.apreche.net/game-developers-stop-failing-at-online-multiplayer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Independent video games are all the rage lately. <a title="Minecraft" href="http://www.minecraft.net/">Minecraft</a> and <a title="Angry Birds" href="http://chrome.angrybirds.com/">Angry Birds </a>are  the premiere examples of how games developed outside of the big  commercial industry can become huge successes. This is mostly because of  platforms like <a title="Steam" href="http://store.steampowered.com/">Steam</a> and other digital stores allowing these games to get vast exposure.  This is great because after years of genre cookie cutters we finally  have a new fountain of ludic innovation in the video game world.</p>
<p>Despite the greatness in the indie video game scene, there is also a  great deal of fail. Because indie developers lack the resources of giant  corporations like <a title="Nintendo" href="http://www.nintendo.com/countryselector">Nintendo</a> or <a title="Electronic Arts" href="http://www.ea.com/">Electronic Arts</a>,  there are certain flaws in their games that we have to accept. The  controls won&#8217;t be as polished and smooth. There might be graphical  glitches on certain video cards. The game might crash under weird  circumstances. Without the money or time for thorough testing, this is  just a reality of life we must accept. I forgive the indie games for  these kinds of flaws.</p>
<p>That being said, there is one area in which failure is absolutely not  acceptable. That area is online multiplayer. It seems that just about  every week a cool new multiplayer game comes out on Steam, but the  networking is a complete disaster. This is absolutely unacceptable. If  it&#8217;s primarily a single player game with a small online component, then  it&#8217;s no big deal if that part doesn&#8217;t work. However, if it&#8217;s primarily  an online game then the game may as well not exist if the networking is  busted. <img title="More..." src="http://comments.apreche.net/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p><span id="more-1250"></span></p>
<p>As a programmer I know full well how difficult it is to write netcode  that works. There are so many factors to balance including latency,  synchronization, cheating, firewalls, etc. It&#8217;s no doubt a huge pain to  write good net code. To those that have succeeded in this task, I salute  you.</p>
<p>Even worse, writing netcode is a distraction from making your game. A  game developer wants to make their game as good as possible. In a  competitive online multiplayer game that means working on things like  balance, controls, user interface, level design, and adding more modes  of play. Every minute spent working on netcode is a minute a developer  is distracted from the game itself. It&#8217;s no wonder that developers don&#8217;t  spend much time on it.</p>
<p>That being said, if your game is primarily an online multiplayer  game, it may as well not even exist if the netcode doesn&#8217;t work. I  acknowledge that it is difficult code to get right, and that it  distracts from the task of actually making the game. I just don&#8217;t accept  those as valid excuses. Networking is hard, not impossible.</p>
<p>In 1996 Id software released <a title="QuakeWorld" href="https://secure.wikimedia.org/wikipedia/en/wiki/QuakeWorld">QuakeWorld</a>. The original <a title="Quake" href="https://secure.wikimedia.org/wikipedia/en/wiki/Quake_%28video_game%29">Quake</a> had netcode that was only suited for LAN play. QuakeWorld fixed it so  that Quake could be played beautifully over the Internet. <a title="Tribes 2" href="https://secure.wikimedia.org/wikipedia/en/wiki/Tribes_2">Tribes 2</a> was released in 2001. The netcode was so amazing that the game was  playable with a 56k modem. We are living in the year 2011. No matter how  hard the netcode problem is, it&#8217;s been a solved problem for fifteen  years. I&#8217;m sorry. There is absolutely no excuse for getting it wrong.</p>
<p>One reason people fail is because they try to do something other than  the classic dedicated server model. In my opinion, this is the way all  non-MMO games should do online play. It&#8217;s a design that works  beautifully for over a hundred thousand <a title="Counter-Strike" href="http://store.steampowered.com/css">Counter-Strike</a> players every second of every day. I&#8217;m all for trying new things. <a title="Rotary Engine" href="https://secure.wikimedia.org/wikipedia/en/wiki/Wankel_engine">Rotary engines</a> are pretty cool because they actually work. If you want to try to make a  new kind of network engine, that&#8217;s great, but it had better work.</p>
<p>Not following this advice is how we get games like <a title="Frozen Synapse" href="http://www.frozensynapse.com/">Frozen Synapse</a> trying to use centralized servers that they can&#8217;t keep available. It&#8217;s a  turn-based game, and they can&#8217;t even keep the server up. We also get  games like <a title="Ace of Spades" href="http://ace-spades.com/">Ace of Spades</a> which wants to launch the game from in-browser links instead of typing  IP addresses into the game itself. Most times when you try to play you  just get a connection error. If these developers had done things the old  fashioned way, they might be in better shape.</p>
<p>Another mistake developers make is they don&#8217;t build the networking in  from the ground up. Having online play affects the overall design of  your game in many ways. If you don&#8217;t code your game with networking in  mind from the very beginning, it will be enormously difficult to  properly add it later on.</p>
<p>Minecraft has this problem, and that&#8217;s why so many people keep making all sorts of <a title="Bukkit" href="http://bukkit.org/">server mods</a> for it. Even with the mods I consider the Minecraft multiplayer too  awful to be even worth playing. Notch has the money now. If he wants  multiplayer to not suck, he should build a new Minecraft that is  designed for networking from the start. They can call it Multicraft.</p>
<p><a title="Civilization V" href="http://www.civilization5.com/">Civilization V</a> is a massive failure in this regard. Not only are their lag and  connection issues, but the actual game mechanics actually don&#8217;t hold up  in multiplayer. The simultaneous turns give a <a title="Civilization V Simultaneous Combat" href="http://gaming.stackexchange.com/questions/9680/how-does-simultaneous-combat-work-in-civilization-5">huge advantage to the first mover</a> in combat. When <a title="Civilization IV" href="http://www.2kgames.com/civ4/home.htm">Civ IV</a> came out, people stopped playing <a title="Civilization III" href="http://www.civ3.com/">Civ III</a>.  The fact that many people are still playing Civ IV after Civ V has been  out for months shows you they really messed something up.</p>
<p><a title="Magicka" href="http://www.magickagame.com/">Magicka</a> is a game with a ton of network problems. Even after tons of patches, the game still gets out of sync. <a title="Diablo II" href="http://us.blizzard.com/en-us/games/d2/">Diablo II</a> was perfect in 2001, so why is Magicka flawed? The <a title="Torchlight" href="http://www.torchlightgame.com/">Torchlight</a> guys have the right idea. They have no networking whatsoever in  Torchlight. If you can&#8217;t do it right, don&#8217;t do it at all. They are  making <a title="Torchlight II" href="http://www.torchlight2game.com/">Torchlight II</a> with networking in mind from the start. I have high hopes for them doing a good job.</p>
<p><a title="Natural Selection" href="http://www.unknownworlds.com/ns/">Natural Selection</a> is my second favorite FPS of all time after Tribes 2. It&#8217;s a <a title="Half-Life" href="https://secure.wikimedia.org/wikipedia/en/wiki/Half-Life_%28video_game%29">Half-Life</a> mod, so the networking just works perfectly. I was very excited for <a title="Natural Selection 2" href="http://www.naturalselection2.com/">Natural Selection 2</a>,  and I pre-ordered it immediately. The developers started out on the  Source engine, but abandoned it to write their own. While their engine  is very impressive, they have failed at networking. Their experience  comes from making mods, so they had no experience with networking.  Perfect netcode was provided for them by the underlying engine. Natural  Selection 2 is still in beta, but the networking is awful. There is  insane lag. It gets better with every patch, but it is still nowhere  near satisfactory. At least we&#8217;ll always have NS1.</p>
<p>You might argue that some of these games are commercially successful  despite their sub-par networking. That is true, but they are very lucky.  <a title="Introversion" href="http://www.introversion.co.uk/">Introversion </a>software released a great RTS called <a title="Multiwinia" href="http://www.introversion.co.uk/multiwinia/">Multiwinia</a>.  When it was first released many people could not connect to any servers  due to network errors. I don&#8217;t know if they eventually fixed it because  I stopped playing. The broken online play prevented a community from  forming around the game, and the game died. Compare that to <a title="Defcon" href="http://www.introversion.co.uk/defcon/">Defcon</a>, another Introversion game that has working online play, which still has a community to this day.</p>
<p>I&#8217;m sure everyone is also familiar with the Nintendo way of failing  at online multiplayer. Friend codes and other weird systems create a  huge barrier to online play, even if the netcode works. <a title="Borderlands" href="http://www.borderlandsthegame.com/age_gate.html">Borderlands</a> has fine netcode, but reliance on <a title="GameSpy" href="http://www.gamespy.com/">GameSpy</a> accounts makes it annoying as hell to get it running. Steam and <a title="XBox Live" href="http://www.xbox.com/en-US/live">XBox Live</a> are both perfect. Every single game should integrate as much as  possible with one or both of those systems. Why would you intentionally  create a barrier to entry for your game?</p>
<p>Networking is hard, so it is obvious why so many game developers fail  at it. It&#8217;s just incredibly frustrating for us as gamers to spend money  on a multiplayer game that has broken online play, where there is  really no excuse. Almost every game should use the standard model of  dedicated servers integrated with XBox Live and/or Steam as fully as  possible. It&#8217;s bad enough that so many games with big potential die out  from lack of interest, it&#8217;s an even greater shame if it&#8217;s due to  technological failure.</p>
<p>Right now I&#8217;m at a point where I buy all kinds of cool indie games  only to be disappointed when the networking doesn&#8217;t function. I&#8217;m at the  point where I&#8217;m not even going to buy games now until I have  confirmation that they work. With more technological failures more  people might take on this attitude, and it could be a serious blow to  indie game developers, and thus a serious blow to video game innovation.  Nobody wants to see that, so just make the networking work. There&#8217;s no  valid excuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/game-developers-stop-failing-at-online-multiplayer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why Not a Little Open?</title>
		<link>http://www.apreche.net/why-not-a-little-open/</link>
		<comments>http://www.apreche.net/why-not-a-little-open/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 22:30:19 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1243</guid>
		<description><![CDATA[If you look around at the world of hardware, there is one thing that is immediately obvious. The open hardware is shit compared to the closed hardware. In terms of industrial design, battery life, price, and just about every category &#8230; <a href="http://www.apreche.net/why-not-a-little-open/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you look around at the world of hardware, there is one thing that is immediately obvious. The open hardware is shit compared to the closed hardware. In terms of industrial design, battery life, price, and just about every category other than openness, the closed devices are superior. The thing is, it doesn&#8217;t have to be this way, and the electronics manufacturers would actually stand to make much more money if they bucked the trend.<span id="more-1243"></span></p>
<p>Take for example the <a title="Nintendo DS" href="http://www.nintendo.com/ds">Nintendo DS</a> vs. something like the <a href="http://www.openpandora.org/">Pandora</a>. The Pandora is really no comparison. Just looking at it makes me shudder it&#8217;s so hideous. There&#8217;s little incentive to actually develop anything for it since nobody owns one. Hooray, you made a game for the Pandora that nobody will ever play.</p>
<p>Meanwhile, the Nintendo DS is a closed system. Nintendo will only give you a dev kit if they approve you, and you pay them money. Then you can only release your game if they approve of that. This hasn&#8217;t stopped people from reverse engineering it and homebrewing the heck out of it. There is more homebrew action going on the DS than on even the most popular open systems out there. The incentives of developing for such a widely used well designed system make with worth the hassle of hacking and reverse engineering it.</p>
<p>The same is true for almost all consumer electronics. We have a bunch of open devices that suck and don&#8217;t really work, and we have awesome closed devices that we have a hard time pushing beyond their limitations. What would happen if one of the companies making closed devices would just cave and open it up?</p>
<p>Actually, this has happened. Do you remember the Linksys WRT54G router? I don&#8217;t have sales figures, but it&#8217;s obviously one of, if not the, best selling routers of all time. Because of the GPL, Cisco was forced to open the source code of the firmware for early versions of the router. The result is that a huge community sprung up of people buying this router and flashing it with firmware that added a ton more features. This obviously helped their sales by a ton, so why did they change the software in later versions and keep their future routers closed? If they had kept their routers open, Netgear, D-Link, and everyone else would have no chance of competing unless they opened up as well.</p>
<p>Now, depending on the device, going completely open can pose problems. Sometimes it can allow software piracy, like with the iPhone or DS. Sometimes it can allow media piracy, such as with an open source Blu-Ray player. But even in those cases, an official dev kit that anyone can buy will not help piracy that much.</p>
<p>Even with completely closed Blu-Ray players, the whole system is already cracked wide open. Pirates are pirating, and will continue to pirate. Little to nothing can be done to change the rate of piracy. Yet, imagine if Sony made one particular model of Blu-Ray player that was open. Without marketing it heavily, they just had a page on their site with documentation and development tools for the player. Maybe they even discreetly sell a dev kit for a token fee. That will almost immediately become the #1 Blu-Ray player, and no other will be able compete with it.</p>
<p>Imagine if Nintendo discreetly sold official DS flash cartridges with a development kit. They would make a ton of money since all those dollars spent on R4 cards would be in Nintendo&#8217;s wallet. Piracy of DS games is rampant and unstoppable anyway, this would at least give more money to Nintendo instead of the people who make the R4.</p>
<p>Of course, this will never happen. These big old companies are set in their ways, and there is pretty much zero chance they will be smart enough to do something like this. They are too stubborn and old fashioned.</p>
<p>That doesn&#8217;t mean it can&#8217;t happen. I&#8217;m calling out all the people who make open hardware to change their ways. Instead of making something like Pandora, make a product with a consumer focus. If you design for developers, you&#8217;ll only get developers buying it. Be like a real company and focus completely on consumer sales. Just while you&#8217;re at it, make the device open and make development tools available or for sale. Don&#8217;t heavily promote the openness, promote the device itself. By keeping the openness quiet you won&#8217;t scare anyone away, and you&#8217;ll grow a sleeper hit from the underground. Think of it as Linksys router on purpose.</p>
<p>Imagine yourself right now trying to buy something like, oh, a television. There are so many to choose from in different sizes with different specs. But one feature that no television has is openness. Imagine if there was just one model of television that had a dev kit available on some page of the manufacturer&#8217;s web site. They didn&#8217;t promote it or draw attention to it, but they had it there. Would that not immediately become the most popular television? Of course it would. It would be the obvious choice of almost every nerd. After the nerds got done with it, it would become the obvious choice of non-nerds as well.</p>
<p>If you are a consumer electronics manufacturer, please make your stuff open. It&#8217;s in the best interest of your company and your customers. Throw away your old ways of thinking. Just do it. Just try it on one model. If it doesn&#8217;t work, cancel it. At least try. What&#8217;s the worst that can happen? It sells the same as it would have sold if it were closed? That&#8217;s not likely.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/why-not-a-little-open/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Change the Computer, Change Yourself</title>
		<link>http://www.apreche.net/dont-change-the-computer-change-yourself/</link>
		<comments>http://www.apreche.net/dont-change-the-computer-change-yourself/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 17:03:12 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1232</guid>
		<description><![CDATA[Many long years ago, I used to be a Gentoo user. Today I run Windows 7 on every computer I own, and I use default Ubuntu installations on servers and in Virtual machines for development. I went from running one &#8230; <a href="http://www.apreche.net/dont-change-the-computer-change-yourself/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many long years ago, I used to be a Gentoo user. Today I run Windows 7 on every computer I own, and I use default Ubuntu installations on servers and in Virtual machines for development. I went from running one of the hardest core Linux distros on the bare metal to not running Linux on bare metal at all. That&#8217;s a pretty big change as far as nerds are concerned. What happened?</p>
<p>My first experience with Linux was in the very late &#8217;90s. The first time I saw it, some kids at the <a title="Camp Watonka" href="http://www.watonka.com/cgi-local/wpage">nerd summer camp</a> I went to were running it. I didn&#8217;t use it, and I didn&#8217;t learn it. Yet, as with all things related to computers, I was curious. In high school a friend lent me a Corel Linux CD-ROM. I tried with no avail to make it work on the family computer (486 100mhz). I didn&#8217;t realize I had to boot from the CD-ROM, and I don&#8217;t think that computer even had that capability.</p>
<p>It wasn&#8217;t until 1999 that I downloaded Red Hat ISOs over my 56k dial-up connection. It was the first computer I ever built and personally owned, a Pentium /// 450mhz. I was able to dual boot Red Hat 6.0 and Windows 98SE. The thing is, I soon deleted it. It didn&#8217;t work with my USB dial-up modem. Linux was apparently just a different desktop with some different looking applications, and bad hardware support.</p>
<p>It wasn&#8217;t until I got to college that I actually learned something. All the computer science labs ran Solaris, and I started to learn UNIX for real. I soon discovered Mandrake Linux. It actually worked with all my hardware, even my weird PCI IDE controller. Most importantly, I learned to SSH into the Solaris systems to do my school work, and even use X11-forwarding.</p>
<p>At this point I was hooked. I was running Linux as the primary OS in a dual boot system. I only loaded up Windows (2000) for PC gaming. The thing is, hardware support was still a problem. My hardware didn&#8217;t all work perfectly, and Mandrake didn&#8217;t update quickly enough to give me the updates that fixed those problems. That&#8217;s when I had the distro rodeo and picked Gentoo.</p>
<p>I tried every major Linux distro at the time, and BSD as well. None of them really impressed me, and Gentoo didn&#8217;t even seem to work. Yet, I kept going back to it. The splash screen was so good looking, the community forums were so helpful, and the documentation was so great, that I kept at it. Eventually I came to realize that yes, I actually had installed it properly multiple times over, but unlike other Linux distros X was not a default part of the system. Booting into a command line wasn&#8217;t a failure, it was success.</p>
<p>From then on I was Gentoo crazy. I would constantly be rebuilding packages updating packages, even reinstalling the whole system. I would constantly be tweaking and twisting system settings to see what they did. Mostly I messed around with the user interface. I even fell into using fvwm, the most customizable X window manager. By default it sucked, but if you configured it, you could go beyond anything else in existence. Boy, did I ever configure it.</p>
<p>Late in my college years, and after graduation, I was soon employed. My free time evaporated. I was spending a lot of time commuting to work. My iPod became a lot more important than my desktop. I needed Windows to run iTunes, and to play games. I had little desire to code outside of work. Yet, I still kept a dual booted Linux because it was nicer to SSH into my blog/podcast server from that, than from PuTTY.</p>
<p>By then, I was rocking Ubuntu. It just worked. It installed in 15 minutes, not three days. I didn&#8217;t need to jump through any hoops to get my NVidia card working. I no longer needed to edit the X configuration to get dual monitor support and proper resolutions. I still had a natural inclination to customize the user interface, but it was kept at a minimum simply due to the fact I had no free time for it.</p>
<p>Eventually I was running Ubuntu and Windows. Then my desktop was dual booted, but my laptop was just Ubuntu. And then when I discovered VirtualBox, and it became good enough, I ran Ubuntu on the desktop in a virtual machine, and only had Windows installed on the bare metal. And just recently I replaced that laptop with a new one. This new laptop is so powerful that it too can run Linux in a virtual machine. And thus, my days of installing Linux are over. I wish I could run Linux in the bare metal and Windows in a virtual machine. The thing is that I use Windows for gaming, and VMs are not so great for that. I use Linux for web development, and running it in a VM makes no difference for that at all.</p>
<p>You see, in college I had a ton of free time. I spent that free time working on my computer. I do not regret spending my time in that manner. Most of the Linux skills I use every single day I learned from rocking Gentoo. Even so, I can now look at my old self and laugh. I was not unlike a mechanic who always worked in the garage and never drove anywhere. I spent all that time trying to customize the computer to my preferences, that I hardly ever computed. That&#8217;s why I don&#8217;t have my own software business. While I was compiling and configuring other people&#8217;s code, the other guys were writing that code.</p>
<p>Thankfully I learned my lesson, and I hope you can learn the same. It is often quite difficult to change computers. You can spend hours just customizing keyboard shortcuts, let alone other settings. Then, as soon as you use a different computer, all of your customizations are gone. Even if your customization can increase your efficiency, is it really worth it if it takes you an hour to set it up?</p>
<p>Take it from someone who has been there. Instead of changing the computer, change yourself. It&#8217;s easy to change yourself, you have 100% full control. You don&#8217;t even need to spend time looking up how to do it. Get used to the default keyboard shortcuts instead of making your own. Learn to live with the default settings. Once you do, you can be just as efficient as you would have been with your customizations. Better still, you will be able to sit at any computer and get going immediately without being frustrated at a different setup.</p>
<p>It used to be that my computer felt like home, and every other computer felt like a foreign country. Thanks to cloud computing, any computer with an Internet connection and a web browser can become your home as quickly as you can login. You no longer have to spend a day installing and configuring software after you have a fresh OS install. You just have to install your favorite browser, and maybe one or two other things like Steam or iTunes.</p>
<p>Learning default settings only makes this even easier. I truly feel at home on absolutely any computer I sit in front of. I am familiar with all three major OSes and all the major browsers. I still do not prefer OSX, which I am forced to use at work, but I know it. I&#8217;ve also made vim my text editor of choice, and I use it with a very default configuration. Vim or vi is already installed on almost every system, I can easily use any server I come across. People who are perhaps used to graphical editors, like Eclipse, may have some slight difficulty if they have to SSH into a server and fix something.</p>
<p>If you get frustrated behind the wheel of any car other than your own, then do you really know how to drive? A real driver can sit in any driver&#8217;s seat and be off to the races after a quick seat and mirror adjustment. That&#8217;s not to say you should never spend time under the hood. It&#8217;s very important to know how things work, and to be able to fix them when they go wrong. Just don&#8217;t spend so much time under there that you never leave your garage.</p>
<p>You won&#8217;t get very far in this world by working on your computer. If you want to make it somewhere, you have to use the computer to compute. Start now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/dont-change-the-computer-change-yourself/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Presenting Presentoh, King of Presentations</title>
		<link>http://www.apreche.net/presenting-presentoh-king-of-presentations/</link>
		<comments>http://www.apreche.net/presenting-presentoh-king-of-presentations/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 01:28:17 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1227</guid>
		<description><![CDATA[I do a lot of panels at various conventions. When I do these panels, I need some sort of visual aid. For this I usually turn to Powerpoint, and its alternatives. The thing is, these just plain suck, at least &#8230; <a href="http://www.apreche.net/presenting-presentoh-king-of-presentations/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I do a lot of panels at various conventions. When I do these panels, I need some sort of visual aid. For this I usually turn to Powerpoint, and its alternatives. The thing is, these just plain suck, at least for my purposes. They have a zillion features that allow people to make really bad presentations. Meanwhile, the feature that I really want, which is video, effectively doesn&#8217;t work.</p>
<p>It dawned on me that because of HTML5, it should actually be possible to create an HTML presentation with video that is seamless. Today I went ahead and prepared a video-centric panel for Connecticon, and I did it all in HTML5. I realized afterwards that I should build this into a tool, so that others can use it as well. Hence, Presentoh was born.</p>
<p><a title="Presentoh" href="http://github.com/Apreche/Presentoh">http://github.com/Apreche/Presentoh</a></p>
<p>The idea is really simple. There are only four kinds of slides I think you should be using: title slides, bulleted lists, videos, and images. I built a simple HTML template which could handle all four types of slides. I made a brain-dead simple CSS style for it which entails white text on black background. The black background also looks more professional because photos and videos really stand out. Also, it looks better when using a projector in a dark room because you can&#8217;t see the borders of the projection.</p>
<p>The only catch was that I wanted to use my Logitech Cordless Presenter. I went out and found jquery.hotkeys, which allowed me to bind any key on the keyboard to move between slides by redirecting in JavaScript. Problem solved.</p>
<p>All you have to do to use Presentoh is create a file containing JSON which defines all the slides in your presentation. Then you just run the presentoh.py script, tell it which json file you want to use, and it spits out all the HTML files for your presentation. Find the first slide in your presentation, open it in your browser, go full screen, and rock and roll.</p>
<p>I think it&#8217;s pretty awesome that while this tool is really hacky, and doesn&#8217;t have any error checking, it still beats out Google Docs, Powerpoint, Open Office, and all the rest in terms of how it handles video. There are some slight catches, but nothing that can&#8217;t be worked around. For example, you have to make sure all of your videos are the right codec for the browser you are using. My H.264 videos obviously didn&#8217;t work in Firefox.</p>
<p>Also another issue is that there is no way to automatically make an HTML5 video go full screen. If you&#8217;re wondering why, <a title="HTML5 full screen video" href="http://stackoverflow.com/questions/1055214/is-there-a-way-to-make-html5-video-fullscreen">the answer is on stackoverflow</a>. Therefore you have to manually specify the height and/or width of each video depending on its aspect ratio, and the resolution you will be presenting in. This is to prevent videos from going off the edges of the screen if they are too wide or too tall, and to prevent aspect ratios from being broken.</p>
<p>All the rest of the information can be found in the README file. I hope Presentoh helps somebody out there with their presentation needs. Enjoy.</p>
<p><!--79ae0a991e384da09696961d2702f294--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/presenting-presentoh-king-of-presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub Suggested Workflow</title>
		<link>http://www.apreche.net/github-suggested-workflow/</link>
		<comments>http://www.apreche.net/github-suggested-workflow/#comments</comments>
		<pubDate>Thu, 06 May 2010 02:28:31 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1198</guid>
		<description><![CDATA[The thing that&#8217;s great about Git is that it allows the user to pick any work flow they desire. The problem is that it allows the user to pick any work flow they desire. Thus, users who don&#8217;t know exactly &#8230; <a href="http://www.apreche.net/github-suggested-workflow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The thing that&#8217;s great about Git is that it allows the user to pick any work flow they desire. The problem is that it allows the user to pick any work flow they desire. Thus, users who don&#8217;t know exactly what they want to do, are confused as to what they should do. Github makes things even worse, as it confuses users with lots of extra information.<span id="more-1198"></span></p>
<p>I have recently started a new project, Project D.O.R.F., and many of the other developers are new to Git. Thus, they have been making some mistakes and not utilizing Git to its fullest. Thus, I have created this guide using Project D.O.R.F. as an example. As you become more experienced with Git, you can figure things out on their own. Until then, this flow will get you a very long way.</p>
<p>Assuming you have Git installed properly, the first thing you need to do is configure Git. It is done like so.</p>
<p><code>$ git config --global user.name "Your Username"<br />
$ git config --global user.email "your@email.com"</code></p>
<p>These two commands will configure your username and e-mail address for every Git repository you work on with that user account on that machine. Every commit in a Git repository has an author, so this is necessary to see which people are responsible for what work. There is also a git blame command that can show who is responsible for each individual line of code in a repository. If these settings are not configured, those features will not work. Alternatively, you can change these settings on a per-repository basis, but I&#8217;ve never had a need for it.</p>
<p>The next step is to go to GitHub and create a fork. First you go to <a href="http://github.com">http://github.com</a> and register for it, as you would any other web site. There is no need to pay any money unless you would like to have private repositories that nobody else can access. Next go to the GitHub page for the project you would like to work on, in this case it is <a href="http://github.com/Apreche/Project-DORF/">http://github.com/Apreche/Project-DORF/</a>. Then, click the fork button. This will create a copy of the project in your GitHub account. You can see that lackofcheese has a fork of the project at <a href="http://github.com/lackofcheese/Project-DORF/">http://github.com/lackofcheese/Project-DORF/</a>.</p>
<p>Now that you have your own personal fork of the project, you need to actually get the code onto your local machine to begin working on it. This is done with the git clone command. Remember, you want to clone your forked repository, not the original one. You also want to clone using the SSH method. Follow the directions on GitHub for configuring your SSH key.</p>
<p><code>$ git clone git@github.com:yourusername/Project-DORF.git</code></p>
<p>This command will create a folder named Project-DORF which contains a clone of the repository. If you would like to put the repository into a different folder, feel free to move or rename it. Alternatively, you can do something like this which will put the repository in a directory named foobar</p>
<p><code>$ git clone git@github.com:yourusername/Project-DORF.git foobar</code></p>
<p>So now it&#8217;s time to get to work. Go into the folder and take a look at the files, and learn the project. You&#8217;ve got to read code before you can write it.</p>
<p><code>$ cd Project-DORF</code></p>
<p>You&#8217;ve read the code, and you&#8217;re ready to make some changes, but wait! What branch are you on? Let&#8217;s check.</p>
<p><code>$ git branch<br />
* master</code></p>
<p>The master branch, you don&#8217;t want to be working directly on the master branch. Do all of your work on separate branches. And if you are working on more than one task, put each task in a separate branch. For example, let&#8217;s say you are planning to improve performance of the renderer, but also fixing a bug in a path-finding algorithm. Don&#8217;t do those things on the same branch. Do them separately. That is the power and magic that Git has to offer you, so there&#8217;s no point if you don&#8217;t use it. We&#8217;re going to fix a bug on a separate branch, let&#8217;s go.</p>
<p><code>$ git checkout -b bugfix<br />
$ git branch<br />
* bugfix<br />
master</code></p>
<p>Perfect, we have a new branch. Now, start coding! Are you done coding? Time to commit. Let&#8217;s pretend we edited game.py, and we made a new file foo.py.</p>
<p><code>$ git status<br />
# On branch bugfix<br />
# Changed but not updated:<br />
#   (use "git add <file>..." to update what will be committed)<br />
#   (use "git checkout -- </file><file>..." to discard changes in working directory)<br />
#<br />
#	modified:   game.py<br />
#<br />
# Untracked files:<br />
#   (use "git add </file><file>..." to include in what will be committed)<br />
#<br />
#	foo.py<br />
no changes added to commit (use "git add" and/or "git commit -a")</file></code></p>
<p>It seems like git recognizes that we have a new file, but it&#8217;s untracked. It also recognizes we have modified game.py, but it&#8217;s not updated yet. You can see that there are instructions right there on the screen as to how to commit our changes. We can checkout a file to reset it to its pre-edited state. This command will undo our changes to game.py.</p>
<p><code>$ git checkout -- game.py</code></p>
<p>But we want to commit our changes, which means adding them first. We can explicitly add the files with the git add command.</p>
<p><code>$ git add game.py<br />
$ git add foo.py</code></p>
<p>Then we can commit the changes with the git commit command.</p>
<p><code>$ git commit</code></p>
<p>Let&#8217;s say you only want to commit some of the changes, but not others? That&#8217;s perfectly fine. Just add the files you want to commit, and don&#8217;t add the files you don&#8217;t want to commit. Protip: Use the special commands like:</p>
<p><code>$ git add -i<br />
$ git add -p</code></p>
<p>to interactively select line-by-line which changes you want to add. If you add two bits of code to a file, and only want to commit one of them, then only commit one of them. Nothing is stopping you.</p>
<p>The thing is, most of the time you are working, you aren&#8217;t making new files. You are just editing existing ones, and you want to commit all of your changes. In these cases use this shortcut command.</p>
<p><code>$ git commit -a</code></p>
<p>This will automatically add and commit all changes to files that already exist. You will still need to explicitly use the git add command to add in any newly created files. You will also need to use the git rm command to remove files. If you move or rename a file, just be sure to git add the new one and git rm the old one in the same commit, and git will figure it out, like magic. git rm is just like git add, so you have to commit afterwards. You should also use commands such as <code>git add -A</code> and <code>git add -u</code> to easily add many files at once. See the official Git documentation for more on that.</p>
<p>You&#8217;ve got your code in a separate branch from master, and you&#8217;ve committed your changes. Now it&#8217;s time to share them with the world. But first, you&#8217;ve got some work to do. While you were working, other people were also on the job. There is probably new code out there, and you have to make sure that your code plays nicely with it. The first thing you have to do is to add the canonical repository for the project as an upstream source. You only have to do this command once per clone.</p>
<p><code>$ git remote add upstream git://github.com/Apreche/Project-DORF.git</code></p>
<p>You don&#8217;t have to call it upstream, you can call it whatever you like, but upstream is an appropriate name. Regardless, this command creates the hook you need to be able to get updates from the &#8220;lead&#8221; repository. How do you get those updates? Let me tell you.</p>
<p>There are three commands you have to be concerned with here: fetch, merge, and pull. Fetch will get the new patches from the remote repository. Merge will merge those patches into your current branch. Pull does both at the same time. Let&#8217;s do it.</p>
<p>Go back to the master branch.</p>
<p><code>$ git checkout master</code></p>
<p>Fetch and merge changes from the upstream master into your local master.</p>
<p><code>$ git pull upstream master</code></p>
<p>Ok, so now your master branch has all the latest goodies that everyone else has been working on. But are your changes compatible? Let&#8217;s find out. </p>
<p>Switch back to your bugfix branch.</p>
<p><code>$ git checkout bugfix</code></p>
<p>Rebase!</p>
<p><code>$ git rebase master</code></p>
<p>Rebase can be a scary thing, but it&#8217;s not scary if you are careful. In this case, what we are using it for is pretty simple. It takes your changes that you have made on your bugfix branch, and sets them aside. Then it takes all the new goodies from the master branch, and puts them on your bugfix branch. Then it takes your changes and puts them back on top of that. If there is a conflict, it will provide you with instructions on how to fix it. Git has three different merging algorithms, though, so that rarely happens. Now that you are all rebased, test your branch and make sure it works. If changes are necessary, go back a few steps. Add and commit the changes. Make sure upstream doesn&#8217;t have any new changes. If it does, rebase again, and so on. Eventually, you will have a bugfix branch worthy of sharing with the world. Let&#8217;s do it.</p>
<p><code>$ git checkout master<br />
$ git merge bugfix<br />
$ git push</code></p>
<p>You&#8217;ve now pushed your changes out to your GitHub page. Congratulations. Now the rest of the world can go to your page and see those changes. Other people working on the project might even take your changes and start fiddling with them themselves. Don&#8217;t worry about that, though. You are interested in getting your changes upstream into the canonical repository. So go back to the GitHub web site for your repository, and click the pull request button. Send a pull request out to your collaborators, in this case Apreche, and they will be notified that your changes are ready for merging. Wait patiently, and if your patches are good, they will be part of the upstream. More information on pull requests is available at <a href="http://github.com/guides/pull-requests">http://github.com/guides/pull-requests</a></p>
<p>Now let&#8217;s get advanced for a second. Git really doesn&#8217;t believe in the idea of a canonical repository. It&#8217;s just a concept we use to make things easier for ourselves. Someone coming to GitHub for the first time is going to see 10 repositories with similar code, how do they know which one is the right one? This is why picking one to be <b>the</b> one is a good idea. However, since there really is no such thing, you can actually do some fancy stuff. You might want to use the git remote add command to add links to some of the other contributors on the project. For example, lackofcheese might do this to be able to fetch amelim&#8217;s changes that are not yet available at upstream.</p>
<p><code>$ git remote add amelim git://github.com/amelim/Project-DORF.git<br />
$ git fetch amelim<br />
$ git merge amelim/master<br />
</code></p>
<p>It also might be a good idea to merge different contributor&#8217;s patches into separate local branches which you then merge together. Never be shy about making a ton of local branches. You can delete the ones you are no longer using to clean up cruft, and the cost of making them is very minimal. Don&#8217;t hold back, branch like a mad man. Here&#8217;s an example of how I would merge changes from two other contributors with my code and then push it out on the master branch. When I was done with this, I would send out a pull request.</p>
<p><code>$ echo "These remote add commands only need to be done once ever per clone"<br />
$ git remote add ameleim git://github.com/amelim/Project-DORF.git<br />
$ git remote add lackofcheese git://github.com/lackofcheese/Project-DORF.git<br />
$ git checkout -b mycode<br />
$ git add somefiles<br />
$ git commit<br />
$ git checkout -b cheese<br />
$ git fetch lackofcheese<br />
$ git merge lackofcheese/master<br />
$ git checkout -b melim<br />
$ git fetch amelim<br />
$ git merge amelim/master<br />
$ git rebase cheese<br />
$ echo "The melim local branch now has amelims changes merged with lackofcheese's"<br />
$ git checkout mycode<br />
$ git rebase melim<br />
$ git checkout master<br />
$ git merge mycode<br />
$ git push<br />
$ echo "mycode on top of amelim's on top of lackofcheese's pushed out to the world"<br />
$ echo "let's delete the branches we are done with<br />
$ git branch -D mycode<br />
$ git branch -D cheese<br />
$ git branch -D melim</code></p>
<p>When you execute the rebase commands, you may be prompted to fix conflicts. If so, just follow the directions on the screen carefully. They usually involve editing the files in question with your editor to fix the appropriate sections by hand, re-adding, and re-committing the changes. It doesn&#8217;t happen often, and it&#8217;s not nearly as hard as it is to fix with non-distributed version control systems. Just make sure to test your code after resolving he conflicts.</p>
<p>That pretty much covers my basic work flow. Just to reiterate. Make separate local branches. Do work on them. Pull (fetch and merge) the upstream changes to your master branch. Rebase your changes on top of master then merge them into master before pushing them out to the world. If necessary, pull the changes of other collaborators into separate branches, and rebase/merge their changes together. Then take the sum of those changes and treat them as you would your own. Rebase them on top of the upstream master, merge them in, and push them out. </p>
<p>I have followed this work flow for quite some time, and it has served me well. Feel free to ask any question. Happy coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/github-suggested-workflow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPad: Why Must We Be Forced To Choose?</title>
		<link>http://www.apreche.net/ipad-why-must-we-be-forced-to-choose/</link>
		<comments>http://www.apreche.net/ipad-why-must-we-be-forced-to-choose/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 17:00:26 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1193</guid>
		<description><![CDATA[There is, of course, the expected hoo-hah about the iPad. The rage between those who love it and those who can&#8217;t stand its proprietary nature is in full swing. Yet, I am constantly in awe of the fact that nobody &#8230; <a href="http://www.apreche.net/ipad-why-must-we-be-forced-to-choose/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There is, of course, the expected hoo-hah about the iPad. The rage between those who love it and those who can&#8217;t stand its proprietary nature is in full swing. Yet, I am constantly in awe of the fact that nobody seems to notice the obvious and simple cause of this clash.<span id="more-1193"></span></p>
<p>It all comes down to one thing. Why must we be forced to choose between a good user experience and openness? How come we can&#8217;t have both? Every open platform has a god-awful user interface, relatively speaking. All Apple products, especially the portable devices, have a great user experience. I don&#8217;t personally like OSX, but I can&#8217;t deny that it gets a lot of things right that everyone else gets wrong. Font rendering is a good example.</p>
<p>People who don&#8217;t care about openness, or aren&#8217;t aware of the problem, are thrilled. They get everything they want. Hooray for them. People who do care about openness are enraged. Why are they mad about something they aren&#8217;t going to buy or use? This is easy to explain.</p>
<p>They are mad because they see an unfulfilled potential. Think of a screwdriver. A typical screwdriver can screw any screw that is of appropriate size. Imagine a copper screw and a steel screw that are otherwise identical. For some reason the screwdriver works on the steel screw but not the copper one for no apparent reason. I think most people would consider such a screwdriver to be broken.</p>
<p>A device like the iPad has all the hardware necessary to do a billion amazing things. However, it only does a few thousand things. Why? Because Steve Jobs says so. Who is he to tell me what I can and can&#8217;t do with this thing that I have bought? If you compare it to the screwdriver example, you can say that the iPad/iPhone/iPod are all broken. Broken technology enrages the geek, especially when they can&#8217;t fix it.</p>
<p>The nerd goes out to get a different screwdriver that is not broken. All these other screwdrivers are great. They work on all screws, as expected. However, they all have really uncomfortable handles. Every single screwdriver out there which is not broken is really uncomfortable. There is not a single exception.</p>
<p>Why can&#8217;t someone just take the good screwdriver and stick it on the comfortable handle? It&#8217;s so simple. There is no law of physics preventing it from happening. It&#8217;s 100% possible, but for whatever reason it just doesn&#8217;t exist. Every single screwdriver on the shelf is either broken or uncomfortable. The geeks can not be satisfied. Their rage multiplies exponentially.</p>
<p>This is the source of the rage against Apple. Apple seems to be the only company capable of making screwdrivers with comfortable handles, but their screwdrivers can&#8217;t do half of the things that other cheaper screwdrivers can do. Meanwhile, all those other cheaper screwdrivers give you blisters when you use them. I&#8217;m getting angry just thinking about this imaginary screwdriver scenario. </p>
<p>There are only two solutions I see. One is that Apple opens up. Apple is clearly capable of open sourcing things. They could just open their portable hardware and software, and that would be that. Obviously it will never happen, but I don&#8217;t understand why. If Apple did it, they would have immediate complete market dominance. If they had a comfortable and fully featured screwdriver, all competition would crumble instantly. There would be no reason to buy any competitor&#8217;s product.</p>
<p>The other solution is for the open source people to just shamelessly start ripping Apple off. If we can&#8217;t invent something better, which we clearly can not, then let&#8217;s reverse engineer and straight-up steal all of Apple&#8217;s stuff. Take the screwdriver handle down to the metal shop, copy it exactly, and attach it to a real screwdriver. Patent laws my ass. Why should we settle for anything less than achieving our full technological potential? Patents are supposed to help, not hinder, progress. If they are hindering, let&#8217;s just ignore them.</p>
<p>Google, I&#8217;m looking at you. You must know that Android&#8217;s UI sucks compared to iPhone. You have a jillion dollars. Just hire the best designers in the world, and get it done. What are you waiting for? You&#8217;re supposed to be a company of geniuses, why didn&#8217;t you just do this in the first place for Android 1.0? What can you possibly be thinking? What are all the non-Apple companies thinking? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/ipad-why-must-we-be-forced-to-choose/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>People Still Don&#8217;t Get Git</title>
		<link>http://www.apreche.net/people-still-dont-get-git/</link>
		<comments>http://www.apreche.net/people-still-dont-get-git/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 19:28:05 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1151</guid>
		<description><![CDATA[I&#8217;ve been using Git since slightly before it became very popular about two years ago. Nowadays it is very popular, with much thanks to github. However, even semi-famous programmers like Jeff Atwood don&#8217;t really understand what it&#8217;s all about. I &#8230; <a href="http://www.apreche.net/people-still-dont-get-git/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Git since slightly before it became very popular about two years ago. Nowadays it is very popular, with much thanks to <a href="http://www.github.com">github</a>. However, even semi-famous programmers like <a href="http://www.codinghorror.com">Jeff Atwood</a> don&#8217;t really understand what it&#8217;s all about.<span id="more-1151"></span></p>
<p>I think the primary thing that confuses people about Git is that it assumes that if you are developing software on a team, that you actually talk to people. Whether it&#8217;s by IM, IRC, a web site, Twitter, Git doesn&#8217;t care. It just assumes that you actually have some form of regular communication with the other developers. </p>
<p>You see, the non-distributed version control systems do not make this assumption. If you are using subversion, your work flow is dictated by the limitations of the software. You do some code. When you commit, you also share. Everyone commits to the same place. </p>
<p>With this sort of system, you don&#8217;t need to talk to the other developers to know what to do. There is only one canonical current version of the code in one repository. If you do an svn update, you know everything you need to know. If you change the code, you just commit, and you don&#8217;t need to tell anybody. They will see your changes when they eventually do an svn update.</p>
<p>This system inevitably leads to the many problems that Git solves. The one I always like to point to is the situation where you need to make a quick bug fix while you are in the middle of working on a big new feature. You need to make a version of your code that has the fix, but not the new feature. If you committed the feature, it&#8217;s going to be a nightmare to get a version of the code without it. If you didn&#8217;t commit the feature, it is very hard to collaborate with others. Branching solves it, but branching in subversion is slow and difficult, and it&#8217;s shared. You might ruin everyone else in the process.</p>
<p>Git lets you do absolutely anything that is possible to do with your code. You can branch, tag, commit, share, patch, and unpatch your code any which way you can imagine, and some you can&#8217;t yet imagine. As long as you are aware of all the commands and features, you can never dig yourself into a hole. You will always be able to deliver the code with the combination of  patches that you need. </p>
<p>The problem with this is that since you have so many capabilities, there is no dictated work flow. Should you have a central repository? Should you push back and forth between individual developers? Should we have any shared branches? Should we use tags? Should you use soft tags or hard tags? Should you merge? Should you rebase? All of these questions, and more, are the subject of much debate. </p>
<p>I think that all of these debates are silly. The correct answer is that there is no correct answer. All of the features of Git are just tools to help you get your code the way you need it to be. If rebasing saves the day, then rebasing is awesome. If sending patches by email works for you, then that&#8217;s also awesome. Whatever process you come up with for your team to work together on the same code is fantastic, if it works for you. </p>
<p>Even if you decided to follow a subversion style of development, you can absolutely just do it with Git instead. Git can work exactly the way SVN works, if you wish it to. The best part is that you can use it exactly like SVN, but because it is Git, you can escape the usual SVN traps when they come up. Therefore, I see absolutely no reason for a new project to use SVN when you can simply use Git and have developers agree to work in an SVN flow.</p>
<p>And that is the beauty of Git, is that it lets you come up with your own process. How you work is no longer dictated by the limitations of the software you are using. It is decided by the developers themselves. And even if developers like to work differently, as many do, they can each work in a way that is comfortable for them without interfering with anyone else. As long as the team communicates with each other, and agrees on how to share code, all is well. </p>
<p>Just to drive the point home, Git was made by Linus Torvalds to use for developing the Linux Kernel. How do you submit a patch to the kernel using Git? You put your patch up in your Git repository, and you email someone requesting them to pull the patch from you. Email!? With SVN you just commit, no need to talk to anybody. I don&#8217;t know about you, but do you think that forcing code changes on other developers without having to talk about it a good idea?</p>
<p>If you actually bother to talk to people then <a href="http://twitter.com/codinghorror/status/8057809501">500+ forks</a> is not a problem. You ask someone and they tell you what fork to clone. Just ignore all those graphs, they mean nothing.</p>
<p>However, I must admit that the 500+ forks is indeed a symptom not of Git itself, but github&#8217;s design, and users not understanding Git. Github makes the fork button very prominent, but forking a project on Github is not really something that people should do that often. Github is not Git. The design of Github, intentionally or unintentionally, leads users into doing something they don&#8217;t actually want to do. It doesn&#8217;t really help people understand Git, and it doesn&#8217;t help people communicate.</p>
<p>What most people should be doing is just cloning repository to their local machines, and making changes there. If they want to submit the changes, then they should use non-Git communication tools to talk to the person they cloned from. They only need to fork on github if they want to publicly share changes that have not yet been, or will not be, merged into the actual project. Otherwise, they should not fork, just clone.</p>
<p>If you do have changes that are not accepted, then sharing them publicly on github in a fork is a very useful thing. Maybe there is someone out there who needs a copy of <a href="http://github.com/fastsoft/djata">djata</a> with a slight tweak, but someone else made the tweak already. The tweak may never be accepted to the canonical codebase, but it can still be made available in a form. That might save someone the time of making that same tweak themselves on their own, which is what they would likely be doing on a project managed by subversion.</p>
<p>Right now I see people with SVN mindsets who won&#8217;t switch to Git because they don&#8217;t truly understand DVCS. Likewise there are people with SVN mindsets who don&#8217;t understand DVCS who switch to Git anyway for whatever reason. The missteps of the latter group provide many of the stories that will keep the former group scared away.</p>
<p>All in all, I&#8217;m not too worried. When I was in college, less than a decade ago, the CS department taught us RCS and the software engineering department taught us CVS. In my senior years some people starting using SVN, which was bleeding edge at the time. Git was released in 2005. The world of version control moves surprisingly rapidly. I think Git&#8217;s dominance is pretty much guaranteed at this point. It will just take time for programmers to escape the SVN mindset and understand the, admittedly more complicated, DVCS world. </p>
<p>We Git users are here to help, so ask before you run away or jump to conclusions. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/people-still-dont-get-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strict Open Source Policies Lead to Fail</title>
		<link>http://www.apreche.net/strict-open-source-policies-lead-to-fail/</link>
		<comments>http://www.apreche.net/strict-open-source-policies-lead-to-fail/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 18:25:26 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1148</guid>
		<description><![CDATA[Ubuntu and Firefox are two of the biggest open source projects in terms of desktop end users. Yet, the same open source philosophies that made these projects so popular are a weak spot that the competition can, and will, use &#8230; <a href="http://www.apreche.net/strict-open-source-policies-lead-to-fail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ubuntu and Firefox are two of the biggest open source projects in terms of desktop end users. Yet, the same open source philosophies that made these projects so popular are a weak spot that the competition can, and will, use to get ahead. If they do not change their policies I see Firefox being destroyed by Chrome, and Ubuntu losing ground to Windows 7 and Chrome OS.<span id="more-1148"></span></p>
<p>HTML5 is on the move. Pretty much every browser other than Internet Explorer is supporting it pretty well. However, the codec issue on the video tag is going to be a major headache for Firefox. YouTube, which is really the only video site that matters, has decided to go with H.264. Firefox can&#8217;t include H.264 because of patents, and can only support Ogg Theora. Chrome and Safari do not have this problem. IE will also not have this problem, if and when they get their act together.</p>
<p>This is due to the balance of open source that people like RMS do not understand. If you demand everything be purely open source, you will be missing out on something. The same goes if you demand everything be purely closed source. Some applications only exist closed, and some only exist open. You will have to use both to get an optimal user experience, especially on the desktop. </p>
<p>The overwhelming majority of users do not care about whether something is open or not. They only care that it is free as in beer, and that it has all the features they desire. Regardless of speed benefits, Chrome will beat Firefox because of its willingness to not be 100% pure open source, and include things like the patented H.264 video codec.</p>
<p>For those of you who do not know, Ubuntu has a very strict release cycle. Every six months they release a new version of Ubuntu. The most recent release is 9.10, released in October 2009. It includes version 2.6.31 of the Linux kernel. If there is a bug or security patch to that kernel, Ubuntu will push out an update to the users, such as the current version 2.6.31-17. The thing is, the current version of the Linux kernel is actually 2.6.32.5. Ubuntu 9.10 users will never get version 2.6.32. In order to get a newer version of the kernel, they will have to build it by hand, or wait for Ubuntu 10.4 in April. </p>
<p>What&#8217;s the big deal? The kernel version barely makes a difference in the user experience. Most users will probably not notice or care, even if they are stuck with a very old kernel version. Well, what if you apply the same update policy to something like Firefox? Firefox 3.6 was just released, but Ubuntu users will not get that update. Windows and Mac users will, because Firefox updates itself on those platforms. Ubuntu users will have to wait for Ubuntu 10.4, or jump through hoops to update Firefox by hand. They have to wait 3 months for a very significant user experience update.</p>
<p>The problem with these two open source projects, and others, is not that they are open source. Open source is awesome, and it&#8217;s the only reason these projects can even compete in the first place. The problem is that unlike say, the Apache web server, these target every day users. However, their philosophies and policies do not make the experience of the user their number one priority. </p>
<p>Yes, there are good reasons behind these policies. I support stable software releases and being as open as possible. It&#8217;s simply that the user experience is even more important than either of those. You need to make exceptions to policy when the user is suffering. If a store didn&#8217;t make a reasonable exception to its return policy, you would give it a bad review and maybe even stop shopping there. Why can&#8217;t open source projects also make reasonable exceptions? If they don&#8217;t, they&#8217;ll just slowly lose ground to their competitors.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/strict-open-source-policies-lead-to-fail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Real Rip-Off in Wireless</title>
		<link>http://www.apreche.net/the-real-rip-off-in-wireless/</link>
		<comments>http://www.apreche.net/the-real-rip-off-in-wireless/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 15:14:49 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1140</guid>
		<description><![CDATA[Verizon and AT&#38;T recently cut prices on their unlimited voice and data plans. Whoop de doo. Text messages are still a rip-off. Data still isn&#8217;t truly unlimited. People seem to really be focusing on these data plan prices. Meanwhile, people &#8230; <a href="http://www.apreche.net/the-real-rip-off-in-wireless/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Verizon and AT&amp;T recently cut prices on their unlimited voice and data plans. Whoop de doo. Text messages are still a rip-off. Data still isn&#8217;t truly unlimited. People seem to really be focusing on these data plan prices. Meanwhile, people are ignoring the voice prices. Let me tell you, that is where the real rip-off is coming from.<span id="more-1140"></span></p>
<p>I remember when I was a kid, and landline phones were still huge. Sprint made a big deal about their ten cents a minute.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/D9bvxqpq_zk&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/D9bvxqpq_zk&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>The number of cents you paid per minute was a huge deal. I remember my grandmother would dial a five digit number before making a long distance call in order to get the price down to five cents per minute. With <a href="http://www.truphone.com/">truphone</a> you can now make many international calls for under three cents per minute. Taking inflation into account, voice calls have gotten ultra cheap over the years.</p>
<p>Now, I&#8217;m someone who doesn&#8217;t talk on the phone much at all. I still need a phone number because it&#8217;s sort of necessary for engaging with society. I also do call family and relatives, and occasionally friends when necessary. But most of my calls are very very short.</p>
<p>So what am I paying for this voice service I hardly use? I have AT&#038;T&#8217;s &#8220;Nation 450 Rollover &#038; 5000 Night/Weekend &#038; Unlimited Mobile-To-Mobile Minutes&#8221; plan. It costs me $39.99 a month. There is no smaller plan available. If you do the math, this comes out to under ten cents per minute. If I&#8217;m paying for just the 450 minutes alone, each minute is under 9 cents. Good deal right?</p>
<p>It would be a good deal if I talked on the phone. As it stands, 4135 rollover minutes available. Oh they&#8217;re so generous letting me rollover the minutes, right? Wrong. The rollover is just an excuse. It makes you feel less bad about paying for all these minutes you never use. The thing is, if you never use them, you&#8217;re paying lots of money for absolutely nothing.</p>
<p>On my last bill I used 20 of the 450 minutes, 4 unlimited M2M minutes, and 64 night &#038; weekend minutes. Even if I were paying a ludicrously high price of 25 cents per minute, for all the minutes, my bill would have been $22. Instead, I&#8217;m paying 45 cents per minute. </p>
<p>The way they structure the plans is highly deceptive. You don&#8217;t think about your voice costs in terms of cents per minute anymore, because you are paying a fixed rate. But when you really think about it, you&#8217;re either paying for something you don&#8217;t use, or you&#8217;re paying way too much for the little that you do use.</p>
<p>Now, for someone who talks on the phone a lot, this probably isn&#8217;t a problem. If I actually used all those minutes, I would actually be getting a pretty good deal. It wouldn&#8217;t be an amazing deal, but certainly not a rip-off. </p>
<p>The other carriers are no better. T-Mobile and Verizon have similar minimum plans of 450-500 minutes for $40. Sprint has a voice plan of 200 minutes for $30. I think somewhere in the fine print there&#8217;s the option to not pre-pay for any minutes, and pay only for the minutes you actually use. Of course, they charge 45 cents for those minutes, making it moot.</p>
<p>There is an argument to be made that wireless minutes should be more expensive than land line minutes. That&#8217;s acceptable, but it&#8217;s not true. Remember, if I used all my minutes, I&#8217;d be paying a reasonable price for them. The problem is that the minimum tier is much too high.</p>
<p>I&#8217;m willing to bet if you looked at the books for any of these wireless companies you would see millions upon millions of dollars paid for unused minutes. I&#8217;m paying as much money for unused minutes as I am for unlimited data, which I use a lot. It&#8217;s about 30% of my phone bill, and I wouldn&#8217;t be surprised if it was 20-30% of their revenues.</p>
<p>Yes, text messages are a rip-off. Yes, data plans are secretly and evilly limited. But most of the money people like me are losing is paying for minutes we never use. Over the course of my two year iPhone contract, I&#8217;ve probably paid over $700 for unused voice minutes. </p>
<p>It&#8217;s nice that we&#8217;re actually seeing a little price war for the unlimited plans. These guys are actually starting to cut some of their ludicrously high margins on the high-end in order to push high-end smart phones to more customers. That&#8217;s well and good, but let&#8217;s also see some competition for the lower end plans. I want to see unlimited data and text for $30-40 with 100 voice minutes for $10-20. Even those prices are a little high, but they are far more reasonable than what I&#8217;m forced to pay now.</p>
<p>Maybe soon I&#8217;ll be able to ditch voice service altogether and use a VOIP solution. Perhaps the reason they don&#8217;t improve their data networks and expand coverage more quickly is to prevent me from doing that very thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/the-real-rip-off-in-wireless/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source is Good for the Environment</title>
		<link>http://www.apreche.net/open-source-is-good-for-the-environment/</link>
		<comments>http://www.apreche.net/open-source-is-good-for-the-environment/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 01:21:13 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1130</guid>
		<description><![CDATA[Despite all the amazing things we can do with electronics, and despite increases in efficiency, the physical reality is very wasteful. Computers, and other electronics use a lot of electricity, much of it is used for nothing. Discarded electronics fill &#8230; <a href="http://www.apreche.net/open-source-is-good-for-the-environment/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Despite all the amazing things we can do with electronics, and despite increases in efficiency, the physical reality is very wasteful. Computers, and other electronics use a lot of electricity, much of it is used for nothing. Discarded electronics fill landfills, and release the poisonous chemicals they are made of. During the winter, they are efficient space heaters, but during summer they make extra work for air conditioners. We would all be a lot less wasteful if we reduced how many electronic devices we buy, and if we upgraded them as rarely as possible.</p>
<p>If you accept that, then you must also accept that open source is the only environmentally responsible method of software and hardware development.<span id="more-1130"></span></p>
<p>A month ago I went to the Boxee Beta unveiling in Brooklyn. I asked Avner Ronen why the Boxee Box didn&#8217;t include Cable Card, DVR, Blu-Ray, etc. Because the Boxee Box only ran Boxee, it would increase the number of boxes under a TV, not decrease them. He agreed that there was definitely a box fatigue, and he also wanted fewer boxes under his TV. He expressed hope that another electronics manufacturer would produce a machine that would run Boxee and all of those other applications simultaneously, but the Boxee Box would not be that device.</p>
<p>There was a time where typewriters were obsolete, but PCs hadn&#8217;t yet become affordable, there was a product known as a word processor. All that machine did was process words. Imagine if today you bought one computer that only ran Microsoft Word. Imagine if you had to buy a separate machine for iTunes, and a separate machine for web browsing, and so on. It&#8217;s so obviously ridiculous, even normal people would laugh. You have a general purpose computer that is capable of running a wide variety of software. There is no reason to have specialized hardware for a single piece of software for the vast majority of applications, especially consumer applications.</p>
<p>As you are reading this right now, I want you to think about the boxes you have under your TV. I imagine that most people have a cable box, some game consoles, a DVD or blu-ray player, a DVR, maybe a Slingbox, and maybe even an old VCR. Some of these have been combined. Many cable boxes have a DVR in them. Game consoles tend to include DVD or Blu-Ray players. That being said, people I know have a lot of boxes in their primary entertainment centers.</p>
<p>This is just as ludicrous as having a separate computer just for word processing. All of those boxes are general purpose computers. There is absolutely no reason that you can&#8217;t have one box that is a cable box, DVR, DVD/Blu-Ray player, game console, and all around media handling machine. How come such a box doesn&#8217;t exist? Sure, some nerds have built such boxes on their own, but there aren&#8217;t any that are available to consumers on the mass market.</p>
<p>The reason is closedness. Cable boxes are closed. DVD and Blu-Ray decoding is closed. Game consoles are closed platforms. A DVR doesn&#8217;t have to be closed source, but many things it deals with, like video codecs, DRM, and other media protocols, are closed. Even VCRs have Macrovision DRM to deal with.</p>
<p>To protect the closed nature of all of this software, it is delivered to the user in a black box. They provide unopenable and unmodifiable hardware with the software built-in. If you want to add any features, you need to get more boxes or different boxes. Sometimes those other boxes do not work well in concert with the black boxes, and you get duplicate functionality. This is ludicrous and technologically unecessary.</p>
<p>The only benefit of this system is that it gives the media companies some slight protection against piracy and such. As I&#8217;m sure you are well aware, it is working really really well. No matter how hard I try, I can&#8217;t find any high definition movies or TV shows available for free. Man, it&#8217;s so worth wasting all this extra energy on electronics to prevent piracy.</p>
<p>The benefits of opening all these systems are that consumers will have an infinitely better experience, and we will reduce a tremendous amount of waste. There is no reason that we all can not have one single computer under our TVs that runs any and all living room entertainment software.</p>
<p>Game console makers should even pack it in. Their insistence on making games for proprietary consoles is silly. There is no reason people can&#8217;t just make PC games that have different modes when hooked up to a TV instead of a monitor. Gaming controllers like Wiimotes (unofficially via Bluetooth) and XBox 360 controllers (officially via USB) already work with PCs just fine.</p>
<p>If all of this software were open source, then everyone would be able to have one, and only one, box under their televisions. That box would handle everything from watching YouTube to watching the pre-recorded evening news. The software on it could be upgraded almost perpetually to handle any new applications, like 3D movies. You might not even need a power strip behind your TV. Heck, you could reduce the audio and video cable rats nest to just one or two wires. We would all save a lot of money and space in the landfill thanks to reducing our box count. Not to mention our entertainment centers would be a lot less cluttered and more aesthetically pleasing.</p>
<p>Also, be aware that I&#8217;m just using the home entertainment system as an easy example. There are plenty of other areas in which lack of openness increases our need for extra devices. Almost every electronic device you see nowadays has a general purpose processor inside. If it does, then it is capable of handling far more functionality than the built-in software allows. Even for all of the things an iPhone can do, the piles of rejected apps are clear evidence that the hardware is capable of far greater functionality than the software allows for. You can also see clear evidence by looking at the wide range of devices which have been made to run Doom and/or the Linux kernel.</p>
<p>If all of these things were open source, we could exploit every piece of hardware to its fullest potential by modifying the software. A black box is almost always going to fall short of achieving its full potential. It will always have possible capabilities that go unused due only to lack of software. If that capability is desired, it will only be achieved through the production of yet another piece of hardware, and expenditure of more money and energy.</p>
<p>Waste not with open source.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/open-source-is-good-for-the-environment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Use Cases for a Tablet</title>
		<link>http://www.apreche.net/the-use-cases-for-a-tablet/</link>
		<comments>http://www.apreche.net/the-use-cases-for-a-tablet/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 00:43:22 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1126</guid>
		<description><![CDATA[Any product, especially an electronic device, has to have very strong use cases to succeed. People use a TV to view video entertainment while being comfortable in their homes. People use a mobile phone to keep in touch with others &#8230; <a href="http://www.apreche.net/the-use-cases-for-a-tablet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Any product, especially an electronic device, has to have very strong use cases to succeed. People use a TV to view video entertainment while being comfortable in their homes. People use a mobile phone to keep in touch with others no matter where they are. People use a trash can as a place to temporarily store things they want to dispose of. But people use a tablet computer to&#8230; um&#8230;<span id="more-1126"></span></p>
<p>And the problem is pretty obvious. Companies want to make tablet PCs, but they don&#8217;t know the use cases. So far, tablets have just been crappy laptops without keyboards. That&#8217;s because the use cases that the manufacturers have in mind are the exact same use case that a laptop has. The result is devices that have the same use case as laptops, but are crappier than actual laptops. This is why tablets have been utter failures. The best they could come up with was that maybe a doctor would want one because it could be used while standing up near a patient&#8217;s bed.</p>
<p>Also, the original tablet computers all had resistive touch screens. The capacitive touch screen didn&#8217;t really exist yet. Everything was designed around a stylus without multi-touch. You couldn&#8217;t type with two thumbs, pinch, scroll, etc. They also had no accelerometers or other sensors. Designing around those technologies prevented them from making a worthwhile device, even if they had the right uses in mind.</p>
<p>Even today, people are only starting to get the right idea about the uses for a tablet PC. People are suggesting to use them as remote controls for home media centers. That&#8217;s a good start, the &lt;a href=&#8221;http://www.pepper.com/&#8221;&gt;Pepper Pad&lt;/a&gt; was doing it years ago. Some are using them as e-readers. You could even argue that the Kindle and other e-readers are actually tablets. Even so, these limited uses are not enough to justify the expense of a tablet PC when you can just get a Logitech remote control and a netbook.</p>
<p>It&#8217;s looking like the long awaited Apple tablet is finally moving from rumor to reality. I anticipate that this iSlate, or whatever it will be called, is going to satisfy one of the two worthwhile use cases for tablet computing, but there is still one other use case that has been completely ignored. That second use case offers a land of opportunity for any electronics company that is willing to go for it.</p>
<p>But first, let&#8217;s discuss Apple&#8217;s tablet. Where could it fit into the lives of consumers? Well, I don&#8217;t know about other people, but I can tell you where it fits into my life. Every morning I am awoken by the alarm in my phone. I pick up said phone and check it before getting out of bed. I then go through my morning routine on my desktop. Then I go to work, using my phone in transit if necessary. I use a desktop/laptop at work. I return home to use my desktop for personal work, like this blog post. If I go out to a friend&#8217;s house or such, I bring my laptop for when my phone won&#8217;t suffice.</p>
<p>Where does the tablet fit in? It fits in for comfortable non-work home computing. When I wake up in the morning and check my phone, that kind of sucks. Even if you have an iPhone, it is small and harder to use than something with a bigger screen. That lack of comfort and size are exchanged for portability. But if I&#8217;m in bed, I don&#8217;t need portability. My laptop can get the job done, but it sucks to use a laptop in bed. I have to sit up and type. I only need a keyboard if I need to work, not to read some emails and web comics.</p>
<p>If I&#8217;m eating lunch, and I want to read some news while I eat, I have to sit at a table or desk, upright, in front of a desktop or laptop. There is no way I can lay down and recline on the couch while simultaneously browsing the web comfortably. Sure, I can use my phone, but again, it is tiny and uncomfortable.</p>
<p>This is the use case that Apple&#8217;s tablet is going to fulfill. You&#8217;ll use it in bed, on the couch, or anywhere else around the house you just want to be comfortable and read the web. I&#8217;m probably not going to get one, due to cost and closed Apple-ness, but I will probably get a competing device when they inevitably appear within a year.</p>
<p>So what&#8217;s the other use case for a tablet PC? If you have been paying attention, ever since tablet PCs hit the scene, only one group of people have wanted them very badly. Go and search the web for tablet PC discussion groups. Who will you find in there? Artists, that&#8217;s who.</p>
<p>Tablet PCs are perfect for artists. Most artists get by using Wacom tablets to draw in the digital world. The problem with them is that you look at the screen and draw on the tablet. It&#8217;s much more natural to draw directly on the screen, simulating drawing on real paper. Wacom does make a product called the Cintiq that does just that. The problem with the Cintiq is that it is incredibly expensive, and it&#8217;s basically a monitor. It is not portable at all.</p>
<p>What someone needs to do is make a tablet PC with a Wacom-powered screen. Make it just powerful enough to run Photoshop nicely, comfortable to hold, and at a good price. Artists will buy it like crazy. Right now these artists have to huddle over their desks, or carry around lots of equipment in their bags. Making a Wacom tablet computer will free them, and they will thank their saviors with piles of money.</p>
<p>Anyone out there who is looking at the tablet world, and trying to make sense of it, just think of the two use cases. Tablets will allow people to compute comfortably from their bed, couch, back porch, etc. They can also help out digital artists a great deal. If you find yourself wanting a tablet, think about what you are actually going to use it for. You&#8217;ll easily see how pointless existing tablets are, but you&#8217;ll also realize the potential of what they could be.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/the-use-cases-for-a-tablet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Absurdity of Mobile Phone Subsidies</title>
		<link>http://www.apreche.net/absurdity-of-mobile-phone-subsidies/</link>
		<comments>http://www.apreche.net/absurdity-of-mobile-phone-subsidies/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 17:00:53 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1115</guid>
		<description><![CDATA[The issue of mobile phone subsidies and early termination fees has been getting a lot of extra attention lately. The FCC has asked Verizon to explain its early termination fees, and why they are requiring higher fees for users of &#8230; <a href="http://www.apreche.net/absurdity-of-mobile-phone-subsidies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The issue of mobile phone subsidies and early termination fees has been getting a lot of extra attention lately. The FCC has asked Verizon to explain its early termination fees, and why they are requiring higher fees for users of certain phones. Their answer is, of course, ludicrous. But the fees were ludicrous to begin with. These problems are well known even outside of tech circles, but lets examine it much closer, shall we?<span id="more-1115"></span></p>
<p>The fundamental problem here is that people want fancy phones. The thing is, fancy phones cost a whole lot of money. If you pay full retail price for an unlocked smartphone, it can cost up to $1000, depending on the phone. You can get a really big TV for $1000. Most people, in the US at least, won&#8217;t pay that kind of money for a tiny phone, even though it is something they use constantly.</p>
<p>The solution is to subsidize the phones. Sell the phone for $200 or $100. Then, simply require the customer to stick with your service for two years. Over the course of those two years, you will make back the cost of the phone. If they leave early, you&#8217;ll take a loss, so charge them an early termination fee. Makes perfect sense, on paper.</p>
<p>In reality, it just doesn&#8217;t add up. Let&#8217;s say I already own an unlocked phone. I go to a carrier and ask for service. Even if I don&#8217;t get a contract, I&#8217;ll be paying the same data and voice rates as someone who had their phone subsidized by the carrier. Shouldn&#8217;t my monthly fees for data and voice be less? The carrier didn&#8217;t subsidize a phone for me, but I still have to pay them just as much money as if they had? If I stick with them for two years, then I&#8217;ve paid for a phone subsidy without receiving a heavily discounted phone! People who did not have their phones subsidized should pay less monthly than those who have.</p>
<p>Also, keep in mind that early termination fees never reduce to zero. The fee exists, supposedly, only because of the phone subsidy. Therefore, the cost of the ETF should be equal to the remaining unpaid value of the phone. Let&#8217;s say I get a phone and $400 of the price was subsidized down to $0 with a two year contract. 400 divided by 24 is about $17. The fee in the first month of service should be $400. The fee should then decrease by $17 each month, and in the final month the fee should be $17.</p>
<p>Wait, this payment structure sounds familiar. That&#8217;s right, it&#8217;s called a loan! Actually, it&#8217;s a 0% interest loan. It&#8217;s also exactly what mobile phone carriers need to replace subsidies with.</p>
<p>Step one is to lower all voice/data/text charges. They are absurdly high. Because there will be no more subsidies, there will be no more need for that kind of ripoff. Existing users with subsidized phones will still pay the old fees, or early termination fees, to grandfather them into the new pricing structure.</p>
<p>Step two is to advertise the true cost of phones. Let everyone know the full MSRP of each and every phone. This allows the customer to make a much more informed decision when they select a phone. It also gives people the option of buying phones without service. Carriers won&#8217;t like this, because most people will opt for the cheap phones once they realize the trust cost of the expensive ones. Those cheap phones don&#8217;t require the data plans and other features that the carriers also like to charge an arm and a leg for.</p>
<p>The final step is to offer financing. Even affluent people don&#8217;t want to shell out that much money on a phone all at once. Instead, the carrier offers financing at zero or a very low interest rate, obviously depending on the customer&#8217;s credit rating and such. The monthly payments for this loan will be included in the monthly bill for voice and data. Even if someone cancels their voice and data contract, they will still have to pay off the device itself, or return it.</p>
<p>This is really a win win solution. Carriers will save money from subsidies, and maybe make money with a small and reasonable amount of interest on the financing. Customers will have the freedom to switch carriers as they please, and pay reasonable prices for voice and data service.</p>
<p>The last piece of the puzzle are the device manufacturers. Because of carrier lock-in and subsidies, most handset manufacturers are really selling their product to carriers, not to customers. Motorola and LG make a handset that Verizon loves, not one that you and I love. I think that Apple has demonstrated with the iPhone that by creating a handset for the customer, you can make the real bank. If subsidies go away, perhaps we will see some real competition between the manufacturers for the consumer&#8217;s love. That should result in the current phone arms race escalating and resulting in better cheaper devices for everybody.</p>
<p>Kill subsidies. Get rid of the contracts. Charge full price for devices, but allow financing. Problem solved. Do it now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/absurdity-of-mobile-phone-subsidies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unusable Open Source</title>
		<link>http://www.apreche.net/unusable-open-source/</link>
		<comments>http://www.apreche.net/unusable-open-source/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 14:54:47 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=1041</guid>
		<description><![CDATA[Still unemployed, I have begun working on a new web site that will at least enhance my resume if it doesn&#8217;t make me any money. Since I&#8217;ve got no boss telling me what to do, I can use the latest &#8230; <a href="http://www.apreche.net/unusable-open-source/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Still unemployed, I have begun working on a new web site that will at least enhance my resume if it doesn&#8217;t make me any money. Since I&#8217;ve got no boss telling me what to do, I can use the latest and greatest open source tools. This site will be up in no time at all because no wheels will have to be reinvented. If only that where the case. As I really started to get my hands dirty, I began to realize just how many of the great tools out there are in an unusable state.<span id="more-1041"></span></p>
<p>The first decision I made was to build the site with <a href="http://www.djangoproject.com/">Django</a>. It has been my web framework of choice for many months now. I used it to build the new <a href="http://www.frontrowcrew.com">frontrowcrew.com</a>, and I&#8217;m very satisfied. The thing is, Django wasn&#8217;t always usable.</p>
<p>Some months ago Django 1.0 was not released yet. Yet, when you went to the Django web site and community, it seemed as if nobody was using 0.96, the stable version. When you go to the Django documentation online, it defaults to showing you the documentation for the version currently in development, rather than the latest stable version.</p>
<p>If at that point in time you wanted to start a new project with Django, you had a tough decision to make. Do you start with 0.96 and stick with it? Do you start with 0.96 and go through the hassle of porting over to 1.0 later? Do you deal with the hassle of building on the development version and build your way up to the actual release? Do you just not start your project and wait for the release? This is a difficult decision to make, and there&#8217;s an easy answer I left out. Maybe you just shouldn&#8217;t use Django, and go find something else that isn&#8217;t in a state of flux?</p>
<p>Happily, Django 1.0 has been released now, and this is no longer a problem. Well, at least it isn&#8217;t a problem for Django itself, but it is a problem for many things built around Django. Take <a href="http://pinaxproject.com/">Pinax</a> for example. Pinax is a project that builds on top of Django. They implemented a lot of solutions to things that are common to all web sites, such as registration, password management, blogging, friend, and tagging. My new site idea will need some of those things, and I want to reinvent as few wheels as possible, so Pinax was very appealing to me.</p>
<p>The problem is that Pinax is currently in the state of flux that Django used to be in. There are sites out there which are built using Pinax, so it can be done. However, the current stable version seems to have been largely abandoned by the community. In my limited experience, the development version appears to be far superior, but it&#8217;s still in development. Worse, as a newcomer to the Pinax project, their documentation is very unreliable. I find myself asking those same questions all over again. Maybe it&#8217;s easier to reinvent those wheels than it is to deal with the hassle of closely tracking someone else&#8217;s project?</p>
<p>Let&#8217;s say I just want to add tagging to my Django application. Why should I bother with Pinax, I can juse use <a href="http://code.google.com/p/django-tagging/">django-tagging</a>. It has a stable version 0.2 that came out, over a year ago? The site says that version 0.3 is targeting Django 1.0. In other words, it&#8217;s completely useless. I&#8217;m not going to use Django 0.96 just so that I can use the stable version of django-tagging. I&#8217;m also not going to go through the hassle of using an unstable version of django-tagging 0.3 from their SVN trunk. Since their project was dependent on Django, it was their job to follow Django&#8217;s SVN trunk and have django-tagging compatible with Django 1.0 the day that Django 1.0 was released, or very soon after. Their failure to do so has made their project useless.</p>
<p>Just for kicks, let me talk about <a href="http://laconi.ca/trac/">Laconica</a>. Laconica is an open micro-blogging platform. Think of it as a Twitter clone, but with a different, and better, system architecture. I&#8217;ve been running <a href="http://sufficetosay.frontrowcrew.com">an installation of it</a> for our podcast community, and it&#8217;s very nice for the users.</p>
<p>The problem with Laconica is that it&#8217;s a nightmare on the back-end. The project has noble goals. They want it to be as easy to install, upgrade, and administer as WordPress. And while they have the first verison of a web installer, the underlying architecture is frighteningly bad. You have to run a set of daemons to handle the queueing of in and outbound messages. That kind of design is going in the exact opposite direction of making things easy. What&#8217;s worse is that in the latest version they added even more daemons, and two of them decided to <a href="http://laconi.ca/trac/ticket/1429">eat up all my CPU</a>. Because it&#8217;s under constant development, there are frequent updates with awesome and significant improvements. That&#8217;s very good, but the upgrading process is nightmarishly difficult. I want to keep the Laconica server running for the users who enjoy it. It&#8217;s just that the administration is far more work than it&#8217;s worth.</p>
<p>Here&#8217;s the one piece of advice I can give to open source project managers out there. Make sure to maintain a degree of separation between your development community and your user community. A very small percentage of the people who want to use your project actually want to get involved in working on the project itself.</p>
<p>My web site is going to use Linux, Ubuntu, Apache, Python, Django, numerous Python modules, CouchDB, Postgres, memcached, and many other open source projects. If I&#8217;m working to build the site, I need all those things to &#8220;just work.&#8221; I don&#8217;t have time to get heavily involved in the communities for any of them. Any effort I have to spend tracking development versions, or dealing with bugs in someone elses code, brings me closer to the point where I would have been better of building it myself.</p>
<p>Actually, let me offer one more piece of advice. Lots of small easy upgrades are better than a few big ones. The difference between Pinax&#8217;s stable and development versions is enormous. What if instead of having that huge gap, they had instead made many small upgrades to the stable version over time? The gap between stable and development would be much smaller. Using the stable version wouldn&#8217;t be such a bad idea after all, and upgrading to newer stable versions wouldn&#8217;t be as bigÂ  a deal.</p>
<p>I&#8217;m a programmer trying to do a project on my own. I&#8217;m smart and full of enthusiasm for the latest and greatest open source goodness. I want to do everything the right way. I want to utilize as much open source code as possible, so that I only have to write the code specific to my project. Sadly, I am unable to do that if the open source projects are in a state of flux, or can&#8217;t be relied upon. When reusing code requires just as much effort as rewriting code, you know something is wrong.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/unusable-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django Favicon with Amazon S3</title>
		<link>http://www.apreche.net/django-favicon-with-amazon-s3/</link>
		<comments>http://www.apreche.net/django-favicon-with-amazon-s3/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 21:38:20 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=774</guid>
		<description><![CDATA[I had a little trouble today trying to get a favicon for my django site. I found some solutions online, but they assumed that you were serving your media statically through your apache server. I&#8217;m serving all my static files &#8230; <a href="http://www.apreche.net/django-favicon-with-amazon-s3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had a little trouble today trying to get a favicon for my django site. I found some solutions online, but they assumed that you were serving your media statically through your apache server. I&#8217;m serving all my static files through Amazon S3, so those techniques didn&#8217;t work for me. Here&#8217;s how I did it instead.</p>
<p><span id="more-774"></span></p>
<p>First, I copied my favicon.ico to my S3 bucket. It&#8217;s just a 16&#215;16 png file that I renamed.</p>
<p>In my settings file I made sure the MEDIA_URL was set to my S3 URL.</p>
<p>Then I made sure these things were imported in my urls.py</p>
<pre>from django.conf import settings
from django.views.generic.simple import redirect_to</pre>
<p>Lastly, I added this rule to my urls.py</p>
<pre>(r'^favicon.ico$', redirect_to, {'url':settings.MEDIA_URL+'favicon.ico'}),</pre>
<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/django-favicon-with-amazon-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Layman&#8217;s Cellphone Acronym Guide</title>
		<link>http://www.apreche.net/laymans-cellphone-acronym-guide/</link>
		<comments>http://www.apreche.net/laymans-cellphone-acronym-guide/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 17:53:27 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=681</guid>
		<description><![CDATA[A lot of people are very confused when it comes to cellphone wireless acronyms. They hear things like 3g or EV-DO, and they don&#8217;t know what to make of them. Even if they try to read the Wikipedia, it&#8217;s far &#8230; <a href="http://www.apreche.net/laymans-cellphone-acronym-guide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A lot of people are very confused when it comes to cellphone wireless acronyms. They hear things like 3g or EV-DO, and they don&#8217;t know what to make of them. Even if they try to read the Wikipedia, it&#8217;s far too complicated and technical. I decided I would make this little layman&#8217;s guide to cellphone acronyms. I&#8217;m not going to make sure everything is perfectly technically accurate. I&#8217;m only going to tell you what the average person needs to know about the terms. I&#8217;m mostly going to be discussing this from a US perspective, because that&#8217;s what I know.</p>
<p><span id="more-681"></span></p>
<p>Let me break this down by generation. The first generation, 1g, was analog cellphones. You know, those old gigantic things that had a battery that lasted 5 minutes. There were many different standards for analog cellphones, but they all worked on the same basic principle. They encoded your voice into an analog wave, and transmitted it using a very high powered radio to the cell tower that would receive it and connect you to the phone network. The reason the battery lasted for such a short time was because the radio used so much power. The analog network was really only capable of transmitting voice, just like the regular telephone network, but you could theoretically use dial-up technology to transmit data over it very slowly and unreliably.</p>
<p>The main difference between 1g and 2g was that it moved from being analog to digital. The radios used a lot less power, audio quality increased, and you could send data as well as voice over the network. 2g is just better than 1g in every way.</p>
<p>The thing about 2g is that there are many different digital standards that work differently and are not compatible. Some phone carriers chose to use one set of digital technologies, and others chose a different set. Most of the world chose to use GSM, GPRS, and EDGE as 2g standards. Companies like Verizon, Sprint, and a few others chose to use CDMA, and 1x. That is why AT&amp;T phones work in Europe, but Verizon phones do not.</p>
<p>Another thing is that the 2g phones that use GSM, GPRS, and EDGE have SIM cards, while the CDMA and 1x phones typically do not. A SIM card is a little plastic card that holds all your account information. In Europe, where most phones are unlocked, you can take your SIM card and put it in any phone. That phone is now your phone. If someone calls your number that phone will ring. This gives you the ability to change phones at any time. You can also do cool stuff like let your friend borrow your phone to make a call on his own dime when his battery ran out.</p>
<p>In the US, many people use Verizon and Sprint, who do not have SIM cards in their phones. Even people who use AT&amp;T or T-Mobile, who do use SIM cards, have phones that are locked. If a phone is locked, it will only work with one particular SIM card. So even though you can take your card out and put it in an unlocked phone to make a call, you can&#8217;t have someone else put their card in your phone. This is why people fight so strongly to get their phones unlocked. The one downside of having phones unlocked is that it suddenly becomes a really good idea to steal expensive phones. I think that is a small price to pay for the convenience, freedom, and power for the consumer.</p>
<p>So 3g is all the rage these days. 3g simply refers to the third generation of wireless technologies. That includes things like HSDPA and EV-DO. These are still digital wireless technologies, like 2g, but they are capable of very fast data transfers. They aren&#8217;t as fast as a wifi, but they are so fast you can watch youtube over them if the signal is strong. There are many things you can buy that allow laptops to connect to 3g networks, so they can get really fast data service if no wifi is available.</p>
<p>Verizon and Sprint use EV-DO, while AT&amp;T and T-Mobile use HSDPA. When people talk about the iPhone using 3g, they are talking about HSDPA. Apple just says 3g, because it is a better term for marketing purposes than a complicated thing like HSDPA.</p>
<p>The one last thing to talk about is 4g. 4g is the future. 4g basically kicks all ass, on paper. Theoretically we will be able to get super fast data everywhere. People are talking about speeds of 100Mbits minimum. We will see in the future what the reality is, but there is one thing very interesting about 4g. It seems as if Verizon, AT&amp;T, and T-Mobile have all chosen LTE as their 4g technology of choice. When the 4g comes, we may finally see all the major carriers in the US using the same technology and delivering compatible phones. With Verizon promising any phone, any app, 4g finally might fix our troubles.</p>
<p>For any of you people out there who are getting ready to comment, yes I know that technically UTMS( HSDPA) is 3.5g, and that EDGE is 2.75g, but the purpose of this was to help people attain a colloquial understanding of the terminology, not to be super precise and confuse them further.</p>
<p>I hope I succeeded in helping people understand the weird cellphone acronyms. I just see so much confusion online, I had to do something.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/laymans-cellphone-acronym-guide/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Open Source and iPhone Apps</title>
		<link>http://www.apreche.net/open-source-and-iphone-apps/</link>
		<comments>http://www.apreche.net/open-source-and-iphone-apps/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 15:04:21 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=677</guid>
		<description><![CDATA[Here&#8217;s just a quick bit about open source on the iPhone. We all know that the iPhone development kit agreement prevents developers from making open source iPhone applications. This means that every iPhone application has to be developed by a &#8230; <a href="http://www.apreche.net/open-source-and-iphone-apps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s just a quick bit about open source on the iPhone. We all know that the iPhone development kit agreement prevents developers from making open source iPhone applications. This means that every iPhone application has to be developed by a company, or individual. You can&#8217;t have a team of people around the world collaborate openly to make an amazing iPhone application.</p>
<p><span id="more-677"></span>There is another side effect of this that isn&#8217;t immediately obvious. Existing open source applications that are licensed under the GPL, and other similar licenses, can not be legally ported to the iPhone. If you make modifications to a program under the GPL, you must open source your derivative code. The Apple agreement prevents you from doing this. Therefore, you can&#8217;t port emacs to the iPhone without violating either the GPL or the agreement with Apple.</p>
<p>In the wake of the <a href="http://news.slashdot.org/article.pl?sid=08/08/13/1857241">recent court ruling</a> upholding the Artistic License, we are more sure than ever that open source licenses are enforceable. Thus, the only chance we have of seeing many open source apps ported to the iPhone is if Apple makes a change, because the GPL isn&#8217;t going anywhere.</p>
<p>Luckily many open source projects are licensed under the BSD, MIT, or other similar licenses. Projects under these licenses can be ported to the iPhone because the derivative code does not need to be open sourced. This is why we are seeing iPhone applications that contain code from PuTTY, OpenSSH, OpenSSL, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/open-source-and-iphone-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

