Sunday, October 5, 2014

How to get Dell PERC H310 Monitoring on Ubuntu

HWRaid is probably the best set of packages for Ubuntu:


sudo add-apt-repository "deb lucid main"
wget -O - | sudo apt-key add -

apt-get update
apt-get install megactl


Enabling WMI on Windows Azure

To enable WMI on Windows Azure machines:
  • Open the firewall port 135
  • Set WMI to use a static port
Step one:  Set the DCOM config to use a static port....
Basically, run "dcomcnfg" from command prompt. Navigate the tree to My Computer > DCOM Config > Windows Management and Instrumentation, select properties of that folder.
Go to the Endpoints tab
Select Properties button for Connection-oriented TCP/IP
Use static endpoint, set the port.
Step 2:  Configure WMI to use a fixed port
  1. At the command prompt, type winmgmt -standalonehost
  2. Stop the WMI service by typing the command net stop "Windows Management Instrumentation"
  3. Restart the WMI service again in a new service host by typing net start "Windows Management Instrumentation"
  4. Establish a new port number for the WMI service by typing netsh firewall add portopening TCP 24158 WMIFixedPort
Still testing this myself, so not 100% certain it works.

49154 - TCP Port for DCOM when using wmic.

winexe -U Administrator%password // "C:\\AutoHotKeyScripts\\debug.exe"

To get winexe working make sure to open port 445 on Azure.

When I got the error
[winexe/winexe.c:120:on_ctrl_pipe_error()] ERROR: Failed to install service winexesvc - NT code 0x00000424
I did the following:

sc create winexesvc binPath= C:\WINDOWS\WINEXESVC.EXE start= auto DisplayName= winexesvc 
sc description winexesvc "Remote command provider for Zenoss monitoring"

Creating virtual machines with KVM

I was pretty confused when I first started creating virtual machines. Between Xen, VirtualBox, VMWare, LXC, Docker there are a ton of technologies for virtualization.

I decided to go with KVM. A library called libvirt helps a lot in creating virtual machines (aka domains). Libvirt has a tool called virsh which is what we will be using.

virsh uses xml files for the configuration of the domains. To create one easily you can use the virt-install command. The files are stored are in /etc/libvirt/qemu/

virt-install \
  --name moloko \
  --vcpus=1 \
  --disk /var/kvm/moloko,size=32 \
  --ram 1024 \
  --graphics vnc,password=password,listen=,port=5910 \
  --accelerate \
  --cdrom /var/kvm/ubuntu-14.04.1-server-amd64.iso \
  --os-type=linux \
  --noautoconsole \
  --boot cdrom,fd,hd,network,menu=on

To delete the domain:

virsh destroy moloko
virsh undefine moloko

Wednesday, January 15, 2014

How to get mobile data in Cusco, Peru for your phone using Claro

Getting mobile data to work in Cusco was fairly easy. You should make sure you have an unlocked phone that can take a SIM card. I was using a Nexus 4 so it comes unlocked.

Basically you can buy a SIM card at a Claro store. It will cost you 8 soles and will come with no money on it.

There are lots of places that say "Claro" in a big red logo but only some of them are actually official stores that sell the SIM card. When you ask for it they will ask for your passport.

After you get the SIM card you will need to recharge it or put money on it. This is the easiest part because you can then go to any of the shops that say "Claro Recharga". They are like everywhere. The process to put money on a card for a merchant only seems to require a cell phone so almost any merchant can do it.

Now for pricing. It can be found on at You are looking for prepaid internet plans or "Paquetes de Internet". What package you decide to purchase depends on how long you are staying in Peru and how much data you use.

For me I was on T-Mobile back in the US, $50 per 30 days, 500MB worth of 4G internet then drops to 3G. 500MB carried me about the end of the month. I wish it was like 600 or 700MB. Of course that is with only light uploading and streaming.

The thing with Claro is that you have to buy a data pack and it will be good for only a certain amount of time. So the data packs come in 1 hour, 1 day, 3 day, 5 day, 10 day, 15 day, and 30 day amounts. I purchased the 5 day amount at 200MB.

To purchase you first give money to a recharging person. 3 soles is the minimum. I recommend you put 10 soles to buy the 5 day pack. After it is loaded you will get an SMS saying it is successful.

Here are the SMS messages I got. I actually did it 3 times for 5 soles, 5 soles, and the minimum 3 soles.

After your account is loaded then the trick is to SMS the phone number 779 with the text "5d" or "1h" or "3d" depending on what plan you want. This will activate the data pack. It is case sensitive by the way.

After this you should be able to configure your APN settings. These are settings specific to Claro used to access their data network. If you don't have them you can go here

That should be it. The 3G is stupid fast in Cusco. Much faster than in the US.

Thursday, May 23, 2013

3 Reasons Why Startup Marketers Should Know SQL

Startups Live and Die by Data Analysis

How often have you been in a startup and someone comes up and asks for you to pull "a few quick numbers" ?

One of common themes when running any company is the need for data analytics.
  • When do your customers buy?
  • How much do they buy?
  • When do they come back?
If you don't have an easy way to answer these questions you are driving without a map. As we collect more and more data there is a huge need to process and understand that data. Marketing and business development teams need this information to make data driven decisions.

The faster they can get this information the better the startup will be.

Developer Time is a Scarce Commodity

All to often the responsibility of generating and producing these reports falls on a developer. They rae the ones that understand the underlying data model.

The problem is that development time is valuable. Sure there are complex reports that only a developer may be able to put together. However there are a plethora of other common questions that I am sure could easily be answered with a few hours of SQL training:
  • How many users signed up today? Last week? Last month?
  • How many users do we have total?
  • Who are our top purchasers?

Data Empowerment is a "Good Thing"

By teaching non-technical people SQL they will end up asking better and harder questions. A lot of businesses can be analyzed through just their data model. What objects are in the system? How are they stored?

Exposing this knowledge can yield valuable insights into the business.

How to Get Started

From a technical standpoint there is some risk in giving non technical individuals access to run arbitrary SQL queries. A good setup is to replicate to a read only slave and give them read only access to that database.

I still haven't figured out a good tool for storing the SQL queries and sharing them though so if anyone has any suggestions I'd love to hear them.

Saturday, February 23, 2013

Knockout Advanced Tips: Binding Custom Parameters

It is possible in Knockout to bind custom parameters to a call in JavaScript. I believe this is intrinsic to JavaScript. It also kind of reminds me of currying though at the moment I am not entirely sure.
For example, suppose you wanted to call myFunction with some parameters besides event and item (because those are what you get normally by Knockout). I need to do this because I want a callback after the click event. So here is my function:

var myFunction = function(callback, data, event) {

   //value of "this" would be $data

Here is how I would do the call:

click: myFunction.bind($data, myCallbackFunction);
The first argument to "bind" is the context (value of "this") that you want the function to execute with. Any arguments after that will be passed to the function prior to the actual arguments.

Data and event are always passed after any extra arguments that you provided to "bind".

Saturday, December 29, 2012

Architecting KnockoutJS Applications

One of my favorite front end javascript libraries is KnockoutJS.

KnockoutJS is a javascript library that helps you bind javascript variables to DOM data. When you change the javascript variable the HTML automatically changes to the new value of the variable.

The magic behind how this happens isn't particularly important. If you really want to know you can read the source. The basic pattern is commonly referred to as event pooling.

Some of the best parts:

 - You should use knockout if you have a bunch of $(element).click(function()) functions and want to clean it up. If your frontend code is even a bit complicated you probably know what I am talking about.
 - It is easy to integrate with an existing project. AngularJS is probably best off when you are starting from scratch. Knockout is great because you can optionally use it when you have a really complicated frontend.
 - Really quick to learn. I found knockout super easy to pick up. The thing you have to get over is your elements looking like:

<span data-bind="text: airplane"></span>

It irked me a bit to see a data-bind attribute when it isn't really HTML. Yes you are mixing presentation logic with code. Honestly though I've seen learned that it is pretty pragmatic. Lots of HTML editors play nice with knockout and people who only know HTML and CSS can pick it up quickly.

Some of the parts I don't particular like about Knockout:

 - Lack of a good PJAX/history.js style navigation. You get this with AngularJS.
 - Getting your view models to be semi reusable is a pain in the butt. I used a combination of server side script includes and knockout statements.

When first getting started you may wonder how should you architect your application so it is somewhat less like spaghetti. A good way to organize your Knockout code is first think of all the objects in your application. If you are using Rails (or in my case Django) you will have a bunch of models.

For each of these models it is nice to have some sort of front end analogue in Javascript.

Here is an example of an object:

function Airplane(viewModel, data) {
  var self = this;
  ko.mapping.fromJS(data, {}, self);

  self.visible = ko.observable(true);
  self.selected = ko.observable(false); = function(item, event) {
      url: "/api/airplane/" + + "/land",
      type: 'POST',
      success: function() {
        // Update myself with the fresh data from the server
        ko.mapping.fromJS(data, self);
      error: function(jqXHR, textStatus, errorThrown) {

I usually like to stick this in some namespace that is available globally. A few comments about this object. I take in the viewModel which created it so I have access to the parent (this is useful later). I also take in this variable called data which is used for an awesome knockoutjs plugin called ko.mapping. It basically iterates through your javascript object and creates ko.obserables() out of all of attributes. Super useful and you want to use this. I didn't use it before and I had to do self.variable = ko.observable(data.variable) over and over. Yeah not a good idea.

Another awesome thing about the plugin is when your AJAX REST API call returns you can update the object in one line by doing ko.mapping.fromJS(data, self).

Hope you give knockout a try. If you have any questions I've noticed the knockout community is awesome. I am also available so just drop me a note.