<?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>Jackson's Blog &#187; Programming</title>
	<atom:link href="http://www.jacksonleung.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jacksonleung.com/blog</link>
	<description>Not just another WordPress weblog</description>
	<lastBuildDate>Thu, 05 Aug 2010 23:07:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Increasing Youtube View Counts</title>
		<link>http://www.jacksonleung.com/blog/2010/08/05/increasing-youtube-view-counts/</link>
		<comments>http://www.jacksonleung.com/blog/2010/08/05/increasing-youtube-view-counts/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 23:07:27 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=310</guid>
		<description><![CDATA[It has become increasingly popular for artists to be ranked by their YouTube view counts. This article is written to help my readers best utilize their loyal fan-base. Understanding the System YouTube is no new kid on the block when it comes to &#8220;spammers&#8221;. They&#8217;ve had to combat a lot of &#8220;artificial views&#8221; brought on [...]]]></description>
			<content:encoded><![CDATA[<p>It has become increasingly popular for artists to be ranked by their YouTube view counts. This article is written to help my readers best utilize their loyal fan-base.</p>
<h3>Understanding the System</h3>
<p>YouTube is no new kid on the block when it comes to &#8220;spammers&#8221;. They&#8217;ve had to combat a lot of &#8220;artificial views&#8221; brought on by a lot of over-enthusiastic viewers. So they&#8217;ve developed techniques to combat view count spamming (<a href="http://help.youtube.com/group/youtube-announcements/browse_thread/thread/ed43a537db4e191f">YouTube View Count Announcement</a>). For the most part, they want to ensure that whoever views their videos is a real-world individual and not some script or robot, which is understandable.</p>
<h4>Definition of a View</h4>
<p>If an individual hits the video, and watches the video for more than 50% of its duration, it&#8217;s considered a view. If the individual hits the webpage repeatedly, any view beyond his first is not counted.</p>
<h4>Web identification of an Individual</h4>
<p>For the most part, an individual is identified by their IP address on the web. At the time of writing, no matter how you slice it, you&#8217;re going to have a hard time discerning multiple entities are the same individual if he has multiple IP addresses.</p>
<h3>How to Increase YouTube View Counts</h3>
<h4>Tiny Urls</h4>
<p>Your viewers might have multiple means of accessing your web content, friend&#8217;s computer, school computer, home computer, work computer, library&#8217;s computer, cellphone, and etc. You might as well make it easier for them to have a short URL to type into their device than the long one that YouTube gives you. This is where Tiny URL comes in (<a href="http://tinyurl.com/">Tiny URL</a>).<br />
<br/><br />
Tiny URL is a web service that takes a full URL, shortens it, and provides you with the shortened version. Which you can then use on the web to refer to your content.</p>
<h4>In-network marketing</h4>
<p>You want to invite all your friends to help you, and you want them to invite all their friends and so on. Facebook, Twitter, and MySpace are all popular mediums to accomplish this goal. What you want to do is go online and find some bookmarklet to allow you to easily invite all your friends and allow your friends to easily invite their friends to your activity. I won&#8217;t go into great detail but one example is Facebook.</p>
<p>On Facebook, you can create events, which you can invite all your friends to. Then have your friends invite their friends and so on. Facebook has made it insanely painful to invite your friends, I guess to thwart spammers, unfortunately, you have gotten caught in the cross-fire. Fortunately, bookmarkelets, easily reusuable and bookmarkable Javascript code, has come to the rescue. For example the following webpage links to a site that provides a clever little bookmarklet that can invite all your friends.<br />
(<a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fdangerouslyawesome.com%2F2010%2F03%2Fbookmarklet-annoy-all-of-your-facebook-friends-at-once%2F&#038;h=e4856">Invite All Facebook Friends Bookmarklet</a>)</p>
<h4>Informed Fans</h4>
<p>An artist is only as strong as his fans. The more able his or her fans are, the more able he or she is. For the most part, make sure your fans are aware of all the ways they can increase your view count (See Tiny URL section). The fans might have the enthusiasm, but not the means, this way, they can have both.</p>
<p>If you follow the steps listed above, then you have effectively utilized your fan-base, and the rest are in the hands of the greater powers.</p>
<h3>The Dark Side: Hacking YouTube to artificially boast your view count</h3>
<p>If you&#8217;re a decent computer nerd, and you&#8217;ve read this article, you know what you need to do&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/08/05/increasing-youtube-view-counts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reducing Learning Curve Overhead with OOP</title>
		<link>http://www.jacksonleung.com/blog/2010/07/19/reducing-learning-curve-overhead-with-oop/</link>
		<comments>http://www.jacksonleung.com/blog/2010/07/19/reducing-learning-curve-overhead-with-oop/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 19:43:16 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=276</guid>
		<description><![CDATA[A lot of people don&#8217;t understand why object-oriented programming (OOP) practices are getting so much hype. While I can&#8217;t explain all the benefits of using OOP in this article, I will cover one of the compelling cases of using OOP, you save time. Imagine a scenario where a new recruit has just joined your ranks. [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of people don&#8217;t understand why object-oriented programming (OOP) practices are getting so much hype. While I can&#8217;t explain all the benefits of using OOP in this article, I will cover one of the compelling cases of using OOP, you save time.</p>
<p>Imagine a scenario where a new recruit has just joined your ranks. He was hired into your team to speed up your project. If your code wasn&#8217;t designed in an OOP manner, then he&#8217;ll most likely have to review a good chunk of the code in order to figure out what&#8217;s going on and how the various pieces interconnect. Some code at line 23 might be affecting line 83. Some function might take 2 integers and behave one way, and then take in 3 arrays and behave another. The code might also require certain global parameters to be set in a certain sequence before things can function.</p>
<p>In OOP programming, things you don&#8217;t need to know, you don&#8217;t need to know. For example, if you were coding a shopping cart, the &#8220;scanning system&#8221; only cares to know about the price of the item. The &#8220;product&#8221; object only needs to know it&#8217;s &#8220;price&#8221;. The &#8220;shopper&#8221; only cares about the price and the total. Each of these objects can have various complex behaviors, but they&#8217;re all encapsulated within the object. For example if the &#8220;product&#8221; was perishable, and price was a function of it&#8217;s expiration, the &#8220;scanning system&#8221; and &#8220;shopper&#8221; doesn&#8217;t need to know about this. If you were to adjust how various item&#8217;s price fluctuates, you only need to focus on &#8220;product&#8221; classes. </p>
<p>Whereas, in a non-OOP class, you might a very long file, class, or function, and it might be filled with all these complex checks to figure out how much the price is, but in an OOP system, the &#8220;scanning system&#8221; simply asks the &#8220;product&#8221; for it&#8217;s price. OOP code is also more intuitive, since OOP mimics real world objects and relationships.</p>
<p>OOP practices are good to adopt, although there is some overhead, there will definitely be long-term savings in more ways than one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/07/19/reducing-learning-curve-overhead-with-oop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Obsolescence</title>
		<link>http://www.jacksonleung.com/blog/2010/07/09/code-obsolescence/</link>
		<comments>http://www.jacksonleung.com/blog/2010/07/09/code-obsolescence/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 01:33:53 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=272</guid>
		<description><![CDATA[I believe that code-base no matter how well written are doomed to the fate of eventual obsolescence. No matter how well the code is constructed, there are bound to be unforeseen edge cases that can have a minor or major impact on your code. If your business  decides to take the code to a whole different [...]]]></description>
			<content:encoded><![CDATA[<p>I believe that code-base no matter how well written are doomed to the fate of eventual obsolescence. No matter how well the code is constructed, there are bound to be unforeseen edge cases that can have a minor or major impact on your code. If your business  decides to take the code to a whole different level, you might need additional functionality that the code-base didn&#8217;t account for. &#8220;The best laid plans of mice and men oft go astray&#8221;. Businesses need to plan for this case, and allocate the resources accordingly.</p>
<p>It&#8217;s possible for your code to absolutely perfect and NEVER EVER require change. You might even conclude it might be a Microsoft only thing, but think about it this way. How often has Microsoft, Apple, Linux, Facebook, Myspace, and Google changed their code? Quite often, it&#8217;s almost like every few years, some major change occurs. Windows XP was recoded into Vista, and Windows 7 was Windows completely recoded from the grown up. Changin not only the look, but the security and functionality.</p>
<p>Code changes because they business requirement changes. Business requirements change because the customer&#8217;s demands change. Time changes a lot of things. So you have to ponder, if your code-base is an exception to the rule. Chances are, it&#8217;s not. If you don&#8217;t plan for the team to completely recode the code-base every few years, then you&#8217;re going to force yourself into an immobile position where your customer&#8217;s demands have changed, but your business  can&#8217;t respond to accommodate it.</p>
<p>With each new core product system, you should keep track of how long it took to develop it, make sure it&#8217;s well documented, and budget some time in the future to reallocate this amount of time to reinventing it. Yes, reinventing. Is this a direct violation of the DRY principle (Do not Repeat Yourself)? No. If it was exactly the same product, sure, it&#8217;s a violation, but since you&#8217;ve introduced new parameters, the no. Do you use the same method to do single-digit against single-digit multiplication as you do double-digit vs. double-digit, triple-digit and so on? No. Code should be no exception, plan accordingly, or face some interesting crossroads in the lifetime of your business.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/07/09/code-obsolescence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Underlying System Flexibility of API Testing Systems</title>
		<link>http://www.jacksonleung.com/blog/2010/07/01/underlying-system-flexibility-of-api-testing-systems/</link>
		<comments>http://www.jacksonleung.com/blog/2010/07/01/underlying-system-flexibility-of-api-testing-systems/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 22:08:58 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=257</guid>
		<description><![CDATA[Your testing sandbox can be flexible or immutable. I have a preference for designing testing systems that are flexible. Data that is generated via the testing process, can be modified through the testing process. Everything flows the same as a live system from beginning to end. There are developers who would disagree with this approach, [...]]]></description>
			<content:encoded><![CDATA[<p>Your testing sandbox can be flexible or immutable. I have a preference for designing testing systems that are flexible. Data that is generated via the testing process, can be modified through the testing process. Everything flows the same as a live system from beginning to end. There are developers who would disagree with this approach, such as we&#8217;re giving the testers too much control that can allow testers to generate cases we didn&#8217;t expect, which can cause some amount of embarrassment. Another argument is that with fixed data, we don&#8217;t have to worry about as much, since we pretty much control the entire flow. While the counter-arguments have a legitimate point, I would argue that their limitations defeat the purpose of a testing system.</p>
<p>A testing system should be a sand-box, as in implied in the term &#8220;sand-box&#8221;, testers can play around with it as much as they want. If we made the data immutable, it&#8217;s not really a sand-box, but more like buttons. If a person relying on your system have a lot of unique demands on your system, your system will not be able to handle it without changing code or system structure. In fact, you&#8217;ll need to implement a whole layer just to handle the immutable data and how to handle the response. If you were to allow the system to be flexible, and the objects mutable, or changeable, there will still be layer, but that layer will be deeply tied to existing components, which will still allow existing components to be tested. While the first case, although you can still have existing components tested, such testing is pointless, since you&#8217;re forcing a set response to a set data set each time.</p>
<p>Flexible testing systems allow you to fulfill the demands of any tester easily, since they&#8217;re pretty much testing how their system interacts with your system, and it closely mimic normal behavior. Not only that, but it also allows testers to test your system for flaws, helping point out flaws in your system before the flaw does any major damage. In an immutable system, we don&#8217;t have to worry about edge cases we didn&#8217;t account for. Which can be great, but unfortunately, a flexible system can handle the tester&#8217;s system that was design to deal with immutable or mutable data. In an immutable system, if the tester wants mutable data, we will pretty much junk the existing system and create another one. Turning a flexible system immutable is easy, turning an immutable system into a flexible system is hard. Much like procedural code versus object-oriented code, procedural code is pretty rigid, but object-oriented code is pretty flexible. &#8220;Be water, my friends.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/07/01/underlying-system-flexibility-of-api-testing-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>City of Los Angeles Business Tax Online E-File</title>
		<link>http://www.jacksonleung.com/blog/2010/04/26/city-of-los-angeles-business-tax-online-e-file/</link>
		<comments>http://www.jacksonleung.com/blog/2010/04/26/city-of-los-angeles-business-tax-online-e-file/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 07:30:36 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=246</guid>
		<description><![CDATA[As of writing this article, the site for filing businesses taxes online at https://latax.lacity.org/laweb is broken. I&#8217;ve tested the site across 3 browsers, chrome, firefox, and IE, and none of them will pass the professional activity code validation check. I&#8217;m amazed that such a bug could&#8217;ve even passed a decent QA process. In fact, when [...]]]></description>
			<content:encoded><![CDATA[<p>As of writing this article, the site for filing businesses taxes online at https://latax.lacity.org/laweb is broken. I&#8217;ve tested the site across 3 browsers, chrome, firefox, and IE, and none of them will pass the professional activity code validation check. I&#8217;m amazed that such a bug could&#8217;ve even passed a decent QA process. In fact, when the user e-filing throughput has dropped significantly after the code release, that should&#8217;ve been an instant red flag. I was able to e-file anyways, but I definitely had to bypass the 6-digit activity code violation, even though I did enter a 6 digit business code.</p>
<p>So how was I able to e-file despite the bug in the code? The answer is &#8220;Firebug&#8221;. So the trick is, whenever you encounter that invalid 6 digit professional activity code error message, you pop open firebug, modify the form&#8217;s &#8220;onsubmit&#8221; attribute, and blank it out. This way, it&#8217;ll be programmed to bypass the validation, and that&#8217;s it! I&#8217;m still annoyed that I had to do that though.</p>
<p>City of Los Angeles, if you&#8217;re reading, you can hire me to fix the site for you, I&#8217;ll get it done in 5 minutes, and you can just not charge me tax for the next 10 years.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/04/26/city-of-los-angeles-business-tax-online-e-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Compelling Case For the Use of Objects</title>
		<link>http://www.jacksonleung.com/blog/2010/01/07/a-compelling-case-for-the-use-of-objects/</link>
		<comments>http://www.jacksonleung.com/blog/2010/01/07/a-compelling-case-for-the-use-of-objects/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 09:42:44 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=199</guid>
		<description><![CDATA[I think one of the hardest things about being a programmer is working with code that you&#8217;re not familiar with. You can spend hours, days, weeks, months, trying to understand the code that someone else wrote. I used to think that if a person who can&#8217;t read through my code and fully understand what my [...]]]></description>
			<content:encoded><![CDATA[<p>I think one of the hardest things about being a programmer is working with code that you&#8217;re not familiar with. You can spend hours, days, weeks, months, trying to understand the code that someone else wrote. I used to think that if a person who can&#8217;t read through my code and fully understand what my code is trying to accomplish, they have no right to call themselves a programmer. It wasn&#8217;t too long before I realized that my belief was wrong. To be a good developer not only do you need to be able to finish a project according to specifications, it must be well-written, and maintainable by others.</p>
<p>By maintenance, it means that a new comer can quickly figure out what&#8217;s going on without costing him a lot of time. Maintainability can be accomplished in many ways. From the way the code is structured, the way it&#8217;s documented, to training, and etc. Today, I plan on discussing code structure.</p>
<p>I&#8217;ve seen enough code to fear arrays that are pretty much the member variables of a object. Except all those member variables have been consolidated into a single array, and that single array is populated by a single function at run-time. This is a surprisingly common practice, I guess there are some up-sides to using this technique, the class that uses this technique will have less code involved, and code that calls this function would probably not change very much.</p>
<p>Now for the down-side. Someone down the line might find a need to modify the function, lets say &#8220;foobar&#8221;, so that it does more things with that data. Then somewhere down the road, someone else decides to make the array multi-dimensional, and then someone else somewhere down the line decides to make the foobar function handle the multi-dimensional array in multiple ways. You can explicitly tell programmers verbally or through documentation to use a single-dimensional array, but more times than not, things simply won&#8217;t go as planned.</p>
<p>With objects, you can create the function to handle a specific object type, through strict-typing. That type will have certain member variables set, which you can always rely on. It will be the same consistent structure, no matter what. This way, you&#8217;ll save yourself from dealing with function parameter input fowl ups.</p>
<p>What if you required the unique functionality of the multi-dimensional arrays? There are many ways to go about it. You could create a different class that extends the class that contains foobar. Although, that function would most likely need to be redefined. One example of a possible redefinition is to have the new foobar function take in the multi-dimension array you provide, but create the objects required by the parent foobar function and handle the result accordingly. The code for the class that performs foobar using objects and foobar using multi-dimensional arrays remain separate. You can alter the code to handle the various situations accordingly, if the functionality for multi-dimension foobar changes, you only have to alter the multi-dimensional array version. It might take more lines of code and more time, but when you revisit the code, even after a long period of time, you&#8217;ll find it very easy to maintain because all the logic has been keep separate. Each class, each function, all the various interacting components serve a very narrow and specific purpose.</p>
<p>I might add some code examples to illustrate the point at a later time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2010/01/07/a-compelling-case-for-the-use-of-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introductory Documentation</title>
		<link>http://www.jacksonleung.com/blog/2009/11/05/introductory-documentation/</link>
		<comments>http://www.jacksonleung.com/blog/2009/11/05/introductory-documentation/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 09:05:02 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=189</guid>
		<description><![CDATA[Well written introductory documentation starts by first understanding the purpose. The purpose of the document is to get the reader to become acquainted with whatever you&#8217;re trying to introduce. Not only that, but one should keep in mind what they wish to accomplish by introducing the topic. This would help organize the overall direction of [...]]]></description>
			<content:encoded><![CDATA[<p>Well written introductory documentation starts by first understanding the purpose. The purpose of the document is to get the reader to become acquainted with whatever you&#8217;re trying to introduce. Not only that, but one should keep in mind what they wish to accomplish by introducing the topic. This would help organize the overall direction of the paper.</p>
<p>After you have a good understanding of what you&#8217;re trying to introduce, and what you hope to accomplish by introducing it, you can then start with the major topics.  These major topics can then be broken down into smaller sub-topics, and those sub-topics into smaller sub-sub-topics.</p>
<p>Any and every topic should have an introduction and a conclusion. Sometimes, even be better to write out the introduction and conclusion first, and fill in the rest later. Having an introduction would save a person from re-learning information he is already aware of.</p>
<p>If the topics are absolutely independent, then you&#8217;ve written a referential document. Examples of referential documents are dictionaries, encyclopedias, and cook books. Each topic is independent of each other.</p>
<p>An introductory document progressively builds the reader&#8217;s understanding, and finally arrives at the original destination it intended.</p>
<p>Well written introductory documentation can aid a person who knows nothing about a topic into becoming well-informed of the topic. A referential documentation can aid a person who is well-informed of a topic in recalling things he has once learned. Understanding the difference between the two will be beneficial to any type of written communication efforts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2009/11/05/introductory-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Stitch in Time</title>
		<link>http://www.jacksonleung.com/blog/2009/10/30/communication/</link>
		<comments>http://www.jacksonleung.com/blog/2009/10/30/communication/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 17:16:02 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=186</guid>
		<description><![CDATA[There is an old saying &#8220;A stitch in time saves nine.&#8221; What it means is that if there is an issue, if you address it early, it&#8217;ll take overall less effort than addressing it down the road. This is saying applies not only to stitch, but to programming as well. Employers should be wary of [...]]]></description>
			<content:encoded><![CDATA[<p>There is an old saying &#8220;A stitch in time saves nine.&#8221; What it means is that if there is an issue, if you address it early, it&#8217;ll take overall less effort than addressing it down the road. This is saying applies not only to stitch, but to programming as well. Employers should be wary of creating an environment where employees are concerned about asking questions. A hostile work environment might cause the worker to avoid any questions that can clarify the task at hand. That can ultimately lead the entire project off course.</p>
<p>That being said, while it&#8217;s great to fully trust your employees to do the task you&#8217;ve assigned, communication is extremely essential in an organization. If you didn&#8217;t communicate your desires clearly, or if your employee didn&#8217;t fully understand what you&#8217;re saying, that can also lead the project off course. Which is why you should check in with your employee every now and then to see if he has any questions or to get an idea of where the project is at and where it&#8217;s going.</p>
<p>If you have the choice to either spend 5 minutes to fix it now or spend 3-4 months fixing it later. Spend the 5 minutes now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2009/10/30/communication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>View Point on Frameworks</title>
		<link>http://www.jacksonleung.com/blog/2009/10/17/view-point-on-frameworks/</link>
		<comments>http://www.jacksonleung.com/blog/2009/10/17/view-point-on-frameworks/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 22:47:58 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=182</guid>
		<description><![CDATA[The way humans get computers to do what they want is through &#8220;programming&#8221; and we program in a &#8220;programming language&#8221;. In a way, it&#8217;s how humans communicate with a computer. When I program, it&#8217;s more like talking to a computer than anything else. Talking is what keeps me clothed, fed, and sheltered. In English, you [...]]]></description>
			<content:encoded><![CDATA[<p>The way humans get computers to do what they want is through &#8220;programming&#8221; and we program in a &#8220;programming language&#8221;. In a way, it&#8217;s how humans communicate with a computer. When I program, it&#8217;s more like talking to a computer than anything else. Talking is what keeps me clothed, fed, and sheltered.</p>
<p>In English, you say whatever you want in any way you want. You can even redefine what words mean. In a programming language you have a similar freedom.</p>
<p>A framework, on the other-hand is a self-imposed method of doing things. In order to do anything within the framework, you must follow these constraints; otherwise, it can&#8217;t be done.</p>
<p>Why would anyone voluntarily limit their own freedoms? The answer is collaboration and consistency.</p>
<p>The downside of a framework is the need to remember what these constraints are. The upside of a framework is that through such constraints, you know exactly where a file should be located, how things should be called, where things should be placed and etc. A person who jumps onto the project who is familiar with the same constraints would also instantly know where everything is place, how to place everything, and etc.</p>
<p>When using frameworks, developers should be careful that we don&#8217;t over customize the framework. Over customization will cause new developers who know the framework to be unable to find all the things they would need to.</p>
<p>I love frameworks for mid-scale to large scale applications, but I find them unnecessary for simple scripts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2009/10/17/view-point-on-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handling File Storage</title>
		<link>http://www.jacksonleung.com/blog/2009/10/08/handling-file-storage/</link>
		<comments>http://www.jacksonleung.com/blog/2009/10/08/handling-file-storage/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 00:50:17 +0000</pubDate>
		<dc:creator>Jackson Leung</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.jacksonleung.com/blog/?p=170</guid>
		<description><![CDATA[When you&#8217;re writing a massive application, if given a choice to use a file manager to manage files or to allow the application to manage the files on its own, it&#8217;s much preferable that allow the application to handle the file placement logic. This way, the application&#8217;s database can be put in charge of maintaining [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;re writing a massive application, if given a choice to use a file manager to manage files or to allow the application to manage the files on its own, it&#8217;s much preferable that allow the application to handle the file placement logic. This way, the application&#8217;s database can be put in charge of maintaining the file locations ensuring that there are no conflicts and that there is a centralized location to find everything. When an application is maintaining the files, there isn&#8217;t even a need for a descriptive name to a file, since all relevance will be maintained by the database. Since you&#8217;re only interacting with the files through the application, the application can ensure that the file exists, the file won&#8217;t be overwritten, and upon deletion, there are no dependencies on this file.</p>
<p>In the case of major applications, where it&#8217;s possible for many components to have access to the same files, I recommend that all these interactions be performed through a centralized file management core. This way, if we were to change the file management logic, it can be easily performed at a single location.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jacksonleung.com/blog/2009/10/08/handling-file-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
