So Long DF15, It Was VERY Personal

Introduction:
I began composing this entry upon returning to my hotel room after the closing of the Benioff/Harris Q & A session. I wanted to capture what was going through my head (and heart) before I lost it. I didn’t get to finish the whole thing as there were places to go and people to meet so I’m finishing it up for this week’s entry.

After Q & A:
I’m afraid that I might begin to be known as the over-dramatic emotional one, but I’m going to take that risk because — while it’s probably very true, it’s totally worth it and it’s who I am and it’s what I do. I speak from the heart and rarely have a “filter” so consider yourself forewarned.

As my third Dreamforce draws to a close, the sidewalks are clearing, the halls of Moscone west begin to look deserted leaving almost no trace that we were even here for 5 days…I can’t help but feel a little bit emotional. I was traveling up the escalator this morning with some friends and we were discussing how awesome it was to be able to move about without bumping into everyone, it was also kind of saddening because it meant that it’s all coming to a close. In my logical brain, it seems NUTS — Salesforce is just a platform, a tool, how can I be so emotionally invested in something like this to the point of absolute sadness when Dreamforce comes to a close? But my emotional brain feels something quite different and it’s hard to zero on on the words to describe, but here are my rambling attempts to put it into words:

You’re expecting me to say community, but we’ve been there before and while that still holds true it somehow feels deeper than that. Yes there is a very passionate community behind this crazy thing we call Salesforce and that’s what makes it unique, but inside that community are groups of people that form bonds that are somehow stronger than what I believe the term “friendship” can express.

I was talking with a fellow MVP about a certain individual now amongst Salesforce ranks. As we were talking, she became somewhat overwhelmed with emotion about why we are all here, and how they’re so proud of this mutual friend. I told her that I could relate and that I even tend to get somewhat emotional talking about the community and it was a relief to me that I wasn’t the only one that can get choked up while reflecting upon these intricate, complex, but beautiful bonds.

I mentioned that this trip was going to be personal, and for me it was very, very personal. I got to know some incredible people that until this week I only knew “virtually.” I got to connect with some new faces and now I cannot imagine my life without being able to meet them for quick chat or even just a smile and share collective yawns. Now that Dreamforce has come to a close, I am going to have to be content with these virtual interactions, and they’ll help but will pale in comparison to sharing the same space, and being “in that moment” with that person. Eye to eye, face to face.

I never thought of myself ever as a people person, never wanted to BE one, but I am. I am so VERY much a people person. I may not initiate with a complete stranger but once engaged with someone, I’d like to think I am in that moment and I certainly do enjoy the interaction. Sometimes those moments turn into something deeper, you find yourself wanting more of those moments with that person or group of people, and before long — they become family. You light up when you get to say “hello”, and when you hug them goodbye a part of you leaves with them and while you’ll still be interacting — on a daily basis quite likely — it’s just not the same as being there with them in person. So yea, call me the over dramatic emotional one, I’ll take that and own that shit because it’s true. I’m emotional and I don’t think I’d ever want to be any other way.

After Returning Home (reflection):
Friday night for me was very emotional and for the first time I perhaps revealed said emotion to a couple of people over dinner. You see, when I got named as a Salesforce MVP, I was overwhelmed and merely attributed it to the fact that I wrote a silly song that happened to resonate with people. For some time afterwards a couple of my colleagues would “check in” occasionally and ask me why I think I was given that honor and when I’d start my reply with “Well I wrote that song…” I would get either a slug in arm or a “shame on you” look. But while standing in line in the Devzone I was listening to so my friend Jen talk about items in the upcoming release or features for the platform that I am not at all familiar with. I took that chance to once again point out how I didn’t understand why I’m an MVP, but her answer was crystal clear, and matter of fact. At the time of her reply I wasn’t “emotional” and it was an awesome answer, it wasn’t until I was explaining her answer over dinner to someone else that it really hit me and yea, I got a little “misty” when I repeated it: “Because when I tweet or DM you at midnight for help, you’re there.” That answer means the absolute world to me and even reflecting back on it now I feel like something has clicked.

So yes, I’m emotional — perhaps to a fault, but I’m thankful for those emotions (it means I’m alive & human after all — like everyone else), and I’m thankful for all of the relationships that have formed because of the Salesforce community and I wouldn’t trade them for the world.

[EDIT: At the suggestion of the legendary @ZacharyJeans I’ve added a few photos that bring home the “family” feel]

:wq!

This Time It’s Personal

Shortly after Dreamforce last year, I talked about what I felt made the Salesforce world so different (hint, the community). I still believe that very much, and for that reason I’m looking forward to Dreamforce ’15 more than ever. I’m staffing the “Coding for Admins” booth in the admin zone on Wednesday from 10-Noon (PST). I hope to meet some new folks there and to help them out — not because that’s what is expected, but because that is what I enjoy doing.

I’m also looking to reconnect with those that I already know but don’t get to see often or at all save for events like this. For me — this is very personal. Many of these people are like those cousins that you love to hang out with but rarely get to see. Jenny Bamber (@Jenny_Bamber) recently released a “Unofficial Guide to Dreamforce”. I’d like to call your attention to page 7. On that page are five quotes. Three of these five are very similar. I’ll give you a second to figure out what the similarity is…go ahead….I’ll wait (screenshot below for the impatient).

bamber

Welcome back. Did you figure out what the similarities were? Three of those five quotes mention hugs. When I attending conferences, meetups, etc from other technology stacks, it was hard enough to shake hands, but “here” its like family. We hug, we laugh, we share stories both work related and personal, both happy…and sad. It literally feels like extended family (without that creepy uncle nobody talks about).

So this year, Dreamforce feels very personal for me and I’m looking forward to the stories whether happy or sad, the new friends and faces, the old friends….and the hugs.

See you next week!

:wq!

How To Create A Sublime Snippet

Those of you who know me, know that I absolutely cannot stand using bloated IDEs for development work. My disdain for Eclipse started way back when I was a day to day Java developer. Most of my Java projects however were so complex with framework stacked up on framework that one absolutely NEEDED to use Eclipse to keep things sane. It became a daily ritual. Boot up, fire up Eclipse and walk away…I’m pretty sure if two or more devs showed up at the same time and fired up Eclipse that the lights in the building would flicker.

When I moved on from Java into lighter languages like PHP and Python, I switched to using gEdit (on linux), and sometimes even vi. One of the more powerful features of gEdit was something called “snippets.” Snippets were little chunks of text that could be “spit out” when they were triggered by typing a magic string of characters and hitting tab. I went snippet crazy for awhile, creating snippets that built case statements, if loops, sql queries, etc. I’ve now moved onto using Sublime Text as my editor of choice and thankfully, Sublime supports snippets as well. (Apparently Eclipse also supports snippets, but I’m not much for putting lipstick on a pig…but I digress).

Today, I’m going to show you how to create your own snippets for Sublime Text. The first thing you want to do is identify some block of text that you find yourself typing often. I suggest something that involves multiple carriage returns, parameters, etc. Sure you could write a snippet to spit out a simple if/else block, but I usually don’t bother with that since that takes me just a moment or two to just type out (and I haven’t really had the time to sit down and write any snippets anyway so maybe one day, I’ll write that).

Today’s example I’ll create a simple apex:pageBlockSectionItem snippet. When I type my magic characters, it will spit out the following:

    <apex:pageBlockSectionItem >
        <apex:outputLabel value="My Label" />
        <apex:inputField value="{!myValue}" />
    </apex:pageBlockSectionItem >

Granted that’s not a ton of text to write but A) let’s keep this simple shall we? and B) if we are building a large VF page, it might be easier for us to simply type: apbsi and fill out a few parameters when we want to add a section item.

To get started, open up Sublime Text and choose: Tools->New Snippet
ToolsNewSnippet

That will spit out some default text for us:
snippetdefaulttext

Lets quickly walk through what those lines are asking for. The first line we care about here is the <content> line. This will be the actual content of our snippet. With the exception of the CDATA declaration and some placeholders for where we will be prompted for our input, this is the exact text that will be placed on screen upon typing your trigger text. As you can see, there is some strange syntax here like ${1:this} ${2:snippet}. These are tab stops. When our snippet pops up on the page it will put the cursor at our first tab stop (${1:this}). This is where will we be able to insert some text. If we don’t enter any text at this tab stop, it will default to “this”. If we hit tab again the cursor will be placed at the second tab stop (${2:snippet}). Again we can enter some text here or it will default to “snippet” — so the format is ${TABSTOPORDER:defaultvalue}.

Secondly we will want to specify the trigger text that will result in this snippet printing to the screen and doing its thing. This is done by specifying the value. (Currently commented out in the screenshot — I’m not entirely sure why it defaults to being commented out as I can’t imagine NOT having a text trigger, but I’m still learning). For our example we’ll use ‘apbsi’ so that whenever a user types apbsi followed by a tab, our snippet will show up.

You can also optionally specify a description and a scope. Description is self explanatory, but scope is not. I have my visualforce and apex code using HTML and Java respectively so if its an apex snippet I am writing, I set my source to source.java — if its Visualforce, I set it to text.html. (Its a sublime convention I guess…not *really* sure why one is source and the other is text but that’s what worked for me). Scope ensures that these snippets don’t activate in unrelated files. For instance, if I’m writing some python code and just happen to type in a snippet trigger for some java code, it won’t activate.

At the end of the day, I have this for my pageBlockSectionItem snippet:

    <snippet>
	<content>
		<![CDATA[
<apex:pageBlockSection title="${1}" columns="${2:2}"collapsible="${3:true}">
	<apex:pageBlockSectionItem>
	</apex:pageBlockSectionItem>
</apex:pageBlockSection>
        ]]>
</content>
	<tabTrigger>apbs</tabTrigger>
	<scope>text.html</scope>
</snippet>

Lastly, save the file. Ensure that you name it with an extension of sublime-snippet. I forgot to do this my first time through because I figured if sublime were smart enough to default my folder location, it would be smart enough to add the extension. Shame on me ;)

And now when I’m in a VF page and want to add pageBlockSection item, all I need to do is type: ‘apbsi’ and hit tab. While this is just a small example, having an army of these snippets built up can be a huge time saver for the more mundane bits of code we type on a day to day basis. Thankfully, someone seems to have created an Apex based snippet library already :) I’m still looking for a visualforce one though. If you know of one, let me know in the comments below or reach out to me on twitter.

:wq!