- Touch The Future with RAD Studio 2010!
- RAD Studio 2010 Touch Gesture Capabilities | Delphi & C++
- C++ Builder Database Development
- Delphi and C++Builder 2010 Touch/Gesture blog posts and videos
|Before you start on your project, use and fill out the following three cards that shall be continually updated: Yellow User (Client) story card, with Date: Story/Number: Description: Estimate Blue Engineering Task Card, with Date: Story/Number: Software engineer: Task estimate: Task description: Green Class card, with Responsibility: Collaboration: Some great online resources for your project: UML Extreme Programming Refactoring JUnit testing PhpUnitTesting Sebastian Bergmann PHPUnit.de Download PHPUnit Unit Testing with PHP githubde Agile Software Development: A gentle introduction Finally ask yourself. Can I use external server scripting libraries like: pear in my project? Can I use external client scripting libraries like: jQuery in my project? Can I use design patterns? Finally: Program to an interface and not to an implementation. books and resources Professional PHP 6|
Kjell Gunnar Bleivik 05.07.2009::: Computing or drawing?
Today, French-Russian mathematician Gromov won the Abel prize for his contribution to differential geometry, curved, that is nonlinear spaces and shapes. Very little in nature is linear. A cloud is non linear. Shapes and curves you draw with your finger on a touchscreen is also nonlinear. Can these curves generate code? Can you build programs by touching a screen with your finger or a pen?
Generalization lifts computing to a more abstract, but at the same time also to a more practical level. If you have read the above PDF document, you would have noted that computing is in a sense reduced to dropping components on a form. Patterns generalizes classes and components generalizes patterns. The next step in the evolution of programming may combine
- Touch screen,
- net clouds
- and component dropping on a form or another graphical object.
- Pointing finger or programming::: The future of computing.
- The mobile revolution.
- Computing::: Grid and cloud.
- The desktop is on the web.
- C++ Web programming::: Porting desktop applications to the web.
- Misha GROMOV
- The Abel Prize.
From object oriented programming, via design patterns, components and abstract visual programming.
You do not wear a sewing pattern. On a modern sewing machine, a mini computer, you may use a lot of predefined patterns. You do not wear a pattern. You wear cloths. Jason E. Sweet defines it like this in the first book on design patterns in PHP.
Design patterns are a template for how to organize your code, so you can take advantage of a tried-and-true design.
""Monkey patching", for anyone who doesnt know, refers to the practice of extending or modifying existing code by changing classes at run-time. It is a powerful technique that has become popular in the Ruby community at least in part because the Ruby language makes it so easy. Any class can be re-opened at any time and amended in any way".
Since PHP is becoming more and more a true object oriented program, the site will also foccus on PHP, since PHP is good enough for a lot of web programming tasks like delivering web services. If you are used to writing HTML and designing in CSS, PHP is also a natural next step in your learning cycle. If you combine PHP with a simple database as e.g. MySQL you are also able to make your own content management system and develope proffessional databasedriven ecommerce sites. If the only tool you have is a hammer, everything soon starts to look like a nail. Use the simplest (and most efficient) technique to solve a specfic problem.Use the simplest (and most efficient) technique to solve a specfic problem.
In the mide 1990's I wrote some fairly advanced classes that you find in the C++ subforum on ForumNorway. Some of the code examples illustrate the use of templates and are fairly compact. The code is well documented and may be worth a study if you are writing template based code and generics in C++.
The concept of object oriented programming (OOP) has been used and misused in various connections. A lot of programming languages claim to be object oriented. Abstraction is a central element in OOP. Four basic principles defines the object oriented approach to abstraction. These are:
- data abstraction
- behaviour sharing
- evolution and
These are the same as used in what we will call a classic book on OOP, Blair et. al. (1991) page 6. When you have read the first 5 chapters of this book, you will have understood that it is meaningless to try to define object oriented programming. Instead a design space for OOP is constructed along four dimensions
- Polymorphism (flexible sharing).
This framework bridges the gap between OOP principles and OOP technologies.
Note that there are alternatives to classes like actors and prototypes. Class based OO languages emphasize structural abstraction. Actor languages are primarily concerned with the communication structure of interacting process. Actors are basically computational agents that communicate via delegation. This is a more flexible form for behaviour sharing than inheritance. Each object or prototype defines its own type.
Binding is very important in OOP. There is a difference between dynamic and static binding. C++ code are for instance compiled, while PHP is a preprocessor or interpreter. Interpreted code is more flexible. Think of compiled code as a fixed table in memory. Interpreted code may be thought of as a more flexible space in memory that lives when the application is run. PHP is a loosely typed language and in version 5 it has become more OO. So go for PHP 5.0 and above.
PHP 5.3.0 Released:
Before you start with PHP, you should read the PHP License. It has been said that the PHP manual can be read as a book. Here is the manual, some important chapters and other resources:
- How to change configuration settings Don't get lost in the forest and make your code portable
- Reserved variables E.G. $_SERVER tells you a lot about your webserver, like $_SERVER['DOCUMENT_ROOT']. Important to know that to configure your system properly.
- Execution Operators
- PHP Security
- Heredoc syntax
- The devil is in the details
- PHP Manaul Do not shoot sparrows with cannons. Know your toolbox(es).
- Predefined variables You should know all of these and what they can do for you. They are important in any dynamic site where you need user interaction etc.
- Arrays Using structure on your site folders, include files and arrays you do not always need a database. Example large image and / or movie files are better stored in (secure folders, even on a different server) than in a database. Large files in a database reduce the efficiency of your program. If you need a database, store the name in the database if possible and the file in a folder.
- Scope Know where you are. Super global scope is different from function and class scope.
- Constants Define constants at the top of your file. Do not use variables when something is constant.
- PHP Data Objects (PDO) extension functions
- PDO: Package information
- Classes and Objects (PHP 4)
- Classes and Objects (PHP 5)
- Overloading Classes in PHP 5
- New Object Model
- Sitepoint.com: Advanced PHP Resources
- Using Inheritance, Polymorphism and Serialization with PHP Classes
- Reccomended books on OOP in PHP 5
- PHP Essential Training
- PHP History
- Finally name spaces
- Features coming in PHP
- PHP6- Direction of PHP
- PHP/MySQL Tutorial
- Zend PHP Tutorials
- Mesh PHP Developement and integration.
- A help desk application using the Zend framework
- Smarty template engine
- Devarticles: PHP
- Quick E-Commerce with PHP and PayPal
- SitePoint: Recent Articles
- SitePoint: Before you code
- Sitepoint: Newsletter Archives
- Autoloading Objects
- Q & A about Zend Engine II and PHP 5.
- PHP/CURL -- using libcurl with PHP
- PEAR and PECL InfoCenter
- PHP Articles at Zend
- php sessions for storing data
- Book review: Head First Design Patterns
- Build Your Own Database Driven Website Using PHP & MySQL
- Object Oriented PHP: Paging Result Sets
- Object Oriented Programming in PHP: The Way to Large PHP Projects
- Building a Generic Model for the CodeIgniter PHP Framework
- PHP Articles at Zend
- PHP Design Patterns
- Stefan Gabos php scrips, php snippets, php classes, php tutorials, php related news
pear: PHP Extension and Application Repository
- What is PEAR?
- Stig Bakken: pear's creator
- pear Symfony
- pear PHPUnit
- pear Developers
- Stig Bakken et al: PHP 5 Power Programming. Free eBook
- pear forum
- Codewalkers PHP related forums
- Go-pear: The PEAR package installer (Note: PEAR is distributed with XAMPP). So you can make a web test server on your laptop in minutes.
- PEAR: Manual
- pear manual: Online 2009 version
- pear: Installation
- pear: Web installer
- Installation of a local PEAR copy on a shared host
- pear: Installing packages
- pear: Command line installer
- Getting started with PEAR
- PEAR Tutorials
- PEAR: Channels
- The design of a Robust Persistence Layer for Relational Databases
- PEAR MDB2: Package Information Do I really need to write SQL?
- PEAR Packages
- PEAR Package Information: File
- PEAR HTML_QuickForm. Getting started Guide.
- XML and Webservices With PHP5 and-PEAR
You can get a flying start by downloading and installing XAMPP for Windows or Linux. XAMPP is an easy to install Apache distribution. The distribution for Windows 98, NT, 2000 and XP. XAMPP version 1.5.2 contains: Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin, Webalizer, Mercury Mail Transport System for Win32 and NetWare Systems v3.32, JpGraph, FileZilla FTP Server, mcrypt, eAccelerator, SQLite, and WEB-DAV + mod_auth_mysql. I downloaded and installed the package in 5 minutes. Then you have your own (test) webserver (do not put it on the web without configuring it since the default installation is open to everybody with a browser), database server and PHP plattform. Use it as a testserver. Now you have an excellent plattform to learn OOP in PHP. You can cut the connection to the internet and make and test advanced database driven content management systems (CMS) before you put them on the web.
Note, the need to use Web services has decreased with PHP 5 and above. Often it is enough to use simplexml functions. The SimpleXML extension requires PHP 5.x and is enabled by default. According to Robert Richards (2006) page 492, it appears that PEAR will not be included with a default installation of PHP 6. You mus manually install the PEAR core and installer. Also note that those new to XML often run into problems when dealing with documents not based on the ANSI encoding or the UTF-9 encoding. Basinc knowledge of Unicode is highly suggested, because you will need to understand what it means for a string to be encoded and why it is important to know what encoding is used. The libxml2 library supports a few additional encodings natively and when built with iconv support, it can support all encodings supported by iconv. Note that XML documents are internally stored used UTF-8encoding. Interactin with XML data in those cases must be performed using UTF-8 encoding. For these reasons, properly declaring your XML document and using the correct encoding is important. Also note that the X in AJAX stand for XML, so understanting the XML family of technologies becomes more and more important and some mean that XLink will revolutionize Web linking. Nicholas C. Zakas, coauthor of Professional AJAX runs his own website with a lot of useful extensions. The problem is to find the best extensions and libraries. Som libraries and extensions are not needed in the latest versions of PHP, so before you run to install a third party library, take some time to see if a simpler solution is available. My own site has a lot of resources related to AJAX, Ruby and web 2.0 developement. Another of my sites, DigitalStart has a lot of information on the XML families of technologies, well-formed and valid documents. An XML document must be well foremd, but need not validate. In addition to SimpleXML there is another model, DOM that is used to manipulate XML documents. This API is larger, but together the two technologies can solve most problems regarding XML problems. We added thi introductory note about the XML family of technologies, since our main principle, make it simple, as simple as possible, sometimes say that using the SimpleXML API is all that is required to consume a web service.
- W3C Web Services Architecture
- W3schools Web Services Tutorial
- W3schools forums
- Sitepoint XML and Web Services forum
- eBay Developer Resources
- IBM SOA and Web services
- Next generation web development is here. Are you ready?
- del.icio.us direc.tor: Delivering A High-Performance AJAX Web Service Broker
- Microsoft: Web Services and Other Distributed Technologies
- Web Services in PHP
- Building Web Services the REST Way
- Implementing REST Web Services: Best Practices and Guidelines
- Konstrukt: A REST-ful framework of controllers for PHP5.
- Strike Iron
- StrikeIron Global SMS Pro Web Service
- The Strike Iron Web Services Marketplace
- Strike Iron: Web Services Provider list
- Remote Methods
- Programable Web
- eBay developers program
- amazon web services
- Code Google
- Yahoo Developer Network
- X Web Services
- Web Services Summit
- Web Services Architect
- Audioscrobbler Web Services
- Golden Rules for Optimizing your pages
- When to optimize
- Performance Problems - what is the bottleneck?
- N-Tier: A quick introduction.
- Cost-Effective Website Acceleration
- Encode And Optimize PHP
- Optimize your code with XDEBUG
- Squeezing code with XDEBUG
- A HOWTO on Optimizing PHP.
- Memory allocation problems in PHP and how to optimize?
- Code optimization
- Generating XML data from SQL queries
- Simple Optimization for PHP and MySQL
- Relational Database Design Articles, Tutorials and Tips
- Getting Started with the Derby DB plattform.
- Database Performance Tuning and Optimization
- Optimizing your MySQL Application
- How to exploit MySQL index optimizations
- Optimizing MySQL: Queries and Indexes
- Indexes in MySQL
- How MySQL Uses Indexes
- Column Indexes
- Using PHP and MySQL for Large Projects: Optimizing Code
- Accelerating PHP Code Performance for Oracle
- Using MySQL, Normalisation
- Database normalization
- Database Normalization And Design Techniques
- memcache functions
- Database Normalization explained
- An Introduction to Database Normalization
- Relational Database Normalisation
- A howto on optimizing PHP
- Sturcture code with PHP patterns
- Effortless (or Better!) Bug Detection with PHP Assertions.
- Simple Test for PHP
- Reduce load on your webserver by caching
- Caching in PHP using the filesystem, APC, and Memecached
- Umbrello UML Modeller
- Grid Computing Info Centre (GRID Infoware)
- Oracle Grid Computing
- Sun Grid Computing Solutions
- IBM and Schwab Tag Team on Linux Grid Computing
- .NET Grid Computing Solutions
- slGrid, Ajax-Based PHP Grid Component
- AJAX-Based PHP Grid
- slGrid, Ajax-Based PHP Grid Component
- DEVELOPING A PHP-BASED LEGACY APPLICATION GRID SYSTEM
- Association of Shareware Professionals
- What is PAD?
- PAD overview - Specification Details
- PAD_Spec_Version 3.01
- PHP.NET Image Functions
- pear image packages
- ImageMagick Forum
- ImageMagick Studio
- Create Dynamic Images with ImageMagick
- SketchPad tutorials
- Developing Professional Quality Graphs with PHP
- Great software by example
- WebCam Snapshot by Robert M. Hall
- Feasible impossibilities
- VTC Online & CD Computer Software Training
The following resources and standards are important. There are no universal agreement in RSS. Probably the most complex RSS structure is RSS 1.0, at least of this writing in july 2007. Once you understand an RSS 1.0 document, the other syndication formats will be much easier to use. Atom is an other format that was created because of the disagreements in the RSS community. In strict mathematical term, a URL is a subset of a URI that is a subset of an IRI
- I E T F
- W3C: RDF
- RSS 2.0 at Harvard Law
- W3C: RDF Syntax namespace
- Resource.org: RDF Site Summary (RSS) 1.0
- The Dublin Core Metadata Initiative
- The Dublin Core Element Set v1.1 namespace
- RDF Site Summary 1.0 Modules: Syndication
- RDF Site Summary 1.0 Modules: Content
- A grassroots coalition fighting for standards
Here are some resources that should help you in syndication and importing external content to your site:
- RSS Feed Guide
- Project ROME
- Displaying an RSS Feed
- MagpieRSS: RSS for PHP
- Gecko Tribe
- Gecko Tribe Carp
- Gecko Tribe Tetra
- W3 Schools
- XML Namespaces Explained
- Introducing XML
- XML Namespaces Explained
- Resource Directory Description Language (RDDL)
- Web Services Demystified
- XML Remote Procedure Calling (RPC)
- The Incutio XML-RPC Library for PHP
- Dev Shed XML
- ZVON The guide to the XML Galaxy
- Dev Shed XPath Basics
- ZVON XPath tutorial
- SAX Project
- eZ Systems
- W3C RDF Validator
- FEED Validator
- RSS Validator
- W3C Extensible Markup Language (XML)
- W3C Document Object Model (DOM)
- W3C XML Path Language (XPath)
- W3C XSL Transformations (XSLT)
- W3C Web Services Description Language (WSDL) 1.1
- W3C Simple Object Access Protocol (SOAP)
- W3C Web Services Activity
- W3C Semantic Web
- W3C Metadata and Resource Description
- PHP Filesystem Functions
- PHP XML Parser Functions
- PHP DOM XML Functions
- PHP XSLT Functions
- PHP XML-classes
- PHP XqueryLite class
- PHP Classes
- PHPclasses SVG
- HAWHAW Make your website mobile
- HAWHAW Class reference
- Mozilla XML User Interface Language (XUL)
- Introducing XUL Part I
- Introducing XUL Part II
- Introducing XUL Part III
- XULplanet ref
- Aggregator UserLand
- Hosted Applications
As an additional example, consider you have a class library, for example pear or PHPclasses and you have browsed the library and found a Database Abstraction Layer or the newer MDB layer. If you know how to import these classlibraries in your own project, you can write an adapter class (pattern) that map the pear connection class methods on to your own application. In other words, by writing a simple adapter class, you do not need to reinvent the wheel. If you know how to take advantage of such prewritten code (API), your project gets more like component programmning. You put together components to make the complete structure. An adapter class is a special case of a more general concept, design pattern, Gamma et. al. (1995). Excellent examples of how to use patterns in PHP, is explained by Fuchs (2005) volume II chapter 7. This takes your OO PHP to a higher level. You get a good introduction to OO PHP if you download chapter 2 from volume I (free). That chapter should be read, read again and reread if you want to make effective OO PHP projects. In the end of that chapter, it is for example explained how you share interface by inheritance, how you instantiate an array of child objects that is used to output different messages dependent on which child object that is instanciated. This is a good example of polymorphism (flexible sharing) in practice.
Now you should have a solid background in OOP and can go on to the more advanced languages like Java, C# or C++ if you ever need them. The WebProWorld post mentioned above has an example of generic algorithms or the ability to paramtrice software (code) in C++. That is also possible in C# and once you understand generics, you are able to write very compact and effective code. Now that you have learned to go and walk, run to the next level with BETA and learn the power of distributed objects etc. in a minimalistic, very compact language.
Kent Beck (2000): "Extreme programming explained" Addison-Wesley ISBN 0-201-61641-6
Gordon Blair, John Gallagher, David Hutchison and Doug Shephard (1991): "Object Oriented Languages, Systems and Applications." Pitman Publishing ISBN 0-273-03132-5
Daniel J. Duffy (2004): "Financial Instrument Pricing Using Cpp" ISBN 0470855096
Martin Fowler (1999):
"Refactoring: Improving the Design of Existing Code" Addison-Wesley Professional ISBN 0201485672
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (1995): "Design Patterns: Elements of Reusable Object-Oriented Software." Addison-Wesley Professional ISBN 0201633612
Anders Hejlsberg, Scott Wiltamuth and Peter Golde ( 2003): "The C# Programming Language" Addison Wesley Publishing Company ISBN 0321154916.
Andrew Koening and Barbara E. Moo ( 2000): "Accelerated C++ Prqactical Programming by Example" Addison Wesley Publishing Company ISBN 0-201-70353-X .
Mark Josi ( 2005): "Cpp Design Patterns and Derivatives Pricing" Cambridge University Press ISBN: 0521832357
Bjørn Kirkerud (1989): "Object Oriented Programming With Simula". Addison Wesley Publishing Company ISBN 0 201 17574 6
Craig Larman (2004): "Applying UML and patterns: An Introduction to Object-Oriented Analysis and Design and Iterative " Prentice Hall PTR ISBN 0131489062
Justin London ( 2004): "Modeling Derivatives in Cpp"
Wiley ISBN 0471654647
Ole Lehrmann Madsen, Birger Møller-Pedersen and Kristen Nygaard ( 1993): "Object-Oriented Programming in the BETA programming language". Assn for Computing Machinery. ISBN 0201624303
Steven John Metsker (2004): "Design Patterns C# " Addison-Wesley Professional ISBN 0321126971
Robert Richards (2006) : "Pro PHP XML and Web Services" Apress ISBN: 1590596331
William Stamatakis (2006):
".NET Concurrency Design Patterns: Programming in C#" Addison-Wesley Professional ISBN 032116606X
Bjarne Strostrup (1994): "The Design and Evolution of C++" Addison-Wesley ISBN 0-201-54330-3