SlideShare une entreprise Scribd logo
1  sur  65
Rise of the Machines:
PHP & IoT
php[world] 2016
@colinodell - joind.in/talk/18676
Colin O’Dell
• Lead Web Developer at Unleashed Technologies
• PHP League Member
 league/commonmark
 league/html-to-markdown
• PHP 7 Upgrade Guide e-book
• Arduino / RasPi / 3D printing Enthusiast
@colinodell - joind.in/talk/18676
Internet of Things
The Internet of Things is the internetworking of physical devices,
vehicles, buildings and other items—embedded with electronics,
software, sensors, actuators, and network connectivity that enable
these objects to collect and exchange data.
- https://en.wikipedia.org/wiki/Internet_of_things
@colinodell - joind.in/talk/18676
Internet of Things
The Internet of Things is the internetworking of physical devices,
vehicles, buildings and other items—embedded with electronics,
software, sensors, actuators, and network connectivity that enable
these objects to collect and exchange data.
- https://en.wikipedia.org/wiki/Internet_of_things
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
Connectivity
• Ethernet / WiFi
• NFC / RFID
• Bluetooth LE
• Zigbee / Z-Wave
• Cellular (LTE / CDMA / GSM)
• And many others
@colinodell - joind.in/talk/18676
0
10
20
30
40
50
60
2003 2010 2015 2020
(Billions) Population vs Connected Devices
People Connected Devices
@colinodell - joind.in/talk/18676Source: https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf
@colinodell - joind.in/talk/18676
Today’s Agenda
• Device overview
• Four examples of combining IoT with PHP
 Project Goals
 Hardware & Platform Choice
 Building the device
 Demo
• Q&A
@colinodell - joind.in/talk/18676
DIY IoT Devices
For the software or hardware enthusiast
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
How to choose?
• Identify required features
• Ideal programming language
• Consider power requirements
• Size / footprint
@colinodell - joind.in/talk/18676
Four Examples Using PHP
@colinodell - joind.in/talk/18676
Uptime Monitor
Use Raspberry Pi to monitor if site is up; change LED color accordingly
Why Raspberry Pi?
• Runs Linux (Raspian – a derivative of Debian)
• Has GPIO pins
• PHP easily installed
• Raspberry Pi Zero only $5
• Handles HTTPs out-of-the-box
• Why not?
@colinodell - joind.in/talk/18676
Hardware
@colinodell - joind.in/talk/18676
• Raspberry Pi (any variant)
• Micro USB cable (power)
• USB WiFi dongle
• RGB LED
• Two resistors
• Wires
RGB LEDs
@colinodell - joind.in/talk/18676
Wiring
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
$ composer require piphp/gpio
@colinodell - joind.in/talk/18676
<?php
const URL = 'https://www.colinodell.com';
const GPIO_PIN_GREEN = 12;
const GPIO_PIN_RED = 16;
require_once 'vendor/autoload.php';
$gpio = new PiPHPGPIOGPIO();
$greenLed = $gpio->getOutputPin(GPIO_PIN_GREEN);
$redLed = $gpio->getOutputPin(GPIO_PIN_RED);
$httpClient = new GuzzleHttpClient();
while (true) {
try {
$response = $httpClient->head(URL, [
'connect_timeout' => 3,
'timeout' => 3,
]);
echo URL . " is onlinen";
$greenLed->setValue(1);
$redLed->setValue(0);
} catch (RuntimeException $ex) {
echo URL . " is OFFLINE!n";
$greenLed->setValue(0);
$redLed->setValue(1);
}
sleep(3);
}
Recap
• PHP on a Raspberry Pi
• PHP checks if site is up
• PiPHP/GPIO library used to control output pins (LEDs)
Other uses for output pins:
• Control motors/servos
• Control relays (turn higher-voltage things on/off)
• Drive digital displays (LCD screens, LED number displays, etc.)
@colinodell - joind.in/talk/18676
Conference Room
Occupancy Sensor
Raspberry Pi detects movement in room; sends room status to Slack
@colinodell - joind.in/talk/18676
Why Raspberry Pi?
• Runs Linux (Raspian – a derivative of Debian)
• Has GPIO pins
• PHP easily installed
• Raspberry Pi Zero only $5
• Handles HTTPs out-of-the-box
• Why not?
@colinodell - joind.in/talk/18676
TL;DR: Same reasons as before!
Hardware
@colinodell - joind.in/talk/18676
• Raspberry Pi (any variant)
• Micro USB cable (power)
• USB WiFi dongle
• PIR Sensor
• Wires
PIR Sensors
@colinodell - joind.in/talk/18676Images from https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview
Wiring
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
Signal
@colinodell - joind.in/talk/18676
Motion Detected
Occupied Vacant Occupied
@colinodell - joind.in/talk/18676
<?php
namespace ColinODellPHPIoTExamplesPHPPIRSensor;
class Room
{
/**
* @var bool
*/
private $occupied = false;
/**
* @var int
*/
private $lastMovement;
/**
* @var callable
*/
private $onRoomStateChange;
/**
* @var int
*/
private $roomEmptyTimeout;
/**
@colinodell - joind.in/talk/18676
<?php
// Configuration:
const GPIO_PIN = 17;
const DECLARE_ROOM_EMPTY_AFTER = 60*5; // 5 minutes
const SLACK_INCOMING_WEBHOOK_URL = 'https://hooks.slack.com/services/xxxx/xxxx/xxxx';
// End configuration
require_once 'vendor/autoload.php';
use ColinODellPHPIoTExamplesPHPPIRSensorRoom;
use PiPHPGPIOGPIO;
use PiPHPGPIOPinInputPinInterface;
// HTTP client for communicating with Slack
$http = new GuzzleHttpClient();
// Instantiate a new room object to keep track of its state
$room = new Room();
$room->setRoomEmptyTimeout(DECLARE_ROOM_EMPTY_AFTER);
$room->setOnRoomChangeCallback(function($isOccupied) use ($http) {
$message = 'The conference room is now ' . ($isOccupied ? 'occupied.' : 'vacant.');
$http->postAsync(SLACK_INCOMING_WEBHOOK_URL, [
@colinodell - joind.in/talk/18676
Recap
• PHP on a Raspberry Pi
• PiPHP/GPIO library monitors GPIO pin for signal changes
• PHP tracks duration between rising edges (low-to-high signal changes)
• Notifications pushed to Slack via webhook
Other uses for input pins:
• Switches & buttons
• Sensors (temperature, humidity, motion, accelerometer, GPS)
• Receiving data from other devices
@colinodell - joind.in/talk/18676
Alexa Custom Skill
Use PHP + Laravel to handle request for php[world] session information
@colinodell - joind.in/talk/18676
Why Alexa / Amazon Echo?
• Amazon handles voice recognition
• Parsed request passed from Amazon to our API endpoint
• We handle accordingly; send formatted response for Alexa to read aloud
• Published skills easily installable
@colinodell - joind.in/talk/18676
User Interaction Flow
@colinodell - joind.in/talk/18676Diagram from https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/overviews/understanding-custom-skills
Invoking Custom Skills
• Ask [skill name] [action] Ask PHP World which sessions are next
• Tell [skill name] [action] Tell PHP World this talk is great
• [action] using [skill name] Rate this talk 5 stars using PHP World
@colinodell - joind.in/talk/18676
Actions
• What sessions are next?
• What session is next in {room}?
• What sessions are at {time} in {room}?
• Who is speaking in {room} {day} at {time}?
@colinodell - joind.in/talk/18676
Defining Actions
GetSessions what sessions are next
GetSessions what talks are next
GetSessions who is talking next
GetSessions who is speaking next
GetSessions which sessions are next
GetSessions which talks are next
GetSessions what session is next in {room}
GetSessions what talk is next in {room}
GetSessions who is talking next in {room}
GetSessions who is speaking next in {room}
GetSessions which session is next in {room}
GetSessions which talk is next in {room}
GetSessions what sessions are at {time}
GetSessions what talks are at {time}
GetSessions who is talking at {time}
GetSessions who is speaking at {time}
GetSessions which sessions are at {time}
GetSessions which talks are at {time}
GetSessions what sessions are at {time} {day}
GetSessions what talks are at {time} {day}
GetSessions who is talking at {time} {day}
GetSessions who is speaking at {time} {day}
GetSessions which sessions are at {time} {day}
GetSessions which talks are at {time} {day}
GetSessions what session is in {room} at {time}
GetSessions what talk is in {room} at {time}
GetSessions who is talking in {room} at {time}
GetSessions who is speaking in {room} at {time}
GetSessions which session is in {room} at {time}
GetSessions which talk is in {room} at {time}
GetSessions what session is in {room} at {time} {day}
GetSessions what talk is in {room} at {time} {day}
GetSessions who is talking in {room} at {time} {day}
GetSessions who is speaking in {room} at {time} {day}
GetSessions which session is in {room} at {time} {day}
GetSessions which talk is in {room} at {time} {day}
GetSessions what session is {day} in {room} at {time}
GetSessions what talk is {day} in {room} at {time}
GetSessions who is talking {day} in {room} at {time}
GetSessions who is speaking {day} in {room} at {time}
GetSessions which session {day} is in {room} at {time}
GetSessions which talk {day} is in {room} at {time}
@colinodell - joind.in/talk/18676
Intent Schema
@colinodell - joind.in/talk/18676
{
"intents": [
{
"intent": "GetSessions",
"slots": [
{
"name": "day",
"type": "AMAZON.DATE"
},
{
"name": "time",
"type": "AMAZON.TIME"
},
{
"name": "room",
"type": "ROOM"
}
]
},
{
"intent": "AMAZON.HelpIntent"
}
]
}
Fairfax
Great Falls
Potomac
Ash Grove A
Ash Grove B
Ash Grove C
@colinodell - joind.in/talk/18676
$ composer require develpr/alexa-app
AlexaRoute::intent('/alexa-end-point', 'GetDeveloperJoke', function(){
Alexa::say("A SQL query goes into a bar, walks up to two tables and asks, "Can I join you?"");
});
@colinodell - joind.in/talk/18676
<?php
namespace AppConsoleCommands;
use CarbonCarbon;
use IlluminateSupportFacadesDB;
use GuzzleHttpClient;
use IlluminateConsoleCommand;
class ImportScheduleCommand extends Command {
protected $signature = 'import:schedule';
protected $description = 'Imports the php[world] schedule from the conference website.';
public function handle() {
// Manually scraped from the site by viewing the AJAX requests for each day
$timestamps = [1479081600, 1479168000, 1479254400, 1479340800, 1479427200];
foreach ($timestamps as $timestamp) {
$this->importSchedule($timestamp);
}
}
private function importSchedule($timestamp)
{
$client = new Client([
'base_uri' => '',
'timeout' => 10,
]);
$response = $client->post('https://world.phparch.com/wp-admin/admin-ajax.php', [
'form_params' => [
'action' => 'get_schedule',
'data-timestamp' => $timestamp,
'data-location' => 0,
'data-track' => 0,
@colinodell - joind.in/talk/18676
<?php
namespace AppHttpControllers;
use CarbonCarbon;
use DevelprAlexaAppFacadesAlexa;
use DevelprAlexaAppRequestAlexaRequest;
use IlluminateDatabaseQueryBuilder;
use IlluminateSupportFacadesDB;
class SessionController extends Controller
{
public function getSessions(AlexaRequest $request)
{
$request->getIntent();
$time = $request->slot('time') ?: Carbon::now()->format('G:i');
$day = $request->slot('day') ?: Carbon::now()->format('Y-m-d');
$room = $request->slot('room');
try {
$sessions = $this->findSessions($time, $day, $room);
if (count($sessions) === 0) {
// No sessions found
return Alexa::say('Sorry, I couldn't find any sessions on ' . $day . ' at ' . $time)->endSession();
} elseif (count($sessions) === 1) {
return Alexa::say($this->getSessionText(reset($sessions)))->endSession();;
} else {
$text = 'I found ' . count($sessions) . ' sessions. ';
foreach ($sessions as $session) {
@colinodell - joind.in/talk/18676
<?php
// app/Http/routes.php
AlexaRoute::intent('/alexa', 'GetSessions', 'AppHttpControllersSessionController@getSessions');
Recap
• Alexa parses voice request; passes to PHP
• Laravel application handles requests; returns response
• Alexa renders responses as voice and/or cards
Other uses for Alexa:
• Querying for information
• Interactive sessions (online ordering, games, etc.)
• Home automation
@colinodell - joind.in/talk/18676
Packagist Download Counter
Displaying downloads counts from the Packagist API with Particle Photon
Particle Photon
@colinodell - joind.in/talk/18676
• WiFi built in
• Small footprint
• Can be powered via MicroUSB
• Enough digital GPIO pins
• Programmable via web-based IDE
• OTA flashing
• Built-in webhook support
Hardware
@colinodell - joind.in/talk/18676
• Particle Photon
• MAX7219 8-Digit Red LED Display Module
• Micro USB cable (power)
• Wires
MAX7219 8-Digit Red LED Display Module
@colinodell - joind.in/talk/18676Images from https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview
Wiring
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
Problem!
• JSON document is 32.5 KB
• Photon webhook responses are 512-byte chunks spaced 250ms apart
@colinodell - joind.in/talk/18676
Problem!
• JSON document is 32.5 KB
• Photon webhook responses are 512-byte chunks spaced 250ms apart
@colinodell - joind.in/talk/18676
Solution!
• Use Yahoo YQL to reduce response size
Problem!
• JSON document is 32.5 KB
• Photon webhook responses are 512-byte chunks spaced 250ms apart
@colinodell - joind.in/talk/18676
Solution!
• Use Yahoo YQL to reduce response size
• Use PHP to parse JSON, return just one number
packagist-counter.php
@colinodell - joind.in/talk/18676
<?php
const URL = 'https://packagist.org/packages/league/commonmark.json';
$json = json_decode(file_get_contents(URL), true);
header('Content-Type: text/plain');
echo $json['package']['downloads']['total'];
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
@colinodell - joind.in/talk/18676
Recap
• Particle Photon + 8 digit LED display
• Particle webhook fetches data from packagist-counter.php
• packagist-counter.php fetches from packagist.org; trims out the fat
@colinodell - joind.in/talk/18676
Summary
@colinodell - joind.in/talk/18676
Summary
• IoT is everywhere!
• PHP can bridge the gap
• Run PHP:
 On the device (RasPi examples)
 In “the cloud” (Alexa; Particle Photon)
 Or both!
• Anyone can build web-connected devices
@colinodell - joind.in/talk/18676
Questions?
@colinodell - joind.in/talk/18676
Thanks!
Slides/Feedback:
http://joind.in/talk/18676
Project Source Code / Documentation:
https://github.com/colinodell/php-iot-examples
@colinodell - joind.in/talk/18676

Contenu connexe

Tendances

Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Chris Tankersley
 
Expanding Asterisk with Kamailio
Expanding Asterisk with KamailioExpanding Asterisk with Kamailio
Expanding Asterisk with KamailioFred Posner
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
Docker for Developers - PHP Detroit 2018
Docker for Developers - PHP Detroit 2018Docker for Developers - PHP Detroit 2018
Docker for Developers - PHP Detroit 2018Chris Tankersley
 
Matt's PSGI Archive
Matt's PSGI ArchiveMatt's PSGI Archive
Matt's PSGI ArchiveDave Cross
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Modern Web Development with Perl
Modern Web Development with PerlModern Web Development with Perl
Modern Web Development with PerlDave Cross
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of ThingsDave Cross
 
Canary Analyze All the Things
Canary Analyze All the ThingsCanary Analyze All the Things
Canary Analyze All the Thingsroyrapoport
 
Kamailio - Surfing Big Waves Of SIP With Style
Kamailio - Surfing Big Waves Of SIP With StyleKamailio - Surfing Big Waves Of SIP With Style
Kamailio - Surfing Big Waves Of SIP With StyleDaniel-Constantin Mierla
 
Server Side Swift
Server Side SwiftServer Side Swift
Server Side SwiftChad Moone
 
FOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioFOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioDaniel-Constantin Mierla
 
Build your first Monster APP
Build your first Monster APPBuild your first Monster APP
Build your first Monster APP2600Hz
 
How to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPHow to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPDana Luther
 

Tendances (20)

effective_r27
effective_r27effective_r27
effective_r27
 
2021laravelconftwslides6
2021laravelconftwslides62021laravelconftwslides6
2021laravelconftwslides6
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)
 
Expanding Asterisk with Kamailio
Expanding Asterisk with KamailioExpanding Asterisk with Kamailio
Expanding Asterisk with Kamailio
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
Docker for Developers - PHP Detroit 2018
Docker for Developers - PHP Detroit 2018Docker for Developers - PHP Detroit 2018
Docker for Developers - PHP Detroit 2018
 
Matt's PSGI Archive
Matt's PSGI ArchiveMatt's PSGI Archive
Matt's PSGI Archive
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Modern Web Development with Perl
Modern Web Development with PerlModern Web Development with Perl
Modern Web Development with Perl
 
Kamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load BalancersKamailio - Load Balancing Load Balancers
Kamailio - Load Balancing Load Balancers
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of Things
 
Canary Analyze All the Things
Canary Analyze All the ThingsCanary Analyze All the Things
Canary Analyze All the Things
 
Perl in Teh Cloud
Perl in Teh CloudPerl in Teh Cloud
Perl in Teh Cloud
 
Kamailio - Surfing Big Waves Of SIP With Style
Kamailio - Surfing Big Waves Of SIP With StyleKamailio - Surfing Big Waves Of SIP With Style
Kamailio - Surfing Big Waves Of SIP With Style
 
Server Side Swift
Server Side SwiftServer Side Swift
Server Side Swift
 
Kamailio - The Story for Asterisk
Kamailio - The Story for AsteriskKamailio - The Story for Asterisk
Kamailio - The Story for Asterisk
 
FOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioFOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and Kamailio
 
Build your first Monster APP
Build your first Monster APPBuild your first Monster APP
Build your first Monster APP
 
How to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHPHow to analyze your codebase with Exakat using Docker - Longhorn PHP
How to analyze your codebase with Exakat using Docker - Longhorn PHP
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
 

En vedette

Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Colin O'Dell
 
Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Colin O'Dell
 
From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017Chris Tankersley
 
Docker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPDocker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPChris Tankersley
 
What Symfony Has To Do With My Garage - Home Automation With PHP
What Symfony Has To Do With My Garage - Home Automation With PHPWhat Symfony Has To Do With My Garage - Home Automation With PHP
What Symfony Has To Do With My Garage - Home Automation With PHPJan Unger
 
Hausautomatisierung mit PHP auf dem Raspberry Pi
Hausautomatisierung mit PHP auf dem Raspberry PiHausautomatisierung mit PHP auf dem Raspberry Pi
Hausautomatisierung mit PHP auf dem Raspberry PiJan Unger
 
Amp your site an intro to accelerated mobile pages
Amp your site  an intro to accelerated mobile pagesAmp your site  an intro to accelerated mobile pages
Amp your site an intro to accelerated mobile pagesRobert McFrazier
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...James Titcumb
 
Zend Framework Foundations
Zend Framework FoundationsZend Framework Foundations
Zend Framework FoundationsChuck Reeves
 
php[world] 2015 Training - Laravel from the Ground Up
php[world] 2015 Training - Laravel from the Ground Upphp[world] 2015 Training - Laravel from the Ground Up
php[world] 2015 Training - Laravel from the Ground UpJoe Ferguson
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsDana Luther
 
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:win Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:win Joe Ferguson
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityJames Titcumb
 
Presentation Bulgaria PHP
Presentation Bulgaria PHPPresentation Bulgaria PHP
Presentation Bulgaria PHPAlena Holligan
 

En vedette (20)

Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017
 
Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017
 
From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017
 
Docker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPDocker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHP
 
What Symfony Has To Do With My Garage - Home Automation With PHP
What Symfony Has To Do With My Garage - Home Automation With PHPWhat Symfony Has To Do With My Garage - Home Automation With PHP
What Symfony Has To Do With My Garage - Home Automation With PHP
 
Hausautomatisierung mit PHP auf dem Raspberry Pi
Hausautomatisierung mit PHP auf dem Raspberry PiHausautomatisierung mit PHP auf dem Raspberry Pi
Hausautomatisierung mit PHP auf dem Raspberry Pi
 
MVC in PHP
MVC in PHPMVC in PHP
MVC in PHP
 
Engineer - Mastering the Art of Software
Engineer - Mastering the Art of SoftwareEngineer - Mastering the Art of Software
Engineer - Mastering the Art of Software
 
Amp your site an intro to accelerated mobile pages
Amp your site  an intro to accelerated mobile pagesAmp your site  an intro to accelerated mobile pages
Amp your site an intro to accelerated mobile pages
 
Hack the Future
Hack the FutureHack the Future
Hack the Future
 
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...
Adding 1.21 Gigawatts to Applications with RabbitMQ (Bulgaria PHP 2016 - Tuto...
 
Zend Framework Foundations
Zend Framework FoundationsZend Framework Foundations
Zend Framework Foundations
 
Create, test, secure, repeat
Create, test, secure, repeatCreate, test, secure, repeat
Create, test, secure, repeat
 
php[world] 2015 Training - Laravel from the Ground Up
php[world] 2015 Training - Laravel from the Ground Upphp[world] 2015 Training - Laravel from the Ground Up
php[world] 2015 Training - Laravel from the Ground Up
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application Migrations
 
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:win Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:win
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of Security
 
Git Empowered
Git EmpoweredGit Empowered
Git Empowered
 
Presentation Bulgaria PHP
Presentation Bulgaria PHPPresentation Bulgaria PHP
Presentation Bulgaria PHP
 
Php extensions
Php extensionsPhp extensions
Php extensions
 

Similaire à Rise of the Machines: PHP and IoT - php[world] 2016

Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017Giacomo Vacca
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mortapeiron
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersRaphaël PINSON
 
Surviving Berlin Winter with JavaScript
Surviving Berlin Winter with JavaScriptSurviving Berlin Winter with JavaScript
Surviving Berlin Winter with JavaScriptJulian Kern
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Pierre Joye
 
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутри
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутриJS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутри
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутриJSFestUA
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Edward Wilde
 
Mongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMitch Pirtle
 
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)Ontico
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iAlan Seiden
 
Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotLuc Bors
 
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017Codemotion
 
KazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo ScalabilityKazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo Scalability2600Hz
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyKyle Drake
 
Bringing choas to order in your node.js app
Bringing choas to order in your node.js appBringing choas to order in your node.js app
Bringing choas to order in your node.js appDan Jenkins
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 

Similaire à Rise of the Machines: PHP and IoT - php[world] 2016 (20)

Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017Homer - Workshop at Kamailio World 2017
Homer - Workshop at Kamailio World 2017
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mort
 
Ruby - The Hard Bits
Ruby - The Hard BitsRuby - The Hard Bits
Ruby - The Hard Bits
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF Superpowers
 
Surviving Berlin Winter with JavaScript
Surviving Berlin Winter with JavaScriptSurviving Berlin Winter with JavaScript
Surviving Berlin Winter with JavaScript
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and
 
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутри
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутриJS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутри
JS Fest 2019. Артур Торосян. V8 - взгляд на асинхронность и работу с ОС изнутри
 
Php resque
Php resquePhp resque
Php resque
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
Docker and serverless Randstad Jan 2019: OpenFaaS Serverless: when functions ...
 
Mongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case StudyMongodb and Totsy - E-commerce Case Study
Mongodb and Totsy - E-commerce Case Study
 
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM i
 
Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular Chatbot
 
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017
Build advanced chat bots - Steve Sfartz - Codemotion Amsterdam 2017
 
KazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo ScalabilityKazooCon 2014 - Kazoo Scalability
KazooCon 2014 - Kazoo Scalability
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
 
Bringing choas to order in your node.js app
Bringing choas to order in your node.js appBringing choas to order in your node.js app
Bringing choas to order in your node.js app
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 

Plus de Colin O'Dell

Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021Colin O'Dell
 
Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021Colin O'Dell
 
Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019Colin O'Dell
 
Debugging Effectively - ConFoo Montreal 2019
Debugging Effectively - ConFoo Montreal 2019Debugging Effectively - ConFoo Montreal 2019
Debugging Effectively - ConFoo Montreal 2019Colin O'Dell
 
Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018Colin O'Dell
 
Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018Colin O'Dell
 
Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018Colin O'Dell
 
CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017Colin O'Dell
 
Debugging Effectively - All Things Open 2017
Debugging Effectively - All Things Open 2017Debugging Effectively - All Things Open 2017
Debugging Effectively - All Things Open 2017Colin O'Dell
 
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017Colin O'Dell
 
Debugging Effectively - ZendCon 2016
Debugging Effectively - ZendCon 2016Debugging Effectively - ZendCon 2016
Debugging Effectively - ZendCon 2016Colin O'Dell
 
Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - ZendCon 2016Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - ZendCon 2016Colin O'Dell
 
Hacking Your Way to Better Security - PHP South Africa 2016
Hacking Your Way to Better Security - PHP South Africa 2016Hacking Your Way to Better Security - PHP South Africa 2016
Hacking Your Way to Better Security - PHP South Africa 2016Colin O'Dell
 
Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016Colin O'Dell
 
CommonMark: Markdown done right - Nomad PHP September 2016
CommonMark: Markdown done right - Nomad PHP September 2016CommonMark: Markdown done right - Nomad PHP September 2016
CommonMark: Markdown done right - Nomad PHP September 2016Colin O'Dell
 
Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - Frederick Web Tech 9/6/16Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - Frederick Web Tech 9/6/16Colin O'Dell
 
Debugging Effectively
Debugging EffectivelyDebugging Effectively
Debugging EffectivelyColin O'Dell
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Colin O'Dell
 
Hacking Your Way To Better Security - php[tek] 2016
Hacking Your Way To Better Security - php[tek] 2016Hacking Your Way To Better Security - php[tek] 2016
Hacking Your Way To Better Security - php[tek] 2016Colin O'Dell
 
CommonMark: Markdown Done Right
CommonMark: Markdown Done RightCommonMark: Markdown Done Right
CommonMark: Markdown Done RightColin O'Dell
 

Plus de Colin O'Dell (20)

Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021Demystifying Unicode - Longhorn PHP 2021
Demystifying Unicode - Longhorn PHP 2021
 
Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021Releasing High Quality Packages - Longhorn PHP 2021
Releasing High Quality Packages - Longhorn PHP 2021
 
Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019Releasing High Quality PHP Packages - ConFoo Montreal 2019
Releasing High Quality PHP Packages - ConFoo Montreal 2019
 
Debugging Effectively - ConFoo Montreal 2019
Debugging Effectively - ConFoo Montreal 2019Debugging Effectively - ConFoo Montreal 2019
Debugging Effectively - ConFoo Montreal 2019
 
Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018Automating Deployments with Deployer - php[world] 2018
Automating Deployments with Deployer - php[world] 2018
 
Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018Releasing High-Quality Packages - php[world] 2018
Releasing High-Quality Packages - php[world] 2018
 
Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - DrupalCon Nashville 2018
 
CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017CommonMark: Markdown Done Right - ZendCon 2017
CommonMark: Markdown Done Right - ZendCon 2017
 
Debugging Effectively - All Things Open 2017
Debugging Effectively - All Things Open 2017Debugging Effectively - All Things Open 2017
Debugging Effectively - All Things Open 2017
 
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017Hacking Your Way To Better Security - DrupalCon Baltimore 2017
Hacking Your Way To Better Security - DrupalCon Baltimore 2017
 
Debugging Effectively - ZendCon 2016
Debugging Effectively - ZendCon 2016Debugging Effectively - ZendCon 2016
Debugging Effectively - ZendCon 2016
 
Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - ZendCon 2016Hacking Your Way to Better Security - ZendCon 2016
Hacking Your Way to Better Security - ZendCon 2016
 
Hacking Your Way to Better Security - PHP South Africa 2016
Hacking Your Way to Better Security - PHP South Africa 2016Hacking Your Way to Better Security - PHP South Africa 2016
Hacking Your Way to Better Security - PHP South Africa 2016
 
Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Europe 2016
 
CommonMark: Markdown done right - Nomad PHP September 2016
CommonMark: Markdown done right - Nomad PHP September 2016CommonMark: Markdown done right - Nomad PHP September 2016
CommonMark: Markdown done right - Nomad PHP September 2016
 
Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - Frederick Web Tech 9/6/16Debugging Effectively - Frederick Web Tech 9/6/16
Debugging Effectively - Frederick Web Tech 9/6/16
 
Debugging Effectively
Debugging EffectivelyDebugging Effectively
Debugging Effectively
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
 
Hacking Your Way To Better Security - php[tek] 2016
Hacking Your Way To Better Security - php[tek] 2016Hacking Your Way To Better Security - php[tek] 2016
Hacking Your Way To Better Security - php[tek] 2016
 
CommonMark: Markdown Done Right
CommonMark: Markdown Done RightCommonMark: Markdown Done Right
CommonMark: Markdown Done Right
 

Dernier

PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 

Dernier (20)

PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 

Rise of the Machines: PHP and IoT - php[world] 2016

  • 1. Rise of the Machines: PHP & IoT php[world] 2016 @colinodell - joind.in/talk/18676
  • 2. Colin O’Dell • Lead Web Developer at Unleashed Technologies • PHP League Member  league/commonmark  league/html-to-markdown • PHP 7 Upgrade Guide e-book • Arduino / RasPi / 3D printing Enthusiast @colinodell - joind.in/talk/18676
  • 3. Internet of Things The Internet of Things is the internetworking of physical devices, vehicles, buildings and other items—embedded with electronics, software, sensors, actuators, and network connectivity that enable these objects to collect and exchange data. - https://en.wikipedia.org/wiki/Internet_of_things @colinodell - joind.in/talk/18676
  • 4. Internet of Things The Internet of Things is the internetworking of physical devices, vehicles, buildings and other items—embedded with electronics, software, sensors, actuators, and network connectivity that enable these objects to collect and exchange data. - https://en.wikipedia.org/wiki/Internet_of_things @colinodell - joind.in/talk/18676
  • 6. Connectivity • Ethernet / WiFi • NFC / RFID • Bluetooth LE • Zigbee / Z-Wave • Cellular (LTE / CDMA / GSM) • And many others @colinodell - joind.in/talk/18676
  • 7. 0 10 20 30 40 50 60 2003 2010 2015 2020 (Billions) Population vs Connected Devices People Connected Devices @colinodell - joind.in/talk/18676Source: https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf
  • 9. Today’s Agenda • Device overview • Four examples of combining IoT with PHP  Project Goals  Hardware & Platform Choice  Building the device  Demo • Q&A @colinodell - joind.in/talk/18676
  • 10. DIY IoT Devices For the software or hardware enthusiast @colinodell - joind.in/talk/18676
  • 12. How to choose? • Identify required features • Ideal programming language • Consider power requirements • Size / footprint @colinodell - joind.in/talk/18676
  • 13. Four Examples Using PHP @colinodell - joind.in/talk/18676
  • 14. Uptime Monitor Use Raspberry Pi to monitor if site is up; change LED color accordingly
  • 15. Why Raspberry Pi? • Runs Linux (Raspian – a derivative of Debian) • Has GPIO pins • PHP easily installed • Raspberry Pi Zero only $5 • Handles HTTPs out-of-the-box • Why not? @colinodell - joind.in/talk/18676
  • 16. Hardware @colinodell - joind.in/talk/18676 • Raspberry Pi (any variant) • Micro USB cable (power) • USB WiFi dongle • RGB LED • Two resistors • Wires
  • 17. RGB LEDs @colinodell - joind.in/talk/18676
  • 19. @colinodell - joind.in/talk/18676 $ composer require piphp/gpio
  • 20. @colinodell - joind.in/talk/18676 <?php const URL = 'https://www.colinodell.com'; const GPIO_PIN_GREEN = 12; const GPIO_PIN_RED = 16; require_once 'vendor/autoload.php'; $gpio = new PiPHPGPIOGPIO(); $greenLed = $gpio->getOutputPin(GPIO_PIN_GREEN); $redLed = $gpio->getOutputPin(GPIO_PIN_RED); $httpClient = new GuzzleHttpClient(); while (true) { try { $response = $httpClient->head(URL, [ 'connect_timeout' => 3, 'timeout' => 3, ]); echo URL . " is onlinen"; $greenLed->setValue(1); $redLed->setValue(0); } catch (RuntimeException $ex) { echo URL . " is OFFLINE!n"; $greenLed->setValue(0); $redLed->setValue(1); } sleep(3); }
  • 21. Recap • PHP on a Raspberry Pi • PHP checks if site is up • PiPHP/GPIO library used to control output pins (LEDs) Other uses for output pins: • Control motors/servos • Control relays (turn higher-voltage things on/off) • Drive digital displays (LCD screens, LED number displays, etc.) @colinodell - joind.in/talk/18676
  • 22. Conference Room Occupancy Sensor Raspberry Pi detects movement in room; sends room status to Slack @colinodell - joind.in/talk/18676
  • 23. Why Raspberry Pi? • Runs Linux (Raspian – a derivative of Debian) • Has GPIO pins • PHP easily installed • Raspberry Pi Zero only $5 • Handles HTTPs out-of-the-box • Why not? @colinodell - joind.in/talk/18676 TL;DR: Same reasons as before!
  • 24. Hardware @colinodell - joind.in/talk/18676 • Raspberry Pi (any variant) • Micro USB cable (power) • USB WiFi dongle • PIR Sensor • Wires
  • 25. PIR Sensors @colinodell - joind.in/talk/18676Images from https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview
  • 28. Signal @colinodell - joind.in/talk/18676 Motion Detected Occupied Vacant Occupied
  • 29. @colinodell - joind.in/talk/18676 <?php namespace ColinODellPHPIoTExamplesPHPPIRSensor; class Room { /** * @var bool */ private $occupied = false; /** * @var int */ private $lastMovement; /** * @var callable */ private $onRoomStateChange; /** * @var int */ private $roomEmptyTimeout; /**
  • 30. @colinodell - joind.in/talk/18676 <?php // Configuration: const GPIO_PIN = 17; const DECLARE_ROOM_EMPTY_AFTER = 60*5; // 5 minutes const SLACK_INCOMING_WEBHOOK_URL = 'https://hooks.slack.com/services/xxxx/xxxx/xxxx'; // End configuration require_once 'vendor/autoload.php'; use ColinODellPHPIoTExamplesPHPPIRSensorRoom; use PiPHPGPIOGPIO; use PiPHPGPIOPinInputPinInterface; // HTTP client for communicating with Slack $http = new GuzzleHttpClient(); // Instantiate a new room object to keep track of its state $room = new Room(); $room->setRoomEmptyTimeout(DECLARE_ROOM_EMPTY_AFTER); $room->setOnRoomChangeCallback(function($isOccupied) use ($http) { $message = 'The conference room is now ' . ($isOccupied ? 'occupied.' : 'vacant.'); $http->postAsync(SLACK_INCOMING_WEBHOOK_URL, [
  • 32. Recap • PHP on a Raspberry Pi • PiPHP/GPIO library monitors GPIO pin for signal changes • PHP tracks duration between rising edges (low-to-high signal changes) • Notifications pushed to Slack via webhook Other uses for input pins: • Switches & buttons • Sensors (temperature, humidity, motion, accelerometer, GPS) • Receiving data from other devices @colinodell - joind.in/talk/18676
  • 33. Alexa Custom Skill Use PHP + Laravel to handle request for php[world] session information @colinodell - joind.in/talk/18676
  • 34. Why Alexa / Amazon Echo? • Amazon handles voice recognition • Parsed request passed from Amazon to our API endpoint • We handle accordingly; send formatted response for Alexa to read aloud • Published skills easily installable @colinodell - joind.in/talk/18676
  • 35. User Interaction Flow @colinodell - joind.in/talk/18676Diagram from https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/overviews/understanding-custom-skills
  • 36. Invoking Custom Skills • Ask [skill name] [action] Ask PHP World which sessions are next • Tell [skill name] [action] Tell PHP World this talk is great • [action] using [skill name] Rate this talk 5 stars using PHP World @colinodell - joind.in/talk/18676
  • 37. Actions • What sessions are next? • What session is next in {room}? • What sessions are at {time} in {room}? • Who is speaking in {room} {day} at {time}? @colinodell - joind.in/talk/18676
  • 38. Defining Actions GetSessions what sessions are next GetSessions what talks are next GetSessions who is talking next GetSessions who is speaking next GetSessions which sessions are next GetSessions which talks are next GetSessions what session is next in {room} GetSessions what talk is next in {room} GetSessions who is talking next in {room} GetSessions who is speaking next in {room} GetSessions which session is next in {room} GetSessions which talk is next in {room} GetSessions what sessions are at {time} GetSessions what talks are at {time} GetSessions who is talking at {time} GetSessions who is speaking at {time} GetSessions which sessions are at {time} GetSessions which talks are at {time} GetSessions what sessions are at {time} {day} GetSessions what talks are at {time} {day} GetSessions who is talking at {time} {day} GetSessions who is speaking at {time} {day} GetSessions which sessions are at {time} {day} GetSessions which talks are at {time} {day} GetSessions what session is in {room} at {time} GetSessions what talk is in {room} at {time} GetSessions who is talking in {room} at {time} GetSessions who is speaking in {room} at {time} GetSessions which session is in {room} at {time} GetSessions which talk is in {room} at {time} GetSessions what session is in {room} at {time} {day} GetSessions what talk is in {room} at {time} {day} GetSessions who is talking in {room} at {time} {day} GetSessions who is speaking in {room} at {time} {day} GetSessions which session is in {room} at {time} {day} GetSessions which talk is in {room} at {time} {day} GetSessions what session is {day} in {room} at {time} GetSessions what talk is {day} in {room} at {time} GetSessions who is talking {day} in {room} at {time} GetSessions who is speaking {day} in {room} at {time} GetSessions which session {day} is in {room} at {time} GetSessions which talk {day} is in {room} at {time} @colinodell - joind.in/talk/18676
  • 39. Intent Schema @colinodell - joind.in/talk/18676 { "intents": [ { "intent": "GetSessions", "slots": [ { "name": "day", "type": "AMAZON.DATE" }, { "name": "time", "type": "AMAZON.TIME" }, { "name": "room", "type": "ROOM" } ] }, { "intent": "AMAZON.HelpIntent" } ] } Fairfax Great Falls Potomac Ash Grove A Ash Grove B Ash Grove C
  • 40. @colinodell - joind.in/talk/18676 $ composer require develpr/alexa-app AlexaRoute::intent('/alexa-end-point', 'GetDeveloperJoke', function(){ Alexa::say("A SQL query goes into a bar, walks up to two tables and asks, "Can I join you?""); });
  • 41. @colinodell - joind.in/talk/18676 <?php namespace AppConsoleCommands; use CarbonCarbon; use IlluminateSupportFacadesDB; use GuzzleHttpClient; use IlluminateConsoleCommand; class ImportScheduleCommand extends Command { protected $signature = 'import:schedule'; protected $description = 'Imports the php[world] schedule from the conference website.'; public function handle() { // Manually scraped from the site by viewing the AJAX requests for each day $timestamps = [1479081600, 1479168000, 1479254400, 1479340800, 1479427200]; foreach ($timestamps as $timestamp) { $this->importSchedule($timestamp); } } private function importSchedule($timestamp) { $client = new Client([ 'base_uri' => '', 'timeout' => 10, ]); $response = $client->post('https://world.phparch.com/wp-admin/admin-ajax.php', [ 'form_params' => [ 'action' => 'get_schedule', 'data-timestamp' => $timestamp, 'data-location' => 0, 'data-track' => 0,
  • 42. @colinodell - joind.in/talk/18676 <?php namespace AppHttpControllers; use CarbonCarbon; use DevelprAlexaAppFacadesAlexa; use DevelprAlexaAppRequestAlexaRequest; use IlluminateDatabaseQueryBuilder; use IlluminateSupportFacadesDB; class SessionController extends Controller { public function getSessions(AlexaRequest $request) { $request->getIntent(); $time = $request->slot('time') ?: Carbon::now()->format('G:i'); $day = $request->slot('day') ?: Carbon::now()->format('Y-m-d'); $room = $request->slot('room'); try { $sessions = $this->findSessions($time, $day, $room); if (count($sessions) === 0) { // No sessions found return Alexa::say('Sorry, I couldn't find any sessions on ' . $day . ' at ' . $time)->endSession(); } elseif (count($sessions) === 1) { return Alexa::say($this->getSessionText(reset($sessions)))->endSession();; } else { $text = 'I found ' . count($sessions) . ' sessions. '; foreach ($sessions as $session) {
  • 43. @colinodell - joind.in/talk/18676 <?php // app/Http/routes.php AlexaRoute::intent('/alexa', 'GetSessions', 'AppHttpControllersSessionController@getSessions');
  • 44. Recap • Alexa parses voice request; passes to PHP • Laravel application handles requests; returns response • Alexa renders responses as voice and/or cards Other uses for Alexa: • Querying for information • Interactive sessions (online ordering, games, etc.) • Home automation @colinodell - joind.in/talk/18676
  • 45. Packagist Download Counter Displaying downloads counts from the Packagist API with Particle Photon
  • 46. Particle Photon @colinodell - joind.in/talk/18676 • WiFi built in • Small footprint • Can be powered via MicroUSB • Enough digital GPIO pins • Programmable via web-based IDE • OTA flashing • Built-in webhook support
  • 47. Hardware @colinodell - joind.in/talk/18676 • Particle Photon • MAX7219 8-Digit Red LED Display Module • Micro USB cable (power) • Wires
  • 48. MAX7219 8-Digit Red LED Display Module @colinodell - joind.in/talk/18676Images from https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview
  • 53. Problem! • JSON document is 32.5 KB • Photon webhook responses are 512-byte chunks spaced 250ms apart @colinodell - joind.in/talk/18676
  • 54. Problem! • JSON document is 32.5 KB • Photon webhook responses are 512-byte chunks spaced 250ms apart @colinodell - joind.in/talk/18676 Solution! • Use Yahoo YQL to reduce response size
  • 55. Problem! • JSON document is 32.5 KB • Photon webhook responses are 512-byte chunks spaced 250ms apart @colinodell - joind.in/talk/18676 Solution! • Use Yahoo YQL to reduce response size • Use PHP to parse JSON, return just one number
  • 56. packagist-counter.php @colinodell - joind.in/talk/18676 <?php const URL = 'https://packagist.org/packages/league/commonmark.json'; $json = json_decode(file_get_contents(URL), true); header('Content-Type: text/plain'); echo $json['package']['downloads']['total'];
  • 61. Recap • Particle Photon + 8 digit LED display • Particle webhook fetches data from packagist-counter.php • packagist-counter.php fetches from packagist.org; trims out the fat @colinodell - joind.in/talk/18676
  • 63. Summary • IoT is everywhere! • PHP can bridge the gap • Run PHP:  On the device (RasPi examples)  In “the cloud” (Alexa; Particle Photon)  Or both! • Anyone can build web-connected devices @colinodell - joind.in/talk/18676
  • 65. Thanks! Slides/Feedback: http://joind.in/talk/18676 Project Source Code / Documentation: https://github.com/colinodell/php-iot-examples @colinodell - joind.in/talk/18676

Notes de l'éditeur

  1. EXAMPLES
  2. Power everything with PHP
  3. Red – 2.0V Blue/Green – 3.2 V
  4. Red – 2.0V Blue/Green – 3.2 V
  5. ASK ALEXA!!!