GitHub : 100 million repositories

GitHub is celebrating a very important milestone – they are now hosting 100,000,00 repositories.  This is truly a remarkable achievement!  Congratulations!

And while many of these are private, the majority, no doubt, are the Open Source projects.  GitHub is indeed a cozy home for the Open Source Software, and the world wouldn’t be the same without GitHub.

Read their blog post for some cool statistics.  Here are a few numbers to get you going:

  • 100,000,000 repositories (obviously)
  • 31,000,000 developers
  • 1.1 billion (enough with the zeros already) contributions
  • Founded in 2008 (10 years ago), raking up mere 33,000 repositories that year (who could have known?)
  • Nearly one third of all repositories was created during the last year (insane growth)
  • On average, 1.6 new repositories created every second

Knowing these numbers, and working with GitHub on a daily basis, it’s difficult to imagine how crazy are all the usual metrics (daily/monthly active users, visitors, page views, etc.).

I’m raising a pint to the next 10 years and many repositories.  And really hoping their recent acquisition by Microsoft is going to help, rather than the usual.

Four years at Qobo

Last week marked my fourth year at Qobo.  Here are the blog posts that cover my first, second, and third years.  And with one more now, I think it’s starting to fall into a trend of crazy years.

Yes, indeed.  The last year has been no different.  There were all the usual components:

  • A tonne of projects!  We’ve done more in numbers, complexity, and variety of projects this year, than before.
  • The team is growing.  And while not everybody stayed, we’ve found some new great people to join the team.  Overall, we are more now than we were a year ago.  And we’ve also expanded the roles.  We have dedicated quality assurance and support people now.
  • New office.  There is an office story every single year.  First we moved the Nicosia office, then we opened a Limassol office, then we opened a London office.   And this year we’ve moved the Limassol office to a larger space, as we couldn’t fit all the new people any more.
  • Technology.  Over the last year we have almost doubled our infrastructure (thanks a lot Amazon AWS).  We’ve played with Docker containers.  We’ve moved from HipChat to Slack (somewhat a forced move, but it was interesting from the technology perspective, as we have a lot of integrations).  And we have grown our Qobrix platform and some of the applications built on top of it significantly (over 160 versions released in a year).

I’ve learned so much, it almost seems that even the last year was a lifetime away.   I’ve enjoyed working with everyone on the team, and even with most of the clients (evil grin).  It’s unbelievable how much we have accomplished this year.

I also think that the next year will be even more interesting and challenging, as we’ll probably need to shift from the current mostly startup-like operation to a more of a settled and predictable one.  Chaos can be very productive, but it’s less so with more people on board.  So I’m excited to see what’s gonna happen this year.

Cheers and thanks to everyone who has been around this year!

CakePHP 3.6.0 release

My all time favorite PHP framework – CakePHP has recently announced the availability of the long awaited version 3.6.0.  What’s so special about this particular version? – those of you not very familiar with CakePHP might ask.  And I’ll tell you.

CakePHP is a well established framework, with long history – going strong for 13 years now (initial release was in April of 2005).  In web development, 13 years is a very long time.  Old tools fade away. New versions of the language and popular libraries come into play.  And it’s the job of the framework to change and adjust smoothly, providing the developer with the best and greatest, without breaking applications.  That’s not an easy task – ask anybody who had to maintain any codebase for longer than a couple of years.

I started using CakePHP back in 2007-2008 or so.  It was version 1.x and it was great.  At the time.  Then, a few years later, version 2.x was released, and as a major releases often do, it broke backward compatibility.  The most painful change at the time was still easy to fix – it was the change in the naming convention for folders, files, and classes.  CakePHP 2.x switched from their own naming convention to the PSR-2 Coding Style.

About 4 years ago, CakePHP 3.x was released, and this time it was the major of the major releases.  CakePHP framework got a lot better (and I do mean A LOT), but the price was an impossible migration.  One of the big changes in that version was the complete rewrite of the model layer and the ORM, which meant moving the CakePHP application from version 2.x to 3.x meant an almost complete rewrite (as most applications have most of the code in the model layer anyway).

That was a huge pain and community reacted.  Everybody wanted to use the cool new features of CakePHP 3, but nobody could afford to rewrite almost all of the application for this version of the framework.  (By the way, this situation is not unique to CakePHP – pretty much all other frameworks, both in PHP and other languages, either faced it or will face it in the future – that’s just how things are done).

When the CakePHP 4 roadmap was announced, one of the first things that CakePHP core developers team addressed was the upgrade path.  From the start they said that there must be a better way to handle major upgrades of the framework, and that they will find it.  And they did!

This time around, there was some ground work laid out.  Instead of just dropping another major release into developers’ laps and all the upgrade pain that comes with it, CakePHP developers absorbed a lot of it on their end, and softened the transition.  How did they do it?

Well, that’s where we get to the exciting CakePHP 3.6.0 release!  You see, the plan was do provide the gradual transition and give developers warnings and time to adjust their applications.  From the early stages of the CakePHP 3.x, a lot of functionality was commented as deprecated.  Any developer building with CakePHP framework could easily find what’s gonna go in the next major release.  But developers are always busy and never have the time for looking up things.  So what CakePHP 3.6.0 does is quite elegant.  It introduces deprecated warnings for all the functionality that will be removed in CakePHP 4.  This means that once you upgrade to CakePHP 3.6.0 your logs will get a lot noisier, telling you exactly what needs fixing.  If you don’t have the time right now, or want to ignore these warnings for now, you can simply disable them by adjusting the error reporting configuration, and all works as before.  But if you want to get ready for the next major version of CakePHP, then you have precise information of what needs to be fixed in your application.  Fixing one issue at a time, when you have the time, is great!

In fact, at work, we loved this approach so much that we started using it for our own projects as well.  Switching between different projects across several developers, and working on some old projects, etc., makes things difficult to remember.  With deprecated warnings, things are a lot simpler.

So, ladies and gentlemen, if you were looking for a framework to try, give CakePHP 3.6.0 a go.  You’ll easily upgrade to CakePHP 4 when it becomes available.  And if you were already using CakePHP 3, upgrade to CakePHP 3.6.0 and check your logs for deprecated warnings.

And, of course, stay tuned for CakePHP 4!

TOP 10 MySQL 8.0 features for DBAs & OPS

Here’s a list of the TOP 10 MySQL 8.0 features for DBAs and OPS, with some detailed explanations of what they are and links to more information.  The features covered are:

  1. Temporary Tables Improvements
  2. Persistent global variables
  3. No more InnoDB System Tables
  4. Reclaim UNDO space from large transactions
  5. UTF8 performance
  6. Removing Query Cache
  7. Atomic DDLs
  8. Faster & More Complete Performance Schema (Histograms, Indexes, …) and Information Schema
  9. ROLES
  10. REDO & UNDO logs encrypted if tablespace is encrypted