Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php on line 668
Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php on line 668
Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php on line 668
Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-theme.php on line 554
Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-theme.php on line 595
Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-theme.php on line 535
Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-theme.php on line 544
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/comment-template.php on line 1739
Deprecated: wp_getimagesize(): Implicitly marking parameter $image_info as nullable is deprecated, the explicit nullable type must be used instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/media.php on line 5006
Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-request.php on line 960
Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-request.php on line 980
Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-request.php on line 992
Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-request.php on line 1003
Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 151
Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 175
Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 164
Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 186
Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 138
Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 75
Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 89
Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 110
Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 127
Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-list.php on line 199
Deprecated: Jetpack::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/class.jetpack.php on line 939
Deprecated: Automattic\Jetpack\Connection\Manager::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 110
Deprecated: Creation of dynamic property Automattic\Jetpack\Connection\Manager::$error_handler is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 80
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Instagram_Gallery::$is_wpcom is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-instagram-gallery.php on line 23
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Mailchimp::$wpcom_is_wpcom_only_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php on line 17
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$wpcom_is_wpcom_only_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 21
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$is_wpcom is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 22
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions::$wpcom_is_site_specific_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php on line 20
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_wpcom_only_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 23
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_site_specific_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 24
Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Subscribers::$wpcom_is_wpcom_only_endpoint is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php on line 15
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 157
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 157
Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38
Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php on line 195
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php on line 56
Deprecated: Creation of dynamic property Publicize_UI::$in_jetpack is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/publicize.php on line 53
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 128
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 129
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 133
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 134
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 135
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 219
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 220
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 227
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 229
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 231
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 248
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 249
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 267
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 268
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 270
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 271
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 273
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 275
Deprecated: Creation of dynamic property WPCOM_Widget_Goodreads::$shelves is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/widgets/goodreads.php on line 33
Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/script-loader.php on line 348
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-wp-block-type.php on line 333
Deprecated: Creation of dynamic property Jetpack_Shortcode_Unavailable::$shortcodes is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-content/plugins/jetpack/modules/shortcodes/unavailable.php on line 19
Deprecated: Calling get_class() without arguments is deprecated in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/class-http.php on line 328
Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Cookie/Jar.php on line 63
Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Cookie/Jar.php on line 73
Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Cookie/Jar.php on line 89
Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Cookie/Jar.php on line 102
Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Cookie/Jar.php on line 111
Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40
Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51
Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68
Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82
Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
Warning: Cannot modify header information - headers already sent by (output started at /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/wp-db.php:668) in /homepages/34/d43362328/htdocs/ydontu/blog/wp-includes/rest-api/class-wp-rest-server.php on line 1648
{"id":303,"date":"2006-06-21T18:58:42","date_gmt":"2006-06-21T18:58:42","guid":{"rendered":"http:\/\/www.whydontyou.org.uk\/blog\/2006\/06\/21\/web-based-software\/"},"modified":"2007-02-24T21:43:03","modified_gmt":"2007-02-24T21:43:03","slug":"web-based-software","status":"publish","type":"post","link":"http:\/\/www.whydontyou.org.uk\/blog\/2006\/06\/21\/web-based-software\/","title":{"rendered":"Web Based Software"},"content":{"rendered":"Well, time for some more rants. It seems that pretty much everywhere I have been looking over the last month, from the arrival of .NET magazine through to searching web news sites, has been going on about how great it is that we can get all our software online as a web app instead of having to buy and install it ourselves.<\/p>\n
For those with a memory span longer than a goldfish, you will remember this was the “next big thing” in the 1990s and fell flat on its face. However, with the widespread adoption of broadband and the advances in internet technology, the dream is now possible. For example, sites like 30boxes.com<\/a>, ajaxWrite<\/a> and all manner of google offerings are gaining popularity all the time.<\/p>\nI can see why the pundits are heralding this new wave of “next big things” (even if it is a second hand idea), as at first it does seem like a good idea. If one discounts the facts – such as dumb terminals are nothing new(30 years ago all “computers” linked into a mainframe which actually ran the software) people didnt like them and wanted their own computers – and accepts this is an old idea rebadged then there may be some reasons to go down this route.<\/p>\n
For some, technophobic, customers there can be advantages to having all your software remotely hosted. The host can automate backups and upgrades and you can pay only for the things you use.Software manufacturers certainly like the idea, being able to keep<\/strong> selling you the same thing, over and over, is fantastic. It is like hiring a car instead of buying your own. No maintainence costs, no road taxes etc. Isnt that computer utopia?<\/p>\nWell, no. The same as hiring a car, you dont “own” anything. This is worse than it may first seem – given that the “ownership” of software is a very grey area.<\/p>\n
Let me give you an example, you (CTO of XYZ Company) have decided to save costs and run all your company’s office-like applications on a web provider service. (Eg, ajaxWrite). Everything is great. You have saved a fortune and all the share holders are cheering. One day you log on to write a memo and the host is down. Instantly, you have lost your ability to work. Your office staff cant do anything but sit around. This can happen with an offline application, but generally you become responsible for taking protective measures to prevent it happening. Anyway, on with the example:<\/p>\n
After the smoke has cleared, and the MD \/ bosses stopped trying to kill you, the descision is made to go with an expensive host which has a penalty clause in the contract. Great. Savings are down though, so people arent as happy as before, but still – this is all very Web 2.0 and the terminology has kept them quiet.<\/p>\n
One day you come into work and there is a problem connecting to the internet. (ISP \/ Telco etc). The lines were eaten by a wild, rabit rat and wont be repaired for a week. All your office software – more importanly ALL YOUR DATA – is unavailable for that time. All those off site backups the host has made are worthless and the all high tech kit in your building is sitting silent.<\/p>\n
More hell. The shareholders demand you get a leased line with even more penalty clauses. More costs. Now you are hardly making any savings (unless you previously bought new software at the drop of a hat). But at least everyone is happy and you are still “Web2.0ing.”<\/p>\n
Another fateful day, you come into work and you web host gives you notice that due to demand, it is changing its T&C and limiting your bandwidth. In addition, because it has a virtual monopoly it is going to increase prices. Outraged you try to move to a different host, only to discover the data you have stored remotely has been stored in a proprietary format. After some furious debates the share holders accept this and allow the extra costs but demand you find a new host. Now you are on the same costs as previously.<\/p>\n
The next hurdle appears when you discover all your data has become “intellectual property” of the host (not as far fetched as it sounds<\/a>), and to make matters worse the host is being bought out by ABC company – your arch rivals. There is nothing you can do at this stage to regain control of your data. You <\/strong>chose to allow a third party complete and utter control over it and now will bear the consequences.<\/p>\nOk – this is just a hypothetical story. But seriously, what real advantages are there to having all your data stored by an effectively unknown third party? It isnt safer – if you want to be safe, then ensure YOU are running proper security measures. 99% of people connected to the internet are less likely to get hacked than a large application service.<\/p>\n
Bottom line – this isnt a new idea, not even an old idea whose time has come. It is stupidity all wrapped in a Web 2.0 cloak.<\/p>\n