<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3826188422056251998</id><updated>2012-01-20T03:47:52.728-07:00</updated><category term='education'/><category term='dom'/><category term='logs'/><category term='web'/><category term='mormon'/><category term='parsing'/><category term='open source'/><category term='nerd'/><category term='richmond'/><category term='chrome'/><category term='site'/><category term='firefox'/><category term='truth'/><category term='virginia'/><category term='python'/><category term='comparison'/><category term='windows'/><category term='open'/><category term='code'/><category term='xhtml'/><category term='learning'/><category term='linux'/><category term='apache'/><category term='bots'/><category term='xml'/><category term='knowledge'/><category term='php'/><category term='invent'/><category term='programming'/><category term='hackthissite'/><category term='proprietary'/><category term='language'/><category term='reinvent'/><category term='school'/><category term='blog'/><category term='computers'/><category term='hacker'/><category term='botnet'/><category term='mission'/><category term='source'/><category term='wikipedia'/><category term='hello world'/><category term='monopoly'/><category term='church'/><category term='html'/><category term='innovation'/><category term='microsoft'/><category term='wheel'/><category term='mozilla'/><category term='iptables'/><category term='beautifulsoup'/><category term='google'/><category term='lds'/><title type='text'>Perceptive Reality</title><subtitle type='html'>The thoughts and codings of Brendan Warkentin.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-5990400527347379591</id><published>2010-03-01T01:42:00.000-07:00</published><updated>2010-03-01T01:42:44.749-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mormon'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='church'/><category scheme='http://www.blogger.com/atom/ns#' term='richmond'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='lds'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='virginia'/><category scheme='http://www.blogger.com/atom/ns#' term='mission'/><title type='text'>Two Year Intermission</title><content type='html'>Repeating the title: Two Year Inter&lt;b&gt;mission&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Yes, I will be taking a bit of a break from my blogging (though I haven't been the most persistent anyway). Some may know, but I have chosen to serve a two year proselyting mission for my church, which is &lt;a href="http://lds.org/"&gt;The Church of Jesus Christ of Latter-day Saints&lt;/a&gt;. If you care to look into this church, you can start &lt;a href="http://mormon.org/"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I was called to the Virginia Richmond Mission. I leave on March 3rd, 2010 and return on or around March 3rd, 2012. After my mission I would like to continue writing these blog posts (more regularly), which I really hope are beneficial to anyone that reads them.&lt;br /&gt;&lt;br /&gt;Anyway, I am devout in my beliefs and love my religion. While I am gone, enjoy the posts I have written so far, and if you would like to follow my mission experience, I have set up a system using a couple services of the oh so amazing &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;. Via &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; (with Mail2Blogger) and &lt;a href="http://feedburner.google.com/"&gt;FeedBurner&lt;/a&gt;, anyone can subscribe to receive emails of my posts, which themselves are emailed to the blog. You can view posts and sign up &lt;a href="http://bwmish.blogspot.com/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Best of luck in your learning endeavors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-5990400527347379591?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/5990400527347379591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2010/03/two-year-intermission.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/5990400527347379591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/5990400527347379591'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2010/03/two-year-intermission.html' title='Two Year Intermission'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-6979597927700123771</id><published>2010-02-20T00:24:00.005-07:00</published><updated>2010-02-21T02:25:49.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='dom'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='beautifulsoup'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>DOM Parsing With Python</title><content type='html'>This is nearly verbatim from where I &lt;a href="http://www.aratide.com/html/dom-parsing-with-python/"&gt;originally&lt;/a&gt; posted it.&lt;br /&gt;&lt;br /&gt;This guide assumes you have basic knowledge of &lt;a href="http://python.org/"&gt;python&lt;/a&gt; and have done at least some work with &lt;a href="http://w3schools.com/html/default.asp"&gt;HTML&lt;/a&gt;, &lt;a href="http://w3schools.com/xhtml/default.asp"&gt;XHTML&lt;/a&gt;, and/or &lt;a href="http://w3schools.com/xml/default.asp"&gt;XML&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Background&lt;/h2&gt;&lt;a href="http://w3schools.com/htmldom/default.asp"&gt;DOM&lt;/a&gt; stands for Document Object Model. It is a convention used in HTML, XHTML, and XML for representing and interacting with objects. As fairly well described by the name, things like HTML have many elements with relationships to other elements. For example, you may have a &amp;lt;span&amp;gt; element in your &amp;lt;body&amp;gt; element. The &amp;lt;span&amp;gt; element's parent is the &amp;lt;body&amp;gt;. The &amp;lt;span&amp;gt; may have child elements and/or sibling elements. It works similar to a family relationship. The elements in an HTML document may have identifiers, specified by attributes like id='something', class='something', and/or name='something'. You can use these identifiers to keep track of and find a specific element or list of elements. Once you have found the element(s) you are looking for, you can change things in a dynamic manner or get desired information.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Lets Try Some Beautiful Soup&lt;/h2&gt;As I found the need to parse HTML documents a little while ago, I went in search of a module to accommodate my needs. I could have made my own class to handle it (as DOM parsing really isn't that hard), but I don't have nearly the time I would need to take on such a project. Instead I found a module called '&lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt;'. As I looked into this module, it seemed to be well-written and have full functionality. Through experience I found that this module is quite easy to use.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Onto The Code&lt;/h2&gt;Ok, lets start out with a simple HTML document:&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;Test&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span id="someid"&amp;gt;This is some text.&amp;lt;span&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;span class="someclass"&amp;gt;This is some other text.&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In this document we have two child elements under the &amp;lt;body&amp;gt; element. Now, lets say we want to access the element with the id 'someid'. First we need to parse the document like so (we will assume the variable 'doc' contains the HTML):&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;import BeautifulSoup&lt;br /&gt;dom = BeautifulSoup.BeautifulSoup(doc)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now we need to get the element. The python object 'dom' contains the parsed document. There are some provided methods for searching the document tree. Here are some examples:&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;# Find the first element with the id 'someid' (all have the same result)&lt;br /&gt;elm1 = dom.find(None, {"id":"someid"})&lt;br /&gt;elm1 = dom.find(None, id="someid")&lt;br /&gt;elm1 = dom.find("span", {"id":"someid"}) # Only searches 'span' tags&lt;br /&gt;elm1 = dom.find("span", id="someid") # Same as above&lt;br /&gt;&lt;br /&gt;# Find all elements with the id 'someid'&lt;br /&gt;elms1 = dom.findAll(None, id="someid")&lt;br /&gt;&lt;br /&gt;# Find the first element with the class 'someclass'&lt;br /&gt;elm2 = dom.find(None, {"class":"someclass"})&lt;br /&gt;&lt;br /&gt;# Find all elements with the class 'someclass'&lt;br /&gt;elms2 = dom.findAll(None, {"class":"someclass"})&lt;br /&gt;&lt;br /&gt;# You cannot specify 'class' as a keyword argument, since it is reserved in python.&lt;br /&gt;# That is why the find methods allow a dictionary that specifies what to look for.&lt;br /&gt;# Also, you may specify any of a 'class', 'id', and/or 'name' to look for.&lt;br /&gt;&lt;br /&gt;elm1.nextSibling # A reference to the next sibling element&lt;br /&gt;elm2.previousSibling # A reference to the previous sibling element&lt;br /&gt;&lt;br /&gt;# The above two lines are references to each other.&lt;br /&gt;&lt;br /&gt;# Now, as it is a document _tree_ (each element references others), you can daisy-chain&lt;br /&gt;# These will just lead back to the same element that elm1 referenced to begin with:&lt;br /&gt;elm1.nextSibling.parent.find(None, id="someid")&lt;br /&gt;elm1.parent.first()&lt;br /&gt;&lt;br /&gt;# Now, of course you can do more than just walk the tree.&lt;br /&gt;&lt;br /&gt;# Print all text contained in the element and all child elements:&lt;br /&gt;print elm1.text&lt;br /&gt;&lt;br /&gt;# Print all raw HTML contained in the element:&lt;br /&gt;print elm1.renderContents()&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, of course you can do more, like manually looking through the attributes of an element or something, but this gives a basic idea of how to use the module for your needs. To parse XML, instead of HTML or XHTML, you will want to parse the document with `BeautifulSoup.BeautifulStoneSoup("...")`. I hope you found this helpful. Good luck in your own DOM parsing.&lt;br /&gt;&lt;br /&gt;BeautifulSoup documentation - &lt;a href="http://www.crummy.com/software/BeautifulSoup/documentation.html"&gt;http://www.crummy.com/software/BeautifulSoup/documentation.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-6979597927700123771?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/6979597927700123771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2010/02/dom-parsing-with-python.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/6979597927700123771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/6979597927700123771'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2010/02/dom-parsing-with-python.html' title='DOM Parsing With Python'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-3772236337740256951</id><published>2009-12-28T23:14:00.001-07:00</published><updated>2009-12-28T23:30:24.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='open'/><category scheme='http://www.blogger.com/atom/ns#' term='monopoly'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='proprietary'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Open Source</title><content type='html'>When someone makes a program, the public availability of source code is sometimes a weighty matter. Now, if someone goes to all the effort of making a huge, extensive program, why would they want to just give everyone the code for it? Lets take a look at reasons for and against just giving the source code.&lt;br /&gt;&lt;br /&gt;Reasons against:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perhaps the biggest reasons to keep source code private is control of whats public and retaining monetary flow. If you have some unapparent bugs in your program or maybe some algorithms you don't want everyone to have, you might think that keeping things from the public protects your interests. If you want to make money with your program, just giving the code doesn't make it that easy.&lt;/li&gt;&lt;li&gt;Maybe you have something to hide. You might be sending usage statistics back to company servers and you don't want the user to be aware of this. Obviously, a user might get a bit freaked out if they find out you are collecting information from them, so what better than to not let them know in the first place.&lt;/li&gt;&lt;li&gt;You may want to prevent competition. If you let your code into the open, others are destined to see it and try to make something better. If your company depends on keeping things private to remain prosperous, the last thing on your mind is feeding competition the code you have so far, and thus driving business away.&lt;/li&gt;&lt;/ul&gt;Reasons for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; One of the biggest reasons &lt;a href="http://en.wikipedia.org/wiki/Open_source_software"&gt;open source&lt;/a&gt; programs do so well is because they have a community backing and developing them. The program doesn't just rely on a small set of somewhat knowledgeable people, but many, many people, collectively far more knowledgeable than a subset of employees.&lt;/li&gt;&lt;li&gt;Another big reason is the speedy development. If someone finds a bug or gets an idea for improvement, they can fix or add code to their hearts content (obviously moderated by those in charge of accepting changes). This give the community a say in the direction a program goes and how secure it is. If a program has a vulnerability, it can be resolved soon after discovery, and possibly even by the discoverer. This makes a program much more secure and just cooler in general.&lt;/li&gt;&lt;li&gt;Everyone can see the code, so they can conform their program to work with yours or take full advantage of your programs capabilities. End-programmers can also learn from your program. Rather than spending hours hassling with something, just trying to get a simple piece of their program to work, they can see how you got yours to work. Its a great way to learn something.&lt;/li&gt;&lt;li&gt;Have you ever just made some quick, poorly thought piece of code, which would embarrass you to have everybody see? Well, the whole publicity factor can help you to make higher-quality, clean code that you can be proud to put your name to.&lt;/li&gt;&lt;li&gt;Open source programs can bring in revenue as well. If you make a high-quality product, your following community is much more likely to donate money than if you make a low-quality product. This encourages you to make an awesome, well-liked product. Plenty of profit can be made from simply asking your users to donate a little bit of money. If you make the users happy, they will gladly repay.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lastly, its just cool and helps everyone. Sharing is better than selfishly hoarding, so why not apply that to your code?!&lt;/li&gt;&lt;/ul&gt;Ok, so in this comparison we can see that the reasons for open source outweigh the reasons against (at least I hope you can see that). Now, lets take a look at examples of proprietary vs. open source:&lt;br /&gt;&lt;br /&gt;Microsoft has long kept its code private. This has brought a plethora of problems. First off, its operating system has (as I have seen) utterly failed. They control everything with it and it bugily progresses (if not digresses) at a very slow pace. Windows Vista is basically a slower prettier, much buggier version of XP. Windows7, though an improvement over Vista, fails in many ways. Nextly is their browser, Internet Explorer. As seen by the majority of web designers, it has been one of the largest stumbling blocks of internet progress. It renders things terribly, slowly, and very bugily. It doesn't support, but rather impedes many standards. The community has had little to no say in the development Microsoft products, its all corporately managed.&lt;br /&gt;&lt;br /&gt;Some of the best known open source projects are &lt;a href="http://www.google.com/search?q=linux"&gt;Linux&lt;/a&gt; and &lt;a href="http://www.mozilla.com/en-US/firefox/personal.html?from=getfirefox"&gt;Mozilla Firefox&lt;/a&gt;. Linux has been slowly, but surely, crushing Microsoft's monopoly. Anyone can make their own distribution of Linux and can contribute to existing distributions. Its entirely community based. Since its beginnings, Mozilla Firefox has been thriving. The browser quickly gained popularity and is currently one of the biggest forces crushing Microsoft's sad attempt at a browser. Recently, Google released a friendly competitor to Firefox. &lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt; brags an amazingly fast javascript engine, which makes notable speed difference. Rather than attempting a monopoly, these two browsers provide encouragement to one-up each other. This just makes both of them better. The open source factor has brought Linux, Firefox, and Chrome to be far better than any corporate controlled product could ever become.&lt;br /&gt;&lt;br /&gt;So, these are just a few examples of why open source is far superior to closed source. Next time you start a large project, consider open sourcing it. Help others and yourself!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-3772236337740256951?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/3772236337740256951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/open-source.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/3772236337740256951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/3772236337740256951'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/open-source.html' title='Open Source'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-7797384373452215017</id><published>2009-12-24T20:24:00.000-07:00</published><updated>2009-12-24T20:24:18.699-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='truth'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='hacker'/><category scheme='http://www.blogger.com/atom/ns#' term='school'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='hackthissite'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Learning How To Learn</title><content type='html'>A large part of the knowledge I have gained has come from my own endeavors to seek out truth. Since a very young age I have been a very curious person. I always had questions and rarely had answers. That is probably one of the biggest reasons I love computers, and especially the internet, so very much. Once I started looking for information in this massive network, filled with a large part of the worlds collective knowledge, I finally began to discover answers to my many questions. If I was without this amazing resource, I would be quite clueless in many respects.&lt;br /&gt;&lt;br /&gt;The things I have learned range from how many, many parts of human anatomy work (nervous system, immune system, adaptability, bone structure and composition, tissue composition, etc), to how computers work on the lower levels, and even how operating systems and programming languages work. This isn't all. I have found many answers to random questions that come up. Some of my biggest resources have been the &lt;a href="http://google.com/"&gt;Google search engine&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/"&gt;Wikipedia&lt;/a&gt;. Its amazing how you can just type a question or well-phrased query and find all sorts of answers.&lt;br /&gt;&lt;br /&gt;Maybe I am just weird, but I often found school to get in the way of my education. Sure there are those things that I wouldn't have learned without school, and am grateful I did learn, but I found school to be less productive overall than the time that I really spent researching things myself. I cant say I am an expert in everything, but I have gained some good underlying knowledge of a multiplicity of subjects. I have often found the things that I learn to be extremely helpful and good to know. I prefer to know about things myself, rather than just blindly trusting whatever other people say. If I am going to get an MRI, like I just did days ago, I will research into the subject. If I am in some way injured or ill, I am going to look into it. That way I know about it and how to best treat myself. If I am going to gain mad security penetration skills, I am going to find good information resources (like &lt;a href="http://hackthissite.org/"&gt;HTS&lt;/a&gt;). For some, a teacher could even be a good, knowledgeable resource (but sometimes, in my experience, teachers are quite clueless in the things they are supposed to be expert in).&lt;br /&gt;&lt;br /&gt;Sometimes even my family makes fun of me for my obsession with knowledge. I just laugh at myself right along-side them, rather than taking any offense whatsoever. I realize I am kind of a knowledge nerd, truth seeker, or dare I even say &lt;a href="http://paulbuchheit.blogspot.com/2009/10/applied-philosophy-aka-hacking.html"&gt;hacker&lt;/a&gt;, and I know that's just who I am. If someone doesn't like it, that's their problem.&lt;br /&gt;&lt;br /&gt;Now, have you ever had an unanswered question? Have you ever had doubts about the truthfulness of information you have received? Have you ever just wanted to know more about something? Try researching it yourself. &lt;a href="http://lmgtfy.com/?q=self+learning"&gt;Here&lt;/a&gt; is a great tutorial for learning to learn. In fact at the top you can find a link to Wikipedia, which has an article about &lt;a href="http://en.wikipedia.org/wiki/Autodidacticism"&gt;autodidactism&lt;/a&gt; (self-learning).&lt;br /&gt;&lt;br /&gt;Ok, now that you know your resources, use them. Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-7797384373452215017?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/7797384373452215017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/learning-how-to-learn.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/7797384373452215017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/7797384373452215017'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/learning-how-to-learn.html' title='Learning How To Learn'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-3866855608843681973</id><published>2009-12-22T22:46:00.000-07:00</published><updated>2009-12-22T22:46:10.437-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='hello world'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><title type='text'>PHP</title><content type='html'>As I wrote about my favorite language, python, I figure I might as well write about other languages I like. This time its &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ever wanted to write an interactive, dynamically generated web page or site? This language is built mainly for that exact purpose, plus its very powerful. That is why its the most popular server-side languages used for web programming.&lt;br /&gt;&lt;br /&gt;PHP is pretty easy to learn and use. Its main site, php.net, has some awesome, pretty thorough, &lt;a href="http://www.php.net/manual/en/"&gt;documentation&lt;/a&gt; to guide the learning process. Unlike python, the functions are all global. You don't need to import anything to use it. As with python, variable types don't have to be explicitly specified. In php this is called '&lt;a href="http://php.net/manual/en/language.types.type-juggling.php"&gt;type juggling&lt;/a&gt;'.&lt;br /&gt;&lt;br /&gt;Ok, now for some of the basics. All php code must be surrounded by the start(&amp;lt;?) and end(?&amp;gt;) tags, in order to &lt;a href="http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php"&gt;separating php&lt;/a&gt; from html. &lt;a href="http://www.php.net/manual/en/language.variables.basics.php"&gt;Variable names&lt;/a&gt; begin with the dollar sign ($) and can contain letters, numbers (except for the first character), underscores(_), and some others (ascii 127+). Instructions end with a semicolon(;). Here's a very basic example:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;&amp;lt;?&lt;br /&gt;$some_variable = "Hello World!";&lt;br /&gt;echo $some_variable;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This will simply store the text "Hello World!" in a variable then output it. You can do a lot more with php, but these are just some of the basics. You can find more help with learning php from &lt;a href="http://w3schools.com/php/default.asp"&gt;w3schools&lt;/a&gt;. This language can also be used for &lt;a href="http://www.php-cli.com/php-cli-tutorial.shtml"&gt;command-line programs&lt;/a&gt;, and even &lt;a href="http://gtk.php.net/"&gt;graphical programs&lt;/a&gt; (via &lt;a href="http://www.gtk.org/"&gt;gtk&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Best of luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-3866855608843681973?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/3866855608843681973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/3866855608843681973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/3866855608843681973'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/php.html' title='PHP'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-8470392647571887467</id><published>2009-12-21T11:04:00.002-07:00</published><updated>2009-12-23T02:05:32.027-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><category scheme='http://www.blogger.com/atom/ns#' term='botnet'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='bots'/><title type='text'>Bot Troubles</title><content type='html'>Do you run a webserver? Ever seen lines like the following in your logs?&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;95.31.11.173 - - [06/Dec/2009:07:29:14 -0700] localhost:80 "POST http://yuamin.blog95.fc2.com/?no=2127&amp;amp;ul=96fa963c0da02340 HTTP/1.1" 200 6699&lt;br /&gt;7&lt;br /&gt;88.80.10.1 - - [06/Dec/2009:07:29:26 -0700] localhost:80 "CONNECT auctions.godaddy.com:443 HTTP/1.1" 301 -&lt;br /&gt;7&lt;br /&gt;74.63.225.45 - - [06/Dec/2009:07:29:40 -0700] localhost:80 "GET http://aanserver88.com/js/banner/banner.js HTTP/1.0" 200 11922&lt;br /&gt;74.63.225.45 - - [06/Dec/2009:07:29:41 -0700] localhost:80 "GET http://c5.zedo.com/jsc/c5/fo.js HTTP/1.0" 200 3599&lt;br /&gt;95.31.11.173 - - [06/Dec/2009:07:29:41 -0700] localhost:80 "GET http://seo.fc2.com/spam/ HTTP/1.1" 200 55738&lt;br /&gt;74.63.225.45 - - [06/Dec/2009:07:29:42 -0700] localhost:80 "GET http://c7.zedo.com/bar/v15-202/c5/jsc/fm.js?c=2404/1729&amp;amp;f=&amp;amp;n=735&amp;amp;r=5&amp;amp;d=0&amp;amp;q=&amp;amp;s=80&amp;amp;z=0.3461414148545188 HTTP/1.0" 200 3505&lt;br /&gt;7&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I had been having this problem for a long time and couldn't think of a solution. These bot networks were almost constantly hammering my server with requests (I even got one log file that was over 12MB; rotated weekly). I hadn't a clue how to stop them. After lots experimentation with &lt;a href="http://httpd.apache.org/"&gt;apache&lt;/a&gt; and research into its capabilities, I found a fairly simple solution. I found information about using the ext_filter module and added the following into my 'httpd.conf' file:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;ExtFilterDefine bots mode=input cmd="/scripts/bot_filter.py"&lt;br /&gt;SetInputFilter bots&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This filters all input through a python script I made. Using the apache-set environment variables I have enough information to determine whether to block an ip. My script determines if the request is suspicious and, if so, entirely bans the ip address with my firewall of choice, &lt;a href="http://www.netfilter.org/projects/iptables/"&gt;iptables&lt;/a&gt;. Heres the script:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(153, 153, 153);"&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import os&lt;br /&gt;from subprocess import Popen&lt;br /&gt;&lt;br /&gt;ip = ""&lt;br /&gt;meth = ""&lt;br /&gt;req = ""&lt;br /&gt;&lt;br /&gt;try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip = str(os.environ["REMOTE_ADDR"])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; meth = str(os.environ["REQUEST_METHOD"])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; req = str(os.environ["REQUEST_URI"])&lt;br /&gt;except:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass&lt;br /&gt;&lt;br /&gt;#if req.find("http://") == 0&lt;br /&gt;if req.find("/") != 0 or not (meth == "GET" or meth == "POST" or meth == "HEAD" or meth == "OPTIONS" or meth == "TRACE"):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list = os.popen("sudo /sbin/iptables -n --list INPUT").read()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if list.find(ip) &amp;lt; 0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Popen(['sudo', '/sbin/iptables', '-I', 'INPUT', '-p', 'all', '-s', ip, '-j', 'DROP'])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; f = open('/var/log/bot.log', 'a')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; f.write("failed\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; f.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; os.exit(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = open('/var/log/bot.log', 'a')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.write(ip + " success " + meth + " " + req + "\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.close()&lt;br /&gt;&lt;br /&gt;# Allows POST data to be transparently passed on&lt;br /&gt;import sys&lt;br /&gt;sys.stdout.write(sys.stdin.read()) &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This prepends the ip address of the offending request onto the beginning of the iptables INPUT filter chain.&lt;br /&gt;&lt;br /&gt;Now the first malicious request earns a well-deserved ban. I no longer have these malformed requests from bot networks hammering my server, but only legitimate request. Its working quite well so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-8470392647571887467?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/8470392647571887467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/bot-troubles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/8470392647571887467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/8470392647571887467'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/bot-troubles.html' title='Bot Troubles'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-1529713275930203335</id><published>2009-12-19T18:56:00.000-07:00</published><updated>2009-12-19T18:56:46.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Python, The Good And The Bad</title><content type='html'>First off, im a bit of an obsessive programmer. I have been programming since like 7th grade or so. It began as just web design, and eventually became a well developed underlying understanding of many types of programming. The languages I have come to know include (in no particular order): Python, &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;, &lt;a href="http://cplusplus.com/"&gt;C++&lt;/a&gt;, &lt;a href="http://tldp.org/LDP/abs/html/"&gt;Bash Scripting&lt;/a&gt;, C#, Java, ASP.NET, Javascript, CSS, and (X)HTML. Of these, python is the last one I learned. I only really put a focus on it within the last half-year. Since I have come to use it a lot, I have come to love the language more than others. It may not be as fast as a compiled language, but it is way more simplistic and powerful, yet easy to learn and use, than any other language I have come across.&lt;br /&gt;&lt;br /&gt;Now for some of the pro's:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The language is entirely indentation dependent. Rather than using curly-braces for grouping and scope, it just uses depth of indentation. Aside from the lack of extra lines used just for curly-braces, it teaches the programmer the importance of writing clean, readable code.&lt;/li&gt;&lt;li&gt;It is module based. Rather than having everything at a global scope, as in PHP. You can just import what you need to use, and no more.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It allows using libraries written in other languages, such as &lt;a href="http://www.wxwidgets.org/"&gt;wxWidgets&lt;/a&gt; and &lt;a href="http://www.gstreamer.net/"&gt;GStreamer&lt;/a&gt;. This allows you to write fast compiled code, then use the compiled code directly, rather than writing code in just pure python.&lt;/li&gt;&lt;li&gt;Everything's an object. Every class, string, list, function, etc is an object. They all have attributes and methods. They can all be assigned to a variable or passed as an argument.&lt;/li&gt;&lt;li&gt;Documentation. I have found an abundance of documentation for doing what I need to, even if in the __doc__ attribute provided with every object.&lt;/li&gt;&lt;li&gt;Flexibility. It is simple to make a program that will work on multiple platforms without much work.&lt;/li&gt;&lt;li&gt;And on, and on, and on ...&lt;/li&gt;&lt;/ul&gt;Ok, now lets look at the downsides:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Performance. Python is certainly not a compiled language. As such, it doesn't run as fast as a compiled language. C/C++ programs are compiled, so they run as fast as the computer allows (based, of course, on the quality of code written). Python is an interpreted language, so it doesn't have that low-level benefit.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aside from the inherent performance penalty, python is an amazing, powerful, simple language. I learned it using, obviously, google (the best search engine ever), ipython (an interactive, introspecting, well-designed python shell), and a lot of experimentation. Recently I took on the moderately sized project of writing a gstreamer backed command-line media player, with audioscrobbler support for last.fm song tracking, and dbus support for gnome mediakey control. I used python because I couldn't get it to work how I wanted in other languages. Also, it took days to write the base code, not weeks.&lt;br /&gt;&lt;br /&gt;Now, some resources for learning python:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; - Best search engine ever.&lt;br /&gt;&lt;a href="http://www.python.org/"&gt;The Python Website&lt;/a&gt; - Good place to find extensive core documentation.&lt;br /&gt;&lt;a href="http://www.diveintopython.org/toc/index.html"&gt;Dive Into Python&lt;/a&gt; - Perhaps the best step-by-step, noob-to-pro documentation ever written.&lt;br /&gt;&lt;a href="http://ipython.scipy.org/moin/"&gt;IPython&lt;/a&gt; - Well written interactive, introspecting python shell.&lt;br /&gt;EXPERIMENTATION - The best way to learn anything.&lt;br /&gt;&lt;br /&gt;I have come to highly advocate this language and recommend it to anyone, whether just starting into the world of programming, or just wanting to learn a new language. Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-1529713275930203335?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/1529713275930203335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/python-good-and-bad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/1529713275930203335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/1529713275930203335'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/python-good-and-bad.html' title='Python, The Good And The Bad'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3826188422056251998.post-7554483540922001913</id><published>2009-12-18T10:59:00.003-07:00</published><updated>2009-12-19T20:31:41.995-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='wheel'/><category scheme='http://www.blogger.com/atom/ns#' term='reinvent'/><category scheme='http://www.blogger.com/atom/ns#' term='innovation'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='invent'/><title type='text'>Why Re-Invent The Wheel?</title><content type='html'>Ok, I have never blogged before, but I figured I would start. I couldn't think of how to start, but I thought about this and figured it was as good as anything, so here goes.&lt;br /&gt;&lt;br /&gt;On to the point of the post... &lt;br /&gt;&lt;br /&gt;All the time I am hearing people complain about 're-inventing the wheel', or doing something themselves, when someone else has done it before. In fact, my programming teacher often stated this when teaching my class last year and the year before. This, to me, is very irritating. I prefer the statement 'Why not re-invent the wheel?'&lt;br /&gt;&lt;br /&gt;Ok, what are the benefits of re-inventing the wheel?&lt;br /&gt;&lt;br /&gt;Well, first off, if no one ever tried to re-invent the wheel, we would still have primitive bicycle wheels on our automotives (perhaps even rounded chunks of rock). Obviously somebody came along and thought 'hey, I can make a better wheel.' Because of innovation, we have better wheels today. So thats a major benefit.&lt;br /&gt;&lt;br /&gt;Nextly, what can you learn by re-inventing the wheel? You can learn how to make a wheel yourself, rather than relying on and trusting others knowledge. Anyway, whats so bad with having a little extra knowledge?! This also comes with the added benefit of the designs and ideas behind the wheel not being lost and forgotten.&lt;br /&gt;&lt;br /&gt;If 'the wheel' was never 're-invented', society would be quite a boring, non-progressing place.&lt;br /&gt;&lt;br /&gt;What are the down sides? A little extra time and effort. Whats so bad about that?&lt;br /&gt;&lt;br /&gt;Now for a programming example. The first year of my programming class (and to a degree, the second) we focused on C# (not my favorite language). My teacher would always brag about how C# is so cool because the .NET framework does everything for you already. Sure it abstracts things a lot, but this isn't always good. I have found the .NET framework to be terribly slow and annoying to work with. When I try to do certain lower-level things, it is difficult to impossible. As well, it leaves little to learn. You never really learn the lower-level things, like socket communication and packet construction, because there are things to do that for you. It is highly abstracted and terribly annoying to such a naturally curious person as me. Besides, if Microsoft is always controling the low-level things, they are not that likely to improve (not quickly at least) and the end-programmer will never really know whats truly going on.&lt;br /&gt;&lt;br /&gt;So, the question I pose to you is: 'Why not re-invent the wheel?'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3826188422056251998-7554483540922001913?l=faazshift.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faazshift.blogspot.com/feeds/7554483540922001913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faazshift.blogspot.com/2009/12/why-re-invent-wheel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/7554483540922001913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3826188422056251998/posts/default/7554483540922001913'/><link rel='alternate' type='text/html' href='http://faazshift.blogspot.com/2009/12/why-re-invent-wheel.html' title='Why Re-Invent The Wheel?'/><author><name>Brendan Warkentin</name><uri>http://www.blogger.com/profile/05975246468166788932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
