Successfully reported this slideshow.
Your SlideShare is downloading. ×

The Original Hypertext Preprocessor

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 87 Ad

The Original Hypertext Preprocessor

Download to read offline

With all the technical considerations of designing and shipping PHP-based software, it's easy to forget how every line of code you write can have a direct impact on your customers. Almost any code has the potential to shape the user experience and result in repeat custom or an over-subscribed helpdesk. Allow Drew McLellan to take you through the lessons learned when building Perch - a PHP content management system that banks heavily on providing a great user experience. Hear what has worked, what failed miserably, and how a goal of eliminating all support requests has driven the technical design of the product.

With all the technical considerations of designing and shipping PHP-based software, it's easy to forget how every line of code you write can have a direct impact on your customers. Almost any code has the potential to shape the user experience and result in repeat custom or an over-subscribed helpdesk. Allow Drew McLellan to take you through the lessons learned when building Perch - a PHP content management system that banks heavily on providing a great user experience. Hear what has worked, what failed miserably, and how a goal of eliminating all support requests has driven the technical design of the product.

Advertisement
Advertisement

More Related Content

Advertisement
Advertisement

The Original Hypertext Preprocessor

  1. 1. -THE ORIGINAL- HYPERTEXT PREPROCESSOR Drew McLellan edgeofmyseat.com grabaperch.com PHP Community Conference 22nd April 2011
  2. 2. EVERY LINE OF CODE -CAN HAVE A- DIRECT IMPACT ON USERS
  3. 3. DESIGNING SOFTWARE - FOR - HUMANS
  4. 4. FUNCTIONALITY -IS NOT - ENOUGH
  5. 5. REWIND
  6. 6. DUDE! LIKE WHAT ABOUT DRUPAL?
  7. 7. “With Wordpress (don’t even get me started on Drupal), the learning curve was very high, requiring my clients to learn about posts versus pages versus custom post types.”
  8. 8. D O Z E N S O F OPTIONS MILLIONS OF USERS
  9. 9. THERE'S ROOM - IF YOU CAN BE - DIFFERENT
  10. 10. L I G H T W E I G H T PHP CMS FOR SMALL WEBSITES
  11. 11. LISTEN UP! CLASS IN SESSION
  12. 12. - THE MOST - DIFFICULT PROBLEMS - ARE THE - WET ONES
  13. 13. Support will kick your ass. Jason Fried, 37signals http://www.extractable.com/blog/?p=58
  14. 14. Helpspot really saved our ass when it came to support. Todd Dominey, SlideShowPro http://5by5.tv/bigwebshow/24
  15. 15. SUPPORT INVOLVES - A LOT OF - ASSES
  16. 16. MANY CUSTOMERS ARE INEXPERIENCED
  17. 17. THEY NEED A LOT OF SUPPORT
  18. 18. EACH LICENSE SOLD 30 MINUTES OF SUPPORT TIME
  19. 19. - FIND WAYS TO - REDUCE SUPPORT REQUESTS
  20. 20. EVERY REQUEST SHOULD BE UNIQUE
  21. 21. SUPPORT YOUR OWN S OFT W A R E
  22. 22. - WHEN - WILL THIS FAIL?
  23. 23. ALL CODE BREAKS. GREAT CODE BREAKS WELL
  24. 24. NOT ALL ATTEMPTS ARE SUCCESSFUL
  25. 25. SPEED OF RESPONSE IS THE MOST IMPORTANT T H I N G
  26. 26. TECHNICAL PROBLEMS - ARE - DIFFICULT TOO
  27. 27. PHP5 AS STANDARD
  28. 28. WE WOULD LOVE - TO M OVE T O - PHP5.3
  29. 29. THE FAILED PROMISE OF SQLITE
  30. 30. SCHEMALESS STRUCTURED DATA
  31. 31. !<perch:content !!!type=”text” !!!id=”heading” !!!label=”Main heading” !!!required=”true” />
  32. 32. <h2><perch:content id="heading" type="text" label="Heading" required="true" title="true" /></h2> <p class="date"><perch:content id="date" type="date" label="Date" format="%d %B %Y" /></p> <perch:content id="body" type="textarea" label="Body" textile="true" editor="markitup" required="true" />
  33. 33. TABLE OF KEY-VALUE PAIRS - OR - BIG BLOB OF JSON
  34. 34. TABLE OF KEY-VALUE PAIRS
  35. 35. SCALES UP WELL CAN BE FILTERED WITH SQL
  36. 36. - REQUIRES - HOUSEKEEPING INEFFICIENT FOR SMALL VALUES
  37. 37. BIG BLOB OF JSON
  38. 38. STORE ANY SHAPE DATA IN ONE ROW EXTREMELY SIMPLE
  39. 39. CONTENT HAS TO BE FILTERED IN PHP NATIVE JSON LIBRARIES ARE NOT YET UNIVERSAL
  40. 40. CREATE TABLE `perch_contentItems` ( `contentID` int(10) unsigned NOT NULL AUTO_INCREMENT, `contentKey` varchar(255) NOT NULL DEFAULT '', `contentPage` varchar(255) NOT NULL DEFAULT '*', `contentHTML` longtext NOT NULL, `contentNew` tinyint(1) unsigned NOT NULL DEFAULT '1', `contentTemplate` varchar(255) NOT NULL DEFAULT '', `contentMultiple` tinyint(1) unsigned NOT NULL DEFAULT '0', `contentAddToTop` tinyint(1) unsigned NOT NULL DEFAULT '0', `contentJSON` mediumtext NOT NULL, `contentHistory` mediumtext NOT NULL, `contentOptions` text NOT NULL, PRIMARY KEY (`contentID`), KEY `idx_key` (`contentKey`), KEY `idx_page` (`contentPage`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  41. 41. SO, UM, HOW'S THAT WORKING OUT FOR YOU?
  42. 42. NON-NATIVE JSON IS SLOW
  43. 43. QUERYING ACROSS TABLE COLUMNS - AND - JSON -VALUES IS A - TWO STEP PROCESS
  44. 44. SO WHAT IS GOOD ABOUT IT?
  45. 45. { ! “heading”: “Foo”, ! “date”: “2011-04-22 10:00:00” }
  46. 46. [ ! { ! ! “heading”: “Foo”, ! ! “date”: “2011-04-22 10:00:00” ! }, ! { ! ! “heading”: “Foo”, ! ! “date”: “2011-04-22 10:00:00” ! } ]
  47. 47. [ ! { ! ! “_rev”: 1300447544, ! ! “_content”: { ! ! ! “heading”: “Bar”, ! ! ! “date”: “2011-04-22 10:00:00” ! ! } ! }, ! { ! ! “_rev”: 1293968747, ! ! “_content”: { ! ! ! “heading”: “Foo”, ! ! ! “date”: “2011-04-22 10:00:00” ! ! } ! } ]
  48. 48. SIMPLE, EFFECTIVE HISTORY STACK
  49. 49. THEORISING IS EASY NOTHING BEATS EXPERIENCE
  50. 50. RUNNING PHP EVERYWHERE IS HARD
  51. 51. WE'RE USED TO CONTROLLED PLATFORMS
  52. 52. ALL BETS ARE OFF
  53. 53. - CHEAP - HOSTING IS CHEAP
  54. 54. WINDOWS IS WEIRD
  55. 55. MIGRATING BETWEEN FILESYSTEMS
  56. 56. - NEVER - MIX CASE IN MYSQL TABLE NAMES
  57. 57. - BE - OPINIONATED - BUT NOT - DICTATORIAL
  58. 58. WYSIWYG - IS - EVIL
  59. 59. But my clients must have an editor like Word!
  60. 60. IT'S NOT OUR PLACE TO TELL PEOPLE HOW TO WORK
  61. 61. EDIT IN PLACE - IS A - FALSE PROMISE
  62. 62. HELP CUSTOMERS SERVE THEIR CLIENTS
  63. 63. IDENTIFY YOUR CUSTOMERS' PROBLEMS
  64. 64. CONFIDENCE - IS - EVERYTHING
  65. 65. EVERY FIELD - CAN BE - ANNOTATED
  66. 66. help=”Use the teacher’s initials from the timetable.”
  67. 67. <perch:help> !<p>Confused? Watch !!!this video:</p> !<video>...</video> </perch:help>
  68. 68. DRAFTS PREVIEW UNDO
  69. 69. - BE A - MAGICIAN NOT JUST A DEVELOPER
  70. 70. FUNCTIONALITY -IS NOT - ENOUGH
  71. 71. LEARN TO ACCEPT WHEN USERS ARE HAVING TROUBLE
  72. 72. REALLY GREAT DEVELOPERS SOLVE PROBLEMS
  73. 73. YOU CAN'T WIN EVERY USER
  74. 74. I love the little cms but the one thing I was expecting to get is a license for multiple domain,... if you guys can help with that you will earn a big customer,.. and as of right now I already found 2 more cms just like yours at a lower price but what they take a away is in the interface design,.. (which I could careless about it) but you guys still my number 1 option but if you guys can give me a break on that little part for licensing multiple domains that will be very much appreciated,..
  75. 75. - NOT - EVERYONE WILL GET IT
  76. 76. THANK YOU! Perch is at grabaperch.com Slides: http://lanyrd.com/2011/phpcomcon On most things, I’ am @drewm
  77. 77. QUESTIONS?

×