A Small Rant About Being IDE-Dependent

{Sort of a Rant}

I recently saw this tweet.

I responded with this tweet.

Now I need to describe some context around this response real quick. Here are the key points behind this tweet from my context in the software development industry.

  1. I’m not a .NET Developer. I’m a software developer, or application programming, coder, hacker or more accurately I’m a solutions developer. I don’t tie myself to one stack. I’ve developed with C# & VB.NET with Visual Studio. I’ve done C++ and VB 4. I’ve done VBA and all sorts of other things in the Microsoft space on Windows and for the web with Windows technology. About 5 years ago I completely dropped that operating system dependency and have been free of it for those 5 years. I doubt I ever want to couple an application up to that monstrous operating system again, it is far to limiting and has no significant selling point anymore.
  2. In addition to the .NET code I’ve written over the years I’ve also built a few dozen Erlang Applications (wish I’d known about Elixir at the time), built a ton of Node.js based API and web applications, and have even done some Ruby on Rails and Sinatra. These languages and tooling stacks really introduced me to reality I longed for. A clean, fast, understandable reality. A reality with configuration files that are readable and convention that gives me real power to get things done and move on to the next business need. These stacks gave me the ability to focus more on code and business and research value and less on building the tool stack up just to get one single deployment out the door. Since, I’ve not looked back, because the heavy handed stacks of legacy Java, .NET, and related things have only laid heavily on small business and startups trying to add business value. In the lands I live in, that is San Francisco to Vancouver BC and the cities in between, Java and .NET can generally take a hike. Because businesses have things to do, namely make money or commit to getting research done and not piddling around building a tool stack up.

So how was this new reality created? It isn’t a new one, really the new reality was this heavy handed IDE universe of fat editors that baby a developer through every step. They create laziness in thinking and do NOT encourage a lean, efficient, simple way to get an application built and running. It doesn’t have to be this way. A small amount of developer discipline, or dare I say craftsmanship, and most of these fat IDEs and tightly coupled projects with massive XML files for configuration in their unreadable catastrophofuck of spaghetti can just go away.

Atom, Sublime, and other editors before that harnessed this clean, lean, and fast approach to software development. A Node.js Project only needs one file and one command to start a project.

npm init

A Ruby on Rails Project is about the same.

rails new path/to/your/new/application

That’s it, and BOOM you’ve got an application project base to start from.

Beyond that however, using a tool like Yeoman opens up a very Unix style way of doing something. Yeoman has a purpose, to build scaffolding for applications. That is its job and it does that job well. It has a pluggable architecture to enable you to build all sorts of scaffold packaging that you want. Hell, you can even create projects with the bloated and unreadable XML blight that pervades many project types out there from enterprisey platforms.

Take a look at Yeoman, it is well worth a look. This is a tool that allows us to keep our tooling, what we do use, loosely coupled so we don’t have a massive bloated (5+ GB) installation of nonsense to put on our machines. Anybody on any platform can load up Yeoman, and grab an editor like Atom, Submlime, Visual Studio Code (not to be confused with the bloated Visual Studio) and just start coding!

Take a look at some of the generators that yeoman will build projects for you with -> http://yeoman.io/generators/ There are over 1500! No more need to tightly couple this into an IDE. Just provide a yeoman plugin in your editor of choice. Boom, all the features you need without the tight coupling in editor! Win, win, win, win, and win!

As a bit more of my rant about bloated editors, and don’t get me wrong, I love some of the features of the largesse of some like Visual Studio and WebStorm. But one huge rant I have is the absolutely zero motivation or vested interest that a community has to add features, bug fix, or do anything in relation to editors like Visual Studio or WebStorm. ZERO reason to help, only to file complaints or maybe file a bug complaint. That’s cool, I’m glad that the editors exist but this model isn’t the future. It’s slowly dying and having tightly coupled, slow, massively bloated editors isn’t going to be sustainable. They don’t adapt to new stacks, languages, or even existing ones.

Meanwhile, Atom, Sublime, and even Visual Studio Code and other lean editors have plugin and various adaptar patterns that allow one to add support for new languages, stacks, frameworks, and related tooling and not have tight coupling to that thing. This gives these editors the ability to add features and capabilities for stacks at a dramatically faster rate than the traditional fat IDEs.

This is the same idea toward tooling that is used in patterns that a software developer ought to know. Think of patterns like seperation of concerns and loose coupling, don’t tie yourself into an untenable and frustrating toolchain. Keep it loosely coupled and I promise, your life will get easier and that evening beer will come a little bit sooner.

{Sort of a Rant::End}

…and this is why I say, do NOT tie project creation into an editor. Instead keep things loosely coupled and let’s move into the future.


Starting an Ubuntu Dev Tools List

I’ve recently setup a completely clean virtual machine for doing web, system, and related development on Ubuntu. Here’s the shortlist of what I’ve installed after a default installation. The ongoing list of tools and related items I have installed on my Linux dev box I’m keeping here, and it will be kept as a living doc, so I’ll change it as I add new tools, apps and related changes. So lemme know what I ought to add to that list and I’ll add it to my docs page here. Here’s what I have so far…

Other To-dos

  • Always run sudo apt-get update once the system is installed. It never hurts to have the latest updates.
  • I always install Chrome as my first app. Sometimes the Ubuntu Software Center flakes out on this, but just try again and it’ll work. I use the 64-bit Chrome btw, as I’ve noticed that the 32-bit often flakes out when attempting installation on my virtual machines. Your mileage may vary.

What this enables…

At this point I can launch into about any language; Java, JavaScript, and a few others with a minimal amount of headache. Since it’s a Linux instance it gives me a full range of Linuxy things at my disposal.

Default Java Installation

  1. Run a ‘sudo apt-get update’.
  2. To install the default Java JRE and the JDK run the following commands.
    sudo apt-get install default-jre
    sudo apt-get install default-jdk

Oracle Java v8 Installation

  1. sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java8-installer

WebStorm Installation

  1. I download the application zip from JetBrains and then run
    tar xfz WebStorm-*.tar.gz
  2. Next I always move the unzipped content to the directory in which I’d like to have the application stored. It’s good practice to not keep things in the download directory, just sayin’. Generally I put these in my usr/bin directory.
    mv /downloads/WebStorm-* your/desired/spot
  3. Now at your terminal, navigate to the path where the application is stored and run the WebStorm.sh executable.
  4. To add WebStorm to the Quicklaunch, just right click on the icon and select to Lock to Launcher.

IDEA IntelliJ Installation

  1. Follow all the steps listed under WebStorm, it’s the exact same process.

Sublime 3

  1. Go to download the latest v3.
  2. Run the package and it should launch the actual Ubuntu installer, setup Sublime for bash use and get it installed.

(NOTE UPDATED 1/18/2016 > The installer doesn’t seem to get it installed, so I went with this link http://olivierlacan.com/posts/launch-sublime-text-3-from-the-command-line/ which has a good solution.)

WebStorm JavaScripting & Noding Workflow Webinar Recording

Today the JetBrains team wrapping up final processing for my webinar from last week. You can check out the webinar via their JetBrains Youtube Channel:

JavaScriptFor even more information be sure to check out the questions and answers on the JetBrain WebStorm IDE blog entry. Some of the questions include:

  • Q: How to enable Node.js support in PhpStorm (PyCharm, IntelliJ IDEA, RubyMine)?
  • Q:How to enable autocompletion for Express, Mocha and other libraries?
  • Q: Is it possible to debug a Node.js application that runs remotely? Is it possible to debug when your node and the rest of the dependencies (database, etc.) are running in a VM environment like Vagrant?
  • Q: Does the debugger support cluster mode?

…and others all here.

I’ve Got a JavaScript & Node.js Webinar, Webstorm Tutorial Videos, Work & Flow With JavaScript Development and More…

Webinar: Node.js Development Workflow in WebStorm

This coming week I’m doing an intro to work and flow with Node.js JavaScript Programming that I’m working with JetBrains on. In the webinar I’ll be covering the following key topics in the webinar:

  • Open an existing project & getting WebStorm configured for running, testing and related working tasks.
  • A quick tour of other IDE features that help with daily work. Some in pretty huge ways.
  • Running WebStorm & debugging Node.js JavaScript applications.
  • Checking out Mocha, how it works and what it gives WebStorm the power to do. Then we’ll write a few tests & implement that code too.

All this will include Q & A throughout and at the end of the webinar. Be sure to register soon!

WebStorm Tutorials: Learning Shortcuts, Customizing Layout and Others

These WebStorm Tutorials have been put together by John Lindquist @johnlindquist for JetBrains. There solid, quick snippets of useful WebStorm usage. Two that I’ve found really useful I’ve included here:

John also has a lot of other great totally kick ass material out there. So check out his blog @ http://johnlindquist.com/ and follow his youtube channel too.

Coming Up in the Near Future, The Work & Flow of JavaScript Development

I have a new course I’m working on right now for Pluralsight, that will take these basic precepts and dive even deeper into the daily workflow of the JavaScript Developer. Whether it’s client side hacking or server side coding, I’ll be diving into a whole lot of JavaScript goodness. If you’d like me to ping you when the course is done, hit me up on Twitter @adron and just let me know. In the meantime get a Pluralsight subscription (free to sign up and at least give it a try) and check out these courses by myself and others.

My Day @ Seattle Mobile Hackathon (#mobileappSEA) The Morning

I arrived around 8:20am “ish”. @juliaferraioli & cohort were registering people. The @AWSstartups crew was there including @Jeffbarr, also @shanley, @Alex_donn, @JamesPearce, and others were already getting things put together. I decided to happily plunk down in a chair and get going. I had zero plan, but only a single goal. Make a web app that isn’t device proprietary, but is mobile centric, and get it live on the web.

My initial dev machine load that I intended to get this accomplished with I posted yesterday.  So here’s my first push…

First a quick run thru of WebStorm and RubyMine IDEs.

{Edited this part on Apr 20th to provider more information regarding Java Installation} If you’re on Ubuntu, open up the Synaptic Package Manager and search for java6, which should bring up the sun-java6-jre.  Mark it for installation and apply so that the JDK will install with the required components.  If the Java 6 isn’t available in the Synaptic Package Manager open up the Settings -> Repositories, and then the Software Sources Dialog will appear.  Click on the Other Software tab and select Canonical Partners.  Close the dialog and Reload the packages.  When a search is done now, the sun-java6-jdk should be available.

Next edit the profile at /etc/profile by entering the command:

sudo gedit /etc/profile

Add the following to the bottom of the file:

export JAVA_HOME=/usr/lib/jvm/java-6-sun

After this is done, restart your X-Windows/Gnome Instance or simply just reboot. I don’t really like to suggest rebooting since it usually isn’t needed with Linux. 😉

Unzip both packages downloaded from Jetbrains.

tar -xvzf WebStorm-2.0.1.tar.gz
tar -xvzf RubyMine-3.1.1.tar.gz

You may want to put your new applications into a specific directory. I placed mine in a folder I made within my user folder called apps. Just a little easier to keep up with things that way.

Creating a Launcher

Creating a Launcher

Once these are unzipped right click on your desktop and choose “Create Launcher…”. Click on the Browser to bring up a folder navigation dialog, find the bin directory of the app your creating a launcher for. In my case it is /home/adron/apps/WebStorm-103.243/bin/ which has the WebStorm App Files needed for the Launcher. Find the WebStorm.sh file and select it.

Once the app file is selected then check ok. For a more step by step, check out Tomi’s Blog Entry.  Do the same for both apps.

With both of those apps, simply launch the IDE and enter your key (or select 30 day trial) and you’re up and running.

RubyMine Startup (click for full size image)

RubyMine Startup (click for full size image)

With the awesome Jetbrains IDEs installed I was really ready to dive into something.  Next I went straight for a new project in RubyMine.  File -> New or just click on the Create New Project on the main RubyMine Startup Screen.

New Project Dialog

New Project Dialog

Pick your name, I’ve decided to go for some sushi with a project type of Rails application, and click enter.  The next dialog that comes up asks some standard settings information options.

Rails Settings

Rails Settings

If you click on the ellipsis button to the right of the Rails Version, a prompt will come up to select which rails version you want to use.  Ruby Mine will then install that version if it isn’t installed already.

Install Rails Version

Install Rails Version

I decided to check “Generate RDoc and ri documentation” also, and then clicked on Install.

Installing Rails Version

Installing Rails Version

Once the options and settings are made for the new project, click to create the project.  RubyMine will work for a few seconds, maybe 20 or 30 on slower machines, and eventually the IDE will display with the newly created project.  When I created it the first time I was informed I was missing some gems.

RubyMine Project (Click for larger image)

RubyMine Project (Click for larger image)

I clicked on the More… option near the Install and attach missing gems using bundler… warning to get the additional gems I needed.  This brings up a dialog specific to maintaining the Ruby SDK and Gems.

Settings (Click for larger image)

Settings (Click for larger image)

I clicked on Install Gems and found the the sqllite3 and sqllite3-ruby gems to install.  I clicked on install and then apply and OK (ok, old habit, not sure WHY apply gets put on these dialogs) on the settings screen.  Once done getting those last bits installed click on the Development: SomeSushi (or whatever you’ve named the project) and select Edit Configurations.

Development: SomeSushi

Development: SomeSushi

On the Edit Configurations Dialog screen check Run Browser from the bottom of the options and click on OK.  Then click on run button (the green play button on the button bar) to run the Ruby on Rails Web Application.  Within a second or two you’ll see the default Ruby on Rails + RubyMine Run the site in the browser.

RubyMine Ruby on Rails Default Web App

RubyMine Ruby on Rails Default Web App

At this point in the day I took a break, ate lunch, talked to @AWSstartups crew @rodica & @Jeffbarr.  Introduced myself formally in person to @shanley and chit chatted about our respective efforts with @lazycoder and @juliaferraioli.  The food was great, as in, it was actually really good.  Not some random junk.  Super tender chicken with spaghetti sauce and little round funny shaped pastas (I’m sure there is an appropriate name for em’).  I was honestly impressed by the food brought in.

After lunch I dived back in for the next phase of development.  For that though, I have another blog entry coming…  (stay tuned).