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!
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.
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).
more details including code for the hardware is coming very very soon...
CommentIt'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:
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 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.
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.
CommentI'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!
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.
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!
CommentI 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.
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.
CommentToday, 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.
CommentHere's some of the things I've accomplished since my last post.
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.
CommentI 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.
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.
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.
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.
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: