2008
09.25


Well actually… he moved in to the penthouse down the hall. But he comes over and chills so much he might as well live here… Like yesterday, when I came home from work he was on the couch watching ESPN…

Anyways his name is Shawn… they call him Shawn the Sheik. He’s a professional poker player from Vegas and he’s here because his daughter is a bad ass tennis player. Saturday he lost $50,000 on sports, Sunday he won $65,000. This guy is busy at work — on my days off. :)

He’s probably gonna cost me a lot of money (poker)… but hopefully I’ll learn something in the process…

Here he is in the elevator — on our way over to Pacific Rim — and then the little black dress party at Big Sugar.

Oh — and he cleans up around the house too!

2008
09.23

He’s been making big pushes and acquiring social networking traffic.
Watch out for Stephen and Gaby… coming up strong. :)

Here’s what it looks like:

2008
09.19

For whatever reason, at my new job, I’m surrounded by hackers. Some random subjects I’ve heard discussed  in the last few days include:

  • arp spoofing, MAC address cloning
  • SQL injection, SQL truncation
  • cross site scripting, cookie hijacking

Last week, we all signed up for Yammer – a business Twitter.  And I love it.  Its FAST.  Yeah — you don’t have to wait 5-10 mins for your updates to appear.  Yammer is more like group IM chat.  Perfect.  (Too bad Twitter still can’t figure out how to scale.)

Maybe the second day we were using the service, one of the guys starts using a sniffer (WireShark) to inspect the communication between the AIR client and their server.  Then another of the guys starts working on it.

Yammer blocks a lot of HTML tags.  But it lets some through for styling.

Less than 15 minutes later, I get a popup in my browser!  They were injecting Javascript — popping alerts, replacing the logo, rewriting the page.  (Kudos to Yammer — they fixed it the next day.)

This is the type of stuff I have to deal with… genius hackers on my office network.  I’m afraid for my poor laptop!  I’ve started to be more secure, and one of the things that I did today, was switch my Gmail to SSL secure mode.  You should do this too…

So yeah — these guys are smart — not sure how long its gonna be for they hack into my laptop.  But I’ll let you know…

2008
09.11

“Traditionally, wages or salaries have given an indication of how we are valued at work, however, by looking at salaries against taxation, the cost of living and regional variations, we can see how much an hour of our time is worth whether at work or home.

“What this helps us understand is that as the value of our time rises, we are likely to buy more of it, which explains why people are paying to save time, like having someone to cut the lawn or clean the house.”

http://archives.cnn.com/2002/TECH/science/05/29/time.money/

I get away with paying $15/hour cash. (Which feels like a $18/hr W2 to them.) Depending on your tax bracket, that costs $20-$25/hour pre-tax income. If you can easily make more than $25/hour working on other projects, then why would you work on things that earn/save you less?

I hired my first assistant when I was 26. Kim — bless her heart. She is a 35 yo mother of 2. And she was perfect. She was like my mom. Cooked, cleaned, organized, and got all sorts of shit done. She would follow up with me on my tasks, adding accountability. (More on that later.) And independently think of things that would improve my life.

I remember my friends and I playing volleyball on the beach. She prepared chicken bacon avacado wraps. Fresh fruit. Chips and fresh guacamole. Brought it down to the beach in a cooler full of beers. Everyone loved her.

My life was enhanced in so many ways. So its no surprise that when I moved to Sarasota. The first thing on my mind was finding a good personal assistant.

I put an ad on Craigslist one morning before work, and had 40 phone calls before lunch time. I couldn’t take it anymore and pulled the ad. That night I setup four face to face interviews. One of the candidates stood out — Kelly. Hired her right away. Unfortunately, she is moving back to Chicago this week.

Fuckkk… I am NOT looking forward to another pain in the ass hiring process.
So instead I need someone to build a website to manage the application and hiring…

Opportunity:

I need a Wordpress plugin or Drupal module to help me hire.
Simple form for the candidate, address, zip, phone, email
Upload resume.
Need to geocode the address.
Sortable datagrid for the admin.
Add column for distance to my office, distance to my home.
Ability for me to input comments.

Need this done ASAP.
Contact me with a bid. jobs@yukes.com

UPDATE 2008/10/16 -
Was super impressed with my friend’s blog post about outsourcing… dip into it here:
http://www.wealthjunkies.com/productivity/outsourcing-101/

2008
09.09

Ever since Saturday to tell you the truth.

If you would have asked me what I was doing this weekend on Friday, I would have told you about some really interesting company projects that I was excited to work on. And in fact, Saturday morning, I was up early making progress.

I met a couple friends for lunch. And remembered there was this new car I wanted to go test drive. I called the dealership and they had one in stock.

I walked into the dealership. Saw it. Asked how much it was. And told em to write it up.

Fastest thing I’ve ever drove. They say 0-60 in 3.3 seconds. I don’t know for sure yet. Cuz I’m trying to behave myself and break it in slowly…

Needless to say, I didn’t get much work done this weekend. Here is the 2009 Nissan GTR pictured next to my 2008 Cadillac Escalade:

I’ll post more later after she’s all broken in. :)

2008
09.06

Okay… not that I’m a bad ass interviewer…. but here’s a couple tips that will help you distinguish yourself from the crowd…. (more power if you can impress the fuck out of me)

Anyway here’s a little crash course:

  • Don’t waste our time – we have programming interviews, which means you’ll have to code with a live audience (us.)  Some people show up and talk shop all day long, only to be handed a keyboard… where they suddenly forget all those cool things they bragged about.
  • Stand for something.  Have an opinion.  Pick an architecture.  Defend yourself.  We are only looking for strong minded individuals, who will soon have their own team.  I don’t believe in titles.  You won’t get one.  Think Darwinism — self emergent structures.  Leaders will be leaders.  People will follow those that they respect.  Be that person.
  • Tell me what you don’t know.  Tell me how you’d leverage Google, or whatever other search site.  Show me how efficient you are at solving problems.  How do you respond to things that you’ve never seen before?  The most interesting problems haven’t been solved yet…
  • Don’t be discouraged.  (Honestly?)  I routinely ask questions that mirror my current challenges… I’m asking you how to solve problems that I haven’t yet digested.  If you can contribute to the conversation, we’re all making progress…
2008
09.04

At 18 years old, I had 3 job offers, and decided to shelf college:

  • Airborne Express – Senior Systems Analyst – $80K (Seattle, WA)
  • Resonate – Software Engineer – $90K (San Jose, CA)
  • Bank Of America – Network Security Admin – $100K (Concord, CA)

I picked Airborne — packed my bags — and drove my 10 year old Ford Taurus to Seattle.  I stayed in temporary housing downtown, and totally maxed out my credit cards waiting for the pay period to end.  Then finally, relief, as I cashed my first paycheck. I loved watching the money fall into my account.

I was super frugal — split a 1 bedroom apartment in the University district — $300 a piece.  I typically slept on the couch in the living room.  No debt.  Life was good.  That year, I religiously donated 10% of my pre-tax income to my church.  Spent $10K taking my 2 sisters to Europe for 3 weeks.  And started investing.  But the accrual was so slow…  I can not imagine how middle-class wage earners can support a family.

A year later, I was pulling down $3000/week at RealNetworks.
Still driving a 10year old Taurus :)
Only then, did I notice money start to pile up.

Fast forward to today…
I just paid my personal credit cards – $15K, rent $3100/mo, cars $3200/mo…
I spend over $200K/year (before taxes) just getting by. And life is simple. No wife. No mortgage. No kids.

One of my most trusted mentors, told me early on:

“You can cure a lot of ills by driving the top line”

(Note: the top/first line of an accounting Income Statement is Gross Revenue)

You’ve got to spend money to make money.
Early on I was super frugal — I had to be.
But now I’ve stopped looking at my bottom line,
and am 100% laser-focused on my top line.
Either I’m going to win big… or fail terribly.
There is no more middle ground.

Want to upgrade your income?
Looking to hire bad ass programmers, we can pay $100K+.
Find me.

2008
09.03

The night before my official start date at my newest job, I get a call…

the NFS server crashed!

I’m staying at the Ritz Carlton Sarasota with my girlfriend. About to go out for a romantic/ celebratory dinner. But I said I’ll take a look — SSH isn’t too bad over Verizon EVDO. The sysadmin adds users for me… so before I even had a formal employment agreement, I had root access to critical infrastructure.

The issue wasn’t a big deal — stale NFS file handles. And all told, we were back up within minutes. But I realized I had some architecture work ahead of me.

Note to self: Don’t serve your web root off NFS!@#$ OK? Yeah. I never got this one… Why load balance across 20 web servers which all rely on the same NFS server (OK — it was NFS cluster.) But still — the shared storage choked — and all the web servers were down effectively.

Challenge: Need easy way to distribute code, templates, and images to 20 web servers.

Solution: cron + rsync – was our first take at it. But now have a rsync push mechanism, triggered via web.

Even being down for just a few minutes — we lost a lot of money. Downtime is a serious issue. Because the PHP code was on NFS – we returned 4xx/5xx error messages to our clients. And without any business logic, we couldn’t push any transactions through to our data store.

Looking at the Apache logs – we realized we had almost enough information to replay all of the web transactions. Not quite enough with the standard combined log format. But we settled on an Apache CustomLog Format:

LogFormat “%v %h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” \”Co%{Set-Cookie}o\” \”Ci%{Cookie}i\” \”To%{Timestamp}o\”
%X %s/%>s %I/%O/%B %{pid}P/%{tid}P %T/%D %{outstream}n/%{instream}n/%{ratio}n” combined-cookie

Looks kinda crazy eh?  I love data! :)

As a minimalist, to replay the web transactions… we need:

  • the action / URL (%r)
  • some unique identifier
  • and the state (if you’re not stateless…)

With that — we can replay the log files — and ensure that the transactions have been completed successfully.  Our unique identifier is COOKIE + TIMESTAMP. So our CustomLog Format has:

  • the incoming cookie %{Cookie}i
  • the outgoing cookie (in case the incoming was non-existent) %{Set-Cookie}o
  • a timestamp %{Timestamp}o

The application adds a Server header to every response, so the apache log can grab it…

$transaction_time = time();
header( “Timestamp: $transaction_time” );

Wait — so why can’t you use the Apache log timestamp? Umm… even though I grab the current timestamp (in PHP) immediately upon page load…. what if the page is delayed due to compilation? Or if the server is super busy? The Apache log timestamp will many times not perfectly match up with your first call to time(); …

Yeah, yeah – so outputing another server header is wasting an extra 22bytes of bandwidth with every request… for you bit savers out there, you could also set an environment variable and Apache will kindly output to the log with this directive %…{VARIABLE}e

But I’m happy! And my Apache logs are now audit logs!

2008
09.03

I’m trying to cleanup my Facebook profile…. which means removing the 100’s of apps I installed back in the hay-day… cleaning up my fan pages… and it won’t let me!

God damn it!! Shoemoney always has an edge! :) :)

P.S. Shoe – I still love you!

2008
09.02

Recently upgraded the DB from 5.0.45 -> 5.1.26
Few days later, noticed the UDFs didn’t load – new build looking in /usr/lib64/mysql/plugin
Tried DROP FUNCTION fnv_64; — says not loaded, but CREATE FUNCTION says loaded
Moved the shared object into place, restart mysqld –
… and its in endless restart mode …

080902 17:46:15 [Warning] Found an entry in the ‘db’ table with empty database name; Skipped
/usr/sbin/mysqld(print_stacktrace+0×1e)[0x69689e]
/usr/sbin/mysqld(handle_segfault+0×320)[0x5819f0]
/lib64/libpthread.so.0[0x3b2260de70]
/lib64/libc.so.6(strlen+0×30)[0x3b21a782d0]
/usr/sbin/mysqld(_Z8udf_initv+0×327)[0x67b747]
/usr/sbin/mysqld(main+0xc2c)[0x582a8c]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x3b21a1d8b4]
/usr/sbin/mysqld[0x4d2979]
080902 17:46:15 – mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help diagnose
the problem, but since we have already crashed, something is definitely wrong
and this may fail.

key_buffer_size=8388600
read_buffer_size=8388608
max_used_connections=0
max_threads=100
threads_connected=0

thd: 0×180d6890
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong…
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort…
thd->query at (nil) is invalid pointer
thd->thread_id=0
thd->killed=NOT_KILLED
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.

I’m puzzled looking at the empty database warning…
But Brian hit on the main issue right away by jumping in with a little debugger action:

(gdb) bt
#0 0×0000003b21a782d0 in strlen () from /lib64/libc.so.6
#1 0×000000000067b747 in udf_init () at sql_udf.cc:162
#2 0×0000000000582a8c in main (argc=,
argv=) at mysqld.cc:4341

Somehow need to stop this UDF from loading… Ideas?
Physically removed the mysql/func.* table from disk!
Now she starts up smoothly… try to load the UDF again:

mysql> create function fnv_64 returns integer soname ‘fnv_udf.so’;
ERROR 1126 (HY000): Can’t open shared library ‘fnv_udf.so’ (errno: 22 /usr/lib64/mysql/plugin/fnv_udf.so: undefined symbol: __gxx_personality_v0)

Went back and compiled with g++ this time. And we’re back in business.