Fulcrum & Skytap's API

Skytap provides Infrastructure as a Service. They are a fantastic virtualization platform, hosted in the cloud, primarily targeting development, testing and training solutions.
Back in the summer of 2012, shortly after we started using Skytap, we were asked to create a series of training environments that refreshed on a complex schedule so that our trainers could go into the field and have known good working environments for the purpose of training 3,500 folks on the use of our software. We needed to stand up an environment for each classroom, that both instructors and students could use during the course, and refresh that environment at the end to make way for the next class. We turned to what was then a reasonably flushed out API for Skytap. Using that, and a crazy cron file we were able to produce what our team needed in order to have a successful summer training. Four years, three major revisions and two more sets of eyes has since transformed that little script that we called "Skynet" into a full fledged python module that we use to manipulate many aspects of our Skytap infrastructure.
With the current version of that script, we now can do a variety of tasks automatically, from suspending environments, deleting environments, maintaining users and groups, documenting our servers automatically in Confluence, and displaying Skytap vm statistics for users to easily access.
After the the summer, we continued using a modified version of Skynet to manage the suspension  
of all of our Skytap systems each evening in an effort to conserve the our Skytap resources. This worked well and we began to look at other uses for the Skytap API. When we realized that the API exposed all the metrics that Skytap uses to bill us, we began work on a dashboard for our Network Operations Center that allows us to keep an eye on our Skytap usage.
Up to this point we were documenting each of our Skytap environments in Atlassian's Confluence Cloud ("Confluence Wiki") - and like many of you this was done by hand, "when we had time..." that was not a workable solution so we brought in an intern who quickly demonstrated an aptitude with working with APIs. The next round of edits to Skynet gave him all that he needed to make our Skytap systems self document in Confluence. Nearly overnight we started getting requests from uses asking for improvements to these pages as they were already providing significant value and we were excited about what else the pages could show users. This is even more important due to the dynamic nature of Skytap, as we create and destroy servers throughout the development process, we have confidence that our systems are documented in a central location.
As our intern was completing this work, we began working with Okta ("Okta Identity Management") for authentication of our users here at Fulcrum. Okta also has an API and we thought it would be exciting to integrate the creation of users in Okta with those same users in Skytap. With this new task we decided to step back and rethink the design of the Skynet script.
The Skynet script, rebranded as the python module 'skytap', is intended as a full Python wrapper of the Skytap API allowing more flexible use of future projects. This redesign also succeeded at our internal goal of being able to open source this work to potentially help other companies that work with Skytap.
Now you can get this skynet script both from its github repository if you want to see the source, or from pip (`pip install skytap`) if you want to just dive in and use it.
- Skytap GitHub Repository 
- Skytap Documentation
- pypi (pip) page
There were some rock stars who contributed to both the module and this blog post who are worth mentioning:

Bill Wellington: One of the coolest dudes to ever set foot in Fulcrum.  He's talented, brilliant, and wicked fast with technology of any kind, but more importantly brings an incredible amount of positive energy, humor, and smiles to any environment, whether its the server room, an office, or a paintball field.  

Michael Knowles:  The colorful Fulcrum genius IT Director who keeps an enterprise humming smooth like butter and purring like a kitten.  He isn't just an impeccably (hip) dresser, he's a deep philosopher who's slowly figuring out how to solve the world's problems - and he can translate life's substrata of intellectual prisms and emotional DNA into visual art.  

Caleb Hawkins: The multifaceted Caleb is part strategist (loves games), part visual creator (talented photographer), and part Renaissance man (can play a mean Ukulele).  Oh... and part awesome, which is what he applied to Fulcrum technical solutions.
Cross posted at: wellingtonnet.net, mapledyne.comfulcrumblog.netskytap.com, and calebh93.github.io


Fulcrum Hiring PL/SQL Developer

To apply click HERE:

The PL/SQL Developer is a key member of our Professional Services team, supporting software implementations, configurations and customizations for our customers. In this role you will work closely with Business Systems Analysts, Systems Engineers and QA on new product development, feature implementation and maintenance. This position also supports the architecture and development of Fulcrum’s applications.  Using PL/SQL, XML, ActionScript and Fulcrum API, the Professional Services PL/SQL Developer will be responsible for creating reports, data forms, mobility routines, interfaces and backend processing in a fast-paced and dynamic work environment. This position requires strong problem-solving and communication skills, attention to detail, the ability to quickly research and implement new technologies and the desire to work in a fast-paced, creative and dynamic environment.


Participate in all phases of the development lifecycle, including detailed design, development, unit testing, bug fixing and documentation.
Work in a team to configure Fulcrum’s solutions to meet our customer’s needs.
Collaborate with Systems Engineers and BSAs to review business requirements and functional/technical specifications in order to build customer-specific interfaces for Fulcrum applications.
Work closely with the QA team as well as internal and external project teams to identify, reproduce, troubleshoot, and resolve issues and problems.
Utilize industry standards and best practices to produce quality code.
Use research, proof of concept, spike testing, etc. to drive technology roadmap and make technology recommendations.


5+ years Oracle PL/SQL development experience and 2+ years experience with Actionscript and XML.
Experience in software product environments is required with an emphasis on Agile/Scrum development methodology and SaaS/Cloud business models.
Experience with Linux/UNIX required, though background Crystal Reports and application servers desired.
Experience designing or aiding design of user interfaces on customer-facing or external web applications.
Comfortable with repositories such as Git required, though Jenkins/Continuous Delivery experience desired.
Understands how business process modeling relates to software development.
Self-motivated with strong organization and communication skills including the ability to work with internal and external stakeholders.
Ability to develop creative solutions for complex and abstract problems in a fast-paced, visible environment.
Experience with enterprise software development and implementation preferred, though telecommunications industry experience desired. 


Asset Management is complex so we hire problem solvers to make it easy. Working for Fulcrum means being a part of company and culture where you matter and where you will have a daily impact on the success of our product and people. Join us in changing an industry.

Fulcrum Hiring Release Manager

Visit here to apply:

Fulcrum has an opening for an experienced Release Engineer to manage our core and custom software releases. This work is highly varied day-to-day ranging from product migrations to code deployments, working with Development and QA, creating virtual environments and automating deployments as well as managing the code repository (Git). This role is a critical part of a small team dedicated to ensuring the best customer experience from the release perspective and the ideal candidate will experience creating release process documentation. 



Manage the build and release process for customer-specific software products, including the organization, distribution and archiving of all deliverables.
Coordinates with internal and client groups to ensure quality build and installation packages of product releases.
Designs and develops builds, scripts, installation procedures and systems including source code control and issue tracking while adhering to industry and company standards.
Implements release strategy to support code migration through SDLC for Customer-specific code.
Creates documentation specific to release processes and actively looks for areas of improvement.
Works with the Release PM to manage the integration of all participating projects in a complex release to ensure seamless execution and on-­­time delivery of high quality releases.
Creates and maintains virtual environments for QA and DEV in addition to performing version control and labeling of the build.



Bachelor’s degree in CS, Engineering, MIS or related field preferred.
5+ year’s technical software industry experience preferably in Release, Development or Test
Strong understanding of database programming including objects and dependencies required though PL/SQL experience strongly preferred.
Experience with code repository management and continuous integration tools such as Git and Jenkins and familiarity with build tools such as Maven.
General understanding of concepts and protocols for client/server architecture and web application servers.
Good knowledge of a scripting language like Bash, Shell, Ruby, Perl, Python, Unix/Windows preferred.
Strong ability to communicate effectively with IT leadership, technical groups and project teams to convey IT related release strategy, direction and scope.
Demonstrated adaptability in order to find solutions in new situations as well as desire to learn new technologies.
Ability to work overtime and/or weekends and travel as needed for specific engagements.


Fulcrum is a company of passionate, dedicated individuals working to deliver the best experience for our customers in the Asset Lifecycle Management space. We take initiative and we take risks. We are empowered and we take ownership of projects to assure quality solutions are achieved. If this sounds like you, apply now!

Programming Isn't Manual Labor, But It Still Sucks (Mashable)

Peter Welch is a writer and programmer. He is the author of the book And Then I Thought I Was a Fish and the blog "Still Drinking":

Every friend I have with a job that involves picking up something heavier than a laptop more than twice a week eventually finds a way to slip something like this into conversation: "Bro, you don't work hard. I just worked a 4700-hour week digging a tunnel under Mordor with a screwdriver."

They have a point. Mordor sucks, and it's certainly more physically taxing to dig a tunnel than poke at a keyboard unless you're an ant. But, for the sake of the argument, can we agree that stress and insanity are bad things? Awesome. Welcome to programming.

All programming teams are constructed by and of crazy people...

Imagine joining an engineering team. You're excited and full of ideas, probably just out of school and a world of clean, beautiful designs, awe-inspiring in their aesthetic unity of purpose, economy, and strength. You start by meeting Mary, project leader for a bridge in a major metropolitan area. Mary introduces you to Fred, after you get through the fifteen security checks installed by Dave because Dave had his sweater stolen off his desk once and Never Again. Fred only works with wood, so you ask why he's involved because this bridge is supposed to allow rush-hour traffic full of cars full of mortal humans to cross a 200-foot drop over rapids. Don't worry, says Mary, Fred's going to handle the walkways. What walkways? Well Fred made a good case for walkways and they're going to add to the bridge's appeal. Of course, they'll have to be built without railings, because there's a strict no railings rule enforced by Phil, who's not an engineer.

Nobody's sure what Phil does, but it's definitely full of synergy and has to do with upper management, whom none of the engineers want to deal with so they just let Phil do what he wants.

Sara, meanwhile, has found several hemorrhaging-edge paving techniques, and worked them all into the bridge design, so you'll have to build around each one as the bridge progresses, since each one means different underlying support and safety concerns. Tom and Harry have been working together for years, but have an ongoing feud over whether to use metric or imperial measurements, and it's become a case of "whoever got to that part of the design first." This has been such a headache for the people actually screwing things together, they've given up and just forced, hammered, or welded their way through the day with whatever parts were handy. Also, the bridge was designed as a suspension bridge, but nobody actually knew how to build a suspension bridge, so they got halfway through it and then just added extra support columns to keep the thing standing, but they left the suspension cables because they're still sort of holding up parts of the bridge. Nobody knows which parts, but everybody's pretty sure they're important parts. After the introductions are made, you are invited to come up with some new ideas, but you don't have any because you're a propulsion engineer and don't know anything about bridges.

Would you drive across this bridge? No. If it somehow got built, everybody involved would be executed. Yet some version of this dynamic wrote every single program you have ever used, banking software, websites, and a ubiquitously used program that was supposed to protect information on the internet but didn't.

[Code Error Horror]

All code is bad

Every programmer occasionally, when nobody's home, turns off the lights, pours a glass of scotch, puts on some light German electronica, and opens up a file on their computer. It's a different file for every programmer. Sometimes they wrote it, sometimes they found it and knew they had to save it. They read over the lines, and weep at their beauty, then the tears turn bitter as they remember the rest of the files and the inevitable collapse of all that is good and true in the world.

This file is Good Code. It has sensible and consistent names for functions and variables. It's concise. It doesn't do anything obviously stupid. It has never had to live in the wild, or answer to a sales team. It does exactly one, mundane, specific thing, and it does it well. It was written by a single person, and never touched by another. It reads like poetry written by someone over thirty.

Every programmer starts out writing some perfect little snowflake like this. Then they're told on Friday they need to have six hundred snowflakes written by Tuesday, so they cheat a bit here and there and maybe copy a few snowflakes and try to stick them together or they have to ask a coworker to work on one who melts it and then all the programmers' snowflakes get dumped together in some inscrutable shape and somebody leans a Picasso on it because nobody wants to see the cat urine soaking into all your broken snowflakes melting in the light of day. Next week, everybody shovels more snow on it to keep the Picasso from falling over.

There's a theory that you can cure this by following standards, except there are more "standards" than there are things computers can actually do, and these standards are all variously improved and maligned by the personal preferences of the people coding them, so no collection of code has ever made it into the real world without doing a few dozen identical things a few dozen not even remotely similar ways. The first few weeks of any job are just figuring out how a program works even if you're familiar with every single language, framework, and standard that's involved, because standards are unicorns.

There will always be darkness

I spent a few years growing up with a closet in my bedroom. The closet had an odd design. It looked normal at first, then you walked in to do closet things, and discovered that the wall on your right gave way to an alcove, making for a handy little shelf. Then you looked up, and the wall at the back of the alcove gave way again, into a crawlspace of utter nothingness, where no light could fall and which you immediately identified as the daytime retreat for every ravenous monster you kept at bay with flashlights and stuffed animals each night.

This is what it is to learn programming. You get to know your useful tools, then you look around, and there are some handy new tools nearby and those tools show you the bottomless horror that was always right next to your bed.

For example, say you're an average web developer. You're familiar with a dozen programming languages, tons of helpful libraries, standards, protocols, what have you. You still have to learn more at the rate of about one a week, and remember to check the hundreds of things you know to see if they've been updated or broken and make sure they all still work together and that nobody fixed the bug in one of them that you exploited to do something you thought was really clever one weekend when you were drunk. 

You're all up to date, so that's cool, then everything breaks.

"Double you tee eff?" you say, and start hunting for the problem. You discover that one day, some idiot decided that since another idiot decided that 1/0 should equal infinity, they could just use that as a shorthand for "Infinity" when simplifying their code. Then a non-idiot rightly decided that this was idiotic, which is what the original idiot should have decided, but since he didn't, the non-idiot decided to be a dick and make this a failing error in his new compiler. Then he decided he wasn't going to tell anyone that this was an error, because he's a dick, and now all your snowflakes are urine and you can't even find the cat.

You are an expert in all these technologies, and that's a good thing, because that expertise let you spend only six hours figuring out what went wrong, as opposed to losing your job. You now have one extra little fact to tuck away in the millions of little facts you have to memorize because so many of the programs you depend on are written by dicks and idiots.

And that's just in your own chosen field, which represents such a tiny fraction of all the things there are to know in computer science you might as well never have learned anything at all. Not a single living person knows how everything in your five-year-old MacBook actually works. Why do we tell you to turn it off and on again? Because we don't have the slightest clue what's wrong with it, and it's really easy to induce coma in computers and have their built-in team of automatic doctors try to figure it out for us. The only reason coders' computers work better than non-coders' computers is coders know computers are schizophrenic little children with auto-immune diseases and we don't beat them when they're bad.

Remember that stuff about crazy people and bad code? The internet is that except it's literally a billion times worse. Websites that are glorified shopping carts with maybe three dynamic pages are maintained by teams of people around the clock, because the truth is everything is breaking all the time, everywhere, for everyone. Right now someone who works for Facebook is getting tens of thousands of error messages and frantically trying to find the problem before the whole charade collapses. There's a team at a Google office that hasn't slept in three days. Somewhere there's a database programmer surrounded by empty Mountain Dew bottles whose husband thinks she's dead. And if these people stop, the world burns. Most people don't even know what sysadmins do, but trust me, if they all took a lunch break at the same time they wouldn't make it to the deli before you ran out of bullets protecting your canned goods from roving bands of mutants.

You can't restart the internet. Trillions of dollars depend on a rickety cobweb of unofficial agreements and "good enough for now" code with comments like "TODO: FIX THIS IT'S A REALLY DANGEROUS HACK BUT I DON'T KNOW WHAT'S WRONG" that were written ten years ago. I haven't even mentioned the legions of people attacking various parts of the internet for espionage and profit or because they're bored. Ever heard of 4chan? 4chan might destroy your life and business because they decided they didn't like you for an afternoon, and we don't even worry about 4chan because another nuke doesn't make that much difference in a nuclear winter.

On the internet, it's okay to say, "You know, this kind of works some of the time if you're using the right technology," and BAM! it's part of the internet now. Anybody with a couple of hundred dollars and a computer can snag a little bit of the internet and put up whatever awful chunks of hack code they want and then attach their little bit to a bunch of big bits and everything gets a little bit worse. Even the good coders don't bother to learn the arcane specifications outlined by the organizations people set up to implement some unicorns, so everybody spends half their time coping with the fact that nothing matches anything or makes any sense and might break at any time and we just try to cover it up and hope no one notices.

Here are the secret rules of the internet: five minutes after you open a web browser for the first time, a kid in Russia has your social security number. Did you sign up for something? A computer at the NSA now automatically tracks your physical location for the rest of your life. Sent an email? Your email address just went up on a billboard in Nigeria.

These things aren't true because we don't care and don't try to stop them, they're true because everything is broken because there's no good code and everybody's just trying to keep it running. That's your job if you work with the internet: hoping the last thing you wrote is good enough to survive for a few hours so you can eat dinner and catch a nap.

ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu.

Funny, right? No? How about this exchange:

"Is that called arrayReverse?"


"Cool thanks."

Wasn't that guy helpful? With the camel? Doesn't that seem like an appropriate response? No? Good. You can still find Jesus. You have not yet spent so much of your life reading code that you begin to talk in it. The human brain isn't particularly good at basic logic and now there's a whole career in doing nothing but really, really complex logic. 

Vast chains of abstract conditions and requirements have to be picked through to discover things like missing commas.

Vast chains of abstract conditions and requirements have to be picked through to discover things like missing commas. Doing this all day leaves you in a state of mild aphasia as you look at people's faces while they're speaking and you don't know they've finished because there's no semicolon. You immerse yourself in a world of total meaninglessness where all that matters is a little series of numbers went into a giant labyrinth of symbols and a different series of numbers or a picture of a kitten came out the other end.

Read more on Mashable at:

Fulcrum Developers Almost Kicked Ass @ Geekwire Ping-Pong Tournament... Definitely Kicked Ass For Style Points.

On March 26th, several members of the Fulcrum Research and Development group participated in the Geekwire ping-pong event in Seattle at the Showbox SODO in Seattle.  While many of the members had a great showing, they were ultimately knocked out before the finals.

That said, they definitely had a great time, AND set the record for "style points".   For more information about the event, see the recap at Geekwire.  There were more than 700 people in attendance, which even included a national anthem by Peter Hamilton.  

The serious quote of the night came from Carl, a senior developer at Fulcrum, speaking to a developer from a rival company:  "At Fulcrum you have more control and direction over your own career."  

The  less serious quote of the night came from 'The Jackal', "Don't buy a new ping-pong paddle two days before the big tournament."

Best workplace for Developers in Seattle? It isn’t Google, Amazon, or Microsoft. It’s Fulcrum Technologies (Fulcrum.Net).

Situated in-between Lake Union and the iconic Space Needle is a hip haven for Seattle developers.   Fulcrum Technologies is tiny compared to Google, Amazon, and Microsoft, but that’s part of the appeal. Because of the relatively “small” size, we are able to have a more relaxed atmosphere than our giant corporate counterparts. (The ones with all those claustrophobic rules). 

Sometimes we order pizza for the group just because we love pizza. Sometimes we have bourbon tastings, because… well, we love bourbon too. There are game nights where the CTO fires up Halo on the big screen and takes on all challengers. There are afternoon ping-pong tournaments where you can showcase your ninja paddle skills (or lack thereof, we don’t judge). Once in awhile you will even see a drone go flying through the building, and we’re still not sure what that’s about.

We have guitarists, a well known DJ, a magician, some awesome rock climbers, a motorcycle enthusiast, and some sport fans (10% of the company went to the Superbowl last year).

What we don’t have is YOU. Come work side-by-side with our CTO and development group on a variety of fun technologies. Come take ownership of delivering new products and new functionality to our customers. This will include implementing those new products within our database infrastructure, on our backend stack, within our UI, and throughout our mobile products. Our stack includes an Oracle RDBMS, Java, JSP, HTML5, AngularJS, Cordova, and a variety of third party libraries including Jackson, Jersey, and any other tool you might need. Our IDE of choice is IntelliJ running on a MacBook Pro, and all of our Engineers have a 27 inch Thunderbolt display.

We use a variety of tools to deliver these products that include an Oracle RDBMS, a Java service layer that runs in both WebLogic or Tomcat, JSP Pages using HTML 5 and AngularJS, and mobile products running on iOS, Android, and Windows Mobile.  Heck, we even have a 3D printer if you get bored.

Send us an email to CAREERS@Fulcrum.net and tell us how you can create amazing things.      

Seattle Developers: Fulcrum is hiring Junior and Senior Software Development Engineers!

About Fulcrum:

Fulcrum Technologies is the leading provider of Asset Lifecycle Management (ALM) solutions for Communication Service Providers in the United States. Our CATS software gives companies the ability to track their widely dispersed CSP assets with mobile devices in real-time, and synchronize that information across their back office systems for faster and better-informed decision making.  CATS enhances operational efficiencies, regulatory compliance and profitability by improving capital equipment utilization, optimizing spares allocation, and streamlining return and repair processes.  Fulcrum is used by 3 of the largest 4 Communication Service Providers in the US.

Our Software Development Team is expanding and we are looking to bring on Engineers that like solving hard problems using the latest technologies.

What are we hiring for?

We’re looking for Software Development Engineers with 1-3 years of experience that want to take ownership of delivering new products and new functionality to our customers.  This will include implementing those new products within our database infrastructure, on our backend stack, within our UI and throughout our mobile products.

Our stack includes an Oracle RDBMS, Java, JSP, HTML5, AngularJS, Cordova, and a variety of third party libraries including Jackson, Jersey, and any other tool you might need.

Our IDE of choice is IntelliJ running on a MacBook Pro, and all of our Engineers have a 27” Thunderbolt displays.

We use a variety of tools to deliver these products that include an Oracle RDBMS, a Java service layer that runs in both WebLogic or Tomcat, JSP Pages using HTML 5 and AngularJS, and mobile products running on iOS, Android, and Windows Mobile.

What skills do you need?

To be successful in this role, you will need to be a great coder.  The kind of coder that other coders go to for advice and encouragement.  You need to have experience working on services with large numbers of concurrent users.  You need to have experience working with Relational Databases, and experience in writing software in Java and JavaScript.  We prefer that you have experience with AngularJS, and have some familiarity with Cordova.


Click here to apply now, we’d love to talk with you! If possible, please include a link to a project or two in github that you’re particularly proud of.  http://www.fulcrum.net/#/about