<?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>PhilFreo.com &#187; Web Development</title>
	<atom:link href="http://philfreo.com/blog/category/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://philfreo.com/blog</link>
	<description>The portfolio and blog of Phil Freo, on web design, development, and entrepreneurship.</description>
	<lastBuildDate>Mon, 18 Jan 2010 07:33:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>New Job with Startup: Old School Industries</title>
		<link>http://philfreo.com/blog/new-job-with-startup-old-school-industries/</link>
		<comments>http://philfreo.com/blog/new-job-with-startup-old-school-industries/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 00:47:53 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[California]]></category>
		<category><![CDATA[Collectors Weekly]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Quizlet]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=275</guid>
		<description><![CDATA[I just accepted a full-time position at a small startup in San Francisco as a lead Developer and Product Manager.  The company is called Old School Industries LLC and is a combination of two businesses: Quizlet and Collectors Weekly.

I&#8217;ve been working with the founders, Dave Margulius and Andrew Sutherland (student at MIT), for around 6 [...]]]></description>
			<content:encoded><![CDATA[<p>I just accepted a full-time position at a small startup in San Francisco as a lead Developer and Product Manager.  The company is called Old School Industries LLC and is a combination of two businesses: <a href="http://quizlet.com/" target="_blank">Quizlet</a> and <a href="http://www.collectorsweekly.com/" target="_blank">Collectors Weekly</a>.</p>
<p><span id="more-275"></span></p>
<p>I&#8217;ve been working with the founders, <a href="http://www.linkedin.com/pub/dave-margulius/3/827/613" target="_blank">Dave Margulius</a> and <a href="http://quizlet.com/about/" target="_blank">Andrew Sutherland</a> (student at MIT), for around 6 months remotely and on short term trips as a contractor, and have now decided to accept an offer with the team full-time.  I&#8217;ll be responsible for developing new features on both websites, improving user experience, increasing monetization, and overall growing the businesses.</p>
<p><a href="http://quizlet.com/" target="_blank">Quizlet.com</a> is a studying website that lets students make flashcards online and study in a more effective and more fun way.  The site serves over a million students each month, has over 750,000 registered users, and has over 50 million user-generated flash cards.  As only the second developer on Quizlet, I&#8217;m excited to grow the website in huge ways and spend most of my time helping make studying better for a lot of people.</p>
<p><a href="http://www.collectorsweekly.com/" target="_blank">Collectors Weekly</a> is a resource for all things collecting, antiques, and vintage.  It&#8217;s a combination of great original content and providing tools to browse eBay in a better way (<a href="http://www.collectorsweekly.com/model-trains/auctions" target="_blank">SuperBrowse example</a>).  I just helped launched its new geo-targetted <a href="http://www.collectorsweekly.com/events" target="_blank">events section</a> and will spend about one third of my time developing new features for this site.</p>
<p>Both websites run on the LAMP stack.  I&#8217;ll be working heavily with Apache, PHP, JavaScript / Ajax, MySQL, Memcache, Sphinx, etc. to help grow traffic and features in a scalable way.  A decent number of the interesting technologies that I <a href="/blog/technologies-ive-worked-with-in-2009/">used for the first time in 2009</a> were a result of working with these guys.</p>
<p>This is an exciting time and a big opportunity for me as I&#8217;ll be able to significantly impact the growth and success of the startup.  It will also nice to be able to focus all my work attention in one direction rather than juggling many projects, as I&#8217;ve just <a href="/blog/graduation-thoughts-best-classes-at-uf-for-computer-engineering/">graduated</a> from UF and won&#8217;t be continuing freelance web work.  And of course, moving to San Francisco from Florida will be a big change and I&#8217;m excited, although I&#8217;ll still get to fly back every so often.  Wish me luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/new-job-with-startup-old-school-industries/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Technologies I&#8217;ve worked with in 2009</title>
		<link>http://philfreo.com/blog/technologies-ive-worked-with-in-2009/</link>
		<comments>http://philfreo.com/blog/technologies-ive-worked-with-in-2009/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 18:00:07 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=240</guid>
		<description><![CDATA[One benefit of doing freelance development work is that I get the opportunity to get involved in many different technologies and frameworks in a short amount of time.
Since the year is over&#8230; here&#8217;s a quick list of 15 technologies/frameworks that I got to learn in 2009 alone, during my last year in college.


Learned PHP optimization [...]]]></description>
			<content:encoded><![CDATA[<p>One benefit of doing freelance development work is that I get the opportunity to get involved in many different technologies and frameworks in a short amount of time.</p>
<p>Since the year is over&#8230; here&#8217;s a quick list of 15 technologies/frameworks that I got to learn in <strong>2009</strong> alone, during my <a href="http://philfreo.com/blog/graduation-thoughts-best-classes-at-uf-for-computer-engineering/">last year in college</a>.</p>
<p><span id="more-240"></span></p>
<ol>
<li>Learned PHP optimization techniques, such as using <strong>APC</strong> and <strong>Memcached</strong></li>
<li>Worked with the <strong>Twitter API</strong> to create a Twitter bot</li>
<li>Learned <strong>advanced Google Analytics tools</strong> and did multivariable testing of conversion rates with Website Optimizer</li>
<li>Work with the <strong>PayPal Payments Pro API</strong></li>
<li>Created a simple <strong>Facebook App</strong> (using FBML)</li>
<li>Learned some <strong>Objective C </strong>and worked with XCode and Interface Builder</li>
<li>Created a basic <strong>iPhone App</strong> that interacted with an XML web service</li>
<li>Worked heavily with <strong><a href="http://philfreo.com/blog/magento-ecommerce-first-thoughts-tips/">Magento customization</a></strong><strong> </strong>and theming work</li>
<li>Wrote a <strong><a href="http://philfreo.com/blog/arbitrary-shortcodes/">WordPress plugin</a></strong><strong> </strong>to make deploying multiple sites easier, along with plenty of other WordPress development</li>
<li>Wrote an <strong><a href="http://philfreo.com/blog/freo-addon-installer/">ExpressionEngine module</a> </strong>to save people time,<strong> </strong>and other EE work</li>
<li>Learned about various <strong>MySQL performance </strong>with different storage engines</li>
<li>Built a <strong>Google Wave Robot </strong>at a Google hackathon and demoed it at a WordPress Dev Day</li>
<li>Worked with the <strong>YouTube API</strong> to build an automatic video status checker</li>
<li><strong>Geo-targeting</strong> by IP address</li>
<li>Automatic<strong> language detection of text </strong>with Google&#8217;s Translation API</li>
</ol>
<p>Hopefully 2010 will bring its own interesting technologies and opportunities to learn!</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/technologies-ive-worked-with-in-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Review: &#8220;jQuery 1.3 with PHP&#8221;</title>
		<link>http://philfreo.com/blog/book-review-jquery-1-3-with-php/</link>
		<comments>http://philfreo.com/blog/book-review-jquery-1-3-with-php/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 07:30:59 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=255</guid>
		<description><![CDATA[I was given another book to review, called &#8220;jQuery 1.3 with PHP&#8221;, so here it is.  The book is aimed at beginners or intermediate developers wanting to learn how to &#8220;enhance your PHP applications by increasing their responsiveness through jQuery and its plugins&#8220;.

Chapter 1: Introduction &#38; Overview, Chapter 2: Quick Tricks &#8211; Good chapter to teach [...]]]></description>
			<content:encoded><![CDATA[<p>I was given another book to review, called &#8220;jQuery 1.3 with PHP&#8221;, so here it is.  The book is aimed at beginners or intermediate developers wanting to learn how to &#8220;<em>enhance your PHP applications by increasing their responsiveness through jQuery and its plugins</em>&#8220;.</p>
<p><span id="more-255"></span></p>
<p><strong>Chapter 1: Introduction &amp; Overview, Chapter 2: Quick Tricks</strong> &#8211; Good chapter to teach beginners to both JavaScript, jQuery, and PHP the differences between client-side and server-side code, and how the jQuery framework fits into it all.</p>
<p><strong>Chapter 3: Tabs and Accordions</strong> &#8211; At first this chapter looks to be nothing more than glorified examples of <a href="http://docs.jquery.com/UI">jQuery UI</a> Widgets, but later it actually does a nice job showing how PHP can be used with these widgets to do server-side management of the tabs.</p>
<p><strong>Chapter 4: Forms and Form Validation</strong> &#8211; Interesting and insightful way of validating forms (both on the client and server side, which is necessary) without having to duplicate all the validation rules.</p>
<p><strong>Chapter 5: File Management</strong>, <strong>Chapter 6: Calendars</strong> &#8211; Very specific examples, but Ch. 6 uses the very nice <a href="http://www.redredred.com.au/projects/jquery-week-calendar/">jquery-week-calendar</a> plugin to create an interface very similar to Google Calendar and shows how to link it up with PHP managing the events server-side.</p>
<p><strong>Chapter 7: Image Manipulation</strong> &#8211; Another nice example of bringing using both PHP and jQuery plugins (<a href="http://plugins.jquery.com/project/treeview">treeview</a> and <a href="http://deepliquid.com/content/Jcrop.html">jcrop</a>) to create something really useful.  In this case an image browser, resizer, rotator, and cropper.</p>
<p><strong>Chapter 8: Drag and Drop</strong> &#8211; Standard sorting/dragging examples + persisting data.</p>
<p><strong>Chapter 9: Data Tables</strong> &#8211; Using the <a href="http://datatables.net/">DataTables</a> jQuery plugin with PHP on very large data sets.</p>
<p><strong>Chapter 10: Optimization</strong> &#8211; A few helpful tips regarding caching, automatically merging .js source files, JavaScript code optimization, perceived user load times, etc.</p>
<p>Overall, if you&#8217;re a programmer not super familiar with PHP or JavaScript, this book does have some very helpful explanations with good examples.</p>
<p>One small gripe about the book: while I do know that black and white books are much cheaper to produce, reading code without syntax coloring makes it unnecessarily harder to understand.</p>
<p>To learn more or purchase: <a href="http://www.packtpub.com/jquery-1-3-with-php?utm_source=philfreo.com&#038;utm_medium=bookrev&#038;utm_content=blog&#038;utm_campaign=mdb_001650">&#8220;jQuery 1.3 with PHP&#8221; by Kae Verens</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/book-review-jquery-1-3-with-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Largest website width to support 1024&#215;768 resolution</title>
		<link>http://philfreo.com/blog/largest-website-width-to-support-1024x768-resolution/</link>
		<comments>http://philfreo.com/blog/largest-website-width-to-support-1024x768-resolution/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 04:47:13 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=207</guid>
		<description><![CDATA[Currently, web designers are advised to support browser resolutions of widths 1024px and greater based on current browser usage data.  The idea is that you want your site&#8217;s design to look good, and not require a horizontal scroll bar for those users.  But screen resolution and browser width are not the same thing, [...]]]></description>
			<content:encoded><![CDATA[<p>Currently, web designers are advised to support browser resolutions of widths 1024px and greater based on current browser usage data.  The idea is that you want your site&#8217;s design to look good, and not require a horizontal scroll bar for those users.  But screen resolution and browser width are not the same thing, because of browser chrome, scroll bars, and because many users browse without their window being maximized.<br />
<span id="more-207"></span></p>
<p>Common advice is that for the 1024 resolutions you have a maximum width of around <a rel="nofollow" href="http://www.cameronmoll.com/archives/001220.html">960</a> or 980px to work with.  <strong>But if you really need to get every last pixel in, I can confirm test results from Windows XP running at 1024&#215;768, with Internet Explorer 6.0 fully maximized, gives you a width of 1007px to work with.</strong></p>
<p>* Of course, fluid layouts are also nice.</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/largest-website-width-to-support-1024x768-resolution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ExpressionEngine: “Freo Add-on Installer” makes installing add-ons a breeze</title>
		<link>http://philfreo.com/blog/freo-addon-installer/</link>
		<comments>http://philfreo.com/blog/freo-addon-installer/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 06:00:39 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=143</guid>
		<description><![CDATA[I wrote my first module for ExpressionEngine, called &#8220;Freo Add-on Installer&#8221;, with the aim of saving EE developers a lot of time.  Here&#8217;s what it&#8217;s all about.

[Jump to Download/Installation Link]
Each time you set up a website with ExpressionEngine you probably want to install several different modules, extensions, and plugins.  Doing that usually involves downloading [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote my first module for ExpressionEngine, called &#8220;Freo Add-on Installer&#8221;, with the aim of <strong>saving EE developers a lot of time</strong>.  Here&#8217;s what it&#8217;s all about.</p>
<p><span id="more-143"></span></p>
<p>[<a href="#installation">Jump to Download/Installation Link</a>]</p>
<p>Each time you set up a website with ExpressionEngine you probably want to install several different modules, extensions, and plugins.  Doing that usually involves downloading a .zip file for each add-on, then individually unzipping and uploading each file/folder to the corresponding <span style="background-color: #dedede; font-size: 0.9em;">modules/</span>, <span style="background-color: #dedede; font-size: 0.9em;">extensions/</span>, <span style="background-color: #dedede; font-size: 0.9em;">plugins/</span>, <span style="background-color: #dedede; font-size: 0.9em;">language/</span>, and <span style="background-color: #dedede; font-size: 0.9em;">themes/</span> folders.<em> Then each time any add-on is updated, you have to repeat the process across all your websites.</em></p>
<p><strong>With my module,</strong> <strong>installing other add-ons is basically a one-click process</strong>.  You just visit the module page (shown below) and then either upload a .zip/.php file, or give it the URL to the source from the developer&#8217;s website.  Hit one button and my module takes the source file, extracts, and searches through the files and determines where each file/folder goes.</p>
<p>Screenshot:</p>
<p><img class="alignleft size-full wp-image-153" style="border: solid 1px #ccc;" title="Freo Add-on Installer for ExpressionEngine" src="http://philfreo.com/blog/wp-content/uploads/2009/10/screenshot1.png" alt="Freo Add-on Installer for ExpressionEngine" width="623" height="473" /></p>
<p>For example, if you just upload a .zip file that contains a folder for a module, a pi.someplugin.php, and a lang.someplugin.php, all of the files will get extracted and moved to their proper locations.  If it comes across a file it doesn&#8217;t understand, it will let you know.</p>
<p><strong>Requirements: </strong></p>
<ul>
<li>ExpressionEngine 1.6.8</li>
<li>PHP cannot be in Safe Mode</li>
<li>You may need to change permissions for a few folders if instructed</li>
</ul>
<p>These likely would only be a problem with some shared hosting companies. (If you need good <a href="/services/">ExpressionEngine hosting</a> let me know).</p>
<p><strong><a name="installation">Installation</a>:</strong></p>
<ol>
<li><strong>Download <a href="/blog/wp-content/uploads/2009/10/freo_addon_installer_1.2.zip">freo_addon_installer_1.2.zip</a></strong><strong> </strong>and unzip</li>
<li>Upload the <span style="background-color: #dedede; font-size: 0.9em;">freo_addon_installer/</span> folder to your <span style="background-color: #dedede; font-size: 0.9em;">system/modules/</span> folder</li>
<li>From the Modules page of your EE Control Panel, click &#8220;Install&#8221; next to &#8220;Freo Add-on Installer&#8221;</li>
<li>If you&#8217;re running a version of EE <strong>older</strong> than 1.6.8, copy <span style="background-color: #dedede; font-size: 0.9em;">freo_addon_installer/language/english/lang.freo_addon_installer.php</span> to <span style="background-color: #dedede; font-size: 0.9em;">system/languages/english/</span></li>
<li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=8685097">Please donate to support development</a> of this and future add-ons.</li>
</ol>
<p><strong>Changes:</strong></p>
<ul>
<li><strong>v1.2 &#8211; </strong>Bug fixes (Oct. 25, 2009)</li>
<li><strong>v1.1</strong> &#8211; Fixed problem when URLs redirect, like on github download zip URLs.  Added better support for installing fieldtypes for Brandon Kelly&#8217;s <a href="http://brandon-kelly.com/fieldframe">FieldFrame</a> extension.  (Oct. 7, 2009)</li>
<li><strong>v1.0</strong> &#8211; Initial Release. (Oct. 7, 2009)</li>
</ul>
<p><strong>Ideas &amp; Plans:</strong></p>
<ul>
<li>Create a long list of known add-ons to choose from so that installing will truly be one-click and not require looking up a source .zip URL.</li>
<li>Integrate with LG Addon Updater so installing updates will be more of a breeze.</li>
</ul>
<p><strong>Feedback &amp; Support:</strong></p>
<p><strong></strong>If you encounter any problems or have any ideas for improvement at all please let me know. <strong>Leave a comment below and let me know how you like it. </strong><a href="http://expressionengine.com/forums/viewthread/131282/">This support thread</a> in the forums is the best place to resolve any problems you may have.</p>
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=8685097">Please donate to support development</a> of this and future add-ons.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="hosted_button_id" type="hidden" value="8685097" />
<input style="border:none !important;" alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" type="image" /> <img src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" alt="" width="1" height="1" /><br />
</form>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/freo-addon-installer/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Book Review: &#8220;Magento: Beginner&#8217;s Guide&#8221;</title>
		<link>http://philfreo.com/blog/book-review-magento-beginners-guide/</link>
		<comments>http://philfreo.com/blog/book-review-magento-beginners-guide/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 05:59:05 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=137</guid>
		<description><![CDATA[I was given a copy of a book called &#8220;Magento: Beginner&#8217;s Guide&#8221; to review, so here goes.  Overall, the book does a good job of giving a high-level walkthrough of all the different aspects of running a store with Magento.

Chapter 1: Introduction
What you can do with Magento. A walk-through of a store using the features we will [...]]]></description>
			<content:encoded><![CDATA[<p>I was given a copy of a book called &#8220;Magento: Beginner&#8217;s Guide&#8221; to review, so here goes.  Overall, the book does a good job of giving a high-level walkthrough of all the different aspects of running a store with Magento.</p>
<p><span id="more-137"></span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 1: Introduction</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">What you can do with Magento. A walk-through of a store using the features we will cover.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 2: Installation</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">How to install Magento on a low-cost hosting service.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 3: Categories and attributes</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Creating categories and attributes, a necessary step before you can build your catalog of products.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 4: Taxes</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Configure tax rates and rules, to automatically apply the correct sales tax based upon the type of product and the purchaser&#8217;s location.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 5: Adding simple products</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Add products to your store. Include detailed descriptions, images, and inventory information.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 6: Minimum customization of your store&#8217;s appearance</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Customize the default storefront to make it your own.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 7: Beyond simple products</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Present related products to your shoppers. Offer products for sale in sets. Give your customers options such as size, color, manufacturer, and more.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 8: Customer relationships</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Managing customer accounts. Configuring store contact options.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 9: Accepting payment</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Configuring Magento&#8217;s default payment options, such as Paypal, credit cards, check/money order, and purchase orders.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 10: Configuring shipping</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Offer customers a variety of shipping options. Connect to shippers such as UPS, FedEx, and USPS. Create your own, customized shipping rates.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Chapter 11: Fulfilling an Order</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">A walk-through of fulfilling an order. Discover your options for handling order fulfillment by observing the lifecycle of an order in Magento.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Appendix: Abbreviated step-by-step directions</div>
<p><strong>Chapter 1: Introduction, Chapter 2: Installation, Chapter 3: Categories and attributes</strong><strong><span style="font-weight: normal;"> &#8211; High level overview of Magento.  These chapters aren&#8217;t very useful if you&#8217;ve already used Magento at all, however for someone starting from scratch this would be a faster way of learning than going through the guides on Magento&#8217;s website. Chapter 3 is available as a <a href="http://www.packtpub.com/files/magento-sample-chapter-3-categories-and-attributes.pdf">free sample</a>.</span></strong></p>
<p><strong></strong><strong>Chapter 4: Taxes</strong> &#8211; Very good chapter &#8211; I actually learned a lot.  It was very helpful as I am finishing up a Magento store right now and am about to configure taxes.  It discusses how tax rates and rules work in detail,  according to the product type and purchaser&#8217;s location.</p>
<p><strong>Chapter 5: Adding simple products </strong>- Same analysis as Chapters 1-3.</p>
<p><strong></strong><strong>Chapter 6: Minimum customization of your store&#8217;s appearance </strong>- Great for pointing beginners at where different files in Magento live and how to customize them.  However many of the tips for customizing the design will break if you try to update your site and default theme.  I&#8217;d recommend reading <a href="/blog/magento-ecommerce-first-thoughts-tips/">my post for Magento beginners</a> before you start customizing anything.</p>
<p><strong></strong><strong>Chapter 7: Beyond simple products</strong> &#8211; Helpful, although doesn&#8217;t provide much more information than is readily available on Magento.com.</p>
<p><strong>Chapter 8: Customer relationships</strong> &#8211; About managing customer accounts. Configuring store contact options.</p>
<p><strong>Chapter 9: Accepting payment, Chapter 10: Configuring shipping<span style="font-weight: normal;"><strong> &#8211; </strong>Pretty thorough job of explaining different methods of accepting payments with the various gateways, and configuring all the different shipping options.  There&#8217;s a lot of details and explanations, so I&#8217;ll be looking back on this chapter again.</span></strong></p>
<p><strong>Chapter 11: Fulfilling an Order</strong> - A walk-through of fulfilling an order. Discover your options for handling order fulfillment by observing the lifecycle of an order in Magento.</p>
<p><strong>Appendix: Abbreviated step-by-step directions</strong> &#8211; A good idea for any book!</p>
<p>To learn more or purchase: <a href="http://www.packtpub.com/magento-beginners-guide/book">&#8220;Magento: Beginner&#8217;s Guide&#8221; by William Rice</a></p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/book-review-magento-beginners-guide/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fixing Safari&#8217;s 1px background-image centering bug</title>
		<link>http://philfreo.com/blog/fixing-safaris-1px-background-image-centering-problem/</link>
		<comments>http://philfreo.com/blog/fixing-safaris-1px-background-image-centering-problem/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 04:58:31 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=110</guid>
		<description><![CDATA[I&#8217;m working on slicing and CSS for a new theming project for Magento Commerce and was plagued with a CSS bug that affects WebKit (Safari and Google Chrome).  After some searching I found that several other people have had the problem, but I didn&#8217;t see a comprehensive writeup of the solution.  Here&#8217;s what I found&#8230;

Bug [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on slicing and CSS for a new theming project for Magento Commerce and was plagued with a CSS bug that affects WebKit (Safari and Google Chrome).  After some searching I found that several other people have had the problem, but I didn&#8217;t see a comprehensive writeup of the solution.  Here&#8217;s what I found&#8230;</p>
<p><span id="more-110"></span></p>
<p><strong>Bug description: </strong>When having a centered background image over a centered <code>&lt;div&gt;</code> (like a drop shadow over a main content <code>&lt;div&gt;</code>), the background image&#8217;s position would sometimes be &#8220;off&#8221; by 1px as the viewport in Safari, depending on the width of the viewport.  So half of possible viewport widths would show the incorrect version.  While 1px isn&#8217;t the end of the world, it can really hurt a design, and it&#8217;s nice to get center alignment in Safari/Chrome to work like Firefox/IE.</p>
<p>Example code:</p>
<pre>body {
    background: #f8f8f8 url(../images/dh_bg.jpg) 50% 0 repeat-y;
}
div#everything {
    width: 980px;
    margin: 0 auto;
}</pre>
<p><strong>Partial Solution: </strong>First of all, always use an even-width background image &#8211; this way the rest of the browsers will get it right automatically.</p>
<p>To fix Safari we can apply a CSS hack targeted towards WebKit.  If your background image&#8217;s width is just a little wider than your main <code>&lt;div&gt;</code>, then this will fix it:</p>
<pre>@media screen and (-webkit-min-device-pixel-ratio:0) {
    body {
        background-position: 49.999% 0;
    }
}</pre>
<p>The problem with this is that if the viewport is resized to be a little larger than your div, but not as large as your background image, then the 1px problem comes back.</p>
<p><strong>Real Solution:</strong><br />
So my solution is always use an even-width background image that is wider than the devices you want to support.  I made mine 5000px wide (which is still &lt; 1kb).  Then, the following CSS works great:</p>
<pre>@media screen and (-webkit-min-device-pixel-ratio:0) {
    body {
        background-position: 50.001% 0;
    }
}</pre>
<p>Hope that helps somebody.</p>
<p><em>Thanks to the helpful comments on <a href="http://robgoodlatte.com/2007/02/16/hacking-safari-rounding-bugs/comment-page-1/">Rob Goodlatte&#8217;s post</a> (a JavaScript solution), which helped point me in the right direction.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/fixing-safaris-1px-background-image-centering-problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Notes from Google I/O Keynote 2009, day 1</title>
		<link>http://philfreo.com/blog/notes-from-google-io-keynote-2009-day-1/</link>
		<comments>http://philfreo.com/blog/notes-from-google-io-keynote-2009-day-1/#comments</comments>
		<pubDate>Thu, 28 May 2009 14:51:19 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[California]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[io2009]]></category>

		<guid isPermaLink="false">http://philfreo.com/blog/?p=81</guid>
		<description><![CDATA[Google I/O Keynote 
Wednesday 5/27/2009
San Francisco, CA #io2009

Better liveblogging here: http://www.techcrunch.com/2009/05/27/live-from-google-io-2009/
100x improvement in JavaScript speed in the last decade
Firefox, Chrome, Safari, &#38; Opera &#8211; all supporting HTML5 with Canvas, Video, Geolocation, App cache / database, Web workers

Canvas tag &#8211; supported in all but IE
Bespin &#8211; web IDE
Chrome profiler is built completely in HTML5
O3D &#8211; OpenSource [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Google I/O Keynote </strong></p>
<p><em>Wednesday 5/27/2009</em></p>
<p>San Francisco, CA #io2009</p>
<p><span id="more-81"></span></p>
<p>Better liveblogging here: <a href="http://www.techcrunch.com/2009/05/27/live-from-google-io-2009/">http://www.techcrunch.com/2009/05/27/live-from-google-io-2009/</a></p>
<p>100x improvement in JavaScript speed in the last decade</p>
<p>Firefox, Chrome, Safari, &amp; Opera &#8211; all supporting HTML5 with Canvas, Video, Geolocation, App cache / database, Web workers</p>
<p><strong></strong></p>
<p><strong>Canvas</strong> tag &#8211; supported in all but IE</p>
<p>Bespin &#8211; web IDE</p>
<p>Chrome profiler is built completely in HTML5</p>
<p>O3D &#8211; OpenSource 3d in JavaScript</p>
<p><strong>Video</strong> tag &#8211; get video out of &#8220;plugin prison&#8221;</p>
<p>YouTube demo with &lt;video&gt; tag</p>
<p><strong>Geolocation</strong> &#8211; supported in all browsers but IE</p>
<p>Mozillia VP &#8211; &#8220;A good API in 4 browsers is better than a perfect API in 0 or 1 browsers&#8221;</p>
<p>Google Maps will soon be adding a geolocation button</p>
<p>Announcement: Google Latitude on the iPhone in the browser using geolocation (WOW)</p>
<p><strong></strong></p>
<p><strong>App cache / database</strong> &#8211; supported in all browsers but IE</p>
<p>Demo: with Safari &#8211; manifest file names cached application/graphics files</p>
<p>Demo: web app on Android with GMail in airplane mode &#8211; extremely fast</p>
<p><strong></strong></p>
<p><strong>Web workers</strong> &#8211; threads in the browser &#8211; so JavaScript doesn&#8217;t completely freeze the browser</p>
<p>Demo: motion detection from the video tag all in JavaScript</p>
<p>===</p>
<p><strong>Google App Engine</strong></p>
<p>200,000+ developers, 80,000 + applications</p>
<p>Whitehouse app had 700 requests/second with no problem</p>
<p>Announcement: Java open on App Engine</p>
<p>Demo: develop an Ajax app in Eclipse (with Google plugin) in Java on both serverside (app engine) and client side (GWT) extremely quickly.  Just hit deploy (no FTP) in Eclipse.</p>
<p><strong>Google Web Toolkit</strong></p>
<p>Upcoming: Debug directly in any browser</p>
<p>Upcoming: runAsync() lets the compiler split up JavaScript files.  Example: 1.4MB to 200KB, compiler handled dependencies itself.</p>
<p>===</p>
<p><strong>Google Web Elements </strong>(announcement)</p>
<p>Copy and paste website content:</p>
<p>Calendar, Conversation, Custom Search, Maps, News, Presentations, etc.</p>
<p>===</p>
<p><strong>Android </strong>- coming soon new features</p>
<p>FREE ANDROID for everyone!</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/notes-from-google-io-keynote-2009-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On OSX, svn: This client is too old to work with working copy &#8216;.&#8217;; please get a newer Subversion client</title>
		<link>http://philfreo.com/blog/svn-this-client-is-too-old-to-work-with-working-copy-please-get-a-newer-subversion-client/</link>
		<comments>http://philfreo.com/blog/svn-this-client-is-too-old-to-work-with-working-copy-please-get-a-newer-subversion-client/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 17:08:16 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.philfreo.com/blog/?p=51</guid>
		<description><![CDATA[I got this message when trying to use Subversion on OS X through Terminal.
I checked out my svn version using &#8220;svn &#8211;version&#8221; and it said I was using 1.4.4 &#8211; so I decided to update.  Here&#8217;s how&#8230;

Download the latest SVN binaries for OS X and install them just like any other program:
http://svnbinaries.open.collab.net/
Update your system [...]]]></description>
			<content:encoded><![CDATA[<p>I got this message when trying to use Subversion on OS X through Terminal.</p>
<p>I checked out my svn version using &#8220;svn &#8211;version&#8221; and it said I was using 1.4.4 &#8211; so I decided to update.  Here&#8217;s how&#8230;<br />
<span id="more-51"></span></p>
<p>Download the latest SVN binaries for OS X and install them just like any other program:<br />
<a href="http://svnbinaries.open.collab.net/">http://svnbinaries.open.collab.net/</a></p>
<p>Update your system wide path settings by editing /etc/profile through the Terminal:</p>
<pre>$ cd /etc/
$ sudo vi profile</pre>
<p>At the top of the file, add the following line of text, then save and quit vi.</p>
<pre>export PATH=/opt/subversion:$PATH</pre>
<p>Then rename the old binary:</p>
<pre>$ cd /usr/bin
$ sudo mv svn svn.old
$ cd ~
$ svn --version</pre>
<p>And you should see the later version (mine is 1.5.5) and all is good.</p>
<p>Thanks to <a href="http://www.imarichardson.com/2008/10/06/osx-svn-woes-client-is-too-old-to-work-with-working-copy/">http://www.imarichardson.com/2008/10/06/osx-svn-woes-client-is-too-old-to-work-with-working-copy/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/svn-this-client-is-too-old-to-work-with-working-copy-please-get-a-newer-subversion-client/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Summer Internship Completed / Goodbye California</title>
		<link>http://philfreo.com/blog/google-summer-internship-completed-goodbye-california/</link>
		<comments>http://philfreo.com/blog/google-summer-internship-completed-goodbye-california/#comments</comments>
		<pubDate>Thu, 30 Aug 2007 19:11:41 +0000</pubDate>
		<dc:creator>Phil Freo</dc:creator>
				<category><![CDATA[California]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.philfreo.com/blog/?p=32</guid>
		<description><![CDATA[This summer I had the privilege to intern at Google and spent another summer in Silicon Valley &#8211; the hub of all things tech-related.  My internship lasted 10 weeks and, much like my Yahoo! internship last summer (I gave my reasons for not going back to Yahoo! this summer), I had an incredible experience.

I [...]]]></description>
			<content:encoded><![CDATA[<p>This summer I had the privilege to intern at Google and spent another summer in Silicon Valley &#8211; the hub of all things tech-related.  My internship lasted 10 weeks and, much like my Yahoo! internship last summer (I gave my <a href="http://www.philfreo.com/blog/?p=29">reasons for not going back to Yahoo! this summer</a>), I had an incredible experience.</p>
<p><span id="more-32"></span></p>
<p>I learned a lot at Google.  I did a combination of development for the front-end (JavaScript/AJAX, CSS/HTML) as well as on the back-end (PHP, Java).  Every line of code that I wrote was code reviewed by another Googler before it could be checked in.  At first I thought this was an unnecessary and time-wasting procedure, but I came to understand the importance of this, even for the seemingly unimportant pieces of code.  When you know someone else is going to be looking at your code, it forces you to program more clearly and concisely, and I learned better coding techniques from the code reviews.  Also, by ensuring that all code at Google conforms to the same style guides, any engineer can quickly jump into someone else&#8217;s code with the smallest possible learning curve.</p>
<p>My software engineering internship was pretty unique and flexible because of the team that I was on, so I also had the opportunity to do a good bit of UI (user interface) work.  I designed from scratch, improved existing UIs, and did research and make recommendations for better UIs.  My other team members (<a href="http://www.guidebookgallery.org/">here&#8217;s</a> <a title="Ted Dziuba" href="http://www.uncov.com/">two</a>) were very talented and I was able to learn a lot just by working along side them.  Working at a company like Google is great because you are constantly surrounded by very intelligent people.</p>
<p>It is a great feeling to know that you&#8217;re working at a company which is providing products and services that millions of people use every day.  It is an even better feeling to know that your work is directly being used and liked by real people.  At Google, while doing research for one of my projects, I had an idea that would help save other Googlers time and make them more productive.  Without getting into details about the project itself, after about 1,000 lines of JavaScript, I had created something that <em>a lot </em>of Googlers started using, talking about, and sharing with others.  It wasn&#8217;t a world changing application that is being launched externally any time soon, but it was useful enough that we could actually see it spreading virally throughout the company, and I got over 100 thank you emails within a few days.  I can only imagine the great feeling it would have been to create an external product (like GMail), that millions of people love and use daily.</p>
<p>Another great part of the summer was the opportunities for networking.  I was able to visit <a href="http://meebo.com">Meebo</a> for another great <a href="http://www.lunch20.com/">lunch2.0</a>, visited the offices of <a href="http://facebook.com/">Facebook</a> a couple times, met the creator of <a href="http://mint.com/">Mint</a> (which I think is my favorite web2.0 app of the year), attended <a href="http://wordcamp.org">WordCamp</a>, and attended the <a href="http://www.techcrunch.com/2007/07/28/techcrunch-9-at-august-capital-thank-you-for-coming/">Techcrunch Party 9</a> at August Capital.  It was also great seeing, meeting, and hanging out with a lot of other young people working in the web space &#8211; other Google interns, friends at Yahoo! and eBay, those doing startups, others working in the Bay Area, and friends who flew out to visit.<br />
Overall, I&#8217;d give the summer a thumbs up.  For now, I&#8217;m back in Gainesville studying Computer Engineering at UF, where the weather is significantly hotter.  A lot of people have asked me about next summer and what I want to do when I graduate.  I still do not know.  I could definitely see myself at a company like Google, but for now I am just looking forward to a new semester at school and am not making any definite plans yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://philfreo.com/blog/google-summer-internship-completed-goodbye-california/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
