#QuickTips: The three most important things most people can do to improve the quality of their coffee.

Photo by Allagash Brewing

  1. Buy whole bean coffee. Grind just before brewing. Preferably with a burr grinder for consistent grind.

  2. Buy fresh locally roasted coffee. If your coffee has a “roasted on” date you can figure out freshness. If it has an expiration date, you can’t. There are no consistent standards for coffee expiration.

  3. Take the time to taste test beans from different regions and roasters. I thought I loved oily dark roasts but after trying a lightly roasted, clover-brewed, Yirageffe from Starbucks, I sought out Ethiopian beans from roasters whose product I found in my local Whole Foods. I found that Ceremony Coffee Roasters in Annapolis Maryland will roast small batches of Ethiopian heirlooms for me after my order and ship via USPS for $5. I have found true coffee love.

Bonus tip: also test out different brew processes for yourself. I have been single cup brewing for years but manual processes such as aeropress or pour over (with some stirring) work best for the kind of rich extraction I want. I own a Breville hot water heater with selectable temperature to help make this part automatic.

Photo Credit: Allagash Brewing

Tony Robbins on The Real Source of Depression

Tony Robbins. His name is everywhere lately. And particularly, his ideas are present in my daily life. It’s because I’m reading his new book, Money: Master the Game - 7 Steps to Financial Freedom. But beyond that, I am taken by his strong grasp of the mental and emotional factors that help or hurt when you’re trying to take what he calls “massive action”.

His ideas and his strategies are powerful and moving. I love his energy and passion around enabling everyone he can. It’s inspiring.

“Where focus goes, energy flows” -Tony Robbins

In a recent interview with James Altucher on his podcast, Tony talks about the relationship between focus and depression. He believes there are three fundamental mistakes people can make in their patterns of thinking that will make people angry, depressed, sad, or helpless:

  1. Focusing on what you can’t control rather than what you can control.
  2. Focusing on what you don’t have rather than what you do.
  3. Focusing on the past instead of what you can do Now.

Psychologist Michael Hurd, says that in psychology circles depression is defined as “learned helplessness”. It sounds like Tony is echoing that definition and, in his strategic and tactical way, also identifying specific ways that people arrive at learned helplessness.

Tony goes on to say that as individuals, we have to constantly ask ourselves what we can control rather than focusing on the past, or on blame. What solutions and actions are available rather than lamenting why it has to be. It’s okay to be pissed off, and he admits that he is (about the financial crisis of 2008):

“…I’m not willing to buy into the story of ‘Oh my god, they’ve done this to us!!!’ I know that’s true. I know that we’ve been screwed royally… all of us. But to spend my time more on that old story? I’d rather spend my time on the solution. Every great person I know spends 1% of their time on the problem, 99% of their time on the solution.”

I love it. We’re pissed off… we don’t ignore that. But we put our time toward the solutions. We orient ourselves toward action. Sounds to me like the perfect recipe to avoid victimhood and blame and instead focus on action and our abilities as human beings to do amazing things in our lives.

I’m going to paraphrase his words to leave you with a parting thought. Tony says we, as human beings, tend to overestimate what we are able to achieve in a short period of time and they tend to underestimate what we are able to achieve over a long stretch of time such as a couple of decades. This is where I plan to put my money: Relentless self-improvement to deliver the most value to as many people as I can.

Cable Internet Self-Install... Not for Non-Techies

I spent more than an hour trying to get cable working at the new house this weekend. It’s really not for people who aren’t comfy with getting dirty. And you need to have a good grasp of physical layer troubleshoooting.

If I had it to do over, I would start outside and try to figure out which cable is the one coming from the Cable company. Outside of my house, there was a Verizon FIOS box and an orange cable, which was new looking and capped with a terminator. I took a guess the Orange one was the Comcast XFinity drop since the previous owner had FIOS and the orange cable wasn’t connected to anything.

Step 1 - First… use a long cable and connect your modem directly to the outside drop and make sure it can acquire signal. Consult your Cable Modem user guide for how to read the indicator lights. If you can’t get this working, nothing else will matter.

Step 2 - assuming step 1 passes, try to learn about the cabling inside yourself using a tool like the Klein Tools VDV512-058 Coax Explorer Plus Tester. This seems like the right tool. There are four color coded terminators and one tester unit and the lights tell you which terminator is on the far end allowing you to have some confidence that you have identified both ends of a cable drop.

Step 3 - Connect the exterior cable to one of your internal cable drops and connect the modem on the far side of the cable drop inside the house.

If your modem indicator lights can’t acquire your cable may have too much signal degradation. You can try other internal drops if any are available.

If your modem indicator lights show that it was able to get signal you’re pretty much good to go to call the cable company and begin the more painful part of being forwarded around and placed on hold and so forth to activate your service and register your Cable Modem.

I don’t recommend this for people who aren’t very technical. Pay the extra money for the install if it makes sense to do so.

Use Version Sort to Get Smarter Sorting - GNU Tools

output with normal sort (sort):

node-c10-20-location
node-c12-20-location
node-c2-20-location
node-c4-20-location

output with version sort (sort -V):

node-c2-20-location
node-c4-20-location
node-c10-20-location
node-c12-20-location

Per @onetruedabe it’s only available on newer version of linux… not CentOS or OSX.

Having trouble getting to Self-Love? Try Self-Kindness.

I believe in self-love as a fundamental value. I think that fundamentally, self-love imposes a “redline” for how much you can authentically love anyone else. And it’s what you fall back on when it seems like no one else out there gets you in a given moment.

But love as a word is overloaded. It’s carrying too much. It’s big and many-headed like a hydra.

It is used simultaneously to describe a state of being and a state of doing. (Try to wrap your head around it… seriously. How the heck does that work? :))

This is particularly problematic for someone like me. I grew up in a home that was broken and re-forged by separation and divorce and remarriage. Most problematically… the only guidance I was given for the temper I displayed as a child was abusive yelling and intimidation, shame, and ostracism. I was literally on my own to figure out how to manage my temper.

Consequently, I have had to undo the many years of programming that are all about how I’m not enough and I’m going to be alone if people don’t like what I do. Self-love feels unreachable and inauthentic for a person struggling with that kind of doubt. It’s too big and too far away.

But kindness is not overloaded or too big or too far away. Kindness is imaginable. It is only a state of action, not a state of being. How do I know this? Kindness has no meaning without expression of some sort. (I think we call the state of being “empathy”).

Kindness is handing a tissue to someone crying. It’s sitting and listening when someone seems a alone. It’s “just being there” when other people can’t seem to “go there”. It’s also sharing a bite of a delicious cake! It doesn’t require suffering to be present in order to come into existence.

In regards to yourself, kindness is eliminating the thoughts the make you feel like a failure… the “shoulds”. It’s reminding yourself verbally that you were not born perfect or omniscient and you’re a work in progress as everyone is and you’re enough as you are… even as you strive to be more capable and sincere. It’s reminding yourself what you have and what you’re working toward rather than what you don’t and who’s to blame.

Practicing self-kindness is a virtue. It is action-oriented, responsible, and will repair the damage from some of the stupid life traumas you don’t know are affecting your decisions. And it will increase your capacity to live and love fully.

So… maybe next time you find you’re in a situation where you need to love yourself a bit better, start with a different question:

“What would I do if I were being kind to a person in my situation?”

I have borrowed Ayn Rand’s concepts of value and virtue rather liberally here but you can find more in her very incisive writings on ethics.

Inspired by Michael Hyatt on Leadership

This morning I listened to Michael Hyatt’s podcast episode on the nature of leadership. Much of it is character driven (ala Stephen Covey) and, even as I try my hardest to avoid confirmation bias, I find so much strength and encouragement to carry on in my own ways, which sometimes feel naive and pollyanna-ish, because of the words he has said.

An example of how I might be naive is that I believe and act as if conflict in the workplace cannot exist without blame. To me, blame is as oxygen to the fire of conflict. This requires that I put aside the matter of “justice” while resolving disputes and instead to side-step my own desire to blame. Instead I choose to lean in, try to understand, and to pursue collaboration toward a resolution. Things get fixed faster and, I believe, people feel free to improve themselves when they are not in reaction against the perceived judgment from others. It doesn’t mean that I don’t value justice. But it does mean that I choose to exercise a bit of faith that management/reality/whatever will act justly in the long term, a principle I think I picked up from Robert Stephen Kaplan.

Hyatt’s podcast is so very much about the individual nature of leadership characteristics. Even as you try to influence others, the seeds of it are in your choices and what you choose to give prime status in your view of things and where you put your efforts. I am almost moved to tears when I think about how beautiful a world of people trying to live these ideas would be. We could do so much together.

(Personal note: I honestly didn’t think of myself as any kind of leader until my manager at Juniper Networks, Kim Order, the only manager-mentor-hybrid I’ve ever had, tried to convince me of it. This episode makes me think of her and how much appreciation I have for my time working for her. I’m glad she saw this in me and I like trying to live up to it.)

Trusting in Non-Linearity as the FNG

I’m officially two months in at Salesforce.com and it’s really kind of neat to be in a non-telecom environment for the first time. I’ve had to really get settled with the idea that I am not going to be “fully productive” or feel the confidence of “understanding the unique value that I own” in my place of work for some time. (I’ve known this all along but getting the gut to catch up with the head is hard work sometimes.)

This is the plight of the new guy. There’s just too much you don’t know and the only way to get to know it is to buckle down and start doing stuff… probably badly. There are three things I am trusting here. I have trust in myself because I have managed to become top-tier effective wherever I have applied myself. I have trust that my team is going to give me the feedback I need so that I can work with them in a way that is congruent with the goal and with their work in progress. And I trust in the non-linear nature of this kind of learning.

What do I mean by non-linear? Don’t make too much fun of my “line”. I was too lazy to use a straight-edge but not too lazy to use a scanner.

Anyway, I trust that as I apply myself to my work, the things I learn will gather, have sex in my brain, and multiply such that I can understand much more than two times what I can understand today when we reach the four months mark. And, hopefully, that translates into smarter results, better output which factors in the many requirements from our many constituents and clients.

Things I Learned About Nexus Power-On Auto Provisioning (POAP)

I’ve spent the last few days working with Cisco Nexus switches and trying to get them to auto-provision using DHCP and I wanted to document some of the things I learned in the process.

POAP uses DHCP and delivers an IP address along with the name of a tftp server and a filepath to an install-script file the switch. If the switch is in a sufficiently unconfigured state, it will automatically being the POAP process when it boots up. I say sufficiently unconfigured because it is possible to be overconfigured and underconfigured. You’re overconfigured if there is a startup-config. You’re underconfigured if your box boots to the Loader> prompt as the first box I touched did. (You can fix this by booting up and running “install all” for any image)

The POAP install-script can be downloaded in the same area of the Cisco.com site where you download the kickstart image. This is counter-intuitive placement on Cisco’s part but Arista is also guilty of placing things like config guides in their code download area. It’s not a bad way to go but I would prefer that they indicate it more clearly.

You will have to tailor the POAP script to suit your environment.

I had to update it to reflect the code images I wanted to use and I also added an entropy value to the destination filenames for the kickstart and system images because the script doesn’t copy the files if they already exist. And the sample POAP install-scripts seem to all be hard-configured to save the files as n3k.k and n3k.s. The result for me was that I ended up with a version of code other than what I wanted on my switches.

The sample POAP scripts also don’t seem to include downloading image files from a remote server so that is something you will have to adjust as well. I’m still learning about what kind of documentation is available for the python API so I can’t make strong recommendations about how to fix that just yet.

More later.

Vagrant and Juniper's Firefly Perimeter

Looks like Juniper is working hard to get their Firefly perimeter usable on Vagrant. See also, the firefly-packer github for info and caveats.

fluong@fluong-ltm:vagrant$ mkdir firefly010
fluong@fluong-ltm:vagrant$ cd firefly010/
fluong@fluong-ltm:firefly010$ ls
fluong@fluong-ltm:firefly010$ vagrant init juniper/ffp-12.1X46-D20.5
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
fluong@fluong-ltm:firefly010$ ls
Vagrantfile
fluong@fluong-ltm:firefly010$ vim Vagrantfile
fluong@fluong-ltm:firefly010$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'juniper/ffp-12.1X46-D20.5' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'juniper/ffp-12.1X46-D20.5'
    default: URL: https://vagrantcloud.com/juniper/ffp-12.1X46-D20.5
==> default: Adding box 'juniper/ffp-12.1X46-D20.5' (v0.1.2) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/juniper/boxes/ffp-12.1X46-D20.5/versions/3/providers/virtualbox.box
    default: Progress: ##########################################################==> default: Successfully added box 'juniper/ffp-12.1X46-D20.5' (v0.1.2) for 'virtualbox'!
==> default: Importing base box 'juniper/ffp-12.1X46-D20.5'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'juniper/ffp-12.1X46-D20.5' is up to date...
==> default: Setting the name of the VM: firefly010_default_1411482071141_14275
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
fluong@fluong-ltm:firefly010$ vagrant ssh
--- JUNOS 12.1X46-D20.5 built 2014-05-14 20:38:10 UTC
vagrant>

vagrant> show interfaces terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     10.0.2.15/24
gr-0/0/0                up    up
ip-0/0/0                up    up
lsq-0/0/0               up    up
lt-0/0/0                up    up
mt-0/0/0                up    up
sp-0/0/0                up    up
sp-0/0/0.0              up    up   inet
                                   inet6
sp-0/0/0.16383          up    up   inet     10.0.0.1            --> 10.0.0.16
                                            10.0.0.6            --> 0/0
                                            128.0.0.1           --> 128.0.1.16
                                            128.0.0.6           --> 0/0
dsc                     up    up
gre                     up    up
ipip                    up    up
lo0                     up    up
lo0.16384               up    up   inet     127.0.0.1           --> 0/0
lo0.16385               up    up   inet     10.0.0.1            --> 0/0
                                            10.0.0.16           --> 0/0
                                            128.0.0.1           --> 0/0
                                            128.0.0.4           --> 0/0
                                            128.0.1.16          --> 0/0
lo0.32768               up    up
lsi                     up    up
mtun                    up    up
pimd                    up    up
pime                    up    up
pp0                     up    up
ppd0                    up    up
ppe0                    up    up
st0                     up    up
tap                     up    up
vlan                    up    down

JunosV Firefly Perimeter in VirtualBox and Serial Ports

Today I learned:

  • OVA files are zip files that contain OVFs, VMDKs, and Manifests
  • You can unpack the JunosV Firefly OVA using unzip.
  • Edit the OVF to make it compatible with VirtualBox. Look for the string %iid% and replace it with a hard sequence number (for my file it was after 1 and before 3 so I used ‘2’.)
  • Then you need to calculate a new SHA1 sum for the OVF and replace the sum in the manifest (.mf) file.

To get the serial port working on Mac OSX:

  • Modify Virtual Box to add a serial port
  • make it for COM1/IRQ4/0x3F8
    • But change Port Mode to 'Host Pipe’
    • Check “Create Pipe”,
    • and set a filename in the tmp folder such as /tmp/pipe
  • To get networking to work, use “Paravirtualized network adapter (virtio-net)” adapters. I was able to get this to work with host-only networking. Additional steps may be required to increase multicast TTL on the host config if you want it to work with Virtualbox NAT networking.

  • install socat if you don’t already have it (using homebrew).

    • brew install socat
  • then use it to associate the host pipe with a PTY
    • socat -d -d /tmp/pipe PTY
  • the logs will include the /dev/ttySXXX path…
    • 2014/08/14 19:40:07 socat[96334] N PTY is /dev/ttys006
  • note the /dev/ttySXXX in the output and use screen to connect.

See also: http://tonejito.blogspot.com/2012/05/virtualbox-serial-console-on-mac-os-x.html

SV650s with Heterochromea

This evening I decided to pull the front fairing on my Suzuki SV650s off the bike to change the right front blinker. I had read up on how to do the disassembly from SVRider.com and had some vague notions:

  • gather my metric allen wrenches and my screwdrivers
  • remove the mirrors
  • remove the top two screws holding the windscreen (because they attach to the part of the cowl that is attached to the frame).
  • remove about 4 other bolts

And the front cowl comes right off…. right? More or less.

It took longer than the 15 minutes that the pros quoted. Partly because I am not accustomed to working with my hands and partly because the cheap allen wrench I had purchased from Lowe’s started falling apart while I was in the disassembly phase.

You need an allen wrench to properly re-assemble it. Sigh… I made do with a screwdriver and grit.

After sucessfully removing the fairing and changing the blinker, it turned out that the harness connector has changed since the bike was manufactured. Maybe the fact that the lens was a different color should have been a clue. Because I pulled the battery out to be charged I won’t know until tomorrow whether I have it wired correctly.

Do I know if I did it right? Nope!

But do I feel satisfied with working on it? You bet!

10 Ways to Keep Perspective and Avoid Stress and Anger

I’m an intense type A kind of person. I admit that. There aren’t many things that I want to do halfway when I start doing them. I want to own mastery over the things that I choose.

But I have my ways of being relaxed and groovy too. I struggled with anger a lot as a teenager and I had to come up with a lot of skills to deal with that and as it turns out, most of them have to do with keeping perspective. So I present to you this list of mental techniques I use to be sure I can be a chill dude while I am pursuing whatever ambitions I have.

  1. Remember: Whatever your journey, the destination is the same. In the end, we will all be dead. :) So try not to be outcome-oriented and instead, be experience-oriented. Make the most of your current experience by looking at what is around you and keeping your focus on the things that make you enjoy this moment. Use your eyes and your ears. Make small-talk with people rather than whipping out your phone. Enjoy the breeze, the trees, and your cranky knees.
  2. Give priority to your physical needs and comfort. Unless you’re presently engaged in endurance training of some sort, don’t let yourself get too hungry or hot or cold. Take bathroom breaks. You can enjoy your moments better when you aren’t distracted by the physical demands of being a human.
  3. Say No. If you’re saying yes to everything you will be over-committed. For any given moment of your life you will have to decide what your goals are and say “yes” to the things that align and “no” to the things that don’t. Time is limited. In choosing your goals, give intrinsic motivators (e.g. what you notice you have endless tenacity about) priority over extrinsic motivators (e.g. status in the community).
  4. Permit yourself to change your mind. And permit yourself to apologize. We are not omniscient beings and no one that we should reasonably care about expects this of us. But a good attitude and a verbal recognition that what you do matters to other people will always be appreciated.
  5. Avoid scheduling things back to back and and give yourself plenty of time to get places and/or collect your thoughts and prepare. Giving yourself time to think between engagements is valuable stress management.
  6. When driving… Treat every drive like a leisurely cruise on the boulevard. Think to yourself out loud: “there is no rush… what a nice day!”. Even if you are late. Give yourself the gift of a large following distance to the car in front of you. Around 5-7 seconds is good during non-rush hours… 3 seconds or more during rush. Don’t tailgate! Invite people to lane change ahead of you. Let people drive faster than you. Maybe they are poor fools that haven’t read #1.
  7. With other people… Remember that misunderstandings are commonplace. Extend to them an assumption of good intent and ask people to repeat or restate things that make you feel offended or defensive.
  8. Permit yourself to decide that some people are not worth your time. This includes dishonest people, negative people, and people who make their emotional needs the responsibility of everyone but themselves. Choose to deal with these people as little as possible.
  9. For stuck-on-the-phone with customer service scenarios, if you can’t seem to make sense of or make yourself understood to the person on the other end of the phone, ask for someone else. It doesn’t have to be unpleasant or upsetting. And you might get lucky and land with someone who is genuinely helpful and interested.
  10. Don’t run your budget too lean. If you’re spending close to what you’re making and living paycheck to paycheck, you will feel stress when bills come due. Keep extra money in savings so you don’t overdraw and spend drastically less than you make. Incidentally, this is a metaphor for nearly everything else on this list.

It was hard work coming up with this list. The examples are all over the map. But I hope that reading it helps you to keep perspective and enjoy your moments more.

Today’s message is for those who don’t know exactly what their passions are. Don’t worry about it. You might consider to instead aggressively pursue ambitious short term goals. You learn a lot in the process, forge strong relationships with the people you work with, and it leaves you open to pursue that shiny thing you are more likely to notice in the periph of your field of vision.
— My wording, but the short-term-goal bit is from musician-comedian Tim Minchin

Kicking off My Mini-Sabbatical... Why I Left and What I Want to Build

I left my position at Juniper on Friday. It was a happy-but-bittersweet parting because I really liked my team there. I received good cheer and wishes for great success and votes of confidence from nearly everyone. It’s really heartwarming and I get a bit misty thinking about it.

People who know me in my life as a computer geek know me as the network guy who will use any excuse to write another script. This is true. I’ve always been fascinated with the power of computers to allow a person to do more than he would be capable of alone. They say time is money. I say that well-directed code is time.

At early points in my career I remembering adding VBA logic to my Word and Excel documents and developing templates in Visio to make my workflow easier. This is the same thing as what I do as a network engineer: Remove the boredom of repetition.

Repetition does have a purpose. I used a lot of it when I was preparing for my JNCIE-SP exam. With a little study, I already knew the concepts for that test. The rest was a matter of practice and getting faster at doing things.

But once you have achieved the goal of learning or habituating something unfamiliar, the repetition no longer serves a purpose to you and it starts to make sense to code it away. This has always been a part of my work. When I am being self-deprecating and humorous, I say it is because I am “lazy”. When I am glorifying myself, I say I’m working “smarter”. The truth is somewhere in the middle.

I am moving on to join Salesforce.com to steep myself in the datacenter environment and to help them to build systems that will deploy and support their networks. For all of the scripts that I have written so far, they have managed to be useful tools with longevity but have not yet added up to a sustainable and supportable system that would stand long after I leave. This is what I hope to achieve.

This is an exciting time for me and other code-friendly network operators/engineers/architects. And it is a tough challenge to tackle. A lot of systems people consider the network as a black box, as a given, as a fundamental requirement that you do not mess with. Indeed, even some level of network state is required to configure the network devices effectively.

People often wonder in their blogs why the network has lagged servers in becoming agile, virtualized, and orchestrated. But servers couldn’t have become virtualized and orchestrated without the network already there connecting everything.

So deploying servers depends on the network being there. And complex network deployment depends on the of the network being there. This makes deploying the final network state a meta-problem. How do you deploy the network and guarantee you’re not breaking it and your ability to fix it? How do you change state as frequently as needed without killing your network devices by a thousand tiny cuts?

I don’t feel defeated by these thoughts. These are the challenges. These are the interesting sorts of problems to solve. And I intend to spend part of this week thinking about it, and part of it resting, and part of it just reading, and part of it writing posts like this one.

See you soon.

-Franco

I just removed my work e-mail and contacts from my phone and a lot of contacts disappeared. Remember to set the Default Account for your Contacts so that they go some place that sticks with you!

When troubleshooting Junos class-of-service for aggregated interface bundles, always check the memberlinks too.
— me