Showing posts tagged with project

in project, docuie, documentation

social_media_blue_bg

Over the past 6 or so months I have been working on a new project. It started as a way to dive into Elixir and the Phoenix framework but ended up being (in my opinion) a fully fledged product.

The idea was to provide a hosted documentation service that was simple, affordable and easy to use. During my work on Statusy, I spent a great deal of time trying to find a decent product that 1) didn't cost a ton of money (a lot of options were easily $50+ a month for essentially a static site), 2) didn't require a ton of setup and 3) was mostly hands off. I couldn't find such a product, so I began working on Docuie.

Docuie allows you to create documentation projects as well as pages and headings to create a hierarchy for your users. It has a WYSIWYG editor, supporting both point-and-click style writing and full HTML editing if you wish to take that route. Docuie supports free docuie.com domains in addition to custom domains on the higher packages. Pricing is based around the features and number of seats you need, the cheapest plan starts at just $10 per month and gives you a fully featured product.

In addition, one thing we did with Statusy that I really enjoyed was offering free service to open source projects, so I will be continuing this with Docuie. If you run an open source project (or a charity of some sort) please reach out to me if you are interested in getting set up on Docuie.

You can view an example of the product through Docuie's own documentation site here: https://docs.docuie.com

Thanks for reading, I hope you will give it a shot if you are in the market for a documentation service.

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!