Archive for the ‘Uncategorized’ Category

Elements

September 8, 2017

I like the way the Wikipedia entry puts it: “The history of the periodic table is also a history of the discovery of the chemical elements.”

Before Chemistry

Alchemy began in Egypt in the 4th century BC and migrated to Spain by the 8th centry CE.  Separately, the timeline for its development in China is much less clear, though it is sometimes dated anywhere from the 5th centry BC (though there is no word for gold in Chinese at tat time, and thus not the focus on changing lead to gold) to definite discussions during the 1st centry BC.

(See Lloyd Library entry on the history of alchemy and Wiki entry on Chinese alchemy.)

Although it was more than that, alchemy is remembered as the pursuit of a mystical way to convert lead to gold.  Say what you will, as it became more “disciplined,” it became the fore-runner of modern chemistry.

 

Advertisements

Rebooting…

September 5, 2017

Four years later

I haven’t posted in a long, long time.  That doesn’t mean I’ve been doing nothing; on the contrary.

First, I’ve become a father of a ten year old (when did he get so old?).  I’ve heard it said that one of the surest signs we were meant for eternity/immortality is when we see someone we haven’t for a long time and are shocked by the changes brought by time.

I’ve become a real estate agent in the state of Minnesota.

I just re-read my history post, and I find some changes — esp. regarding our cat status: those that owned my wife and me then have all passed on; we are now owned by two new cats.

My job as a computer programmer has also changed – I’ve gone thru a stint as an IBM consultant, and now working at a diff. healthcare company (though I’m still not responsible for any of their policy decisions).

Though I find both of the quotes still apply.

Things I still want to say

I am going to write more here, including some things for my “little boy” (who’s now in 5th grade!) to read.

I may write some short stories here — or, at least, ideas

And I’ve got to save some notes of things I meant to keep track of, that I keep losing.

 

Book Review – Empyrean Key

October 22, 2014

I just finished reading the first book in the Ardentia Series.  And I can’t wait for the second installment “due out early 2015” according to the end of the book.

cover photo

I enjoyed the book. While not what I’d call “excellent,” it was very good, definitely readable — one that I’d recommend to my friends who love the fantasy genre. (Full disclosure: the author is related to a friend of my wife.)  Though SparrowHawk gives it high marks.

There are a couple things to highlight in the positive category, and minor criticism.

This story builds a believable world and likeable characters — in fact, characters, like Jahna, who I want to see succeed.

Creating a world is, in my opinion — not to take anything away from Tomlinson — easy; introducing it to the reader is trickier.  A writer who creates their own world always has a choice, and a fine line to walk.  On the one hand, he or she can chose to not “explain” anything, instead telling the story wholly within the setting, and leave it to the reader to figure out the workings of the world as they go.  The other path is to write the story as one telling someone who is not at all familiar with the setting, taking time (and precious pages) to elaborate on the differences between their world and ours.

Of course it’s not a black and white, either/or decision.  In this case, I think, Tomlinson could’ve provided a more gentle introduction to the unfamiliar places, and meaning of some of the geography.  It’s not horrible, just be ready to keep track of Aedentia, and the gods and heroes, the Pithart, the place of worship, and the backwater town of Groden Cove.  None of this is hard, and perhaps I’m being overly picky.

I’m a little more critical of the introduction of the characters:

I feel now that my third point (below) is closely related to the character intros in this sense: the book, in retrospect, feels too short; and the introduction of the primary characters seemed either a little forced, or missing in depth.  What I mean is, after the fact, i read the description on Amazon.

As a not-so-perceptive telepath and amateur scam-runner, Jahna Mornglow has filled the void left by an absent father, with the friendships of a bloodthirsty bar-maid and a bullied book-worm. Her mother, scarred by the racial prejudices of her past, refuses to nurture Jahna’s Narcean abilities of prophecy and telepathy, warning her of the hate beyond the safety of Groden Cove – a beachside safe haven for misfits and those who wish to be left alone.

I wouldn’t describe Lilac as a “blooodthirsty bar-maid” — not exactly.  And Jahna’s mother’s story seems far too short to fill out that line (maybe, but I failed to get all that from just the few pages she gets).  I guess Lilac maybe is, but I don’t know if I actually think I know her, because we haven’t spent enough time together.  I don’t know if that’s just “first impression” (which, it actually isn’t), or if that’s really who she is.    Moreso with the “bookworm,” he’s acted in ways that are surprising, like I would never have expected that of him.  Again, because I haven’t spent enough time “observing” him to know what he’d do in an unfamiliar situation.

And, yet, I think that if I had another fifty pages, maybe I’d have a better sense of any of them, Lilac included.

All in all, though, I have to say, I do want to continue reading, and my last point is really just this: I just think the cliff-hanger at the end came too soon.  I want to read more, and I find that there isn’t any more, yet.

All that being said, the book did draw me in, as a story should, and I found myself experiencing the characters, and not just “reading” a book.

I did find the author’s blog.  And I eagerly look forward to reading more.

Pie in the face

November 16, 2012

Ryan was here.

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.

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”).

    Probably Unfinished Game

    January 30, 2010

    I don’t think I’ll get this finished. Either way, I’m willing to share the code I have so far (just e-mail, or just post a comment here). Also, this is the strategy I was considering: all of the following presumes you understand the game rules as given

    • first, sans bumpers, my initial thought was to find the closest puck of my color, and (two — maybe more) nearby grey pucks and encircle both — checking that it was possible (able to move the sled “around,” smaller than 600 units, enough time remains to complete, etc.)
    • the bumpers could be added to that to move pucks inside that area;
    • alternatively, find a blue puck or two and enclose in with a red puck [presuming the opponent is blue and I am red — the game always presents each player thus, doing translations as necessary] thus greying out all the above…

    The difficulty I encountered first was that I can’t figure out how to calculate the path(s) for the sled — I think I would do thus now (pictures would help, but I am not going to work on that. If anything I’d be coding from hand-drawn diagrams…): Figure the smallest circle for the sled (radius 30, approximately). If the point fell inside that, you couldn’t move there (actually you could, it would just be a lot more work, maybe). Also, figure the minimum “approach” to the point/direction desired (basically, figure the smallest circle from the point reversing the direction), then, if there is a distance between, move on a line tangent to both circles

    • Alternative strategy would be just to move the sled in the largest possible circle and use the bumpers to push pucks into that area:
      • if there are opponent pucks inside that circle, get them out
      • make sure at least one of my own [red] pucks is inside that circle
      • bump as many grey pucks as possible into the circle in the time remaining

    I may still, but even if not, I’m publishing my thoughts

    Would you like to code a game?

    January 15, 2010

    ACM Queue magazine is offering an online programming competition” — and I’m interested!  The competition description is here.  Game rules are here.

    I’m trying to develop a player (in Java) — I’ll post updates to this post.

    Update Sat. 16 Jan. 2010:

    (not in ‘blog order’ or I’d put this at the top).

    So I have something working that doesn’t do much (spins the sled in a small circle); but I have one part done, and one mistake to report —

    First, I implemented a Board object to encapsulate all the reading of the input and access of various components.  So the main loop looks like this:

    public class Captur1 {
     public static void main(String[] args) {
     Scanner in = new Scanner( System.in );
    
     // Keep reading states until the game ends.
     int tnum = in.nextInt();
     Board b = null;
     while (tnum >= 0) {
       if (b == null)
         b = new Board(new Sled(new Point2D.Double(100.0, 400.0), 0.0));
       else
       {
         // System.err.println("next board");
         b = new Board(b);    // new board references previous board
       }
       b.readBoard(in);
       System.err.println("turn " + tnum + ":\n" + b);
    
       Response r = new Response();
       double dbg = r.changeSledDir(-0.3);
       System.err.println("new sled direction = " + dbg);
    
       r.sendResponse(System.out);
       // System.err.println("looping...");
       tnum = in.nextInt();
    
     } // end while
     System.err.println("end while.");
     }
    

    Never mind the debugging, and the slightly odd start [if (b == null)] the first time, the main function is seven lines of code.  It will only grow slightly longer, according to literate coding, approximately thus:

    Strategy strat = new SmartPlay();  // which implements a Strategy interface, or similar
    if (strat.dependenciesChange(b) || strat.prevPlayComplete())
      strat.computePlay(b);
    Response r = strat.setResponse(tnum /* perhaps */, b);

    Of course, the real work needs to be done, but that’s it, initially — anyone want to help me come up with a strategy??

    Secondly, I made one mistake.  I was storing the pucks in a TreeMap<Integer, Puck>

    /**
     * Object to represent the game board itself; general operations should all go here.
     * Also, generic geometry operations (those 'inherited' from the sample).
     * @author GParks
     *
     */
    public class Board {
     protected Board prevBoard = null;
     // contents of the board:
     //     two sleds,
     // four bumpters
     // n (112) pucks
     //
     protected Sled mySled, oppSled;
     protected Bumper myBumprs[], oppBumprs[];
     // *****
     // The tree of pucks is thus:
     //      - an Integer "key", which is the "proximity" to mySled
     //      - the puck itself, which has an index (it's order presented to us) 
    
     // http://java.sun.com/docs/books/tutorial/collections/interfaces/collection.html
     // http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html
     protected TreeMap<Integer, Puck> lstPucks;
    
    

    Where the Integer key is (currently) an abbreviated computation of the “proximity” of the puck to the (previous) sled position — avoiding squaring and square root calcs. for actual distance, but because there may be more than one puck the same “proximity,” and because the keys must be unique, some pucks (okay, maybe a lot of them) weren’t being stored properly — I’m going to fix that next.  I think probably by not using that data structure, but some other sorted list…  (unless someone can give me a good reason to do otherwise, or a better method — I could compute proximity using the direction the sled is currently facing, also, giving a unique value to each puck, or at least more likely so…)

    Poor Customer Service

    October 5, 2009

    I recommend that you do not do business with Nature’s Stone.

    Here is the (only) correspondence I got from them — see at the bottom it is an automated response [and there are typos in the message!]:

    I sincerly appologize for the inconvieninece caused in regards to your granite purchase.
    Natures Stone prides itself in creating an affordable and conveinient experience for all of our customers.  We have read your comments and will take immediate action to correct any and all problems at Natures Stone.  We do appreciate your business and hope to work with you again in the future.
    — On Sun, 9/6/09, gparks@acm.org <gparks@acm.org> wrote:

    Naturest
    From: gparks@acm.org <gparks@acm.org>
    Subject: Nature’s Stone Web Site Inquiry
    To: naturestone88@yahoo.com
    Date: Sunday, September 6, 2009, 3:19 PM

    This is a comment or question from the Nature’s Stone Web Site:

    Name:
    Greg and Lana Parks
    Phone: 952-xxx-xxxx
    Email address:
    gparks@acm.org

    Comments:

    I just want to inform you of the poor customer service we received
    while purchasing granite from your company (at the Burnsville
    location).  We came to your company to purchase a granite countertop
    for our bathroom and was greeted by Chuck. He showed me the pricing,
    etc, then led me to the back where there were remanents of granite
    that he said were at a reduced price. He said that anything that
    didn’t have a tag on it we could choose from. He was very kind at
    this point and pulled out some slabs with a machine, etc. We chose a
    granite slab that would work and he marked our name on it, told us
    that he would generate a sales receipt, and assured us that he would
    save it for us. I informed him that the contractor that we had hired
    would be contacting him in the next few days. (This was a Thurs). The
    next Tuesday — only five days later, our contractor contacted Chuck
    and he informed our contractor that he did not remember me or my
    husband (we were both there — and he shook our hands), that our name
    and information was not in your computer system. Fortunately, I had a
    sample I had gotten with the name of the color we had chosen and was
    informed that there was a slab that would work.  We were not informed
    that the original slab we had chosen had been sold; we were not told
    that we would be paying full price at this point or we would not have
    gone through with the sale. While this was an annoyance, things seemed
    as though they would work out.

    A few days later, our contractor informed us that your company did
    not have a big enough slab of the granite we had wanted in the
    remanent selection, so we’d be paying full price ($7 more a sq ft).
    Nevermind that originally the slab we had chosen was more than enough
    yardage and that now it was too late to even go look at other slabs
    that may have been more to our preference if we were paying full
    price. (“Bait-and-switch” is illegal and unethical.  At this point it
    was too late to change — the project was underway, the old counter
    removed) Our contractor was informed that our slab would be cut and
    ready by the next Tuesday He called Tues. and was informed that it
    was not ready, but would be by Wed. He called Wednesday and was
    informed that it was all ready to pick up, so he drove from Woodbury
    to your Burnsville office and it wasn’t ready. The backsplash hadn’t
    been cut, so our contractor waited. By this time, my husband, usually
    a very trusting man, even asked our contractor to confirm that the
    color was right — he doubted anything was accurate any more.  The
    contractor eventually took the counter and backsplash to our home to
    install and as he was installing it found that though the sink hole
    had been cut, the faucet holes hadn’t — this despite the fact that
    he gave you the faucet and was given it back when he picked it up.
    Yes, he had informed and laid out for your workers where to cut them.
    He called your company and was informed that someone would need to
    come out to our house and cut the holes for the faucet. So, we made
    arrangements and your company gave us a 2 hour window. (Do you really
    need a 2 hour time window?? Do you have that many jobs that you forget
    to drill holes and have to go fix the problems??). The person from
    your company didn’t even knock or ring the doorbell. He walked in.
    Yes, our garage was open as we had our contractor here, but as I’m
    home, working in our living room suddenly there is a strange man in
    my house. HOW RUDE!  Not to mention that he barely spoke English.
    Fortunately, our contractor was here and informed him of what to do
    and was able to supervise.

    Needless to say, we will NOT be using your company ever again and
    will let everyone we know of our experience. We’re more than happy to
    recommend to family, friends and acquaintances good service, and
    willingly warn everyone about the bad.  But we thought there might be
    someone at your company who would like to know — and perhaps make
    changes.

    This is an automated message from the Nature’s Stone web site.

    No follow-up, nothing.
    On the other hand, we know an excellent contractor for home repair work, and will gladly give out his contact info, and recommend his work.
    Contrast this with petfooddirect.com — the other day I was shopping there, and realized I forgot to check some detail, so I abandoned my shopping cart… and got an e-mail the next day because they “noticed” that I hadn’t checked-out and were wondering if there was something they could do to help.  Now, I know that some will not like that, but I thought it was a nice touch.  I know it was automated, but it still was a step they didn’t need to do, and it showed a consideration — I replied to that message and got a human answer (someone was checking the reply e-mails!).
    Also, I have another example, a store my wife and I shop at frequently failed to properly honor some coupons my wife tried to use — the store manager didn’t understand corporate policy, either, although my wife, a serious couponer, knew exactly what they were supposed to do.
    Later, my wife called the corporate office, and got a person who also didn’t understand, but my wife wouldn’t let it go and escalated the issue to a supervisor.  When she left a voice mail message, she forgot to leave a phone number, but that person (turns out, a V.P. or some division), has voicemail that recorded the phone number that the call was from, and just to be sure, called back, talked to my wife and understood exactly the problem, agreed to have a “chat” with that store and with the person she spoke with who also didn’t get it…
    Now, it would have been reasonable for that woman to say to herself, “well, she didn’t leave a phone number, and I’m not sure I know who called, so I’m going to drop it.”  But, being a responsible person, who knows the value of customer relations, she tried every avenue available to her to correct a problem, and earned our respect (and continued business for the store she represents).