<?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/"
	>

<channel>
	<title>Eric Kittell</title>
	<atom:link href="http://ekittell.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ekittell.com</link>
	<description>professional web development</description>
	<pubDate>Wed, 10 Mar 2010 19:54:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Custom Web Application for Events Management and more&#8230;</title>
		<link>http://ekittell.com/2009/10/custom-web-application-for-events-management-and-more/</link>
		<comments>http://ekittell.com/2009/10/custom-web-application-for-events-management-and-more/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:42:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://ekittell.com/?p=31</guid>
		<description><![CDATA[Today I&#8217;d like to describe a complex web application that I built from scratch over a year ago and continue to update on a regular  basis.  It was created for a live music company here in New York City that provides bands for weddings and other events.  They are in high demand and have dates [...]]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;d like to describe a complex web application that I built from scratch over a year ago and continue to update on a regular  basis.  It was created for a live music company here in New York City that provides bands for weddings and other events.  They are in high demand and have dates scheduled years in to the future.</p>
<p><span id="more-31"></span></p>
<p>They approached me about creating a database driven custom web application that their personnel could access online, any time, from any computer.  For each event/contract they wanted to have an easy way to store basic information like:</p>
<ul>
<li>event location details</li>
<li>event segment schedule and fees (as in cocktails, reception, after party, etc&#8230;)</li>
<li>bands and musicians for each segment</li>
<li>requests and special music</li>
<li>crew information</li>
<li>client contact information</li>
<li>contract information like dates, reference, status, terms, etc&#8230;</li>
<li>payment amounts, schedule and status</li>
</ul>
<p><div id="attachment_35" class="wp-caption aligncenter" style="width: 310px"><a href="http://ekittell.com/wp-content/uploads/2009/10/upcoming_events1.gif"><img class="size-medium wp-image-35 " title="Events List" src="http://ekittell.com/wp-content/uploads/2009/10/upcoming_events1-300x208.gif" alt="click for larger view" width="300" height="208" /></a><p class="wp-caption-text">click for full size view</p></div></p>
<p>The system is based around the color coded list of upcoming events (above). This only shows a tiny slice of the information that is collected for each event.  Here they can access printable summary sheets presenting condensed event info for specific roles like musician and band leader, a printable contract, view and edit links and links to other event specific operations like budget and the dynamic &#8220;contracting&#8221; page.  At the top we also have an event search and menu for other system features that are vital to the business.</p>
<p><div id="attachment_40" class="wp-caption aligncenter" style="width: 310px"><a href="http://ekittell.com/wp-content/uploads/2009/10/contracting_page.gif"><img class="size-medium wp-image-40" title="Contracting Page" src="http://ekittell.com/wp-content/uploads/2009/10/contracting_page-300x138.gif" alt="click for full size view" width="300" height="138" /></a><p class="wp-caption-text">click for full size view</p></div></p>
<p>A lot of time is spent on the contracting page for each event (above).  Here they select the instruments and musicians required for each event segment.  This page uses a lot of JavaScript to dynamically calculate musician fees and expenses based on which segments of the event they are working.  These numbers are hidden from users who do not have the required privileges to view sensitive financial information.</p>
<p>The financial data generated on the contracting page is saved and displayed on a number of different payroll reports.  There are other reports for payments, expenses, contracts, musicians and anything else the client needs in order to access important information in a useful format.</p>
<p>The system also includes management for contacts, musicians, rehearsals, plus user login and a multi level access permission structure.</p>
<p>As the client uses the system they identify areas that seem too tedious and time consuming and we work together to devise changes to help streamline their work flow.  A lot of AJAX and Javascript are used to make the user interface as friendly and efficient as possible.  The whole application is based on the <a href="http://www.symfony-project.org/">Symfony</a> framework to ensure that the code is organized and extend-able and that the system is solid and secure.</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2009/10/custom-web-application-for-events-management-and-more/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Integrating Symfony, WordPress and BbPress</title>
		<link>http://ekittell.com/2008/05/integrating-symfony-wordpress-and-bbpress/</link>
		<comments>http://ekittell.com/2008/05/integrating-symfony-wordpress-and-bbpress/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:22:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://ekittell.com/?p=11</guid>
		<description><![CDATA[I&#8217;ve just completed a project for the NYU Tisch School of Acting Graduate program Alumni Association or GAAA: http://gradactingalumni.org.  I built a custom social networking application using the Symfony framework.  I also created a plugin for Wordpress that makes it user authentication system rely on the Symfony user login control.
With that in place [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just completed a project for the NYU Tisch School of Acting Graduate program Alumni Association or GAAA: http://gradactingalumni.org.  I built a custom social networking application using the Symfony framework.  I also created a plugin for Wordpress that makes it user authentication system rely on the Symfony user login control.</p>
<p><span id="more-11"></span>With that in place it was relatively easy to get BbPress to integrate with WordPress since they are developed by the same group.  There were a number of challenges getting all 3 application to work together and be able to access each others functions when necessary.  I was also able to get the whole site layout to run off of Wordpress&#8217;s template system.</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2008/05/integrating-symfony-wordpress-and-bbpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ecommerce with SquirrelCart, Orbital, and Order Motion</title>
		<link>http://ekittell.com/2008/03/ecommerce-with-squirrelcart-orbital-and-order-motion/</link>
		<comments>http://ekittell.com/2008/03/ecommerce-with-squirrelcart-orbital-and-order-motion/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 01:46:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://ekittell.com/?p=8</guid>
		<description><![CDATA[I have just completed a project that involved the integration of the 3.

SquirrelCart is a php/mysql shopping cart application, with control panel, heavy use of session variables, a lot of functions, templates, etc&#8230;  pretty standard.  There is almost no documentation for the code and the company does not provide any support for hacking [...]]]></description>
			<content:encoded><![CDATA[<p>I have just completed a project that involved the integration of the 3.</p>
<p><span id="more-8"></span></p>
<p><a href="http://www.squirrelcart.com/">SquirrelCart</a> is a php/mysql shopping cart application, with control panel, heavy use of session variables, a lot of functions, templates, etc&#8230;  pretty standard.  There is almost no documentation for the code and the company does not provide any support for hacking it.  I know it pretty well now though there are still occasional surprise.</p>
<p><a href="http://www.chasepaymentech.com/solgat.do">Orbital</a> is a payment gateway also known as Chase Paymentech.  Their tech support was helpful but it was very difficult to get a test account from them for testing responses from their API.  They normally don&#8217;t give them out to customers that are using certified shopping carts like SquirrelCart.</p>
<p>We needed to test Orbital&#8217;s responses with <a href="http://www.ordermotion.com/">Order Motion</a>(OM).  Oribital is only authorizing the transaction and then OM completes it and controls inventory and has all kinds of fancy features. Their API is very thoroughly documented but they don&#8217;t have any quick start guides, and nothing about PHP.  They run asp and both the <a href="http://help.ordermotion.com">help</a> and control panel can only be viewed in Internet Explorer!</p>
<p>They did reluctantly provide some sample PHP code for the cURL request.  We found that the OrderID element of the order request was required in order to match the order with the Orbital authorization.  Also the authorization code from Orbital was 40 characters long and OM would only accept 30 max so they had to fix that at OM to accept more.</p>
<p>We also use Order Motion to retrieve inventory and past order information for the cart.</p>
<p>If you have questions or need help with any of these 3 solutions let me know.</p>
<p>EK</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2008/03/ecommerce-with-squirrelcart-orbital-and-order-motion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Do The Right Thing!</title>
		<link>http://ekittell.com/2008/03/do-the-right-thing/</link>
		<comments>http://ekittell.com/2008/03/do-the-right-thing/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 01:04:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://ekittell.com/?p=7</guid>
		<description><![CDATA[When somebody hires a graphic designer they expect to get their money&#8217;s worth.  Sometimes this translates into a desire to create something unique and out of the ordinary.  After all web design should be creative, right?

The fact is that the majority of websites employ very similar approaches for achieving the same goals.  [...]]]></description>
			<content:encoded><![CDATA[<p>When somebody hires a graphic designer they expect to get their money&#8217;s worth.  Sometimes this translates into a desire to create something unique and out of the ordinary.  After all web design should be creative, right?</p>
<p><span id="more-7"></span></p>
<p>The fact is that the majority of websites employ very similar approaches for achieving the same goals.  Years of experience have taught designers and developers that for some things there really is a best way to do them or a few standard options that cover most cases.</p>
<p>Unexperienced developers who are trying to break into the business will often try to please the few clients they can get by trying to follow their instructions to the letter without suggesting better approaches when appropriate.  They are particularly reluctant to flat out tell the client that doing things the way they want is just not possible, not because it&#8217;s not theoretically possible, but because it would cause problems down the road.</p>
<p>Sites developed with this approach can turn out to be hard to navigate, inconvenient for the user or just plain ugly.</p>
<p>Often clients will request Flash intro&#8217;s or landing pages.  If you&#8217;re creating a book or magazine then you need a cover and table of contents and a web site is similar right?  Yes, but it&#8217;s not exactly the same, and you should take users directly to relevant content instead of making them wade through preliminaries.  If you pick up a magazine you don&#8217;t have to first turn to the table of contents before going to an article. You can always flip to content right away.  It&#8217;s not a perfect analogy but I think that it is sometimes helpful to think about these parallels.</p>
<p>Recently I had an experience where a client insisted on having the customers to their online store enter their credit card information in an early stage of the checkout process even though almost all online stores leave this step for last.  When the customer finalizes their order their credit card information is submitted to the payment gateway for authorization and it could come back declined.  The client didn&#8217;t like the fact that the customer would have to go back so many steps to revise their credit card information but this situation could have been avoided if they had not insisted in doing things differently.</p>
<p>Now there may be ways to do things that nobody has thought of yet that are better than current industry standard best practices.  If you come across one then of course you&#8217;ll want to be the first to use it.  Just make sure you aren&#8217;t fooling yourself, check out what everybody else is doing first before you decide that your new way is better.</p>
<p>Some sites present special cases and may require doing things differently also, just make sure an unusual approach is truly warranted before proceeding.  You are doing your client a favor if you can dissuade them from setting up something out of the ordinary that will cost them more money down the road when they realize they need to pay some one to redo it with a more standard approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2008/03/do-the-right-thing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP Projects&#8230;</title>
		<link>http://ekittell.com/2008/03/php-projects-from-hell/</link>
		<comments>http://ekittell.com/2008/03/php-projects-from-hell/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 02:19:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://ekittell.com/?p=6</guid>
		<description><![CDATA[Taken from PHP 5 Object, Patterns, and Practice by Matt Zandstra (Apress).
While there is a little technical jargon here I think that anybody who is at all involved with the development, or expansion of a web application needs to read this. I know exactly the kind of situation he is talking about&#8230;
&#8220;The problem is that [...]]]></description>
			<content:encoded><![CDATA[<p>Taken from <a href="http://www.apress.com/book/view/9781590593806">PHP 5 Object, Patterns, and Practice by Matt Zandstra (Apress).</a></p>
<p>While there is a little technical jargon here I think that anybody who is at all involved with the development, or expansion of a web application needs to read this. I know exactly the kind of situation he is talking about&#8230;</p>
<blockquote><p>&#8220;The problem is that PHP is just too easy.  It tempts you to try out your ideas, and flatters you with good results.  You write much of your code straight into your Web pages, because PHP is designed to support that.  You add the heavier code to functions in library files, and before you know it you have a working Web application.</p>
<p><span id="more-6"></span></p>
<p>You are well on the road to ruin.  You don&#8217;t realize this, of course,  because your site looks fantastic.  It performs well, your clients are happy, and your users are spending money.</p>
<p>Trouble strikes when you go back to code to begin a new phase.  Now you have a larger team, some more users, a bigger budget.  Yet without warning things begin to go wrong.  It&#8217;s as if your project has been poisoned.</p>
<p>Your new programmer is struggling to understand code that is second nature to you, though perhaps a little byzantine in its twists and turns.  She taking longer than you expected to reach full strength as a team member.</p>
<p>A simple change estimated at a day, takes three days when you discover that you must update 20 or more Web pages as a result.</p>
<p>On of your coders saves his version of a file over major change you made to the same code some time earlier.  The loss is not discovered for three days, by which time you have amended your own local copy.  It takes a day to sort out the mess, holding up a third developer who was also working on the file.</p>
<p>Because of the popularity of the application, you need to shift the code to a new server.  The project needs to be installed by hand, and you discover that file paths, database names, and passwords are hard coded into many source files.  You halt work during the move because you don&#8217;t want to overwrite the configuration changes the migration entails.  The estimated two hours becomes eight as it is revealed that someone did something clever involving the Apache module ModRewrite, and the application now requires this to operate poperly.</p>
<p>You finally launch phase 2, and all is well.  All is well for a day and a half.  This first bug report comes in as you are bout to leave the office.  The client phones minutes later to complain.  Her report is similar to the first, but a little more scrutiny reveals that is is a different bug causing similar behavior.  You remember the simple change at the start of the phase that necessitated extensive modifications throughout the rest of the project.</p>
<p>You realize that not all the required modifications are in place.  This is either because they were omitted to start with, or because the files in question were overwritten in merge collisions.  You hurriedly make the modifications needed to fix the bugs.  You&#8217;re in too much of a hurry to test the changes, but they are a simple matter of copy and paste, so what can go wrong?</p>
<p>The next morning you arrive at the office to find that a shopping basket module has down all night.  The last minute changes you made omitted a leading quotation mark, rendering the code unusable.  You fix the problem, mollify the client, and gather the team for another day&#8217;s firefighting.</p>
<p>This everyday tale of coding folk may seem a little over the top, but I have see all these things happen over and over again.  Many PHP projects start their live small and evolve into monsters.</p>
<p>Because the presentation layer-the PHP pages containing HTML-also contains application logic, duplication creeps in early as database queries , authentication checks, form processing, and more are copied from page to page.  Every time a change is required to one of these blocks of code, it must be made everywhere the code is found, or bugs will surely follow.</p>
<p>Lack of documentation makes the code hard to read, and lack of testing allows obscure bugs to to undiscovered until deployment.  The changing nature of a client&#8217;s business often means that code evolves away from it original purpose until it is performing tasks to which it fundamentally unsuited.  Because such code has often evolved as a seething intermingled lump, it is hard, if not impossible, to switch out and rewrite parts of it to suit the new purpose&#8221;</p></blockquote>
<p>There is good news though, it&#8217;s actually relatively easy to build an application using a solid framework and avoid these kinds of problems.  It&#8217;s definitely much easier than dealing with  nightmarish scenarios.   It does take some extra effort at first, and good planning, but the result is all around satisfaction with nobody feeling that time or money has been wasted.</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2008/03/php-projects-from-hell/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Image Galleries - The Front End</title>
		<link>http://ekittell.com/2008/03/image-galeries-front-end/</link>
		<comments>http://ekittell.com/2008/03/image-galeries-front-end/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 20:56:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://dev.ekittell.com/?p=5</guid>
		<description><![CDATA[I am often asked to create a &#8220;basic&#8221; or &#8220;simple&#8221; image gallery that the site owner can update themselves.  There are a number of front end options to consider when creating this kind of gallery.

Many galleries have a page of thumbnails that you click to get a popup with the full size image.  [...]]]></description>
			<content:encoded><![CDATA[<p>I am often asked to create a &#8220;basic&#8221; or &#8220;simple&#8221; image gallery that the site owner can update themselves.  There are a number of front end options to consider when creating this kind of gallery.</p>
<p><span id="more-5"></span></p>
<p>Many galleries have a page of thumbnails that you click to get a popup with the full size image.  These are not very user friendly unless there are previous and back links in the popup.  I think it&#8217;s even better to have the full size image replace the thumbnails in the main window in order to avoid opening extra browser windows.</p>
<p>With small galleries the thumbnails and large version could occupy the same window.  In that case you could just rollover the thumbnails to see the large image (like we did on the <a href="http://www.loveandorgasms.com/">L&amp;O</a> and <a href="http://http://www.kateredkanines.com/">Katered Kanines</a> projects), though this will make the whole page load more slowly since you need to preload all the images so that the rollovers respond quickly.  With these projects the large images aren&#8217;t very large so it&#8217;s not really a problem.</p>
<p>If you&#8217;re going to use next and back links it really helps if the next link always appears in the same spot so the user can keep clicking without moving the cursor and page through all the photos very quickly.  Another thing I saw recently that was really sweet and simple is setup so the user can just click on the photo itself in order to see the next one.</p>
<p>There are some fancy galleries that include an automatic slideshow feature with pause and play buttons.  I personally don&#8217;t like these.  I&#8217;d rather just click through each image.  The internet is all about interaction, not just sitting back and watching and there are some photos you want study for a few minutes and some you want to click right past.  These kinds of galleries also usually have fade in and out effects which I can incorporate into any kind of gallery, not just a slideshow, if the client feels they really need that extra slickness.  The fade in and out are not too distracting in my opinion and are appropriate for certain kinds of sites.</p>
<p>An automatic slideshow can have it&#8217;s place also, but the only place I really see these working is on a home or portal page, where there is other content for the user to browse while one section has a slideshow of current articles, or advertisers, to catch the users eye.</p>
]]></content:encoded>
			<wfw:commentRss>http://ekittell.com/2008/03/image-galeries-front-end/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
