The greatness of the PHP community – Beyond language barriers and countries

I became a PHP programmer in 2003 and used PHP3 at the time.
At this time, I felt like I was doing just my job.

I joined the PHP community since 2008.
At that time, there was a study session boom, mainly in Tokyo area, where study sessions for various programming languages ​​were held.
This was so much fun and I was getting love the PHP community and PHP itself.

Most of the study sessions were held only in Japanese, but some, such as CakePHP, were held with guest speakers from overseas and interpreters attached.
In these sutudy sessions, I realized that Japan is not behind in technology.
Beause the thing that Japanese programmers are worried about is that some people overseas are also worried about the same thing.

There are few people who speak English in Japan, and I was one of them.
So without an interpreter, I couldn’t understand the context, but when I saw ZendCon online, I felt, “What a wonderful conference, I’d like to go someday.”

In 2011, there was the Great East Japan Earthquake. Iwate Prefecture, where I lived, suffered a great deal of damage. A self-defense force rescue camp was set up in the prefectural office, which is very close to my house.
Looking at the scene, I became sad and suddenly thought, “I’m alive, so I’ll do what I want to do as soon as I can.”
And I moved to Tokyo.
In October of that year, I joined ZendCon for the first time.
I don’t understand English at all, but PHP. At that time, I was happy with seeing the programs and diagrams on the slides. And then returned to Japan.

Then, in 2014, I had the opportunity to go to ZendCon again and joined.
Participation at this time will change me greatly thereafter.
At this event where PHP community attendees from all over the world gathered, everyone was kind and fun talking about PHP, and I felt that I love this atmosphere.
If I could speak English, I really wanted to discuss more with some speakers.
I wanted to learn English and communicate more and I really wanted to join this community.

Then I returned to Japan and started studying English conversation.

In 2015, I talked to other participants a little at ZendCon, which moved to Las Vegas. But it’s still just say hello.
Every time I participated in ZendCon, in 2016, 2017, and 2018, little by little, I could talk more.

This year, 2019, I joined PHP [world] instead of ZendCon.
Almost all the participants found that they were very interested in PHP and had a great discussion. I had a lot of fun and the PHP community was really great.

Also this year, I made an English track without an interpreter at a PHP conference in Japan where I attend as a core staff member.

The idea was to create a place where people could communicate in English and hope that more people would be interested in communicating with developers in different countries.

Actually, the number of people who heard the English speech was not so many, but after that, I was able to see the smile and the shine of the eyes of the participants, and I was glad that I did.
I also really thank the English track speakers who came to Japan this year.

My English has not yet reached a level where discussions are possible, but I hope that I can continue to study and become a bridge to the community.

Please join the PHP community in Japan.

As an aside, this year, I created elePHPant for the Japan PHP Conference.
Thanks to the members of elePHPant channel on phpug Slack for helping with the creation.

Christmas Presents

When I was a kid, I admit, Christmas was mostly about the presents. This changed over time as I grew older. Now that I have kids, I admit, Christmas – again – is mostly about the presents. Not the ones I receive or expect, but the ones the Christkind will bring for my kids – if you know what I mean. (In Germany, the Christkind brings the presents on the eventing of December 24th, with the help of some angels of course, because how could a newborn possibly move around all those presents?)

A few years back, when I did not have children yet, a friend of mine said: “Now that I have children, days like Easter and Christmas starts to be more meaningful to me again”. I can relate to this statement, today. But still, Christmas seems to be too much about the presents, and everybody, especially this year, seemed to be really stressed out. We all know that the Christmas we celebrate is not what it should be, yet still we fail to fundamentally change something about it, or at least about the way we deal with it. Admittedly, fundamental change is really, really hard to achive. So why not try some little changes?

At my company, we stopped sending out Christmas presents along with our season’s greetings. Instead, we donate the amount of money we would have spent on the presents. In recent years, we have donated to an orphange, to child care, and to an institution taking care of homeless mothers with their children. It feels good to do something charitable, at least once year. And, let’s face it, there are so many people, young and old, that are more in need than the average IT expert.

This year, my family and I found out that our city accepts presents and hands them to those in need. Apparently, even in the middle of Europe, in rich Germany, close to Munich, where we generally have a pretty decent standard of living, even in the small town where I live, there are people who cannot afford any Christmas presents. We should never forget how privileged we are.

I know I am privileged not only because I made a career in IT, but also because the PHP community helped me get to where I am. Around 2001, I got into writing articles about PHP, then started speaking at PHP conferences and subsequently got into writing books about software development with PHP. Ten years ago, I co-founded The PHP Consulting Company and started to focus my professional efforts on PHP and related technologies.

Over the years, I have been called a “rock star”, a “part of the A-list”, a “luminous figure”, the “Uncle Bob of PHP”, and an idiot, for that matter. The latter characterization was part of a comment somebody had posted below a conference presentation of mine where I had suggested to avoid commenting source code, but instead write the code in a way that no additonal comments are needed. Well, everybody is free to agree or disagree with me on pretty much every technical topic. I know I have some strong opinions and I a publicly state them with a strong voice. It is okay to disagree with somebody. Calling them an idiot just because you disagree is another thing. It hurts. People may not realize, but just because someone is a more or less prominent figure because they are publishing books or online content and speak at conferences, they are still humans, and they do have feelings. And the problem with that one bad comment out of ten is that this one tends to stick.

Giving feedback is difficult, and giving constructive negative feedback is even harder. I know there are people out there who tried public speaking, writing, or publishing an Open Source project, but got discouraged at some point by negative feedback, so they gave up. Creators of Open Source software (or content) donate the most precious thing they have to us: their time. Our time on earth is limited, after all, and there are so many things to do. Still there are people that choose to invest a substantial amount of their time into us, the users of Open Source software. That is like a permament state of Christmas. We get presents all year round. But are we thankful enough?

I do not really believe that anybody creating an Open Source software does it for the fame. Fame sometimes comes as the consequence of years of hard work, but certainly not quickly. They clearly don’t do it for the money. Nobody can live on that odd donation they receive every once in a while, or that little gift from their whishlist. Github has set up a Sponsors program that helps to get some money to the creators. While this may sound like a brilliant idea, I am extremely biased, because I do not like the idea that Github = Microsoft is in control of most existing Open Source software, by making the creators financially dependent on the platform they are developing it on. I know some people use Patreon, but when you give money to Patreon, a good part gets sucked up by fees, plus you cannot get a receipt, so it’s not a real option for companies.

So if it is not about the money, and we assume that it is not about the fame, what remains? The good feeling to donate (their time to us). The good feeling to do the right thing (by creating free software, or knowledge). And we react by no feedback at all (which is bad), or negative feedback (which is worse). Remember, the one negative out of ten positive comments will always stand out.

I am clearly not suggesting to never say anything negative. Progress would be much harder if everybody would always just say nice things. But we should pay close attention to be constructive and not insulting when giving negative feedback. “Please help me understand why …” sounds completely different than “You failed to make clear …”. “You are an idiot” is a different message than “I do not agree with your opinion”. Saying “I see where you are coming from, but in my experience, things are different” will make it even easier to get a constructive conversation going.

When I got into the PHP community, I made it a habit of approaching project maintainers and contributors and thanking them for their contribution to PHP and Open Source. I am still doing this, and even though it may be just a small gesture, it seems to have an impact. Everybody working in or for charity is probably not recognized enough, so: thank you all. And: contributing to Open Source is charitable, even though the tax office does not recognize this (yet).

There is a lot of ongoing discussion about the fact that only a small fraction of Open Source users give back, and a vast majority just takes benefit from other people’s work. I can see where that argument is coming from, but I do not agree with that point. Even the fact that you are using sofware is already a statement. You invest your valuable time into building a solution based on something, that is a statement of your trust into that something.

Of course, we can argue that giving back more actively would be preferable. That could be patches, bug reports, documentation, education for others (for example by writing a blog post, or giving a presentation). How about giving back by more constructive, positive feedback and cutting back on negative comments, on words that could potentially hurt somebody on a personal level.

So regardless of whether you feel that you are already giving back, or if you feel that you have not given back enough to the Open Source community (yet): Let us be nicer persons. This is your entry level way of giving back. It’s free, and it does not even hurt ourselves. In fact, it even feels good.

I think doing this would not only help the various Open Source communities, but also the world at large. And it is so easy to do, yet so very, very difficult to start, because it may require a shift of our views, and a change in behaviour. In comparison, just throwing money at something is so much easier.

Merry Christmas you all.

Declaring a PHP Climate Emergency

The year is ~~2119~~ 2019, and the planet is on fire. What can a mere PHP developer do about it?

It is quite clear that without global political action there is not going to be a solution to the problem of global climate change, but that does not mean action at a personal level is useless or unwarranted. Political solutions will also lead to personal changes, and getting ahead of the curve does not hurt considering we are pretty late to the game.

There are a few fronts on which everyone can have an effect. Personal consumption, politics and advocacy, and funding carbon offsets.

Personal consumption

Using carbon calculators like myclimate‘s (fairly simple) or carbon footprint‘s (if you have time to spend) you can check where you can have the most impact on a personal level.

Household heating and energy expenses are fairly tricky to fix depending on your situation. If you don’t own a single family home you are most likely out of luck when it comes to heating, but you can perhaps at least find an electricity provider which offers renewable energy.

Food is a kind of easy one where reducing red meat consumption is the biggest winner, going vegetarian is probably better but more challenging so take it slow. Reducing is still better than doing nothing. It took me about 10 years to go from an omnivore diet to eating meat once every few months now. If you slowly adjust and learn to cook and enjoy other foods you end up not missing it. You can still enjoy it once in a while and actually then enjoy it properly, instead of having a meat fest at every meal where it is so normal that you don’t even notice.

Travel and mobility in general is also something we can fairly easily impact. Nobody forces you to go across the world for a week of vacationing on a fancy beach. After reading the rather disastrous IPCC report in late 2018 I wanted to stop flying, and mostly succeeded this year with lots of train rides, refusing to go to a few conferences which were too far, and one flight which I could not avoid due to scheduling constraints but ended up offsetting instead.

I can see this unfortunately does not apply everywhere, but trains are a good option in Europe. You can get work done, watch a movie or enjoy the ride looking out the window. All without the stress, strip searches and queues of airports. It takes longer and is often more expensive, but the cost of plane tickets is unrealistically low if you consider the environmental impact, so until governments fix that with appropriate taxes we have to be the grown ups.

I think something to keep in mind is that not every holiday has to be an instagramable beach in Thailand or whatever the latest trend is. Exploring your “backyard” is great too, most countries have beautiful places to see if you get out in nature a little. Go check out the nearby forest or tiny river, it will most likely soothe the soul all the same. That should be the point of taking time off, not posting travel-envy nonsense on social media.

Similarly, when it comes to consumerism i.e. all the other stuff we buy, there is probably no easy fix, but one thing we can try is turn off our phones and social media a little. Look your loved ones in the eye instead, have a conversation, go for a walk, hopefully all this will help fill the gap we’re trying to fill by buying lots of junk and piling it up. You most likely don’t need every latest gadget, a new OLED 3D+ 8K 80″ TV, or a big SUV to drive around town. If you need to spend cash that bad spend it on carbon offsets instead to pay for past environmental sins.

Politics and advocacy

Step 1 is fairly simple: Vote. Please don’t waste away your voice. Vote for the candidates/parties who will most likely enact environmentally responsible policies. The most radical agenda the better, because even if they win that will most likely get watered down. You may not agree with all of their policies, but I would argue that whatever your pet peeve issue is does not matter if the planet becomes an unliveable hellscape.

Fixing the environment is the top priority. Only then will we have enough time left to enjoy arguing about other political issues.

Step 2 is to spread the word. Find your audience, find who will listen to you. Even if it’s only your family and friends, just tell who will listen. Make sure they vote at least, and if possible help them change their personal behavior too. That’s what I am trying to do here, and I hope I can have a bigger impact this way than chatting up my grumpy uncle at Christmas’ dinner with the family.

Finance and offsets

Carbon offsetting is in a nutshell giving money to projects focused on taking carbon out of the atmosphere. That makes up for some of your CO2 emissions. Clearly not everyone has money to spend on this, but I would imagine most people reading this do. Developers overall are rather well paid and we should use this privilege and opportunity to help out where we can. Some of the calculators I mentioned above can help you figure out how much to give to compensate for your emissions.

I decided to give $1000 this year to a variety of projects to maximize the odds that it does some good. It’s way more than I would be “required” to pay to offset my emission this year, but I am happy to start making up for the past years flying around to conferences all over the place.

The way I see it, as long as governments do not take this seriously enough, my tax money is not being spent where I want it to, so doing this is like adding some environmentally-focused tax on my income and making sure it goes directly to climate action.

Resources

  • Awesom.Earth is full of resources revolving around climate change and climate action.
  • ClimateAction.tech is a community of tech people trying to engage themselves in climate action, in case you want to try and apply your skills to help out.
  • World Scientists’ Warning of a Climate Emergency If you still need convincing that it’s time to act.
  • Article about the IPCC 2018 report This also described a landscape in 2040 which sounds pretty bad. 2040 sounds far away, but is also not that far. It’s in 20 years. If you are in your 30s or older you may remember when The Matrix came out in the theater, that was in 1999, which is 20 years ago, yet does not feel all that far away. This is all coming for us faster than we think.
  • The Planet is Burning – a more romanticized version of climate change and its broader context seen as the Pyrocene, or the Fire Age.

Thanks for reading, and much like you should do whenever you edit a file, let’s try to leave this planet in a nicer state than we have found it in.

Finding Growth in Community

No man is an island entire of itself; every man
is a piece of the continent, a part of the main

John Donne wrote those words nearly 400 years ago, yet somehow people still don’t heed them. We like to think we’re self-made and independently grown – I even used to claim to be a “self-taught PHP developer” in my bio. It’s funny how we manage to convince ourselves that we have done it all on our own with little help from others.

The reality, of course, is far from this – all of us (yes, that includes me and you) are a product of the community that we inhabit and an amalgamation of all the people who have influenced us over the years. There is no escaping this, but what are we to do about it? What does this have to do with writing code? Is it enough to just acknowledge the state of affairs and move on?

Perhaps, but maybe there’s a better way.

Finding your People

If the people around us are such a large part of what shapes us, then would it not make sense to surround ourselves with people that can help us grow? The answer should be clear but that doesn’t mean it’s easy to know where to look.

Luckily for us, plenty of active communities already exist within the PHP (and broader tech) world – many of these are online communities, while others include in-person meetups in hundreds of cities around the world. I encourage you to seek out people and groups that can help you grow – a quick internet search for a community focusing on your preferred language or platform will turn up plenty of useful information for you.

Of course – that’s often easier said than done. Finding a group of people that you genuinely connect with can be tough, but believe it or not, you’re not alone – plenty of others feel the same way and if you just take a chance by stepping out of your comfort zone, you’ll find many others in the same position as you.

Growing Together

Once you have found a community to which you feel connected and where you find value, start to dig deeper. Get to know more people – connect with them outside of the context of the community itself and make a few new friends. You’ll be pleasantly surprised by how open people are to making new connections.

You can even contribute to your community to help it grow – I can say from years of personal experience that this is the absolute best way to see long-term and incredibly valuable growth in your knowledge, career and life experience. For most communities of this nature, there are two primary areas of contribution that are great to get involved with: organising and speaking. The amount of work that each of those involves very much depends on the nature of the community, but I can guarantee that if you start contributing in either of those ways, you will certainly not be disappointed.

Some Help for the Journey

This is all very exciting and I hope you take the leap into community soon if you haven’t already done so. In order to help you on your way, here are some online resources that will help you out:

  • The CMX Hub blog – an excellent resource of community materials and content to help you get the most out of your community.
  • The CMX Hub Facebook page – lively social interactions with people involved in community all over the world.
  • The Community Signal podcast – excellent content and interviews with community professionals all over the world to educate and inspire you.

And a few books for each stage of your community journey:

No man is an island entire of itself; every man
is a piece of the continent, a part of the main;
if a clod be washed away by the sea, Europe
is the less, as well as if a promontory were, as
well as any manner of thy friends or of thine
own were; any man’s death diminishes me,
because I am involved in mankind.
And therefore never send to know for whom
the bell tolls; it tolls for thee.

“No Man is an Island” – John Donne

Slices of my life.

Over the years, life taught me an important lesson.

Slice 1: Several years back, I always finished my meals with curd rice and I remember declaring after a fully satisfied meal that I can never live without curd rice. As a South Indian, it was not uncommon to find the curd rice an indispensable part of my life; after all, we had it for lunch and dinner – twice a day – almost daily. But due to a curious turn of events, I turned vegan and I lived without the curd rice for 8 long years. Today, I eat it in moderation. Life showed me that sometimes what I considered indispensable was really dispensable. Cut.

Slice 2: Ever since my first job, one of the important criteria for me while choosing a job was if I had to work on Saturdays. I rejected some good offers which had working Saturdays or working second Saturdays as part of the deal. I dodged and ducked when I saw a job offer with a working Saturday, not without reason. I loved to spend time on my other interests. Not unheard of, right? But due to another curious turn of events, I worked Saturdays for about 5 years, most of those supposedly half-working days turning out to be full-working days. Life showed me that sometimes what I considered unbearable was really bearable. Cut.

Slice 3: I grew up in the cool city of Coimbatore, ridiculing Chennai for its hot tropical weather and other issues that a metro city faced. Later, I moved to the cooler Bangalore for about 9 years. By now, you must be getting the drift. Yes, another curious turn of events later, I moved to Chennai and I have been living for the past 13 years in Chennai. Chennai taught me that every city has its own merits and I have a love-hate relationship with it. Life showed me that sometimes what I considered unimaginable could become real. Cut.

Slice 4: About ten years back, I used to code in Perl. I enjoyed writing those tricky hacks in Perl that got things done super quick. It did appear a little obfuscated at times, but that is Perl. The flexibility was incredible and I had fallen for the language. Around this time, I distinctly remember a discussion with some of my fellow researchers on programming languages, when I commented how difficult it was to read HTML-interspersed PHP code. I recall adding something about how ugly it looked, blissfully unaware then, that I shall be spending several hundred hours in the future with PHP. 

So, it may not surprise my dear readers to know that another curious turn of events later, I voluntarily chose to code in WordPress and hence PHP. I look at HTML-interspersed PHP for a good part of my job. Life showed me that sometimes, I have to embrace things which I may not appreciate.

Today, as I pore over PHP code, there are times when I feel that it is not as ugly as I earlier thought it was. So, I cannot help but think that all along – in giving up something I loved, in taking on something I did not wish to, in seeing the merits of something I did not like, and in embracing something which I did not appreciate – life has been trying to teach me an important lesson, that everything has a place in life and I should reserve judgement.

As we prepare for the festive season, let us embrace all that life offers, whether we appreciate them or not.

From ideas to WordPress

I’m a software developer from Benin Republic.
I have been coding since 2017 with languages like HTML, CSS, PHP(WordPress), JavaScript.
I have worked on different projects and built lots of cool stuff that you can check on my GitHub.

How everything started?

Everything started when I got my first job as a developer at ORION ORIGIN : a team of nice people, who build amazing premium plugins and themes used by people and developers around the world. I was tasked with creating plugins.
At first, this was challenging but I found a way around it. I built WordPress plugins and also provided support for them.

Along the line, things got easier, so I started working on personal projects, one of them is called : HomeScript and I have built lots of cool WordPress plugins under these name that you can download on my WordPress Profile.

Let’s talk about WordPress.

WordPress is a Content Management System (CMS) that is powered by PHP and MySQL. Developing with WordPress means you have to be grounded in PHP, understand OOP concepts in PHP, understand WordPress hooks ( add_action and add_filter concepts ) and how they work. All these knowledge must be acquired by a developer. So I dare say that being a WordPress developer doesn’t make you any less of a developer. 🙂

Why WordPress instead of other CMS?

This choice was based on my job, the choice is based also on the fact that setting up a website with WordPress is easier than setting up with Prestashop or Drupal.
This motivates beginners who want to learn to code and do not want to kill themselves with all the different languages.
Many developers have created lots of plugins, that are helpful when you want to easily create your website.

Also, WordPress has a very large active community of developers that are always there to show support and guide you on anything you might need when developing with WordPress.
This gives everyone an opportunity to be part of an awesome community that accepts everyone.

Challenges i have faced

Some of the challenges I had when I started coding are, first of all, electricity not always being available, and secondly the price of internet here in Africa is very expensive.
This is really a problem because without the internet you can’t get access to courses online.

At ORION ORIGIN, one lesson I learnt during my job is that every code needs to be optimized, I don’t need to repeat some functions into my code. The (DRY: Don’t Repeat Yourself ) concept applies to WordPress too, the ability to respect the coding standards set by WordPress .

Some recommendations

Everybody can create amazing plugins or themes that can be successful like the Conditional Discounts for WooCommerce or WooCommerce Product Designer plugin, they just need to find the right idea that adds value to someone, and the money will follow.

By searching on the internet, many articles exist and can help a lot in the process of creating and releasing a WordPress plugin. For example, articles on Medium have contributed to help me become a better developer today.

Invest in Yourself – Be an Intropreneur!

Each person is elemental. No one else is like you. Your life, times, and biology combine to give you a unique view and experience of every moment you encounter. It is your right – and depending on how you value yourself – your responsibility to develop your distinctiveness and add it to the diverse interactions which shape society. There are two phases to this process (discovery and expansion), and they should be engaged iteratively throughout your life.

Let the Discovery Begin

In the first phase (discovery) you take stock of who you are, what you know, and experiences you’ve had. Preparation is an essential component to introspection. The more you free up your mind to focus your attention, the better the outcome. Reducing the noise of your life a challenge depending on how you live day to day. Preparation might involve meditation, exercise, and clearing time to begin the inventory – admittedly a challenge with work pressure and attention-robbing demands of today’s always-on society. Going into the discovery process intentionally is key; if you admit that you are investing in yourself, this process deserves first-class status among all of the activities you undertake. Set yourself up for success with a distraction-free environment and period, at the time of day when your thinking is at its best (for me this is first thing in the morning, while my wife tends to work best in the later part of the day). If you have a system for organizing your attention and accomplishing your tasks day to day (e.g. Pomodoro Technique, GTD, etc.) this should fit in as another to-do item.

The goal of discovery is an inventory which can be validated and then used later on to develop a plan to improve what you know and experience, or to identify areas of growth. A stream-of-consciousness diary is a good first place to start and uncover what you know, what you think of what you know, and importantly, how you feel about your skills and experiences. If you are giving yourself full permission to turn your attention inward, it can be frightening to really see yourself and access the internal monologue that may have been playing subconsciously in the background (this is where I often come face to face with my impostor syndrome). External tools can help here either for initial discovery or refining what you discover; skills tests, counseling, conversations with friends or peers, even blogging can give further insight and most importantly some validation. (NB: if you are working through mental illness, trauma, or are in treatment already, you might want to only undertake this process with full awareness from your counselor. Remember to use the support systems that you have – that’s why you have them!).

Expand Your Horizons

Once you have your catalog of abilities and experiences the exercise of expansion can begin in earnest. This part of the intropreneurial journey can take many paths. Which path one takes comes down to personal motivation and desired outcome. I like to work backwards from an action-focused outcome. For example, rather than say “I will learn conversational French in six months,” I am more motivated by “I will have a basic conversation in French in six months.” For a PHP developer looking to modernize their skills, rather than say “I will learn TDD by [some date],” they might say, “I will deliver an app in the next six months using TDD.” Language – the language we use for intentions – matters! It is also important to step back from the goal and put into place a system for measuring progress. The SMART framework can be a valuable approach, and depending on one’s level of discipline, it may help (or be outright vital) to be accountable to a friend or colleague, or to use a motivation app (there are literally dozens out there) – this may be more comfortable if you are struggling with impostor syndrome or other forms of crippling self-doubt (there are literally dozens out there).

The wonderful thing about the intropreneurial process is that even if you fail to complete the goal – or to really work on it at all – you are regardless left with valuable insight into who you are, what you can achieve, how you set goals, etc. Lean into that insight at the conclusion of your timeframe and use these insights as you dive back into the discovery phase. Over time this cycle can become a dependable adventure, and a review of your discovery diary entries should reveal new skills and new experiences, which will serve as further motivation to expand your horizons even more.

Each of us brings a unique mix of motivation, experience, and bias to every decision and situation we encounter. We owe it to each other but especially to ourselves to focus some energy on deepening and broadening these things that make us who we are.

What has the PHP community built?

The PHP community is pretty large. It’s easy to become isolated within the bubble of your chosen framework, version, or domain-specific code. Here’s a look at some interesting PHP projects I’ve discovered over the years. Some of these are more well known than others, but all definitely deserve some love. Links to the websites will be in the headers.

Disclaimer: I’m not affiliated with any of these projects, but I do use a few of them.

Grav CMS

Grav is an interesting alternative in the widespread CMS landscape. It’s flat-file based instead of database reliant, which for simple websites makes getting from zero to deployed that much quicker. I even built my personal site with it!

There is no installation process required to get up and running. You can extract a ZIP of the latest version and start slamming out content.

Configuration and accounts are stored in YAML files in the system. Caching permeates Grav’s design, speeding page delivery alongside JS & CSS pipelining to only serve single JS/CSS files. Themes are made using the Twig templating engine and pages themselves are written with Markdown. It’s a highly portable package.

The plugin ecosystem is not as huge as other popular CMSes, but there are still quite a few plugins for all sorts of extra features.

October CMS

October is a Laravel-based CMS, with a focus on simplicity of the user experience while still providing high-octane features for developers. I feel it’s almost an understatement to call October a CMS, as it is a bit more involved than that.

Like Grav, it uses Twig (with a few extensions) for templating instead of Laravel’s Blade. This allows a lot of fine-grain control over what your final page will look like while also being designer-friendly. The interesting bit is that themes and pages are managed through the October backend itself, not needing to dive into code and deploy things constantly (though that is always an option).

Installation/deployment of October is more akin to standard PHP systems, requiring certain PHP extensions and using a database. Like WordPress, it has an installation wizard to make life easier.

Personally, what I find interesting with October is the intersection of providing a clean and understandable UX for non-technical people involved in the process, and the flexibility of a framework like Laravel to customise almost any aspect of the system. On top of that, the developers are quite active in supporting the plugin ecosystem and have quite a few of their own “default” plugins for October for you to get started with.

There’s a lot more that I haven’t mentioned here, so do take a look!

Matomo (formerly Piwik) Analytics

Of course, there’s more to PHP life than CMSes. Matomo is a FOSS (GPLv3), fully-featured alternative to Google Analytics, and is quite proud of that fact. Their main method of income is support contracts and cloud hosting of the Matomo platform. However, you can self-host to get most of the feature set, save for more intricate features like A/B Testing and SAML integration.

Matomo reports on your full data set instead of a subset of it. You also get the benefit of full control and ownership of the generated data, which allows you to do your own extra analytics on top of it and is generally a boon to more privacy conscious developers and users.

Speaking of which, Matomo allows for GDPR compliance through a “GDPR Manager” which has features like anonymisation of data, right to erasure, deleting historical data, and more.

Matomo is a huge system, but well worth the effort of installation if going the self-hosting route, and has various relatively affordable pricing tiers.

Monica Personal CRM

Monica came to my attention some time in the latter half of 2018. It’s essentially a personal rolodex for the web age, built with Laravel. Like Matomo, it’s FOSS and free for self-hosting, but you can also sign up for the cloud-hosted version for simplicity.

Now, if you use Facebook, your first thought about this is likely “why would I actually need this?”, and it’s a valid question. Then I’d ask you to consider how much you actually use Facebook to track information on your friends (aside from just their birthday) and not just for an endless feed of posts and memes.

Monica is not a social network. It is purpose-built for managing your relationships and storing information that you want to remember on your friends and family. You can store anything from relations between contacts, pets, debts owed or tasks related to a person from its interface.

From its own website, Monica claims it “is for people who have jobs, a family, and are busy trying to find a good work/life balance. So busy, that they don’t have time anymore to remember to call a friend, say happy birthday to a nephew, or remember to invite someone special for dinner next week. The older we get, the more life gets in the way. It’s sad, but it’s the reality.”

If you’re keen to try it out but aren’t quite sure, you can sign up for free on the cloud version to try it out.

Nextcloud

Here we have another FOSS alternative product to a Google service, in this case mainly Google Drive and tools like Google Calender. As has become a pattern now, self-hosting Nextcloud is free, but you can pay for support or cloud/managed hosting. There are also client apps for all mobile and desktop platforms.

On top of the standard storage system, you can also get calendar, mail, contacts, and video calling. For more cool stuff, its plugin ecosystem is actually surprisingly well-rounded.

Nextcloud also offers extensive documentation related to its GDPR compliance and guides for administrators, as well as plugins for aid compliance available for your server.

I highly recommend Nextcloud for those who would prefer full control and data privacy for their cloud system, or businesses requiring the same control. Installing Nextcloud is fairly straightforward and there are many guides out there to get started with.

Kimai Time Tracking

Kimai is an open source (MIT) time tracking system. In the last year, Kimai has essentially been rebuilt (in Symfony), and its UI redone in the official v2. If any of you have seen the old v1 UI, you’ll agree that using AdminLTE for the dashboard is a vast improvement over the previous UI. The old UI was quite dated and made me gloss over Kimai originally since I wasn’t even sure if it was still actively supported.

The use of AdminLTE also means that Kimai is mobile-friendly as an added bonus. Unfortunately (or fortunately for some), Kimai only has a self-hosted option available. Kimai’s main income source is extra plugins available on its marketplace. However its default feature set is already quite robust, including a JSON API for app integrations, LDAP support, switching between start/end time and duration-only modes.

Usually features like that aren’t restricted on other time trackers, but you’ll be capped on user accounts on free tiers and usually have to pay per user. Kimai naturally offers free as in beer and free as in freedom in this case.

If you’re looking for a viable, free alternative for something like Harvest or Toggl, Kimai is definitely the way to go.

Attendize

Last, we come to Attendize. Attendize is an open source (AAL) event management and ticket selling platform. Another Laravel-based app, it is a fully-fledged system. The Attribution Assurance License essentially boils down to requiring “Powered By Attendize” to be displayed on all pages, but this and other restrictions (redistribution and using in SaaS products) can be removed by purchasing a license.

Stripe and Paypal are supported out of the box, and other integrations can be added. Omnipay is used as the payment proccessing system. Among Attendize’s many features are affiliate tracking, widget sharing (for inclusion on other websites), a browser based QR scanner for door management, and easy attendee management (including messaging via email).

There’s an online demo of the system available on the website. The UX is fairly smooth and displays the exact information you need. Overall, it’s a healthy balance of no-nonsense yet having the ease-of-use you’d expect of a system like this.


While writing this post, I’ve come to realise you could self-host most tools required to run many businesses these days, from time tracking to analytics to business cloud. It’s truly staggering how much there is out there in PHP land for us to make the most of. I hope you’ve found some interesting new tools to play with from this post. Enjoy!

To build, or not to build

Recently someone posed a question on Twitter to the content creators within the Laravel community. They were curious if we had built the course platforms for our content or used existing services.

While the question was specific, it’s rooted in the age old question: do I build something custom or use something existing?

As with all questions regarding choice the answer is: it depends. That’s not a very helpful answer though. So let me share my experience.

Initially save time

Back to the original question, I built my own course platform. But I did so in an minimum viable product (MVP) fashion. My first course, Getting Git, was very basic. There were no special features. A simple checkout flow and video dashboard. Arguably the bare bones requirement for a course platform.

I used Vimeo to manage all of the private content and embedding. I use a free Bootstrap theme for the course dashboard. The landing page used Stripe Checkout. I used Laravel for rapidly developing the models and authentication to tie everything together.

Value your time

This all worked. But was it necessary? No. What I built was a fraction of the features available from existing services.

I could have used paid content on YouTube or Vimeo. I could have hosted my course on an existing platform like Udemy or directly through Gumroad.

Why didn’t I use one of these services? We are quick to think that we’ll need some tiny little thing existing solutions don’t offer. But often if we take a hard look we never actually needed those features.

So why didn’t I use one of those services? If I dig deep enough, the answer is: because I could. Or said another way, I built my own because I am a developer. For the most part, that’s okay. After all, I like what I do.

What’s not okay is devaluing the effort. As developers, we’re terrible at estimating work. Even more so when the work is our own. After all, who cares? It’s just my time. So if I have time, then it’s okay to spend it building something myself.

As I get older, I find this logic to be flawed. Or at least it’s not sound. I have a finite amount of time. In fact, the reality is I will never have more time. Viewed through this grim perspective, time becomes very precious.

I find this helps counterbalance my developer tendencies to build everything myself and devalue time. Doing so puts me nicely in the middle. That Goldilocks Zone where it’s not too custom, but not too generic. It’s just right.

Build over time

Returning to my course platform, it started out pretty minimal. It wasn’t until I made my next course, BaseCode, that I added more features. Things like invoices and course add-ons. When I created my most recent course, Confident Laravel, I added even more features like marking a video complete and auto-advancing to the next video.

I built my course platform slowly, incremental. It took 3 courses for it to have even the basic features which matched existing platforms. Sure maybe a few users asked for these missing features along the way. But this didn’t deter people from buying my courses. It didn’t limit them from watching it in anyway. Again, that’s the critical V in MVP. It has to be viable.

Maintenance takes time

There’s another aspect to building it yourself to which is the ongoing maintenance. This goes beyond just the initial time investment. Now you’re responsible for not only managing the CodeBase and making sure that the dependencies are updated but also the server is updated certificates configuration and so on.

All of this adds up. So if you’re able to offload this onto an existing service, it’s definitely worth saving some of the pain you’ll have by building it yourself.

Closing

In the end, I think it’s best to be somewhere in the middle. Leverage what you can in the beginning. As you grow, add additional features which are necessary. With more reuse, allow yourself to add an extra feature. This incremental approach will prevent you from the age old trap of building everything initially and recoup some of the time you might have saved by using an existing service.

Resign or fight? About unnecessary frustration of developers

New Years Resolutions

The year is coming to an end and some people are already planning their New Year‘s resolutions. In addition to many personal things, some of you are also wondering at the end of the year whether you are happy in your current job – IT people do that like everyone else.
Of course, we are doing well compared to many other industries. Nevertheless, we all know that we just have to raise our hands once and can start working somewhere else tomorrow (let’s call it a shortage of skilled workers for the sake of simplicity).

So what exactly motivates us to stay in our current job and what motivates us to change our current job?

The others are (not) better!

Changing the job is always a big step. We are promised heaven on earth in job advertisements – but is that really true?
For many of us the stories other Devs* are telling us are mostly decisive – at meetups, at conferences, …. A cozy chat usually shows us what we actually like or dislike in our current position.

So if my employers behavior is obviously below average and Person X tells me over a beer that exactly my pain points would have been blown away if I just change my job to their company, then I would tend to do it.
Once the pain point has been identified, you can decide: fight or resign.

If I make an effort, I can(‘t) change things here!

This point is also very much related to the next paragraph (appreciation).
Let‘s say I noticed what bothers me – maybe I’m even very lucky and can talk to an experienced team coach or agile coach about it. Then they might ask me something like “What would have to change so that you don’t want to resign your job anymore?” and after two days I might have the idea that a monthly internal hackday would make me really happy.
We could all work together on cool projects for a day.
Admittedly, the more “rusty” the companys processes, the more difficult it is to convince the supervisor – because in the worst case scenario, they can only see one day lost for the whole department.
But let’s assume the opposite: The boss wants to try it at least once. Everything is working great, new technologies are being tried, someone is bringing their Rasperry with them and the meeting room is getting a clever booking system right at the door!
The hackday becomes an integral part of the corporate culture. Maybe some colleagues even remember that that was my idea. But it doesn’t really matter: I can change something here if something bothers me or I just have a brilliant idea! So I have no reason to resign my job immediately if something bothers me, because I can change it instead and stay in my familiar surroundings at the same time!

(Lack of) appreciation and communication

communication

Let’s construct a (seemingly) simple case here and say: What bothers me is that I always have to go to the HR office to get coffee because the coffee machine is there.
Then I can go to my boss and tell him that it bothers me. Or even better: I tell them what bothers me! I don’t like the HR people but always have to talk to them? Is the way too far for me and my knee hurts? Does that pull me out of the “focus tunnel” too much?
And it is even better if I make a suggestion straight away. For example, could you please place the coffee machine somewhere in the middle of the office space?! Or buy a second machine for the IT department?!
The interessting thing is that the actual solution has less of an impact on my well-being than the reaction from the leadership team.
If they would now explain me in a calm way that HR has financed its machine itself and that putting it in a different room would be as unfair as buying a new one – okay. And wow, it‘s really nice that HR always allowed me to use their machine! They’ll get cakes from me soon 🙂
But if the reaction is simply “That doesn’t work!” (adorned with how ungrateful IT is), then the world would look very different!

The result is the same: If I want coffee nearby, I have to bring my own machine. In the first scenario, however, no straw was added to the camel‘s back (nice colleagues, fair bosses) and in the other scenario it might have been the last straw (unfair bosses).
No matter how stressful it is – as a manager you have to communicate and be appreciative!

Financial

For me personally, this was almost the last straw which broke the camel‘s back. I would like to write a little more about this here.
Almost every day I get messages from employers and headhunters who are looking for me as a new developer for other companies: With more responsibility, more money, more scope, more vacation, more flexibility, more of something.
After about 2 years in my company, I had an annual feedback meeting in which, among other things, the next annual salary is negotiated.
I earn enough for my desired lifestyle.
And I guess: That’s exactly what most of us IT professionals want. Being able to pay for the choosen lifestyle without any worries.
Back to the story: Sometimes my boss annoys me, but 95% of the time we make all decisions within our small team anyway – so my boss and I don’t have to be best friends. Everything was fine so far. So during the annual feedback (which is a much too long period anyway) I wanted to at least compensate for inflation and everything would have been fine.
So we sit down with our filled questionnaires and it turns out that there are no major disagreements. Everything is going well. My boss had no single major criticism. And yet I shouldn’t get any financial improvement, no more vacation days, not even a 20 bucks amazon voucher as a bonus.
And then I was mad – I have been working for this company for 2 years and am not worth more than at the beginning? There was no point of criticism that explained this behavior and I knew that other colleagues had received a raise. Yes, dear employer, we Devs talk about like this, even if not necessarily always using concrete numbers!
If my boss had given me a reason for their decision and offered me something, everything would have been ok. Instead, there was no justification and arguments were simply ignored. After talking to HR, I tried again after situation calmed down a bit and asked the boss if the company was having trouble or if there was another reason. Whether we should negotiate a different improvement instead of money. Same reaction: “Nope, it is just not possible.”
Well, and then I had a trial day somewhere else. In my view: completely unnecessary.

This is (not) my family!

One of the main reasons why I’ve been with my current employer for so long is definitely my team!
I wouldn’t go that far and call it my family. But we are similarly diverse characters and familiar with each other:
We are a very mixed group – both culturally and privately. We have very different hobbies and different views on many topics. And we talk about it very openly and honestly. To be honest, we haven’t found a taboo topic yet. Whether menstrual cups or “Does that really have to be a ValueObject or is an integer enough?” – we can speak respectfully about everything and at the same time often appear very disrespectful to the outside world but among us we know that “your mother!” is not an insult. And yes, from the outside it has led to .. “Inquiries” a few times.
For me personally, this somewhat crazy constellation is a reason to stay.
If we were a faceless crowd in suits, I would most likely have resigned.
But since we have a certain share of our own recruiting process, it won’t happen that quickly 😉

In addition, our employer supports cross-departmental activities.
On the one hand we have an open space day, in which people from different departments take part. Then you always find out what other problems are currently happening and usually someone has a good tip, experience in the field or a small MVP is planned and built. An action that would not exist without the efforts of our Scrum Masters. I appreciate it very much.
On the other hand, we support a wide variety of external activities. A few sports are free and the company contributes to other events (painting courses, wine tasting, …). This is how you get to know people from other departments privately – especially in quite anonymous metropolitan areas and especially for newcomers, that’s really good.

I’m interested: Why are you staying in your company? Do you have things that you particularly appreciate at your job? What was your last reason for changing the job? What ae you missing in this article?
Feel free to post your answers using the hashtag #PHPamily!

*) This blog post was published in German and English on different platforms. I tried (especially in the German version) to use as many gender-neutral terms as possible without disturbing the flow of reading. This is not so easy. Where this has not been successful: Of course, all job descriptions mentioned in the article are meant to be gender-neutral.