MWD02 – Get the MAC workstation ready

Continuing this series about Modern Web Development!
As a non Microsoft Developer working on a Mac, you need to get yourself a few productivity tools which unfortunately are not all available out of the box on your Macbook or iMac.
STEP 1 – Starting with a few Mac OS X enhancements
Total Finder Features
The Finder: Even with the latest OS X 9 Mavericks update, the Finder still has some shortcomings, and in particular still lacks the ability to quickly switch display of hidden system files. My recommended solution for that is to switch to TotalFinder  that is US$15 well invested for your productivity. And it’s more lightweight and stable than the very ambitious Pathfinder (US$39)
Total Terminal
The Terminal: The native Mac terminal is OK, but not always easy to summon in context. To improve usability in that space, I have taken 2 actions: First, I have downloaded the excellent and free TotalTerminal utility from the same BinaryAge company publishing Total Finder. With its Visor feature, you can always summon the Terminal in context using CTRL+~, very handy. And secondly, I am leveraging the new service available in Mavericks which allows to open a “new Terminal tab at Folder”, as per instructions found here. Right-click any folder, select Services>Open Terminal, and here you go. A true game changer.
Textmate 2
Textmate 2A decent Text Editor: Textedit is definitely outdated, and I wonder when will Apple decide to give it a bit of attention span! In the meantime, the modern developer will invest in a Sublime Text or Textmate 2 license. My preference goes to the latter which has a much more comprehensive syntax library.
Other CLI developer tools:
Mac OS X native tools: First we need Mac native tools, which are not installed by default but usually come with Xcode. If you are not planning to develop Mac or iOS apps and do not need Xcode just yet, these tools can simply be installed by using the following command in Terminal: $ xcode-select —install or even simply $ gcc
This will trigger a dependency pop-up indicating that Xcode requires the CLI developer tools and offering to install them: Just click install and wait for 30min.
CLI Developers Tools
Java: Java is an important language, and unfortunately it is not available natively anymore in the latest releases of Mac OS X.
The current Java version recommended by Apple is 1.6 and it can be downloaded here.
If for some reason you need to work on Java 1.7, visit the official Java website, at your own risk:
Ruby and Python: Ruby and Python, two immensely popular object-oriented scripting languages, have been installed as part of OS X for many years now. But their relevance to software development, and especially application development, has assumed an even greater importance since OS X v10.5. And as a modern developer, in particular in the PHP space, you are likely to use Ruby scripts for automation and deploy on, with Composer, Capistrano and Chef for instance.
Ruby with HomebrewHomebrew  s a package manager for Mac and it helps installing additional services and utilities, that Apple didn’t, in an organised manner, managing symlinks into the /usr/local folder. Just like CHEF consumes recipes written in Ruby forserver provisioning, Homebrew consumes Ruby-written formulas to install software packages on your Mac.
To install Homebrew (Note a dependency on XQuartz)
$ brew doctor
To install Ruby with Homebrew:
$ brew install ruby
To manage the different versions of Ruby you may have on your system, use RVM:
$ \curl -sSL | bash -s — –autolibs=read-fail
PHP Storm
STEP 2: Get a good IDE
PHP StormThere are several options on Mac and I can mention here the well know Eclipse (All languages), Coda 2(PHP), Netbeans (Java, PHP, C++) or Aptana Studio (PHP, …)
But my preference now clearly goes for the great and consistent suite of IDEs offered by JetBrains for the different languages:
  • IntelliJ for Java
  • PHPStorm for PHP => That’s the one I am mostly using (US$99 for a personal license)
  • Web Storm for general purpose HTML/CSS development
  • PyCharm for Python
  • Rubymine for Ruby
  • Appcode for iOS development
Atlassian Sourcetree
STEP 3: Source control with GIT
GIT is essential and mandatory, and what you need is the holy trinity: The command line on your workstation, a repository storage service, and a GUI client.
Mac OS X 10.9 comes with GIT 1.8.5 bundled, which is not the most recent version.
To upgrade GIT on Mac, the official GIT site proposes an installer.
Another option is to use Homebrew, with:
$ brew update
$ brew install git
This will get you the latest GIT, version 1.9.2 as I write these lines.
Source TreeIn terms of GUI, I enthusiastically recommend Atlassian Sourcetree, which by the way will come with its own version of GIT bundled in, for self-consistency purposes. (GIT 1.8.4 for Sourcetree 1.8.1). The desktop client for Mac proposed by Github is also a decent one.
Lastly, make sure you have an account on Github, offering public repositories only for the free account. For this reason, I urge everyone to consider Atlassian Bitbucket, which offers free accounts with illimited private repositories for teams of up to 5 members: It can’t get any better!
TransmitSTEP 4: Other essential network utilities
For FTP/SFTP and S3 access, I have found nothing better than Transmit 4 from Panic Software (US$34).
If you are after a completely free software though, you’d would fall back to Cyberduck 4. And finally, Filezilla has now enjoyed a decent port for Mac, but unfortunately lacks S3 support.
NavicatFor database connectivity, the “ned plus ultra” solution is Navicat  which offers connectivity to MySQL, PostgreSQL, Oracle, MS SQL Server, SQL Lite, MariaDB. Choose the Essential edition for US$16 only, or go pro with Navicat Premium ($239).
If you use exclusively MySQL, then Sequel Pro is the perfect and free solution. Likewise for PostgreSQL, simply use the Postgres.App.
Charles ProxyAlso, you need a web debugging proxy and the obvious choice here is Charles 3.9 (US$50).
Interesting to note though that Telerik is currently porting the remarkable Fiddler to Linux and Mac (Apha release).
STEP 5: Virtualisation software
First and foremost, I would strongly advise against setting up localk xAMP suites, such as MAMP and XAMP for Mac. It may look handy at first glance to run your Apache and MySQL servers locally, but it quickly becomes a pain in the back with compatibility issues, when you start using PHP and Apache extensions. Very messy and inaccurate.
Virtual BoxAccording to the idea that there is “nothing like the real stuff”, I urge any serious developer to work with locally virtualised environments replicating LIVE destination environments, whatever the operating system.
The best choice is to use Oracle Virtual Box, free and well supported.
Now you can manually install any of your favourite OS, and set your code folders as shared mount points.
VagrantBut the latest delightful trick to do so is to use Vagrant to flick up an environment in 1 command line and no time:
Download Vagrant for your system, and then in the terminal simply VargrantUP! You can select an image on Vagrant Cloud:
$ cd /~/my_dev_folder // Putting yourself in the folder you intend to store your web app
$ vagrant init hashicorp/precise64  // Installing a standard Ubuntu 12.04 LTS 64bits box
$ vagrant up
$ vagrant ssh // You are logged in!
In just a few minutes, you are logged into your VM and can start setting up the services you need fort your app, starting with Apache, MySQL, PHP and more.

MWD01 – Embracing the evolving digital world

I have been coding and managing digital projects for the last 15 years, and this has already been through a number of evolutions, revolutions and complete paradigm shifts. Just listing a few areas to try to illustrate were I’m going here:

GITSource Control Management (SCM): aka CVS , Perforce, and ClearCase back in the days. Subversion had some glorious days, but over the pas few years the crowd has moved to GIT, made popular and ubiquitous by the amazing code sharing platform Github.  Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. It is easy to learn and has a tiny footprint with lightning fast performance. It outclasses other SCM tools with features like cheap local branching, convenient staging areas, and multiple workflows. It’s best suitable for distributed teams working in a peer to peer context and it is certainly the SCM of the decade, you can’t avoid it, even if you’ll keep an eye on emerging competitors like Mercurial.

Java - Php - MySQLOpen-Source Software: Long gone are the days when you’d pay for closed source software without a blink, with the double risk of getting ripped off with ongoing maintenance costs, and being locked into a technological dead end. Web technologies are experiencing a sort of Cambrian explosion on an incredibly short timespan. People try before they buy, they want to access source code to customise it and suit their specific requirements, share it with business partners to encourage interoperability. As a customer today you will happily pay for a service and a subscription rather than for the codebase, you will pay for advanced features and integration rather than for the core functionality. It is on the ground of such a need for interoperability and agility that the open-source model has grown and become mature including in the Enterprise Arena. It is true in all compartments: Operating systems with Linux distributions such as RedHat and CentOS, databases with MySQL and PostgreSQL, server-side languages such as RubyJava and PHP, content management frameworks such as Drupal or Alfresco, and it is just the beginning. “Start free and scale up with service and features” is the new motto in the global era, and far from just “open” and “free”, Open Source is a true guarantee for stability, security, interoperability, enterprise grade.

Symfony and ComposerDependency management: Along the lines of interoperability, we see a growing number of technologies built on top of large aggregations and third party dependencies, and this leads to an increasing interest in managing software packages, bundles, plug-ins, add-ons, … An iconic example in the CMS arena is WordPress which proposes the most comprehensive library of 3rd party plugins to address various needs and features, from simple contact form handling to broad scale e-commerce. At a lower level, this translates into component libraries for web applications frameworks such as Symfony (PHP best managed with Composer for instance) and Rails (Ruby best managed with Bundler), and down to languages themselves, with Pear and PECL repositories for PHP, and Rubygems for Ruby. This is now even investing the field of deployment automation with platforms like Capistrano, Vagrant and Chef.

MVCModel-View-Controller (MVC): MVC is the modern software pattern for implementing user interfaces in a scalable and future proof manner. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user. The central component, the model, consists of application data, business rules, logic and functions. A view can be any output representation of information, such as a chart or a diagram. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants. The third part, the controller, accepts input and converts it to commands for the model or view. It is clear that over the last 5 years all dominant and enterprise grade languages and application frameworks have quickly evolved towards the recognition of this universal and most desirable pattern: Java with Spring for instance, PHP with Symfony, CakePHP, Codeigniter, Yii and more, .NET with ASP.NET, Ruby with Rails. Even Javascript currently undergoes the same rapid evolution client side, with amazing and highly performing framework like Backbone, Knockout or the most recent Google AngularJS.

Web services and apisAPIs and web services: Going hand in hand with the MVC revolution, the emergence and silent multiplication of web services and public APIs (Application programming interface) on the web is staggering when you consider it: There’s a crowd of agents and open endpoints out there just waiting for you as a developer to leverage them and unleash their power within your application. Programmableweb maintains a directory of 11,000+ APIs, and they are not alone (here and here for instance). All world-class service providers offer their own, such as Google. APIs are driven by a set of specific technologies, making them easily understood by developers. This type of focus means that APIs can work with any common programming language, with the most popular approaches to delivering web APIs being SOAP and REST. REST with JSON has become the favorite of developers and API owners, because it is easier to both deploy and consume than other implementations. Even though REST + JSON is not a standard, it is now seeing the widest acceptance across the industry. Again, interoperability is the key driver here, and it is important to make sure your applications can consumer 3rd party web services, and expose new specific ones in the most robust manner. Online providers event specialise in the brokering of web APIs, like for instance Zapier, ElasticIO and Talend.

VirtualisationVirtualisation: I can’t really remember the last time I had to play with a real physical server on which I installed Windows or Linux to create a web hosting environment: It was probably more than 10 years ago, on a super expensive and rackable Dell pizza box. Since then, all my web hosting providers have been offering virtualised environments on mutualised hardware, and this has grown to a super massive scale lately with a pack of providers led by Amazon and including Rackspace, Digital Ocean, Brightbox and many others. As I write these lines, I have 4 different systems running on my Mac, for development and productivity purposes, courtesy of Vmware Fusion or Oracle Virtual Box: Beyons Mac OS X 10.9 as a main host, I have Windows 8.1 and 2 server flavours of Linux (CentOS 6 and Ubuntu 12). Virtualisation means versatility and cost efficiency, since anyone can now run a fully fledged web server from home for just a fistful of dollars.

Web-Scale ITCloud and web-scale IT: Cloud has been a buzz word since a few years now, but we are still hardly realising what it means in terms of volume, scale and commoditisation. Amazon has been pioneering this space and still largely leads it, allowing individual and businesses to fire up dozens of virtual servers and and run web apps anywhere in the world in just minutes, for competitive monthly charges based on consumption. What it really means is that IT infrastructure is not anymore the realm of super specialised engineers and techs, it is now almost completely commoditised, and we enter the age of what is called “Infrastructure as code”, where any mid weight dev-ops can fire up a world class architecture of undress of servers by simply running a shell script of a few lines: Literally scary!  New contenders in this market of IT automation and web-scale IT are AnsiblePuppetLabs, Docker and Chef for instance. And these guys are going to take the industry by storm over the next 2-3 years.

Monitoring UXUser Experience Optimisation: Last but not least, as the years 2000’s have been the decade of CMS, the current period is undoubtedly focused on better managing user experiences online, and that’s achieved through a variety of means, including HTML5 rich and device agnostic user interfaces, personalised and interactive content. But at the end of the day, this is only possible through an extremely granular monitoring of performance, instant capture of exceptions and errors, and fine grained analytics. Google is still a heavyweight in that space, and enterprise content management systems battle fiercely to stay visionary leaders (Sitecore Customer Engagement Platform, Adobe Experience Manager, SDL Tridion, …) However, from a developer perspective there are huge opportunities to create value in that space, through server side and client side monitoring of web apps. And a significant number of startups have invested that space, such as NewRelic, Sentry, FuelDeck. These are essential components to deliver optimised online experiences.

Next to Part 2 – Getting the MAC workstation ready



MWD00 – Getting ready for modern web development

Latest update: 21/04/2014

In this series of articles, I’ll store in these columns both for myself and future generations of developers some insights regarding modern web development. I’ll cover a broad spectrum of areas including IDE, source control, database access, network utilities, environment provisioning, deployment, testing, monitoring, etc.

This will be largely focused on open source server-side languages and technologies such as PHP, Java, Ruby, Python, deliberately leaving aside Microsoft closed source technologies such a .NET, which require their own very specific toolkit and workflows.

Also, as a Mac user I will obviously favour recipes for Mac Os X, but as far as possible I will document viable alternatives and walkthroughs for Windows 7/8 as well.

Our journey will follow the following flexible roadmap:

  1. Embracing the evolving digital world: Where I’ll discuss the major underlying trends no developer should ignore nowadays and would factor in their strategy to be an efficient and proficient developer.
  2. Getting the workstation ready: IDE, text editors, DB utils, network utilities, cloud services and more
  3. Getting the DEV environment up and running: VMs, provisioning, sharing on the cloud
  4. Setting up a BUILD and DEPLOY factory:

And more to come, watch this space.

Next to Part 1 – Embracing the evolving digital world