Recent Blog Posts

Site Updates and The Boxes, Round Two

Posted on 2017-12-03 03:37:00

This post will serve two purposes: it will discuss the various updates I made to my site, and it will go deeper in to the "boxes" I made for my wedding. With that, let's dive in!

Site Updates

Since my last post, I've changed some behaviors on my blog posts - moving forward, all images and files will be lazy loaded after the site renders. Additionally, I'm now properly returning the correct sized image based on your browser's actual width. This will help save on data costs for those who are on mobile (or Comcast with a data cap...), and will boost the overall site performance. In other words, this page went from around 20 megs to approximately 2 megs on a mobile device and 5 megs on a desktop. The code behind it is currently post specific; however, I'll eventually implement it site wide once I finish converting the images.

I've also taken the time to fix the various CSS bugs that would prevent the menu from loading correctly on a mobile device, and improved the overall site flow. The site now properly scales to all screen sizes and will always show the correct content on the blog and the home pages.

The boxes

This section is arguably more interesting in my opinion! Feel free to look at the carousel below (all images are loaded on demand, so they may take a moment between slides!). The boxes were a ton of fun and helped me refine basic electronic skills such as soldering!

Please note this post is still being updated with the correct images and info as of 9:54 PM (12-4).

1) This was my initial attempt at making boxes. Originally, I wanted to 3D print all of the boxes; however, this ended up not working out because the time to print a box was around 58 hours. Additionally, the boxes I designed were far too small to fit the Happ Arcade buttons, the Arduino Nano and the NRF24L01 chips.

2) Which brings us to this - a pine box from Michael's. If you look closely at the holes, you'll see that some of the holes have some chipping due to the softness of the wood. There was little we could do to prevent this; however, we figured we'd cover it with the paper mache.

3) Here's one of the boxes after it was paper-mached. Notice how the holes are barely visible at the bottom of the box.

4) In our test box, you can see that the mache painted black makes the box look like a worn book - the exact thing we were shooting for! I've inserted the buttons to the box and the chips are impossible to see. Thankfully, the happ buttons have a larger overlay as well, so they worked great!

5) At this point, I had to wire the internal electronics. The next slide contains a schematic of the overall system - and this image shows what the system looked like before it was placed in the box.

6) This is not the schematic - I have to grab a picture of it and upload it. For now, just pretend you see the schematic!

7) Here's Jalysa adding a border to the box - carefully gluing the trim on to the box to create a book feeling when the boxes were handled. She decided to do this before the mache, this way she could paint on top of the border later on.

8) The entire system needed a server to connect to, so I decided to solder the chips to a prototyping board. Technically, I could have used the same design from the earlier slide (or a box for that matter), but I decided to make a compact chip so I had a failsafe as well.

9) Here's the end result and what the boxes looked like while they were charging!

10) That's all the slides! Feel free to click next or back, or continue reading below.

more details including code for the hardware is coming very very soon...

Comment

Wedding Post - Post One

Posted on 2017-11-15 18:56:08

It's time to update my blog again. This time, I wanted to write about my wedding, or at least, the tech in the wedding! Many of you know that Jalysa and I have been consumed by our wedding the last few months - I have to admit - I never want to have another wedding. It wasn't bad, it was just stressful. I'm glad our friends and family had an excellent time, and I loved building out the tech for our wedding, but the overall stress was too high. The good news is that we're back to normal now!

I wanted to use this post to do three things:

  • Give a shoutout to Chris Moxley and John at Southeastern Events and Sound. You guys really know how to make a party go from good to great. Thank you for working with us and keeping our wedding awesome.
  • Thank everyone for coming to our wedding! I know some of my friends and family read my development blog for fun, so thank you all for coming :)
  • Talk about the tech at my wedding.

The Boxes

Many of you have heard about "the boxes" if we've talked in the last 6 months. For those who haven't heard or seen them, here they are:

But what are the boxes? Excellent question. They are custom wired boxes with Arduino Nano Chips soldered to a NRF24L01 chip, battery, battery charger, power switch, and four happ arcade buttons. Inside the box, the chip was programmed to send the pressed button to the master node and provide feedback about quiz questions I was asking our guests. While I'll give a more detailed explanation in a future post, this post is to share the tech temporarily. To give an idea as to what that looked like, here's a picture:

Given our Halloween Themed wedding, we wanted people to be able to use spell books to cast their answers (spells) for our quiz. There was a small prize given to the winning table (custom fidget spinners), but I can't even begin to describe how much fun I had doing this. In the picture above, the question was "How many blankets do we have on our bed at all times?" The correct answer was 3, and you can see that Witch got it correct whereas Ghost got it wrong. I wrote my own custom library to take the responses, tally the scores, and display the questions. I also did the design with the help of my wife (so yes, we intentionally picked comic sans... We wanted a fun and casual font that is still professional :troll_face:). I will make the source code public for the quiz, the hardware, and the interaction with the hardware public at some point in the near future.

In the picture above, you'll also notice some other things in the background - a white umbrella, a monitor, a computer, and a backdrop. This brings me to a wonderful segue of the next tech I built at my wedding.

The Photobooth

The intent was to have a photobooth at our wedding where guests could come up and take pictures of them doing silly things. I also gave the ability to record a three second gif of them doing really silly things. This post is going to stick to the "what" - I'll write another around how I built the photobooth (along with snags, gotcha's and accomplishments along the way).

Keeping along the theme of having an interactive wedding, Jalysa and I added some unique touches to the photobooth. Guests were able to put their faces in holes of our photos (see below), or interact with animations / text / stickers on the screen. The entire experience was done in the web browser and processed on the backend via a custom web server that spun up ffmpeg instances. With that, it's easier to show you how this turned out, so see the photos below:

While the picture above was taken using a cell phone, you can see a few cool things - the first is my wife and her friends right before they start taking a gif (the gif is below). The second is the logitech webcam in the right on a tripod. This was the camera that we used to get the shots and do the feedback. You can also see the monitor that was facing the photobooth, and how people are using it to line up in the shots. From the side, it's pretty neat; however, it was way more useful in practice: You can see it here (18 megs)

Some of our friends really loved this. In fact, here's a fun one of our friend Brett being a bear with Jalysa in Alaska.

As you can guess, this is one of the many shots we got from our wedding - nearly 500 to be exact. I'm in the process of converting my site to a full golang implementation, so I'm holding off on uploading all the images until that's complete.

The wrap up.

Over the next few weeks, I'll continue to write about the tech in our wedding and how I built various things to do this. I'll open source my code and share with all to use in the future. Thanks for reading this post! Feel free to subscribe to my site by clicking Login and Sign Up. This will help me create a mailing list for future posts.

Comment

It's been over a year, but it's coming soon

Posted on 2017-11-10 01:33:00

I'll be honest, I've been slack on my blog. The last time I posted was in Feb of 2016. Some people have emailed me asking if I'm okay, others have asked if I need help. To help clear up the confusion before I get in to too much detail - I'm great, and things couldn't be better!

So, what have I been up to?

That's a very fun question. Over the last 20 months, I've accomplished quite a few life goals. To make this easier, I'll list them in some LI's.

  • I moved to Atlanta. It's been about a year at the time of this post, but I did pack up and move out here from Austin in November last year.
  • I left GM and joined GE. Couldn't have been at a better time (or worse, depending on our shareholders meeting on Monday!). I'm very thankful I had the opportunity to learn about the deployment side of things at GE. In fact, I've was able to transition my local database to the cloud this weekend given my new knowledge. This means my energy usage is live again, and the data loads significantly quicker. Hooray!
  • I got married. Words can't begin to describe how happy I am that this finally happened. Like blizzard said about starcraft 2, "Hell, it's about time."
  • I built these really cool boxes at my wedding. More info coming on these soon, but effectively, the boxes allowed everyone to vote on questions about Jalysa and I. The boxes were hand made, and built using Arduino Nanos, nRF24L01 chips, Arcade Buttons, Batteries, and some other really cool paper mache work that Jalysa did.
  • I built out this super awesome quiz that was the back bone for the boxes. More on that too. (These really require their own posts......)
  • Jalysa and I moved in to our new Apartment in Midtown. It's been months of setting everything up, but we're finally at a place where most of our home is automated with IoT magic and really cool stuff.
  • I beat Breath of the Wild, Rachet and Clank, and South Park: The Fractured But Whole. (Amazing games!)
  • I have rewritten my portfolio in Golang and will be publishing it in the next few days. There's actually quite a few good reasons for this - the current portfolio is way too bulky. I originally wrote my portfolio in PHP. Last year, I transitioned it to Python. When I did that, let's just say I was a bit lazy and ended up exposing some PHP pages as static pages in the Python static path. (Yes, I know... but they were mainly around the blog so). As you can imagine, my laziness of implementing a Python blogging solution ended up having a domino effect on my posts... This means that my blog posts are mainly SQL queries that I'm writing raw. (Again, I know. But when you see me in person, I'll take it in stride). Aside from that, PHP and Python are both really slow when it comes to doing advanced math on hundreds of thousands of data points (used in my /projects). The hacked solution is that I do the math in your browser for some, the rest is done on the back end. In GO, I'm able to do the math in around 15 microseconds - down from 6.8 seconds in PHP and 1.2 in Python. In any case, I'll be deploying my new go project soon.
  • Speaking of deploying, my new site is entirely built using a Dockerfile. Isn't that awesome? Additionally, the new site is much more secure and sand boxed compared to the web2py installation I'm currently running. Oh, and code blocks! My new site will have much more robust code blocks that allow the download of actual projects.

As you can see in the post, I've been busy. Very busy. In any case, I did want to provide a quick update in case anyone still checks my site. I'm going to go pass out now, but I should have my new site up and running this weekend. Good night everyone!

Comment

Startup Atlanta & Site Updates

Posted on 2016-02-12 03:30:29

I visited the Startup Atlanta Tech Square event tonight. It was pretty awesome meeting a lot of the local Atlanta startups, and I'm especially grateful I met with the founders of Cloudigy and Cinchapie. (to those I didn't meet, let's meet next time!) I was very surprised to see the turnout at the Atlanta startup crawl, and I'm happy to see how it's fast it's growing. There's a lot more I'd like to write about the startup crawl; however, I'm a bit exhausted from a day of travel, networking, and programming.

Oh, speaking of programming - you may notice that I've added some applications to the "projects" page above. As I was flying to Atlanta, I converted my old PHP controller into a new Python controller, and I've added the javascript to support the charts. I've got some cleanup to do, but you can now officially see my home energy usage for Austin. In general, if you see a 2KW surge, that's usually my AC. The 5KW surge is my dryer. The time is a bit off due to my server using UTC and the timezone you may be in, but it's still fun to look at.

A few notes about the energy data.

  • It's completely live and accurate within 0.5 watts.
  • The charts were written using D3
  • There's more data controllers I've added, but I haven't enabled the JS yet
  • I plan to add filtering to the charts to cut down the size of the data set
  • I plan to lazy load the charts so that they don't kill the user experience

For my next update, I plan on adding email alerts for blog posts (optional), a chrome notification feature for my posts, and a link to download various code snippets from my site. The last portion is already halfway working, but I want to be able to post my projects and snippets together.

Comment

Energy Data!

Posted on 2016-02-10 01:57:54

Today, I've added a bunch of new features and updates to my site. I've successfully converted my old PHP service which queried my database for the current energy usage to the new python script below. Currently, I'm using a backend curl script because my SQL server isn't hosted locally. I do plan on updating this at a later date, but for now, the snippet below works well! You can also see the code live at: http://ajkelly.net/energy

def energy():
    import urllib2
    url = "http://microsoftguild.com/getEnergyData.php"
    data = "data=currentEnergy"
    req = urllib2.Request(url, data)
    f = urllib2.urlopen(req)
    str1 = f.read()
    return str1

In addition to my awesome code printer (as you can see above), I've also added IP tracking for comments, Google Analytics, and all of my old chart data. (if you remember my old site with a bunch of charts, this is what I mean by chart data). While I haven't activated the charts quiet yet, I'll be posting them in my "Projects" section when I do.

In a few days, I plan to go to a startup convention within Atlanta! I'm very excited to meet the local startups in the area.

Comment

Victory!

Posted on 2016-02-09 09:09:51

Here's some of the things I've accomplished since my last post.

  • Got Apache SSL Certificates installed (no more MITM Warnings!)
  • Updated my Web2Py installation to be a single app (was four apps at once)
  • Fixed some styling issues throughout the site. EX: Comments are now working
  • Removed the Server Project (Will write about it later)
  • Updated my portfolio text
  • Modified my blog templates

Don't get me wrong... There's still a TON to do. In fact, I still need to add my code editor, home data, tagging / date system, and responsive design. Despite my list, I'm still at least happy enough for this site to be presented while I get it fully up and running.

Comment

Hello World

Posted on 2016-02-08 23:13:52

Welcome!

I finally broke down and decided to start a blog. I do spend a lot of time hacking, coding, and doing computer science-y things, yet I don't really talk about it nearly as much as I want to. In any case, I'd like to start this blog with my very first post, called "Hello World". In this first post, I'm going to discuss the technologies I'm using to power my site: ajkelly.net.

Server

I'm currently running an Azure VM with Ubuntu - I decided to go with Ubuntu over Windows Server due to cost. In the past, I was using hostgator.com as my main web host; however, I found it was difficult to have an all-in-one server given the hosting packages they offered. I was also slightly bothered that I didn't have full control over my site, and I found standing up services to be difficult.

Technology

Before the migration, my site was entirely PHP based. While PHP is great, I decided I wanted to transition my site to be python based (mainly to keep up with new technologies, also because I needed a project!) In any case, I decided to use a Python framework called Web2Py. I picked Web2Py over Django because it was faster (for me) to get up and running. I was able to get this site up and running in under three hours, and that includes the ramp-up time on Python. Also, I want to note that Web2Py made MVC feel very natural and straightforward - I think my feeling is due to my background with C# and Razor.

Setting Everything Up

While it took me about three hours to transition my site, the overall project took around ten hours total. When I first started setting everything up, I ran into numerous server errors including Apache configuration mismatches, disk failure, and incorrect DNS deployments. Also, PyCharm didn't want to play nicely with my server and ended up writing over everything I had stored locally. (Thankfully, I use GIT) My server is a LAMP(ython) stack and has Web2Py installed as well. I'm using a SQL server for my blog posts, projects, and data for future scalability reasons.

Closing thoughts

I like Web2Py, Python, and the MVC pattern I'm currently running. It's extremely straightforward and easy to understand. Over the next few days, I plan on taking on the following tasks:

  • Set up a proper DAL
  • Install my SSL Certs
  • Add a Markup Blog Editor
  • Add a live blog view (while drafting)
  • Add tags, dates, and a few other site fixes

Comment