SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
Yi-Ting Cheng
 

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 - estonian
VogelDenise
 
CHINESE (Simplified) hillary clinton stingers
CHINESE (Simplified)   hillary clinton stingersCHINESE (Simplified)   hillary clinton stingers
CHINESE (Simplified) hillary clinton stingers
VogelDenise
 
Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1Pdiva 2012 1 balotario pc1
Pdiva 2012 1 balotario pc1
c09271
 
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
 

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

Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
funkatron
 
Website Security
Website SecurityWebsite Security
Website Security
Carlos Z
 
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
 
Joomla security nuggets
Joomla security nuggetsJoomla security nuggets
Joomla security nuggets
guestbd1cdca
 
5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter5 Reasons To Love CodeIgniter
5 Reasons To Love CodeIgniter
nicdev
 

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

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 

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