“git dst refspec matches more than one”

You may get this error when pushing a commit to your repo.  The most likely suspect is that someone named a tag the exact name of the branch.  You can rename the tag or delete it and retry pushing the commit.

If you have a branch you typically keep open because it represents a very strict set of changes, like “Code_Cleanup” but you still want to tag the branches at logical intervals, add more details to the end of the tag.  I’ve seen some serialize the number or just append the date but either way avoid creating a tag name the same name as the branch unless you are sure the branch is going to be retired.

This comes in handy as Doctrine doesn’t always support all native MySQL commands and functions.  Strangely, certain common time and date-related ones like YEAR(), MONTH() and DAY().

The $paramsArr is an array for all placeholders in your standard PDO query.

// Symfony raw queries with placeholders.
// Example query:
$query = "SELECT * FROM users WHERE status=:status
              GROUP BY last_name ORDER BY last_name ASC";
$stmt = $this->em->getConnection()->prepare($query);

.NET Logo

Microsoft has come a long way with .NET, ASP.NET and C-Sharp, to say nothing of Azure Dev Ops and all its free and powerful tools they’ve made available. Gone are the days of the “not invented here” mentality and here to stay is Microsoft’s renewed commitment to not just .NET developers, but to the software community in general. No longer do I feel Microsoft looks at my PHP/Python/MySQL/MongoDB open source credentials with disdain.

Suddenly there’s been a sense of a lot less scheming to try to “convert and lock-in” and more just putting product out there to let free people freely decide. Microsoft’s stock price, in my mind, has skyrocketed. Along with making Visual Studio 2019 more capable, powerful and free, they have shown a renewed commitment in their acceptance and slow, soft-walk into the Open Source software ecosystem. The giant has turned to face the world with a friendly, welcoming smile instead of an adversarial fist, as if opening its arms, ready to call a truce as it (in my mind) finally came to the realization that it stands so much more to gain if it stops fighting two-thirds of the software community and joins it as a citizen with a common goal with a win-win mentality.

I have had a love/hate relationship with Microsoft since I bought my first PC, an IBM PC Jr, with the money I saved up with my paper route and mowing cemeteries in Essex Junction, Vermont. In full disclosure, I have accumulated stock in Microsoft because I have believed in their products and long term growth. Second to Autodesk as my favorite software company, being another small name in their massive list of shareholders they don’t know me and I wouldn’t pretend they would nor would I expect them to care. However, I will say despite the fact that I have been a loyal PC Windows user going on four decades, when it comes to making systems and websites for businesses, I’ve been a Linux guy for about 20 years without regrets.

Speaking from my own perspective with some authority, when I shifted my career from agency work where I was a business-building consultant, media producer and marketing strategist to software and web development, Linux solutions were the only feasible option for most of my clients and employers. For two decades I have made many different kinds of business systems, including ERPs and custom programs along with countless websites and other software products for many freelance clients and employers over the years. For many of the owners and leaders of these companies, there was seldom any serious debate to consider developing any new systems in Microsoft and .NET, though there were many discussions about how to free themselves of their current dependency on it.

In the past, Microsoft’s perceived attitude and treatment of smaller businesses kept many small businesses away, a major reason I stayed firmly manning the mostly PHP & MySQL ship for so long. Many small business owners begrudged Microsoft or simply couldn’t afford to move to .NET while others found they couldn’t afford to stay on Microsoft.

To stay relevant and current, I have been studying .NET, ASP and C# these past two years and I have picked up other skills and worked in other languages like Python/Django and a little Java, but since behemoths like WordPress and Drupal are PHP/MySQL based that was where the demand was for over a decade. With the help of Zend, Laravel and Symfony PHP frameworks, up to only a few years ago PHP dominated the thriving web landscape.

For the web, it used to be an almost binary choice between PHP and .NET. Now, the competition of .NET and now NodeJS based systems seem to inundate the software development job boards as PHP appears to be waning faster than the tested and mature language deserves. After all, many government agencies still require certain systems run on Drupal due to its reputation for excellent security, as is .NET.

Unpredictable fees aside, there were other reasons why I stayed firmly manning the mostly PHP & MySQL ship for so long. Could I have steered my employers, some fairly large businesses, to Microsoft platforms, servers, SQL databases, and .NET over the years? Probably, but assessing the landscape and alternatives at the time, it wasn’t a hard decision for them to make – they all deemed that it was not worth the risk to change.

Since the late ’90s Microsoft’s attitude and treatment seemed to border on contempt of smaller businesses and made decisions that kept many of my clients and employers away. Their “exclusive club” attitude along with the uncertainty of their licensing fees helped sustain the reciprocal animosity towards them. Microsoft’s quick turn of late towards embracing the Open Source approach has been viewed with skepticism, but to me it’s competition working out the bugs and throwing out old paradigms. It’s the system at work, ever optimizing the different cogs, reducing friction and bottlenecks in its own way. Not the smoothest, not the most optimal or ideal, but real world optimization of systems are seldom predictable, clean and linear, but at least it’s happening! In a way it’s like why we test so much code before it gets into production, and even then there’s always a need for improvements.

Though for Microsoft especially that “common goal” as a “citizen” I mentioned earlier is an amalgam of many smaller goals, including its own self-interests, at least they are accompanied with recent very generous contributions to the open source community. No matter what their motives are, to me at least, Microsoft has finally grown up. There are bullies in the schoolyard and there are adult bullies and instead of trying to be the bully in the playground and the boardroom with the “Us against Them” posture, it has humbly stepped down from its elitist “our way or the highway” thinking and joined the ranks within the greater software community. Its slow walk became a run in 2017 as it really started to change its attitude and tone, accepting competing solutions and paradigms, partnering and working along side and (dare I say) embracing other libraries.

Their attitude of “not invented here” has morphed these past ten years, albeit slowly and painfully, into “don’t reinvent the wheel.” In a way, Microsoft is finally applying logic and more concrete software development principles to their own products and business. “DRY” – Do not repeat equates to “don’t reinvent the wheel.” I have taken notice of Microsoft’s new commitment to providing the best products to get the job done and its peace offering towards the Open Source community. In turn, I will consider recommending .NET and ASP as a viable solution to those who may benefit.

Should any developers want to look into transitioning to .NET or if you are interested in just learning more about software development, Microsoft has a treasure trove of free resources available now more than ever before. On a side note, I highly recommend IamTimCorey.com and his excellent and thorough tutorials of all things C# and .NET. This man is an experienced master whose videos and guided tours I highly recommend watching, following, and practicing.

Before Microsoft made these seismic changes they were generally seen by many in the open source community as a monolithic, close-minded exorbitant license fly catcher where once you were ensnared there was no escaping. I know like any giant corporation they have a duty to their shareholders and Microsoft has their ulterior motives. I am aware that in the end they will profit more if more of us software and web developers, uh… embrace them. But that’s okay with me as long we all get the best Return On Investment, something many people I’ve worked for in the past couldn’t seriously justify for many major projects and systems in the past.

I’d like to shout out David Herron from TechSparx for writing a quick and easy to follow tutorial for deploying Node.js on a Dreamhost server!  Super easy instructions and examples to follow, worked like a charm!

I’d highly recommend Dreamhost link to this article since their instructions fall quite short explaining how to it!

Click here if you’re looking for the “Node on Dreamhost Solution!”


All experienced web developers know that before you run any updates to a system that you back up your database and files, and Mautic, the marketing automation platform, is no exception.  Mautic comes in two flavors and this only applies to the completely free community version, which in my opinion makes Mautic the best, most powerful and scalable free marketing automation system.  It comes with no strings attached!  I may be partial to Mautic because it’s built on Symfony, as an experienced Symfony PHP developer in Jacksonville, Florida, I can say it makes me feel better about its stability and it tells me that the people behind Mautic are serious about its future and success.  We’re talking about the platform’s code base, which is stable, secure, and strongly encourages best coding practices.

Also, Mautic under the hood is very easy to customize and extend.  It uses all of Symfony’s patterns and components, so it’s easy to create your own Twig templates for your company that can do some very intuitive things that you just can’t do in much more expensive marketing automation platforms like Hub Spot, Marketo, SharpSpring, and InfusionSoft.

The fact Mautic is built on a very familiar and stable PHP framework makes it very unique among the marketing automation systems out there and it is positioned to explode for businesses tired of paying thousands of dollars every month for software that locks them in.  Are any of these other marketing automation platforms developed in a major PHP framework?

Probably not, and this is an area of concern because if it’s all proprietary, these other MA’s (acronym for “Marketing Automation”) are reinventing the wheel with basic system functions, functions best left uncoupled to a framework so there’s parallel improvements to the system.  Symfony updates and improves the way code talks to the database while the Mautic magicians work on ways to improve Mautic.

Updating Mautic: The Two Golden Commands To Fix Your Marketing Automation Update

When you log into your Mautic, you will see update notification.  This always makes me a little anxious, especially knowing that it’s not a button click, there’s always something that needs to be done afterwards to make sure the update completes.  Usually, it hangs at the cache clearing stage during the automatic update, so it never actually reaches the part where it can update the database schema, so that’s where these two commands have saved the last three updates I’ve performed in Mautic since 2.7 all the way to 2.9.2, it’s most current available version.

First, “cd” into your Mautic directory in the command line, then type in the following:

app/console doctrine:migration:status
app/console doctrine:migration:migrate

Here’s something similar you should see after executing both commands.  Again, it hasn’t happened to me yet where I had to restore, but do not forget to make backups of your database and files!

$app/console doctrine:migration:status
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

 == Configuration

    >> Name:                                               Mautic Migrations
    >> Database Driver:                                    pdo_mysql
    >> Database Name:                                      your_db
    >> Configuration Source:                               manually configured
    >> Version Table Name:                                 migrations
    >> Version Column Name:                                version
    >> Migrations Namespace:                               Mautic\Migrations
    >> Migrations Directory:                               /home/app/migrations
    >> Previous Version:                                   2016-09-26 00:00:00 (20160926000000)
    >> Current Version:                                    2016-09-26 00:00:01 (20160926000001)
    >> Next Version:                                       2016-09-26 18:28:07 (20160926182807)
    >> Latest Version:                                     2017-07-28 11:03:51 (20170728110351)
    >> Executed Migrations:                                46
    >> Executed Unavailable Migrations:                    0
    >> Available Migrations:                               89
    >> New Migrations:                                     43
[]$ php app/console doctrine:migration:migrate
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

                    Mautic Migrations

WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)

Then don’t forget to clear the Mautic cache.  The standard Symfony “app/console ca:cl” always results in an error, so you have to cd to the app/console/cache directory and remove all the files manually with “rm -rf *”.

Setting up marketing automation requires a “Programmer’s Mentality”

As an experienced web developer, it’s almost a liability knowing so much about marketing and the business side.  It’s ironic, though because so much of marketing requires understanding of data and setting up systems to automatically do things properly based on logic.  This sounds familiar and much more complicated than “marketing” though, doesn’t it?  That’s why data, systems, logic, flow charts, and automation all require a programmer’s mentality to execute properly.  To set up a marketing automation system for any business so it succeeds and works properly is technical and complex.  Marketing automation requires more programmer’s skills than marketing knowledge, by far.

I have over 13 years experience in web development and media production and am currently a senior PHP developer in Jacksonville, Florida, specializing in the Symfony framework, LAMP stack development, database architecture and system design, among other things.  I have a “programmer’s mentality” and I know when I meet someone who does not.  Also, a few friends of mine interviewing around Jacksonville and elsewhere have shared with me a few stories lately (I’m perfectly happy where I am, despite the awful commute).  Here’s a little advice for those looking to hire any web developers:  Don’t look silly and naive when you try to pigeonhole experienced web developers by labeling them as just a “front-end” or a “back-end” web developer, we can be good at systems and databases and still know how to make the interfaces and web pages look as good as the system functions in the back-end.  People can have a strong business and marketing skill set and still be effective programmers.  This is just a pet peeve of mine, just because you may have only dealt with web developers in the past who are “strong in one area” doesn’t mean we’re all like that.  These days, web developers must have a diverse set of skills, just like all graphic designers should be able to build their own emails and web pages.