Category Archives: Uncategorized

Jumping the ship on Evernote

I am a long time user of Evernote. Currently it has the best browser extensions, a wide range of supported operating systems, and it has a free tier; however, I am getting frustrated with it. In the past year, they have changed plans twice – now the free tier is only supported on 2 platforms. This has cost me to re-evaluate my use of Evernote. Lately all I have been using Evernote for is to sync a grocery list between devices and keeping my children’s memories in one location – their sayings, artwork, etc. In the past I also used it for note taking, article saving, and inputting ideas. I have also seriously considered buying a subscription just so I can continue uninterrupted.

While this may be a rant about a free user using a free service, I contribute to the monitization of their service by the viewing of advertisements. The free tier limits (except for maximum devices) are adequate for my occasional use and probably have cost Evernote around $3 total in the past several years. The valuation Evernote has placed on their second-level tier ($35/year) is much higher than I value it (~$12/year). While I may not be able to set the price on what Evernote costs, I can put a price on what I am willing to pay for a simple note service.

A recent article on opensource.com opened my eyes to looking at note taking alternatives. I was surprised at how mature Paperwork was; however, it contained one simple flaw that throws my grocery list experience out the window – no checkbox option. This caused me to evaluate Google Keep – yes, has check boxes, but functions more like sticky notes. Then I remembered Atlassian’s confluence has checkboxes. Their paid version is $10 for up to ten users (per year if it self hosted, monthly if in the cloud). This fits my budget, I can create grocery lists, take notes, and create notebooks/spaces. While I have not switched away yet, confluence seems like a viable option as I already have an always-on home server.

I do not use the kuerig – here is why…

The kuerig device is a visually pleasing design. It appears to belong in the modern kitchen. A few months ago, I was given a kuerig first generation with a reusable filter and used it as my primary coffee consumption device. It gave me a sense of faster coffee delivery in the morning – I was happy until I discovered these flaws:

Flaw #1 – I spent more time making coffee than with a drip machine.

While it had a reservoir of water, that only lasted for about 6 tall glasses of coffee. I would have to switch out the K cup if I wanted a cup in the morning and one to take with – very common thing for me to do. This led me to another flaw.

Flaw #2 – the kuerig is designed for casual coffee drinkers.

By casual I mean 3-6 cups a month. Even with a refillable K cup, I was spending twice the amount on coffee and found myself adding 5 minutes to my normal routine just for use of the kuerig.

Flaw #3 – coffee dust

The coffee ground too much in store bought K cups and my refillable K cup often found itself in the bottom of my glass. This was disgusting and I could not stand throwing away the last sip of coffee because it had coffee dust at the bottom. To combat this, I had to cut filters in the shape of my K cup.

After 2 months of trouble with the kuerig, I got frustrated with drinking coffee. What was designed to be a pleasant, easy experience in making coffee turned out to be painful, time consuming, and more expensive. I evaluated my habit with the kuerig and found I was doing the same exact items with my old drip system, but spent more time affixing it to the kuerig. Once I realized that, I switched back to my old ways, sold the kuerig and bought more coffee with the money.

Few posts in the works

I have not posted in a few weeks. This was mainly due to getting a rest from posting every week of 2016! I have a few posts coming in the next few weeks. The first one will be about debugging PHP applications. The second one will be deploying a high availability MySQL cluster – what it looked like 10 years ago, and what it will look like 10 years from now. (HINT: Kubernetes + GlusterFS 😉 )

2016 behind, 2017 forward

With a year drawing to a close, I have a habit of looking back at my goals I set for myself, see how I have done, and set goals for the new year. My new year’s resolution for 2017 will be 1920×1080 (same as last year). I wish I could upgrade it to 5k, but it will have to do for now.

In 2016, I set a goal to post to my blog every week – I met that goal. I also planned to get more certs – of which I achieved my LFCE, COA, and Puppet Certified Professional. I also sharpened my ruby skills.

For 2017, I am not going to write on my blog every week. Instead I will write more lengthy blog posts and tutorials.

In 2016 we saw the Cubs win the world series, Microsoft join the Linux foundation, Google join the ASP.net foundation, and pigs actually flew. I can only imagine what 2017 will hold.

Day after Thanksgiving ritual

My wife and I adopted a tradition on the day after Thanksgiving – after a full night’s sleep – we visit stores and go shopping around 10am. Yes, the lines are still crazy, but the people who woke up at 5am to wait in line are already gone. With grandparents watching our children, it is one of our best stress-free shopping experiences. No doubt – we are doing it again today.

So the Cubs won the world series

I am still in shock that the Chicago Cubs won the World Series in Baseball which ended their 108 year drought. Last time the Cubs won the world series, they won it back-to-back. I can expect nothing less this time around. 😀

A journey to LFCE

I began my Linux hobby in 1999. I was given a CD of RedHat Linux which I installed on an old computer. At first use, it was slow and buggy and uninstalled in favor of Windows 98. I installed Debian a few months later and discovered I could install a different desktop environment – KDE which looked like Windows, but was different. After playing with it for a few weeks, I discovered Knoppix – a live CD that didn’t overwrite my hard drive and let me play around without grave consequences. A friend then introduced me to Gentoo which allowed for complete customization for my 1ghz single core processor. After a few failed misconfigurations and a desire to get back to binary installs, I switched to Fedora Core 1 and used it on my desktop. Another friend showed me a new distribution called Ubuntu – similar to Debian, but more up to date. This was then installed on my laptop that I used for college. I switched completely to Ubuntu after the release of Fedora core 4 as I got frustrated with yum.

After college, I started working in a help desk position. It was mainly servicing Windows desktops and a few OSX machines. I then received a task from my boss to create a simple lookup website. I got to choose the server OS, create the VM on a Hyper-V host, and use any tools I could muster to perform this simple task. The project was a success and I received another – parse a text file and output it to a standard CSV. At the time, I only knew PHP and none of the cool features of sed and awk. PHP turned out to be a good choice for this project as I was later informed a user would use my creation every day to convert a text file to this new format. I simply had to create a web front end, parse the uploaded file, and give the user an option to download this file.

I began to develop more skills in Linux as my various work tasks involved more and more Enterprise level responsibility – such as LDAP authentication for websites, Active Directory maintenance, converting databases from Access to MySQL with a front end, Migration of Exchange 2003 to 2007, and introducing Google Apps for Education to about 700 students. 

When my boss left the organization, I assumed his role and provided oversight for network connectivity (switch/router config), overseeing two, 6 figure technology budgets, and also my regular responsibilities. I was able to attend training events as well as attend online courses regarding Linux. At that time, I began reading more books on tech practices, management, and Linux. I felt I learned enough to prove my skills with certification – even though I was doing the work successfully without being certified. The Linux Foundation released their equivalent to Red Hat’s RHCSA – the Linux Foundation Certified SysAdmin (LFCS). The domains and competencies covered described all the tasks I have done since setting up my first Linux box – create users, partitions, edit text files, etc. I took the introduction to Linux course offered by the Linux Foundation on edx, and scheduled an exam for my LFCS. On my first try, I misconfigured RAID, and rebooted the server. (Whoops!) The Linux Foundation was gracious to allow a free retake which I passed. I kept going around to my co-workers (after being certified) and quoting my favorite Dilbert comic: “Step away from that network server… I AM CERTIFIED!”

At this time, my skilled co-workers left (not all at once) and my team turned out to be just me for a period of eight months to cover 1,100 network attached devices and 1,300 users. It was about this time I researched CMEs (Chef, CFEngine, and Puppet) to help do tasks. I eventually picked puppet and successfully deployed RPi-wayfinding with it. A year and a half later, I passed the Puppet Certified Professional exam. With that out of the way, I turned my attention to the LFCE – especially since the Linux Foundation had a sale on the course and test for less than the test amount. 

The LFCE was the easiest certification test of all the ones I took. I scored an 88 out of 100, and I think the things I missed were saving the iptables rules :/

My next step is to take an AWS certificate test as I have been using AWS for nearly 2 years, but I will probably take an OpenStack cert first as I was given a discounted rate for the cert + course from the Linux Foundation.

Hobby vs responsibility

One of my hobbies is video gaming. In my teen years, I would spend on average of 60-80 hours a week playing either Counter Strike, Team Fortress 2, or any other Valve software title. It was not until I went to college and got a job when my average went to 30-40 hours a week. After being married and having children, my average is now down to 8-12 hours a week. As my responsibilities increased, my hobby time decreased. I would consider myself addicted to video games (i.e. I cannot stop playing them); however, I do not feel like I am missing out from partaking in my hobby. Here is what I have done to lower my addiction to video games:

  1. I stopped playing multiplayer FPS
  2. I only buy video games that run on Linux
  3. I play during specific time frames only

My current favorite game is Factorio – you crash landed on a distant planet and have to build a rocket to escape.

Common problems with Web Developers configuring LAMP/LEMP

I am a SysAdmin who likes to code. I would say I know a fair amount of web developing, but do not understand it like a web developer uunderstands it. I think the reverse is true as well – web developers know how to set up a LAMP/LAMP stack, but they do not understand it as well as SysAdmin might understand it.

To be a successful SysAdmin, you need to relearn your field every 3-5 years. New versions of software come out, new OSes, new features, new methods, and new ideas come out every several months. It takes somebody dedicated to read news blogs, mailing lists, and following the appropriate people on social media to keep up with the rapid trends. Web developers do not have that time to dedicate to operations work. They only need infrastructure to work for their project and it doesn’t matter how well tuned the software is – if it works, that is all they need. Below are some common pitfalls I see with web developers. Continue reading Common problems with Web Developers configuring LAMP/LEMP

Refreshing Ruby Knowledge

I see a trend in system administration tasks moving toward the Ruby programming language. Yes, you can still code in Perl, Python, Shell, etc., but Ruby seems to be growing in popularity as a choice in scripting language. It should be – it is certainly easier to type and it has a big community to go with it. I was first introduced to Ruby in 2009 and immediately after learning Ruby, I learned Ruby on Rails. At the time, Rails and the MVC model was too advanced for me and so I never used my knowledge. Mostly because Rails had many “does this automatically so you do not need to include it in your code” so it was difficult for a beginner.

Now nearly 7 years later, I am taking Ruby off my virtual bookshelf and blowing the bugs off of it and refreshing my knowledge – this time leaving Rails out of the picture. So far I am liking plain Ruby. Below are some resources I have used to sharpen my Ruby skills.

https://rubymonk.com/

http://rubykoans.com/

http://exercism.io/

 

Bonus: Setting up the exercism client on Fedora 24

The exercism client is written in Go. Go can fetch and install other Go programs as long as you have a Go workspace set up. To do that we will issue the following commands:

# To install go
sudo dnf install golang

# To set up the workspace
mkdir -p ~/gocode/{bin,src,pkg}
echo 'export GOPATH=$HOME/gocode' >> ~/.profile
echo 'export export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.profile
source ~/.profile

Those commands will set up the Go workspace and allow you to issue the next command: go get -u github.com/exercism/cli/exercism

5 Things to do after installing X

Congratulations, you have installed X! Here are 5 things to do right now:

1. Change your background
2. Install needless software
3. Customize your font size
4. Take a screenshot
5. Share about your experience on social media!

This post is mainly a response to all of those 10 things to do after installing Ubuntu 16.04 blog posts.

Post this week

I messed up on the post this week. It had a previous date when I clicked submit. I wrote an article on the next generation web stack (LEMP) with SSL.
Continue reading Post this week

The greatest story ever told

The greatest story ever told is how an Almighty God came down to earth, lived a perfect life, and offered Himself as a sacrifice for the sins of the whole world (past, present, and future). This is what the Easter weekend represents. There is a penalty for sin which must be paid. Jesus paid that penalty with his life. Those that confess that Jesus took their place and put their trust in Him will receive a pardon from sin, peace with God, and a prepared home in heaven.

Because God is so righteous, He cannot have unrighteousness near Him.

Because God is so holy, sin cannot come before Him.

Because I can be biased, I am unrighteous.

Because I am human, I have sinned.

Because God is so merciful, He provided a scapegoat to take my place.

Because God is loving, He placed my unrighteousness and sin upon Himself and died on the cross.

Because God is gracious, He offers a pardon to all those who trust in Him.

Sunday is awesome

Sunday is so awesome that cron repeats it! (0,7)

High performant chat application

In a fictitious world where I started my own company and developed a LEMP-stack chat application, this is how I would do it in 2016:

I would use WebSockets as the protocol in which data is being sent to and from the server. WebSockets has built-in support by nginx (since version 1.3). For caching, I would use the expires max; function of nginx for my static content (images, css, js, fonts, etc). I would also ensure static content was named in the scheme of name-md5hash.ext. This would allow the caching on the client side to shine.

I would ensure my php files are gzip compressed (with .gz extension) to allow fast transferring of data between client and server. Nginx finds the .gz files when gzip compression is turned on and uses them if they exist.  I would design small php-fpm servers that can support ~2,000 users at a time (basically, a dual core processor with 4gb of ram). This would allow ease of scaling at lower costs.

I would use GlusterFS for fault-tolerant storage. I would use the mount -t gluster option on the servers as it would allow distributed nfs capability for storage of uploaded content.

I would use MariaDB MaxScale as the database as it would allow for ease of scaling.

In short, it would look similar to the following diagram:

chatapp