SlideShare a Scribd company logo
Don't Make Me Read
Your Mind
Aaron Kuzemchak
CICONF 2012 - San Francisco, CA
Goal
๏   To suggest best practices and tools to make your code
    easier and more enjoyable for future developers to
    understand.
About Me
Sr. Application Developer
at Visual Chefs
I'm from Richmond, VA
I have an awesome family
Former full-time
front-end developer
I ♥ PHP
I build...
๏   Websites with ExpressionEngine
๏   Web applications with CodeIgniter & Laravel
My info
๏   http://kuzemchak.net/
๏   https://github.com/akuzemchak
๏   @akuzemchak
About Visual Chefs
Also known as "eecoder"
Also from Richmond, VA
We rock ExpressionEngine
We also rock CodeIgniter
Our info
๏   http://www.visualchefs.com/
๏   http://eecoder.com/
๏   @eecoder
Overview
1.Writing documentation
2.Organization & planning
3.Tools to help
"Documentation! I'm so
excited!" you all say
It's important if anyone else
will ever look at your code
And it can always be done
better
And if you don't do it...
Bad things
await you
Trust me, you want to
document
Nothing revolutionary
KYA:
Keep You Accountable
KYA:
Kick Your Ass
Documentation
That's documentation in
your code, not end-user
Everything you write should
be documented
I can't read your mind
Aha! That's where the presentation title comes from!
You and I don't see things
the same way
Don't assume I'm good
enough to learn from your
code
Don't assume your code
is good enough to teach
Document first
Use your comments to
guide you
//   ------------------------------------------------------------
//   User Login
//   ------------------------------------------------------------
 
//   If the credentials were correct, login and redirect to dashboard
 
//   Otherwise, redirect to the login form with errors
// ------------------------------------------------------------
// User Login
// ------------------------------------------------------------
 
// If the credentials were correct, login and redirect to dashboard
if($this->auth->login($email, $password) === TRUE)
{
    redirect('account/dashboard');
}
// Otherwise, redirect to the login form with errors
else
{
    $this->session->set_userdata('errors', $this->auth->errors);
    redirect('login');
}
Comment major control
structures
๏   Classes
    ๏   Properties
    ๏   Methods
๏   Functions
๏   Most conditionals
๏   Most loops
Tag your comments
//   @TODO:    Handle failed API requests better
//   @NOTE:    Passing by reference is necessary here
//   @HACK:    Fixed minor bug in query builder
//   @SEE:     http://tinyurl.com/2g9mqh
//   @BLAME:   Alex royally screwed this up
Write good docblocks
/**
 * login
 */
public function login($email, $password)
{
    // @TODO
}
NO!
/**
 * login
 */
public function login($email, $password)
{
    // @TODO
}
Good docblocks tell you:
๏   What it is
๏   What it does
๏   What it accepts
๏   What it returns
Enables code hinting in
some IDEs
Allows easy
documentation generation
Classes should describe
author and meta info
/**
 * User account model
 *
 * @author     Aaron Kuzemchak
 * @copyright  2012 Aaron Kuzemchak
 * @link       http://kuzemchak.net/
 * @package     CodeIgniter
 * @subpackage  Models
 */
class User_model extends CI_Model
{
    // @TODO
}
Methods should have more
functional info
/**
 * Hashes an array of settings for easy storage in a database
 *
 * @param   array   $data
 * @return  string
 */
public static function hash_settings($data)
{
    return base64_encode(serialize($data));
}
Properties should briefly
describe the purpose and
type
/**
 * The user's email address
 *
 * @var  string
 */
public $email;
Put example usage in the
docblock
/**
 * Hashes an array of settings for easy storage in a database
 *
 * <code>
 *     $settings = MyClass::hash_settings($data_array);
 * </code>
 *
 * @param   array   $data
 * @return  string
 */
public static function hash_settings($data)
{
    return base64_encode(serialize($data));
}
Use type hinting with your
arguments
/**
 * Hashes an array of settings for easy storage in a database
 *
 * <code>
 *     $settings = MyClass::hash_settings($data_array);
 * </code>
 *
 * @param   array   $data
 * @return  string
 */
public static function hash_settings(array $data)
{
    return base64_encode(serialize($data));
}
Don't be afraid to be
verbose
// At this point we need to send an email to the user to confirm
// their purchase. Since it's an HTML email, we've stored it in a
// view, and can pass the necessary data to it.
$email = $this->load->view('emails/receipt', $data, TRUE);
Reference ticket numbers,
user stories, etc.
Because most customer
"logic" doesn't make sense
//   At this point we send an email reminder to the customer, informing them
//   that their subscription will expire soon.
 
//   However, don't send an email if today is a Monday or Thursday, because
//   the client's "really tech-saavy" cousin told them that people don't
//   read their email on those days.
 
//   @SEE: Ticket #138 - http://projects.visualchefs.com/tickets/138
Functions should have
descriptive names
And, they shouldn't try to do
too much
/**
 * Get the number of comments for a user
 *
 * @param   int  $user_id
 * @return  int
 */
public function comment_count($user_id)
{
    // @TODO
}
 
/**
 * Get a user's comments
 *
 * @param   int    $user_id
 * @param   int    $limit
 * @return  array
 */
public function comments($user_id, $limit = 100)
{
    // @TODO
}
/**
 * Get a user's comments, or just a count of their comments.
 *
 * @param   int        $user_id
 * @param   int        $limit
 * @param   bool       $count_only
 * @return  int|array
 */
public function comments($user_id, $limit = 100, $count_only = FALSE)
{
    // @NOTE: It's difficult to tell what the function does by its name
    // @NOTE: It also does too many things
    // @NOTE: I can't remember what the parameters are
}
/**




  meh...
 * Get a user's comments, or just a count of their comments.
 *
 * @param   int        $user_id
 * @param   int        $limit
 * @param   bool       $count_only
 * @return  int|array
 */
public function comments($user_id, $limit = 100, $count_only = FALSE)
{
    // @NOTE: It's difficult to tell what the function does by its name
    // @NOTE: It also does too many things
    // @NOTE: I can't remember what the parameters are
}
CodeIgniter's query builder
is a great example
$results = $this->db->select('id, email')
    ->where('plan_id', 1)
    ->order_by('id', 'ASC')
    ->limit(10)
    ->get('users');
Reference docs for third-
party tools
// Set the value in Redis if it doesn't already exist
// @SEE: http://redis.io/commands/setnx
Summary
๏   Documentation is easier when done first
๏   Give as much insight as you can
๏   Write those friggin' docblocks!
๏   Be verbose
๏   Link to external docs when possible
Organization
MVC has made this easier
Have a plan
Write a technical or
behavioral document
Sample
1. User fills out the registration form

2. User clicks submit

3. Form is submitted via Ajax

   1. Form data is validated

       1. If valid, account is created

   2. JSON response is returned with success flag, and array of errors if invalid data

4. If successful, user is redirected to the dashboard

   1. If not successful, list of errors are shown
Helps others get a visual
description of what's
happening
Simplicity is always
appreciated
Don't over-engineer things
Keep a README file
You're probably already
doing this if you use Github
or Bitbucket
List technical requirements &
setup instructions
REQUIREMENTS
============

* PHP 5.3+
    * curl
    * mcrypt
    * pdo_mysql
    * mongo PECL extension
* MySQL 5.4+
* MongoDB
* Redis
SETUP INSTRUCTIONS
==================

1. Create a MySQL database.
2. Update settings in local database config
   file.
3. Run database migrations from the command
   line.
Point out non-obvious
changes/tweaks/hacks
APPLICATION NOTES
=================

* Default timezone is set in index.php so that
  I don't have to rely on CI's odd
  localization system.
Note third-party tools you
are using
THIRD-PARTY TOOLS
=================

* dompdf - http://code.google.com/p/dompdf
Use a style guide
Makes it easier to get new
devs acquainted
CodeIgniter's is a great
starting point
PSR-1 isn't bad either
Unless you despise camelCase
Use the third_party folder
Prevents needing to
separate related configs,
libraries, models, etc.
third_party
    auth
         config
             auth.php
         libraries
             auth.php
         models
             user_model.php
$this->load->add_package_path(APPPATH.'third_party/auth');
$this->load->library('auth');
$this->load->model('user_model');
Manage CodeIgniter
packages with Sparks
Similar benefits to using the
third_party folder
Manage other dependencies
with Composer
Useful for any PHP project!
Write tests
Yes, unit tests
But, how about browser-
scripted tests as well?
You can watch interactions,
and make sure you're not
breaking stuff
Keep them updated when
things change!
Summary
๏   Have a plan
๏   Simplicity
๏   Keep a README file
๏   Use a style guide
๏   Keep packages organized with tools like Sparks and
    Composer
๏   Write tests
Tools
Sparks
Makes managing
CodeIgniter packages super
easy
cd project-root
php -r "$(curl -fsSL http://getsparks.org/go-sparks)"
php tools/spark install ion_auth
$this->load->spark('ion_auth/2.3.2');

if( ! $this->ion_auth->logged_in())
{
    redirect('login');
}
It's been around a while, so
use if it you don't already
Composer
Awesome new dependency
manager
For any PHP project
It's not PEAR!
Packages are installed on a
per-project basis
cd project-root
curl -s https://getcomposer.org/installer | php
A simple JSON file controls
your packages
{
    "require": {
        "nategood/httpful": ">=1.0"
    }
}
# the first time you run
php composer.phar install

# all other times
php composer.phar update
One autoloader to rule
them all!
// Put this in index.php
require 'vendor/autoload.php';
 
// Call a class and it will be loaded automatically
$response = HttpfulRequest::get('http://eecoder.com/')->send();
Browse packages at
packagist.org
ApiGen
Generate documentation
from your docblocks
Organized by namespaces
and package/subpackage
Beautiful full highlighted
source browsing
Beautiful default theme (and
you can make your own)
Easy to install, easy to run
# download apigen to your project root (or wherever)
php apigen/apigen.php -s source-folder -d destination-folder

# watch the pretty progress bar!
Quick demo
Selenium IDE
Record tests in your
browser (with Firefox)
Not the most elegant UI
All the normal assertion
goodies of any other testing
framework
Save and distribute test
suites
Click record and start testing
Thanks, that's all I've got!
๏   http://kuzemchak.net/
๏   https://github.com/akuzemchak
๏   @akuzemchak

More Related Content

What's hot

Java script Session No 1
Java script Session No 1Java script Session No 1
Java script Session No 1
Saif Ullah Dar
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
Refresh Events
 
Introduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC FrameworksIntroduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC Frameworks
Gerald Krishnan
 
Ant User Guide
Ant User GuideAnt User Guide
Ant User Guide
Muthuselvam RS
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery
維佋 唐
 
Java script
Java scriptJava script
Java script
Fajar Baskoro
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next web
Ian Forrester
 
API Documentation -- Presentation to East Bay STC Chapter
API Documentation -- Presentation to East Bay STC ChapterAPI Documentation -- Presentation to East Bay STC Chapter
API Documentation -- Presentation to East Bay STC Chapter
Tom Johnson
 
Rich faces
Rich facesRich faces
Rich faces
BG Java EE Course
 
JSP Custom Tags
JSP Custom TagsJSP Custom Tags
JSP Custom Tags
BG Java EE Course
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialYi-Ting Cheng
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
Saket Choudhary
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
Saket Choudhary
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
Jeremy Cook
 
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
Joshua Warren
 
Css, xhtml, javascript
Css, xhtml, javascriptCss, xhtml, javascript
Css, xhtml, javascript
Trần Khải Hoàng
 
Javascript 2009
Javascript 2009Javascript 2009
Javascript 2009
borkweb
 

What's hot (18)

Java script Session No 1
Java script Session No 1Java script Session No 1
Java script Session No 1
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
 
Introduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC FrameworksIntroduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC Frameworks
 
Ant User Guide
Ant User GuideAnt User Guide
Ant User Guide
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery
 
Java script
Java scriptJava script
Java script
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next web
 
API Documentation -- Presentation to East Bay STC Chapter
API Documentation -- Presentation to East Bay STC ChapterAPI Documentation -- Presentation to East Bay STC Chapter
API Documentation -- Presentation to East Bay STC Chapter
 
Rich faces
Rich facesRich faces
Rich faces
 
JSP Custom Tags
JSP Custom TagsJSP Custom Tags
JSP Custom Tags
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
SlideShare Instant
SlideShare InstantSlideShare Instant
SlideShare Instant
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)
 
Css, xhtml, javascript
Css, xhtml, javascriptCss, xhtml, javascript
Css, xhtml, javascript
 
Jsp
JspJsp
Jsp
 
Javascript 2009
Javascript 2009Javascript 2009
Javascript 2009
 

Viewers also liked

092812 david addington article (esperanto)
092812   david addington article (esperanto)092812   david addington article (esperanto)
092812 david addington article (esperanto)VogelDenise
 
072712 usa ku klux klan runned government - estonian
072712 usa ku klux klan runned government - estonian072712 usa ku klux klan runned government - estonian
072712 usa ku klux klan runned government - estonianVogelDenise
 
CHINESE (Simplified) hillary clinton stingers
CHINESE (Simplified)   hillary clinton stingersCHINESE (Simplified)   hillary clinton stingers
CHINESE (Simplified) hillary clinton stingersVogelDenise
 
Korean thank you to republic of ecuador (asylum of julian assange)
Korean   thank you to  republic of ecuador (asylum of julian assange)Korean   thank you to  republic of ecuador (asylum of julian assange)
Korean thank you to republic of ecuador (asylum of julian assange)
VogelDenise
 
Russian thank you to republic of ecuador (asylum of julian assange)
Russian   thank you to  republic of ecuador (asylum of julian assange)Russian   thank you to  republic of ecuador (asylum of julian assange)
Russian thank you to republic of ecuador (asylum of julian assange)
VogelDenise
 
Latvian thank you to republic of ecuador (asylum of julian assange)
Latvian   thank you to  republic of ecuador (asylum of julian assange)Latvian   thank you to  republic of ecuador (asylum of julian assange)
Latvian thank you to republic of ecuador (asylum of julian assange)
VogelDenise
 
Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1c09271
 
Norwegian thank you to republic of ecuador (asylum of julian assange)
Norwegian   thank you to  republic of ecuador (asylum of julian assange)Norwegian   thank you to  republic of ecuador (asylum of julian assange)
Norwegian thank you to republic of ecuador (asylum of julian assange)
VogelDenise
 
092812 david addington article (latvian)
092812   david addington article (latvian)092812   david addington article (latvian)
092812 david addington article (latvian)VogelDenise
 
071310 obama email (japanese)
071310   obama email (japanese)071310   obama email (japanese)
071310 obama email (japanese)VogelDenise
 
071310 obama email (arabic)
071310   obama email (arabic)071310   obama email (arabic)
071310 obama email (arabic)VogelDenise
 
071310 obama email (maltese)
071310   obama email (maltese)071310   obama email (maltese)
071310 obama email (maltese)VogelDenise
 
021013 adecco email (hebrew)
021013   adecco email (hebrew)021013   adecco email (hebrew)
021013 adecco email (hebrew)VogelDenise
 
071310 obama email (esperanto)
071310   obama email (esperanto)071310   obama email (esperanto)
071310 obama email (esperanto)VogelDenise
 
092812 david addington article (swedish)
092812   david addington article (swedish)092812   david addington article (swedish)
092812 david addington article (swedish)VogelDenise
 
071310 obama email (lithuanian)
071310   obama email (lithuanian)071310   obama email (lithuanian)
071310 obama email (lithuanian)VogelDenise
 
Nuremberg crimes against humanity-peace (galician)
Nuremberg   crimes against humanity-peace (galician)Nuremberg   crimes against humanity-peace (galician)
Nuremberg crimes against humanity-peace (galician)VogelDenise
 
Winx Club
Winx Club Winx Club
Winx Club
Network Lab
 
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
VogelDenise
 
Nuremberg crimes against humanity-peace (turkish)
Nuremberg   crimes against humanity-peace (turkish)Nuremberg   crimes against humanity-peace (turkish)
Nuremberg crimes against humanity-peace (turkish)VogelDenise
 

Viewers also liked (20)

092812 david addington article (esperanto)
092812   david addington article (esperanto)092812   david addington article (esperanto)
092812 david addington article (esperanto)
 
072712 usa ku klux klan runned government - estonian
072712 usa ku klux klan runned government - estonian072712 usa ku klux klan runned government - estonian
072712 usa ku klux klan runned government - estonian
 
CHINESE (Simplified) hillary clinton stingers
CHINESE (Simplified)   hillary clinton stingersCHINESE (Simplified)   hillary clinton stingers
CHINESE (Simplified) hillary clinton stingers
 
Korean thank you to republic of ecuador (asylum of julian assange)
Korean   thank you to  republic of ecuador (asylum of julian assange)Korean   thank you to  republic of ecuador (asylum of julian assange)
Korean thank you to republic of ecuador (asylum of julian assange)
 
Russian thank you to republic of ecuador (asylum of julian assange)
Russian   thank you to  republic of ecuador (asylum of julian assange)Russian   thank you to  republic of ecuador (asylum of julian assange)
Russian thank you to republic of ecuador (asylum of julian assange)
 
Latvian thank you to republic of ecuador (asylum of julian assange)
Latvian   thank you to  republic of ecuador (asylum of julian assange)Latvian   thank you to  republic of ecuador (asylum of julian assange)
Latvian thank you to republic of ecuador (asylum of julian assange)
 
Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1
 
Norwegian thank you to republic of ecuador (asylum of julian assange)
Norwegian   thank you to  republic of ecuador (asylum of julian assange)Norwegian   thank you to  republic of ecuador (asylum of julian assange)
Norwegian thank you to republic of ecuador (asylum of julian assange)
 
092812 david addington article (latvian)
092812   david addington article (latvian)092812   david addington article (latvian)
092812 david addington article (latvian)
 
071310 obama email (japanese)
071310   obama email (japanese)071310   obama email (japanese)
071310 obama email (japanese)
 
071310 obama email (arabic)
071310   obama email (arabic)071310   obama email (arabic)
071310 obama email (arabic)
 
071310 obama email (maltese)
071310   obama email (maltese)071310   obama email (maltese)
071310 obama email (maltese)
 
021013 adecco email (hebrew)
021013   adecco email (hebrew)021013   adecco email (hebrew)
021013 adecco email (hebrew)
 
071310 obama email (esperanto)
071310   obama email (esperanto)071310   obama email (esperanto)
071310 obama email (esperanto)
 
092812 david addington article (swedish)
092812   david addington article (swedish)092812   david addington article (swedish)
092812 david addington article (swedish)
 
071310 obama email (lithuanian)
071310   obama email (lithuanian)071310   obama email (lithuanian)
071310 obama email (lithuanian)
 
Nuremberg crimes against humanity-peace (galician)
Nuremberg   crimes against humanity-peace (galician)Nuremberg   crimes against humanity-peace (galician)
Nuremberg crimes against humanity-peace (galician)
 
Winx Club
Winx Club Winx Club
Winx Club
 
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
AMERICA'S BLACK WALL STREET - How The Ku Klux Klan Went About TERRORIZING & D...
 
Nuremberg crimes against humanity-peace (turkish)
Nuremberg   crimes against humanity-peace (turkish)Nuremberg   crimes against humanity-peace (turkish)
Nuremberg crimes against humanity-peace (turkish)
 

Similar to CICONF 2012 - Don't Make Me Read Your Mind

Create a web-app with Cgi Appplication
Create a web-app with Cgi AppplicationCreate a web-app with Cgi Appplication
Create a web-app with Cgi Appplication
olegmmiller
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Steven Pignataro
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
Website Security
Website SecurityWebsite Security
Website SecurityCarlos Z
 
Website Security
Website SecurityWebsite Security
Website Security
MODxpo
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Compare Infobase Limited
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
Edorian
 
Laravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleLaravel 8 export data as excel file with example
Laravel 8 export data as excel file with example
Katy Slemon
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's Code
Wildan Maulana
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code Igniter
Amzad Hossain
 
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Mir Nazim
 
Building Your First App with MongoDB Stitch
Building Your First App with MongoDB StitchBuilding Your First App with MongoDB Stitch
Building Your First App with MongoDB Stitch
MongoDB
 
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
mold
 
API Workshop: Deep dive into REST APIs
API Workshop: Deep dive into REST APIsAPI Workshop: Deep dive into REST APIs
API Workshop: Deep dive into REST APIs
Tom Johnson
 
flask.pptx
flask.pptxflask.pptx
flask.pptx
asif290119
 
Joomla security nuggets
Joomla security nuggetsJoomla security nuggets
Joomla security nuggetsguestbd1cdca
 
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Tom Johnson
 
CQRS / ES & DDD Demystified
CQRS / ES & DDD DemystifiedCQRS / ES & DDD Demystified
CQRS / ES & DDD Demystified
Vic Metcalfe
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniternicdev
 

Similar to CICONF 2012 - Don't Make Me Read Your Mind (20)

Create a web-app with Cgi Appplication
Create a web-app with Cgi AppplicationCreate a web-app with Cgi Appplication
Create a web-app with Cgi Appplication
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
Cqrs api v2
Cqrs api v2Cqrs api v2
Cqrs api v2
 
Website Security
Website SecurityWebsite Security
Website Security
 
Website Security
Website SecurityWebsite Security
Website Security
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
 
Laravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleLaravel 8 export data as excel file with example
Laravel 8 export data as excel file with example
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's Code
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code Igniter
 
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
 
Building Your First App with MongoDB Stitch
Building Your First App with MongoDB StitchBuilding Your First App with MongoDB Stitch
Building Your First App with MongoDB Stitch
 
Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!Catalyst - refactor large apps with it and have fun!
Catalyst - refactor large apps with it and have fun!
 
API Workshop: Deep dive into REST APIs
API Workshop: Deep dive into REST APIsAPI Workshop: Deep dive into REST APIs
API Workshop: Deep dive into REST APIs
 
flask.pptx
flask.pptxflask.pptx
flask.pptx
 
Joomla security nuggets
Joomla security nuggetsJoomla security nuggets
Joomla security nuggets
 
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
 
CQRS / ES & DDD Demystified
CQRS / ES & DDD DemystifiedCQRS / ES & DDD Demystified
CQRS / ES & DDD Demystified
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter
 

More from ciconf

Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniterciconf
 
Work Queues
Work QueuesWork Queues
Work Queuesciconf
 
Pretty Good Practices/Productivity
Pretty Good Practices/ProductivityPretty Good Practices/Productivity
Pretty Good Practices/Productivityciconf
 
Who Needs Ruby When You've Got CodeIgniter
Who Needs Ruby When You've Got CodeIgniterWho Needs Ruby When You've Got CodeIgniter
Who Needs Ruby When You've Got CodeIgniterciconf
 
Hosting as a Framework
Hosting as a FrameworkHosting as a Framework
Hosting as a Framework
ciconf
 
Zero to Hero in Start-ups
Zero to Hero in Start-upsZero to Hero in Start-ups
Zero to Hero in Start-ups
ciconf
 
How to use ORM
How to use ORMHow to use ORM
How to use ORM
ciconf
 

More from ciconf (7)

Chef + AWS + CodeIgniter
Chef + AWS + CodeIgniterChef + AWS + CodeIgniter
Chef + AWS + CodeIgniter
 
Work Queues
Work QueuesWork Queues
Work Queues
 
Pretty Good Practices/Productivity
Pretty Good Practices/ProductivityPretty Good Practices/Productivity
Pretty Good Practices/Productivity
 
Who Needs Ruby When You've Got CodeIgniter
Who Needs Ruby When You've Got CodeIgniterWho Needs Ruby When You've Got CodeIgniter
Who Needs Ruby When You've Got CodeIgniter
 
Hosting as a Framework
Hosting as a FrameworkHosting as a Framework
Hosting as a Framework
 
Zero to Hero in Start-ups
Zero to Hero in Start-upsZero to Hero in Start-ups
Zero to Hero in Start-ups
 
How to use ORM
How to use ORMHow to use ORM
How to use ORM
 

Recently uploaded

GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 

Recently uploaded (20)

GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 

CICONF 2012 - Don't Make Me Read Your Mind

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n