CAT Scan Results

 Well my doctor just called with the results of my CAT Scan.  There is a lot of scar tissue on my lung now, and what appears to be a 3 cm abcess at the base of it.  The doc says the abcess shows signs of “infiltrate” meaning that it appears to contain or be surrounded by infection.  The radiologist has suggested as a saftey precaution that I be given a test for tuberculosis.  My doctor thinks it is extremely unlikely that I have tuberculosis but we're going to do a test anyway just to make sure.  So I'm going to run in to the doctor's office now to have that done.  It will take two days to determine the results of that.

A matter of concern is the fact that I still have some infection in my lung, and what to do about it.  After 24 days on the antibiotic, if it was going to wipe out the infection, I would think that would already have done so.  My doctor says she is going to share my CAT Scan results and information with a pulmonologist and see if he recommends any change in my treatment, like perhaps a different sort of medicine.  My doctor is glad to hear that I haven't had a fever in almost two weeks, and says that if I weren't feeling better, she would generally hospitalize someone with this sort of injury.

So far nobody has repeated the idea of sticking giant needles in my side to drain out infected fluid, and I hope nobody does.  That prospect still terrifies me.  I sincerely hope that if that has to happen, I can be sedated for it.

Getting nervy over here.  Jesus will this thing ever just go away?

Damn, I Want French Fries

You may recall my New Years resolutions for this year which I posted on New Years Day.  The basic thrust was:

From this point forward – no McDonalds, no Wendy's, no Burger King.  And nothing fat fried like french fries or fried chicken.  I may make an exception for the occasional chinese dinner, but otherwise, no exceptions.

So far so good, I've stuck to the resolution, but man!  Am I ever craving french fries.  Every single time I think of them my mouth starts watering and I lust for that salty, greasy, fried goodness.  I'm not missing the burgers at all.  But man do I want fries.

So the other day, after coming home from The Butterfly Place I quickly ate a chicken stir-fry sandwich from D'Angelo before going to bed and sleeping for a couple hours (and dreaming about french fries, btw).  Then my wife woke me up around 5 PM, and asked what I had eaten for lunch.  I told her about my sandwich and she said “is that it?”  I said “Yeah, basically.  I also drank a bottle of strawberry/kiwi juice and ate a small bag of baked Lays potato chips.”  (Note: I hate baked Lays, but they aren't as bad for you as regular chips, so I eat them instead.)  Then my wife asked the big question:

“So what's that bowl of fries downstairs?”

I knew my wife had eaten at the Olive Garden for lunch, and I know how much she likes to pull my leg, so I said “what the fries you brought home from Olive Garden?”  She swore up and down that she didn't bring any fries home and continued to give me a playful look that said you cheated on your resolution, dintcha? “I don't know what you are talking about,” was all I could say, but my wife didn't buy it.  Eventually she went back downstairs so I got up and went to my daughter's room to talk with her.

“Neya, honey, did Mommy bring home french fries from the Olive Garden?”  My kid knew nothing about it, and said that there were no french fries downstairs.  Now I was certain my wife was really having me on in some way, so I decided to go see for myself.

She came into the hall laughing as I was descending the stairs.  “Those weren't french fries.”  I didn't know what to say to that and then she went on to explain she had peeled and sliced up an apple for Lynnea that morning, Lynnea had transferred the apple slices to a bowl and had eaten only a portion of it before leaving the bowl on the kitchen counter for somebody else to clean.  While we were out the apple slices had browned as apples do, and when my wife next saw them, they looked very much like fries.

And inside my tummy cried a little.  There were no french fries in the kitchen.  Gone was even the possibility that I might give in to my cravings and nick a few of the fries.

Damn.  I want french fries.  With salt and pepper and ketchup.  Or maybe just with pepper.  Mmmm.

Going Back In…

Well today is the first day I'm going to try working at the office.  I could continue to work from home, but I am going a little stir crazy being cooped up here all day every day.  If things don't work out, I'll come back home.  So don't worry, I'm not going to “push it”.

I did a trial run yesterday by driving out to Westford and visiting The Butterfly Place with my family.  (We went in separate cars, just in case I needed to leave early.)  The Butterfly Place is a butterfly conservatory like Magic Wings out in Deerfield which we visited back in May of 2006.  By way of a review let me say the two places really don't compare.  Magic Wings is much bigger, nicer, and offers far more attractions than The Butterfly Place.  If you don't mind the trip to Deerfield (which takes like, forever, at least from here) it's definitely the superior of the two.  If however you live right around Westford and want to spend an 30 minutes to an hour with the kids looking at live butterflies, The Butterfly Place makes a nice local alternative.  I took a few pictures which I will upload at some point.

After about 90 minutes at The Butterfly Place, I was exhausted, so I said goodbye to my wife, kid, and in-laws, and drove back home.  Whereupon I immediately went to bed and slept for a couple hours.  But that was a lot of walking around in an extremely hot room (80 degrees+).  I think just sitting at my desk at work will be better.  We'll see.

No results from the CAT scan yet.  I'll call my doctor today to find out what that showed.

The IRS Wants a Piece of Your eBay Earnings

It's been years since I sold anything on eBay, and when I was selling, I made a pittance.  But some folks make their living via eBay, and the IRS knows it.  Unlike full time employment, there are no W-2's from eBay, and it is not up to eBay to report your earnings.  Yet…

According to an article on ars Technica, the IRS is attempting to force eBay to submit documentation to the IRS on the yearly earnings of it's sellers.  eBay for its part is resisting at present, by rightly pointing out that there are many online auction/sales houses, and if eBay is singled out, the customers will simply go elsewhere.

So a word to eBay sellers out there… if you aren't reporting your earnings, you might want to start.

I'm Back!

I'm happy to say that this time my CAT scan went quick and easy and with it behind me I am feeling a lot better.  The last time I had a chest CAT scan done there was an incredibly long delay while I was laying on the platform.  And the last time, they were unable to find a vein in either of my arms or my right hand (ouch!) and could not administer the special dye that they use for doing a second “contrast” scan.

This time the technician had no trouble finding a vein, and got the IV into me before the scan began with no trouble at all.  I also think that they have since acquired newer equipment because this time the scan went very quickly indeed.  I think the entire thing was done in about 10 to 12 minutes.

If you've never had one, basically they have you lie on a platform in front of what resembles a giant donut.  For me they put pillows behind my head and a foam wedge under my knees.  And for a chest scan, they like to have your arms out of the picture, so they had me put my left arm behind my head and my right arm (the one with the IV) they just had me hold up in the air and rest against the donut.  Here's a picture of the scanner they used on me (a Toshiba Aquilion 16):

Inside the donut are x-ray cameras on some sort of track that allows them to (noisily) whirl around the inside of the donut at high speed and take a 3 dimensional “slice” image of your body.  The platform is on a motorized track that allows it to slide back and forth through the donut while the cameras take the pictures.  For a chest CT, they slide you in all the way up to your chin.  This can be a little alarming if you don't like enclosed spaces.  I just closed my eyes and didn't think about it.

Then, when the machine is ready to take pictures, it talks to you.  Now, take a breath, and hold it. And then the platform moves a bit.  Now, breathe normally.  The last time I had a CT, this process took about 20 minutes for the first scan only, and the platform would inch along, and then stop a few seconds so the machine could tell me to breathe normally and then take another breath and hold it.  This time the scan was literally over less than a minute after it began and the machine only asked me to hold my breath once.

Then the technician returned to inject the dye into the IV.  The IV tube's contents was colorless… I couldn't see the dye, but I'm sure it showed up on the x-rays.  The technician warned that people react in different ways to the dye, but the most common reaction was a feeling of heat as the dye moved through the circulatory system.  He told me that whatever symptoms I felt I should just speak into the air and let him and the other technicians know.

After the platform repositioned itself, I began to feel extremely warm in my temples.  Nowhere else, just my temples.  They felt very hot like I had a fever or had just run around the block and winded myself.  So I said “I'm starting to feel hot.”  A disembodied female voice came through some sort of intercom in the room and said “That's okay, that's normal.  It should pass soon.”

Then the second scan began.  If anything it was shorter than the first, and this time the machine only spoke to me once.  It said: Now, breathe normally.  Which was a little baffling because it had never asked me to hold my breath in the first place. Then the technician came back in and said “You're done.”  He removed the IV and put a bandage over the spot, and told me to take my time getting up and getting my gear on, and offered me a cup of cold water.  Which I was definitely in the mood for, since you're not allowed to eat or drink anything for 3 hours before the exam.

He told me that my doctor should have the results within 3-4 days or much sooner if anything serious is found.  So that's it.  I thanked the technician and complimented him on his bedside manner and the ease with which he made me feel comfortable and reassured, and then I was outta there.

I'm back home now and my lung is hurting.  I'm finding that it feels good when I first wake up but as the day wears on it gets more and more sore.  Hopefully that will go away soon.  I'll be calling my doctor on Monday to see if she has the results, and to see what she wants me to do next.  It's day 19 of the antibiotics and I have 11 days left.  It would be wonderful to not have to keep taking that moxifloxacin quinolone.


Communication Levels — Typical

So I'm lying in bed working on this little internal project, when at about 1:47 PM I receive a meeting invite for 2:00 PM.  The invite is from someone I don't know (let's call him Chester) who works out of our Arizona office.  The e-mail says “Hi, this will be the introduction to Thingamabob.  We will set up the phone bridge to conference in the Burlington and Westford offices.  Please have NetMeeting running on your machine so you can follow along.”

I'm convalescing from home of course, working from bed, and I am not in either the Burlington or the Westford office.  I quickly run back through my e-mails for the last few weeks.  Nope I've not gotten anything from Chester before, or anything about “Thingamabob”.  I also don't know if I can get NetMeeting up and running properly while remotely connected to the office LAN (in the next 13 minutes).  I've never really used it before.  So I send Chester an e-mail which says: “Who are you and why am I being invited to this meeting?  Are you aware I am at home convalescing from pneumonia?  I am not sure I can get NetMeeting up and running, can you send me your slides so I can follow along on my own?  Here is my cell phone number to conference me in…”

A few minutes later I get an apologetic phone call from Chester.  Apparently someone thought I would be good as a consultant-type resource on his new project.  He knows I am home sick which is why I am not assigned as a full time resource.  Basically I'd be available as a “floater”.  I would review the GUI spec and make comments and suggestions, and also research stuff for the team, or be a sounding board for GUI ideas.  It's part time but at least it is billable.  Chester is shocked to learn that nobody bothered to notify me that I was going to be on a new project today, or bothered to send me any project materials so I could read up on it.  He's shocked, but I'm not.  This level of communication (that is to say none) is very typical at my company.  But then Chester goes on to say that the phone bridge can only conference in two locations at once, so they can't conference me in.  So I'm not going to be attending the Thingamabob project introduction meeting after all.  Even less communication.  Great.  I told the PM that I would be happy to help out on his project in any way I could, and could he please see to it that I am sent some project documentation?

A few minutes later I get an e-mail from the tech lead on the project, a guy I've worked with before.  He says “Frank said you might be a GUI consult resource for the Thingamabob project. Tony and I are the officially assigned developers. I am just checking in with you to see if anyone has talked to you about this. I have not been copying you on documents.”

To which my basic response is Frank Who? And no, nobody has told me anything.  I know a couple guys named Frank, and one of them is a guy I talk to every day and who jokingly says to me every now and then that I should consult out on MFC GUI's since I was now an 'MFC expert'.  He says that to get my goat because he knows I hate MFC and would rather boil in oil than work on another MFC GUI.  The other Frank is a manager that I have never worked for and haven't spoken to in almost a year because he's always out on travel.  Turns out that it was the latter Frank, and I have no e-mails from him about Thingamabob.  Typical. 

I swear someday I'm going to arrive at work and find a half-naked clown holding forceps and a turkey baster in my cube and he's going to say “I'm sure you've been expecting me.  Your boss said that we could get this done today.  Let's get started shall we?”  I will not be surprised.

In other news my CAT scan is tomorrow morning at 10:30 AM.  I'm pretty nervous about it.  I don't like those things.

Shaken Up

And yesterday I was feeling so much better about my condition.  I just got back from my doctor's appointment. 

Although I have improved, I'm clearly not 100% better yet, so she's extending the antibiotics for another 10 days and has scheduled me for a chest CAT scan on Friday.

The xrays revealed cavitary lesions at the base of my left lung, and possibly a fluid-filled cyst. Doc says it may just go away on its own or I may have to have it dealt with surgically. Needless to say that scares the crap out of me. She said the likelihood that I would need such a procedure is very low. I hope she's right.

In the meantime she recommends I do deep breathing (even though it is painful) to stretch out the lung and try to keep it from bunching up as the scar tissue forms. I'm pretty shaken up right now as well as exhausted from the running around, so I'm going to bed.

I'll Say!

When I tell people I have pneumonia a lot of times they say to me “wow, that really takes a lot out of you.”  They aren't kidding.  You lose your strength, your respiratory capacity, and your stamina.  Then this morning I stepped on the scale and noted that over the last two weeks I've lost 20 pounds.  Guess pneumonia really does take something out of you… in my case, about 8% of my body mass!

I went back to the hospital for a new set of x-rays today.  My doc will check those out and we'll talk about where I am during my appointment tomorrow.  I really hope the bug is gone or almost gone, as I have only 5 days of antibiotic left.  This trip to the hospital was much better than the last one.  I had more strength and less pain this time.

Last time was really bad.  When we finally made it in the door Patty asked me if I wanted a wheelchair, but male pride caused me to say “no way.”  Then after checkin we began the long walk to radiology.  I had to keep stopping to rest, or to cough up bloody gunk, and my side hurt something fierce.  And by the time we finally got there I said “okay… I'm ready for the wheelchair.”  I went in and had the x-rays and then they transferred me into a wheelchair.  By this time I was fading fast… my eyes were half open and I was sort of swimming in and out of consciousness.  Eventually the lady who took the x-rays came back and said “honey we need you to stay here for a bit, we're trying to get your doctor on the phone.”  I just laughed and said “that bad, huh?”

After some amount of time they said we could go and Patty wheeled me to the pharmacy where they filled the prescriptions.  I remember feeling immensely grateful that I didn't have to walk all the way back… the male pride had evaporated, apparently having taken a shot in the chones from my illness.  And when we got home I went to bed and fell asleep immediately.

This time was much better.  I was able to walk all the way to the radiology area with no significant trouble except a little heavy breathing.  And after the x-rays the technician just came out and said, “okay you're all set, have a nice day.”  And I walked out under my own power… male pride restored.

Now I'm back home and believe me, I am pooped from the trip, but definitely not completely wasted like last time.  I'm on the mend.

Weelanders Show How Evolution Leads to Extinction

Okay this is going to be a lengthy article with a lot of graphics, so I am going to use an excerpt today.  Basically it's a summary of the first run of my Genetic Factoring sim, and how it demonstrates that evolution can lead to extinction.  It also includes a summary of the most efficient (and robust) genome to be generated by random mutation and natural selection, and how it compares to the original genome.  Let's begin with a graph…

Efficiency Over Time

This graph shows the average efficiency of the top performing genome over time.  As you can see, the sim starts with the most efficient individual scoring about 2200 steps per test, this is Facto-f, the baseline genome.  Through random mutation and natural selection the efficiency rapidly improves to a point where the average is around 600.  Then over a long period of time, there are three notable small steps downward until the efficiency is averaging around 500.

And then, disaster!  The steps per test spikes back up over 2000… what happened?  The short answer is evolution, and a little too much of it.  At tick #3036 (note, numbers along the bottom of the above graph are not tick numbers, sorry, 3036 is a few ticks before the big spike), the strongest genome is called “h33″.  There are over 400 genomes in the genome bank at this time so the world has been busy.  h33 has a mutant child called H40, and H40 is so well adapted to his environment, he's even faster than h33. As a result h33 dies out over a few generations, replaced by H40.  But H40 is too well adapted to his environment, which is to say he's very fast given the batches of numbers he happened to be given to test, but his speed came at the cost of a computational flaw which would only occur in rare situations.  Maybe he couldn't handle square numbers, or numbers that happened to be prime, or multiples of 31, but one thing is certain — he was very good at factoring most numbers, but he couldn't factor them all.  Like a dinosaur adapted to a hot tropical environment, he ruled the grid… but then it got cold.

Any inaccurate result immediately causes the Weelander to die, so H40 persisted for a few generations before being handed the fateful batch of numbers containing the poison pill that completely wiped out his kind on tick 3061, leaving behind only the baseline Facto-f genome that I infuse into each generation to prevent a drift toward inaccuracy:

T003061 -------------------------------------------------------------------------------------------
Most efficient individual f-003061: 2005.560
Births: 220 Deaths: 230 (182 culled for inaccuracy, 48 culled for inefficiency, 0 exhausted)

Essentially, the sim was starting over at baseline, which is why you see the enourmous spike in computation time on the graph.  Then evolution again pushes the execution time down, leading to more and more efficient creatures until a similar problem occurs again resulting in another mass extinction and a spike in execution steps as the sim returned to Facto-f again.  Without the Facto-f infusions, the sim would simply have halted with all creatures having died out.  Evolution –> extinction.  How interesting!

Genome h33 — Analysis

In the entire history of my first simulation, my top 10 genomes were:

H40 509.5428571
h33 522.3523618
Y29 523.6892308
d28 536.1935
927 550.5888372
T25 566.3514286
E66 566.9955556
O23 570.307907
z21 571.4323636
w26 572.064

The number on the right is average execution steps per test value.  Obviously H40 is on top, but he was flawed in a way that his parent, h33 was not. H40 was efficient, but h33 was robust and efficient.  Sadly, H40 didn't last long enough for the genome bank to save him to disk, so I don't know exactly what his flaw was.  So let's skip H40, and look at h33, the product of many evolutionary changes, as evidenced by his ancestry graph:

Extinct h33 - 648 generations. First birth: T002408. Last death: T003055.  Lifespan: 647.              Lineage:  --> Y29 --> d28 --> 927 --> w26 --> T25 --> O23 --> z21 --> e21                        --> 820 --> F13 --> O12 --> q11 --> x9  --> Y9  --> G8  --> U7                        --> J7  --> 77  --> (lost)

The (lost) indicates that whatever the progenitor of genome 77 was, it was such a minor genome (very few births) that the genome bank threw it away to conserve memory.  Nonetheless all mutations lead back to Facto-f ultimately, which indicates that h33 contains at least 19 mutations and possibly more.

The genome for the factoring Weelanders is pretty small, just 6 chromosomes of which only 4 can mutate.  Those 4 are [Main Loop], [Compute Root], [Is Prime], and [Next Prime].  [Main Loop] actually performs the factoring, dividing the test number by a series of primes starting at 2.  [Main Loop] calls [Next Prime] to get the next prime number to test with, and [Next Prime] in turn repeatedly calls [Is Prime] as it searches for the next prime number.  [Compute Root] is used both by [Main Loop] and [Is Prime] to set an upper limit on how far to go when testing a number by computing the number's square root using the Babylonian Method.  Remember, when factoring, there's no reason to test values above the square root of the number you are factoring, any value greater than the square root which happens to be a factor, would be multiplied by a factor smaller than the square root which you already should have found earlier.  Like this: SQRT(24) = 4.9, 24 = 1 x 24, 2 x 12, 3 x 8, 4 x 6, if I keep going the next factor is 6 as in 6 x 4 = 24, but I already determined that earlier.

Not surprisingly, h33 has mutations in all 4 of these chromosomes.

[Main Loop]

The code on the left is the original Facto-f genome, and the code on the right is the Facto-h33 genome. Lines highlighted in gray with blue text are present in f, but missing in h33.

Lines 3 & 10: Both of these were intended to be timesavers.  On line 3, if a number is < 4 then it is either 1, 2, or 3 all of which factor trivially and therefore don't need to run through the formal factoring process.  But then how often is one of those going to be in the test sample?  h33 has discarded this test.  On line 10 I check to see if the value to factor has become 1 and if it has I bail to the end, as there is no reason to continue.  But line 11 would also capture this condition, and therefore there is no reason to have line 10.  h33 therefore ditches line 10 as well.

Lines 4, 8, 12, 15, 30: The original code contained comments and blank lines which are interpreted as NOP commands by the container class.  NOP = No OPeration.  Executing this line does nothing at all… except consume one execution step.  Most of the NOP's in [Main Loop] have been ditched by h33.  Resulting in slightly more efficient code.

[Compute Root]

Lines highlighted in ochre are changed in h33 from the original code in f.  This is the most heavily modified chromosome.

Line 8: Facto-f uses the target value divided by 2 as the first root to test, instead h33 simply uses the value 16/4 (a.k.a. 4).  Strangely, running the Babylonian method myself I discovered that using 4 instead of target/2 tended to require 1 fewer iterations of the method to get to the root.  This lucky mutation saves the Weelander time.

Line 9: The baseline requires that the loop keep iterating 3 times once the value of _R and _SquareRoot have become equal.  This is a just-in-case thing I added to make sure that the values stayed equal and didn't change (I'm testing them for equality as integers, and ignoring the fractional part).  So I set a convergence counter, and then on line 21 if the values are equal, I jump to line 25 where I add one to the counter, and if the counter = 3 then I exit the method, otherwise I continue processing the loop.  The modified Weelander exits immediately upon convergence.  It has thrown away lines 9 and 22 where it would set the counter value, which would be wasted execution steps if it isn't going to execute the convergence code.  As soon as the values are equal, it attempts to JUMP to the @CONVERGENT line… but there is no @CONVERGENT line anymore, and in Weelander code, a jump to a line that doesn't exist is interpreted as a jump to the closing brace and out of the function.  This means all the code from lines 17 to 23 in the modified Weelander never execute, and it's a good thing to because there is some weird mutated code in there.

Line 10: The modified Weelander has discarded the NOP's on lines 10, 15-17, and 20, all through random mutation and natural selection.

Summary:
The resulting code is several lines shorter, the execution loop has 8 steps instead of 13, and the changes to the starting value of _R and the convergence test code makes the more efficient Weelander execute the loop approximately 4 fewer times.  In its current configuration the Weelander could drop lines 17-24 and the function would continue to operate, although this would not result in a faster function, and therefore offers no evolutionary advantage.

[Is Prime]

Line 6: Okay this is baffling.  Line 6 of the original code has been moved up to line 3 in the new code, and the = test has become >=.  Basically lines 6 to 13 were timesavers allowing the Weelander to immediately identify the primes <= 19 without having to actually test them for primality.  Any value over 19 would be subjected to the test.  The new code simply says, if a number is >= 2, then it is prime.  Essentially the [Is Prime] chromosome is completely broken in the h33 Weelander.  Since h33 passes accuracy tests, there must be something about the way it operates that allows it to get to the correct answer without being able to identify primes.  I can't wait to see how this works.  There are other mutations, but since they don't execute, there's not much point in discussing them.

[Next Prime]

Lines 3 & 21: this method attempts to find the next prime number to divide the value to be factored.  In order to do this it adds 1 or 2 to the last value used as a test factor and then calls [Is Prime] to test the value.  [Is Prime], as originally coded might have potentially overwritten the current value of _SquareRoot (remember all values are global) and so lines 3 & 21 preserved and restored the value so that the calling function would still have it.  But now [Is Prime] does nothing but say whatever you gave it is prime, and therefore it never molests the _SquareRoot global.  Therefore lines 3 & 21 are wasted execution steps and mutated away to the benefit of the Weelander.  The ultimate effect of the changes to [Is Prime] mean that now instead of dividing by 2, 3, 5, 7, 11, 13, 17, 19, 23… the genome will divide by 2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23… essentially 2 and all the odd numbers.  Even though this amounts to more divisions, for the Weelander it's faster than trying to figure out if N is prime, and it has no impact on accuracy.  If you tested for divisibility by 3, testing for divisibility by 9 only costs you time, the value will not be divisible by 9 because you already factored out 3 as many times as possible.

Lines 5 & 12: As in other chromosomes, the NOP's have been dropped.

Not Bad!

All in all, I'm very happy with this simulation.  If the Weelanders relied on the container class to perform the IsPrime, NextPrime, and ComputeRoot functionality, then these mutations would never have occurred, but because these operations are handled in native Weelander code, it's actually faster to do more divisions than it is to find the next prime to divide by.  h33 represents a very strong improvement over f, and every bit of that improvement is the result of random mutation and natural selection.  Some of the methods look like a computer programmer went through them and cleaned them up, dropping unnecessary tests and removing no-ops, but this was the result of mutation and natural selection instead.  Darwin wins, again.

Obviously the next sim should involve starting from h33 and using infusions of h33 to prevent drift.  Is there anything else the Weelanders can do to improve on this?  If you're not going to bother with primality tests, [Next Prime] could probably be simplified further.  Whatever happens, I'm quite certain I'll be surprised!