Archive for October, 2015

Social Accountability

Two services that we use at Resgrid a lot, UserVoice and Rollbar, don’t have Cordova Plugins. Every couple of months I would cruise the Internet to see if there were plugins for those services. Every time I turned up empty handed and left the cycle to repeat.

accountability-businessAfter thinking about it again I decided that this isn’t the type of company I want Resgrid to be. See a hole, fill that hole. So I started working on 2 Cordova plugins, one for UserVoice and the other for Rollbar. But prioritizing working on them was difficult. So I decided to push them out to GitHub and see if some social accountability would help motivate me, within a week we got our first PR.

The result, it did. That first PR where someone took the time to clean up some code and fix some issues forced me to dedicate some time to get the plugin working.

Being Socially Accountable is far more then just publishing code on Github or Bitbucket. Communicating your goals to other people, telling your fiends what you hope to accomplish or every morning during your stand up, your practicing social accountability.

But social accountability can be a curse. A while ago I watched a talk given by Jacob Thomton at the dotJS conf in 2012 about the history of OSS and why he feels bad. If you haven’t watched it it’s a good watch, note there is some NSFW language in the talk.

You can spend a lot of your time working on a side project just because it got some stars, PR’s or open issues. Even for small projects I’ve seen this stress people out. A coworker of my released some controls as open source and got a ton of issues back from people using them. Most of them didn’t try and fix them and submit a PR or patch, instead they just logged an issue.

Because of this or other factors maybe you don’t want to practice social accountability via Open Source or maybe you cant due to IP or the private nature of the code. But there are plenty of other avenues, treat your daily standup as an accountability session, have a channel on your Slack instance dedicated to accountability where after DSU you post your daily goals.

Accountability is a powerful thing, but it can be a drag on you as well. Just like everything it has pros and cons, but I feel that people don’t practice it enough. When social accountability is used well it will help you focus, raise visibility and showcase your accomplishments.

Check our Resgrid’s 2 new OSS projects our Cordova Rollbar plugin (https://github.com/Resgrid/cordova-plugins-rollbar) and our UserVoice Cordova plugin (https://github.com/Resgrid/cordova-plugins-uservoice). and hold us accountable.

Resgrid is a SaaS product utilizing Microsoft Azure, providing logistics, management and communication tools to first responder organizations like volunteer fire departments, career fire departments, EMS, search and rescue, CERT, public safety, disaster relief organizations, etc. It was founded in late 2012 by myself and Jason Jarrett (staxmanade).

Star Citizen an Outsiders Perspective

Wing Commander IV: The Price of Freedom is one of my all time favorite games. A friend of mine had Wing Commander 2 and that what my first introduction to the series and genre at large. When I finally got my own computer this was one of the first games I owned and I played it a lot.

Wing_Commander_IV_-_The_Price_of_Freedom_CoverartUp until a few years ago I felt that we would never see games like that again. The Space Sim was pretty much dead as a genre. I played the X series from Egosoft (bought every one since X2) and I tried to get into EVE Online.

But as much as I loved the series I never really knew who Chris Roberts was. I was pretty young and just consumed the games rather then getting attached to their creators/publishers.

So when I heard about Star Citizen I was totally blown away. I missed the original Kickstarter but I was excited that I could still help crowd fund the game. But I was a little turned off by the prices of some of the packages, $15,000 bucks? Started to feel a little pay-to-win’ish for me. So I’ve been holding off until more reviews of Squadron 42 make it out there.

I’m also a fan of The Escapist, I watch Zero Punctuation every week and cruise their site from time to time. So when I started seeing YouTube videos with both Star Citizen and The Escapist in the title it peaked my attention. So I started watching and reading and wow, just wow.

I’m not going to get into the whole thing between Star Citizen and The Escapist to get the rundown I recommend these two videos “Star Citizen Sends Out an SOS: Will the Project Be Completed?” & “Star Citizen News: CIG Is Suing The Escapist! So Was The Escapist Wrong? Let’s Talk About It!”.

There’s a lot floating out there, but it comes down to people are concerned that they game proposed cannot be delivered. Derek Smart seems to be the most vocal, he’s raised some good points. But he’s also a competitor, what better way to raise visibility of his own stuff and tear down the competition at the same time, so that should be taken with a grain of salt. But it doesn’t mean he’s wrong. There is a lot of “your either with us or against us” attitude out there, which isn’t healthy or constructive.

Money

Star Citizen has raised around $90 million. There is a lot to the proposed game, which according to the developers is many AAA games in one. If that’s the case it’s pretty scary, why? Well AAA games are expensive, lets take a look at GTA 4’s estimated development costs, they were $100 million. According to the Star Citizen website they have 3 more large modules to build, if each one is a AAA title, that’s $300 million using GTA 4’s numbers, which is a worst case scenario, but things are trending that direction for the industry.

This doesn’t include the costs of what they have already built and the cost of starting a company from scratch. Other development studios, like Rockstar, already have all the infrastructure, processes, tech stack, etc in place Cloud Imperium Games had to build their up. So with the money already committed it’s already an uphill battle to reach their goal.

Just from a high level numbers view it’s very difficult to see how they will complete the game. But if they deliver Squadron 42 with the money raised thus far and with everything already delivered I would call it a success.

If The Escapist and Derek Smart are correct and that $90 million isn’t being utilized properly or efficiently that compounds the issue. Hiring and firing are expensive, so even though they are streamlining operations now it’s not cheap. Some people are happy that CIG is going to sue The Escapist? Why? Now your money is going to fund a legal operation, it would be far cheaper to hire an external auditor and just put the issue to bed.

Can Star Citizen complete the game promised with the money already brought in or are they banking on constant stream of income?

Feature/Scope Creep

For any developer, game or otherwise, this is nothing new. It shouldn’t be used as a shield for not being able to deliver. Let take, for example, a game is going to cost $1.2 million to make a it’s deliver date is a year out. Your burn rate is $100,000 per month. Now say they have a stretch goal that costs $600,000 more, it’s reasonable to assume that the game will now take a year and a half (assuming a consistent burn & production rate).

This is overly simplistic, but you have 2 options you take more time or increase your production capacity. But if you take more time you limited by your fixed costs, i.e. rent, salaries, etc. So to make the $600,000 exceed 6 months (assuming a $100,000/mo burn rate) you have to decrease that burn rate.

My understanding is that the original game was targeted for November 2014 (almost a year ago), But that would most likely have been for the original scope of the Kickstarter, not all the screech goals. So it’s understandable that the game is taking longer. My opinion is that it’s better to take longer then staff up and try and get it done quicker or on time. Adding more people doesn’t always make things go faster.

Layoffs

Many point to the fact that they are laying people off as a sign that they are running out of money. This isn’t always the case. Can it be a sign of belt tightening, you betcha, but it could also be removing redundant positions and aligning with goals. But there is a major risk here, when a fair amount of your co-workers start getting the axe you faith will be shaken. You will update your resume, start responding to head hunters and maybe take interviews. You may stop giving 100% to your job and you most definitely will be distracted.

It’s always better to not hire then to hire and fire. It’s expensive on both end and if your doing en-masse it a drain on the emotional stability of the people in the company.

Summary

Overall it’s a great time for space sim fans, we have Elite Dangerous, Angles Fall First, No Man’s Sky and Star Citizen. But if Star Citizen implode it make break the already shaky faith in crowed funding of games. So here’s hoping it won’t fail. I’m looking forward to playing Star Citizen with Squadron 42 comes out, in the mean time I’m enjoying Elite Dangerous and buying Angles Fall First on Steam Early access. Oh and playing No Man’s Sky whenever that comes out.

Stay frosty and objective.

Azure Web Apps Source Deployments with Gulp

In my last blog post “Ionic Framework as a Web Site” I detailed some changes I need to make to an Ionic app to utilize it as a web site. Step 2 of that process was trying to land my new Ionic Site somewhere. As Resgrid is a 100% cloud company we put it on Azure. So we created an Azure Web App, pointed it at our source control and then it all broke. The structure of source we use for Ionic or AppBuilder doesn’t lend itself to becoming a website from the folder structure, as is the common use case for source control provider deployments. The solution, Gulp!

azure-app-service-with-office-365-and-yammer-sharepoint-saturday-florence-2015-session-8-638

Azure uses an open source project called Kudu as an engine for executing git/hg deployments, running tasks and even WebJobs. This allows your to take code from a source code repository have Azure pick it up and deliver it to the cloud and run additional operations.

Note that Kudu itself isn’t limited to Gulp, you can run pretty much anything the underlying Azure VM has access to. Creating the script is pretty simple. If you have the Azure CLI tools installed you can run the following command:

azure site deploymentscript

Note there are a number of default switches you can use for example –aspWebSite for your ASP/MVC/WebAPI sites, –node, –php, –python and finally –basic. This command will create 2 files, a .deployment file and a deploy.cmd file. For the Ionic Framework one we used –node as our switch. The .deployment file is pretty simple:

[config]

command = deploy.cmd

This just a configuration file for Azure to tell it what to run. There is a lot you can do with with the .deployment file. The other file created is the deploy.cmd file, below is the one used in Resgrid’s Ionic Framework app deployment. I cut the code above out for brevity, at the end of the Setup section, just above this section of code is the “IF NOT DEFINED KUDU_SYNC_CMD” check.

:: Code above omitted for brevity

IF NOT DEFINED GULP_CMD (
  :: Install gulp
  echo Installing Gulp
  call npm --registry "http://registry.npmjs.org/" install gulp -g --silent
  IF !ERRORLEVEL! NEQ 0 goto error

  :: Locally just running "gulp" would also work
  SET GULP_CMD="%appdata%\npm\gulp.cmd"

)

goto Deployment

:: Utility Functions
:: -----------------

:SelectNodeVersion

IF DEFINED KUDU_SELECT_NODE_VERSION_CMD (
  :: The following are done only on Windows Azure Websites environment
  call %KUDU_SELECT_NODE_VERSION_CMD% "%DEPLOYMENT_SOURCE%" "%DEPLOYMENT_TARGET%" "%DEPLOYMENT_TEMP%"
  IF !ERRORLEVEL! NEQ 0 goto error

  IF EXIST "%DEPLOYMENT_TEMP%\__nodeVersion.tmp" (
    SET /p NODE_EXE=<"%DEPLOYMENT_TEMP%\__nodeVersion.tmp"
    IF !ERRORLEVEL! NEQ 0 goto error
  )
  
  IF EXIST "%DEPLOYMENT_TEMP%\__npmVersion.tmp" (
    SET /p NPM_JS_PATH=<"%DEPLOYMENT_TEMP%\__npmVersion.tmp"
    IF !ERRORLEVEL! NEQ 0 goto error
  )

  IF NOT DEFINED NODE_EXE (
    SET NODE_EXE=node
  )

  SET NPM_CMD="!NODE_EXE!" "!NPM_JS_PATH!"
) ELSE (
  SET NPM_CMD=npm
  SET NODE_EXE=node
)

goto :EOF

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------

:Deployment
echo Handling custom app deployment

::  Select node version
call :SelectNodeVersion

::  Install NPM Packages
IF EXIST "%DEPLOYMENT_SOURCE%\package.json" (
  pushd "%DEPLOYMENT_SOURCE%"
  echo Installing NPM Dependicies.
  call :ExecuteCmd !NPM_CMD! install
  IF !ERRORLEVEL! NEQ 0 goto error
  popd
)

:: Run Gulp to build website from mobile app
IF EXIST "%DEPLOYMENT_SOURCE%\gulpfile.js" (
  pushd "%DEPLOYMENT_SOURCE%"
  echo Running Gulp.
  call :ExecuteCmd !GULP_CMD! web:build
  IF !ERRORLEVEL! NEQ 0 goto error
  popd
)

:: KuduSync
echo Handling Basic Web Site deployment.
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%\web" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
  IF !ERRORLEVEL! NEQ 0 goto error
)

The Utility functions are important. They setup the environment variables for Node and NPM. Note that Azure typically runs a few versions older then the current node version. Additionally some NPM dependencies, like fibers, that require locally complication (and thus Visual Studio or some other compiler) installed won’t work on Azure.

The Deployment section is where the big stuff happens. We first call our SelectNodeVersion utility function to setup Node and NPM then run NPM to install our modules. Again be cautious of what node modules you add, keep it to the bare minimum.

The next step is we run our gulp command against our gulpfile.js and call our task to be run, in this case it’s “web:build”. There is no Azure specific items in our gulpfile, we just copy our web items into a folder “called web at the root of our solution” and for KuduSync (the command that handles copying to the wwwroot) we point it to “%DEPLOYMENT_SOURCE%\web”.

Azure is a great PaaS (Platform as a Service) for your Microsoft and non-Microsoft technologies. Personally I feel that their PaaS capabilities far exceed any other cloud provider out there and when solving problems like the one above, using zero MS Tech, I was easily able to accomplish my goals without ever touching a VM or worrying about configuration.

Resgrid is a SaaS product utilizing Microsoft Azure, providing logistics, management and communication tools to first responder organizations like volunteer fire departments, career fire departments, EMS, search and rescue, CERT, public safety, disaster relief organizations, etc. It was founded in late 2012 by myself and Jason Jarrett (staxmanade).

Go to Top