Showing posts tagged with project

in project, Statusy, status page, hosted status page

After starting Bitkumo I quickly came to the realization that hosted status pages were far too expensive for what they were. The main players right now want upwards of $30-40 per month for what is mostly a static website. This is far too much for a company that is just getting started - in the early stages $30-40 could be difference between profit and loss.

Upon realizing there was a major gap in the hosted status page market, Lev Lazinksiy, Ricardo Feliciano and I started working on a product to fill that gap, Statusy.

We started working on Statusy in mid-January earlier this year, and I am very pleased to announce that Statusy is open to the world in an early release state.

Statusy homepage

Our mission with Statusy was twofold:

  1. Make an excellent hosted status page that truly met all the needs of our potential customers
  2. Make it affordable enough for even early stage startups to afford

I am please to say we have succeeded on both fronts.

Statusy offers almost all of the features of other providers including:

  • Customization - Logos, CSS, domains
  • Social integration - Twitter for now, but more to come
  • Redundancy - All of our infrastructure is fully redundant, your status page will be there when you need it most
  • Teams - No need to share one login, we offer team accounts so any member of your team can update your status page
  • Extensible - We have launched with a robust RESTful API so you don't even need to log in to report things

We have managed to offer all of this for just $10.00 per month, this is nearly 66% off the price of other providers.

Sample Statusy status page

That being said - it would be excellent if you were to give Statusy a try.

We consider Statusy to be in an early release state so we are primarily looking for feedback. If you give Statusy a try and have any feedback please feel free to add it via the in-app feedback button in the bottom-right corner, or via email to hello@statusy.co.

Thanks for reading!

in project, spacepanel

SpacePanel started as a learning experience primarily - I wanted to learn the in's and out's of virtualization using libvirt. Given the nature of the project, that basic goal was quickly met. However, during the early stages of development SpacePanel received a fair amount of attention from colleagues and general folks across the internet, this inspired me to continue developing SpacePanel. I've never had one of my projects receive any significant amount of attention so I was honestly surprised when SpacePanel was received this way.

Eventually SpacePanel grew to the point I needed help. Lev Lazinskiy, my good friend and former colleague at Linode joined the team to help move development further. The project continued to grow and we eventually reached a point where we simply needed more resources to make SpacePanel bigger, better and hopefully a success. We started an Indiegogo campaign shortly after. Unfortunately, despite lots of hits and encouraging comments we fell significantly short of our fundraising goal. This put Lev and myself in an uncomfortable situation of not knowing what to do next.

Shortly after this we were contacted by the founders of Virtkick. After a bit of discussion with the founders it was decided that instead of trying to go at it alone (and with extremely limited resources) with SpacePanel, I would join their efforts and work on Virtkick exclusively. This started on a trial basis, but recently it was decided that I would continue doing this on a full time basis.

With this being said, it is with a heavy heart that I am officially ending the development of SpacePanel. If you are interested in a control panel like SpacePanel I would highly recommend taking a look at Virtkick. Virtkick is exactly what I eventually wanted SpacePanel to be and I am confident you will enjoy using it.

To those who generously donated to the SpacePanel project, free free to reach out to me at social@spacepanel.io if you would like to reclaim your donation.

In closing, I'd like to run through a few numbers (I like numbers and statistics) concerning SpacePanel:

  • 111 total stars on Github
  • 221 commits spanning a 5 month timeline
  • 58 issues total
  • 30 closed issues
  • 3 milestones met, 1 pending
  • 11 pull requests
  • 2 non-author contributors - KeiroD and deanperry
  • 2 authors
  • ~30 downloads
  • ~70,000 lines of code
  • Countless hours of development time

It's been a fun ride - thank you for those who have helped along the way.

in arduino, project, zigbee, smartthings, electronics

Since I purchased my SmartThings hub a few months ago I've been all about adding new sensors, lights and other smart things to my apartment.

Most recently I have been experimenting with the GE Link Light Bulbs. Overall I love them, but the one thing I (and my fiancée) have found a bit annoying is having to use a smartphone to control them. For the most part, this isn't necessary as I have a number of rules to automatically turn on the lights when need be, but there is always the odd situation where I want to turn the lights on/off manually.

Thinking of a better way to turn on these lights the old fashioned way (without having to install Zigbee light switches, we rent) turned me on to this latest electronics project.

SmartThings has a pretty robust API and I've tinkered around with controlling the lights from a web browser. The process basically involves a simple GET request to a predefined URL with a token, the ID of the switch I want to manipulate and what I want to do.

This lead me to develop physical buttons that hook into an Arduino to send the GET request when I press a button:

SmartThings Button

The circuit its self is pretty simple, each button is wired into a 150 Ohm resistor to ground, the 5V rail, and a separate line to the Arduino inputs. The Arduino has an ethernet shield to communicate with the greater internet.

SmartThings Button 2

Each button controls a different light (I have three bulbs total currently), the red and green switches will eventually be used to turn all the lights on or off but this hasn't been implemented yet.

Code-wise I've made use of the Arduino ethernet library to handle all of the networking and the HTTP request directly:

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>
#include <SPI.h>

int BUTTON_DESK_LOWER= 7;
int BUTTON_DESK_UPPER = 8;
int BUTTON_SLIDING = 9;

char server[] = "graph.api.smartthings.com";

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress ip(192,168,0,174);

EthernetClient client;

void setup()
{
  Serial.begin(9600);
   while (!Serial) {
    ;
  }
  
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
 
  delay(1000);
  
  pinMode(BUTTON_DESK_LOWER,INPUT);
  pinMode(BUTTON_DESK_UPPER,INPUT);
  pinMode(BUTTON_SLIDING,INPUT);
}

void loop()
{
  if(digitalRead(BUTTON_DESK_LOWER) == HIGH)
  {
    if (client.connect(server, 80)) 
    {
      Serial.println("connected");
      client.println("GET /api/smartapps/installations/REPLACE HTTP/1.1");
      client.println("Host: graph.api.smartthings.com");
      client.println("User-Agent: Mozilla/5.0");
      client.println("Connection: close");
      client.println();
      
      delay(5000);
 
      client.stop();
     } 
    else 
    {
      Serial.println("connection failed");
    }
  }
  if(digitalRead(BUTTON_DESK_UPPER) == HIGH)
  {
    if (client.connect(server, 80)) 
    {
      Serial.println("connected");
      client.println("GET /api/smartapps/installations/REPLACE HTTP/1.1");
      client.println("Host: graph.api.smartthings.com");
      client.println("User-Agent: Mozilla/5.0");
      client.println("Connection: close");
      client.println();
      
      delay(5000);
 
      client.stop();
     } 
    else 
    {
      Serial.println("connection failed");
    }
  }
  if(digitalRead(BUTTON_SLIDING) == HIGH)
  {
    if (client.connect(server, 80)) 
    {
      Serial.println("connected");
      client.println("GET /api/smartapps/installations/REPLACE HTTP/1.1");
      client.println("Host: graph.api.smartthings.com");
      client.println("User-Agent: Mozilla/5.0");
      client.println("Connection: close");
      client.println();
      
      delay(5000);
 
      client.stop();
     } 
    else 
    {
      Serial.println("connection failed");
    }
  }
}

It is still a bit (see: extremely) rough around the edges but it works! I'm still working on making it look a bit better and finding a way to mount it in some sort of useful position.

If you are interested in reusing the code you are welcome to - just replace the REPLACE strings with the token, switch ID and action with your own and change the button inputs to the inputs you have chosen. The MAC address I used was the default one from the example code (my shield did not have a MAC on it) so you'll probably want to change that and the IP assignment depending on your environment. You can find the repository on Github.

in project, space, control panel, virtualization, update, spacepanel

I've been pleasantly surprised with the amount of positive response I received after introducing Space in a previous post, so much so that it really inspired me to keep working on the project.

Over the past week, I've been living and breathing Space, and I am very happy to say I have made a great deal of progress.

New Space Dashboard

I'd like to take a moment to go over some of the biggest changes:

  • The UI - The old UI was just plain on Bootstrap and it looked pretty bad in my opinion. I decided to revamp this and make this project look like something out of 2015. The image above is the dashboard, below is the new server list:

New Server List

  • With that, I'm certain you've spotted the next major feature - DigitalOcean and Linode support. You can now add in your API key for either service provider and create Droplets and or Linodes right from Space.

  • Lastly, the installation scripts have been improved (in that they actually work now). There are some issues here and there, but they can resolved fairly easily. In addition, I rewrote the README to include more useful information about problems you may have while installing and using Space.

I'd also like to note I've made a website for this project over at https://spacepanel.io. In the future I would like to move announcements to the Space website directly, but for the time being I'll continue making them here.

As always, if you have any trouble with Space, or if you have questions, comments or concerns please don't hesitate to reach out to me. Thanks for reading!

in project, new years, goals, 2015

I'm a firm believer in always moving forward. Every day I strive to learn something new, improve an existing skill, or otherwise advance myself in some fashion. That being said, I really enjoy New Year's as it marks the end of another year of work and another year of advancement!

This year I've made some pretty big strides forward in a number of areas, I'd like to highlight a few of my favorite areas here:

  • Linux - When this year started I was still fresh in the face at Linode. I knew a little about a few things, but there is no way I could be described as anything but a beginner. This doesn't go to say I'm anything but that now, but I've learned a lot this year and I feel like I'm good enough to handle most problems and situations.
  • Sysadmin foo - This kind of goes in line with the previous bullet point, but I think its worth splitting out into its own point. Not only did I learn quite a bit about general Linux things (general use, troubleshooting, design, etc.), but I also learned quite a bit about managing systems, both for myself, and others.
  • Python/Flask - I started the year writing most of my web applications in PHP and I thought this was fine and dandy. I saw no reason why I should write in any other language. I'm fortunate that I was shown the light (in my opinion) and encouraged to try something else. In doing this, not only did I learn a very popular programming language (Python), a very popular web framework (Flask), but I also substantially improved my development process overall. With that being said, I'm still a terrible dev, but I'm less terrible than I was last year, so that is a victory in my book!
  • Career Advancement - Always forward, always upward. I had several great opportunities to learn many things throughout the year, both at Linode, and now at DigitalOcean. I'm very grateful for these opportunities and I hope to continue learning more in 2015.

So now for 2015! I always have a laundry list of goals, so I'll touch on some of the more important ones for the coming year:

  • Obtain RHCSA certification - I'm usually kind of meh on certs, but I think this might help me round out some areas I'm not well versed in currently.
  • Complete Master's Program - I'm about halfway through my Master's in IT Management, I'd like to make one final push and finish this up in the coming year.
  • Virtualization - It's kind of funny to think about it given my employment history, but truth be told, I'm not extremely familiar with virtualization as a whole. I know the basics, but there is a ton I don't know, this needs to change!
  • Ruby - I've recently tried to make it a point to become familiar with a new programming language each year - this year I'd like to learn some Ruby. If, by some miracle I become a Ruby expert before year's end, I intend to take a second look at C.
  • Projects - With several big life changes recently (primarily employment related) I've stopped working on some of my favorite projects, this needs to change!
  • Move - I've lived in South Jersey all my life, from what I've observed, the most successful people seem to leave the area and return later in life. I intend to explore the possibility of moving to the midwest to be closer to my fiancée's family.

Welp, thats it. Happy New Year's everybody, I hope your 2014 has been joy-filled and productive and I hope that 2015 is the same!