Archive for the ‘Everything Else’ Category

It was the best of times, it was the worst of times…

Monday, June 30th, 2014

cubeLifeView.gif

It's been a heck of a month, and I've adopted Dickens' line from A Tale of Two Cities as it seems to fit my life amazingly well these days. I'm trying to adapt to the current environment at The Shop, but it's proving increasingly difficult the more I attempt to adapt, and in the end I'm left with the feeling that it's an abusive relationship where the more I attempt to adapt, the more I'm being exploited.

The work can be fun, and it's one of the two things I'd classify in the ... best of times... category. But there's very little real work, and far more people posturing and pretending and trying to get me to do their work for them. In most cases, I accept the work because it is, after all, the best of times, but then it becomes an abusive relationship when these people expect me to do their work for them, and get angry when I can't - or won't. I've enabled them to be poor producers in this environment, and by enabling that behavior, I've done them no favors.

Management is not supporting me because they are the ultimate benefactors of all the work I do, so the more I do, the more they like it. It's a very simple equation. I also have a manager that seems to be completely incapable of delivering any kind of bad news, so instead, he convinces himself that the right thing is to adjust his expectations, and have me to their work. If they then become happy, and all the work gets done (by me), then all the better. No more reason to deliver bad news.

But it's not healthy. It's not sustainable. And I'm getting to the point that I'm just done with this particular unhealthy relationship, and it's time to move on. I like the company, but not the people I'm working with. There are people here at The Shop that I'd like to work with, have in the past, and would enjoy doing so again. There are even people in this group that are decent workers. But the vast majority are not. And I've enabled their bad behavior for too long.

It's time to make them stand on their own two feet. That's the only way they will get better. And they need to know if they can get better, or if it's time to change jobs. That is what we all should have to do, but I've been keeping them from this by picking up all the group's work. Like I said, I wasn't doing them any real favors. I was doing myself a favor by keeping my mind active.

It's time to make some changes.

PHP on Heroku

Thursday, May 1st, 2014

php.jpg

I'm looking at standing up an XML-RPC service written in PHP on the web, and I've been doing a lot of looking around, and found that Heroku really is about the best place for us at this point in time. It's got all the scalability we need, it's got Postgres, it's got redis, it's got all the things to mix-and-match all the work I need to do, and it's all in one place. I couldn't think of a better place.

But they haven't been doing PHP... until now.

This post talks about it, and it's really exceptionally simple... Start with a new directory and a simple index.php file:

  <?php
    echo "Hello World!";
  ?>

and in the same directory simply create a blank composer.json file:

  $ touch composer.json

Finally, create the git repo, commit the new files, create the heroku app, and deploy:

  $ git init
  Initialized empty Git repository in ~/hello_heroku_php/.git/
  $ git add .
  $ git commit -m "Initial import of Hello Heroku"
  [master (root-commit) 06ba0a7] Initial import of Hello Heroku
   2 files changed, 5 insertions(+)
   create mode 100644 composer.json
   create mode 100644 index.php
  $ heroku create 
  Creating safe-ridge-5356... done, stack is cedar
  http://safe-ridge-5356.herokuapp.com/ | git@heroku.com:safe-ridge-5356.git
  $ git push heroku master
  ...
  $ heroku open

This is amazingly simple! Just what I needed.

Secrets of a Great Bag

Wednesday, April 23rd, 2014

Chrome Bag

This morning I was looking in my bag for something and I noticed that there was a little fold in the side of the bag, and upon investigation, I saw that it was a completely separate pocket in the bag! It was thin - in that it wasn't in the same area as the laptop sleeve - it was parallel to it. This is a perfect place for papers and simple things - leaving the larger pocket for the laptop and thick items.

I was so jazzed I couldn't help but smile. Yes, this is the most amazing bag I've had. Wonderful piece of work. I just can't say enough about this bag.

Starting to Decorate the House

Monday, March 31st, 2014

The Chalkboard

This last week, I've taken the first real steps towards decorating the house - adding a slate chalkboard to what was the dining room, but will be known as The Pub when it's done. My designer came up with the idea of putting a pub table and two chairs as well as a pool table in the dining room, and I really like it. So this is the first step:

I know it doesn't look like much, but it's a really big deal to me. It's a big step in what I'm trying to do, and it's something I've wanted to have in my house since grad school. It took me almost 30 years, but I did it.

I pray good things come to those that wait... and keep the dream alive.

Turning a Corner – Getting a New Laptop Bag

Wednesday, February 19th, 2014

Chrome Bag

I've been thinking about a new laptop bag for quite a while. As in more than a year now, and the one I've wanted was a nice successor to my Spire Volt. It's several years old now, and I was thinking that if I got a new retina MacBook Pro, I'd need a new 'boot', as they call it, to hold the new machine. But sadly, Spire is in trouble getting things out, and their selection of bags has really shrunk. Also, the 'boot' for the rMBP is zippered, and I don't like that - I like the velcro that my Volt has. So I went looking.

I worked with a really great guy that had a Chrome messenger bag, and the tweet he sent out one day with a 40 lbs. bag of dog food along with his laptop, shirt, etc. all in his bag made me a believer. It was an impressive amount of stuff.

I find that there are a few times that I really want to carry a good bit of stuff to the office - candy bars for my favorite Clojure guru, work laptop, etc. and the space I have in my Volt is nice, but it was a touch small at times. So I wanted something big.

I also loved the Spire lifetime guarantee, and a solid construction where I felt that the guarantee wasn't going to be needed. I don't treat things badly, but I want to know that I don't have to protect them when their job is protecting everything I have of value. My bag is it. This is my life in a carry-on bag. There's this and my house, and that's my life. So when I have something in my bag, I want to know it's safe.

So I looked at the Chrome messenger bags and the Metropolis looked like what I wanted. Sized for a 17" laptop, but a sleeve for a 15" MacBook Pro... black on black - with a black buckle - just like my all-black Volt... and Chrome even had the phone caddy for my iPhone. It was sweet. But I didn't pull the trigger on it. I was waiting. For what, I don't know but I think it was today.

Right now, I'm carrying two laptops every day to work - mine, a 17" MacBook Pro, and a work 15" retina MacBook Pro. I have to say, the 15" rMBP has convinced me to downsize, as it were, and yet I have to carry two because I have my life on this laptop, but work is work, and there's a reason they are separate. What I needed was a machine at home that I could set-up as a work machine and just keep work stuff on it, but not carry it back and forth.

So if I got a new 15" rMBP for my laptop, and put my work account on my 17", then I could leave it at home for those times I got the wake-up call, and not have to carry my work 15" rMBP back and forth. Sure, it means buying a new laptop, but that's not such a horrible thing, now is it?

So this morning I decided to get the bag - sleeve, phone case and all. Ordered it and it's on it's way to me. I still need to order the laptop, but that's no big deal, the hard part was convincing myself that it was the right time to make the change. Switch up and go messenger bag and move to a new laptop. The rest is just timing.

I'm starting to feel like I have a little more control in my life. It's not as bleak as it used to me. It's a good feeling.

Looking Back at My Most Painful Year

Monday, February 3rd, 2014

On the weekend, I passed a sad anniversary - one year ago, my wife of 27 years told me to leave. Said she never really loved me - that I was just a better alternative than moving back in with her parents after college. I believed her. Still do. It's been a hard year, a few months in I decided not to describe it as "My Most Painful Year", and instead take a term from Neil Simon, and call it Chapter Two. It didn't help. Still doesn't.

My term was accurate, and it still is. I've tried several times to find that joy that made we want to post about all the interesting things I was doing with technology. All the fun I was having - and even ranting a bit here and there about the crazy things companies do when they think no one's looking. But it's really been hit and miss. I'm lucky to force myself to post something once a month.

Even this post - I should be able to rattle off a year's worth of stories looking back on this year, but I find I have no interest in doing that. What does it matter? It's not going to make me feel any better, I'm not through this, I'm still in the middle of it. That's not the time to look back and try to gather the lessons learned. It's the time to get out of it.

My friends say that time will make this all better. Maybe it will. I'd like to think that some day I'll wake up and not feel this way, but I have my doubts. I don't see why another year is going to make any difference. The last one really hasn't. I don't feel any better. I just feel a year older.

It's been a bad year. That's about the sum total of what I've learned.

Almost a Year Down

Friday, January 31st, 2014

Well... it's almost a year on my own. It's not been a particularly fun year, and I've been lucky to post a simple note a month, but I'm still here... still putting one foot in front of the other, and that's good.

Baby Steps.

Happy Birthday to Me!

Tuesday, December 31st, 2013

Cake.jpg

I don't know what's going to happen next year - heck, I don't know what's going to happen tomorrow. But I do know that today I'm another year older, and I'm hopefully a little wiser... I think I'm a little more compassionate - after the year I've had, I'd think I bloody well should be... and I certainly wish I was a little more comfortable with where my life is. But I'm working on that.

Certainly, I'm a work in progress, and while that's not the best thing for someone hitting 52, it's better than what it could be. I've had a heck of a year. It's not getting any better, and I have a lot of battles ahead of me still. There's the court appearance in a few weeks, there's the separation of finances, there's being a single parent to a trans gay son, there's the death of my brother-in-law, there's a lot of stuff that's happening in the next month, and I'm not at all sure I'm ready for any of it.

My faith says that I'm not going to be given anything I can't handle. I want to believe that's true, but it's hard to believe that I'm going to be ready for any of this, let alone all of it. But that's really not an issue, either, is it? Because it's going to come, and ready-or-not, I've got to press through all this and get through each day.

The good news is that it's only 5 minutes at a time.

That's how I'm moving forward - just 5 minutes at a time.

Everything else, is in His hands, and I firmly believe that this is my only way through all this. Do my best every day. Take things as they come, and only do what you can do - not what you can't. But only 5 minutes at a time.

I sure hope 2014 is a better year for me. I really do.

Installing Hadoop on OS X

Wednesday, July 17th, 2013

Hadoop

This morning I finally got Hadoop installed on my work laptop, and I wanted to write it all down so that I could repeat this when necessary. As I found out, it's not at all like installing CouchDB which is about as simple as anything could be. No… Hadoop is a far more difficult beast, and I guess I can understand why, but still, it'd be nice to have a simple Homebrew install that set it up in single-node mode and started everything with Launch Control, but that's a wish, not a necessity.

So let's get into it. First, make sure that you have the SSH daemon running on your box. This is controlled in System Preferences -> Sharing -> Remote Login - make sure it's checked, save this, and it should be running just fine. Make sure you can ssh into your box - if necessary, make the SSH keys and put them in your ~/.ssh directory.

Next, you certainly need to install Homebrew, and once that's all going, you need to install the basic Hadoop package:

$ brew install hadoop

at this point, you will need to edit a few of the config files, and make a few directories. Let's start by making the directories. These will be the locations for the actual Hadoop data, the Map/Reduce data, and the NameNode data. I picked to place these next to the Homebrew install of Hadoop so that it's all in one place:

  $ cd /usr/local/Cellar/hadoop
  $ mkdir data
  $ cd data
  $ mkdir dfs
  $ mkdir mapred
  $ mkdir nn

At this point we can go to the directory with the configuration files and update them:

  $ cd /usr/local/Cellar/hadoop/1.1.2/libexec/conf

The first update is to handle a Kerberos bug in Hadoop - a known bug. Do this by editing hadoop-env.sh to include:

  export HADOOP_OPTS="-Djava.security.krb5.realm= -Djava.security.krb.kdc="

Next, edit the hdfs-site.xml file to include the following:

  <configuration>
    <property>
      <name>dfs.data.dir</name>
      <value>/usr/local/Cellar/hadoop/data/dfs</value>
    </property>
    <property>
      <name>dfs.name.dir</name>
      <value>/usr/local/Cellar/hadoop/data/nn</value>
    </property>
    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>
    <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
    </property>
  </configuration>

Next, edit the core-site.xml file to include the following:

  <configuration>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/tmp/hdfs-${user.name}</value>
    </property>
    <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
      <description>The name of the default file system.  A URI whose
      scheme and authority determine the FileSystem implementation.  The
      uri's scheme determines the config property (fs.SCHEME.impl) naming
      the FileSystem implementation class.  The uri's authority is used to
      determine the host, port, etc. for a filesystem.</description>
    </property>
  </configuration>

Finally, edit the mapred-site.xml file to include the following:

  <configuration>
    <property>
      <name>mapred.job.tracker</name>
      <value>localhost:9001</value>
      <description>The host and port that the MapReduce job tracker runs
      at.  If "local", then jobs are run in-process as a single map
      and reduce task.</description>
    </property>
    <property>
      <name>mapred.local.dir</name>
      <value>/usr/local/Cellar/hadoop/data/mapred/</value>
    </property>
  </configuration>

We are finally all configured. At this point, you need to initialize the Name node:

  $ hadoop namenode -format

and then you can start all the necessary processes on the box:

  $ start-all.sh

At this point, you will be able to hit the endpoints:

and using the WebHDFS REST endpoint, you can use any standard REST client to submit files, delete files, make directories, and generally manipulate the filesystem as needed.

This was interesting, and digging around for what was needed was non-trivial, but it was well worth it. I'll now be able to run my code against the PostgreSQL and Hadoop installs on my box.

Sweet!

Maybe I need to make a “List”

Thursday, June 13th, 2013

GottaWonder.jpg

I've been having a hard time of it lately - Liza's filed for divorce, I know there's not a thing I can do about it, and the pain is only just beginning. At work, the dynamics in my group are changing quite a bit due (understandably) to a massive influx of new people - including the new manager of the group, and the new tech lead. The group needed the people - no doubt. We've lost a lot of people in the last six months, and things were starting to really get hectic, so it's nice to have the new hands, but there's just no way to double the size of the group and have it not change the dynamics of the group. And adding them all with a span of two weeks is a real shock.

So things are pretty jumbled at work, and I'm trying to come to terms with this newly evolving dynamic, and see how I fit in - even if I fit in, as there's no reason that this group still needs me as we now certainly have enough hands to get the work done in a timely manner. I'm not saying that I want to do something different now, but that if the new dynamic of the group is something that I don't fit into well, then maybe it's time to look for another group in the company where maybe I fit in better.

And all that got me thinking of things I might want to do.

I don't really have a lot of things that I want to do with the rest of my life - I think I've lead a pretty amazing life, and been able to do all the things I wanted to do. I taught at a University, and enjoyed it. I started a company and helped build it to $1 mil/year. I've been in finance and built some amazing performance code. I've seen most of the places I want to see (who sees everything?), and there just aren't a lot of things - big things, that I want to do.

But that doesn't mean I'm all done. Not by a long shot.

I want to get back into Mac development - and not just developing on a Mac - but developing for a Mac. I really like ObjC as a language, and the tools like Xcode are just amazing to me. Sure, I wish we had the old Project Builder multi-window format back, but what can I say? Old Schoool. But it's amazing, and what I've read about in Xcode 5 is also really neat. I've used the unit testing in Xcode 4, and it's pretty nice. To be able to set this all up on a Mac mini is pretty sweet.

So maybe I need a list. A list of the things I want to do.

Like maybe live in a different country and work there. Once the divorce is final, I'll be free to move to another country, and Liza can cry me a river if she doesn't like that I took a smaller paycheck for a better job. It's something I may want to do.

Maybe I should look at just moving to a different state? A good friend is ready to move to California as he and his wife are sick of the Chicago weather. Lots of questions there, but working for Apple might be really interesting. Who knows?

Maybe I could head back to making chips - or teaching at a University again? Maybe just start a Mac development shop and do it all myself? These are the things I'm thinking about, and as I'm thinking about them, I'm a lot more excited about them, than I am at the idea of more arguments in the group I'm in.

I have enough turmoil in my life right now. I don't need more. Really. No more. But I can't sit by and be passive when I feel strongly that the decisions that are being discussed (and made) are heading in the wrong direction for this project. The concept of a good group works because people all care about the outcome, and they all bring their ideas together and try to make the best decision possible.

I am fine with the discussions. I just can't stand the arguments. And right now, it's far more of the latter than I'm comfortable with.