<?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; howto</title>
	<atom:link href="http://www.apreche.net/tag/howto/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>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>How To Setup Android SDK in Ubuntu</title>
		<link>http://www.apreche.net/how-to-setup-android-sdk-in-ubuntu/</link>
		<comments>http://www.apreche.net/how-to-setup-android-sdk-in-ubuntu/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 17:26:15 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.apreche.net/?p=549</guid>
		<description><![CDATA[If you pay attention to technology at all, you probably know about Google&#8217;s Android platform. People have largely panned it because they were expecting a gPhone to do battle with the iPhone. I think they are missing the point. This &#8230; <a href="http://www.apreche.net/how-to-setup-android-sdk-in-ubuntu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you pay attention to technology at all, you probably know about <a href="http://code.google.com/android/index.html">Google&#8217;s Android</a> platform. People have largely panned it because they were expecting a gPhone to do battle with the iPhone. I think they are missing the point. This is the first time ever where there is a well documented and supported open source mobile platform. I joined the Android developer&#8217;s mailing list last night, and I&#8217;ve already gotten almost 200 messages on it. Whether or not people are excited, developers are excited about developing mobile applications for this new platform. Some of that excitement might have to do with the <a href="http://code.google.com/android/adc.html">cash prizes</a>, but I doubt that&#8217;s the only factor.</p>
<p>Anyway, one of my major disappointments with the iPhone is the lack of podcatching software. If it had a podcatcher, I probably would have bought one right off the bat. Android has presented me with the opportunity to write my own mobile podcatching software. I&#8217;ve decided that I&#8217;m going to go for it. Being an Ubuntu user, I had to setup the SDK to get working. However, I ran into a few problems along the way. Since I suspect many other Ubuntu users out there also might want to get into the Android developing business, here I will post how I got the development environment setup in Ubuntu.<span id="more-549"></span></p>
<p>The first thing you need is a computer with Ubuntu 7.10 Gutsy Gibbon installed. The computer should be connected to the Internet. Ubuntu by default tries to use open source versions of Java, and while these are pretty good, they will not work for android development. The fact that Ubuntu will not default to using Sun Java, even after you install it explicitly, is the primary reason this how to is necessary. Anyway, the first step is to update your packages and install Eclipse and Sun Java.</p>
<pre>sudo aptitude update</pre>
<pre>sudo aptitude install eclipse sun-java6-jdk</pre>
<p>If you want to use Sun Java as the default JVM in your web browsers, run this command as well.</p>
<pre>sudo aptitude install sun-java6-plugin</pre>
<p>Now you need to make Sun Java the default jvm in Ubuntu. You can do that with this command.</p>
<pre>sudo update-java-alternatives -s java-6-sun</pre>
<p>We also need to edit the file /etc/jvm. Edit that file as root with your favorite text editor.</p>
<pre>sudo gedit /etc/jvm</pre>
<p>The contents of the file will look something like this.</p>
<pre>/usr/lib/jvm/java-gcj
/usr/lib/jvm/ia32-java-1.5.0-sun
/usr/lib/jvm/java-1.5.0-sun
/usr</pre>
<p>Change it to look like this, then save and quit your text editor.</p>
<p><code>/usr/lib/jvm/java-6-sun<br />
/usr/lib/jvm/java-gcj<br />
/usr/lib/jvm/ia32-java-1.5.0-sun<br />
/usr/lib/jvm/java-1.5.0-sun<br />
/usr</code></p>
<p>When certain programs on your system want to run java, they will look at this file to figure out which JVM to use. They will try every JVM in the list starting with the one on top until one of them works. Eclipse, however, does not use this file. It has its own file that works in the same way. First edit the eclipse java_home file as root.</p>
<p><code>sudo vim /etc/eclipse/java_home</code></p>
<p>There should already be a line in that file for Sun Java 6. Move this line to the top of the file. Add it to the top if it isn&#8217;t there.</p>
<p><code>/usr/lib/jvm/java-6-sun</code></p>
<p>Now your Ubuntu system is ready to run the Android development kit. Go to the <a href="http://code.google.com/android/documentation.html">Android documentation site</a> and follow the directions there. Have fun making mobile apps in Java!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/how-to-setup-android-sdk-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Make Major Purchasing Decisions</title>
		<link>http://www.apreche.net/how-to-make-major-purchasing-decisions/</link>
		<comments>http://www.apreche.net/how-to-make-major-purchasing-decisions/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 16:29:30 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://www.apreche.net/2007/10/19/how-to-make-major-purchasing-decisions/</guid>
		<description><![CDATA[This is here for all the people who spend too much money on things they don't need. This is for the people who buy things and then get upset only after making the purchase. This is for people without common sense. Learn to make a decision! <a href="http://www.apreche.net/how-to-make-major-purchasing-decisions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Being a podcaster, especially a technology podcaster, results in many people considering me to be an authority on tech products. Thus, people often ask me for help them make technology purchasing decisions. It amazes me how most of these people lack basic decision making skills. I guess I have wrongfully assumed that this sort of thing was common sense. Instead, I find myself giving the same spiel over and over again. To save myself the effort, here it is once and for all. Scott&#8217;s step by step guide explaining how to make a major purchasing decision.<span id="more-526"></span></p>
<ol>
<li>
<h3>Step 1 &#8211; Determine your needs</h3>
<p>What is it exactly that you need? &#8220;I need a laptop&#8221; is not an answer. Do you need to have a computer that you can carry around? How often and how far are you going to carry it? How long do you expect to use it without charging it? What will you do with the laptop? Will you watch movies, play games, or just do office stuff? You can ask these kinds of questions about any product, technology or otherwise.</p>
<p>This is often the hardest part for people. They are used to making decisions like &#8220;oooh, that looks shiny, I want it!&#8221; This is why iPods sell so well while many people would be better served by a Sansa or a Cowon. This is why people buy SUVs rather than sedans. You ask them what they need, and they immediately say SUV. They don&#8217;t say that they need a motor vehicle capable of seating 4 people comfortably, driving X miles per year. To make smart purchasing decisions you need to examine your needs on a more fundamental level. You also need to be able to throw away meaningless wants, such as desire for shininess. Heck, you might even discover that you actually don&#8217;t need anything at all! This is the best because you just put your money into savings.</li>
<li>
<h3>Step 2 &#8211; Research, research, research</h3>
<p>Once you know what your needs are, you can start researching. The bigger the purchase, the more research you need to do. Buying the wrong computer mouse is not a big deal, buying the wrong car will have you upset for a decade or more. You should research every single product that can possibly meet your needs. Don&#8217;t think too narrowly either. You might start thinking about sports cars, but then realize that a sport bike meets your needs. You might start thinking about a giant video camera, but realize that a digital point and click meets your needs. Learn everything you possibly can about what you are buying until you are confident that you are almost an authority on it. If you don&#8217;t know more about the product you are buying than the salesmen selling that product, you haven&#8217;t done enough research. If you are going to own something and use it, you should know everything there is to know about that product. If you aren&#8217;t going to bother to learn about the things to buy, you shouldn&#8217;t be buying them.</li>
<li>
<h3>Step 3 &#8211; Consider turning back</h3>
<p>It is only at this point in time that you should think about money. Thanks to your extensive research, you should now have a good idea of which products most closely meet your needs. I run into many situations where there simply does not exist a product that meets my needs. Other times I find that every product that meets my needs is out of my price range. In situations like this you must make a decision. Are your needs urgent? Must they be fulfilled right now? Perhaps you are willing to sacrifice some of your needs in order to save money and avoid waiting. If you haven&#8217;t yet found a product that is affordable and meets all your needs, return to Step 1 and change your needs.</li>
<li>
<h3>Step 4 &#8211; Shop Around</h3>
<p>Once you have determined a product, or set of products, that meet your needs, it is time to shop around. Since you did research, you should know about all the different makes and models of whatever product you are considering. You should also know about what price is fair for these products. Go to every store you can until you find the lowest price you can possibly find. Do everything you can, within reason, to find the best price you can find. If you earn $50 an hour on your job, and you spend an hour of your time finding a deal that is $25 cheaper, you just lost $25. Meanwhile, if you spent an hour looking, and you found a deal saving you $100, you just made money. With the Internet, it shouldn&#8217;t take very long to realize what kind of deal you are going to be able to find.</li>
<li>
<h3>Step 5 &#8211; Buy</h3>
<p>You&#8217;ve got the product you want, you found a place to buy it at an agreeable price. Just buy it already! Too many people wait around too long to buy something. Unless you research shows that there will be big changes coming soon, just buy the product. Don&#8217;t give me that iPhone BS. Buying such a product at launch for that ludicrous price was a dumb idea whether they had the price drop or not. Barring these extreme cases, waiting to buy a product usually just means your needs will go unfulfilled for just one more day. You&#8217;ll be paying the same price for the same product, but you&#8217;ll be getting one less day&#8217;s worth of use out of it. If that one day of use will make a difference, buy it. If you are still not confident in your decision, you might have done a poor job of research or poorly evaluated your needs. When you buy, you buy knowing you made the right decision before you take out your wallet.</li>
<li>
<h3>Step 6 &#8211; Enjoy</h3>
<p>You bought it, now get your use out of it. Nothing is worse than when you buy something big, and then it sits on the shelf unused. If you do buy something and it remains largely unused, go back and figure out where you went wrong. Most likely you bought something you didn&#8217;t actually need. It&#8217;s also possible you may have purchased a product that doesn&#8217;t fulfill your needs. Think back to why you bought the product in the first place, and do a better job the next time. If you can, return the product and start the process again.</li>
</ol>
<p>Yes, I know this article is incredibly generic, and full of common sense. It&#8217;s so generic that I feel it is almost pointless to write it down. I might as well write an article all about the sky being blue. If you are thinking this is all just common sense, then you do not need to read this. Move on. This is here for all the people who spend too much money on things they don&#8217;t need. This is for the people who buy things and then get upset only after making the purchase. This is for people without common sense. Learn to make a decision!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/how-to-make-major-purchasing-decisions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gmail for Domains Default in Gnome</title>
		<link>http://www.apreche.net/gmail-for-domains-default-in-gnome/</link>
		<comments>http://www.apreche.net/gmail-for-domains-default-in-gnome/#comments</comments>
		<pubDate>Sat, 23 Dec 2006 16:07:07 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.apreche.net/2006/12/23/gmail-for-domains-default-in-gnome/</guid>
		<description><![CDATA[Do you use Gnome? Do you use Gmail for domains? Do you want to use your Gmail for domains account as the default e-mail application in Gnome? Today is your lucky day! <a href="http://www.apreche.net/gmail-for-domains-default-in-gnome/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Do you use Gnome? Do you use Gmail for domains? Do you want to use your Gmail for domains account as the default e-mail application in Gnome? Today is your lucky day! I took the script <a href="http://opensource.weblogsinc.com/2006/05/22/make-gmail-your-default-mailer-in-gnome/">from this website</a>, and modified them very slightly into <a href="http://www.apreche.net/~apreche/projects/gnome-gmail.txt">this script</a>. Modify the script for your particular domain and follow the original instructions. Works like a charm.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/gmail-for-domains-default-in-gnome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Advice</title>
		<link>http://www.apreche.net/quick-advice/</link>
		<comments>http://www.apreche.net/quick-advice/#comments</comments>
		<pubDate>Wed, 30 Aug 2006 18:08:58 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.apreche.net/2006/08/30/quick-advice/</guid>
		<description><![CDATA[If you are planning on using Linux as your desktop operating system, and you care to actually get real use out of it, then follow my instructions. Do not fix what is not broken. Do not tweak or change anything unecessarily. Do not do something unless you completely understand what it is you are doing. If you follow these three rules, you will have a much better experience. <a href="http://www.apreche.net/quick-advice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just want to give out a little advice to everyone out there. Recently I&#8217;ve been helping lots of people with Linux through the Qunu service. I&#8217;ve noticed a recent trend of people causing their own problems. So I wanted to give a short list of generic advice for anyone who is new to Ubuntu or Linux in general.<span id="more-243"></span></p>
<p>First off, if it isn&#8217;t broken, don&#8217;t fix it. One guy was having a problem because he was following some guide about how to setup the perfect Ubuntu install. He didn&#8217;t have a specific problem he was trying to fix or anything. He was just following some guide that claimed to provide directions to a perfect install. Luckily I was able to convince him that there was nothing wrong with his Ubuntu as it was, and none of that stuff was necessary.</p>
<p>Rule number two, don&#8217;t tweak things for the sake of tweaking things. Some people enjoy uselessly twiddling widgets on their computer for no reason. They like to do things they think increase performance just for fun. Not only do some of those tweaks not actually increase performance, but these people only use their computers as boxes of tweaking. If any performance is ever gained it is never used outside of a benchmark. Trying to uselessly tweak bits in your software without a reason is going to get you into trouble. Don&#8217;t be that guy. If you want to be that guy, get an old PC and install Gentoo on it.</p>
<p>Perhaps the most important rule is that you shouldn&#8217;t do anything unless you understand what it is you are doing. Far too many people find a howto guide and simply type all the commands in order. They don&#8217;t understand what any of the commands do. They don&#8217;t read the output from those commands. And even if they did read the output, they wouldn&#8217;t understand what it means. I put part of the blame on howto writers for not explaining what commands do, but simply giving direct instructions. However, users are not without blame. They blindly follow the instructions on random websites without even trying to understand what they are doing.</p>
<p>If you are planning on using Linux as your desktop operating system, and you care to actually get real use out of it, then follow my instructions. Do not fix what is not broken. Do not tweak or change anything unecessarily. Do not do something unless you completely understand what it is you are doing. If you follow these three rules, you will have a much better experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/quick-advice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mechwarrior 2 for Linux!</title>
		<link>http://www.apreche.net/mechwarrior-2-for-linux/</link>
		<comments>http://www.apreche.net/mechwarrior-2-for-linux/#comments</comments>
		<pubDate>Fri, 18 Jun 2004 03:35:05 +0000</pubDate>
		<dc:creator>Apreche</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Video Games]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.apreche.net/2004/06/17/mechwarrior-2-for-linux/</guid>
		<description><![CDATA[Mechwarrior 2 is one of the best games ever, and the old school dos version runs perfect under linux. <a href="http://www.apreche.net/mechwarrior-2-for-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Of all my years of gaming there is one game that has haunted me. This game is Mechwarrior 2. I purchased the game for my 486DX4 100mhz back in the day. It was great. It was the days when a CD-ROM and DOS was the hottest shit. The game had videos, 3d, the works. I ran at 640&#215;480 and blew my friends away. I couldn&#8217;t turn it all the way up because I didn&#8217;t have a PCI video card. Heck, I didn&#8217;t have a PCI slot! Just 4 ISAs on a riser board.</p>
<p><span id="more-48"></span></p>
<p>Anyway, this was the mid 90&#8242;s and it was around that time that windows 95 came out, duh. Eventually reluctantly I switched to windows 95 because every new program back then started to require it. Mechwarrior 2 was lost to me. I had beaten it, but it was still my favorite game of the time. Not of all time, just at that time in my life. Imagine being really into a game and still getting tons of enjoyment from it and then all of a sudden you can&#8217;t play it at all. Yes, I know what I could have done, but I didn&#8217;t have the computery knowledge I have now back then. I mean, I knew more than most, but not nearly as much as I know now.</p>
<p>In the later 90&#8242;s I got my first computer that was my own, it was Pentium 3 450mhz. It is serving this web page to you right now. The BX chipset, more specifically the Abit BX6r2.0 motherboard, is the most stable durable motherboard/chipset ever. If I had to pick one computer to use forever I would pick that because it would never fail me in a million years. Anyway, I ran 98SE and Red Hat on it. No room for Mech2.</p>
<p>When I got to college I replace Red Hat with Mandrake four years ago and replaced 98SE with win2k three years ago. 1 year ago, in fact last September, I switched the mandrake with gentoo. At this point I was doing linux and windows 50/50. I also got my new desktop last August, nforce2, Athlon XP 2500+, FX5900. It&#8217;s what I&#8217;m using right now. I plan to use it for 4 more years. Still no Mechwarrior 2. At this point it has been almost 10 years since I&#8217;ve played this game. All my NES games had come back to me through emulation, game boy or other means. The only games from my childhood I could not revive were old DOS games, especially mech2.</p>
<p>Earlier this year, early February, I was fooling around with dosbox in windows xp. I got mechwarrio2 to load and go through the menus, but it always crashed when it was time for the game to actually start. I was so close I could taste it, yet it would not go. I got other games to work, like Quest for Glory, my roommates favorite. But mech2 still eluded me. I know there was a windows version I could have gotten that probably would have worked but I wasn&#8217;t going to do that. I had the original DOS CD-ROM and it was going to run goddamnit.</p>
<p>Just this past week I got a new hard drive, 160 gigs for $120. I will never want for space again, until I start ripping DVDs. I took this opportunity to switch to being 50% linux to 100% linux. I do have a 10 gig windows partition, but I only need it to run Steam. If I get winex I wont need it at all. I have managed to use only linux for over 7 days, and I&#8217;m going to keep it that way. This decision to be linux only has benefited me in many ways, but my timing could not have been more impeccable. It is as if the stars aligned to return my mechwarrior to me&#8230;</p>
<p>I&#8217;m sure you are aware of the release of new versions of Firefox and Thunderbird. Well, after I emerge -upped firefox I cleaned out my bookmarks. I found a bookmark to the vogon&#8217;s forum where I posted when I was trying to get mechwarrior 2 to work in windows with dosbox. I searched for mechwarrior and there was a thread&#8230; Mechwarrior 2 works with dosbox. Holy shit! I click on it, and don&#8217;t you know, the instructions were for windows. Was I cursed? No, I was not. I quickly did esearch -c dosbox. Yes! dosbox was available for gentoo. I emerged it in a rush. After taking about 10 minutes to make it go and create a dos folder in /home/apreche/dos I was ready to go. By modifying the instructions in the forum and combining them with my cd-rom and what I learned the last time I tried to do this a miracle came to be. Right now, as I type this, on my other monitor is an X window. It is managed quite nicely by my XFCE4 window manager. And in this X window is mechwarrior 2. It is running absolutely flawlessly. The frame rate is full. The graphics are perfect. The controls are pristine. The resolution is 640&#215;480. I could not ask for more. Apparently the people running it under windows are still having sound problems. HAHAHAHA!!! I am the win!</p>
<p>It would take a whole lot to make me more happy right now. Its as if a long lost friend has returned out of the blue. And he returns to be a better friend than he was when he left. Back in the day I couldn&#8217;t run gaim and xmms while I played, guess what I can do now? With no loss in framrate no less. Mechwarrior 2 is one of the best games ever, and the old school dos version runs perfect under linux. This weekend I think I will try to get the ghost bear legacy expansion to run&#8230;</p>
<p>W00000000000000000000000000000000000T!!!!!!!!1111111111!!!One</p>
]]></content:encoded>
			<wfw:commentRss>http://www.apreche.net/mechwarrior-2-for-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

