Guitar Practice Tools (New App)

I’ve had the idea of working on an application that would help me with my guitar learning journey by centralising some of the tools I think I need and information I want to keep track of.

I am a developer by trade but no longer program for fun, however this was something I really did want to do.

When I got up this morning I wrote the gpTools (Guitar Practice Tools) application (Windows and macOS) with three basic functions that I will find useful:

Timers:

A Session timer and an Exercise timer. The idea being I would start the Session timer when I sit down to practise and leave that running, and then use the Exercise timer to see how long I spent on a particular exercise. I can reset that at the beginning of each exercise. I did buy a kitchen timer but its small and fiddly and makes my desk more cluttered, so I will use this function daily.

Clapboard:

This is another timer, but the idea here is that if you are recording yourself and want to leave the recording going so you don’t have to sort through it later to find the good bits, bad bits, cool riffs etc. you start the Clapboard timer. Every time you do something that you may want to reference later, you click the button and the current timer value is written to a list, latest entries at the top. You can edit the list if you like to document the reason for the entry. Once you have finished recording you can save the export file with the recording if you like and then in future you have a reference of where in the file is the bit you want. Again, it’s basic but it’s going to work for me.

Numbers:

This simply shows two random numbers on the window every three seconds or so. The first number is between 1 and 12 and the second number is between 1 and 5. This useful if jamming to a blues backing track for example, the idea being that the next phrase you play has the amount of notes shown on the screen, and is played in the position shown. It just helps keep your jamming practice from becoming repetitive by playing the same licks and shapes over and over again.

Obviously this is just the start, features I will add in future include:

Stopwatch

Practise Log

Chords Learned List

Practice Schedule

Ultimate Song List

Randomised Practice Sessions

If anyone is interested you can see the quick demo video on Youtube at this address: 

This application is designed purely for my own use and as such it’s not pretty, but it works and will provide a basis on which to build something more significant.

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:

pk

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:

Windows
macOS
Linux
iOS
Android
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…