In the Loop: FlightOffice.com – A Complete Solution to Manage Flight Operations Built on Node.js

Every two weeks we spread the word of Node.js and the cool and incredible things it can do. We do that by profiling creative, interesting and fun uses of Node.js in various products and projects. We call it “In the Loop.”

Today we are chatting with Lee Johnson, founder and CEO of FlightOffice.com, which is described as “a complete solution to manage flight operations.” Since we are fans of both solutions and flying, we thought we would check in. The use of Node.js sealed the deal.

flight office screenshot

FlightOffice.com describes itself as being able to “streamline operations, eliminate paperwork, and save money.”  Tell us about the opportunity you saw for FlightOffice.com to fly through paperwork. How do you do it?

Lee Johnson: There is a big problem in aviation. Other than big airlines, aviation companies operate using paper-based systems and Excel spreadsheets. Yet they are being squeezed due to increasing competition and increasing customer and regulatory requirements. They have to innovate and become much more efficient, or they won’t survive. We solve that problem by helping them automate and streamline their operations, and eliminate paperwork. So FlightOffice.com is really an ERP solution for aviation. The SAP of aviation if you will.

Your web page describes the software as powerful, flexible and able to keep data in real time. That can be quite the feat. How did you determine what to use “under the hood” to accomplish this?

Lee Johnson: When we started planning the architecture for the FlightOffice.com platform we knew that we wanted a very thin stack from front to back. We wanted that stack to scale well, both in production, and in our ability to build the platform, meaning that we could quickly and easily deploy new functionality. We were also looking for a clean, cohesive language from back-end to front-end.

Our developer geek-sense tingles when we consider how people put together apps and pages. How important was your development choice? Do you see your set-up as current or pulling ahead of the curve?

Lee Johnson: When we started working with NodeJS it was at 0.4 I think. Our team had never worked with Javascript or NodeJS and only had PHP experience. So at the time, we were in uncharted waters. People thought we were crazy to build an aviation ERP system on an unproven technology. And we even took it a step further and went with a noSQL database as well. We were, in some ways, a little too far ahead of the curve because so many tools, packages and frameworks didn’t exist. But, it was the best decision we made and we have been successful because of it.

flight office screenshot 2

Any “a ha” moments or takeaways in the development of FlightOffice.com? Any intriguing uses of code?

Lee Johnson: It’s not an “a ha” moment, but using npm effectively within the project was a big win for us.

FlightOffice.com can obviously benefit a diverse set of clients. Can you tell us about who is using it, or who could be talking advantage of it? Any examples of the results companies have seen from using it?

Lee Johnson: We have customers on 4 continents. Basically any commercial aviation company that is not a major airline, that means 80% of commercial aviation, needs a system like ours.

What does the future have in store of FlightOffice.com?

Lee Johnson: We want to be the SAP of aviation software so we are working on a few different things like professional services, a hardware unit installed in the aircraft that collects big data, a tablet solution and various other things that will provide our customers with a complete, end-to-end solution.


Sincere thanks to Lee for telling us about the potential of FlightOffice.com. In the meantime, if you have a cool Node.js project or product you think we should profile, reach out to us at callback@strongloop.com and we’d be happy to get you In the Loop.

What’s next?

  • Ready to develop APIs in Node.js and get them connected to your data? Check out the Node.js LoopBack framework. We’ve made it easy to get started either locally or on your favorite cloud, with a simple npm install.

 

Node.js and Mobile App Development News Round-up – July 30, 2013

Welcome to this week’s summary of the week in Node.js and news covering July 18 through July 29. Every week this time we will look at some of the Node.js-related news, tutorials and commentaries we’ve seen online.

Advanced chat using node.js and socket.io – Episode 1

Tamas Piros looks at making a useful tool that could be used as a chat and conferencing tool.

AngularJS: Installation

Alex Young walks through installing Angular.js.

Automate the Generation of Your Style Guides With KSS-node

Flo Preynat presents a way to utilize KSS-node to automate creation of a living styleguide with CSS, SCSS, LESS and more.

What is Node.JS and Why Should I Care? [Web Development]

James Bruce makes a compelling case for why you should know more about Node.js if you are interested in web development.

Testing Entire NPM

Pedro Dias sets up some autonomous test for all of the modules in the npm registry.

How yield will transform Node.js

Alex MacCaw looks at at the impact yield may have on Node and callbacks.

Teach Yourself Node.JS in 10 Steps

Nicolas Bevacqua helps newcomers to Node.js ramp up.

Debug Node.js applications in Windows Azure Web Sites

Learn how to enable logging of stdout and stderr, display error information in the browser, and how to download and view log files.

Tutorial: Node.js and MongoDB JSON REST API server with Mongoskin and Express.js

Azat Mardanov demonstrates building a simple REST API server with Node.js.

Where the heck do I host my … Node.js app?

Richard Seroter reviews hosting options for Node.js applications.

And, of course …

StrongLoop acquires assets of NodeFly for Node.js monitoring savvy

What’s next?

  • Ready to develop APIs in Node.js and get them connected to your data? Check out the Node.js LoopBack framework. We’ve made it easy to get started either locally or on your favorite cloud, with a simple npm install.

 

What’s New in Node.js and libuv – July 26, 2013

Welcome to this week’s wrap up of the week in Node and libuv covering July 12 through July 24. The purpose of this blog is to recap a subset of the non-documentation related commits to Node.js, plus give a little color and commentary to the ongoing development of Node.

Node v0.10 branch highlights

New releases: v0.10.12, v0.10.13, v0.10.14 and v0.10.15

Four stable releases in the last two weeks! Check out the official blogs for v0.10.12, v0.10.13, v0.10.14 and v0.10.15.

npm upgrade to v1.3.5

npm in Node v.0.10 has been upgraded to v1.3.5.

url: Fix edge-case when protocol is non-lowercase

Shuan Wang fixed an edge case in the URL parser in commit 48a4600 when the protocol is not lowercase.

fs: uids and gids must be unsigned ints

Ben fixed a bug in ed80638 where calling fs.chown() failed when you called it with UIDs or GIDs that don’t fit in a signed integer. Fixes #5890.

src: os: use Number::New() for CPU info

Ben fixed a bug in e20811a where os.cpus() sometimes returned negative CPU times. Fixes #5732.

You can view the complete Nodev0.10 commit history on GitHub.

Node master branch highlights

crypto: throw a helpful error message for “tls” and “crypto”

Now when require()-ing the crypto and tls modules when Node is compiled without SSL support, throws a new error message as 48e159f.  Patch courtesy of Nathan Rajlich.

http: Proper KeepAlive behavior

Isaac changed the http.Agent in 9fc9b87 to keep HTTP client connections open when there are no pending requests (disabled by default. When enabled, the default timeout is 1 sec.)  The number of connections per host is now unlimited rather than 5. Ben’s not sure he agrees with this change, but we’ll see how the community responds, eh?

timers: setImmediate process full queue each turn

Ben made setImmediate() about 1400% faster in commit fa46483.  It now runs all pending immediate callbacks at the start of the new tick, rather than just one and deferring everything else to later ticks.

node: always set function name

The NODE_SET_METHOD() macro now always sets the function name. This makes
debugging stack traces a little easier. This goodness is made possible by Trevor’s 46d1151 commit.

smalloc: create separate module

smalloc is a new module that developers can use for managing memory semi-manually. This feature can be found in commit d817843 by Trevor.

buffer: return offset for end of last write

In commit 4a34c69 Trevor modified the Buffer#write*() methods so they now return the new position. This is interesting seeing that you should already know how much data you’re writing.

src, lib: deduplicate errnoException

Ben cleaned up the many incarnations of the (internal) errnoException function in commit 0161ec8.

src, lib: update after internal api change

With commit ca9eb71 by Ben, Node.js internally now returns / passes error codes directly (and as numbers) rather than stuffing them as strings in process._errno.

v8: upgrade to v8 3.20.7

Trevor updated V8 to v3.20.7 in commit 5777d7a.

lib: macro-ify type checks

Ben turned the various type checks in the JavaScript code base into macros in 0330bdf. The benefits include a single definition and a better grep factor.

src: move NODE_MODULE_VERSION to node_version.h

The NODE_MODULE_VERSION macro now lives in node_version.h as of commit 44ed42b.

tls: share tls tickets key between cluster workers

Fedor added support for sharing TLS tickets between cluster workers in commit d62c2d9. TLS tickets are used to cut down on the TLS handshake overhead when a client reconnects.

openssl: use asm for sha, md5, rmd

The SHA, MD5 and RIPEMD digest algorithms now use optimized assembly
implementations as of 508a6c2, contributed by Fedor.

streams: Don’t emit ‘end’ until read() past EOF

Isaac fixed streams2 to not emit an ‘end’ event after EOF. See the commit log of 993bb93 for details.

You can view the complete Node master commit history on GitHub.

libuv v0.10 branch highlights

unix, windows: fix uv_fs_chown() function prototype

Ben fixed the prototype of uv_fs_chown() and uv_fs_fchown() in d779eb5. This fix is related to #5890 mentioned above.

You can view the complete libuv v0.10 commit history on GitHub.

libuv master branch highlights

build: dtrace shouldn’t break out of tree builds

In commit b13941c, TJ Fontaine fixed the out-of-tree autotools build on dtrace-enabled systems, it was failing early on during the build.

unix, windows: don’t read/recv if buf.len==0

Returning a zero-length buffer from your read or recv callback will now skip the read. This can happened in commit 1acbd76 by Ben. Fixes #752.

build: add mingw makefile

Ben added a Makefile for MinGW users in 977e833.

unix, windows: add MAC to uv_interface_addresses()

uv_interface_addresses() now also returns the MAC address. Commit e3a657c courtesy of Brian White. You have to admire his tenaciousness – the patch went through MANY revisions. It took over a year to land. Well done!

You can view the complete libuv master commit history on GitHub.

What’s next?

  • Ready to develop APIs in Node.js and get them connected to your data? Check out the Node.js LoopBack framework. We’ve made it easy to get started either locally or on your favorite cloud, with a simple npm install.

 

StrongLoop Acquires the Assets of NodeFly

At StrongLoop we’re examining the entire application development lifecycle. We not only want to make it easier and faster to develop robust Node.js applications on top of our distribution, but also provide any easy and seamless way to maintain them in production. To this end, I am excited to announce that StrongLoop has acquired NodeFly’s Node.js monitoring solution. The acquisition of NodeFly’s technology provides us with this capability plus rounds out our offering, bringing us closer to fulfilling our vision of a complete toolset for developing Node.js applications.

What’s Changing?

  • The NodeFly service has been rebranded to StrongOps, to better match the naming scheme of StrongLoop’s other products.
  • Behind the scenes, the NodeFly npm module has been renamed to “strong-agent”.
  • The agent is now baked into StrongLoop’s distribution of Node.js. So, if you are running our distro, it just takes a single command to enable it.
  • You’ll also see the registration and dashboard move to the StrongLoop site over the next month or so.
  • In the future, you’ll be able to take full advantage of seamless integration between StrongNode and StrongOps. For example, the ability to leverage the enhancements StrongLoop has made to the node-inspector module, so you can perform debugging drill downs on Node processes being monitored by StrongOps.

Other than that, little will change in terms of the current service in the short term. In fact today we are pleased to announce a few updates…

Clustered Application Data

StrongOps is now aggregating the data for all the processes in your applications. No more sifting through an endless process list. You’ll see the aggregated statistics for all processes in the dashboard, with the continued ability to drill down to an individual processes using the filters on the left.

CPU Profiler

The profiler dashboard now provides an easy way to get detailed CPU data for an individual process.

Native EventLoop Statistics

The event loop statistics are now more accurate than ever! It can chart the average time taken by the eventloop and the slowest eventloop for that minute.

eventloop

What Stays the Same?

The NodeFly team will continue to develop the NodeFly service as usual. Over the long haul, their mission remains unchanged. They will continue to build the best full service Node.js monitoring and management console in the industry. We believe this will complement many of the products that StrongLoop is developing.

In fact, we’ve just released a new version of our distribution, StrongNode with tons of cool features like advanced debugging, clustering and support for on-premise npm registries. You can read more about these new features in the StrongNode 1.1 announcement blog. NodeFly has attracted a loyal following of developers in a short period of time and we look forward to taking these next steps with an incredible new partner!

What’s next?

  • Ready to develop APIs in Node.js and get them connected to your data? Check out the Node.js LoopBack framework. We’ve made it easy to get started either locally or on your favorite cloud, with a simple npm install.

 

Announcing StrongNode 1.1 – Advanced Debugging, Clustering, Monitoring and Private npm Registries

StrongLoop has been staunch supporters of the Node community since day one. We’ve demonstrated this by being the biggest code contributor to Node, upgrading and developing new modules, plus supporting conferences and meetups. Core contributors Ben Noordhuis and Bert Belder have put together a video to discuss why they founded StrongLoop and to help articulate the mission we are on to serve the Node community and mobile developers looking to transform the Enterprise.

Even though it’s Summer, we’ve been pretty busy here at StrongLoop since our last release in June. Today, we are excited to announce some new features and modules designed to help developers with debugging apps, managing Node clusters and setting up private npm registries. If you’d like to see a deep dive of all the features highlighted in this post, register for our technical webinar on August 1.

Oh, and in case you missed our other announcement today, we’ve acquired NodeFly, the wildly popular Node.js performance monitoring service. We’ve changed the name of the service to StrongOps, to better match the naming scheme of our other products, and baked it into our distribution. There’s also some cool new features that have been added to the service like aggregated data views for all processes, CPU profiling and a native EventLoop statistics. If you want to learn more about the acquisition and what it means for new and existing users, read Al’s blog.

Advanced Node.js Debugging

Over the years, Node developers have come to rely on Danny Coatesnode-inspector module to debug their applications. While popular, the community has nonetheless been clamoring for additional features. Node-inspector has also been in need of an infrastructure refresh with Google abandoning support for WebKit awhile back. StrongLoop has stepped up and made a considerable investment in updating the work started by Danny to upgrade the GUI and add some killer features in the process.

Here’s a partial list of the new features in the debugger:

  • The most popular enhancement request – the ability to set breakpoints in a file not yet loaded.
  • A new GUI based on Google’s Blink Dev Tools with source files organized in a tree.
  • You can now break on uncaught exceptions and have them handled by the domains error handler, set breakpoints and restore them after restarting a debugging session (note that this requires Node.js v0.11.3).
  • Files are now loaded and parsed during a debug session and automatically added to the GUI.
  • Quick navigation by jumping to files and functions easily with hot keys.
  • Plus, the ability to hover over a variable to display and edit its value.
  • Finally, we’ve added support for Source Maps which allow you to keep client-side code readable and debuggable despite it being combined and minified, all without it impacting performance.

Danny Coates has also decided to hand over the stewardship of node-inspector to StrongLoop. Here’s what he has to say:

“Three years ago node-inspector started as an experiment while I was learning javascript and node. Since then *way* more people have found it useful than I ever expected, and that’s made me feel great, but I never thought it would last this long! I haven’t been able to give it the attention it deserves for a while, but luckily the awesome folks at StrongLoop have offered their support. In the last few weeks they’ve made some huge improvements, like updating to Google’s Blink DevTools, plus simplified debugging of mocha tests and live editing of variable values. Without a doubt, the best is yet to come for those of us who have come to rely on node-inspector for debugging node apps.It couldn’t be in better hands!”

For a detailed write up of what’s new in the debugger and how to get started with the new functionality, check out Miroslav’s blog and Matt’s screencast.

Enabling Scalable, Clustered Node.js Apps

If you’re a developer who’s running a Node.js app in production, you’ve inevitably run into scalability issues and wrestled with how to best address them. Likely you’ve had to increase the number of simultaneous clients your app can handle by distributing the load among workers. For most developers, this has meant setting up a cluster.

StrongLoop has developed several modules to make the management and monitoring of a Node.js cluster a little easier. We’ve created an implementation of the socket.io store using Node’s native cluster messaging to provide an easy solution for running a socket.io server in a Node cluster. There’s also a implementation of connect session store using Node’s native cluster messaging. It provides an easy way for using sessions in connect or express-based applications running in a Node cluster. And finally, we’ve created a module for run-time management of a Node cluster. It is an extension of Node cluster, not a replacement. It works beside it to add a few basic features.

If you’d like to read a more in-depth review of how these features work and how to use them, check out Sam’s blog.

Updates to Private On-Premise npm Registries

We’ve enhanced the work we’ve done previously with private npm registries so that it is now even easier to install a local npm server behind the firewall. We all know there are already some write-ups on how to go about hacking your own solution together, but we wanted to make it as simple as possible with the least amount of dependencies, for example, without the need to install CouchDB or Redis.

For this release we’ve put together a solution suitable for small developer teams based on the work previously done by Mike Brevoort on the node-reggie module. StrongLoop has extended node-reggie with the most common elements of npm protocol to make it easy to use. According to Mike, “Any team building private source, non-trivial Node.js applications soon realizes the need for a private NPM registry. Setting up and maintaining your own CouchDb based replica of the public NPM registry is complex and time consuming. I created Reggie as an experimental, light weight alternative to the a full blown NPM registry. I’m excited to have Miroslav and StrongLoop’s interest and help in maintaining and progressing Reggie further!”

For more info on how to get started with node-reggie, check out Matt’s blog.

StrongOps (formally NodeFly) Now Bundled in StrongNode

As mentioned at the beginning of the post, the StrongOps (NodeFly) agent is now baked into the distribution. So, if you already have the StrongNode distro installed, it just takes “slc install strong-agent” to enable it. (Don’t forget to make it a require for you application.) If you want to learn more about the features in the latest release, check out Al’s blog.

New and Updated Supported Modules

Here’s a recap of the new and updated modules now available in the StrongLoop Node distribution:

  • strong-agent – previously known as the NodeFly agent.
  • node-inspector – a debugging interface for Node.js based on Blink.
  • node-reggie – a lightweight alternative to a full blown npm registry.
  • strong-mq – previously known as sl-mq, a message queue API with cluster integration, implemented over various message queues.
  • strong-cluster-socket.io-store – implementation of socket.io store using Node’s native cluster messaging providing an easy solution for running a socket.io server in a Node cluster.
  • strong-cluster-connect-store – an implementation of connect session store using Node’s native cluster messaging providing an easy way for using sessions in Connect/Express-based applications running in a Node cluster.
  • strong-cluster-control – is a module for run-time management of a node cluster. It is an extension of Node cluster, not a replacement. It works beside it to add a few basic features.
  • strong-store-cluster (key value store) – returns a collection object which lets you share data between Node processes.

For a complete list of support modules, check out the StrongNode products page.

New Download Formats Available

We also got feedback from the community asking for tarballs and an Amazon AMI of our distribution. Ask and you shall receive, tarballs and an AMI of our distribution are now available from the StrongLoop downloads page.

What’s next?