<?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>Phine Solutions &#187; my 2 cents</title>
	<atom:link href="http://www.phinesolutions.com/topics/my-2-cents/feed" rel="self" type="application/rss+xml" />
	<link>http://www.phinesolutions.com</link>
	<description>A web log for web work</description>
	<lastBuildDate>Wed, 30 Jun 2010 16:23:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Only a developer can understand this joke</title>
		<link>http://www.phinesolutions.com/only-a-developer-can-understand-this-joke.html</link>
		<comments>http://www.phinesolutions.com/only-a-developer-can-understand-this-joke.html#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:23:17 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=400</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="iPhone 4 joke" src="http://i.imgur.com/uEZ1b.jpg" alt="" width="500" height="586" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/only-a-developer-can-understand-this-joke.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sending email using Google App and PHP Swift Mailer</title>
		<link>http://www.phinesolutions.com/sending-email-using-google-app-and-php-swift-mail.html</link>
		<comments>http://www.phinesolutions.com/sending-email-using-google-app-and-php-swift-mail.html#comments</comments>
		<pubDate>Wed, 23 Jun 2010 20:19:54 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=398</guid>
		<description><![CDATA[Not very long ago I converted one of my site to use Google App email service. Using a third party email service can reduce the load on your own server and eliminate the responsibilities of configuring and maintaining a mail server. Since it&#8217;s essentially Gmail, SMTP is supported. I paired it with Swift Mailer, the [...]]]></description>
			<content:encoded><![CDATA[<p>Not very long ago I converted one of my site to use Google App email service. Using a third party email service can reduce the load on your own server and eliminate the responsibilities of configuring and maintaining a mail server. Since it&#8217;s essentially Gmail, SMTP is supported. I paired it with <a href="http://swiftmailer.org/">Swift Mailer</a>, the free PHP mail client and the solution has been quite stable and satisfactory.</p>
<p>Until out of blue I checked the mailbox of the default mailing account: noreply@mydomain.com.</p>
<p>The mailbox is filled with undeliverable emails (which is normal), and surprisingly, a quite amount of user emails. Here is the scenario: my website has an online form that supports one to send message to an email address. So if abc@domain1.com uses the form to send message to xyx@domain2.com, an mail will be delivered to xyz@domain2.com, through Gmail using noreply@mydomain.com. Also to achieve better user experience, when Swift Mailer message is constructed, I also set the &#8220;from&#8221; address to abc@domain1.com, so when xyz@domain2.com receives the email, the message appears to be from abc@domain1.com directly. The idea is also that when xyz replies, the message goes back to abc.</p>
<p>The problem is in the replying part. You might have guessed or figured out, all the replies went back to noreply@mydomain.com. So basically all responses were lost since no one care about the noreply mailbox.</p>
<p>I looked more carefully into the email header and found the problem: the from address looks up like this: <span style="color: #800080;">abc@domain1.com&lt;noreply@mydomain.com&gt;</span>.</p>
<p>As you can see abc@domain1.com is only treated as a &#8220;display name&#8221; and actual email address is still noreply@mydomain.com. So even the from address appears to be correct in a email client, replying to the message sends the response to a black hole.</p>
<p>After identifying the problem I started to tweak the Swift Mailer message but no matter what I try Gmail will always append the noreply address in the from header. This left me in a despair mood. Other options are not good. I can write a program to automatically check the mailbox and forward those emails, or modify the message with some warning to notify the receiver not to reply directly, or just switch to a new email service. All these options are either too complicated (without a good cause), or will negatively affect user experience.</p>
<p>After some more poking around I found this email header option: &#8220;Reply-To&#8221;. If it does what its name indicates my problem can be solved by adding this header in mail messages. You might be laughing at me right now for not knowing this but before this I had never really studied email headers and I did get a load of information by trying to solve this.</p>
<p>Adding a header field is pretty easy in Swift Mailer and it worked. With the &#8220;Reply-To&#8221; header the mail client (and webmails that I tested) correctly put the right email address when replying.</p>
<p>It&#8217;s always fun to be able to solve a problem in a simple way, before going too far down the other paths. And hopefully this post can help someone else in the same boat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/sending-email-using-google-app-and-php-swift-mail.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plug those Javascript memory leaking holes</title>
		<link>http://www.phinesolutions.com/plug-those-javascript-memory-leaking-holes.html</link>
		<comments>http://www.phinesolutions.com/plug-those-javascript-memory-leaking-holes.html#comments</comments>
		<pubDate>Thu, 29 Apr 2010 14:55:58 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=367</guid>
		<description><![CDATA[Recently I built a Javascript app that uses Gmap API, Ajax and JQuery to display the location information on a web page. It retrieves information from server using Ajax and the returned json object, to display location information for certain things like business, hotel and schools on a Google map. The project is fun to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I built a Javascript app that uses Gmap API, Ajax and JQuery to display the location information on a web page. It retrieves information from server using Ajax and the returned json object, to display location information for certain things like business, hotel and schools on a Google map. The project is fun to work on and I learned a good lessen on Javascript memory leak as well.</p>
<p>As I worked on testing and development the code in my browser, I realized the browser was getting less and less responsive. So I opened up the task manager to find out what&#8217;s going on and found out that the browser&#8217;s memory usage has been continuing growing every time I refreshed the page, and the usage wouldn&#8217;t come back. And at one point, Firefox is hogging over 600M or memory on my system. And the bad behavior is consistent across Internet Explorer and Firefox. This means if a user use the page for some extensive time he&#8217;ll have to shutdown the browser to re-claim the system memory.</p>
<p>Not a very good user experience. Being a amateur Javascript developer I don&#8217;t have a lot of insight on how the memory is managed in Javascript. As a matter of fact, it has been largely ignored in my patty little scripts before. This time I have to take it seriously. So I hit up the web to see what could have caused the Javascript memory leak.</p>
<h2>What could cause memory leaks</h2>
<p>When we talk about Javascript memory leak, we often refer to the behavior that  memory is not properly de-allocated when a web page is closed or  refreshed. Web browsers have the build-in garbage collectors to collect and release the memory when it&#8217;s not used anymore. Usually when a page is done, the browser will remove everything  created by Javascript, unless, however there are connections between  Javascript objects (variables and functions) and DOM elements.</p>
<p>Another situation should probably be better addressed as memory  management. A good Ajax app lets use to access different information while staying on the same page and in this case, the app can also eat up memory and become sluggish over the time. Although most of the time we might not notice this but a poorly written app can ramp up memory usage quickly and cause some bad user experience.</p>
<h2>In theory, what should be avoided</h2>
<p>The two biggest culprits that will cause memory leak are &#8220;Circular reference&#8221; and &#8220;closure&#8221;. Other people have written good articles about them. <a href="http://www.ibm.com/developerworks/web/library/wa-memleak/">This article</a> illustrates the problems in a relatively simple explanation. &#8220;Circular reference&#8221; is basically what I would call it &#8220;spaghetti code&#8221; in Javascript. The modern Object Oriented languages have helped reduce this kind of code, but in Javascript, it can easily happen. A simple example is to have a DOM element refers to a Javascript function (using onclick event call for example), and the Javascript function refers to the DOM element. If you used inner function in Javascript, you know what closure is. It is convenient in terms of inheriting the variables but it is also an easy way to hide the circular reference.</p>
<p>These two things probably are the source of most of the memory leaking problems. However, theories aside, I found it hard to spot the case in real code. Most of the time the code don&#8217;t really resemble the evil demos. The best way to avoid a problem is to stay away from it. So I come up with some good practices here that I believe which will be helpful to avoid problems, or at lease, minimize the risk to the lowest level.</p>
<h3>Watch the variables</h3>
<p>There are two type of variables in terms of the scope. One is declared  outside a function, with or without the var keyword; the other is  declared inside a function, WITH the var keyword. The later obviously is  supposed to live a shorter life and only be used in the function scope.  Although the first type is often referred as &#8220;global variable&#8221;, it is  not necessarily the same as the global variable in other languages  because it&#8217;s only supposed to live in the lifetime of a page.</p>
<p>The  key is &#8220;supposed to&#8221;. Since Javascript runs in browsers, it becomes  browser&#8217;s responsibility to release the memory allocated to variables  when they are not in use. To judge whether a variable is &#8220;in use&#8221;,  browser checks if there is any other reference to this object. If there  is, browser will not de-allocate it. As more activities happening the  browser will continue to take but not release any memory.</p>
<p>Because they don&#8217;t always do. Here is an scenario when &#8220;closure&#8221; is used in Javascript code. One common example for closure is using a function inside a function. But there is more. To understand more about closure, <a href="http://www.javascriptkit.com/javatutors/closures.shtml">this is a great article</a>.</p>
<p>But closure can easily cause memory leak if used like this:</p>
<p style="padding-left: 30px;">function localDocElem() {</p>
<p style="padding-left: 30px;">var elem = document.getElementById(&#8217;ClickElem&#8217;);</p>
<p style="padding-left: 30px;">elem.bind(&#8217;click&#8217;, function() { elem.innerHTML = &#8216;&lt;span class=&#8221;highlight&#8221;&gt;&#8217; + elem.innerHTML + &#8216;&lt;/span&#8217;; });<br />
}</p>
<p>This function simply attach a click event to a DOM element so whenever it is clicked the content gets &#8220;highlighted&#8221;. However, the function attached to the DOM object &#8220;elem&#8221; also uses the DOM object, hence, a circular reference is created between the DOM object and function object (in Javascript, even a function is maintained as an object) so the browser won&#8217;t garbage collect the local variable elem even after the localDocElem function returns. In this particular example, since a DOM object is connected with Javascript function, it is possible that the browser does not garbage collect either even the user leaves the page and the only way to claim the memory back is to shutdown the browser completely.</p>
<p>Consider using global variable to hold large amount of data can reduce some of the risk above. Let&#8217;s you have a Javascript that uses Ajax to to pull data from the server constantly, you can use JQuery&#8217;s $.getJson method to archive this. The returned data is better to be held in a global variable than local.</p>
<h3>Un-allocate and nullify often</h3>
<p>In a map application, lots of objects like icons, markers, etc. are created dynamically. They take memory to store and they can take up large chunk of memory quickly. It is a better practice to &#8220;nullify&#8221; them whenever they are not in use, for example, when displaying a completely different set of markers in a map view. Usually we can just assign the null value to the variable to achieve this, however for a clean de-allocation you&#8217;ll need to make sure to remove anything that is attached to them. For example, events, callback functions.</p>
<h3>Remove listeners</h3>
<p>To make an app interactive to user activities we create event listeners. Take a Gmap app example, we add click listener to an icon so when it is clicked, more detailed information is show. In some other cases, you could add a click event listener on a div element so whenever it is clicked, the background color changes. Since listeners and the function they trigger are attached to an object, you can see this is another easy case to get into the circular reference loop. In my code, a lot of listeners are created on the fly for those Gmap &#8220;markers&#8221;.</p>
<p>What I found helpful was to promptly remove the listeners when the markers are refreshed (along with the code to nullify the marker variables).</p>
<h3>Delete the dynamically generated DOM objects</h3>
<p>Often we use Javascript to create DOM elements, like &#8220;populating&#8221; a div tag on the fly. Since some browsers manage the DOM objects and script objects differently, the circular reference scenario can be easily created like discussed above. When you are done with the content and move on to something else, it might be helpful to eliminate the DOM element completely. For example, if you have update the content of a Div tag, you can empty out its inner HTML like this:</p>
<p>document.getElementById(&#8217;MyAjaxTarget&#8217;).innerHTML = &#8221;</p>
<h3>Create cleanup methods for different stages</h3>
<p>GUnload is provided as default Gmap cleanup call when the page is unload. However it is probably not enough since it is only called when a use leaves or refreshes a page. What we need to make sure is that memory is always released promptly when not in use. So I created several &#8220;cleanup&#8221; methods just to do that. The cleanup methods can include everything talked above, and they are called whenever needed in the code flow.</p>
<p>In summary, while Javascript enables us to enrich the user experience it can also do just the opposite if not done correctly. Although the modern browsers are doing much better jobs today to manage the Javascript garbage collection, we still need to do our due diligence to develop the code that are not only fancy, but also &#8220;responsible&#8221; to our users.</p>
<p>Here is the link of my <a href="http://www.findmyroof.com/citypedia/ca/beverly-hills?Neighborhood">Google map app</a> if you are interested.</p>
<p>If you have a good tip to help better manage memory usage in a Javascript, please share your comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/plug-those-javascript-memory-leaking-holes.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>vBulletin 4.0 vs. IPB 3</title>
		<link>http://www.phinesolutions.com/vbulletin-4-0-vs-ipb-3.html</link>
		<comments>http://www.phinesolutions.com/vbulletin-4-0-vs-ipb-3.html#comments</comments>
		<pubDate>Sun, 03 Jan 2010 15:55:07 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=325</guid>
		<description><![CDATA[One of the big events in the forum software world this year is the release of vBulletin 4.0. As a license owner I took the pre-sale bait and purchased a new license for vb 4.0. The software looks not bad to me after I installed it on a test domain. CMS and Blog are nice [...]]]></description>
			<content:encoded><![CDATA[<p>One of the big events in the forum software world this year is the release of vBulletin 4.0. As a license owner I took the pre-sale bait and purchased a new license for vb 4.0. The software looks not bad to me after I installed it on a test domain. CMS and Blog are nice additions. HTML table tags are gone. Although themes created for 3.x.x will no longer work and have to be completely re-done it didn&#8217;t make much difference on what I wanted to do.</p>
<p>After I dig into it a bit deeper this new concept of &#8220;StyleVar&#8221; really got into my head. It is as tedious to work on as it can be. So I hit up on the internet and see if there is any tips or tricks that I can use. Surprisingly all I got were complaints on VB 4.0. There seemed to be a lot of negative sentiment against Vb, specifically the 4.0 release.</p>
<h3>Some mostly talked about complaints are:</h3>
<ul>
<li>Expensive and confusing upgrade pricing.</li>
<li>Skins created for 3.x.x versions need to be re-done completely in 4.0.</li>
<li>No significant changes in 4.0 and the code base is quite bloated.</li>
<li>The &#8220;Gold&#8221; release is still buggy.</li>
</ul>
<p>As I sip through these and figuring I probably made a mistake purchasing 4.0 license I found Invision Power Board was being mentioned by a lot of people and got a lot of nice reviews too.</p>
<p>So I decided to give IPB a try. IPB offers a free 24 hour demo account and signing up was quite easy. After a little play around I was totally impressed by IPB 3.0.</p>
<h3>What I really like about IPB 3.0:</h3>
<ul>
<li>The demo capability upfront.</li>
<li>The modular design approach. The IP.Board, Blog and Gallery are individual components that can be installed separately. Now this might not sound like a benefit for most of the people but to achieve this feature the code but be designed well from the ground up.</li>
<li>Powerful templates. The template design in IPB is very powerful, it contains variables and logics (such as if for foreach statements) and can take PHP code block directly. For lot of the board admin who don&#8217;t have the technical skills this might be a bit of difficult to manage but developers will like it.</li>
<li>IP.Converge, which provides a nice framework for the Single Sign On solution that I have been looking for for a long time.</li>
<li>The more advanced features like OpenId, Facebook integration and API capability.</li>
<li>Skinning IPB. Since I develop using HTML and CSS the approach that IPB takes feels easier.</li>
</ul>
<h3>What I don&#8217;t like:</h3>
<p>Based on my personal experience the quality of documentation is a bit lacking. Part of the reason for this is that comparing with VB, IPB still has a small developer community. The IPB developer community hasn&#8217;t been as much active as VB&#8217;s, in terms of participating development discussions, writing tutorials etc. So if you have a question it takes a bit more researching and digging around.</p>
<h3>Yes I switched to IPB 3.0.</h3>
<p>Forum softwares have been powering the web for a long time but as new things emerge forums need to adapt too. It is a lot harder to run a forum board these days because of the low barrier to entry &#8211; a lot more forums are online these days &#8211; and competition from social network sites. This demands higher standard on forum software. Looking forward IPB has a lot to gain in the paid forum software market.</p>
<p>That being said vBulletin is still the most popular forum software at the time being. But it has been sitting on its own success for too long. Unfortunately its own success may be the biggest obstacle toward bigger and bolder innovation. The new 4.0 version is definitely an improvement but the change fell short. From what I gather most of the existing board admin chose to stay on version 3 and IPB 3 has become a serious choice for those who needs new forum software. So now it really is a do or die moment for VB and the vb team needs to get their act together to come up with a better next generation release to stay in competition.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/vbulletin-4-0-vs-ipb-3.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What newspaper and magazine publishers can do to save their business</title>
		<link>http://www.phinesolutions.com/publisher-should-give-out-tablet.html</link>
		<comments>http://www.phinesolutions.com/publisher-should-give-out-tablet.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 17:10:14 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=331</guid>
		<description><![CDATA[The publishers have been losing their print business from left to right. Now with the 2010 approaching I think they are just going to get a golden opportunity to save their business.
Rumors on the street is that Apple will release its tablet device in 2010. Whatever it will be called it should be capable to [...]]]></description>
			<content:encoded><![CDATA[<p>The publishers have been losing their print business from left to right. Now with the 2010 approaching I think they are just going to get a golden opportunity to save their business.</p>
<p>Rumors on the street is that Apple will release its tablet device in 2010. Whatever it will be called it should be capable to get online and be used as a nice reading device since it is larger than a smart phone. And more importantly, it will set out a trend on more of the similar ones and cheaper ones to be built. What publishing companies can do is to build apps that work best on these devices to display their contents and sell subscriptions. However that is not enough. What they need to do is to give out devices for free (or close to free) like wireless companies do with their cellphones.</p>
<p>I suspect a lot of consolidation will also take place in the near future. As a result, stronger ones become content distributors. A tablet that can be used best as a &#8220;reader&#8221; is probably the best medium for the future content distribution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/publisher-should-give-out-tablet.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>home wiring 2.0</title>
		<link>http://www.phinesolutions.com/home-networking-wiring.html</link>
		<comments>http://www.phinesolutions.com/home-networking-wiring.html#comments</comments>
		<pubDate>Sat, 19 Sep 2009 20:08:24 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=280</guid>
		<description><![CDATA[We moved into our new home a year ago and back then the builder asked me about the network wiring of the house. Basically the home will be wired with cat5 cables for phone service. If I want a network (data) jack additionally, more cables will be added &#8211; and of course the cost. Buying [...]]]></description>
			<content:encoded><![CDATA[<p>We moved into our new home a year ago and back then the builder asked me about the network wiring of the house. Basically the home will be wired with cat5 cables for phone service. If I want a network (data) jack additionally, more cables will be added &#8211; and of course the cost. Buying a new home was financially demanding so I went on the cheap side of me and opted for voice only.</p>
<p>I have been using wireless network since then and I was generally pretty happy about it. However I&#8217;m moving my office to the basement and if the router follows me the wireless access will be very spotty from the second floor. Adding more access point is not a good option in my opinion so I decided to re-configure the wiring so I can have the wired data access in rooms that I want.</p>
<p>One big pre-condition for this setup is that I DON&#8221;T have a landline and don&#8217;t intend to get one. Like 20% of American household (and growing) we only use cellphones. I do have a SIP phone (basically  a VOIP solution) and it needs a data port. Currently it is connected to my wireless router through a VOIP adapter. My VOIP phone is another good reason to have more data ports around the house. I have a cordless phone set which only needs one line to the base station (all the other handsets are cord free).</p>
<p>So I made the decision to go ahead re-wire cat5 to support data only.</p>
<p>One alternative &#8211; if you need voice jack &#8211; is to split the cat5 cable to support 2 jacks, one for voice and the other for data. Obviously that requires more work. Since this is not my configuration I&#8217;ll briefly mention it at the end of the post.</p>
<h2>What is cat 5 cable</h2>
<p>Here we need to have a little bit of explanation on cat5. &#8220;Category 5&#8243; is a cable specification.</p>
<p><img class="alignnone" title="category 5 cable" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Cat_5.jpg/200px-Cat_5.jpg" alt="" width="200" height="150" /></p>
<p>The cable looks familiar? Yep, you see it everyday if you look under the desk, around your ethernet switches.</p>
<p>A cat 5 cable includes 8 wires, every two of which are twisted together, known as twisted pairs. The wires are color coded, they are: orange, white orange, green, white green, blue, white blue, brown and white brown.</p>
<p><img class="alignnone" title="cat 5 cable showing twisted pairs" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/CAT5e_Cable.jpg/180px-CAT5e_Cable.jpg" alt="" width="180" height="135" /></p>
<p>These wires carry voice or data signal. As a matter of fact, only 2 pairs (4 wires) are needed to support a 10/100 BASE-T network; only 1 pair is needed for a voice line. That&#8217;s why it&#8217;s possible to split one cat 5 for both data and voice. Again, in my case, I&#8217;m going all data.</p>
<h2>Planning</h2>
<p>A good planning always pays. Here is a list of things you need to check and prepare before start cutting wires.</p>
<ul>
<li>You house is wired with cat 5 or cat 5e. Usually this is done in newer house and it can be confirmed by checking the outlet. It should say cat5 on it. If this is not the case, stop reading and go visit reddit.com.</li>
<li>You have &#8220;star&#8221; wiring. Meaning every single wire branches out from the central panel. If they are in a loop, you can stop now and go watch a movie.</li>
</ul>
<ul>
<li>You can access your switch board and it is either inside the house or in your basement. Because you&#8217;ll put cable modem and network switch there it needs to be securely located.</li>
</ul>
<ul>
<li>Equipments, tools and parts.</li>
</ul>
<p style="padding-left: 30px;">1. The cat 5 jacks. I bought 10 for $29 and didn&#8217;t even need one at the end.</p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-298" title="cat5e-jacks" src="http://www.phinesolutions.com/wp-content/uploads/cat5e-jacks.jpg" alt="cat5e-jacks" width="400" height="300" /></p>
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">2. The Leviton data board.</p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-287" title="leviton-vocie-data-board" src="http://www.phinesolutions.com/wp-content/uploads/leviton-vocie-data-board.jpg" alt="leviton-vocie-data-board" width="275" height="160" /></p>
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">3. A bunch of ethernet cables.</p>
<p style="padding-left: 30px;">4. A wired router</p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-299" title="linksys-wired-router" src="http://www.phinesolutions.com/wp-content/uploads/linksys-wired-router.jpg" alt="linksys-wired-router" width="400" height="300" /></p>
<p style="padding-left: 30px;">5. Some tools</p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-300" title="tools" src="http://www.phinesolutions.com/wp-content/uploads/tools.jpg" alt="tools" width="533" height="400" /></p>
<ul>
<li>Internet downtime.</li>
</ul>
<p style="padding-left: 30px;">The internet will be broken for a few hours and you&#8217;ll need to let the wife know.</p>
<h2>Let&#8217;s roll</h2>
<p>1. Re-wire the patch panels</p>
<p>Note: I chose to do this first &#8211; instead of the jack &#8211; was because there is a chance the wiring of the jacks will work without any changes.</p>
<p>The following photo shows the patch board where all the cat 5 cables are originally terminated. Notice the third from the left is the new data board that I added. The builder&#8217;s contractor did a great job labeling the cable so I didn&#8217;t have any problem to locate the one that I want to rewire.</p>
<p><img class="alignnone size-full wp-image-296" title="voice-data-panels" src="http://www.phinesolutions.com/wp-content/uploads/voice-data-panels.jpg" alt="voice-data-panels" width="400" height="300" /></p>
<p>So I basically cut of the wires and punch them in to the new data panel (3rd one on the left). Remember the color codes for those twisted pairs? Now it&#8217;s the time to use them. Below is my color code mapping.</p>
<table border="1">
<tbody>
<tr>
<th>Wire color</th>
<th>Board slot</th>
</tr>
<tr>
<td>Green</td>
<td>Green</td>
</tr>
<tr>
<td>White green</td>
<td>White green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
<tr>
<td>White orange</td>
<td>White orange</td>
</tr>
</tbody>
</table>
<p>Although the color codes seem to be a straight one to one mapping there is somewhat a standard to follow. And it matters because both ends of the cable need to follow the same standard to get the data juice flowing. Just remember T-568A is the standard we are going by here. You may or may not need to rewire the jack to T-568A, depending on what your builder used originally. To learn more about the standards you can <a href="http://www.ertyu.org/steven_nikkel/ethernetcables.html">visit this page</a>.</p>
<p>The Leviton patch board has instruction on the color mapping on each punch slot so it was super easy to find the correct punch slot. It&#8217;s the first time that I work on these punchdowns and I have to say it was pretty easy to get a hang of it. Just keep a steady hand and enjoy that little clicks when you push the wire in. The plastic tool that comes with the patch panel was good enough for me and I don&#8217;t think you need to invest a $30 punch tool unless you are planning to do this to make a living. Again, I&#8217;m cheap.</p>
<p>This photo shows the two wires are terminated into data panel. The cables coming out of the black ports go into the router.</p>
<p><img class="alignnone size-full wp-image-294" title="voice-data-panels-2" src="http://www.phinesolutions.com/wp-content/uploads/voice-data-panels-2.jpg" alt="voice-data-panels-2" width="400" height="300" /></p>
<p>2. Connect the patch panel to a router</p>
<p>Now is the time to notify your family that the internet will be down. I took the cable modem and connect it directly to cable company&#8217;s video feed. Did I mention I don&#8217;t have cable TV? If you do, you probably need a splitter. Then, connect the cable modem to a wired Linksys router (I left the wireless router upstairs and it will be my access point). Now it&#8217;s also a good time to configure/check the router if it&#8217;s a new one. Once you verified it is online, connect it to your patch board and make sure you use the right port where the wires were terminated.</p>
<p>3. Check and re-wire the jack, if needed.</p>
<p>If you are as lucky as me your jack is a data port already. If not, it is possible it&#8217;s not wired using T568A standard so you&#8217;ll need to rewire it that way. The cat 5 jack should have a label on it that clearly indicates which color goes where for A or B standard so it should be pretty easy to punch and attach. Here is the color code mapping:</p>
<table style="height: 108px;" border="1" width="172">
<tbody>
<tr>
<th>Wire</th>
<th>Jack slot</th>
</tr>
<tr>
<td>Green</td>
<td>Green</td>
</tr>
<tr>
<td>White green</td>
<td>White green</td>
</tr>
<tr>
<td>Orange</td>
<td>Orange</td>
</tr>
<tr>
<td>White orange</td>
<td>White orange</td>
</tr>
</tbody>
</table>
<p>As I mentioned I didn&#8217;t even need to rewire the jack but I did one anyway. Here is a picture:</p>
<p><img class="alignnone size-full wp-image-293" title="new-jack-in-wall" src="http://www.phinesolutions.com/wp-content/uploads/new-jack-in-wall.jpg" alt="new-jack-in-wall" width="400" height="300" /></p>
<p>At this point you should have one room wired. So plug in a your computer you should have the internet. If not, check the wires, connections.</p>
<p>4. Take a break and finish up</p>
<p>Now it&#8217;s a good time to take a break and give yourself a pad on the back. If you have more outlets to convert, repeat the same steps. Once you are done, tidy up the wires and outlets.</p>
<p>The old wireless router can now be used as a simple access point. Just make sure to re-configure it to a different static IP (192.168.1.2 for example) and turn off DHCP (The wired router is doing that now). Connect one of the LAN port to a network switch or a data jack you are done.</p>
<h2>Voice + Data over one cat 5</h2>
<p>As I mentioned I don&#8217;t use this kind of setup but since I did some research on it I might as well write it down.</p>
<p>Remember there are 4 pairs of wires in a cat 5 cable? We just used 2 pair. The 2 pairs left can be used for phone lines, and as matter of fact, two phone lines if you wish.</p>
<p>1. Make a phone jack</p>
<p>You can use a cheaper voice jack for this one. Here is the color code mapping:</p>
<table border="1">
<tbody>
<tr>
<th>Wire color</th>
<th>Jack slot</th>
</tr>
<tr>
<td>Blue</td>
<td>Blue</td>
</tr>
<tr>
<td>White blue</td>
<td>White blue</td>
</tr>
<tr>
<td>Brown</td>
<td>Brown</td>
</tr>
<tr>
<td>White brown</td>
<td>White brown</td>
</tr>
</tbody>
</table>
<p>2. Terminate phone jacks</p>
<p>Since I don&#8217;t have a land line of my own so I don&#8217;t get a chance to practice this. Basically one twisted pair can support one voice line so you can play with it and see what&#8217;s the best fit for you.</p>
<p>One suggestion is that you should use a regular voice jack, which is smaller than cat 5 jack so you can&#8217;t accidentally plug in data cable in a voice jack. Since there is always a chance the wires are not done correctly, the high voltage generated from the phone rings can toast your network adapter if the cable is plugged into the wrong jack.</p>
<p>Some think there will be data transfer degradation when the voice line is in use. Based on what I read and talking to friend who actually did this setup, it seems more like just a theory.</p>
<h2>Document what you did</h2>
<p>Once you get it working please make sure finishing the last mile before start surfing the web: documenting what you did. Label the wires, mark the jacks. Or write a blog post, maybe.</p>
<p>So that&#8217;s how I rewired my home to version 2.</p>
<p>As landline becomes less and less popular these days I really think this is a setup that may become more and more popular. As we are going to see more and more &#8220;network intelligent&#8221; electronic devices in homes in the future. Devices to stream internet video to TV is a good example and is already making the front run. With more bandwidth hungry devices in your home wireless access point can become a bottleneck. In that case, the more data port, the merrier. Of course if you are building a new home and have the chance and means, you can pimp the wiring up by doubling cat 5 or even adding cat 6. But for most of the existing homes, it&#8217;s not that easy to drag wires behind the walls and this might be a more feasible solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/home-networking-wiring.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If I&#8217;m a big time publisher, what would be my reaction to Fast Flip</title>
		<link>http://www.phinesolutions.com/publisher-on-google-fast-flip.html</link>
		<comments>http://www.phinesolutions.com/publisher-on-google-fast-flip.html#comments</comments>
		<pubDate>Tue, 15 Sep 2009 20:25:42 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=285</guid>
		<description><![CDATA[Google launched Fast Flip yesterday. It&#8217;s an image browser for the snapshot images taken from web pages (they are categorized of course). It is very quick and it&#8217;s supposed to make online news reading fast and furious.
On the revenue side, there will be ads, and there will be revenue sharing with the publishers who want [...]]]></description>
			<content:encoded><![CDATA[<p>Google launched <a href="http://fastflip.googlelabs.com/">Fast Flip</a> yesterday. It&#8217;s an image browser for the snapshot images taken from web pages (they are categorized of course). It is very quick and it&#8217;s supposed to make online news reading fast and furious.</p>
<p>On the revenue side, there will be ads, and there will be revenue sharing with the publishers who want to flip with Google.</p>
<p>Google takes the usual product launching route. Put it in &#8220;lab&#8221;, collect user feedback and go from there.</p>
<p>If I&#8217;m a big time publisher like New York Times I would develop my own version of &#8220;Fast Flip&#8221;, NOW.</p>
<p>This is the exact kind of innovation that the publishers should take. You have the content, use it; you have the original digital copy, you can do better job converting them to images; the technology and development? a small team should be able to crank it out in a few months.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/publisher-on-google-fast-flip.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snow Leopard upgrade</title>
		<link>http://www.phinesolutions.com/snow-leopard-upgrade.html</link>
		<comments>http://www.phinesolutions.com/snow-leopard-upgrade.html#comments</comments>
		<pubDate>Mon, 31 Aug 2009 01:05:01 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=277</guid>
		<description><![CDATA[Pre-ordered Snow Leopard and received it on Friday (the official release day) afternoon via Fedex. For a total order of $29 this is some treatment.
The upgrade was smooth for me. Just pop in the DVD and let it run the course. There are some nice interface tweaks, and not to mention the saved disk space. [...]]]></description>
			<content:encoded><![CDATA[<p>Pre-ordered Snow Leopard and received it on Friday (the official release day) afternoon via Fedex. For a total order of $29 this is some treatment.</p>
<p>The upgrade was smooth for me. Just pop in the DVD and let it run the course. There are some nice interface tweaks, and not to mention the saved disk space. But a few enhancements that I like the best are:</p>
<ul>
<li>Access over local network are much much faster. I have a shared drive in the LAN and it used to be a pain to view large images and QuickTime movie files over the network. After the upgrade, the delay is gone and the video plays smoothly.</li>
<li>The new QuickTime Player has the video, audio and screen recording built in now. Since my MacBook has the camera and microphone built in, making an video is as conveniently as making a few clicks and start talking.</li>
<li>The Microsoft Exchange support. Works very well. Enough said.</li>
</ul>
<p>I&#8217;m no Apple fanboy but sometimes I love using Apple product because it provides an &#8220;environment&#8221;. An environment that has a nice mixture and balance of great design and usability. For us web builders, this is both an influence and inspiration. It helps us, in a subtle way, to make product with good taste and also works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/snow-leopard-upgrade.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A nice feature on Bing</title>
		<link>http://www.phinesolutions.com/nice-feature-on-bing.html</link>
		<comments>http://www.phinesolutions.com/nice-feature-on-bing.html#comments</comments>
		<pubDate>Tue, 16 Jun 2009 20:01:58 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=250</guid>
		<description><![CDATA[Bing is the new search engine from Microsoft, although they call it &#8220;Decision Engine&#8221; we all know it is just a branding trick. I used it a little bit and I was pleasantly surprised.
The feature I really like is the preview feature. For example if you search for &#8220;PHP tutorial&#8221; you get this page:
http://www.bing.com/search?q=php+tutorial&#38;go=&#38;form=QBRE
A page [...]]]></description>
			<content:encoded><![CDATA[<p>Bing is the new search engine from Microsoft, although they call it &#8220;Decision Engine&#8221; we all know it is just a branding trick. I used it a little bit and I was pleasantly surprised.</p>
<p>The feature I really like is the preview feature. For example if you search for &#8220;PHP tutorial&#8221; you get this page:</p>
<p><a href="http://www.bing.com/search?q=php+tutorial&amp;go=&amp;form=QBRE">http://www.bing.com/search?q=php+tutorial&amp;go=&amp;form=QBRE</a></p>
<p>A page from php.net is listed as the first entry, which is in my opinion, beats <a href="http://search.yahoo.com/search?p=php+tutorial&amp;fr=yfp-t-501-s&amp;toggle=1&amp;cop=mss&amp;ei=UTF-8">the result from Yahoo</a>. What&#8217;s more, you can hover your mouse on each entry of the result page, a little link will appear on the side and you can use your mouse to activate it to show a preview of the page. I tested several queries and the previews are very accurate. The preview also shows other links on the page that are relevant to the subject, which help to decide whether this page is &#8220;click through worthy&#8221;.</p>
<p>I don&#8217;t know if Bing can dethrone Google on web search, and as long as Google continues delivering the relevant results it is hard for anyone to make a legit threat on its dominance. But MS seems to have some nice things going in Bing just off the bat. Since Google relies on its search engine for most if not all its revenue, MS has an advantage here to make some bolder move, and be more innovative, like a real decision engine that was just released: <a href="http://www.hunch.com/">hunch.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/nice-feature-on-bing.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I gave up on Vista</title>
		<link>http://www.phinesolutions.com/i-gave-up-vista.html</link>
		<comments>http://www.phinesolutions.com/i-gave-up-vista.html#comments</comments>
		<pubDate>Mon, 18 May 2009 15:50:30 +0000</pubDate>
		<dc:creator>1.618</dc:creator>
				<category><![CDATA[my 2 cents]]></category>

		<guid isPermaLink="false">http://www.phinesolutions.com/?p=234</guid>
		<description><![CDATA[So all of sudden my wireless connection stopped working and I couldn&#8217;t &#8220;repair&#8221; it no matter what I tried. So I hit the reset button and guess what, Vista wouldn&#8217;t start. It just froze in the midway. I tried to repair the OS with the installation CD but it couldn&#8217;t fix it either. No errors [...]]]></description>
			<content:encoded><![CDATA[<p>So all of sudden my wireless connection stopped working and I couldn&#8217;t &#8220;repair&#8221; it no matter what I tried. So I hit the reset button and guess what, Vista wouldn&#8217;t start. It just froze in the midway. I tried to repair the OS with the installation CD but it couldn&#8217;t fix it either. No errors reported, just stuck.</p>
<p>Luckily safe mode did work so I was able to back up all my files and made decision to re-install the OS.</p>
<p>I do have some decisions to make.</p>
<p>1. Re-install Vista. No way after this.</p>
<p>2. &#8220;Upgrade&#8221; to WIndows 7 RC. I don&#8217;t think I can trust this OS yet since it is just out of the oven.</p>
<p>3. How about Ubuntu? I do like it. However, I don&#8217;t want to have to load a &#8220;Windows&#8221; inside it so I can use some Windows Apps that I use every day.</p>
<p>So in the end I chose the good old XP.</p>
<p>It turned out I probably have a broken wireless adapter. It is a Buffalo WLI2-PCI-G54S card. In XP, when I tried to install the driver the system froze again and the installation screen shows &#8220;copying cbg54.sys&#8221;. Hard reboot is the only way to bypass this, but at least XP starts.</p>
<p>So the story pretty much ends here. It was probably a hardware issue and I don&#8217;t know if Microsoft is the one to blame here. Nevertheless it doesn&#8217;t seem Windows OS is handling this in a graceful way, or anyway at all. An OS with a good kernel should at lease prevent this kind of issues from making the whole system useless.</p>
<p>Oh by the way, I can&#8217;t believe I would say this, after a few monthes use of Vista, XP feels so clean and easy. I wouldn&#8217;t go back to Vista again even all the issues and concerns are addressed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phinesolutions.com/i-gave-up-vista.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
