Good people along the way

May 18, 2011

There have been many people who helped, who deserve special mention, and a couple of companies to reference, which I’d be happy to do business with again.  A surprise assist is due toYan Tsirklin, and I owe him thanks — be sure to check out SocialWish, and, if you need “unique and exclusive written articles created to your specifications”, check out Text Broker.
I’d gladly work for Steve Mueller anytime, anywhere.  Also Steve Musch is an excellent technical recruiter, who I was pleased to work with, although that opportunity did not work out (through no fault of his).  Ethan Scheetz, at Recruiters of Minnesota helped me, and almost landed me one job (I came in 2nd, due to myself, not Ethan!).

I want to thank my wife, for her patience, understanding, help and support, and un-ending love.

Intertech is another good company; I am happy to know people there, and maybe someday work with…  Steve Z. at TekSystems is a great guy that both my brother and I know, and I’d gladly recommend.  Another person known to both is Heidi Cline, recruiter at Concord USA — she was extremely kind and helpful.  I can’t say enough good about her.

Also, lest anyone think I only had “bad” experiences at IBM, there is one person I consider a mentor, who aided me both while there, and while leaving — thank you, Scott.

All in all, I consider myself blessed by the people I know, and who know me.

How I got here

May 18, 2011

In two weeks time, I will no longer be employed by IBM — I have been laid off, part of a “large” RIF (“reduction in force” — also a verb, as in “I’ve been RIF’d.”)  Here’s what happened:

Some of this I’ve already written, but here is more detail.  I’m posting this now because I’ve made a decision.

The story really starts back when when I joined IBM.  Before I was hired, there was a friend who suggested it was not the best place to work — they had their own story of administrative nightmare.  Well, it took the company almost six weeks* to decide if they wanted to hire me or not.  Three “managers” at BlueCross BlueShield of Minnesota suggested, strongly, that I apply, and they would put a good word in for me — for which I thank them greatly.  I interviewed, and was then told, by a different person in HR that I wasn’t accepted, but no details were given, although I asked.  So I contacted the HR rep. that I initially spoke to, who seemed mystified that there was no info, but also quite certain that I should’ve known the new person was now the point of contact; however, he agreed to look into it and give me some idea of what wasn’t right — and, to his credit, he did call me back and say, “wait a minute, we’re reconsidering….”  So although I continued to search, I did wait, and eventually, quite late, found out that I would be hired by IBM.

* I am not sure of the length of time.  I do know another person who was in a similar, but worse, situation.

It was quite interesting to leave BCBS MN, take two weeks off, go to training in Washington, D.C., and return to the very same desk, now working for a different company, doing the same thing I was…

Fast forward to February this year — that first week, I’d had a conversation with my manager to discuss my next assignment, and by Wednesday he’d e-mailed the previous project manager to find out when I’d be finished.  The response on Thursday was “Greg was done working on this project as of Tuesday.”  Consequently, I spent the next week both finishing up and sending documentation and notices to people, and also trying to secure a new assignment; contact for the next client, however, was initiated by an IBM manager there, and I reported to my new work site the next week.

Then, I was told at the end of the month, after only two weeks at the new assignment, that I was being laid off.  And I was given a month notice, the week before I was on PTO for a week.

This post is not intended as sour grapes!  I’m not overly complaining about my state, just reporting the interesting and sometimes humorous developments along the way.

What else happened at that client is another story… [this link doesn’t work, yet]

I returned from vacation on a Friday, and updated my status on LinkedIn, and sent a couple of e-mails.  By Tuesday the next week, I had three opportunities — one of which didn’t pan out because the process was too far along (another candidate was offered the position before the end of the week), one because the HR person did not want to deal with a (potential) “do not compete” clause (there was none to speak of, but that is his loss).  One of which eventually led to an offer, which I’ll accept and start presently.

That started at the end of February, and I was told my last day would be March 28th.  I asked if I could appeal, and was told, “yes, but it probably won’t work.”  Others told me similarly, that IBM was less and less approving appeals.  But in spite of many people saying so, I did get a two month extension.  Now, my last day is May 31st.
The point is, just like when I started, as well as at the end, communication within a huge company is rife with mistakes.  To the point that, for three months, administratively, one branch of IBM did not know where I was, while I was (successfully, appropriately) billing my time to my latest client — the resource/assignment e-mails kept suggesting I look for a new assignment, because I was, or would be finished with the current one very soon (!!).

In all this, there are some people I want to recognize, and thank.

Incomplete, but submitted

April 27, 2011

Success is the ability to go from one failure to another with no loss of enthusiasm.”  — Winston Churchill

This post is long overdue, and very incomplete, but I had better update people.  Many of you know, some do not, that I am looking for a new job, because IBM is laying me off – it was supposed to take effect March 28th, but I got an extension until the end of May.

The whole story will be written later, how the administrative failures piled on top of each-other, the boost to my ego from the rapid, positive response of so many, the almost comical “results” for my current assignment (or, if not related, all the more interesting…)

But I wanted to record the number of “failures” during interviews, and the fact that they continue:

Initially, I had three leads with potential within three days – I sent out messages on Friday after vacation and by Tuesday had three opportunities.  Immediately, one fell thru, since I joined the process too far along (an offer was given to someone the next day, I think, because that candidate had already been thru three rounds of interviews); so I spoke with another, who although viewing me favorably, was unable to provide a position at that time – I should really call him back…  The third opportunity at that time is still part of the process, though it has taken time, and a convoluted train of events led to my name and information being passed thru five people: my friend gave it to someone in HR, who gave it to a co-worker, who gave it to a hiring manager who passed my resume on to a former colleague – we’ll see.

In the mean time, I interviewed with two others – one I found on a job search site, but quickly found that I knew someone from college who now worked there, so I got an “inside track” by using an employee referral program.  But that didn’t work out.  The second proved to be a very close race between me and another candidate – both of us made it to the final round of decision-making, and I know from a contact that those deciding were split, with some favoring me, but more the other person.

I also got help from a friend, who sent my resume on to a company for whom I would really like to work, but given my “constraints” (not wanting to travel very much, certainly not every week), I was only considered for one position, for which I did not have some of the necessary skills.

Then in the midst of this, I got a random e-mail from another recruiter, who was hiring at a company [nameless here] which would’ve provided much comedy to my wife and friends if they’d hired me.  It turns out, however, that some degree of mis-understanding (and internal politics) led to me being rejected there: I am not quite the “type” of person they are hiring – but I only learned this after the fact, at the time, all I knew was that I was rejected.

And I’ve gotten more than a few anonymous e-mail rejections from your basic web application system, and a couple of inquiries have failed simply from a lack of timing.  One for a purely technical reason: I was interviewed by the CTO of a company who asked incredibly detailed questions, for which I did not provide the exact answer(s) he was after.

So I have tried, with some bruising of the ego, to go from failure to failure with no loss of enthusiasm.  I hope I am succeeding, I need to keep trying, because I will, eventually, find the job for me.

Vacation in Tennessee

December 9, 2010

So we were just gone for five days and four nights to Nashville, TN, and the area, including Franklin.

We stayed first at the Gaylord Opryland.  We wanted to see how they had remodeled after the flooding – it was almost as if it had never happened – at least we couldn’t tell.  The beautiful gardens were as grand as we remember, better because we knew they’d re-done so much.  And we had never seen the Christmas display – the lights, and “Snow!” (we laughed), and “Ice!”  The last was incredible, rivaling our Winter Carnival ice sculptures.

We ate at the Pancake Pantry – I’m glad Lana found this, it was almost the best meal we ate there, and very popular w/ the locals.  Sunday night we ate at the Hard Rock Cafe, which was redecorated even before the flood.  (We didn’t eat at the Waffle House, but maybe next time…)

The things we do on vacation: we looked for shoes for me, hitting two malls, and not finding what I was looking for; and we made an unexpected stop at a Walgreens Take Care Clinic (everyone is fine).

We also ate at the Loveless Cafe, but I didn’t realize, until we were on the way, that is was quite a distance from Nashville – oh, the GPS told me so, but we were already on that side of town, thanks to our “mall-hopping.”

Tuesday, we were in Franklin most of the day – ate lunch at Puckett’s Grocery and Restaurant, and walked the downtown/historic streets, but were sad to see that Gray’s Pharmacy was closed, or looked so.  We had supper that night at Cheddar’s.  We actually ate there first in St. Joseph w/ my aunt and uncle, and we liked it so much we sought it out again.

By the way, did I say we flew Southwest?  If you check in via FB Places, they’ll donate to Make A Wish.

The safety speech got funnier and funnier.  The first leg, MSP to MDW, the flight attendant was kind of a snit, as my wife would say.  But the 2nd leg to BNA [Berry Field, NAshville] was hilarious!  And the first leg back was funny, too.

There are six exits aboard this plane: two in the front, two over each wing, and two in the rear.

In the event of a water landing*, please take the life-vest that looks like a toilet seat cover from under the seat and put it over your head, pull on the string to inflate.  If that doesn’t work, blow in to the tube at the top, if that doesn’t work, I hope you know how to swim really good.

*On the way back from Nashville, she pointed out that there’s a really big body of water near Chicago 🙂

We don’t expect a loss of cabin pressure on the flight today.  If we had, we would’ve all called in sick.  But if there is, a mask that looks like it was designed by Ralph Lauren will drop from overhead, please put it over your head and your big nose, and breath normally.  If you’re flying with children, or your husband – in some cases that’s the same person – put on your own mask before assisting them.

Smoking is not permitted on this flight.  Do not tamper with the smoke detector in the lavatory – or the webcam…

I’m not doing justice to either of the two, and I’ve combined the two into one.  Like they say of all good humor, “you had to be there.”  It absolutely made our day, both times.  I told the second one that I’d almost pay to have it recorded

Now sit back and relax, or sit forward tensely, I don’t care – you’ve already given us your money. 

If there’s anything we can do to make your flight more enjoyable, please find one of the flight crew and offer us twenty dollars…

If you listened to all of these instructions, thank you; if not, good luck because you’re on your own.


Now I’m back, and I’m going to try installing Haskell next, because I have Clojure working, and doing what I want.

Clojure self-modifying code

December 2, 2010

One of the advantages of having my computer, and all software, re-built is the opportunity to start over.

I just re-installed Clojure.  I seem to have a backup of one project I was working on, but haven’t looked at how recent, so I’m not sure how much I saved or lost.  That aside, I thought I’d do an experiment in self-modifying code.

This is not exactly what is meant, but in a sense it is:

(def f '(fn [x] (+ x 5)))
(def add-some (eval f))
(println "add-some a func?" (fn? add-some))
(println "result =" (add-some 13))
(def l (first (rest (rest f)))) ; one short-cut
(def l2 (cons (first l)
	      (list (first (rest l))
(println "re-defining, kinda cumbersome, but this is only an example")
(def f2 (list 'fn '[x] l2))
(println "original list was:" f)
(println "new list is:" f2)
(def add-more (eval f2))
(println "new function result =" (add-more 13))

So what is this code? what does it do?  I define a list named f (note the single-quote at the beginning — this says don’t evaluate the list, but store it).

Then I define a function (similar to defn, but expanded) using eval of that list; testing that it is a function, and using it (the result is 18).

Next, I “modify” the list [actually, I create a 2nd list], and “re-define” the function.  Well, it’s not exactly what I was after, but I am going to “publish” my result for now, maybe add more later…

Knowing how way leads on to way
I doubted if I should ever come back

Ah, well.  If you, my dear reader, should ask questions, I’d be more than happy to answer them.

A short paragraph explaining why I blog: there are two reasons.  The first is for my own personal record of what I did, or didn’t do.  The second is if someone finds entertainment, education, or some sort of connection with what I do, then please leave a comment so I know you’re out there.
I think I would write more, and more often, if I knew I had an audience.  Or maybe not, but at least I’d have a better focus than what I just wrote.


November 21, 2010

I am not dead, yet.  I know it’s been three months since I posted, but I’ve been overly busy.

This last week, my laptop “died.”  This is the story of my own “phoenix rising.”

There is some technical detail here, so I’ll give the short story first: my work laptop started having problems a little over a week ago, so I had to (a) send it in to try and recover some data, and (b) find a replacement — I built a Linux box on my old iBook, and installed open software to connect to my (virtual) work machine; then I had wireless networking problems, after I solved one issue.  Now I have my computer back, and most of my data and software restored.

Friday last my work laptop asked in install an update for some software — I won’t name it, and thus blame that, because it may not be directly related, or some interaction, I’m not sure.

After reboot, just at the point you’d normally get the Windows (XP) login dialog box, I got a Blue Screen Of Death.  I was only able to boot in to “Safe Mode” — not even Safe Mode with Networking or Safe Mode with Command Prompt.  Lesson learned too late: at that point, back up whatever isn’t already saved, because you’re in trouble.  But I didn’t do that.  Instead, I fiddled around until I broke it completely:  running msconfig allows you to change certain startup parameters, which didn’t help, but I was able to alter the default safe mode settings to automatically start safe mode with command prompt — with the inevitable result that now I couldn’t even start up in Safe Mode.

Drat.  So I had to ship my computer out to tech. support.  On a conference call on Friday, I mentioned, “if I have to, I’ll drive ‘downtown’ [so they can work on it],” but someone else mentioned that “downtown,” for my work technical support, is Rochester…  So I went in to Fed Ex Kinkos and just said, I’d like to send this [my laptop] to here [I got the address to send it to].  The reason being I had hopes they could recover some (all?) of my data — there are two levels of encryption, so I couldn’t just boot from CD and read the harddrive myself…

In the meantime, I had to have a computer to use; I borrowed my wife’s laptop for part of a day — since my current assignment is a position where all I really need is a virtual desktop interface to my virtual computer.  There’s something to be said for a virtual computer.  Not much, mind you, since I have limited memory, and CPU speed, but that aside, I was able to work “without difficulty” from a different computer, as long as I had a browser to use which could access the “computer” with my work saved on it.

The truth is there is/was not all that much that actually resides on my laptop itself that I couldn’t live without — which is good, because it turns out nothing could be recovered.  More on that later.

Well, under duress, I was able to build/install Linux on my old Macintosh iBook — very old.  Truth be told, I’d installed Linux previously, twice, but I never did get wireless networking operational.  But with the pressure of ‘I have to get work done,’ I succeeded where I failed before.  I connected directly to the Internet with wires — sometimes there is no substitute for a Cat 5 Ethernet cable.  This is actually the 2nd time that I needed to directly connect: a few weeks back, my laptop had trouble with all wireless networks, and tech. support then suggested that I need to un-install two applications (a connector program and the hardware drivers themselves; in order to accomplish this I had to direct connect then, also.  First (two) times I had to use a cable in a few years.

But I did it: within a matter of hours, I had a functional, operational replacement laptop, running Linux on a old iBook — a computer I could actually get work done.  I’m rather proud of that (which is silly, I know, but it felt kind of nice; especially the fact that I really had to dig to find the solution for wireless — I ought to post the link(s) that helped me do that…).

Then I needed a VDI client — did you know that VMWare has an open source ?  It took a small effort to get it to build.  The biggest problem was having the Boost libraries available (even w/ the –include-boost=no flag??).  I needed to alter a couple of environment variables before running the configure script (CPPFLAGS.  The LDDFLAGS when set, caused other problems, so I altered the Makefile directly — something I don’t like to do.  I would always prefer to follow the standard procedure to do things, but I also had to manually move the boost library in order to get things done.  And the LDDFLAGS required were to make missing symbols only warnings and not (fata) link errors..)

Then on Monday night I ran into another goofy problem: when putting the computer to “sleep,” if I did that manually (not by closing the lid, but from the menu option), then it effectively turned off the wireless network card and re-starting did not re-enable it.  It almost seems that there is a hardware-software switch.  Even re-starting the entire system did not work.  It took me quite a bit of finagling to get that worked out.

Finally, I heard on Wednesday late that nothing could be recovered, so my work laptop was being rebuilt from scratch and sent back to me.

Fortunately, when I did this two years ago, and, to a lesser degree, when I re-installed all the software on a new laptop this Spring, I started a tiddlywiki page of links to the programs I like.  I’d tried to keep these notes up to date, but unfortunately, hadn’t yet backup up the latest version (my online backup choice is DropBox), but I had and have a fairly recent version — and you can bet that as I go, now, I’ll keep the latest version online.

So I was off to the races — I spent a fair bit of time on Friday, and more on Saturday restoring what was lost.  What I’m missing is a Java utility program that I wrote for work, any admin notes that I had stored on my laptop, and my most recent Haskell work.

But what I kept was anything and everything that already lived “in the cloud” — or at least in non-local, internetized storage.  All my e-mail is basically web-based only (my work e-mail was safe — all in a Lotus Notes server out there); any interesting links to web pages were saved in, and most of what I want to remember is there, or starred Google Reader stories, or Read It Later.

I still have work to do restoring my sanity, but I’m almost completely back up to speed, and I have a clean machine to boot.

Note: I’ll add links later, but I wanted to get this posted.

One brag: my wife asked — Wednesday or Thursday — if people at work realized I was working without my laptop (I described it as “programming left-handed”); I told her I considered a mark of my professionalism that they did not know most of the difficulty that I encountered — I just continued working.

But I’m curious: I don’t want any sympathy, but I what have you done to protect yourself from computer problems?  Backup regularly?  If not, you can share your story when it happens.  What else?  Any ideas?


Latest on P != NP and Next Haskell Work

August 19, 2010

At the end of this post, I’m going to lay out my plan for further work on Haskell

Update: R. J. Lipton wrote a nice, easy overview of the problem, and a timeline of the week following for the magazine Communications of the ACM. This is probably my last work on this — I still haven’t gotten back to Haskell…

The NYT had an article on Monday, which talked around the proof, but was an interesting discussion of using “social media” to solve problems.

“At this point the consensus is that there are large holes in the alleged proof — in fact, large enough that people do not consider the alleged proof to be a proof,” Dr. Vardi said. “I think Deolalikar got his 15 minutes of fame, but at this point the excitement has subsided and the skepticism is turning into negative conviction.”

— Which means it could still be correct, but probably not.

Richard Lipton has a blog post about why proofs (in general) matters — again, a good read itself (including a “personal” note about Dr. Deolalikar original wish for privacy, and actions in that direction recently.

So on to other things — I’m giving up for now on a Haskell GUI, in favor of getting something done.  I typically resist posting “plans,” but I do tend to get more done that way, so here goes:

  • first, read an (.INI) file,
  • 2nd, parse command-line arguments (and write back the resulting file)
  • copy files/folders based on the previous two
  • and then move on to “comparative programming” for Sudoku…

So we’ll see what this next week or two brings.  I’ll be out of town this weekend, so no progress for a while…

Links with little comment (P != NP)

August 11, 2010

Updated: Two links to R. J. Lipton’s blog with possible flaws — first, an explanation of a type error (really, very readable, and recommended); and second, a serious threat (note that, altough the link does not include it, the title of the post has a question mark at the end!).

Then, a personal note — I do not know Vinay Deolalikar, but I hope he has quite a bit of internal fortitude.  I am led to believe that the discussion has been non-personal, and even, perhaps, supportive, but to have your ideas attacked is not easy, even when couched in constructive-criticism form.  I read in one set of comments a back-and-forth which indicated some derision for HP Labs (not exactly, but a definite negative vibe, and clearly I’m not alone in that perception [see the comments in the 2nd post, about 11:24 PM August 12 — sorry I couldn’t link to it…]).

FWIW, here is the wiki discussion of the proof.

Read the rest of this entry »

Functional Programming in the News

July 27, 2010

Once again, the news leads my way.

First, it seems that chip designers had no choice but to create multi-core processors — even though it was a risk, even with all the unknowns.

And now Apple is announcing a twelve core machine.

And second, the best way to deal with this situation is not threads, but functional programming — not mentioned are OCaml, Haskell and others, but Clojure and Erlang get the nod of approval from Tim Bray.

So I’m still on the right track, or others are now catching up.

I’d like to hear other people’s experience with functional programming.  How did you come to it, and what are the results?

Functional Programming, Haskell Frustration and Change of Venue

July 14, 2010

First, I’m long overdue “explaining” functional programming. Then, I’m frustrated w/ Haskell GUI issues. Finally, my non-technical writing is moving to a different blog.

I became interested in functional programming, over a year and a half ago, because of an article in Dr. Dobb’s Journal, and the confluence of other factors.

This is a very readable introduction to functional programming, here is a comparison with imperative programming- specifically with respect to Haskell.

I describe functional programming in terms of these aspects:

  • everything is a function (“variables” don’t exist — symbols don’t change once set; recursive functions are encouraged and preferred)
  • because of the above, side-effects are eliminated — a function only takes input and produces output; it does not change global variables, or alter the state of execution, and, therefore, always produces the same result, whether called first, third or last in program order.  Also, if a function is called ten times, repeatedly, with the same input, the output is always the same.

In imperative programming (and not necessarily, but in what I call “normal” programming) a lot of the work gets done by side-effects.

A typical example might be a hospitalprogram — where setting the patient name would initialize a new admission record, presuming that this is the desired operation.  But there is nothing per se about setting a person’s name that implies a new record should be initialized.  So that operation would be a side-effect of the function “set patient name.”

  • Now, frequently, this is how things happen.  Most “normal” programs operate some sort of finite state machine — that is, the program should do something different, even when the same function is called, at different point in the execution timeline.  But this is precisely what makes debugging so difficult.
  • Also, because of the changes to global variables and state, “parallelizing” code to run in a multi-threaded or multi-processing environment is non-trivial — nay, is next to impossible.
  • And those last two points are part of the primary motivation for the current interest in functional programming: ease of debugging, and simplicity of parallelization for multi-processor and multi-core computers.

    I strongly urge anyone truly interested in functional programming to do more, better research than that, but I hope I spark an interest in some to do that…

    Haskell “libraries”

    The problem I’m having is that too many Haskell libraries seem to be Unix-centric. For instance, here is  a program using FileManip, but that requires the unix lib. from hackage, and you can guess my luck getting that running under Windows.  WxHaskell required wxWidgets, and specifically wxConfig, which didn’t build for Windows (although most of the rest did).  Gtk2Hs worked almost completely, but some Glade files were/are missing; and along the way, I found out that I have two cabal installs, or something screwy with my setup, so I might try something else, we’ll see…

    Blog Separation

    Finally, I’d like to note that my non-technical blogging has moved.  I may move some previous entries there later.  I once ran across a blog, the ideas of which were mixed — some software engineering principles were dead-on, then there were some more crackpot ideas, and I found it a little dis-heartening to try and keep the thoughts separate:

    yes, I agree with these things; no, I don’t agree with those.  I know it’s the same person, but one shouldn’t invalidate the other.

    I don’t think my personal beliefs, here, invalidate, my comp. sci. musings, but it might be a distraction to some.  My personal reflections, whether you agree or not, should not influence your reception of my technical thoughts.  And you shouldn’t have to filter through one to find the other (some people, if you can believe it, don’t care about my technical blogging, but only my “writing”).