Skip to content

Author: Lucas

Resident of Akron Ohio, Seasoned Technologist and Software Engineer, President of Holeshot Software, Homebrewer, BMW Enthusiast, Sigma Tau Gamma Alumni from Miami University

You Need to Wrap That S*** Up B

I was recently writing a test for an engine that takes in 2 points and calculates the mileage between them.  I had already been given 2 distinct list of points (zips in this case) as input, but for the purposes of this demo I will just stub them out.  It is irrelevant really what the engine takes in, I just wanted to show case this “new to me” method on Enumerable called Zip.

[Test]
public void NonParallelMileageTest()
{
   var originPoints= PointHelper.GetPoints(PointType.Origin);
   var destinationPoints = PointHelper.GetPoints(PointType.Destination);

   IEnumerable<Point> origin100Points = originPoints.Take(100);
   IEnumerable<Point> destination100Points = destinationPoints.Take(100).Reverse(); //to ensure most of the points are different
   List<Tuple<string, string>> originDestinationPair =origin100Points.Zip(destination100Points, (origin, destination) => new Tuple<string, string>(origin.Zip, destination.Zip)).ToList(); //contains 100 elements
   foreach (Tuple<string, string> pair in originDestinationPair
   {
      MileageHelper.GetMileage(pair.Item1, pair.Item2);
      Assert.Greater(mileage, 0);
   }
}

One enumerable can “zip” another enumerable, and input is
1.  the other enumerable, and
2.  a lambda expression with inputs of an item from each enumerable and how you want to create your new object.

In this case I am creating a Tuple (it’s ok, I’m in a test).

Pretty cool.

One other thing to be aware of about the method: if the 2 enumerables you are “zipping up” don’t contain the same amount of elements, it will use the lowest collection count.  See comment above in the sample that the resulting list will contain 100 elements.

So this example only contains 99 elements,

[Test]
public void ParallelMileageTest()
{
   var originPoints= PointHelper.GetPoints(PointType.Origin);
   var destinationPoints = PointHelper.GetPoints(PointType.Destination);
   IEnumerable<Point> origin100Points = originPoints.Take(100);
   IEnumerable<Point> destination100Points = destinationPoints.Take(99).Reverse(); //to ensure most of the points are different      
   List<Tuple<string, string>> originDestinationPair = origin100Points.Zip(destination100Points, (origin, destination) => new Tuple<string, string>(origin.Zip, destination.Zip)).ToList(); //contains 99 elements
   Parallel.ForEach(originDestinationPair , (pair) => MileageHelper.GetMileage(pair.Item1, pair.Item2)
}

I have really been meaning to blog about the Parallel namespace as I have been using it quite a bit lately and love it.  More on that later.

Leave a Comment

Codemash 2012, Is there anything else like it?

I bet there is not.  If there is, I want to see it.

Seriously, Codemash is a “down-home/local” conference that isn’t “down-home” or “local” and one that brings the likes of Scott Hanselman (@shanselman),  and other big names in the industry, just to give an hour long talk, not to mention the excellent key notes that are always good.  When I got home and started to read the twitter feeds on #codemash, the general consensus was HUGS!!!  I may be wrong here, but the twitter feed from #build did not give the aura of love.  Codemash is also a small world.  Not only did I run into a few buddies from college that I haven’t seen in years (Bruce Hubbard. @brucehubbard and Wes Grollmus, @wesg92), I found out that Jon Kruger (@jonkruger) is married to one of my wife’s friends that I shared a locker with for 4 years in high school.  You walk out of this conference thinking that what was once just twitter handles are now actual friends.

With all of that touchy feely stuff aside, the content is just downright amazing.  Codemash has “the law of two feet”, which translates to: If you aren’t learning or contributing….leave without recourse.  Well, not once the whole 3 days did I feel that way.

If you been to the conference but haven’t attended the precompiler, please make an effort to do so.  I actually think it is the most important day of the week.  As I have said before in previous Codemash posts, the people are what make Codemash special, and the precompiler is probably the best place to do that in a semi-professional setting (as opposed to room parties, of course).

/* if you want to read about how I spent my time at this event

This Codemash was slightly different for me this year.  As my work is embarking on some technology that isn’t as familiar to me as what I have been doing for the past 10 years in .NET.  I tried to go sessions where I wasn’t very familiar with the subject matter.  That, of course, is the whole premise of this conference, but I have always spent most of my time strengthening the things I knew, instead of exploring things I didn’t.  This year I spend the morning session of the precompiler with Leon Gersing  (@rubybuddha) and Scott Walker (@pragma_tech) as they walked us through what was essentially 53 examples of JavaScript gotchas.  They were, in fact, proponents of the language, but wanted to point out some of the nuances that would otherwise not seem to make sense to someone like me, and that was extremely helpful.  The afternoon session I spent with Clark Sell (@csell5) and Brandon Satrum (@BrandonSatrom) while they walked us through where HTML5 is, and gave us a wealth of labs and experiments to try stuff on our own.  This class was great, my only complaint was that it should have been a full day, there was so much good content and the 2 speakers spent quite a bit of time putting together these labs.  Four hours just wasn’t enough.  I explained this to Clark and he agreed, but I would have come on Tuesday if I knew I could have had that much hands on stuff to go through.

Thursday was equally as informative.  I actually had so many sessions I wanted to see, it was HARD to narrow down which to go to.  On the contrary, for the morning session, I knew I was going to see Scott Hanselman’s (@shanselman) talk on the Web Stack of Love.  There is a reason this guy is a sought after speaker, and there is a reason there is standing room only in his talks.  He is that good.  Next, Rich Dudley (@rj_dudley) showed us about building applications in Windows 8 with HTML.  He was very energetic (which I am told is baseline) and fun and informative.   Glenn Block’s (@glock) talk on Node.js and Azure was next, and man, Node is pretty cool.  The talk seemed to be more about Node than Azure, which was fine with me given that the likelihood of my current work involving Azure is small, but cool nonetheless.  The rest of the day I learned about CoffeeScript from Brandon Satrum (@BrandonSatrom) and Roslyn from Dustin Campbell (@dcampbell) .  CoffeeScript was very intriguing to me as someone who doesn’t write a lot of JavaScript.  The language seemed to make more sense to me, and it guards you from some of the gotchas that I learned about on Wednesday.  While CoffeeScript is not a replacement for learning JavaScript, I can see it as a valuable tool in doing so.  The Roslyn stuff was also pretty awesome.  It left me wondering if something like this will improve such things as Resharper, or make it harder for them to provide value if a lot of what they do is baked in to Visual Studio…

Friday.  The bittersweet last day of Codemash.  The day you have a “hung over eagerness”to continue from what you learned earlier in the week.  Thankfully, the content was still just as good as ever, and I actually had up to 4 classes per session that I wanted to attend.  Phil Japiske (@skimedic) gave a talk using JustMock that I think I can apply to my current work, and that is always exciting.  Next I attended another Scott Hanselman (@shanselman) talk on Dealing with Information Overload.  This was basically a class on lessons learned by Scott on managing your life and your work.  The biggest takeaway from this sessions was “if there is something in your life that isnt improving it or making you money, delete it”.  He talked about how a large amount of developers have trouble sleeping (myself included) and that is because we are doing a for loop in our heads of the things we didn’t get done and the things we want to do.  The second takeaway was that (paraphrasing here) “every developer should have a blog, I don’t care how mundane the content”.  Every year Codemash reignites my writing in this blog, and this year was no different.  Lastly, I attended a class from Bill Wagner (@billwagner) entitled “C# Stunt Coding”.   Caching the expression tree of a reflection call and compiling it on the fly for subsequent calls to eliminate the performance hit!  Oh my!

*/

I just cant say enough good things about this event.  It is truly that good.  My company sent 10 developers this year, and to quote Michael Letterle (@mletterle) in reference to his company sending just as many: “#thatishowyoudoit”.   I’m already counting down to next year.  Big thanks to the organizers and attendees that make it awesome.

Leave a Comment

LINQ Order By Fun

I came across something at work the other day that I found interesting, and since I am never afraid to admit that I don’t know something, I thought I would post it.  Other than the fact that I used anonymous types to create the sample objects as opposed to writing classes, the code explains itself:

Public Sub TestLinqOrderBy()
        Dim f1 = New With {Key .Commodity = "Commod1", .Qty = 1000}
        Dim f2 = New With {Key .Commodity = "Commod2", .Qty = 2000}
        Dim f3 = New With {Key .Commodity = "Commod3", .Qty = 3000}

        Dim list1 = GetAnonymousList(f1)
        list1.Add(f1)
        list1.Add(f2)
        list1.Add(f3)

        'functionally these 2 calls are identical, since they are the same the rest of the example will use var
        Dim var = list1.OrderByDescending(Function(p) p.Qty) ' sort the list descending by quantity
        Dim var2 = From p In list1 Order By p.Qty Descending

        ' the list var now looks like this:
        'Commodity = "Commod3", Qty = 3000}
        'Commodity = "Commod2", Qty = 2000}
        'Commodity = "Commod1", Qty = 1000}

        'however, these will return you an IOrderedEnumerable (not an IEnumerable like most other simple linq queries), essentially a sorted list that will keep it sorted on the key
        'therefore, as statement like this may give you a list back you didnt expect because after the set has occurred, the IOrderedEnumerable will resort and keep itself sorted
        For i As Integer = 0 To 2
            var(i).Qty = New Random(i).Next(3000)
        Next

        ' since the above code changes the key of the list (Qty), it will set and reorder
        ' since you are looping through the list by index, you may not be changing the value in the list you thought you were when the loop began, 
        ' and the runtime will not tell you that you have modified the collection while looping

        ' the thing to note here is that if you specifiy an order by in your linq statement, that you are getting back a list that will always be sorted by the key, unless…
        ' if you want to sort a list with linq and then get it back without the live sorting, you can ToList your IOrderedEnumerable to return an IEnumerable
        Dim var3 = (list1.OrderByDescending(Function(p) p.Qty)).ToList  ' sort the list descending by quantity without live sorting
        'or
        Dim var4 = (From p In list1 Order By p.Qty Descending).ToList

        'YOU CAN PASTE THIS CODE INTO A NUNIT TEST CLASS AND STEP THROUGH IT IF YOU WANT TO SEE WHAT IS HAPPENING
    End Sub

    Private Function GetAnonymousList(Of T)(ByVal itemOfType As T) As List(Of T)
        Return New List(Of T)
    End Function
Leave a Comment

Picture yourself behind the wheel of the Ultimate Driving Machine

I have had a number of people personally ask me to put my opinions about this on paper, specifically “How to buy a CPO BMW”.  If you don’t already know, I have what some would call a mild obsession with BMW, and by mild I mean SUPREME BRAND LOYALTY.

That doesn’t mean that I am willing to break the bank for one.  Before my wife’s 328xi, I haven’t owned a BMW less than 10 years old.  Before you make judgment, I have almost 400,000 miles on my 2 BMW’s, I have loved every second being behind the wheel of them, and I paid less combined than you did for that Camry, but I digress… I am not going to go into the countless reasons why I think BMW’s are the best car to own, but I am going to go into some tips on how to buy them.  Before you quit reading this because you don’t think you can afford a BMW, think again.

BMW’s Certified Pre Owned program is a certification placed on a car by the dealership.  Before the car can even be considered as a CPO, it has to sight unseen pass a certain number of criteria (miles, no body damage, year of production, etc.).  Even the smallest aesthetic flaw can keep a BMW from being granted the CPO title.  Generally these cars come from 30,000 mile leases.  Then the dealer “refreshes” the car to make it pass a much more extensive quality checklist.  This could mean brand new tires, new brakes, etc. etc.  Then, they sell it as a CPO and offer it with what is essentially the closest you are ever going to come to a new car warranty on a used car.  The warranty gets extended 6 years from the production day, therefore, 2007 CPO’s are warranted until 2013.  In addition, they are often sold with new-car interest rates (we got 1.9%, but it all depends on the current specials BMW financial is running at the time).  If your credit is good, ask them to take a point off the rate, some dealerships will eat the point to sell the car.

So, there are a few things that you need to know before you start looking:

1)  What do you want?  What are the bare minimum features that you are willing to have?  My wife whom we were shopping for luckily already had this down pat:  “I want 4 wheel drive, heated seats, sunroof, a a CD player.”  Those were the deal breakers.  If you don’t know that going in, then employing this strategy will be tough, because you can get lost in a sea of features in these cars.

2)  What is the absolute maximum you are willing to spend?  We are not going to start negotiating there, we are actually going to probably start about 3000-5000 dollars less.  But, you need to know this number so you know when to leave.  This is, after all, a business deal.  A good gambler knows when to walk away, you should too.

A friend of mine once taught me how to buy a new BMW, and I mean one that you are having made and delivered from Germany (because then, you truly know what you want, and what you are going to get).  Spec your car out completely, pick a price that you find fair, go to every dealership in the area and offer them that price.  If you make it to all of the dealerships in the area and they have all turned you down, raise your price by X (my buddy used 50 bucks, that could take a while these days) dollars and do it all over again, all the while making every dealership know your motive.  At some point they are going to take what they can get because a little profit is better than no profit.

You can use parts of that strategy when buying a CPO BMW as well.  If you know what you want, find the dealerships that have cars that fit your criteria.  Look for ones within 6000-7000 of your price range and that have your minimum criteria and set up appointments at the dealership (setting an appointment up will keep you from standing around looking dumb waiting for someone to come out and talk to you, and it lets the salesman know that you are serious).

Rule #1 – Know your product.  It really helps to know what you want to buy like the back of your hand, and it is also good to know the market in the area, because you are going to go around to all the dealerships in the area to see what they have to offer, right?  A good salesman will back off if you show that you know what you are talking about.  They don’t like to screw with you if they know you can call them on it.  I had 2 salesmen say, “You know what, I am going to shut up because it is obvious you know this car better than I do”.  You don’t have to be obsessed like me, but a little research can go a long way.  Then you stop getting the potential salesman shtick, another characteristic to tell them that you mean business.

Rule #2 – Take your time.  One of the main facets of this strategy is that you have to have time. If you need a car right NOW, this isn’t the way to do it.  If you don’t care about the extra 5 grand, this probably isn’t for you.  If you are in a rush to buy, you aren’t going to get the best deal.  Our whole process took about 2 weeks, but we were shopping a few months before to get some salesman’s cards and see what was on the lot.  We didn’t even drive anything, just a little recon.

Rule #3 – Shop at the end of the month.  CPO BMW’s have a 60-90 day turnover where if they have been on the lot that long, BMW mandates that they go to auction.  So, if you shop at the end of the month, there is a good chance that there will be some cars on the lot that the dealership is HIGHLY motivated to get rid of.  ALWAYS ask them how long the car has been on the lot.  If it is anything over 2 months, you’ve gotta good chance of knocking some serious dough off that sticker.  If it just got there, maybe it will be there in 2 months.  For that matter, look often.  New CPO’s are hitting the lot almost daily in some cases.

Rule #4 – Be willing to walk away.  After you have scheduled your appointments, go drive the cars, find out if you would be happy behind the wheel for the next 5 years, make sure this is a salesman you feel comfortable with (if you do buy the car from him, it is nice to always have someone to call about the car in the future).  Every dealership is going to try and crunch some numbers with you that night.  Don’t do it, at least not tonight.  There are 5 BMW dealerships in the NE Ohio area, so in our case, we had a lot more shopping to do.  There is a good chance that even when you get in the negotiation room that you will want to walk away.  It gives the dealership time to think about what they are willing to get rid of the car for.  Consider it recon for yourself on where the market is, and most importantly get a feel for how badly they want to sell the car.  Also, because of rule #2, it is very possible that you may lose the opportunity on some cars, but there will be more, I promise.  This CPO market is VERY driven by inventory.  Some dealers will have killer prices on X3’s, and the other has expensive X3’s but super deals on 328xi’s.

Rule #5 – Use what you have learned from shopping and researching.  Once you get to a point where you are ready to buy, remember why you have been doing all this research!  It would be a waste to have spent all that time and been too shy not to voice it.  If a dealer has offered you what you think is a decent price and you have walked away (which you should have at least once), let the other dealers know what there competition is.  Don’t be an asshole, you don’t have to name names or be threatening, but you can say “Hey Salesman X, your competition is a X dollar offer right now, if you cant beat that, I won’t waste either our times”.  I had one dealer tell me he could not touch that price, and I had the other say “Yeah, I can beat it by 1000 bucks”.  By the way, that was the car we bought.

Rule #6 – Learn a poker face.  Unless it is free, no matter what number that dealer throws at you, be as unimpressed as the first time you tasted a Bud Light.  Since you did your research, you already know what you want to pay for the car.  It is very appropriate to say something like “I need that to be around X dollars or we flat out cant make a deal here.”  You would be surprised how much you can get knocked off of a car without even saying a word.

Negotiation will almost undoubtedly be a little uncomfortable, but it is a good thing to learn across many aspects of life, from negotiating a raise at your job, to buying a car, to negotiating a price on a house, to buying something at a gun/trade show.  You are out to do what is best for you, and the dealership is out there to make a little money.  There is a balance there, but it is one you generally have to fight for.

Lastly, when you do buy a car, let the other salesmen know that you found something.  You should have all of their contact info by now, and I think it is just common courtesy so they don’t have to keep looking for a car that meets your needs.  Plus, I have never met someone that I have talked into a BMW that didn’t buy one again, and next time the “other guy” may have a better deal, and knowing someone the next time you go shopping is one less step in the process.

Using all of these strategies, I was able to get what I thought was a decent number off the sticker, a warranty till 2013, valet service, loaner cars when it is being serviced, and all the other luxuries you get from buying a new BMW (that not too many others offer, btw).  With CPO prices on some cars less than 20K, it is absolutely possible that you CAN afford the Ultimate Driving Machine.  Besides, go look for any warranted new car for around 20 grand with all of those amenities, you aren’t going to find very much, and you won’t find anything the caliber of a BMW.

Leave a Comment

CodeMash 2010, the Ocarina of Time

Well, CodeMash 2010 is in the books, and once again it was an awesome experience.  I find that throughout the whole conference I come up with tons of ideas to write about, I mean itching to write about, and then when I get home, and the whirlwind of reality hits me at work, here I am a week later and I haven’t written a thing…  Boo on me.

I arrived at the Kalahari Tuesday evening to avoid having to get up while it was still dark outside, and hope that I will be awake enough to be interactive in the “highly interactive precompiler sessions”.  I am starting to think that the precompiler portion of this conference is the most important day to attend.  I started off in the End To End Coaching session with Steve Harman and David Laribee.  Much like the similar session I attended last year with Dave Donaldson, both Steve and David were cool, down to earth dudes and the session was entertaining, educating, and fun.  The reason I think sessions like this are so important before the conference starts is that you are practically forced into meeting and talking to people.  I know, it’s kinda touchy feely hippie stuff, but the first exercise we had to do was interview a person and report our findings to the group.  I met a guy named Mike Wood (@mikewo) and found out that he once was very interested in law enforcement and was a cop in his former life.  I thought that was a pretty interesting story at a code conference.  Basically, because of this session, I had made a handful of friends that I found myself waving to or stopping to talk to in the halls throughout the rest of the week.

The second half of the day I attended Mary Poppendieck’s session on Competency and Leadership in Software development where she went into topics about expertise and team dynamics.  The one major thing I took away from the session was that she validated what I thought the characteristics of a highly efficient team were.  I was part of a team once that I felt she was describing as if she was there.  That made me feel good that my feelings about our now defunct team weren’t being pulled from thin air.  The other main highlight of this session was that I spilt @CharlieSears coffee all over himself when I punched him the in shoulder (unbeknownst to me that he was holding a freshly poured scalding hot cup of coffee).  After I hit him (lightly, he is kinda fragile-ish looking), he turned around with fury in his eyes ready to cuss out whoever it was that left a Gorbachev-style burn on his leg, to say “Holy shit, Lucas, what’s up?!?!”.  I told him that what this meant was that I was once again going to have to refer to him in my CodeMash post mortem post, so there you go.  Sorry about the coffee Charlie……

Thursday I woke up with the same excitement and exuberance that I have every year at this conference.  There was so much interesting content this year that I was actually having trouble deciding what to do all day.  I got to learn about Silverlight, Powershell, compete in a coding contest, multithreading and parallel solutions, and the Prism and Unity frameworks.  Friday I learned how to hack USB devices with F#, more Silverlight, and even attended a session that used concepts from World Of Warcraft to convey how to build good applications.

These days go by so fast because these people aren’t here because their bosses made them, and they aren’t here for the free swag, or to get away from work.  They are here because they want to be here, they begged their companies to send them, or they even paid there own way.  CodeMash is a “Uber-User Conference”, and that is another aspect that makes it so special.  It is one of the only places where I am up way too late, and can’t wait to get up the next morning, hangover and all.  I am pretty sure that the race track and days that I am home brewing are the only other days like that for me.

The other thing that makes this conference unique (and there are a lot of them), as I recounted in last year’s recap (In summary, CodeMash 2009, the Hands of Fate), are the people you meet.  So, this year I tried a new method of doing that:  I’m not hanging out in the bars at Kalahari anymore, at least not when there are a few brave souls that have invited everyone to their rooms to hang out.  A good portion of the #codemash twitter feed was merely room numbers used as code to make the Kalahari a bonified CodeMash Around-The-World party.  Thursday night we hung out with some of the SRT crew, and a bunch of others.  Brian Genisio was sharing his homebrew (there are a lot of geek home brewers out there), and I got have a bunch of fun conversations about beer, making beer, code, writing code, etc, etc…  I found something in common with Phil Japiske (@skimedic) in that we were both in a fraternity in college and we reminisced on those days, all while mixing in geeky topics, and how we can be better speakers for the community.  Keith Elder welcomed us the next night, and I had a total blast partying with everyone.  I am amazed at how good these people are at remembering names and faces.  Many of the people I had met just once last year became fresh in each of our memories once I saw them again this year, it must be drunk recall.

All in all, I wish CodeMash lasted a lot longer, and it was another great year.

I will end this with the obligatory CodeMash blog post ending, “Can’t wait till next year!”

Leave a Comment

Twas the Night Before CodeMash…

OK, I know I don’t update this blog nearly as much as I should.  To the point where it can barely be considered a “log” of anything.  It could be because of my insecurities that I will write about something that is new and challenging to me, that the rest of the world thinks is archaic and easy as pie. Or it could be because nobody actually reads this, but I digress 🙂

Then again, there are nights like this one, nights before CodeMash, where I am yet again rejuvenated.  As you recall, my first real post ever (CodeMash 2009, the Hands of Fate)…or you can just scroll down, there isn’t that much content on here, I’ll wait.  OK, as you recall in that post, I chronicled my last trip to CodeMash and it was the lone catalyst for me to start this blog.  Not only because it is a super conference, but I get to meet people from all expertise levels, talk to them, learn from them, learn what not to do from them, network with them, teach them.  These conferences aren’t as much about the content (which is top notch, don’t get me wrong) for me as it is about the people.

On that note, I was packing my bag tonight and I thought of something.  A topic that came across the Google Group today was, “Dress Code for CodeMash, what should I wear?”.  Now, I am no fashionista, actually I am the exact opposite, so this isn’t that kind of advice.  As my wife says, “how is it that you can be a snob about everything but clothes???”.  Anyway, one thing that I like to keep in mind when I am going to be in a large group of people is, wear a conversation starter.  Wear something that represents you.  It could be a hat from your home team to a t-shirt of your alma mater to short sleeves that expose your Horde tattoo (no Alliance please).  Remember CodeMash 2008 when Brian Prince dyed his hair blue?  I’m guessing he was thinking of the same concept.

Let me give you an example from my own experience.  When I know I am going to be in an airport I always like to wear a hat that has my fraternity letters on it (Sigma Tau Gamma, Alpha Alpha, Miami University if you were wondering).  One day, low and behold, a fellow Sig Tau from Texas walked up to me and introduced himself.  Those of you that partook in the Greek system know that if you were in the same fraternity you were family, and that was pretty cool to find one from halfway across the country.  We chatted for a few minutes and we were on our way.  Not that this had any major impact on my life, but that would have never happened if I hadn’t decided to put that particular hat on for that exact reason.  Plus, there is nothing better than living in Brownstown and hearing someone yell “WHO DEY!!!” (I know, they lost, I don’t want to talk about it) across the grocery store because they saw your Chad “pre-Ochocinco” Johnson jersey you were wearing.

So, for the same reason I stared this, ehem, “blog”, I write again in anticipation for CodeMash 2010 (and hopefully I can put away my insecurities and keep it going for a little longer this time).

I am likely to be wearing a blue BMW hat or a Bengals hat, so come up and say hello.  See you there!!!

Leave a Comment

Organizing our lives with Google Calendars

It’s not everyday that wife comes to me with technology suggestions, so I felt particularly proud when one night over dinner she said, “Hey, have you seen Google Calendar?  Maybe that is something we could use.  Can you see if you can figure it out?”

Sweet.

Maybe forcing her to be the early adopter in the house is finally starting to work (she was the first computer in the house on Vista, Office 2007, first to get a Smartphone, first to get a Zune, etc).

To give a little back story here, my wife and I have extremely incompatible schedules.  She is a pediatric resident (about to be chief resident) and I work an hour away.  She is an early bird, and I am a nighthawk.  It is not at all outside the realm of possibility that she gets up at 5 AM on Monday, pokes the bear a little to wake me, and I hear “I guess I wont see you till Friday”.

Now, Sarah is an extremely organized person, some would say UBER organized.  Really, you have to be to be able to maintain that kind of schedule.  Although, even her doctor friends laugh at her inventory of what’s in the freezer currently (software idea, anyone?).  Up until now the only way that I knew where she was, or what we had going on some weekend was to look at the paper calendar the she filled out every month hanging on the fridge.

I don’t do paper.

So, this often put me in some bad situations when I constantly asked what the schedule was, or scheduled something for myself when I wasn’t supposed to.  Enter Google Calendar.

I don’t know how long its been out, but it says its still in Beta, and its completely new to me.  I started to check it out, seeing if we could merge (or share) calendars, and basically assessing if it would fit our needs.  So far, it does quite well.  I created us each Google accounts with our new krammesnet.com domains and created us both calendars.  I can add my events, she can add hers, and we can have access to each others via sharing.  The interface is also pretty user friendly.  I can highlight both calendars to see a merged view, or just view a single calendar.  Google has built in calendars as well that display the weather and US holidays.

We have even taken it step further and created a “Family Birthdays” calendar and a “Food” calendar that helps my wife plan the meals for the week (yes, we plan our meals, but don’t knock it till you’ve tried it, it really helps with the grocery shopping, I used to make fun of her too, but now I’m a convert).

Wait…, I do everything in Outlook, and I just finished hooking up all the computers in the house with our shiny new email addresses.  Quite frankly, I love that Outlook syncs with my phone automatically with Bluetooth, and I NEED those Outlook reminders!  Not to fear.  Google has a small client app that syncs your calendar with Outlook and therefore automatically syncs with my phone.  Awesome!

Google has even introduced some features that I am starting to love.  One, the Google calendar (which is now a mirror of my Outlook calendar, updates every 15 minutes) has SMS support, so I have full control of receiving text messages when a calendar event is added, removed, and when one is coming up, just to give a few examples.  Secondly, Google calendar emails me every morning with a daily agenda so I know what meetings I have at work, whatever else is going on that day, and most importantly, what we are having for dinner 🙂

So, all and all using this Beta Google product has been a positive experience.

How do you keep track of everyone in your family?

Leave a Comment

What is your favorite Technical Interview Question?

I want to start a meme.

I mentioned in one of my earlier posts, “In summary, CodeMash 2009, the Hands of Fate“, that I attended a session called “Turning the Ship”, hosted by Dave Donaldson.  Recently Dave posted about the Art of Interviewing, and that post had a follow up post by Michael C. Neel.  As Michael mentions in the first line of his article, I am also guessing that interviewing may be wandering around in your mind somewhere, so I think this is pertinent.

I once had an interviewer ask me to “Define a class”.  This was directly after I had explained how I used some design patterns to elegantly solve various problems in real world situations.  I was actually stunned, and ever since then, I have always wondered what that interviewer was looking for in an answer.  Was the book answer of “its a code representation of an object that encapsulates certain behavior, oh and it’s stored on the heap…yada yada yada”, enough?  Do you want your doctor to be able to define the medical technology he will be using in your operation?  or tell you about his experience with it, and why it works so well?

In the “Turning the Ship” session Dave had us play a little game.  He divided us into groups and had us come up with 2 interview questions that related to “agile”.  I want to broaden that case a little bit but remain in the technical realm and ask you, “What is your favorite technical interview question?”, and more importantly, “What are you looking for in an answer to that question?”.

Dave and Michael agree (as do I) that the best interview questions are conversations.  So, how do you start that conversation?  How do you steer that conversation into getting/hearing what you are looking for?  This could be a technical question or a non technical question.  I am just curious of what you are looking for and how you try to find it.

If you are not in the position of interviewing candidates, then tell me about a question that someone asked you as an interviewee that you found interesting.

I will start:

“What blogs do you read?”

I know it is simple, but that is my favorite technical interview question, and it sounds kinda corny, but you can gather a lot of information from it.  I consider it the new age version of “tell me that last book you read”.  Quite frankly, I am looking for the candidate to tell me some name of blogs that I read as well.  If you are reading Martin Fowler, Hanselman, Ford, McConnell, Atwood, etc, then we can probably move the conversation to patterns, or embracing new ideas, writing elegant code, stepping out of your comfort zone and learning something new, but most importantly, we have something in common that relates to the position.

The other great thing about this question is that there is no wrong answer, so its a good first question to pose.  Even if the candidate says that have never read a blog, I can suggest some to them and see how they react.  Are they quickly grabbing their pen?  Are they looking at me with a blank stare?  Do they have a passion for the craft?  Then I can ask myself, “based on that answer, where do I go from here?”.  It’s like the Choose Your Own Adventure book of interviewing 🙂

Michael’s post states you need to ignore personality.  I think that can not be farther from the truth.  I think that you have to find a sense that you can work with the person, no matter how high their technical skill may be.  One way to find that out may be to break you down (read Find the Breaking Point in Dave’s post), and see how you react to the pressure.  What good is having a member of your team who happens to be an absolute expert if no one wants to talk to him because he is an asshole???  What good is a member of your team that is going to flip his lid when he is asked too many questions that he can’t answer?  I am much more interested in smart people that can learn well together, find answers together, and get along.  That makes a fountain for new ideas and encourages collaboration when everyone is comfortable conversing with eachother.  I am not saying that you need to be asking them about their family and their interests outside of work, but you do need to find out if you are capable of having a common respect for one another.

So, that is it, I am going to tag Andy Craze with these questions.  I respect his opinions and to be honest, me being new to this blog thing, he is the only one I feel comfortable “tagging”.  But please, feel free to pass this along, or answer it yourself, I’d love to know your thoughts.

P.S. – I know what Dave’s answer to this question is, however I wont say it in case he wants to keep it up his sleeve, but it’s good.  Quite frankly, if an employer didn’t ask me this question, I would sure ask them, it works both ways, hopefully Dave will leave a comment 🙂

Leave a Comment

The Belated Post on The Building of my Super Rig aka I Finally Did It

Inspired by Scott Hanselman’s post on his new computer that he built via Jeff Atwood (I can’t even tell you how many times I have clicked this link), I finally decided to build myself a nice computer.  As it seems, I like to make all of my big purchases when my wife is out of town (firearm, foosball table, etc.).  Wait.  Before I get yelled at, I want to say that she very well knew of these plans, but the timing was the same.  I have been saving up for a new computer and slowly buying pieces parts when they were on sale since I read Hanselman’s post (I know, that was a LONG time ago).  My wife went on a medical mission to Kenya for 3 weeks in December (she’s a pediatrician), and I couldn’t think of a better time for this project (laughs menacingly).  Besides, what better day than Black Friday to place an order on NewEgg?

Prior to this I was on a Pentium III 550 MHz from my sophomore year in college with 386 MEGS of ram and a 40 GB hard drive.  It drove me absolutely crazy that my wife had a better computer than me (I cooked her computer last year, smoke bellowing one day and had to get her an “emergency” Dell), let alone the fact that it took me 20 minutes to check my email.  So, if I was going to do it, I was going to do it BIG.

I am really kicking myself for not documenting the entire process.  Since this was the first computer I have ever built, I guess I was too excited to just get it together.  The fact that I lost 20 pounds over the course of building this PC will tell you that I hardly ate or slept throughout (I haven’t even eaten dinner tonight, and all I am doing it writing about it), so yeah, excited is an understatement.  That should also give you an idea of how long it took me, more on that later….

I will start off with the parts:

COOLER MASTER COSMOS 1000 RC-1000-KSN1-GP Black/ Silver Steel ATX Full Tower Computer Case – Retail

I can’t even begin to explain how big this thing is.  It DWARFS my old POS Dell.  Quite frankly though, it had to be for the stuff I was putting into it.  I managed to get this over a year ago when Cooler Master was offering an unheard of 90 dollar mail in rebate.  I tried to buy the things that I knew wouldn’t go out of date in a week early, and when on sale.

Here is a picture of the front of the case.  The door is reversible, but it was perfect for me the way it came.  It has tool-less bays and six hard drive bays at the bottom.

IMG_3586 IMG_3593

This picture might give you some insight to the Cosmos’ size.  In the left hand side of the picture lies the stripped down “forgotten” computer.

Photo_122008_001

MSI X58 Eclipse SLI LGA 1366 Intel X58 ATX Intel Motherboard – Retail

When I was first inspired to do this, I talked about this at-the-time imaginary computer so much, that my friends and colleagues started to get mad at me.  My wish list went through so many revisions via research and the opinions of others (if there is one thing nerds have, its an opinion on hardware). When I had completed my final draft, and was about to click SUBMIT ORDER, I decided to put forth one last effort by twittering my specs and seeing if I am doing some catastrophically wrong.  Within minutes of that post Charlie Sears wrote me to ask why I wasn’t going with the new Core i7 chips that had just come out that day.

Back to the drawing board I went.  At the time, there were only a few motherboards to choose from that supported the LGA 1366 chip, so I chose this one.  I had equal opinions of “Don’t buy MSI” to “Don’t buy anything but MSI”, the price was right and it had all of the features that I wanted (i.e. triple SLI, or rather, room for triple SLI).

This part of the build became somewhat of an engineering project for me.  For whatever reason, when I seated the board onto the brass spacer screws, it wasn’t flat, so the front of my PCI cards would stick in, and the backs would not.  I ended up going to Home Depot, picking up some brass washers, and building a 3 tier system that angled the board uphill from left to right.  Everything met the back of the computer flush that way, and my cards all went in properly.

IMG_3577

2 x MSI N260GTX-T2D896 OC GeForce GTX 260 896MB 448-bit GDDR3 PCI Express 2.0 x16 HDCP Ready SLI Supported Video Card – Retail

Yeah, 2 of these bad boys.  I have been addicted to 2 monitors since I figured out that you could do it.  I have been known to scrounge together old CRT’s and a crappy video card just have another workspace.  Once again influenced by Jeff Atwood’s post, before I built this computer, I was DEAD SET on getting three.  The only way I could do that was to get 2 of these BRICKS.  When I took them out of the box I almost passed out, they are huge, check that, ENORMOUS.  I brought one to work with me one day and passed it around like I had earned a badge of honor.  I’m not a computer builder, so I had never seen anything like it.  My goal was to hook up 3 monitors, and then find some way to configure it to be able to run 2 in SLI at the flip of a switch.  NVidia’s beta driver’s (they might be released now) did just that, although Mr. Atwood was right, I haven’t once wanted to go into SLI and be relegated back to 2 monitors)

IMG_3579 IMG_3592

KWORLD PlusTV HD PCI 120 ATSC 120 PCI Interface – Retail

Eh, what can I say, I just wanted to be able to watch TV from my desk, nothing big here.

Antec TPQ-850 850W ATX12V / EPS12V SLI Certified CrossFire Ready 80 PLUS BRONZE Certified Modular Active PFC Power Supply – Retail

This one was a real nail biter for me.  With all of this stuff, how much power am I going to need?  There are plenty of calculators out there, but I couldn’t find one that really pin pointed everything that I was going to be buying.  I ended up going with this one because I know Antec is a decent name, and it was on sale.  The one thing that I do like about it is the modular cabling.  I don’t have another built computer to compare it to, but it was pretty nice to be able to just plug in where necessary.  My case is already a MESS of wires, so I cant imagine what it would look like if I didn’t have that.

IMG_3578 IMG_3591

So far, according to my power usage through Zalman fan controller, I’m not even coming close to touching the maximum power of this thing.  I would say that gives me room to grow, but unfortunately, due mostly to the the 2 video cards needing 4 total power plugs, I have used up all the slots.

Intel Core i7 920 Nehalem 2.66GHz LGA 1366 130W Quad-Core Processor Model BX80601920 – Retail

Like I said earlier, I dropped the idea of going with the LGA 775 Q9550 at the last second and went with this comparably priced version of the i7.  The little research I did told me that the LGA 1366 was going to replace the 775 socket, and this was the 45 NM technology as well.  So far, I’m extraordinarily happy with it.  Pushing the chip into the mobo however did make me cringe quite a bit.

Patriot Xporter XT 4GB Flash Drive (USB2.0 Portable) Model PEF4GUSB – Retail

This one is rated for Vista’s ReadyBoost, and it can’t hurt to have this kind of portable space for the price.

2 x G.SKILL 4GB (2 x 2GB) 240-Pin DDR3 SDRAM DDR3 1333 (PC3 10666) Dual Channel Kit Desktop Memory Model F3-10666CL7D-4GBPI – Retail

Picking a new motherboard to support the chip I had chosen allowed me to upgrade from the DDR2 800 that I had on my first draft.  That being said, I also decided to go with 8 GB’s of it and run it in 3 channel mode.  Since I was going to run Vista 64 bit Ultimate, I could utilize it all.  I also have room for 2 more sticks so I can continue to tinker in the future.

IMG_3589

Western Digital VelociRaptor WD1500HLFS 150GB 10000 RPM SATA 3.0Gb/s Hard Drive (bare drive) – OEM

I listened to Atwood again on this one.  My only regret here is that I wish I had purchased the 300 GB version.  My intention here was to keep operating system, visual studio, and all other applications on this drive, and keep any other data on the SpinPoint drives below.  That is exactly what I did, and I have 52 GB free now.

IMG_3582

3 x SAMSUNG SpinPoint F1 HD753LJ 750GB 7200 RPM SATA 3.0Gb/s Hard Drive – OEM

My idea was to have the Raptor boot drive with all of my applications, and have these in a RAID 5 to store everything else on, including data that the applications on the Raptor referenced, like my local emails and stuff.  That way I would have 2 GB of space, and some form of backup with the parity drive.  Unfortunately 1 of these 3 drives I was unable to format, and I didn’t realize there was a problem until it kept blue screening every time I tried to set up the RAID array.  I am currently in the RMA process with Samsung, and so far that is going way better than I was expecting.

When you read the reviews on NewEgg, you get the overwhelming feeling that buying parts individually and building your own computer is CRAZY.  It seems like everyone has had a bad experience with every kind of computer peripheral.  The way I see it, I bought a large number of individual parts and only had one that was bad, it wasn’t a showstopper, and hopefully they are taking care of it.

3 x Acer H213H bmid Black 21.5″ 5ms HDMI Widescreen 16:9 LCD Monitor – Retail

With the price of flat screens being so low, I just had to do it.  Not only that, I went with the near 22″ HD 1080p wide screen variety.  I feel like I am in a cockpit every time I sit down at my desk.  YES, I do use them ALL.  Right now I am writing this post in the middle, email on the right, and web on the left.  Is it overkill? probably.  It it unbelievably awesome to be able to utilize all this space?  absolutely.

IMG_3584 IMG_3585 IMG_3594

Do yourself a favor and buy a copy of Ultramon, it is the best multi monitor program out there, and I couldn’t live without it.

Scythe KAMA BAY SCKB-1000BK 120mm 120mm Fan for 5.25″ System Cooling – Retail

One of the negative things I read about the Cosmos case was that it didn’t have very good cooling of the hard drives.  Yes, you can take one of the directional fans at the bottom of the case and turn it towards the hard drives, but I decided to solve this problem differently.

IMG_3588

By putting this bay fan in the bottom bay and blowing the air down, and turning the bottom case fan away from the hard drives, I was able to create circular air flow that went straight out towards the Cosmos’ 3 exhaust fans.

IMG_35932

2 x Scythe DFS123812-3000 “ULTRA KAZE” 120 x 38 mm Case Fan – Retail

I got 2 of these mammoth fans just in case.  I ended up replacing the bottom fan mentioned below and the rear exhaust fan with these puppies.  They push SO much air that the dangling wires behind my box are constantly swaying in the wind.  Due, to the size of the case and (I think) my fan layout, it’s noticeably cooler inside my case when you put your hand in there.

2 x Samsung 20X DVD Burners with Lightscribe

Gotta have DVD burners these days.  I am not one to watch too much media on my PC, but these monitors are nicer than any television in my house.  So far, I haven’t utilized Lightscribe yet, and they have been primarily used compiling my wife’s Kenya pictures.

Hercules Deluxe Optical Glass USB WebCam – Retail

Part of the motivation for building this computer was that my buddy would buy me Warcraft and I can join his guild (not really, but that is what I tell him).  When we play, we communicate with Skype, which is an awesome program, btw.  We don’t use the video feature, but what I liked about this was the built in microphone.  Its an entry level webcam, so the picture is OK, but I primarily use it for the mic.  It also allowed me to take a picture of myself.

ZALMAN MFC2 Multi Fan Controller – Retail

If I am going to have all of these fans, I am going to need something to control their speed, and therefore their CFM, etc.  Eh, not really.  This is one of my only regrets in this build.  Aesthetically, this thing is awesome.  4 digital displays, RPM control of each one, and a power consumption module that plugs in between the wall and your power supply.  Yes it’s cool.  No, I am not finding it that useful.  If anything it is somewhat of a hindrance because since the motherboard isn’t controlling the fan speeds, when I put it to sleep or hibernate, the fans still kick like I am using the CPU at 100%.  This has led me to turn it off when I am not using it.  It boots pretty fast, and it’s better for the environment and my power bill.

Rosewill RCR-102 52-in-1 USB 2.0 Card Reader – Retail

When my wife and I were filling out our Flexible Benefits plan for this year, I finally heard the words, “Well, what if we try to have a baby in 2009?”.  So, since a digital camera also comes with that, this was an easy and cheap add on preparing for the future.

Thermaltake V1 Max-Performance CPU Cooler with Massive 110mm Blue LED Full-Range Variable Speed Fan CL-P0401 – Retail

I actually have the aluminum one, not the copper.  Originally, I was dead set on this one, the first cooler in a long time to dethrone the V1 in stress tests, plus, it has that cool engine theme that appealed to me.  When I went to buy it, I got some interesting points from the salesman.  The cooler master one weighs 867 grams, and the aluminum V1 (only beaten by the Cooler Master by 1 degree) weighs half that.  He was afraid that the heavy one might eventually warp my board, and quite frankly, I need this to last me a while.  Whether he was right or wrong, the V1 was cheaper, and you don’t have a salesperson working on commission try to talk you into the cheaper one all that often, so I went with it.

Triple Monitor Mounts

How many times can I manage to link to Atwood’s computer building antics?  One more.

I went from setting my computer up like this:

Photo_122008_001

to this:

IMG_3584 IMG_3583

My father in law sells office furniture, and one day he came over to see my rig and said, “I have a surprise for you”.  These mounts not only raised my monitors up to a Swordfish level, but gave me a surprising amount of room and customization for my oversized mouse pad, speakers, Zune, GPS, cell phone, etc.  You can see from my pictures there is a lot going on there.

This particular model has an extra set of extension arms that allowed the 3-22 inch monitors to be joined together.

Regrets:

I don’t have many, but I can’t say that everything is perfect.

  1. Loud.  I mean CRAZY loud.  Should I have been expecting this with 7 fans including the ones built into the video cards, 2 of which I replaced with 3000 RPM monsters?  Yeah, I guess.  It isn’t so much when I am sitting at the computer, I kinda like the white noise.  It is when I am away from the computer that it bothers me.  When you walk into my basement you wonder if there is a helicopter down there that I didn’t tell anyone about.  But, I’m OK with it since it keeps so cool in there, and I know that has something to do with the longevity of the parts.  Plus, like I said earlier, I turn it off when I am not using it now.
  2. Heavy.  When I got this computer, I thought, “Hey, that case has 2 huge handles, I will be able to take it to a LAN party or something”.  Uh, no.  Just for kicks before I wired it in I threw it on my scale and it tipped 75 pounds.  This computer is going no where.  Oh well, that is what a laptop is for anyway.
  3. HUGE.  When I was in college at Miami my dad bought a bunk bed from the local university, took the bottom bunk out, built a desk, and left the bed on top.  So, my bed served double duty as my place of sleep (when I wasn’t on the couch) and my work place.  It was a great idea because it saved so much space in my smallish fraternity house room.  That being said, my workspace on my desk is larger than a single bed, and it had to be to fit this.

Overclocking

Not yet.  But I really want to.  I need to re-seat my cooler sometime.  After running Prime95 for a few hours, my CPU temps plateau-ed in the high 70’s.  Since the 45 NM technology is supposed to be cooler, and I have one of the best CPU coolers on the market, I was expecting better.  Since I had to take the mobo in and out of the case about 100 times (due to the leveling issue I had), I’m sure that my cooler isn’t seated very well.  If I ever get to it, there will be a follow up post on the results.

Bottom Line:

Like Hanselman says, I don’t have to wait for things anymore.  I want my computer to think faster than I can, that is the whole point of them anyway, right?  Things open as soon as I click on them, and that is quite liberating coming from 5 minutes just to open Outlook.  I can compile DasBlog’s ALL solution in 9 seconds.  I can compile DNN 4.9.1 in less than that!

So many people have asked me, “Are you a gamer?”  and “Why do you need that much computer?  are you trying to hack into the Pentagon?”  My canned response has become “Dude, I lend the Pentagon my spare cycles…”  But I kid.  The truth is, I am a gamer on my Xbox.  However, since I got this computer, I haven’t turned on my Xbox (My gamertag is BIMMERPHILE, add me as a friend, I will be back eventually).  Much to the chagrin of all my buddies I talked into getting Rock Band 2 for Xmas so we can play online, I got started playing Warcraft, but I don’t want to talk about that 😉

This computer has allowed me to do some of the things I have always wanted to do.  I can play around with the VM’s of the newest stuff that Microsoft releases, I can install the copy of VS2008 I got at the launch rather than just look at it, I can have this blog to better reach out to the community and improve my career.

And besides, I have just ALWAYS wanted to build my own computer, and I remained patient and saved up for it.  So far I have had the good fortune of this particular one being a fantastic experience.  So, to all the computer building virgins, I encourage you to give it a try.  Read the manuals, read the instructions, and make a project out of it.  It took me about 2 weeks of coming home from work and putting it together, let alone the hours of research and decision making on the parts.

For me, it was all about the experience, and now I get to reap the benefits as well 🙂

P.S.  Phew, if you read all of this, thanks!

Leave a Comment

Why your Twitter picture is important…

Last week, as I sat in the conference center at the Kalahari with bloodshot eyes, double fisting Monster Energy drinks, anxiously awaiting the start of CodeMash while I forced down some bacon and eggs to get me going, I realized something:  I “know” all these people.

I looked around the room and said to myself “hey, there is Corey Haines, Alan Barber, and there is Jay Harris and Leon Gersing“, and I did that pretty much that entire day.  Something was different this year, and it was that I recognized people.

A friend of mine told me a story where he went up to Jim Holmes to register and he said, “Don’t I know you from somewhere?”.  My buddy immediately made a huge smile and leaned over the counter to get a little closer to him and said, “Does this look familiar?”.  You see, Ryan Lattimer’s twitter picture is a close up of his face he had taken at work, and when he did that, Jim got his joke and immediately recognized it was from Twitter.

I follow nearly 700 people, and I use Tweetdeck groups to help separate the blazing feed of posts from everyone in my list to my friends and certain keywords I am looking for.  If I happen to see something on the “All Friends” ticker, then I’m just lucky.  But there is something to be said about seeing those faces over and over again.

Now, back to my story about why your Twitter picture is important.  I have been twittering back and forth with Charlie Sears (of notorious CodeMash Rock Band fame) about some homebrewing techniques for the past few months, and I knew he was going to be at CodeMash.  I had never met the dude, but when I saw the faux-hawk I knew it was him, well, because of his Twitter picture.  When I finally went up to say hello, he told me he didn’t know how to find me because the only way we knew eachother was from Twitter…..and my Twitter logo is a picture of my car 🙁

Those of you that do actually know me (not in the Twitter sense), know that I am pretty obsessed with my car, and it has always been kinda like my online persona.  I never really wanted to have my ugly mug all over the Internet.  That is great and all, but I realized it has limited me because there is no way that anyone could have been sitting in that conference and recognizing me if I hadn’t previously met them.  I’m no celebrity, but knowing someone’s face was an immediate ice breaker to go up and talk to them.  You may even know a little bit about them beforehand, but at the very least you already know their name.

So, all of this being said, I have decided to take a crappy picture of myself with my webcam and change my Twitter picture, as well as my LinkedIn picture, Gravatar, etc.

My “online persona” is now actually ME.  (if you want to see or talk about my car, I’d be happy to oblige upon request)

So, we have a year left until CodeMash v2.0.1.0. and you may have way less than that before your next conference.  This is my challenge to you:  If you are one of those XBox avatars/Car Pics/Random pictures of your kitty on Twitter (or anywhere else online for that matter), try using a picture of yourself and we will all “know” eachother before we have ever met.

Leave a Comment