Why Xojo?

People sometimes ask what language I use for software development. For many years now my preferred language has been Xojo. The response to this is normally ‘What’s Xojo?’ and ‘Why use a language nobody has ever heard of?’

Xojo has been around since 1996. It has allowed me to develop applications that run on Windows, macOS, Linux, Android, iOS and the Web. You can even develop applications for Raspberry Pi, although I haven’t done so yet.

Xojo and the essential MBS plugins have helped me earn a living for many years and has it remained relevant and contemporary throughout that time. I also find that I can develop much faster in Xojo and provide a solution quicker, which equates to less expense for the customer.

There is a learning curve, but far less than for many other languages, and for me the ability to develop applications that can be compiled for other platforms with minimum changes to the source code, is fantastic.

Most of my users over the years have been running Windows, but I almost always develop on a Mac, a significant plus for me as I don’t enjoy using Windows on my main computers.

Xojo also makes it easy to get into programming, offering a range of purchase options that should suit programmers or hobbyists of any level, as well as providing both student and teacher editions of an ‘Introduction to Xojo Programming‘ textbook.

Hybrid Working

Hybrid working is a form of flexible working where workers spend some of their time working remotely and some in the employer’s workspace. As a senior leader, you might consider the benefits of hybrid working from different perspectives, such as:

Employee Satisfaction: Hybrid working can help increase employee satisfaction, which can help businesses maintain their most valuable talent and lower their hiring and onboarding costs. Employees can enjoy greater flexibility, better work-life balance, less commuting, and more autonomy over their workload.

Organisational Performance: Hybrid working can also improve organisational performance by empowering employees to work to their strengths, fostering a culture of trust and accountability, and enabling faster and more agile decision-making. Hybrid working can also enhance creativity and collaboration by retaining the benefits of in-office contact while allowing for more diverse and cross-functional teams.

Cost Efficiency: Hybrid working can help reduce operational costs by optimising the use of office space and resources, as well as lowering travel and relocation expenses. Hybrid working can also enable access to a wider and more diverse talent pool, which can improve the quality and diversity of recruitment and retention.

Social and Environmental Impact: Hybrid working can also have positive social and environmental impacts by reducing carbon emissions, traffic congestion, and air pollution from commuting. Hybrid working can also promote greater inclusion and fairness by offering more opportunities for workers with different needs, preferences, and circumstances, such as those with disabilities, caring responsibilities, or living in remote areas.

Of course, hybrid working also comes with some challenges and risks, such as maintaining effective communication, collaboration, and coordination across hybrid teams, ensuring the wellbeing and engagement of remote workers, managing performance and productivity, and ensuring legal compliance and data security, more details on the challenges later in this document.

Therefore, you might want to consider how to plan and implement hybrid working policies and practices that suit your organisation’s goals, culture, and context, as well as the needs and expectations of your employees. You might also want to consult with your HR, IT, and legal teams, as well as your employees and stakeholders, to ensure a smooth and successful transition to hybrid working.

The Challenges

Some of the common challenges of hybrid working are:

Communication: Hybrid working can make communication more difficult, especially when some team members are in the office and some are not. It can create information gaps, misunderstandings, and conflicts, as well as reduce the frequency and quality of feedback. To overcome this challenge, hybrid workers need to use clear, concise, and consistent communication methods, such as video calls, instant messaging, and shared documents, and establish regular check-ins and updates with their managers and colleagues.

Coordination: Hybrid working can also affect coordination, which is the ability to align tasks, goals, and resources across different locations and time zones. It can create challenges for scheduling, planning, and delegating work, as well as for monitoring and evaluating performance. To overcome this challenge, hybrid workers need to use effective coordination tools, such as calendars, project management software, and dashboards, and establish clear roles, responsibilities, and expectations for each team member.

Connection: Hybrid working can also impact connection, which is the sense of belonging and trust among team members and with the organisation. It can reduce the opportunities for social and informal interactions, which are important for building and maintaining relationships, as well as for fostering a culture of collaboration and innovation. To overcome this challenge, hybrid workers need to create and participate in virtual and physical activities that promote connection, such as team-building exercises, social events, and mentoring programs, and express appreciation and recognition for each other’s contributions.

Creativity: Hybrid working can also influence creativity, which is the ability to generate and implement new and useful ideas. It can limit the exposure to diverse perspectives, experiences, and stimuli, as well as the serendipitous encounters that can spark creativity. To overcome this challenge, hybrid workers need to seek and share inspiration from various sources, such as online platforms, podcasts, and books, and engage in brainstorming and prototyping sessions with their team members, using both synchronous and asynchronous methods.

Culture: Hybrid working can also affect culture, which is the shared values, norms, and practices that shape the identity and behaviour of the organisation. It can create inconsistencies and inequalities in the experiences and opportunities of different groups of workers, such as those who work more remotely or more in the office, as well as those who have different preferences, needs, and circumstances. To overcome this challenge, hybrid workers need to embrace and celebrate diversity, inclusion, and equity, and ensure that everyone has access to the resources, support, and development they need to succeed and thrive.

These are some of the main challenges of hybrid working, but they are not insurmountable. With the right strategies, tools, and mindsets, hybrid workers can overcome these challenges and enjoy the benefits of hybrid working.

Note: This post contains some AI generated content.

Ideas and Innovations Committee

I believe the creation of an ‘Ideas and Innovation Committee’ would be of great benefit to any company and its staff members.

The purpose of the meetings is ideas, not whines or whinges. Basically we are asking our senior personnel for ideas on how we can make the company more efficient, more profitable or maybe just a better place to work.

If we are not improving then entropy guarantees we are getting worse. Companies needs innovation and the more minds that focus on this the better the chances of making it happen.

My proposal is that the Ideas Committee meets monthly and consists of managers and possibly senior supervisors.

The meeting will be organised by a Chairman. The Chairman will ask around the table for ideas, each individual will have a maximum of 5 minutes to present their idea, only one idea per individual, per meeting will be accepted.

Stage 1

Once an idea has been presented there will be a short period to allow for discussion and questions. At the end of this period the presenter will ask for support for their idea. If at least one other person will second and support the idea then the idea is classed as Stage 1.

Once an idea is accepted as Stage 1, the presenter will be asked to come to the next meeting with the idea written out to be properly presented to the group. This is Stage 2.

Stage 2

Following the Stage 2 presentation the idea will need majority support to become Stage 3.

Stage 3

To reach Stage 4 a Stage 3 idea needs to gain an Executive Sponsor who will support the idea and present it to the board for approval.

Each idea, who presented it and what stage it reached will be documented and sent out as minutes to each committee member following the meeting.

I’d expect each manager to involve their team to help come up with new ideas. To provide further incentive maybe we could have an annual ‘Most Innovative Department’ award, maybe a wall plaque or similar. Not only does this show our employees we listen and are invested in the future but it also demonstrates the same to our customers.

For companies to go forward and succeed I think new ideas and better communications are essential. The time to implement something like this is now. There is never a better time to implement change and improve our culture than right now.

Databasics: 1 – Primary Keys

There is an ongoing debate among database experts regarding the design of a Primary Key. A debate that in my opinion should have been done and dusted a long time ago.

Note: A Primary Key is a piece of data contained in a database Column that uniquely identifies the database Row. This is the same as how a National Insurance Number uniquely identifies us to the authorities in the UK, or how a soldiers Service Number uniquely identifies then within the Military. If you need to View, Update or Delete an existing database record then it is essential that you can uniquely identify it.

Two Main Schools of Thought

The first says that the Primary Key should be a valid piece of information in it’s own right – not just an identifier. Like a name for example. In the West we use a Surname which identifies us when amongst other people, most of which will hopefully have a different surname. In situations where that is not true, for example family gatherings, the first name can be used as well as a means of narrowing this down. It can be difficult to build up a unique piece of information using valid information.

The second school of thought acknowledges the problems of the above solution and solves these issues by allowing a non meaningful Unique Identifier whose sole purpose is to be able to identify uniquely within any amount of similar items. This is basically what we have with Military Service Numbers and National Insurance Numbers.

My Preference

My preference is with the second school of thought and in fact you can easily adopt this strategy with most Database Engines using the Auto Increment option on the Column. This lets the Database Engine itself take care of generating a Unique, Non Reuseable Identifier.

I always use the first Column of my Database Table as my Primary Key and name it:


Many of my earlier databases used an incrementing number as the primary key, a number that was unique within the table. One particular system used a number that was unique everywhere within the whole database, the theory being that it would make it easy to see the order of inserts across multiple tables. I never found this to be needed however and I never used it again.

One of the downsides of using an incrementing numeric value as a primary key (if this key is used as a foreign keys elsewhere within the database) is if you have to export and reimport data following a database issue.

You also get issues when you are operating data on a remote database in an offline state, that then needs to be reconciled and synchronized back to the main database.

My current way of thinking is that instead of an incrementing numeric value, I would instead use a GUID instead.

Consistency and Structure

All my Database designs use the same structure in order to build consistency, something which is not fully appreciated until you have to work with legacy databases which haven’t been built with consistency, structure or maintainability in mind.

Another example of consistency and structure; the second column of every Database Table I design is always updguid.

This column contains another identifier, however this one changes with every edit or update of the database record. This is used so that I can find out if the data I am viewing on my screen has actually since been updated elsewhere by someone else.

A comparison between the value of the updguid I have in memory and the value of the one stored in the database is all that is needed to determine the validity of the information I am viewing. If the information is stale I have several options I can pursue. This all is part of my Record Locking strategy, covered in another Databasics post soon 🙂

Artificial Intelligence: Badly Named?

It’s often said that it’s all in the name. Naming is extremely important whether variable naming in Software Development or naming a particular technology itself.

Artificial Intelligence or Synthetic Intelligence as it is often called is in my opinion badly named, as the words Artificial or Synthetic imply that the noun Intelligence is achieved, only through a non natural process.

I believe a better name would be Simulated Intelligence, as this implies something that imitates intelligence, rather than achieves it.

I’ve not seen this articulated elsewhere so it might be that many, or most, would disagree. I stand by it however, but until we are able to adequately describe what intelligence actually is, it may well be a moot point.

Cross Platform Development with Xojo

How about a software development environment that lets you create powerful cross platform software for the following platforms:

Raspberry Pi

What about of it lets you use any (or all) of the first three platforms as your development platform? What about if for the Mac you could create ARM Native applications, or X86-64 Intel versions, or even a Universal binary?

There is such a tool and i’ve been using on and off for nearly 20 years. Xojo has had a couple of name changes over the years and it’s current name means that it’s always easy to find it on Google 🙂

I have in the past used Xojo for creating applications for the Apple App Store, Google Play Store, Commercial macOS and Windows applications as well as custom applications for paying customers. It truly is an incredible tool and just because you haven’t heard of it doesn’t mean it’s not worth knowing. Xojo has been around since 1997 and continues to get stronger with around four releases per year.

I will be writing far more about Xojo in future, but for now you just get a quick introduction 🙂

Learning and Teaching Organisation

If you are not constantly learning, you are losing out to an organisation that is …

The idea for this proposal came from the fact that there are things I need to learn and embrace to help me be better at my job.

A while ago I came up with a list of areas of ‘learning’ in which I need to get everything from a brief overview to a deep understanding. Many areas were technical, some were more practical and for me more difficult because they are, if not outside, at least at the edge of my comfort zone. I have been working through this list recently and will continue to do so going forward.

If I as a typical employee in a regular job have realised how much I don’t know and how much I need to learn, do others think the same about themselves? Could we all benefit from additional learning? Funnily enough on a daily basis we are surrounded by people who know stuff we don’t, but that we could benefit from knowing.

I think it would be a great idea for all organisations to become a Learning and Teaching Organisation.

Why can’t the company allocate a time period (2 hours?) on a regular basis (fortnightly, monthly?) for our staff (managers only? Supervisors? everyone?) to optionally either learn or teach something?

It could be myself and a couple of others sitting with ??? to learn how he optimises product and how he overcomes daily scheduling of production problems. It could be ??? and a few others sitting with ??? in Accounts to learn about how credit cards and invoices are reconciled. It could be ??? and ??? taught by myself how to do SQL queries. It could be a group brainstorming about the current disrupters such as AI and Machine Learning and what will be the benefits and issues for us as a company?. It could be any individual or group sitting with someone and learning about something.

Some ideas about things that could be taught are:

Part of your own job
An industry best practice
A specific technology or skill
A particular methodology or book
Our products
Certain customer organisations
Company standards
Company techniques
Health and safety
HR related information
Company disciplines
Rules and regulations
Selling techniques
Customer Service techniques
Lean / TQM / TOC manufacturing
I could go on, but you see where I am going with this.

Learning is beneficial and so it teaching. I think it would make for a better educated, more cohesive, more confident, more empathetic workforce with much better knowledge of the organisation as a whole and their colleagues roles within it.

What’s not to like ?

Software Licensing & Piracy: Part 2

Part one of this article finished with the following question:

What is it fair to expect your customer to do to license their copy of your product, and so help protect your product, your sales, your livelihood and the future investment and development in a product that is important to both you ?

I believe that it is fair to expect the customer to do something to help the software developer protect their product, after all if the developer doesn’t stay in business then the product doesn’t have a future and the customer could be left high and dry.

That’s not to say the customer can be expected to jump through any hoops … the emphasis is on the developer to provide a method of licensing their product that can be done quickly and easily and thus encourage the customer to purchase and use a legitimate copy of the software rather than paying a visit to insert name of dodgy virus ridden download sites here or similar.

My opinion is that if I, as a user, purchase a piece of software for my own use, then I should be entitled to copy it onto my PC and my Mac and my Laptop for use whenever I like. I should also be able to copy it onto a USB Drive, connect the drive to a friends computer and use the product there also. I should not however copy the software to my friends computer thereby giving them the ability to use it in my absence. I expect to have to follow a documented procedure to identify to the software that I am the legitimate owner. This should be a simple and one off process.

I believe the previous paragraph is fair to both the customer and the software developer. I believe most people are honest and do not mind paying a reasonable price for a quality product. The software industry has in some ways become its own worse enemy with some companies having complex and unworkable, illogical and unfair licensing practices. ‘We need the customer more than they need us’ is something developers should be bearing in mind.

Offer a choice of license types and schemes that not only give the user choice, but also offer additional discounts for worthy establishments, education and charities for example.

The different types of software license that are necessary in order to give the customer the choice they require, can also bring additional and unwanted complexity. In order to also give the customer the licensing choice as well as the simplicity they desire then maybe cost additional license types at N * x. N is the Single User Standard Price, and x is the multiplier?

UPDATE IN DECEMBER 2023: Is this still an issue? It seems software companies have over the last few years decided to adopt the subscription mechanism for almost everything. This makes sense for some categories of software, but for many others it is just an unnecessary inconvenience and expense for the customer. We’ll see if this model is sustainable over the long term…

Software Licensing & Piracy: Part 1

This is an article I wrote in 2014 and which was later published in Better Software Magazine, September / October 2014 edition.

Your favourite piece of software was created by someone, or many someones, who used their time and hard won expertise to build something useful or enjoyable, or both. With the exception of Free Software or Open Source Software, that someone is entitled to, expects and deserves to be rewarded for their efforts.

If a price is attached to the software and you use the software without paying the price that is asked, then that is Software Piracy. Many would argue that it amounts to nothing less than theft.

If I sell physical products, lets say Widgets, then if I have 10 and you take 10 without paying for them, then I now have 0, you have 10 and hopefully a guilty conscience as well. That is theft. If however you use my software without paying for it then I am not directly affected by it. I still have it. Would you have bought it if you couldn’t have obtained a pirate copy ? Maybe. Maybe Not. In my opinion that is why Software Piracy differs from traditional theft. What you have actually done is taken away my chance of receiving income from you for that software sometime in the future. It just isn’t clear cut either way, with laws, policies and attitudes being firmly rooted in the ‘pre digital media’ 20th century.

Having established that there is a cost to producing software and that the developer does deserve to be rewarded for their time and efforts, it stands to reason that we have to have a mechanism in place that makes this possible. That mechanism is generally known as Software Licensing.

I’ve been developing software for financial reward for nearly as long as I’ve been using computers, well over thirty years, and I have never wavered in my belief that whatever form of licensing you use, you should never punish the genuine, fee paying customer for the actions of the Software Pirate.

Seriously, I have bought software in the past that had licensing schemes so restricting or complex or time consuming (or just plain ridiculous), that I have saved time and effort by downloading a cracked copy of the software and using that instead, all the time cursing the software developers for making me waste my time and effort. In effect punishing me for my honesty. As a Software Developer or Software Publisher that’s not an experience you want for your customers.

Whatever Software Licensing mechanism is used, there will always be some who do not like it and resent it being used. If as a developer you have done your best to minimise the impact on the genuine customer, whilst making some effort to thwart the Software Pirate, then you have done all you can and any customer who is going kick up a fuss about your licensing mechanism is unlikely to be a customer you actually want. Most customers would actually like you to stay in business and realise that to do that, it is necessary to be paid for the work you do, and / or the products you sell. Sacking your customer can sometimes be a good thing. But that’s a subject for another blog post 🙂

So what is a fair software license, for both the supplier and the customer ? What is it fair to expect your customer to do to license their copy of your product, and so help protect your product, your sales, your livelihood and the future investment and development in a product that is important to both you ?

I’ll continue this in the next post.