What new do we have to invent ?
PHP has several settings, and one off them is display_errors = off. If you still have it on, and an error occures, your visitors will get to see all your internals. And you don't want that !
http://www.phpfreaks.com is a site for php developers by php developers, but one thing the missed: display_errors = on resulting in a nice dump of error messages, SQL statements and queries. Luckily the dump didn't contain clear text passwords, otherwise you could imagine how harmful this all could be.
Just a few lines of the dump:
Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/www.phpfreaks.com/public_html/includes/DatabaseObject.inc on line 69
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /home/www.phpfreaks.com/public_html/includes/DatabaseObject.inc on line 70
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/www.phpfreaks.com/public_html/includes/DatabaseObject.inc on line 70
MySQL Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) MySQL Query: INSERT INTO `user_track` set `user_track_id`="", `session_id`="70d2aa2e89ed6aa32c15009630bbbc08", `last_activity`="1188475288", `last_page`="", `member`="0", `ip_address`="126.96.36.199", `refurl`="", `user_agent`="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:188.8.131.52) Gecko/20070730 SUSE/184.108.40.206-2.1 Firefox/220.127.116.11" +===========================================================+ MySQL Query: INSERT INTO `user_track` set `user_track_id`="", `session_id`="70d2aa2e89ed6aa32c15009630bbbc08", `last_activity`="1188475288", `last_page`="", `member`="0", `ip_address`="18.104.22.168", `refurl`="", `user_agent`="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:22.214.171.124) Gecko/20070730 SUSE/126.96.36.199-2.1 Firefox/188.8.131.52"
So security is something to keep in mind, even basic settings can make the difference.
- L: 7" (18cm)
- H: 6" (15cm)
- W: 4" (10cm)
Weight: 3.5 ounces (100g)
Although it's not (yet) mentioned where you can buy this, you can contact nexen.net for ordering information.
I decided to use bugzilla, a well known bug-tracking tool that has a rich feature list, like database back-end, security, search cache, e-mail support and many more.
With bugzilla it is easy for me to list bugs and unwanted features, problems my customers have and other quirks. With an intuitive interface, a priority list and with e-mail support it's really easy to improve my development.
Another smart tool is trac, an integrated SCM & Project Management tool. This is besides an issue tracker, also a wiki and a web based subversion repository. But since it has too many features, I stick to bugzilla.
- fixed price for the time period after time estimation
- ignore change requests before first release
- quality assurance as extra service for your customers
The most difficult part of Application Development is time estimation. It has become common practice to cross deadlines, mostly because of unforeseen or unexpected challenges that weren't planned in advance. There's no rule of thumb to solve this, only experience will provide you enough knowledge to do a correct estimation.
Another common practice is that your customer ask you one thing, but during development your customer will ask to add more functionality and "nice to have" features to the whole application. Prevent this method by describing in detail what functionality your application will contain and list all other requests for a next release.
For quality assurance, you'll find enough ideas on how to integrate this into your own service. This is an individual choice where I still need to find the balance between good and best.
In Belgium we have 3 languages (Dutch, French and German), but often commercial advertisements stick to Dutch and French. And sometimes you'll see a nice piece of automated translations in ads, like this one where the translation was made in Babelfish (French to Dutch).
In English this reads as:
Valid coupons at the railway station of the twelve hour and only during the market of June 27, 28 and 29 2007.Babelfish translation from French to English:
Valid goods has the Station of the South and only during the Annual stock sale of the 27, June 28, and 29 2007.