Slide 1

Slide 1 text

PHP Community Conference April 2011 Drew McLellan edgeofmyseat.com grabaperch.com -THE ORIGINAL- HYPERTEXT PREPROCESSOR

Slide 2

Slide 2 text

EVERY LINE OF CODE -CAN HAVE A- DIRECT IMPACT ON CUSTOMERS

Slide 3

Slide 3 text

DESIGNING SOFTWARE FOR HUMANS

Slide 4

Slide 4 text

FUNCTIONALITY IS NOT ENOUGH

Slide 5

Slide 5 text

REWIND

Slide 6

Slide 6 text

DUDE, LIKE WHAT ABOUT DRUPAL?

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

LOTS OF OPTIONS BUT LOTS OF USERS

Slide 9

Slide 9 text

THERE'S ROOM IF YOU CAN BE DIFFERENT

Slide 10

Slide 10 text

YOU DON'T NEED TO CAPTURE THE WHOLE MARKET

Slide 11

Slide 11 text

LIGHTWEIGHT PHP CMS FOR SMALL WEBSITES

Slide 12

Slide 12 text

9 LESSONS & CAROLS

Slide 13

Slide 13 text

LESSON: THE MOST DIFFICULT PROBLEMS ARE WET ONES

Slide 14

Slide 14 text

Support will kick your ass Jason Fried, 37signals http://www.extractable.com/blog/?p=58

Slide 15

Slide 15 text

Helpspot (help desk software) really saved our ass when it came to support Todd Dominey, SlideShowPro http://5by5.tv/bigwebshow/24

Slide 16

Slide 16 text

SUPPORT INVOLVES A LOT OF ASSES

Slide 17

Slide 17 text

MANY CUSTOMERS ARE INEXPERIENCED

Slide 18

Slide 18 text

THEY NEED A LOT OF SUPPORT

Slide 19

Slide 19 text

EACH LICENSE SOLD = 15 MINUTES OF SUPPORT TIME

Slide 20

Slide 20 text

SUPPORT YOUR OWN SOFTWARE

Slide 21

Slide 21 text

FIND WAYS TO REDUCE SUPPORT

Slide 22

Slide 22 text

EVERY REQUEST SHOULD BE UNIQUE

Slide 23

Slide 23 text

WHEN WILL THIS FAIL?

Slide 24

Slide 24 text

Take pleasure in designing out the weaknesses

Slide 25

Slide 25 text

MAKE ARCHITECTURAL DECISIONS TO MINIMISE COMPLEXITY

Slide 26

Slide 26 text

THERE IS NO ADD NEW

Slide 27

Slide 27 text

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

KEEP THE BASIC USE-CASE SIMPLE

Slide 30

Slide 30 text

All code breaks. Great code breaks well.

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

NOT ALL ATTEMPTS ARE SUCCESSFUL

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

SPEED OF RESPONSE IS THE MOST IMPORTANT THING

Slide 38

Slide 38 text

NOT ALL SUPPORT REQUESTS ARE YOUR FAULT...

Slide 39

Slide 39 text

LESSON: RUNNING PHP EVERYWHERE IS HARD

Slide 40

Slide 40 text

WE'RE USED TO CONTROLLED PLATFORMS

Slide 41

Slide 41 text

WE'RE USED TO CONTROLLED PLATFORMS

Slide 42

Slide 42 text

ALL BETS ARE OFF.

Slide 43

Slide 43 text

CHEAP HOSTING IS CHEAP

Slide 44

Slide 44 text

WINDOWS IS WEIRD

Slide 45

Slide 45 text

SERVER VARIABLES CAN NEVER BE RELIED ON

Slide 46

Slide 46 text

PERMISSIONS ARE AN UTTER MYSTERY

Slide 47

Slide 47 text

PATHS ARE BACKSLASHTASTIC

Slide 48

Slide 48 text

MIGRATING BETWEEN FILESYSTEMS

Slide 49

Slide 49 text

NEVER MIX CASE IN MYSQL TABLE NAMES

Slide 50

Slide 50 text

LESSON: TECHNICAL PROBLEMS ARE DIFFICULT TOO

Slide 51

Slide 51 text

PHP5 AS STANDARD

Slide 52

Slide 52 text

WE WOULD LOVE TO MOVE TO PHP5.3

Slide 53

Slide 53 text

THE FAILED PROMISE OF SQLITE

Slide 54

Slide 54 text

MARKUP IN FILES CONTENT IN THE DATABASE

Slide 55

Slide 55 text

SCHEMALESS STRUCTURED DATA

Slide 56

Slide 56 text

!

Slide 57

Slide 57 text

Slide 58

Slide 58 text

1. TABLE OF KEY/ VALUE PAIRS 2. BIG BLOB OF JSON

Slide 59

Slide 59 text

1. TABLE OF KEY/ VALUE PAIRS

Slide 60

Slide 60 text

SCALES UP WELL CAN BE FILTERED WITH SQL

Slide 61

Slide 61 text

REQUIRES HOUSEKEEPING INEFFICIENT FOR SMALL VALUES

Slide 62

Slide 62 text

2. BIG BLOB OF JSON

Slide 63

Slide 63 text

STORE ANY SHAPE IN ONE ROW EXTREMELY SIMPLE

Slide 64

Slide 64 text

CONTENT HAS TO BE FILTERED IN PHP NATIVE JSON LIBRARIES ARE NOT UNIVERSAL

Slide 65

Slide 65 text

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;

Slide 66

Slide 66 text

SO HOWS THAT WORKING OUT FOR YOU, BIG GUY?

Slide 67

Slide 67 text

NON-NATIVE JSON IS SLOW

Slide 68

Slide 68 text

QUERYING ACROSS TABLE COLUMNS AND JSON VALUES IS A TWO STEP PROCESS.

Slide 69

Slide 69 text

SO WHAT IS GOOD ABOUT IT?

Slide 70

Slide 70 text

{ ! “heading”: “Foo”, ! “date”: “2011-04-22 10:00:00” }

Slide 71

Slide 71 text

[ ! { ! ! “heading”: “Foo”, ! ! “date”: “2011-04-22 10:00:00” ! }, ! { ! ! “heading”: “Foo”, ! ! “date”: “2011-04-22 10:00:00” ! } ]

Slide 72

Slide 72 text

[ ! { ! ! “_rev”: 1300447544, ! ! “_content”: { ! ! ! “heading”: “Bar”, ! ! ! “date”: “2011-04-22 10:00:00” ! ! } ! }, ! { ! ! “_rev”: 1293968747, ! ! “_content”: { ! ! ! “heading”: “Foo”, ! ! ! “date”: “2011-04-22 10:00:00” ! ! } ! } ]

Slide 73

Slide 73 text

SIMPLE, EFFECTIVE HISTORY STACK

Slide 74

Slide 74 text

THEORISING IS EASY. NOTHING BEATS EXPERIENCE.

Slide 75

Slide 75 text

LESSON: BE OPINIONATED, BUT NOT DICTATORIAL

Slide 76

Slide 76 text

WYSIWYG IS EVIL

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

BUT MY CLIENTS MUST HAVE AN EDITOR LIKE WORD

Slide 79

Slide 79 text

IT'S NOT OUR PLACE TO TELL PEOPLE HOW TO WORK

Slide 80

Slide 80 text

No content

Slide 81

Slide 81 text

EDIT IN PLACE IS A FALSE PROMISE

Slide 82

Slide 82 text

LESSON: HELP CUSTOMERS SERVE THEIR CLIENTS

Slide 83

Slide 83 text

IDENTIFY YOUR CUSTOMERS PROBLEMS

Slide 84

Slide 84 text

CONFIDENCE IS EVERYTHING

Slide 85

Slide 85 text

EVERY FIELD CAN BE ANNOTATED

Slide 86

Slide 86 text

help=”Use the teacher’s initials from the timetable.”

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

!

Confused? Watch !!!this video:

!...

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

DRAFTS PREVIEW UNDO

Slide 92

Slide 92 text

LESSON: FIND OTHERS TO COVER YOUR WEAKNESSES

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

No content

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

LESSON: BE A MAGICIAN, NOT JUST A DEVELOPER

Slide 100

Slide 100 text

FUNCTIONALITY IS NOT ENOUGH

Slide 101

Slide 101 text

LEARN TO ACCEPT WHEN USERS ARE HAVING TROUBLE

Slide 102

Slide 102 text

REALLY GREAT DEVELOPERS SOLVE PROBLEMS

Slide 103

Slide 103 text

DON'T FEAR REFACTORING

Slide 104

Slide 104 text

LESSON: YOU CAN'T WIN EVERY USER

Slide 105

Slide 105 text

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,..

Slide 106

Slide 106 text

NOT EVERYONE WILL GET IT.

Slide 107

Slide 107 text

THANK YOU! grabaperch.com @drewm