Succulents Galore!

Succulents Galore!

After months of putting it off I finally put to use my glass container/bowl for a terrarium!

Every morning on the way to work I pass a little plant shop that sells these succulent plants for $2.50 each or 2 for $4.00. I finally took the plunge this morning and just bought $8 worth. The shop owner was very chipper and helpful as she boxed them up for me so I could easily transport these 4 little plants to work one-handed. I can’t say what kind of succulents they are since I am not that well versed yet in identification (I can only accurately identified the Crassula Ovata variant), but I am doing my best to learn…as well as just enjoy.

After a long day of work (and a quick stop at Daiso to pick up some dedicated tools for this project) I came home to find out my girlfriend had went out earlier that day and bought me another succulent. So in total I had 5 little plants that I needed to fit into this tiny jar…I had my work cut out for me.

Of course despite all the books, articles and how-to guides I had at my disposal I just jumped right into planting these little ones without really a plan except that I wanted to fit everyone into this jar. The one thing I did try to stick to was “big plants at back, small plants up front”, which probably doesn’t matter since it’s a circular container.

First, I tried layering the bottom of the bowl with some brown and tan rocks I had left over from an old aquarium, but it ended up being more less mixed rock and soil at the bottom as I moved the plants around and attempted to get them leveled. Speaking of soil, after reading about it later, simple potting soil may (or may not) be the best for these plants, but I think I think they will be fine with soil they came with.

During one of my breaks I noticed some movement in the bowl, and to my surprise a millipede was wondering around in the soil. After some quick googling, we found millipedes are harmless, where as centipedes are the ones we should be afraid of. Supposedly millipedes eat dead plant matter and assist with keeping soil healthy so instead of tossing the little bug outside I kept it around until the terrarium was complete.

Cleanup, pack away my “succulent” tools, water with succulent plant food, put “Max-a-million-legs” the millipede into the jar and I was able to sit back and enjoy.

Raspberry Pi + ESXi Backups

Raspberry Pi + ESXi Backups

I received my Raspberry Pi 2 in the mail months ago. Of course I was so excited I set it up the same night I received it and proceeded to tinker with the OS and learn about it’s little nuisances. Here’s what I got “done” over the past few months with it:

  1. ARM OSes are not as “flavorful” as I imagined… Obviously the first place I went to find an OS for my Pi was the Raspberry Pi website, but really there are plenty of others. However, I wasn’t too impressed as it seemed to me they were either a) built for a specific purpose or b) not fully built out and missing a lot of packages (not everything has been ported to the ARM architecture). While I do love compiling and building some things from scratch, this wasn’t one of those projects. So Raspbian is the way to go…for now.
  2. Raspbian is Debian and I am a Redhat person… 2 things drive me crazy when using linux: 1) typing a command, hitting tab, bash auto-complete failing to find the command and 2) Realizing I am using Debian while attempting #1. At this point in time, Debian has a good stable train of OSes for the Pi and a nicely filled out repository of ARM architecture packages. There is a CentOS flavor  for Raspberry Pi available; however, the basic repositories don’t have enough packages to make it useful. Usually using EPEL alleviates that problem, but it appears that there is no ARM compatible repo just yet.
  3. Borking the OS is a part of the learning process…I had to restore my Pi 3 times before I got it right.
    1. Setting a static IP in /etc/network/interfaces is apparently the incorrect way to set the IP these days. So wrong in fact, that it completely borks the OS. I had only been running the Pi for about 15 minutes. The correct way is the modify the /etc/dhcpcd.conf file, following the instructions in the file should help.
    2. Trying on new OSes beside Raspbian and jumping ship back to Raspbian. As soon as I found out CentOS had an ARM compatible OS, I loaded it up. As I mentioned before, a lot of the functionality I was looking for (usually installed from EPEL packages), was not available.
  4. CUPS + Brother Printers don’t get along so well…This is sort of related to the Pi itself, but more of my aging hardware, specifically my Brother printer. This wasn’t one of the intended uses I had lined up for the Pi, but since my networking card in the Brother printer bit the dust this seemed like a logical next step. Only problem is the installer provided via Brother (a .deb file), is not ARM compatible. This print server project has been put on hold for the moment.
  5. Dedicated DHCP Server…Dynamic DNS is a convenient functionality and I realize I could take a load off of my home router from managing DHCP at the same time. DNSMasq is a very useful application that accomplishes this task is incredibly easy to setup. However, the only issue with this is that DNSMasq doesn’t dynamically update my home DNS server (which is being managed by FreeIPA). However, as of recent FreeIPA does have a way of dynamically receiving updates from the ISC DHCP server package as long as it is configured correctly. However, performing DNS/DHCP changes during the day creates some unique networking issues that others on the network will experience (specifically web surfing girlfriends). This project is also on hold until I can find a time when I cause network disruptions without bothering anyone but myself.
  6. ESXi NFS backup Server…My original post explained that this was my primary goal in purchasing this device. I finally got around to getting this setup. Using ghettoVCB and some cron jobs, I have been able to automate weekly backups of all my guest virtual machines.

Overall, I think I have only accomplished one task with the Pi and that’s my original project of performing automated ESXi backups. Thankfully it was in just the right time though as I just purchased some upgrades for my server: 2x 3TB hard drives, 16GB RAM kit. I plan to wipe the system, setup a RAID-5 array (3 active, 1 spare) and re-image the system to the latest ESXi, so restoring from these backups will come in handy.

Ability Weekend @ Via West Services

Ability Weekend @ Via West Services

Ability weekend in Cupertino was a blast!

Spending the weekend working on the garden area of the camp, seeing our work come together piece by piece was so gratifying. All the brothers put in a lot of hard work and I could see that this is what I mean when I say brotherhood. These guys coming together to do something together for others in need and who will benefit from it.

Beyond the construction work though, I believe the friendship visit really was the defining part of the whole weekend. Previous GAP/Ability weekends have been without friendship visits and the only ones I have been a part of were on the Journey of Hope. The dynamic is a bit different from JoH and these weekend events. In such a short amount time we have to come together as brothers, and become humbled by our experience with the people we are visiting. The level of nervousness for me was two-fold in this respect especially since dance events require a lot of stepping outside your comfort zone. To add another layer to being hesitant, the dance was also a costume party. We were allowed to raid the camp costume storage and we all got into wearing some fun costumes. I chose a full Scooby Doo costume…it might have been a little snug, but it was worth it as a few campers loved it. Despite the hesitation of the dance and silly costumes, I saw a lot of my brothers taking the chance and just having a fun time. It was heart warming to see this and it really made my weekend.

I had the chance to connect with one of the campers, whom just happened to love Scooby Doo. She was so excited to see my costume and didn’t want to be around anyone else for the night. Even after the dance I had spent time with her and one of the counselors hanging out. It was a connection that made my weekend and coming to an Ability Experience event so worth it.

I definitely enjoyed being a part of the event and I can’t wait to attend more of them in the coming months.

getopt(s) and how I have been (sort of) wasting my time

It isn’t a rare occasion that I decide to automate (or contemplate automating) a task in some workflow at work (or even at home). In fact I think it’s a great way to exercise my programming skills and save time getting future tasks done (if only this automation worked with chores). However, I still have my doubts about the latter part of that last statement since I tend to spend many hours and in some cases, days tweaking, perfecting and debugging some script I hobbled together just to fit some task. Four hours in, knee-deep in the debug process, and 3 cups of tea later, the thought of: “is this really worth it?”, pops into my head. Is writing this little script going to save me that much time? Usually this thought gets pushed aside and I root out the bugs, find the usefulness in the new tool I built and generally just forget that I blew hours and a sleepless night or two. The one consolation of these mini projects is that I definitely learn something new and to me in the end is worth it…except maybe when I realize I have been wasting a lot of time.

Today the urge came over me to automate something, specifically REST API calls from my local machine. Lately I have been using the curl command line tool to perform my REST API calls to all sorts of various services at my company. It is becoming so useful to pull data for a service as opposed to visiting the page, logging in with my credentials, and dig around through the menus and submenus. Since I spend most of my time in my terminal, these calls are a huge convenience, but it comes at a cost of typing a lot of arguments into the call. Specifying the hostname, the call type, all the headers and then having to rewrite the path every time I want to do a new request just adds up.

I am not going to go into the details of what I did since this post isn’t about that (that post may come later), but instead about getopt and getopts. These are shell functions that are commonly used to parse command flags passed to a shell script. I only recently stumbled onto this today while ironically debugging a script written by someone else. The idea had never really dawned on me that perhaps someone already wrote some functions for parsing command flags and that rolling my own may not be necessary.

Trolling the web for some decent examples I came across so many conflicts about whether I should be using “getopt” or “getopts”.  Below is a list of what I gathered in general:

getopt

  • Older version (developed in the early 1980’s)
  • Handles short and long arguments
  • Supposedly mis-handles white-space and empty arguments
  • Runs in compatibility mode on most *nix environments (not sure what kind of hinderance this is yet)
  • Some would like to imagine it never existed: “Never use getopt(1). getopt cannot handle empty arguments strings, or arguments with embedded whitespace. Please forget that it ever existed.”

getopts

  • Newer version (developed/introduced in 1986)
  • Only handles short arguments
  • More portable (compatibility across more *nix environments)
  • Standardized by POSIX

Digging up all these facts and attempting to find some good examples, I realized that the usage of getopt(s) is probably one of those long-standing battles similar to Vi(m) vs Emacs or Apple vs Microsoft. With this in mind, there is probably not a right answer, but instead it is probably dependent on a case by case need (and maybe comfort). This of course didn’t help me since I tend to lean towards the newer tools for compatibility, but I did want the long argument support…in the end the compatibility won (coupled with the abundance of good examples for usage).

After slaying some bugs the script was finished and nicely tucked into my “tool belt” with all the others I have developed over time. Coming out of the fray of this made me realize how much time I could have been saving by using one of these functions as opposed to all the days and hours I usually spent rolling my own parser…in a few short hours I was able to roll out a new tool where I was able to focus on the core functionality instead of fixing the parsing of inputs, commands, flags and the whitespace. Now the question is: should I go back and update all those scripts I spent so much time and lost so much sleep over?

 

Los Leones Hiking Trail

Los Leones Hiking Trail

Went for a hike today in the Pacific Palisades at the Los Leones (or Los Liones) hiking trail.

It was relatively easy and definitely worth the (~1 mile) climb to the first lookout. The trail does zig-zag a lot, but there’s ample shade and rest areas along the way. The only part where it gets a little sunny and uncovered is just before you reach the 1st outlook. There isn’t really any shade or covering there (there is a lower outlook near this one with shaded area that was good for picnicking), but you wouldn’t want to miss the view. It’s a great way to see very far down the pacific coastline (Venice, Santa Monica Pier, and Manhattan Beach), out towards LA (the city skyline is smoggy, but it’s there) and of course out into the shimmering pacific ocean.

Parking: 2 lots, plenty of street parking, prepare to do some parallel parking if necessary.

Scenery: as I mentioned: worth it.

Difficulty: Medium, the path is narrow and there are inclines going up, but it isn’t too difficult.

There’s a lot more information on the Yelp page, and I won’t drag on with anymore detail except it’s a worthwhile hike with great scenery.