SlideShare a Scribd company logo
1 of 31
Download to read offline
PHP in a Whole New World
Desktop Applications Built in PHP-GTK




                              Ben Ramsey
What Is PHP-GTK?
•   PHP extension
•   Language bindings for GTK+
•   OO Interface to GTK+ classes
•   Way to create cross-platform, portable
    GUI applications in PHP




                                        Ben Ramsey
What Is GTK+?
• Stands for “GIMP Tool Kit”
 (originally developed for the GNU Image Manipulation Program, or GIMP)

• C library used to create graphical user
  interfaces
• Central part of Gnome desktop on
  Linux, but libraries ported to Windows




                                                                  Ben Ramsey
Why PHP-GTK?
• Originally a proof-of-concept (inspired
  by PyGTK) to show that it could be
  done
• Because PHP isn’t just for the Web
  anymore
• If you need a GUI application, why not
  use your favorite language?



                                       Ben Ramsey
What this talk is not...
• Discussion on the GTK+ bindings that
  are the core of PHP-GTK
• Instructions on how to install PHP-GTK
• Introduction to PHP-GTK 2
 (that was yesterday and you missed it)




                                          Ben Ramsey
Overview
• Tutorial: pedit
• Applications:
  •   PHP-GTK Manual Browser
  •   Tulip
  •   Agata Report
  •   Deep Dungeons RPG




                               Ben Ramsey
A Brief Tutorial: pedit
• pedit is a simple text editor
• It can open text files, modify, and save
  them
• It can copy, paste, and cut
• That’s it--I said it’s simple




                                        Ben Ramsey
A Look At pedit




                  Ben Ramsey
The Code Behind pedit
<?php
if (!extension_loaded('gtk')) {
    dl('php_gtk.' . PHP_SHLIB_SUFFIX);
}
...
$w =& new GtkWindow();
$w->set_title('Untitled');
$w->set_usize(800, 600);
$w->connect_object('destroy', array('Gtk', 'main_quit'));
$w->connect('delete-event', create_function('', 'return false;'));
...
$w->show_all();

Gtk::main();
?>




                                                               Ben Ramsey
pedit’s Menu Code
<?php
/* Application menu bar */
$menu =& new GtkMenuBar();
$box->pack_start($menu, false, false);

/* File menu */
$file =& new GtkMenuItem('File');
$menu->append($file);

$file_menu =& new GtkMenu();

...

$save =& new GtkMenuItem('Save');
$save->connect('activate', 'save_file');
$file_menu->append($save);
?>



                                           Ben Ramsey
pedit’s Text Editor Code
<?php
$text_area =& new GtkHBox();
$box->pack_start($text_area);
...
/* Editable text field */
$textpad =& new GtkText();
$textpad->set_editable(true);
$textpad->set_style($textpad_style);
$textpad->set_line_wrap(false);
$textpad->set_word_wrap(false);
$textpad->connect('changed', 'text_changed');
$text_area->pack_start($textpad);

/* Vertical scrollbar */
$textpad_vadj = $textpad->vadj;
$textpad_vscrollbar =& new GtkVScrollbar($textpad_vadj);
$text_area->pack_end($textpad_vscrollbar, false);
?>


                                                           Ben Ramsey
pedit’s Actions
<?php
function save_file()
{
    global $text_changed, $loaded_file, $textpad, $w;
    if (!is_null($loaded_file)) {
         $bytes = file_put_contents($loaded_file, $textpad->get_chars(0, -1));
         if ($bytes === false) {
             save_error_dialog();
         } else {
             $text_changed = false;
             $w->set_title($loaded_file);
         }
    }
    else
    {
         file_save_dialog();
    }
    return true;
}
?>




                                                                           Ben Ramsey
PHP-GTK Manual Browser
• PHP-GTK application
• Allows you to easily browse the PHP-
  GTK manual
• Reads PHP-GTK manual HTML files
  and displays them, so it acts somewhat
  like a Web browser




                                     Ben Ramsey
PHP-GTK Manual Browser




                     Ben Ramsey
Tulip
• PHP-GTK based IDE for writing PHP
  applications
• Allows you to set up projects
• CVS controls (create, modify, and
  remove files from a remote server
  seamlessly)
• File-locking feature for added security
  when working in a networked
  environment
                                       Ben Ramsey
Tulip
• Auto-completion of PHP code
• Syntax highlighting and syntax hints
• Standard editing features (copy, cut,
  paste, search, go to, etc.)
• Embedded database navigator to
  access MySQL or PostgreSQL, make
  queries and edit or delete records


                                      Ben Ramsey
Tulip




        Ben Ramsey
Tulip




        Ben Ramsey
Tulip




        Ben Ramsey
Tulip




        Ben Ramsey
Agata Report
• Cross-platform database reporting tool
• Graph generation
• Query tool
• Support for multiple databases
  (PostgreSQL, MySQL, MSSQL, Oracle,
  etc.)
• Multiple export formats (text, HTML,
  XML, PDF, CSV, etc.)

                                     Ben Ramsey
Agata Report
• Define levels, subtotals, and a grand
  total for the report
• Merge data into a document
• Generate address labels
• Generate a relationship diagram of the
  database
• Not a database management tool; just
  a tool for reporting

                                      Ben Ramsey
Agata Report




               Ben Ramsey
Agata Report




               Ben Ramsey
Agata Report




               Ben Ramsey
Agata Report




               Ben Ramsey
Deep Dungeons RPG
• Classic RPG (role-playing game)
  written in PHP with the PHP-GTK
  extension
• Not very complex, but includes NPCs
  (non-player characters) you can interact
  with
• Includes monsters to fight
• Keeps track of your stats and hit points

                                      Ben Ramsey
Deep Dungeons RPG




                    Ben Ramsey
PHP-GTK Pitfalls
• Portable in theory, not in practice
• PHP speed good enough for the
  “Web problem;” not fast enough for
  desktop (Parrot?)
• Compiler for single executable/binary?
  (Roadsend, PriadoBlender?)




                                      Ben Ramsey
What’s Next?
• PHP-GTK 2 with PHP 5
  (binds GTK+ 2 libraries with PHP 5)
• PHP 6 on Parrot? (BIG “maybe”)




                                        Ben Ramsey
For more information...
•   PHP-GTK: http://gtk.php.net
•   GTK+: http://gtk.org
•   pedit: http://pedit.sourceforge.net
•   Tulip: http://tulip.solis.coop.br
•   Agata Report: http://www.agata.org.br
•   Deep Dungeons: http://deepdungeons.sf.net
•   Roadsend Compiler: http://roadsend.com
•   PriadoBlender: http://priadoblender.com

Questions?

                                                Ben Ramsey

More Related Content

What's hot

Fast & Scalable Front/Back-ends using Ruby, Rails & XMPP
Fast & Scalable Front/Back-ends using Ruby, Rails & XMPPFast & Scalable Front/Back-ends using Ruby, Rails & XMPP
Fast & Scalable Front/Back-ends using Ruby, Rails & XMPPPradeep Elankumaran
 
Fluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API DetailsFluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API DetailsSATOSHI TAGOMORI
 
Synapse india reviews on php website development
Synapse india reviews on php website developmentSynapse india reviews on php website development
Synapse india reviews on php website developmentsaritasingh19866
 
Web Development: The Next Five Years
Web Development: The Next Five YearsWeb Development: The Next Five Years
Web Development: The Next Five Yearssneeu
 
20090629 Using phpDocumentor
20090629 Using phpDocumentor20090629 Using phpDocumentor
20090629 Using phpDocumentorRimpei Ogawa
 
Build Your Own Tools
Build Your Own ToolsBuild Your Own Tools
Build Your Own ToolsShugo Maeda
 
PHP client - Mongo db User Group Pune
PHP client - Mongo db User Group PunePHP client - Mongo db User Group Pune
PHP client - Mongo db User Group PuneNishant Shrivastava
 
Front End Development Automation with Grunt
Front End Development Automation with GruntFront End Development Automation with Grunt
Front End Development Automation with GruntLadies Who Code
 
Current status of PSR - Phpblt1
Current status of PSR - Phpblt1Current status of PSR - Phpblt1
Current status of PSR - Phpblt1Yui Sakamoto
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themeswpnepal
 
Introduction to protocol buffer
Introduction to protocol bufferIntroduction to protocol buffer
Introduction to protocol bufferTim (文昌)
 
Introduction to programming - class 8
Introduction to programming - class 8Introduction to programming - class 8
Introduction to programming - class 8Paul Brebner
 
Vinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress siteVinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress sitewpnepal
 
The future of server side JavaScript
The future of server side JavaScriptThe future of server side JavaScript
The future of server side JavaScriptOleg Podsechin
 
Linux Apache Php Mysql Lamp1273
Linux Apache Php Mysql Lamp1273Linux Apache Php Mysql Lamp1273
Linux Apache Php Mysql Lamp1273hussulinux
 

What's hot (16)

Fast & Scalable Front/Back-ends using Ruby, Rails & XMPP
Fast & Scalable Front/Back-ends using Ruby, Rails & XMPPFast & Scalable Front/Back-ends using Ruby, Rails & XMPP
Fast & Scalable Front/Back-ends using Ruby, Rails & XMPP
 
Fluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API DetailsFluentd v0.14 Plugin API Details
Fluentd v0.14 Plugin API Details
 
Synapse india reviews on php website development
Synapse india reviews on php website developmentSynapse india reviews on php website development
Synapse india reviews on php website development
 
Web Development: The Next Five Years
Web Development: The Next Five YearsWeb Development: The Next Five Years
Web Development: The Next Five Years
 
20090629 Using phpDocumentor
20090629 Using phpDocumentor20090629 Using phpDocumentor
20090629 Using phpDocumentor
 
Build Your Own Tools
Build Your Own ToolsBuild Your Own Tools
Build Your Own Tools
 
PHP client - Mongo db User Group Pune
PHP client - Mongo db User Group PunePHP client - Mongo db User Group Pune
PHP client - Mongo db User Group Pune
 
Front End Development Automation with Grunt
Front End Development Automation with GruntFront End Development Automation with Grunt
Front End Development Automation with Grunt
 
Current status of PSR - Phpblt1
Current status of PSR - Phpblt1Current status of PSR - Phpblt1
Current status of PSR - Phpblt1
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themes
 
Introduction to protocol buffer
Introduction to protocol bufferIntroduction to protocol buffer
Introduction to protocol buffer
 
Introduction to programming - class 8
Introduction to programming - class 8Introduction to programming - class 8
Introduction to programming - class 8
 
Golang
GolangGolang
Golang
 
Vinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress siteVinay Paudel: Optimizing and Speeding up a WordPress site
Vinay Paudel: Optimizing and Speeding up a WordPress site
 
The future of server side JavaScript
The future of server side JavaScriptThe future of server side JavaScript
The future of server side JavaScript
 
Linux Apache Php Mysql Lamp1273
Linux Apache Php Mysql Lamp1273Linux Apache Php Mysql Lamp1273
Linux Apache Php Mysql Lamp1273
 

Similar to PHP-GTK

Php Inside - confoo 2011 - Derick Rethans
Php Inside -  confoo 2011 - Derick RethansPhp Inside -  confoo 2011 - Derick Rethans
Php Inside - confoo 2011 - Derick RethansBachkoutou Toutou
 
Php on the Web and Desktop
Php on the Web and DesktopPhp on the Web and Desktop
Php on the Web and DesktopElizabeth Smith
 
Building a fully API-based platform on top of cPanel
Building a fully API-based platform on top of cPanelBuilding a fully API-based platform on top of cPanel
Building a fully API-based platform on top of cPanelDominic Lüchinger
 
6 3 tier architecture php
6 3 tier architecture php6 3 tier architecture php
6 3 tier architecture phpcefour
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppttruptitasol
 

Similar to PHP-GTK (20)

Php Inside - confoo 2011 - Derick Rethans
Php Inside -  confoo 2011 - Derick RethansPhp Inside -  confoo 2011 - Derick Rethans
Php Inside - confoo 2011 - Derick Rethans
 
Php on the Web and Desktop
Php on the Web and DesktopPhp on the Web and Desktop
Php on the Web and Desktop
 
Building a fully API-based platform on top of cPanel
Building a fully API-based platform on top of cPanelBuilding a fully API-based platform on top of cPanel
Building a fully API-based platform on top of cPanel
 
6 3 tier architecture php
6 3 tier architecture php6 3 tier architecture php
6 3 tier architecture php
 
Php
PhpPhp
Php
 
test
testtest
test
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
ssfsd fsdf ds f
ssfsd fsdf ds fssfsd fsdf ds f
ssfsd fsdf ds f
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
ssfsd fsdf ds f
ssfsd fsdf ds fssfsd fsdf ds f
ssfsd fsdf ds f
 
ssfsd fsdf ds f
ssfsd fsdf ds fssfsd fsdf ds f
ssfsd fsdf ds f
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
ssfsd fsdf ds f
ssfsd fsdf ds fssfsd fsdf ds f
ssfsd fsdf ds f
 
ssfsd fsdf ds f
ssfsd fsdf ds fssfsd fsdf ds f
ssfsd fsdf ds f
 
IntroductiontoPHP.ppt
IntroductiontoPHP.pptIntroductiontoPHP.ppt
IntroductiontoPHP.ppt
 
hgfgf
hgfgfhgfgf
hgfgf
 

More from tutorialsruby

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>tutorialsruby
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />tutorialsruby
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008tutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheetstutorialsruby
 

More from tutorialsruby (20)

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0Standardization and Knowledge Transfer – INS0
Standardization and Knowledge Transfer – INS0
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml_basics
xhtml_basicsxhtml_basics
xhtml_basics
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
xhtml-documentation
xhtml-documentationxhtml-documentation
xhtml-documentation
 
CSS
CSSCSS
CSS
 
CSS
CSSCSS
CSS
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
HowTo_CSS
HowTo_CSSHowTo_CSS
HowTo_CSS
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
BloggingWithStyle_2008
BloggingWithStyle_2008BloggingWithStyle_2008
BloggingWithStyle_2008
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 
cascadingstylesheets
cascadingstylesheetscascadingstylesheets
cascadingstylesheets
 

Recently uploaded

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
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 AutomationSafe Software
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
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 interpreternaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
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.pptxHampshireHUG
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
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
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

PHP-GTK

  • 1. PHP in a Whole New World Desktop Applications Built in PHP-GTK Ben Ramsey
  • 2. What Is PHP-GTK? • PHP extension • Language bindings for GTK+ • OO Interface to GTK+ classes • Way to create cross-platform, portable GUI applications in PHP Ben Ramsey
  • 3. What Is GTK+? • Stands for “GIMP Tool Kit” (originally developed for the GNU Image Manipulation Program, or GIMP) • C library used to create graphical user interfaces • Central part of Gnome desktop on Linux, but libraries ported to Windows Ben Ramsey
  • 4. Why PHP-GTK? • Originally a proof-of-concept (inspired by PyGTK) to show that it could be done • Because PHP isn’t just for the Web anymore • If you need a GUI application, why not use your favorite language? Ben Ramsey
  • 5. What this talk is not... • Discussion on the GTK+ bindings that are the core of PHP-GTK • Instructions on how to install PHP-GTK • Introduction to PHP-GTK 2 (that was yesterday and you missed it) Ben Ramsey
  • 6. Overview • Tutorial: pedit • Applications: • PHP-GTK Manual Browser • Tulip • Agata Report • Deep Dungeons RPG Ben Ramsey
  • 7. A Brief Tutorial: pedit • pedit is a simple text editor • It can open text files, modify, and save them • It can copy, paste, and cut • That’s it--I said it’s simple Ben Ramsey
  • 8. A Look At pedit Ben Ramsey
  • 9. The Code Behind pedit <?php if (!extension_loaded('gtk')) { dl('php_gtk.' . PHP_SHLIB_SUFFIX); } ... $w =& new GtkWindow(); $w->set_title('Untitled'); $w->set_usize(800, 600); $w->connect_object('destroy', array('Gtk', 'main_quit')); $w->connect('delete-event', create_function('', 'return false;')); ... $w->show_all(); Gtk::main(); ?> Ben Ramsey
  • 10. pedit’s Menu Code <?php /* Application menu bar */ $menu =& new GtkMenuBar(); $box->pack_start($menu, false, false); /* File menu */ $file =& new GtkMenuItem('File'); $menu->append($file); $file_menu =& new GtkMenu(); ... $save =& new GtkMenuItem('Save'); $save->connect('activate', 'save_file'); $file_menu->append($save); ?> Ben Ramsey
  • 11. pedit’s Text Editor Code <?php $text_area =& new GtkHBox(); $box->pack_start($text_area); ... /* Editable text field */ $textpad =& new GtkText(); $textpad->set_editable(true); $textpad->set_style($textpad_style); $textpad->set_line_wrap(false); $textpad->set_word_wrap(false); $textpad->connect('changed', 'text_changed'); $text_area->pack_start($textpad); /* Vertical scrollbar */ $textpad_vadj = $textpad->vadj; $textpad_vscrollbar =& new GtkVScrollbar($textpad_vadj); $text_area->pack_end($textpad_vscrollbar, false); ?> Ben Ramsey
  • 12. pedit’s Actions <?php function save_file() { global $text_changed, $loaded_file, $textpad, $w; if (!is_null($loaded_file)) { $bytes = file_put_contents($loaded_file, $textpad->get_chars(0, -1)); if ($bytes === false) { save_error_dialog(); } else { $text_changed = false; $w->set_title($loaded_file); } } else { file_save_dialog(); } return true; } ?> Ben Ramsey
  • 13. PHP-GTK Manual Browser • PHP-GTK application • Allows you to easily browse the PHP- GTK manual • Reads PHP-GTK manual HTML files and displays them, so it acts somewhat like a Web browser Ben Ramsey
  • 15. Tulip • PHP-GTK based IDE for writing PHP applications • Allows you to set up projects • CVS controls (create, modify, and remove files from a remote server seamlessly) • File-locking feature for added security when working in a networked environment Ben Ramsey
  • 16. Tulip • Auto-completion of PHP code • Syntax highlighting and syntax hints • Standard editing features (copy, cut, paste, search, go to, etc.) • Embedded database navigator to access MySQL or PostgreSQL, make queries and edit or delete records Ben Ramsey
  • 17. Tulip Ben Ramsey
  • 18. Tulip Ben Ramsey
  • 19. Tulip Ben Ramsey
  • 20. Tulip Ben Ramsey
  • 21. Agata Report • Cross-platform database reporting tool • Graph generation • Query tool • Support for multiple databases (PostgreSQL, MySQL, MSSQL, Oracle, etc.) • Multiple export formats (text, HTML, XML, PDF, CSV, etc.) Ben Ramsey
  • 22. Agata Report • Define levels, subtotals, and a grand total for the report • Merge data into a document • Generate address labels • Generate a relationship diagram of the database • Not a database management tool; just a tool for reporting Ben Ramsey
  • 23. Agata Report Ben Ramsey
  • 24. Agata Report Ben Ramsey
  • 25. Agata Report Ben Ramsey
  • 26. Agata Report Ben Ramsey
  • 27. Deep Dungeons RPG • Classic RPG (role-playing game) written in PHP with the PHP-GTK extension • Not very complex, but includes NPCs (non-player characters) you can interact with • Includes monsters to fight • Keeps track of your stats and hit points Ben Ramsey
  • 28. Deep Dungeons RPG Ben Ramsey
  • 29. PHP-GTK Pitfalls • Portable in theory, not in practice • PHP speed good enough for the “Web problem;” not fast enough for desktop (Parrot?) • Compiler for single executable/binary? (Roadsend, PriadoBlender?) Ben Ramsey
  • 30. What’s Next? • PHP-GTK 2 with PHP 5 (binds GTK+ 2 libraries with PHP 5) • PHP 6 on Parrot? (BIG “maybe”) Ben Ramsey
  • 31. For more information... • PHP-GTK: http://gtk.php.net • GTK+: http://gtk.org • pedit: http://pedit.sourceforge.net • Tulip: http://tulip.solis.coop.br • Agata Report: http://www.agata.org.br • Deep Dungeons: http://deepdungeons.sf.net • Roadsend Compiler: http://roadsend.com • PriadoBlender: http://priadoblender.com Questions? Ben Ramsey