Thursday, September 18, 2014

The Beardsmith Barber: Boise's Premier Barber

Got a beard? If not, go get one. Once you do, you need to see Wendy Rose, The Beardsmith Barber of Boise, Idaho. Located at 3302 W Overland Rd, she's Boise's Premier Barber. She specializes in precision men's haircuts. When I say precision, I mean precision. Tired of having lines around your head because the person who's been cutting your hair can't properly blend and fade a cut? You need to see Wendy. More importantly, as The Beardsmith, she is adept at all manner of beard maintenance. Beard trimming. Beard shaping. Beard conditioning. Neck and cheek line-ups. Don't worry, she doesn't want to get rid of your beard, she wants to make it as stellar as possible. And that's exactly what she'll do. She's even coming out with her own line of specialized beard care products. Can't grow a beard for whatever reason? Kick back in The Beardsmith's chair and get a relaxing hot towel straight razor shave. You owe it to your face.

So get your beard (and your shaggy-ass haircut) down to The Beardsmith Barber of Boise. Wendy will care for your beard even better than you will. She loves the beard that much and is just that good. Contact her via one of the following places:

Wednesday, March 14, 2012

It's Not New York, But...

So it's official--I'm off to Portland, OR for 6 months. I took a short-term contract job leading a small team of software developers for a company called Shiftwise. Against my better judgement, I'll once again be working alongside Darrel Carver who, against his better judgement gave me a recommendation. I start on April 2, and will head to Portland a few days before that to get settled in. Fear not (or, quite possibly DO fear), I'll be back in the Treasure Valley quite often over the next 6 months, and after that I'll be back in Kuna permanently. If any of you make it to Portland, let me know and we'll get together for coffee, beer, lunch, dinner, tea, milk, martinis, Klondike Bars or parcheesi. My email address and phone number will remain the same, and as always I'll be on the ever-omnipresent Facebook.

Friday, March 02, 2012

Paying the Piper

It's a cash and carry world. Sometimes you pay a little. Mostly it's a lot. Sometimes, it's everything you have.

Sunday, February 26, 2012

A Family Affair

Never thought I would see this happen. My dad got his first tattoo at age 67. He, my brother and I all got the Summers family crest. Awesomeness. Isaac and Ben want to get it when they turn 18. Perfect :)

Friday, February 24, 2012

Fluidity

Life is fluid. Things and people come, things and people go. New things and new people come and you never know where you'll find yourself. Roll with it or get rolled over by it.

Tuesday, February 21, 2012

Few Things Make Me Laugh Hysterically. This Did.


Thursday, February 16, 2012

Finding Meaning In That Which Was Lost

Whenever people read the tattoo on my arm, I can see in their faces what they're thinking..."Um, whatever, why the fuck would you get that stamped on your skin?" And I understand. Sometimes even I find myself staring at it and thinking the same exact thing, especially given the twists and turns my life has taken over the last couple of months. I've had times when I want to get it lasered off, because no matter how hard I try, I can find no meaning in the words. They seem hollow and pointless. Yeah, six months after getting it. But then I remember that tattoos are signposts along the journey of our lives. They should always remain, because they tell a story of who and where we were at a specific point in time.

But I've finally found lasting meaning in the words. It's a reminder that what most people are told (and accept as truth) is a lie. A lie that's said so often, and taken for granted to such a degree that people never question the truth of it: "If you don't love yourself, nobody will." That saying, or some flavor of it, is repeated in self-help books, therapy sessions, Facebook posts, and innumerable other venues. It's usually said by or to people who are having a hard time loving themselves. It follows the "pick yourself up by the bootstraps" logic. Which is another lie--it's always used as an analogy for overcoming and conquering. But it's a feat that is physically impossible, and likewise it's almost always an emotional and mental impossibility for people. Those who are able to do it have no need to do it. The correct analog for "picking yourself up by your bootstraps" is something that's an exercise in futility, not of success, overcoming and rugged individualism.

The plain and simple fact is that many times we do need people to show us the way. No matter how hard we try, we can't convince ourselves of the things we want to believe about ourselves. More often than not, it remains impossible to overwrite the tape that's looping in our heads, the tape that tells us who we are, what we're capable of, and more insidously, who we aren't and what we're not capable of. We try to love ourselves so that others can love us. But it's kind of like telling a person with a broken leg that in order to get it fixed, he must first walk to the hospital. Yet people refuse to understand the dichotomy, they keep repeating the lie because it sounds good. More to the point, I think they keep repeating it because that's the only option they have. They don't have someone in their life whom they can watch love them in a way that shows them the way. That isn't to say they don't love the people in their life or that the people in their life don't love them. But if someone is constantly having to remind themselves of their value, having to continually assert positive thoughts about themselves, there is one inescapable truth--they have no one in their life who is able to love them in a way that shows them their true value. They don't have someone who is capable of overwriting the tape in their head with the good, real truths about themselves. The truths they so desperately need to believe. When we lack someone we can watch love us in this way, the only thing we're left with is trying to love ourselves, to pull ourselves up by our own emotional bootstraps, oblivious to the fact that as we pull up, we exert equal force in the opposite direction which ultimately leaves us exactly where we started.

And that's why the words up my sleeve have meaning and lasting value. They speak truth. They tell something of the world, not as it should be, not as it's said to be, but as it really is. Many times we do need someone to show us that we're worthy of being loved, that we have value, and that we are enough. We need that in order to believe it, before we believe it ourselves. This is evidenced by the fact that we keep having to affirm the things we want to believe about ourselves; we affirm them ourselves because the people we've chosen to have in our life--even though they may be wonderful people, even though they may care about us deeply--aren't equipped to speak the language that affirms it for us. It is then that we fall back on the only thing left at our disposal, even though it is utterly ineffectual. And that is a tragedy of the highest order.

Monday, February 13, 2012

sometimes it's better to Lose Yourself

If you had one shot, or one opportunity to seize everything you ever wanted in one moment, would you capture it? Or just let it slip?

Sunday, February 12, 2012

Farewell To A True Hero

My Uncle Ron died today. He was 58. He was lucky enough to find a soul mate in Aunt Janet who didn't see him and his free spirit as something to put up with, but as someone with whom she could live a crazy adventure called life. He lived a very simple life (but was far from a simpleton), and he had no use for convention. Sell everything and move to Alaska just because? Sure. Four or five times. Build a house from scratch? Sure. And I mean from scratch. As in, go cut down trees, mill the wood and start building. Twice. And he's the only guy I know who could figure out a way to get the government to pay him money to fly around in his ultralight and shoot coyotes.

There's a quote going around that people like to cite (the exact verbiage varies, but the theme is always the same). It really does describe the life Ron lived:


Life should not be a journey to the grave with the intention of arriving safely in a pretty and well preserved body, but rather to skid in broadside in a cloud of smoke, thoroughly used up, totally worn out, and loudly proclaiming "Damn! What a Ride!"

His life was quite a ride indeed. He lived with passion, did the things he wanted to do, chased the dreams that were in his heart, and had no fear of making the wrong choice. If something didn't work out, he moved on and found something else. But honestly, I don't think anything ever DIDN'T work out for him. It may not have been the result he had envisioned when he started, but his life was always enriched for having done it, and he took the experience as just that...an experience...life lived...a thing done...a dream chased...a passion embraced. He lived with no regrets, because the only regrets in his mind were the things not tried. He truly did prefer a life of oh well's over a life of what if's. And he lived more life, and enjoyed more days of his life, than probably anyone I know. I've always lived vicariously through him and his complete and utter lack of fear to just do what the heart calls to do. He's the only person I think I've ever referred to as a hero. He really was. He was an example of how a human being should live their life. To the fullest. On one's own terms. Without fear. Without regret. You will be greatly missed Uncle Ron, and you will leave a legacy in my heart, one that makes me strive to embrace life as though it is to be lived, experienced and conquered. Thank you for being a living example that casting off fear, following your heart and diving in head first pays off.

Passion

Those who restrain desire, do so because theirs is weak enough to be restrained.
-- William Blake


It is impossible to love and to be wise.
-- Francis Bacon

Saturday, February 11, 2012

Life Truth 310.4

The times when we feel we're thinking too much are the times when we refuse to think about a certain aspect of the situation, or we refuse to embrace the possibility of an unwanted truth. In these cases, thinking will always make us weary, and we will never find peace in the matter.

Wednesday, February 08, 2012

But It Doesn't FEEL Wrong

ob·ses·sion [uh'b-sesh-uh'n]
noun
1. The domination of one's thoughts or feelings by a persistent idea, image or desire.


com·pul·sion [kuh'm-puhl-shuh'n]
noun
1. The state or condition of being driven, especially to a course of action.

Thursday, January 26, 2012

Know Thyself

It is one thing to know who we are. It is quite another to truly understand what informs who we are.

Tuesday, January 17, 2012

Perseverance or Futility?

Sometimes the true test of character isn't whether you have the will to keep holding on, but whether you have the strength to let go.

Sunday, January 08, 2012

The Grand Flop

Dan Savage:      1
Jeff Summers: 0

Sunday, December 18, 2011

Of all forms of caution, caution in love is perhaps the most fatal to true happiness.


--Bertrand Russell

Wednesday, December 14, 2011

Code Red

Fear is not in the habit of speaking truth; when perfect sincerity is expected, perfect freedom must be allowed; nor has anyone who is apt to be angry when he hears the truth any cause to wonder that he does not hear it.

--Publius Cornelius Tacitus

Monday, December 12, 2011

The Unwelcome Guest

When we can't seem to find clarity no matter what we do, there is likely a fundamental truth we have been unwilling to examine honestly. Accepting and embracing things as they are is the only path to true clarity.

Saturday, December 10, 2011

Truth, Halved

Ignoring a compelling part of a complex situation adds confusion and impedes one's ability to arrive at the right decision.

Friday, December 09, 2011

The Quiet Helpers

Emotions are almost always seen as bad, as things that need to be set aside in favor of reason. Yet there is something objective behind every emotion; a perspective that needs to be considered, a story that begs to be heard, a need that is fighting for air, a fear that needs to be overcome. Rather than striking down our emotions with reason, we should use our faculties to examine our emotions and listen to what they're trying to tell us.

Sunday, December 04, 2011

By Definition

In the absence of all meaningful expression, love is meaningless.

Monday, November 21, 2011

It Bears Repeating

You gotta stop dancin' with your head.

Saturday, May 08, 2010

Tutorial: How to Change the Charging Battery Icon on a Jailbreak iPhone with Winterboard

Here's how to make a custom icon to replace the big green battery that displays on the lock screen when your iPhone is charging. This tutorial assumes that you have Jailbreaked your phone and have installed OpenSSH and WinterBoard on your phone (via the Cydia app) and have an SSH client installed on your PC/Mac (such as WinSPC for Windows or Terminal for Mac/Linux).

Step 1 - Create the Theme Directory



  1. Open an SSH connection from your PC to your iPhone and navigate to the root directory

  2. Navigate to Library/Themes. Note that the Themes folder is actually a shortcut, and will take you to the following physical directory: /private/var/stash/Themes.XXXXXX (XXXXXX is a series of letters and numbers that differs on each phone).

  3. Within the /private/var/stash/Themes.XXXXXX folder, create a new folder and name it whatever you want your theme name to be, ending with .theme, for example My Custom Battery.theme

  4. Click into the folder you just created and create a folder named Bundles

  5. Click into the Bundles folder and create a folder named com.apple.springboard


Step 2 - Create Images


The charging battery icon is actually a series of 17 .png files. As the phone charges, the phone displays the proper image.

  1. Find or create a series of 17 images. If they are not already in .png format, save them as such using your favorite image editor such as Photoshop, GIMP (free), or Aviary (free).

  2. The image size of the files should be 264 pixels wide by 129 pixels high. This will ensure that the icon is properly centered and sized on the screen.

  3. The files must be named in series, from BatteryBG_1.png to BatteryBG_17.png

  4. If you do not want a reflection of your icon to show up underneath it on the lock screen, create a fully-black .png file that is 1 pixel wide by 129 pixels high and name it BatteryReflectionMask.png


Step 3 - Move File and Use Your Theme


  1. Using your SSH client, copy all of the .png files into the
    /private/var/stash/Themes.XXXXXX/>My Custom Battery.theme/Bundles/com.apple.springboard directory you created in step 1.

  2. Open the WinterBoard app on your iPhone, and go to the Select Themes section. You should see your new theme at the top of the list.

  3. Select the theme and close WinterBoard. This will cause your phone to respring. After it does, your new theme is in use.

  4. Plug your charging cable into your phone and you'll see your new battery indicator.

  5. Enjoy

Friday, April 09, 2010

Client-Side Validation: How to Validate Controls in Each Pane of an AjaxControlToolkit Accordion

I'm using the AjaxControlToolKit Accordion, and I needed to validate the controls in each pane before allowing one to navigate to the other panes. I wanted everything to be client-side, because I don't want any post-backs until the whole form is validated. Since I didn't have any luck finding any good examples, here's one I put together. It uses the RequiredFieldValidator control as well as the ValidatorCalloutExtender. If you don't like the fly-out validation, just remove the ValidatorCalloutExtender controls as well as the Display="Hidden" attribute in the RequiredFieldValidators.

Sorry about the funky formatting. A copy/paste into a new aspx file should work with no modifications. I also have a downloadable self-contained aspx file. Enjoy.


<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Accordion</title>
<style type="text/css">
.accordionHeader
{
border: 1px solid #2F4F4F;
color: white;
background-color: #2E4d7B;
font-family: Arial, Sans-Serif;
font-size: 12px;
font-weight: bold;
padding: 5px;
margin-top: 5px;
cursor: pointer;
}

.accordionHeader button
{
cursor: pointer;
}

.accordionContent
{
background-color: #D3DEEF;
border: 1px dashed #2F4F4F;
border-top: none;
padding: 5px;
padding-top: 10px;
}

.accordionLink
{
background-color: #D3DEEF;
color: #ffffff:
}

.invalidField
{
background-color:#fffacd; /* same color as the background of the validation popup */
}
</style>
</head>
<body>
<script type="text/javascript" language="javascript">
var acc;
var header;

function pageLoad() {
// get a reference to the accordion
acc = $find("MyAccordion_AccordionExtender");

/* for each of the panes, remove its click handler, and add our own;
using different methods for each pane would be unnecessary in our example
if we could include parameters in the method name, for example:
$addHandler(header, "click", navigateToPane(0));

we can't do that, so we set up a method name for each one; */
var index = 0;
header = acc.get_Pane(index).header;
$removeHandler(header, "click", acc._headerClickHandler);
$addHandler(header, "click", navigateToNamePane);

index = 1;
header = acc.get_Pane(index).header;
$removeHandler(header, "click", acc._headerClickHandler);
$addHandler(header, "click", navigateToContactPane);

index = 2;
header = acc.get_Pane(index).header;
$removeHandler(header, "click", acc._headerClickHandler);
$addHandler(header, "click", navigateToDemographicsPane);
}

// this function has to be here or there will be an error when leaving the page
function pageUnload() {
$addHandler(header, "click", acc._headerClickHandler);
}

function navigateToPane(paneIndex) {
// get a reference to the accordion
var pane = $find('MyAccordion_AccordionExtender');

// validate the controls in the current pane, using the ValidationGroup
// of the pane, e.g. "grp0" or "grp1", etc; if it's valid, navigate to
// the pane that corresponds to the index passed in
if (Page_ClientValidate('grp' + pane.get_SelectedIndex()))
pane.set_SelectedIndex(paneIndex);
}

function navigateToNamePane() {
navigateToPane(0);
}

function navigateToContactPane() {
navigateToPane(1);
}

function navigateToDemographicsPane() {
navigateToPane(2);
}
</script>

<form id="form1" runat="server">
<ajaxToolkit:ToolkitScriptManager runat="server" ID="ScriptManager1" />

<ajaxToolkit:Accordion ID="MyAccordion" runat="server" HeaderCssClass="accordionHeader"
ContentCssClass="accordionContent" FramesPerSecond="40" TransitionDuration="250"
AutoSize="None" SelectedIndex="0" RequireOpenedPane="false" SuppressHeaderPostbacks="false">
<Panes>
<ajaxToolkit:AccordionPane ID="AccordionPane0" runat="server">
<Header>Name</Header>
<Content>
Last Name: <asp:TextBox ID="txtLastName" runat="server" />
<asp:RequiredFieldValidator ID="reqLastname" runat="server" ValidationGroup="grp0" ControlToValidate="txtLastName" Text="" ErrorMessage="Last Name is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vceLastName" TargetControlID="reqLastName" HighlightCssClass="invalidField" />
<br />
First Name: <asp:TextBox ID="txtFirstName" runat="server" />
<asp:RequiredFieldValidator ID="reqFirstName" runat="server" ValidationGroup="grp0" ControlToValidate="txtFirstName" Text="" ErrorMessage="First Name is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vceFirstName" TargetControlID="reqFirstName" HighlightCssClass="invalidField" />
<br />

<!-- the "Continue" button isn't necessary; it's just an added item to make navigation a bit more intuitive -->
<button onclick="navigateToPane(1);" style="float:right;" title="Continue to Contact Info">Continue</button>
</Content>
</ajaxToolkit:AccordionPane>
<ajaxToolkit:AccordionPane ID="AccordionPane2" runat="server">
<Header>Contact Info</Header>
<Content>
Phone: <asp:TextBox ID="txtPhone" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqPhone" runat="server" ValidationGroup="grp1" ControlToValidate="txtPhone" Text="" ErrorMessage="Phone is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vcePhone" TargetControlID="reqPhone" HighlightCssClass="invalidField" />
<br />
Email: <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqEmail" runat="server" ValidationGroup="grp1" ControlToValidate="txtEmail" Text="" ErrorMessage="Eamil is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vceEmail" TargetControlID="reqEmail" HighlightCssClass="invalidField" />
<br />

<!-- the "Continue" button isn't necessary; it's just an added item to make navigation a bit more intuitive -->
<button onclick="navigateToPane(2);" style="float:right;" title="Continue to Demographics">Continue</button>
</Content>
</ajaxToolkit:AccordionPane>
<ajaxToolkit:AccordionPane ID="AccordionPane3" runat="server">
<Header>Demographics</Header>
<Content>
Age: <asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqAge" runat="server" ValidationGroup="grp2" ControlToValidate="txtAge" Text="" ErrorMessage="Age is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vce" TargetControlID="reqAge" HighlightCssClass="invalidField" />
<br />
Salary: <asp:TextBox ID="txtSalary" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqSalary" runat="server" ValidationGroup="grp2" ControlToValidate="txtSalary" Text="" ErrorMessage="Salary is required" Display="None" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" id="vceSalary" TargetControlID="reqSalary" HighlightCssClass="invalidField" />
</Content>
</ajaxToolkit:AccordionPane>
</Panes>
</ajaxToolkit:Accordion>
</form>
</body>
</html>

Thursday, January 21, 2010

Christian Hero Quote of the Day

Burn down their synagogues, forbid all that I enumerated earlier, force them to work, and deal harshly with them, as Moses did... If this does not help we must drive them out like mad dogs. - Martin Luther, in his book On the Jews and Their Lies

Tuesday, January 12, 2010

Random Thought of the Day

Don't fret precious, I'm here. Step away from the window and go back to sleep.

Monday, January 11, 2010

Random Thought of the Day

I work like I drink. Alone. Or with a monkey watching.

Monday, November 02, 2009

Random Thought of the Day

You gotta stop dancing with your head.

Friday, September 18, 2009

Random Thought of the Day

Always be closing if you want the knife set.

Thursday, September 17, 2009

Random Thought of the Day

Wrongheadedness knows no color, which is why my shortie robes only come in topaz.

Wednesday, September 16, 2009

Random Thought of the Day

I don't need an adviser to know that Bud don't make me wiser.