Trolling friends on GroupMe

I’ve been doing a lot more development work in my free time and I am always looking for an excuse for a new project. I have a couple of group chat threads on GroupMe and I noticed they have an API where you can create bots. As I always enjoy trolling my friends, I put together a super basic app to respond to certain phrases and threw it on Heroku. I wasn’t quite entertained enough, though, so a couple evenings of coding later I had taken it a few steps further and stood up

It’s still pretty basic as far as chat bots go, but this lets everyone who is a member of a group modify the bot’s behavior. Any group member can add keyword triggers but other group members can’t see what they’ve added until the trigger fires to maximize trolling potential. I also built it out so that once a trigger is fired it gets deleted so it doesn’t just continue spamming users.

There’s also custom commands, although I have only written one so far. I built these custom commands out in a way that should hopefully make it easy to add functionality down the road should I ever get around to that. The only one available today is titled reddit_image which will go out and grab a random image from the subreddit of your choosing. For example, I could create a custom command of the type ‘reddit_image’ and name it ‘puppy’ while passing it the r/puppies subreddit. If a chat user than says “[BotName] puppy” the bot would go out and grab a random image of a puppy.

Not sure how much I will continue playing with this as I have a few other projects I am working on, but the repo is here for the curious.

Homelab – 2019 Edition

I made some fairly significant upgrades to my home lab a few months back and an update is overdue. Without wasting any time, here is the 2019 edition in all its glory:

My previous setup did what I needed it to but the storage situation was a mess. Lots of standalone drives with no real redundancy. I initially looked into a few options for addressing this including buying a NAS and building a NAS. Then I stumbled on Unraid. I was vaguely familar with Unraid but I never gave it a real look until recently. Unraid is super flexible with storage options, has a built in hypervisor, and makes standing up containers super easy. Ultimately the relatively low cost of used hardware and the flexibility of Unraid was the best combo for my needs. My plan was to build out a new server, shuck all the external drives, and migrate everything off of my ESX host (all VMs) to the new Unraid box.

After stalking eBay for awhile, I ended up with the following:

  • 2x Xeon 2650 v2 (16 physical cores)
  • 64 GB ECC DDR3 RAM
  • GeForce GTX 1060 6GB SSC
  • 46 TB spinning, 1 TB SSD (already owned the storage)
  • Fractal Design Define R5 case

The migration itself wasn’t trivial and it made me question why I created so much work for myself outside of work. I managed to get everything completely migrated to new containers/VMs on the Unraid server, with the majority of that going to containers. This also included migrating the physical Windows server that was running on the TS140. That newly freed up TS140 was repurposed into my development server. I am currently running Proxmox and a handful of VMs on there. I had a UPS die in the middle of all this (found out during a power outage, as seems typical) but luckily with the reduced power draw compared to the old i7 I can handle running everything off of one UPS.

You may have noticed I threw a pretty nice graphics card into a server. One of my favorite things to come out of this is the capability to do remote gaming. I have the GPU passed through to a VM on my Unraid server and I use NVIDIA GameStream and Moonlight to game on my Thinkpad. It has been pretty much flawless to this point. I am not a huge gamer and the GPU helps with some other interests (editing and such) but it has given me the ability to play modern games on high settings without a dedicated gaming computer.

No changes on the networking side of things other than that I now run all my home DNS through Pi-hole.

Documenting My Home Network/Lab

I’m a big believer in learning by doing. Over the last couple years I’ve built up a nice little home network/lab where I host various applications and test new tech. I will hardly be the first person to make this recommendation, but if you are able to get your hands on some hardware to set up a home lab I would highly recommend it. Any old computer you can turn into an ESXi host is enough to get started. I have learned an enormous amount about various technologies that I wouldn’t have had much opportunity to learn elsewhere. First, the obligatory picture:

The breakdown:

  • Ubiquiti Edgerouter X
  • Ubiquiti UniFi AP AC LR (not pictured as it’s located in a location central to the house)
  • ARRIS SURFboard DOCSIS 3.0 Cable Modem (SB6183)
  • Cisco SG300-28
  • Cisco SF302-08MPP
  • TRENDnet 24-Port Cat6 Patch Panel (22 runs in the house, minimum for 2 per room)
  • Startech 12U 19-Inch Desktop Open Frame 2 Post Rack
  • Raspberry Pi 3 Model B
  • Lenovo TS140
    • Xeon E3-1226 v3 3.3Ghz
    • 16 GB Ram
    • 44 TB (raw) of various spinning storage, mostly WD reds (yeah, yeah, I know. I’ll get a NAS eventually)
  • Old computer serving as my ESXi host
    • Intel Core i7-2600K Sandy Bridge Quad-Core 3.4GHz
    • 16 GB RAM
    • Samsung 840 EVO 250GB SSD
    • 5 TB (raw) of WD Reds
  • 2x CyberPower CP1500AVRLCD UPS
    • One is for my “core” equipment (network stuff/TS140), the other is on the ESXi host

I am a huge fan of the Ubiquiti hardware. This combo was one of the first purchases and its pretty fantastic to not have to regularly “reset the router” like seems to be necessary for just about every consumer router/AP. I picked up both switches off of eBay and have been pleased with them. Some Cisco purists dislike the small business line but they’ve been great for my purposes. The SG300-28 (gigabit) is my main switch and the SF302-08MPP (fast ethernet, POE) runs my cameras. I didn’t need to have separate switches, but based on what was available on eBay this was perfect for my goals. If we’re being honest, need went out the window a long time ago anyway. I run a handful of VLANs and 2 separate physical LANs to segment off the different portions of my network. Necessary? Probably not, but where’s the fun in that? This has allowed me to tinker with VLANing and setting up firewall rules. Fun stuff!

The TS140 runs AD, DNS, Blue Iris (cameras), and acts as a file server. My storage situation could certainly be improved, but all important data is backed up locally and remotely and any data that I consider to be less important is at least mirrored to separate local storage. My Raspberry Pi runs PiVPN which is a super simple way to run OpenVPN and is much more manageable than my previous setup where I ran it on my router. The ESXi host runs the following VMs and applications:

  • Plex and related apps
  • Borg Backup
  • Crashplan
  • Nextcloud
  • Kali box for security tinkering
  • Windows VM for when I need to run Windows specific apps
  • LibreNMS
  • Whatever I feel like playing with at the moment

Each of my Linux boxes are running Ubuntu 16.04. All VMs are regularly backed up using ghettoVCB.

That’s pretty much it for now. I will update when I inevitably add more!

SQL Saturday #357 Recap

In January I posted about a couple of upcoming speaking engagements and after some nagging for a follow up from @JayDue216, here it is. First up was the Ohio North SQL Server User Group’s January meeting. This wasn’t my first time speaking in a professional setting but it was by far the audience with the most SQL Server experience I have been in front of. All in all, I thought it went alright. I didn’t feel too great about it immediately afterward but I received some good feedback from those in attendance which is always great to hear. Nerves got to me a bit and I caught myself tripping over my own words at a few points. I had a great deal of confidence in the content I developed and I can’t express enough how valuable that is when your delivery isn’t going as smoothly as planned. Having that confidence allows you to slow yourself down, gather yourself, move to the next slide, and keep powering through the session. At the end of the day it felt good to get the first one out of the way and identify areas for improvement.

After getting my feet wet next up was SQL Saturday #357 in Cleveland. I was initially scheduled to speak early in the day but an out of town speaker was hoping to catch an early flight home and I agreed to move to the last time slot of the day. I caught a few sessions early in the day, but I ended up spending a great deal of the time in the speaker room going through my presentation to make sure I was ready to go.

SQLSat357I only did it for the sweet SQL Saturday pullover

Unlike the user group, I felt very good about the presentation after I had finished. I didn’t feel myself tripping over my own words this time and my demos went smoothly. Despite being the last session of the day I had a full classroom and the audience seemed pretty engaged throughout the entire presentation.