SlideShare ist ein Scribd-Unternehmen logo
1 von 148
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

Weitere ähnliche Inhalte

Was ist angesagt?

Java script Session No 1
Java script Session No 1Java script Session No 1
Java script Session No 1Saif Ullah Dar
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryRefresh Events
 
Introduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC FrameworksIntroduction to Using PHP & MVC Frameworks
Introduction to Using PHP & MVC FrameworksGerald Krishnan
 
JavaScript: DOM and jQuery
JavaScript: DOM and jQueryJavaScript: DOM and jQuery
JavaScript: DOM and jQuery維佋 唐
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next webIan 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 ChapterTom Johnson
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialYi-Ting Cheng
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to DomainJeremy 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
 
Javascript 2009
Javascript 2009Javascript 2009
Javascript 2009borkweb
 

Was ist angesagt? (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
 

Andere mochten auch

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

Andere mochten auch (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)
 

Ähnlich wie 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 Appplicationolegmmiller
 
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 PignataroSteven 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 SecurityMODxpo
 
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 timeEdorian
 
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 exampleKaty Slemon
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's CodeWildan Maulana
 
Introduction To Code Igniter
Introduction To Code IgniterIntroduction To Code Igniter
Introduction To Code IgniterAmzad 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 2008Mir 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 StitchMongoDB
 
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 APIsTom Johnson
 
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 DemystifiedVic Metcalfe
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniternicdev
 

Ähnlich wie 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
 

Mehr von 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 Frameworkciconf
 
Zero to Hero in Start-ups
Zero to Hero in Start-upsZero to Hero in Start-ups
Zero to Hero in Start-upsciconf
 
How to use ORM
How to use ORMHow to use ORM
How to use ORMciconf
 

Mehr von 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
 

Kürzlich hochgeladen

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Kürzlich hochgeladen (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

CICONF 2012 - Don't Make Me Read Your Mind

Hinweis der Redaktion

  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