Computer Software
WordPress Backups

Backup and Restore (Photo credit: Wikipedia)
Have you ever heard of these services called Amazon S3 and Dropbox? They are file storage services that are much more reliable than your computer’s local hard drive. When you make a backup of your site you don’t ever want to lose that backup. The real question is if your computer’s hard drive crashes tomorrow will you lose anything? Will you lose months or years of old websites backups. The question should hopefully be no because hard drives crash, websites get bigger and you can easily restore from anywhere as long as you make sure to backup using one of these services.
Hard drives crash and if you are using an external hard drive you still aren’t safe. Your hard drive will probably crash at some point. If not in a year from now, ten or twenty years from now. What you should do is when you have a backup of your site, get an account at Dropbox.com or at AWS.amazon.com. These are both great file storage services that are very cheap to put files on. All you have to do is just get an account, browse to it and then upload your file and wait for it to finish. Once the file is done now a permanent copy is stored online that will probably never go anywhere. Just on the fact that your hard drive might crash is an excellent reason for you to put another copy of your backup up in S3 or in Dropbox.
The other problem is that your websites get bigger and bigger over time as you add more content. If you have, let’s say, a 1 gigabyte website the size of your backup is going to be 1 gigabyte. If you backup every week your site will grow to 1 gigabyte, 2 gigabytes, 3 gigabytes, 4 gigabytes and so on every single week. It’s important for you that once you backup your site to take that backup off your site so it’s not wasting space. Instead put it on one of these file storage sites that are meant to hold lots of files, that are meant to hold large files. That way you are moving it away from your website and your website can hold the actual content, not all of your backups.
Finally, when you put your backups in Dropbox or in S3 you can now restore them from anywhere. This means that if you lose your computer, if your computer is stolen, your computer crashes or you simply are not at your computer, you can still restore that backup from anywhere. Download it from Amazon S3, put it on your website, click the button and now your backup has been restored. Store your backups in S3 or in Dropbox because hard drives tend to crash, websites do get bigger over time and now you can restore your information from anywhere.
Claim your WordPress backup plugin right now at
==> Backup Creator Plugin
OpenBravo ERP

Image via CrunchBase
OpenBravo is a commercial open source software company which is is responsible for the development of two products: Openbravo ERP and Openbravo POS.
It is a web based system with many modules including sales, CRM, manufacturing and more. It does not require any client special software and the server software is based on Java 2 SE and use either the PostgreSQL or Oracle. It can be installed on either Windows or Linux servers.
Recently I noticed an interesting article about OpenBravo on ZNet and I have re-published it below for your convenience:
Can OpenBravo challenge incumbent ERP with open source?
By Dennis Howlett | March 7, 2011, 6:00am PST
Summary: Can OpenBravo open source ERP compete with the established, proprietary vendors? The absolute numbers would suggest no but a deeper dive suggests otherwise. What then of the future?
There’s a paradox operating in the enterprise apps world. On the one hand we have the mega vendors with proprietary technology. On the other hand we have millions of developers who love open source. In the business world, buyers of enterprise software like the idea of a single throat to choke, or at least a few throats. They don’t like the notion of having to find a throat that can be choked. Millions of developers will likely say that open source provides the best way of ensuring that new software releases really are up to snuff, have been destruction tested and contain the best features possible.The real paradox lays in the fact the Internet (mostly) runs on the open source LAMP stack (Linux, Apache, MySQL and PHP.) Purists will argue that MySQL no longer qualifies since it was taken under Oracle’s umbrella but that’s another story. Surprise surprise – when it suits them, software vendors are not shy of taking open source and using it where it makes sense. Not that you’ll get too many of them crowing about it. But at heart, the proprietary software vendors want to corral customers. It keeps customers tied to a long tail of maintenance revenue.Then we have OpenBravo, an open source ERP trying to make a name for itself. Originating in Spain but now having a presence in the US, OpenBravo recently launched version 3 of its ERP solution aimed at the SMB market. OK – advert over. Last week when I spoke with the company, I wanted to get a sense of where OSS ERP fits. But first a few facts:
- Two million downloads
- Estimated abandonment rate 90%
- 200 paying customers
- In use at somewhere between 1,500 and 4,000 customers in 27 countries
Two million downloads is impressive by any standards. Any vendor getting that level of initial attention should be applauded. The problem is that being a small company, OpenBravo cannot realistically service all those potential customers without blowing itself up, hence (in part) the high abandonment rate.
There is another way to look at that number. I wonder how many companies have invested in commercial ERP only to find that it wasn’t what they needed or hopelessly flawed for their purposes? How many of those ground out the implementation rather than cut their losses? I don’t know of any statistics that provide answers to those questions other than the generally accepted 85% maintenance renewal rate most vendors regard as the lower end of the benchmark scale.
Of the 10% that didn’t abandon OpenBravo, 0.1% have converted to paying customers. That suggests the other 99.9% have found they can survive with OpenBravo without the need for technical support or other services. That conversion rate seems very low when compared to commercial ‘try before you buy’ SaaS offerings. But does that matter? I’m not so sure. Despite the tiny numbers, it says much more about how well the OpenBravo community of 12,356 registered members and their 522 projects are getting along.
Viewed another way, how many vendors catering to the SME ERP market would give their eye teeth to have 1,200 developers let alone 12,000+ in their community? So how does OpenBravo gain revenue traction beyond the few hundred customers it already has?
It’s something of a chicken and egg problem in the sense that marketing works when you’ve got the marketing funds. But for that you need a combination of deep investor pockets and/or a strong pipeline of paying customers. There is a precedent.
SugarCRM seemed to take forever in becoming accepted as a viable CRM solution. Today it claims seven million downloads of Sugar apps with 7,000 customers. 2010 was a record year for the company which it attributes to fast growth in its channel.
OpenBravo is a different animal. Rather than being a point functional solution, it is trying to go toe to toe with the likes of Microsoft Dynamics as the first ERP once a company has outgrown QuickBooks or as a replacement for an overly expensive solution. Commercial competitors can sow seeds of FUD: (to the sounds of a sharp intake of breath) “Open source…I dunno…who supports it?’ It’s a problem that all too easily blinds customers from digging into open source solutions without undertaking a thorough test or understanding what OpenBravo offers.
Beyond the base solution, OpenBravo offers a catalog of 275 extensions of which 75% are open source. OpenBravo was developed from the get go as a web based solution with a modular approach that is easily extended. Unlike other web based solutions, OpenBravo offers a multi-tabbed interface. Users are not stuck in single functions that have to be completed but can flip between tabs while completing a transaction. Why would you care? An example might be incomplete customer information that has to be amended at the master record level. Flip over to the appropriate tab, update and your done. With the latest release, OpenBravo introduced the notion of ‘agile ERP’ where time to value is collapsed and where end users can quickly become productive. Integration to services like GoogleDocs and Twitter is available. It is possible to establish roles that allow organisations to extend access to suppliers and customers. These are top line features that distinguish OpenBravo and should encourage a deeper look.
In talking to the company I got the sense that Spain remains both its spiritual and operational home. Open source solutions generally have done well in Spain and France the last few years, largely because of the cost/benefit compared to commercial software. The French Gendarmerie’s foray into open source for example has been well documented. OpenBravo has snagged customers in Spain that are familiar locally like Eroski and Weblogs SL. When you look more closely at the customer lists the references are far from shabby. One reading suggests OpenBravo is attractive in retail at exactly the time that market segment is under severe pressure.
Having made a move into the US, will 2011 be the year it starts to break through and ramp up customer numbers? If extension additions are a leading indicator then the answer is ‘maybe.’ According to the company, extensions are being added at a rate of around 10% per month.
Open source ERP is a relatively new concept. It is not without risk given the size of the OpenBravo customer base or the modest number of partners but it should not be dismissed. All vendors have to start somewhere. The relatively small number of paying customers should be set against the ability to rapidly deploy, take advantage of an active developer community along with an ROI and TCO that compares very favourably to proprietary offerings.
UPDATE: Colleague Frank Scavo reminded me that open source ERP is not just about cost but about buyer organisations being in control. It’s a an excellent point. For more in this, see Frank’s research from 2005.

New PHP Toolkit
Today I have noticed another interesting online presentation about PHP organized by the iSEries Network and I have copied it below for your convenience.
Join Alan Seiden to learn how to use the new PHP toolkit from Zend and IBM

Zend Studio 7 screenshot (Photo credit: Wikipedia)
PHP developers on IBM i now have a new way to access resources such as RPG and COBOL programs, system commands, data areas, and more using a new, free, flexible, open source toolkit supported by Zend.
With IBM’s XMLSERVICE toolkit on the back end, it’s all open source, and can be kept to a very high level of quality and functionality by not only Zend and IBM, but IBM i community members who take the initiative.
In this session, presented by Alan Seiden, you’ll learn
- use the new toolkit with your older PHP applications with minimal changes
- optimize performance
- develop PHP on your laptop (Windows, Linux) or in the cloud and deploy to the IBM
- connect to IBM i through a variety of transports
Sign up now to reserve your entry. Once in the Virtual Event, you’ll have access to all sessions, resources and virtual trade show booths.
REGISTER NOW
Click here to learn more about the 2012 IBM i Essentials Virtual Conference. Sign up for sessions covering critical topics like mobile strategy and RPG-OA basics, access free resources, visit sponsor booths and win prizes.
Platinum sponsors of this event are BCD and Connectria Hosting. Gold sponsor is Enforcive.
Incoming search terms:
- the new PHP toolkit from Zend
- zend
PHP on IBM i

The PHP logo displaying the Handel Gothic font. (Photo credit: Wikipedia)
I have been invited to attend a virtual conference on PHP on IBM i and I have copied below some information for your convenience.
5 Reasons Why PHP on IBM i is an Excellent Strategic Choice – Jon Paris
(Part of the IBM i Essentials Virtual Conference)
Many IBM i shops still haven’t made web applications or modernization a significant part of their IT strategy. It’s not due to a lack of options and for some it’s not due to a lack of trying. Most of those shops have not tried PHP, one of the most popular and widely used languages to develop web applications.
In this session, Jon Paris will discuss the following 5 top reasons he feels that PHP is a great choice for IBM i shops:
| • | Easier for RPG programmers to learn |
| • | Backed by IBM, Zend and other leading vendors like BCD |
| • | Lots of free or low-cost software |
| • | Ease of finding development staff |
| • | Support for multiple platforms and databases |
Even the right programming language may not be enough for some IBM i shops to succeed in developing web applications. Many shops also need the right tools and technical support to speed up the entire development process and learning curve.
In the second half of this session, Marcel Sarrasin, BCD’s Product Manager, will show you why WebSmart PHP has become the fastest way for IBM i programmers to develop PHP web apps both on and off the IBM i.
Register for this Session
and Virtual Conference
Incoming search terms:
- ibm i php
- PHP on IBM i and
WordPress Plugin Development
I found an interesting article on WordPress Plugin Development from the PHP Master Newsletter and I have re-published it below for your convenience
WordPress Plugin Development

If you’ve ever used WordPress to build a site quickly, chances are you’ve used one of the many plugins that are offered to extend the functionality of this popular blogging software. Plugins are one of the many things that make WordPress so attractive. If you need an image gallery or a contact form, there’s probably a plugin already available that you can download and use. There are times, however, when you can’t quite find what you need from existing plugins. This article will show you how to create your own WordPress plugins by walking you through an example to display some text using a widget in a the sidebar.
The Main Plugin File
Plugins are detected automatically from the wp-content/plugins directory within your WordPress installation directory. When creating a new plugin, you should create a new subdirectory there. The name of the subdirectory can be anything you want; a sensible option would be to call it the name of your plugin. Try to avoid generic names such as “textwidget” or “shoppingcart” as this may have already been used with another plugin and will cause problems should you wish to distribute it to other users of WordPress. For this example, create a subdirectory named phpmaster_examplewidget.
WordPress detects that a plugin is available from a descriptor placed in the comments of a PHP file. The descriptor must provide the basic information about what the plugin does, who created it, and its license information. This is what WordPress uses to identify that a plugin is present and ready to be activated. This example plugin will contain the definition at the top a file placed in your newly created phpmaster_examplewidget directory. The name of the file is also arbitrary but it’s advisable to provide a meaning name. This example will call the file widget_init.php.
03 | Plugin Name: Simple Text Plugin |
05 | Description: An example plugin to demonstrate the basics of putting together a plugin in WordPress |
11 | Copyright 2011 Tim Smith |
13 | This program is free software; you can redistribute it and/or |
14 | modify it under the terms of the GNU General Public License, |
15 | version 2, as published by the Free Software Foundation. |
17 | This program is distributed in the hope that it will be useful, |
18 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
20 | GNU General Public License for more details. |
22 | You should have received a copy of the GNU General Public License |
23 | along with this program; if not, write to the Free Software |
24 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
This is the required structure for any plugin you’ll create for WordPress. Now when you log in and look at the plugin administration screen in WordPress you’ll see the new plugin is ready for activation.

You can see all of the information you entered in the comments section describing the plugin is displayed here. You can activate it now if you wish, but you still need to add some functionality before it does anything.
The file that has this definition is now considered to be the starting point for any code associated with the plugin. The code that appears after the definition comments will be executed giving you the opportunity to initialize the plugin and its features.
WordPress Widgets
WordPress provides a class which you can extend named WP_Widget. When you extend it, your own widget will be available to any sidebar that your theme offers. WordPress ships with a number of default widgets such as “Recent Posts” and “Archives” which extend WP_Widget.
The WP_Widget class provides four methods which should be overridden:
__construct() – call the parent constructor and initialize any class variables form() – display a form for the widget in the admin view to customize the widget’s properties update() – update the widget’s properties specified in the form in the admin view widget() – display the widget on the blog
The Constructor
The constructor is like any other constructor you’ve probably written. The important thing to remember here is to call the parent constructor which can take three arguments: an identifier for the widget, the friendly name of the widget (this will appear as the title of the widget in the admin widget screen), and an array detailing the properties of the widget (which only needs a “description” value).
2 | class TextWidget extends WP_Widget |
4 | public function __construct() { |
5 | parent::__construct("text_widget", "Simple Text Widget", |
6 | array("description" => "A simple widget to show how WP Plugins work")); |
With the basic widget structure in place, you’ll want to register the widget and make sure this is done at a time when all the other widgets are being initialized. Registering a widget is done through the register_widget() function which takes a single argument, the name of the class which extends WP_Widget. This call to register the widget must be called at an appropriate time, so the particular WordPress hook you’ll want to use is called “widgets_init”. To associate registering the widget with the hook, you use add_action() which takes the name of the hook as the first argument and a function to execute as the second. (The second argument can either be the string name of a function or closure.) This code should go directly under the descriptor of the plugin that was created in widget_init.php.
2 | add_action("widgets_init", |
3 | function () { register_widget("TextWidget"); }); |
Now that it has been registered and initialized, you’ll be able to see your widget available for use.
The form() method
The example widget here should let you enter a title and some text to be displayed when viewed on the blog, so in order to be able to amend these two aspects of the widget you need to create a form to prompt for these values. The form() method is used in the widget administration screen to display fields which you can later use to alter the functionality of the widget on the site itself. The method takes one argument, an $instance array of variables associated with the widget. When the form is submitted, the widget will call the update() method which allows you to update the fields in $instance with new values. Later, widget() will be called and will make use of $instance to display the values.
02 | public function form($instance) { |
05 | // if instance is defined, populate the fields |
06 | if (!empty($instance)) { |
07 | $title = $instance["title"]; |
08 | $text = $instance["text"]; |
11 | $tableId = $this->get_field_id("title"); |
12 | $tableName = $this->get_field_name("title"); |
13 | echo '<label for="' . $tableId . '">Title</label><br>'; |
14 | echo '<input id="' . $tableId . '" type="text" name="' . |
15 | $tableName . '" value="' . $title . '"><br>'; |
17 | $textId = $this->get_field_id("text"); |
18 | $textName = $this->get_field_name("text"); |
19 | echo '<label for="' . $textId . '">Text</label><br>'; |
20 | echo '<textarea id="' . $textId . '" name="' . $textName . |
21 | '">' . $text . '</textarea>'; |
You use WP_Widget‘s get_field_id() method and get_field_name() method to create IDs and names for the form fields respectively. WordPress will generate unique identifiers for you so as not to clash with other widgets in use, and when the form is submitted the values will update the relevant $instance array items. You can use the passed $instance argument to populate the form fields with values should they already be set.
This is what the form looks like in the admin view:

The parent <form> element itself, the Save button, and the Delete and Close links are generated for you automatically by WordPress so there is no need to explicitly code them. The form will post the variables and call the update() method so the new values can be inserted into $instance.
The update() Method
update() gives you an opportunity to validate and sanitize the instance variables before they are used by the widget. Here you can make decisions based on the old values and update the new values accordingly. update() must return an array which contains the items you expect to use when displaying the widget. WordPress passes two arguments to it, an array with the new instance values from the form, and an array with the original instance values.
2 | public function update($newInstance, $oldInstance) { |
4 | $values["title"] = htmlentities($newInstance["title"]); |
5 | $values["text"] = htmlentities($newInstance["text"]); |
WordPress will persist these values for you so there is no need to implement that functionality.
The widget() Method
The widget() method is used to display content within the widget when it appears in the sidebar on your blog. Output from the method will render the blog page. WordPress passes the widget() method two arguments: the first is $args which is an array detailing information about the widget, and the second is the $instance which you can use to get the output the data associated with the widget. $args really won’t affect this example so I won’t go into it; just remember $instance is the second argument.
2 | public function widget($args, $instance) { |
3 | $title = $instance["title"]; |
4 | $text = $instance["text"]; |
6 | echo "<h2>$title</h2>"; |
This will produce the following possible output on the site:

And that’s it! Putting all this together will give you a very simple widget to display text on the blog side of a WordPress installation.
Summary
You’re now familiar with the necessary groundwork for a WordPress plugin that ensures WordPress can detect and activate it, and extending the WP_Widget class to create your own widgets. The example widget presented in this article demonstrated the ability customize the widget’s display through an admin-provided configuration form. Though simple, it highlighted the basic WP_Widget methods you’ll use and you’ll easily be able to move on from this example and create greater functionality for your own WordPress driven sites. The code for this example is available under PHPMasterdotcom’s GitHub account so you can have a look at the code in it’s entirety.
Image via bioraven / Shutterstock
Note
There are good books on WordPress Plugin Development and Amazon has many good offers.
Click here for the WordPress Plugin Development books at Amazon UK
Click here for the WordPress Plugin Development books at Amazon US
Incoming search terms:
- how to create a wordpress plugin
- wordpress´development book
Upgrading to OpenSuSE 12.1 – My Experience
After using OpenSuSE Linux 11.4 for quite a while, I decided that it was time to u
Image by MethodDan via Flickrpgrade to the latest OpenSuSE 12.1 and I have recently completed the task.
This article contains a descriptions of my experience and how I solved some of the problems that I met.
Upgrading to OpenSuSE 12.1 with zypper
I performed the upgrade by using zypper as described very well in the article published by http://www.howtoforge.com
I had some difficulty to complete the first boot because I use an external usb disk that was not mounted correctly. I fixed the problem by logging in as superuser and by adding the correct information in the file /etc/fstab.
The system worked immediately after that, but I noticed that I had lost some applications that previously had been installed by using Adobe AIR.
Installing Adobe AIR applications
I tried to re-install Adobe AIR by using the rpm file that I had previously downloaded, but the installation did not complete correctly.
I tried again a few times until I noticed the following article published by OpenSuSE.org:
==> SDB:AdobeAir installation
I could install correctly after adding the following softink required bypass the rpm requirements.
# ln -s /usr/lib64/kde4/kcm_kwallet.so /usr/lib/libkwalletclient.so.1
After installing Adobe AIR I could also install without problems my air applications such as MarketSamurai, DomainSamurai and a few other ones.
Incoming search terms:
- opensuse 12 1 book
- opensuse 12 1 books
- book opensuse 12
- books on opensuse 12 1
- suse 12 1 books
- the first boot because I use
Categories: Linux Sofware Tags: