Conceptric

The Posts Topic.

  1. I run several remote Subversion repositories and connect using SSH over the Internet. Having local version control for those times I don’t have an ADSL connection was the main reason I looked at Git.

    There’s a good TextMate bundle to support Git, but to be honest I’ve mostly used the command-line.

    Weaknesses.

    Vendor branching is possible, but awkward. I frequently use vendor drops of WordPress, SimpleTest and a number of other libraries. There may be a good way of doing this, but I haven’t found it online… yet.

    I miss the svn:externals functionality, especially in applications that use a lot of plugins: WordPress in particular. Subversion allows me to define particular tagged versions of these to be pulled from their repositories during deployment without needing to bother controlling them myself.

    Strengths.

    Branch merging when trying out new ideas is a dream. I created a new branch, refactored huge sections of the codebase, and merged it all back together flawlessly. With Subversion this would have been a lot slower and more problematic. Git’s simply great for those investigatory spikes.

    The verdict for Git.

    I’ve yet to seriously try Git to interface with my remote Subversion repositories, using the ‘git svn’ series of commands. Having local copies of these, whilst still being able to use remote Subversion would be very useful. I’ve found using remote Subversion repositories easy, but trying to push a Git repository to Subversion is not so easy. I’m also going to try deploying from a Git repository using Capistrano in the near future.

    It strikes me that Git is best at programmer related activities and weakest in those of interest to administrators deploying applications. I shall certainly continue to use it, but alongside Subversion.

    Categorised in:

    No comments.

  2. CodeIgniter is billed as being a lightweight PHP MVC framework. Now I’m not a big fan of PHP, despite using WordPress and Drupal, but I intend to run this application on a Synology NAS, so PHP is the only game in town.

    Changing the Architecture.

    I’m not a keen on the idea of dumping all my code in the web server root directory, so I tested the framework flexibility by rearranged the application structure a little.

    	-rw-r--r--   1 Capfile
    	drwxr-xr-x  14 application
    	drwxr-xr-x   3 config
    	drwxr-xr-x  13 system
    	drwxr-xr-x   5 public
    

    Once these locations were updated in the application configuration files it all worked perfectly. The reasons for doing this sort of thing have been documented elsewhere, and I agreed with them from this security standpoint, however this structure also fits better with Capistrano deployment.

    A positive first impression.

    The Views deal with the presentation logic, and I like the fact that embedding PHP within the HTML is the default, instead of a complex templating system. It’s not the cleanest approach, but I prefer to have full control over my HTML.

    As for the Controllers, the implementation is quite intuitive and you can build a friendly set of URLs with a little help from mod_rewrite and the URI class.

    The form validation is a great feature that I found easy to implement within the Controllers and Views. I’ve centralised my validation rules in the global configuration file suggested in the documentation, but haven’t got the automatic rule group feature to work yet.

    The Model class is used to represent a single database table. I’m used to mapping tables with a Class in this way, but normally each instance would represent a row of data. CodeIgniter Models implement the Singleton design pattern, only one instance per class, from which the Database class methods can be called.

    The Database class provides the data access layer and a good set of robust methods which return an array of stdClass instances representing the resulting data rows. These arrays are then forwarded to the View, where the instance variables can be directly accessed. This is quick and easy, but not very OOP.

    Implementation reservations.

    I believe that the Model should be capable of running as a stand-alone application, once equipped with any interface, even the command-line. It’s this level of autonomy that results from the MVC design pattern: substitute a different Controller and View and it’ll still work the same way on a different platform.

    Controllers reacting to events, whilst Views shouldn’t have direct, mutable access to instance variables. The Model should encapsulate both the data and the business logic, not something that can be effectively achieved with Singletons alone. Indeed CodeIgniter blurs this distinction by making Models optional and allowing data manipulation directly in the Controllers.

    I’ve implemented my preferred approach by providing my own classes to replace the stdClass. They don’t extend the CodeIgniter Model class, but are instantiated within those that do, encapsulating data and business logic; including Object–relational data mapping and CRUD functionality.

    It works well, but I’m concerned that by introducing a more rigourous approach I’m losing some of the advantages of the framework. May be I would be better to take CodeIgniter at face value, as a flexible, if a little dirty, rapid development environment that works.

    Categorised in:

    No comments.

  3. Let’s face the reality that no matter how clear the project goals seemed at inception, they rarely look the same by the end. I’ve worked on projects where the whole scope of the project changed between the initial planning phase and the start of the technical work. What’s more the timescale tends to shift on a daily basis and your management keep ‘borrowing’ your resources for other vital work. This is the primary reason why I now prefer a more responsive approach; essential in a unstable world!

    The Agile approach is more adaptable with respect to three key project variables; only the last of which, in my experience, is considered flexible in the waterfall world of engineering.

    • Scope.
    • Time.
    • Resources.

    Scope contraction.

    Scope flexibility is something of a taboo subject. Scope is something that is added to in both a controlled manner — providing additional revenue — or uncontrolled creep. But the point of any project is delivering something that achieves the customers business goals. This is not necessarily the product that they, or the development team, initially envisaged.

    One uncomfortably overspent project lead to the realisation that I could have achieved the business objective well under budget by actually drastically reducing the scope. It wouldn’t have delivered exactly what the customer expected, but it would easily have achieved their goal.

    Which is more important, expectation or results? If you have a customer representative on the team it’s much easier to explain your rationale, and the chances are they’ll like the idea of results with less work as much as you do.

    Timescales.

    If you have a customer that doesn’t mind when you deliver, you’re a rare and lucky project manager, though you’ll never actually finish anything; deadlines do provide focus. So set plenty of deadlines, that’s what iterations and releases are about.

    Try to answer the most pressing question as quickly as possible. Leave refinements and those ever present scope changes to the next iteration, it’s probably only a few days away.

    This rapid cycle provides useful results, whilst allowing the flexibility to quickly change direction without that wasteful churn: just tidy this up a bit then I’ll be with you.

    And the resources?

    I’m afraid the project manager has to earn their money too. Line management will always have the urge to reassign any of your key people they feel aren’t being fully employed. It’s important to emphasise that the productivity of any team depends on preventing this happening.

    Agile teams don’t strictly segregate workload on the basis of job descriptions, that’s why you need versatile individuals. Unfortunately, these are exactly the type of individuals that those managers will want to steal away. Removing the demarcation of tasks will help ensure everyone is kept busy and that work is conducted using the minimum number of people.

    Better than the Waterfall.

    I’ve found actual project goals shift too frequently for effective use of the Waterfall approach to project management. Using iterations within this framework always felt unnatural; how do you decide how may there will be and when will you actually deliver something?

    An Agile approach perversely leaves me feeling more in control by worrying less about control. There are a huge array of Agile software development techniques, many of which can be adapted to other engineering disciplines.

    For Software Engineering, I would recommend reading The Art of Agile Development. The Agile Alliance promote the use of Agile techniques, so take a look at the Manifesto for Agile Software Development upon which it’s all based.

    Categorised in:

    No comments.

  4. The point to keep in mind is that the business process comes first. After all, businesses were here long before the IT department was born. How do you expect to add technology into the equation without understanding you own business domain?

    Define your business.

    When developing business processes try to keep everything as simple as possible. Simple processes are likely to be followed: complex ones won’t. This is definitely true of written procedures, but human employees have the ability to sift through the junk and ignore it; you may not like that but it’s true.

    Computers on the other hand don’t share this aptitude. Your software developers may try to ensure the software follows your monolithic procedures, but the conflicts ignored by human employees will have to be resolved; a long and expensive process.

    A systematic approach to this analysis can help, especially with the inevitable documentation, take a look at business process modeling and the OMG notation.

    Well implemented processes will be familiar to your staff and any software based on them equally so, saving a fortune on training.

    What is success?

    Now you’ve got a minimalist set of effective processes, you’re in a position to consider how the application of software and hardware systems might improve or expand your business, and bear in mind that it might not.

    What will success would look like? It too needs to be defined as simply as possible if you’re going to recognise it. Frequently at the start of projects everyone is so excited that this step is lost. It is either overlooked or results in a requirements document so complex nobody can be bothered to read it.

    Ask yourself how many other business purchases you would make without actually considering what you’re expecting to have delivered. Would you be happy if you were hoping for a photocopier and ended up with a filing cabinet?

    Get involved.

    Most organisations expect their involvement to end once they’ve specified their requirements. The developer will go away, build the software, and deliver it perfect and on schedule. OK, maybe that’s an exaggeration, but placing your staff in the development team is not an optional extra.

    They’re likely to spend substantial time working closely with the developers, it’ll be worth it, you’re likely to get a better system. Most will be involved in user testing, but the customer representative is a key role representing the business interests within the team. Customers are not project managers, they are focused on the benefits to the business and its operational goals.

    Primarily involve people that actually undertake the work this system is meant to enhance, and those that will continue to use it. There’s a huge temptation for senior management to attempt to fulfil this role, but they usually know next to nothing about the processes in question, so resist it. There is a vital role for senior sponsorship, but it’s not in the development team.

    Resulting software will be intuitive, and the computer literate will be able to understand it based on their knowledge of their current job, and of course your procedures.

    The pay back.

    Get the basics right — develop good business processes, define success, and build an effective team — and your project has a much better chance of delivering satisfaction, on time, and to budget.

    Categorised in:

    No comments.

  5. Those reading this blog may be surprised how many people are out there that aren’t computer literate. No matter how good the software interface, someone encountering a keyboard and mouse for the first time will not figure it out without a lot of help.

    This came to my attention a few years ago when my Mother decided to learn how to use a computer. Once she retired she needed to keep up with the technology she’d avoided for years. I actually think it was a great idea; retirement often increases the perception that the world is leaving you behind. She’d never used a typewriter: why are those letters in such a strange place? The mouse was a huge challenge to hand–eye co–ordination.

    She enrolled on CLAiT Level 1, and she’s made great progress, but I doubt she’d claim to be comfortable enough to be able to try something completely new without a lot of support. She can surf the Web, check and send basic email and do a little word processing, but that’s about it. It’s more than enough for her needs, but a business is going to need a little more.

    The point is that there are a lot of younger people still in the workforce that are in much the same position to my Mother. They are often encouraged to undertake ECDL training as shown on the BCS website:

    The European Computer Driving Licence® (ECDL) is the internationally recognized qualification which enables people to demonstrate their competence in computer skills.

    The record breaking ECDL is the fastest growing IT user qualification in over 125 countries.

    ECDL is designed specifically for those who wish to gain a benchmark qualification in computing to enable them to develop their IT skills and enhance their career prospects.

    The problem I have is that I’ve encountered people with these qualifications, and others, purporting to be ‘Microsoft Excel Expert Users’, and they haven’t even figured out that a spreadsheet IS a big calculator! This can’t be entirely due to the course content, so why are these people allowed to pass this qualification: it has to be in the assessment and a reluctance to fail anyone.

    So as an employer facing a knowledge based economy — according to the UK government — where success is based on the skills of your employees, how do you decide which candidates are fit for purpose? My experience is that you can’t rely on these benchmarking qualifications.

    Categorised in:

    No comments.

  6. I’m still working towards an OU Diploma in Computing, and taking my time about it, hence the title. Despite this theme, my last module in developing concurrent distributed systems — catchy title, but accurate — opened up the world of concurrency, and the ease with which truly parallel applications can be developed using modern tools. Ha, as far as I can tell Java is pretty good in the concurrent minefield of a mutable state environment, but limited IDEs are the equivalent of wandering into it with a blindfold.

    The problem is trying to decide which of these mutable resources are likely to be accessed in a concurrent fashion, provide locks to enforce mutual exclusivity; ensuring no other processes is working from an intermediate, invalid state; and all without becoming deadlocked. Traditional debugging and even test—driven approaches aren’t much help, because the errors are dependent on the order in which the processes are scheduled to be executed; not very repeatable, and certainly not controllable.

    So the course left me itching to have a go, but aware that concurrent object oriented development needs to be done in the right language, oh, and very carefully. A little reading around the topic lead me to the idea of immutable state development.

    Now in OOP terms an immutable state is not very helpful, nothing much ever happens. We rely on the software state being stored in the attributes of all those objects, and actions being driven by the exchange of messages between them. But in the functional programming paradigm an immutable state is implicit, since the state is stored in the way functions execute each other, and themselves, no data is actually stored in variables. This means that processes can be executed in any order without any danger of seeing an invalid state: no need for any locking and a much simpler programming job!

    I’ve only just started investigating these ideas, but with the thrust of computing performance in the direction of multiple processors, either on a single machine or via the ‘cloud’, it seems that concurrent, parallel programming may be very important in the future. A couple of languages I want to check out are Erlang and Clojure. Finally, I found the Ruby on Rails Podcast interview with Jim Weirich an interesting perspective on the programming.

    Categorised in:

    No comments.

  7. I’ve played with the iPhone, the best handheld device interface I’ve come across by a large margin, and it would probably be my device of choice at the moment. However, there’s still a lot of functionality missing before such a device could oust both my mobile phone and laptop.

    Here’s the near future dream; they can get a lot wilder.

    I’m working on my latest project on the train, in a tunnel, whilst I travel to a meeting with a client. I reach a critical part where I need to see the big picture, so I find transfer the output to an LCD display in a coffee bar at the station.

    It’s not going smoothly, and I decide I could use some help, so I call a few colleagues and arrange a conference in 15 minutes time. Once we’re all virtually present, it’s early remember, I’d show them the problem by sharing my display output via the network. Each using our own devices we work together, version controlled and still conferencing, until we crack the problem.

    I thank everyone and leave for the Client’s office. Once there I transfer the presentation of the key project details to a large TV in the conference room and send a hardcopy to the printer in the office.

    Oh… and all seamlessly without wires. Of course, this is a picture of the utopia of perfect interoperability and security, but what are the chances?

    Interoperability.

    The device layer interface is a key feature, with transparent support a wide selection of drivers and protocols, I don’t want to have to get involved. As many devices aren’t wireless enabled at the moment, have poor device driver support, or use proprietary communication protocols, this is a real challenge.

    Getting input.

    Input is probably still the good old keyboard and pointing device, of which there are several approaches for those who don’t mind carrying extra kit.

    • Fabric keyboards that can be folded away, like the Just Mobile RoKy².
    • Projected light keyboards like the I-Tech Virtual Laser Keyboard are compact and lightweight.
    • The pointing is easier, a wide range of Bluetooth mice and other devices already exist.

    And for those that do?

    • Traditional mobile phone keyboard. I hate this, I’m too old to be any good and have an aversion to developing arthritis in my thumbs.
    • Touch screen keyboards, the Apple iPhone is the best implementation I’ve come across.
    • Stylus on touch screen for handwriting recognition as used by Palm.
    • Or just being able to use any input device I find lying around, wireless of course.

    There are other options like voice recognition, cameras, and detecting eye movements which could find wider use in the future. I’d like a direct mental link, so I can just think what I want to do, but I’d probably end up with a nasty brain wiping piece of malware!

    Displaying output.

    Displaying output raises important issues surrounding the usability of the actual user interface, after all, I’m proposing to go from working on a typical PDA size display to a 40 inch TV! I want to make the best use of the visible area on any given device, whilst avoiding 4 inch high characters.

    The experience of designing for different web browsers, screen resolutions, and colour maps could be leveraged for this new platform. CSS can be targeted at different media types and such an approach could be adopted throughout the new system.

    Staying mobile.

    Power management is vital for extended mobile operation and I’d like to be able to work normally for several days at least.

    This may be achieved by longer battery life or a totally different energy storage or generation technology. Fuel cells, solar panels or even nuclear power could be used; though even I’d be a bit concerned about carrying around a nuclear reactor. What if the fuel cell ran on a range of organic feed stocks, just like I do? I could recharge my computer at the same time as myself in any restaurant.

    Wireless recharging could be an option, maybe inductive charging such as WildCharge pad. I’d prefer my device to selectively recharge at any opportunity, and from any source, so that I don’t have to be in any particular place or make any conscious decision. The device could decide to top-up from a nearby power cable, the sun as I walk around, or even using the heat of a warm day. Again, I don’t want to know it’s happening or how.

    How long?

    Much of the software architecture and implementation technologies already exist to make my dream device a reality, the real work is in perfecting the hardware at a cost that makes loss or damage acceptable; it’s portable remember. At the current rate of development I suspect I won’t have to wait too long for the device itself. But the legacy issues for hardware interoperability?

    Ultimately it’s my guess that computing and the Internet will become indivisible; not sticking my neck out too much since for many of us it already is. If some of the wilder concepts of ubiquitous computing come to pass I won’t need a single device anyway, I’ll just pick up computing resources whenever I need them from the environment surrounding me.

    Categorised in:

    No comments.

  8. Deploying even my simplest web applications was a complicated matter:

    1. Log in as a privileged user.
    2. Create the domain deployment directory.
    3. Export the application code from Subversion.
    4. Update the file ownership and privileges.

    For Wordpress I also had to export code for each theme or plug—in to the required locations. So I decided to improve the situation. I’ve changed the way my Wordpress sites are handled in Subversion; haven’t moved to Git yet like the rest of the world, and I am using Capistrano to manage the deployment.

    Capistrano is a Ruby based remote task manager, the most commonly used tasks being for web application deployment. Obviously the original target was Ruby on Rails, but many people use it for PHP. It uses Secure Shell (SSH) as the preferred method for logging into remote servers; all communication is then encrypted.

    What follows isn’t a full set of instructions on deploying PHP with Capistrano, HostingRails.com provide a useful piece and you should look at the Capistrano manual, these are my thoughts. May be something more detailed might come later… but no promises.

    Managing the source code.

    The Subversion repository for each blog project uses a vendor branch of the Wordpress source code and svn:externals properties to import the required themes and plug—ins from their respective repositories.

    Wordpress updates are integrated into the vendor branch and then into any of my projects without disturbing any custom code changes. For merging changes I can strongly recommend using the svn_load_dirs.pl script, it allows you to maintain file history and makes the whole process easier.

    And now deploy.

    I currently have my main Subversion and Web servers on the same machine, leaving me with the option to use the local file:// protocol to retrieve the application files. I wanted to make my deployment script more universal so that I could use it for the production and development platforms.

    The obvious choice was the svn+ssh:// protocol I normally use, but in addition to SSH, I use public key authorisation with passphrases for all of my servers. A frequent problem was that Capistrano didn’t like asking for passphrases for remote machines.

    Since the repository and deployment machines are one in the same, I can use SSH forwarding to provide a recursive tunnel by defining the following in the deploy.rb script.

    set :user, "me" 
    ssh_options[:forward_agent] = true
    

    The variable user tells Capistrano which user has SSH access and the forward_agent option allows the same SSH credentials for the tunnel to the Subversion server. Now , if your svn user is different from the ssh user you’ll need to add another couple of things:

    set :svn_user, username
    set :repository, "--username #{svn_user} svn+ssh://hostname/repository/#{application}/trunk"
    

    These variables enabled me to use the default deployment tasks for my application, there’s no need to override them, just use the before_ and after_ hooks to define additional functionality.

    The result.

    I have two WordPress blogs deployed on my server using Capistrano and Subversion for remote control, including custom themes and third—party plugins. I’ve already redeployed to incorporate changes and everything has worked perfectly.

    Next… Drupal?

    Categorised in:

    No comments.

  9. What are the components of a blog post?

    • The title of the post.
    • The name of the author.
    • The date on which the post was published.
    • An excerpt from the content.
    • The post body itself.
    • The tags associated with the post.
    • The categories into which the post has been placed.

    I’m sure that there are more, but this is as far as I got… so the big question is how do I mark this lot up in order to extract even more meaning?

    The two text fields, both being content; the excerpt and post body; don’t necessarily need any container since they’re build from paragraphs. However using <div> would give me a lot more control over the CSS, but is this adding unnecessary mark-up?

    I thought about creating an unordered list out of the post metadata; author, date, tags and categories. It’s all very well describing the whole lot using the ‘metadata’ label, but that’s not very helpful because they don’t belong together.

    I figure that the tags and categories are easy since they’re obviously lists, and unordered ones at that. But the title, author and date are a different matter. Including them to a list is definitely adding extra mark—up, so I haven’t.

    This is definitely an ongoing problem.

    Categorised in:

    No comments.

  10. I’ve come up with a brilliant idea to reuse my old Mac mini. I’m going to convert it into a server on my local network for development and hosting our personal web projects.

    OK… not very original, but the key point is that I want to be able to use the wireless networking, stick it anywhere, and not have to worry about peripherals. A very mobile server.

    I already work with remote servers over public networks, and rarely use anything but the command line. For this project I wanted to be able to use the Mac desktop. This seemed the perfect excuse to play with VNC. Additionally, I frequently use SSH and PKI for encryption and authentication respectively, but not VNC.

    The Plan.

    It seemed to me that there were several parts to the problem, with only one of which I’m familiar.

    1. Configure a VNC Client on the local machine.
    2. Configure a VNC Server on the remote machine behind a firewall.
    3. Enable SSH communication through the firewall.
    4. Lock it all up using an SSH tunnel through the firewall so the Server and Client could talk.

    Now to work!

    The Client.

    I settled on Chicken of the VNC (COTVNC), a open source project providing a VNC Client for Mac OS-X. Great, that’s just what I want and it gets good reviews, but I guess most other clients out there would work too.

    Once installed COTVNC takes almost no configuration, that all comes later in the SSH and Server.

    Connection set-up dialogue for Chicken of the VNC

    You might be able to see that I set up two connections; one for an unsecured connection, so that I could see if the security measures locked me out later; and this one for the secured connection, that’s why the host is the local machine.

    The Server.

    First I tried Apple Remote Desktop (ARD), but found it a little slow, but more importantly I couldn’t find a way to close the two ports in the firewall that the service automatically opened. While I’m diligently using SSH tunnelling to avoid compromising the security of my machine, these two ports are sitting there waiting for attack!

    Time to try a different approach. I chose to disable the ARD service, closing the firewall again and installed a third party VNC server. The one I selected was Vine Server from Redstone Software. The reason? Nothing better that I’d read good things about it in blogs and on message boards, it’s available for Mac OS-X, and it’s free.

    What is in the box for Vine Server on Mac OS-X

    For Mac OS-X it downloads as a disk image containing the Server and a Viewer. I just wanted the Server as I’m using COTVNC, so a drag toward the Applications folder and a double click later I’m ready to configure things.

    Vine server can be run in two different modes; as a System Server that starts automatically whenever the Mac starts up; or as a Desktop Server that can be run like any other application. Since I want to run my Mac mini as a remote headless — no keyboard, mouse or monitor — server, I only configured the System Server.

    Settings dialogue for Vine System Server

    Not especially difficult, but the eagle‒eyed out there might have spotted that I didn’t enable the “Require Remote Login” option; in fact I did the first time and bang went any connection. I reasoned that I’m using SSH tunnelling, so the Server won’t realise that the connection IS via SSH and block it.

    Set the System Server running, checking that it starts up again after a restart, and that’s the Server done.

    The Secure Protocol.

    Actually, this was pretty easy. Go to System Preferences > Sharing and enable the Remote Login service.

    Settings to enable the Remote Login service on Mac OS-X

    Make sure that the other services are disabled, unless you have a particular use for them; I’ll be enabling the Web Sharing service later. This should ensure that the firewall is closed on all ports except the one used for SSH — port 22.

    The Tunnel.

    The idea of the SSH tunnel was to forward any communications sent between port 5900 — the default VNC port — on the local machine and the remote machine, through an encrypted SSH connection.

    Now there are lots of utilities to help you manage your SSH world, but I tend to use SSH-Agent and the command line. I primarily use SSH-Agent to manage authentication, but it does have the ability to construct tunnels.

    Set-up dialogue for SSH tunnels in SSH-Agent

    If you’ve got PKI set up, you won’t even need to enter any passwords in order to establish the connection.

    The Result.

    Once your tunnel is connected, you can start up COTVNC, or equivalent, and log‒in!

    An image of the desktop on the remote machine

    Everything appears to work and I find Vine Server much more responsive than the Apple free offering.

    By the way, I tried logging in with the unsecured connection and was kicked out.

    Categorised in:

    No comments.

  11. I’m writing on the 30 day trial of MarsEdit, the blog editing tool for the Mac. Given that this is my second post of the day — very rare, I know — you might have gathered that I like it.

    I’ve always edited my online content remotely, I have a local copy and can work off–line. I use TextMate for most of my development work and I’ve been using it for blogging too.

    OK… I was reluctant to change. I like having full control over mark–up and haven’t been impressed by a WYSIWYG editor yet, for Web use at least. Untried, I ranked MarsEdit amongst them.

    I must apologise to the developers. It’s a great and flexible tool. Hope I’ll be doing a little more blogging!

    Categorised in:

    One comment — it’s a start.

  12. Virtualization is definitely a big trend in computing and I’m growing to love it.

    On the Web.

    My production server environment is virtualized by the Xen hypervisor; providing a more flexible and cost effective solution.

    I like the freedom of complete root access but, given my relatively low traffic volumes, the cost of a dedicated server would be prohibitive. However, Xen provides me with my own little chunk of hardware resources that no other user’s going to break for me.

    The great thing is that these resources can be altered very quickly to respond to changes in my requirements; great scalability in a changeable world.

    On the Desktop.

    I’m also making extensive use of virtualization on my desktop using VMWare Fusion. I’m a Mac user, but one of the attractions of the VMWare product is the interchangeability of any virtual machine (VM) between platforms.

    VMWare Fusion.

    VMWare have been in the business of Virtualization of a while now, and have a powerful range of products. Whilst many of these are targeted at the enterprise environment, Fusion is definitely a consumer product; in a good way; and the benefits to me so far…

    • Surprisingly seamless Windows XP including Office, in my experience a much better product than the sadly neglected Mac version. Fusion has a ‘Unity’ mode, which places these applications, running in a Windows environment, right on my Mac desktop.
    • I’ve tried different Linux flavours for the desktop and server, and I haven’t needed multiple machines. A great asset when you like to dabble but don’t have much free space; small house you see; and want to keep the bills down.
    • I’ve tried a whole range of software products without the usual worry of messing up my regular working platform, if it all goes wrong I just delete the VM and start again. If I might want to return to this set‒up again, I can take a snapshot of the current installation, or copy the VM file to a backup location so I don’t have to start from scratch each time.
    • Finally, I’ve build VMs of the production server for deployment testing. I know that they’re not identical, but they’ve been good enough to iron out problems in build and deployment scripts before unleashing them on the production server itself.

    A virtual network.

    Fusion has a built‒in DHCP server to provide IP addresses, or they can be assigned by an external network using the bridged network option.

    After exploring these options I discovered that I could build a virtual development network right on my laptop and make it as private as I want. Oh, yes, you can fix the IPs the server hands out, making it much easier to edit that hosts file.

    The NAT option can access the outside world, to install updates for example, by sharing the host connection. However it’s protected from external access. My physical home network uses NAT via an ADSL router, but this is a great option if you’re likely to take your laptop network out on the road and I use it for the majority of my installations.

    If you’re even more worried about unauthorised access to your latest development project, you can use the host‒only option; access only from the host machine or other local VMs using this network set‒up.

    With all the VMs using the same network option, they can all see and access one another. So now I can write my code on the host Mac, test deployment to a virtual CentOS Linux server, and check how it looks on Windows. It’s self contained, I can flip between machines and it’s all totally mobile.

    Categorised in:

    No comments.

  13. I’ve heard and read the recommendation to always avoid doing speculative work for free. In most cases this advice refers to website graphic design, and is intended to avoid wasted effort and pilfered designs.

    I’ve always found that the experimentation the most effective way to investigate new ideas, whether methodologies or technology. Frequently, these experiments — prototypes if you prefer — are also the best demonstration of innovative ideas to everyone else.

    This conflicts with the avoidance of working for nothing. All this leads me to conclude that the correct approach depends on personality and the application.

    Read more of The right approach for me

    Categorised in:

    No comments.

  14. I’ve just spent some time customising a few icons on my desktop. After a while it occurred to me that I could have been doing something productive instead. But what’s productive and what’s not?

    My partner, Clare, works for a medium sized company that has grown significantly over the last few years. A couple of days ago, she was complaining about the way everything on her computer is now so tightly controlled you can’t even personalise the desktop background. The working environment has become utterly uniform with a one size fits none approach.

    To my mind, an employee’s existence is not driven to enhance the business that pays their salary. Whilst most staff display a professional pride, at the heart of it their lives are about enjoying themselves. Spending much of that life at work, it’s understandable that they want a workplace that’s comfortable, inspiring and enjoyable to be around; minimal aggravation and maximum enrichment.

    So why do most companies persist in equating success with the creation of a sterile working environment?

    Business isn’t just about making happier, better people, it’s about making profit. It’s ability to do that is proportional to the productivity and creativity of its staff. In turn they’ve been repeatedly shown to be more cost effective if they’re happy and motivated.

    Creating the icons was a random creative act. I realised later that this initiated a number of useful insights relating to several business focused activities. Thinking back, it isn’t the first time this has been the case, just the first time I noticed.

    Computer systems are endemic in the business today, and they have their part to play in enriching the workplace.

    Encouraging general creativity in employees can invigorate business innovation, essential in a rapidly changing world. Letting them express themselves, through background images of friends, family or their own graphic creations for example, will certainly help them feel less like a cog in the machine. These small concessions might lead to your most profitable product.

    Categorised in:

    No comments.

  15. I love reading, and this Christmas resulted in a pile of new books — courtesy of the Amazon wish-list. I’ve been inspired to rethink my approach to development by two titles from this collection.

    The first is “The Art of Agile Development” by James Shore and Shane Warden. I’ve been introduced to agile development methods in one of my Open University courses, but this is the first detailed description of the practices adopted by agile teams.

    The second tome is “Transcending CSS” by Andy Clarke, which I must confess I was unsure about when I asked for it. I needn’t have worried, this is the best web design book I’ve yet read. I’ve learned a lot about the finer points of CSS positioning and Andy’s semantic approach to mark-up gels well with my interest in the XML in general.

    The most exciting common factor concerns the topic of prototyping. It seems to me that approaching the whole application — from the persistence to presentation — with feature targeted development and frequent, early prototyping makes good sense. If nothing else this agile approach fills me with enthusiasm, and that may be half the battle.

    Read more of Inspirational reading

    Categorised in:

    No comments.

  16. After reading PC Pro magazine issues 159 and 160, I was surprised to find them recommending Webfusion for those wishing to become a web host themselves. My disbelief was due to my own experiences.

    I wouldn’t argue with their observations on this providers reliability, but the main problem with Webfusion, or their parent Pipex, arises when you need any technical support. I short, there isn’t much and that isn’t very knowledgeable; possibly unless you’re a national magazine.

    I contacted Webfusion about a problem that arose with my VPS; six weeks later and after much email, I moved to Memset without the matter being resolved. And as for Pipex, I’m still waiting for an answer to my questions about my broadband package after nearly a month.

    Pipex services are low cost, reliable and performance is generally good; which would be great if their accounting and technical support was less dreadful. If your needs are mission critical this makes Pipex the biggest potential problem your business might have. The risk is yours, but it’s not one I’m willing to take any more.

    Categorised in:

    One comment — it’s a start.

  17. I’ve been working on a website for the Northamptonshire Bird Club which nominated committee members could easily manage themselves. I decided that a Content Management System would be be best way to achieve this, and being a fan of open source I finally settled on Drupal. I liked the modular approach to the software and I hope this will provide me with the scope to alter the website functionality as the Club’s needs changed.

    The scope for customization in both the information architecture and presentation is huge in these systems, and I have to admit I was pretty shaky on where to start. I read blog posts and watched video tutorials, most of which were excellent, but I have often found that personal experimentation is the best way to find things out.

    I started be using taxonomy to link content together. I customized the default content types to present a range of taxonomy terms from which the users could select to define the nature of the document. I’ve found that this leads to a patch association and presentation which is pretty hard for inexperienced users to follow. Basically, it’s a bit of a mess!

    I’ve subsequently installed the Content Construction Kit (CCK) module and I’m impressed with its flexibility. I don’t think it’ll handle some of the more complex content types that I’ve in mind, but these would be best implemented as separate modules anyway.

    The CCK module allowed me to define customized content for each type of blog post, article, or sighting report that the Club needs. What’s more it creates an input form for each, allowing members to simply select the form they need and fill in the blanks. Much easier to control and far less confusing.

    I’ve also discovered the Views module, and I’m hopeful that this will provide a far better way of ordering the website architecture than the old taxonomy driven solution. This module should allow me to really leverage the new content types I’ve defined and produce just about any content presentation I want.

    I’ll post how I get on, but right now I’ve got a video tutorial on Drupal CCK and Views to watch.

    Categorised in:

    3 comments.

  18. I went over to the Apple Centre in Solihull, that’s in the UK, to pick up my newly repaired MacBook Pro this Monday. I thought I’d wait a bit before posting the results to make sure that the fix actually worked.

    I can’t fault the service I received from the Apple Centre, but the quality of Apple’s online and telephone support is appalling.

    I went round and round the automated telephone system chasing the status of my repair until I felt like I was about the have a brain haemorrhage. I’d already tried the online service only to find that it had no more idea about the status of my laptop than I did! Fortunately, I got a call from Solihull to tell me the laptop was ready just as a was beginning to wonder if I’d ever see it again.

    It turns out that is was a failure of the new LED display, and to their credit Apple duly replaced the whole clamshell unit containing the screen. The fix seems to have worked, but my confidence in the design’s longevity has definitely been shaken. This blow is particularly keen due to the fact that the repair would’ve cost nearly £400 if the laptop wasn’t under warranty.

    The long term question is now whether I should consider taking out the AppleCare extended warranty. It’s a lot of money, £279 for two extra years, but if the equipment is this unreliable…?

    Categorised in:

    No comments.

  19. Back in the System 6 era, Apple Macs were niche products; well made, often expensive and largely found in academic circles. I always felt the problem was that Apple had a clearly superior product, but were just plain rubbish at marketing themselves. Wow, times sure change!

    My first Apple was back in the days of System 6 and a the Mac Plus, a combination that comprehensively beat the pants off the Windows offering of the day. Apple hardware was better build and more reliable that the generic PC equivalent and the software was more polished and usable. But that Apple was never any good at mass marketing, and the resulting niche market lead to lower volumes with higher costs.

    Apple have always had a knack for well executed, innovative design. Their hardware and operating system software has always been inseparable, making their developers jobs a little easier and leading to more complete products; a deliberate move.

    In addition, the Apple of today is a more efficient and focused corporate entity with effective marketing at its core. Look at the way they’ve trained people like Pavlov and his dogs; the website goes down and the Web is full of rumour about fabulous new devices.

    But I guess this must come at a price and that is the old business models, where products were released when they were ready. Microsoft has long been marked as an example of the worst excesses of technology corporations, but is Apple much different any longer? I personally don’t think so, and not just because my bad MacBook Pro experience.

    To be fair, the bigger your market share the greater the probability the people will talk about your failures. Yet we’re all hungry for the next big thing. No wonder technology companies now frequently practice early prototyping, fixing the problems in after-sales. It’s a tricky tightrope between reputation and lost market share.

    In short, the mass marketing Apple has joined Microsoft in the big time and is bound by the same rules. Why should we expect a different result?

    Categorised in:

    No comments.

  20. I’m an Apple user that recently I splashed out on a 15 inch, 2.2 GHz MacBook Pro. So why am I having to write this on my old Mac mini?

    The day came and I received my MacBook Pro; beautifully presented in carefully designed and executed packaging. I opened it up and was immediately impressed by build quality that put my past laptops, Dell and Toshiba, to shame. The new LED screen was the very impressive, almost as good as my external Dell 2007WFP.

    Before you get the impression that I’m one of those people that get over excited by anything with an Apple on it, I should point out that the MacBook Pro is not without faults. It lacks a few USB ports, could do with more battery life, gets too hot for my liking; though I’ve never felt in physical danger; and as a result the fan can get a little loud.

    However, in use everything was going as well as I had hoped. All my favourite applications worked well and I am a convert to virtualisation, with both Windows XP and CentOS Linux running at the first attempt.

    But less than three months later and I’m using my good old Mac mini again. The display suddenly dimmed and started to flicker. The local Genius bar, 30 miles away, think that either the backlight or display logic board has failed and are going to replace them under warranty. They were helpful and very apologetic, but have had it for six days now and I’ve not heard anything.

    It’s pretty disappointing for what I previously considered a quality brand. I’ll be posting how well Apple handle the problem, both this repair and the ongoing MacBook performance.

    Categorised in:

    No comments.