Sunday, November 28, 2021

Reading December 2021

 

  • One hour on see work summary w/github python chatbot
  • Pinot
  • PYTHON
  • UNPUBLISHED BOOK
  • Next Poppy Wars
  • Kindle

  • 12/31/2021:
  • 12/30/2021:
  • 12/29/2021:
  • 12/28/2021:
  • 12/27/2021:
  • 12/26/2021:
  • 12/25/2021:
  • 12/24/2021:
  • 12/23/2021:
  • 12/22/2021:
  • 12/21/2021:
  • 12/20/2021:
  • 12/19/2021:
  • 12/18/2021:
  • 12/17/2021:
  • 12/16/2021:
  • 12/15/2021:
  • 12/14/2021:
  • 12/13/2021:
  • 12/12/2021:
  • 12/11/2021:
  • 12/10/2021:
  • 12/9/2021:
  • 12/8/2021:
  • 12/7/2021:
  • 12/6/2021:
  • 12/5/2021:
  • 12/4/2021:
  • 12/3/2021:
  • 12/2/2021:
  • 12/1/2021:

Monday, November 08, 2021

A Writeup on GraphQL and FHIR

GraphQL and FHIR 

I know, some of these links won't work. Internal hub and all...but assume they were informative.

During I+P I spent some of my time looking at a FHIR to GraphQL plugin from The Guild (Envelop) to generically map various known schemas, including  FHIR, to unopinionated GraphQL. e.g. a generic enough GraphQL schema that it can be done automatically instead of carefully traversing the source and  target and agreeing on a mapping. Downside of being unopinionated: your GraphQL schema can be a little hard to navigate because it's not in the client's  product/domain language and you're generally serving up your structure client side. Upside: with little effort you can stitch together / federate JSON,  REST, FHIR, mySQL, oDate, gRPC, and more. Downside...if you're generalizing your GraphQL instead of carefully targeting the client's language /expectations/ease of use and instead of carefully mapping for where you get duplicate calls, you can lose a lot of the power / advantage that comes with  GraphQL. 

I have some familiarity with FHIR (Fast Healthcare Interoperability Resources) and Rasanjalee Dissanayaka M. Dissanayaka Mudiyanselage does an  amazing, in-depth walkthrough here that puts my little bit of configuration programming to shame: Introduction to FHIR (Fast Healthcare Interoperability  Resource). But I started at square one by reviewing the internally recommended Udemy (free) course, Introduction to FHIR. One hour long and I'd like to  recommend you save yourself the hour and never watch it unless it's a requirement for your annual review I'll summarize it for you here: 

Introduction to FHIR (1 hr) – Udemy - https://www.udemy.com/course/introduction-to-fhir/learn/lecture/11088132#overview by Vivian Sendling-Ortiz 

Advice: I started by watching the opening parts on 1.25x (intro, JRE, Mirth install)…in retrospect, watch the whole thing on 1.25x or faster and be  prepared to skip ahead. The presentation is primarily config and transform and a lot of waiting on installs/minor changes. Of interest, what is FHIR: 

Fast Healthcare Interoperability Resources – an upgrade to HL7 

HL7 2.x was basically unreadable – pipe separated sections 

HL7 3.x was XML and a dismal failure 

FHIR supports XML and JSON 

All these versions and other specifications are out there and the mapping between them is generally already known. 

What was important? Mirth (NextGen Connect) exists. It is a cross platform middleware interface engine for exchanging messages. A glorified transformation engine that understands the transforms between standards. Very anticlimactic.…I felt like I was back in my  BizTalk days. However, Rasanjalee Dissanayaka M. Dissanayaka Mudiyanselage and I had a good discussion about Mirth because  she did some of her own transform work for a POC (see the post above). So as a talking point, something to know, it's useful and  moves you past simple - but potentially frequent - mapping to a dynamic process that gets a lot of table stakes transformation out of the  way and gives you a place to codify one-off rules. 

It's more fun to just play around with the installed Swagger 

http://hapi.fhir.org/baseR4/swagger-ui/ - the OpenAPi/Swagger for experimenting with POST/GET against the API. 

http://hapi.fhir.org/# - the base URL for HAPI FHIR. If you want to play the API, there's given and family and then there's name  that does a match against both (Scott for instance) and returns a nice list that you can then use to examine the JSON and start  to traverse the schema. 

Here are some pictures of all that in action...but not the Mirth/NextGen Connect transformer. I recommend going over to Rasanjalee's post (Introd uction to FHIR (Fast Healthcare Interoperability Resource)) as she walks through all of this including inserts, updates, persistence layer, data  structures, and more. What I call out below is a little- to no-code variation. 

Grabbing a patient via gender...note this isn't part of the add-in, exactly (it is), we'll get to that... 

A list that comes back from patient if I search on name = Scott (looking for matches in first || last)...

The response...

So WHAT does interrogating the FHIR online OpenAPI have to do with my dig into FHIR/GraphQL? Well, the add-in (you can grab the code here: https://gi thub.com/Urigo/graphql-mesh) is smart enough to allow you to simply point at that exact endpoint to consume the REST as a GraphQL structure. In a  perfect world, you'd have your own FHIR server, but for demonstration purposes, pointing at a working demo on the web is at least a few magnitudes  easier. Here's some of my YML pointed directly at that specification...in this case, the source is FHIR, but per above, there are add ins for other data  sources as well and if you install them and map them in this yml, you can federate your GraphQL calls. I'll leave the concerns about performance for you  to mull around in your head if you're doing multiple calls for a tree structure that reach to multiple locations for individual properties within a nested list.

We'll get to the good part in a moment, but another important bit are the scripts to grab the schema and create/map/generate the unopinionated GraphQL  schema from the latest FHIR version. Bonus....the addin serves up a local version of GraphiQL UI on localhost for you to play around with...don't worry  about that error message in the terminal It's not important unless you think it is and the FHIR server is having simultaneous issues and you assume  causation when it's just correlation. If you have the luxury, sometimes waiting is the best debugging.

Head over to your browser. Change Jane to Scott (in my case), click/unclick any properties or sub-objects you want to add which automatically inserts  them into the GraphQL JSON query (all conveniently saved as flat files with a graphql extension in example-queries), click the run button, and select the  option you want (PatientSearch in this case) and voila...back come Scott records and all their data via GraphQL:

I know what you're thinking...Scott, you didn't code bupkis. Nothing. You installed Node, cloned Mesh from Github, ran the install for the connector, and  ran the scripts that were laid out for you. Yep. And if you're lazier than I am you can even target the sandbox with files... https://codesandbox.io/s/github /Urigo/graphql-mesh/tree/master/examples/openapi-stackexchange?file=/package.json or the sandbox without files... https://9u5jz.sse.codesandbox.io/ 

So...what did I learn from my configuration adventure and why did I do it?  

Uri told me to in "Let’s Build! FHIR + GraphQL Mesh – Connect All Your Existing Sources into One Data Graph with FHIR and GraphQL Mesh"  (57:16) and I really wanted to see it for myself. It felt like he skipped some steps/parts because it was so easy and I wanted to know if that was  realistic or if it was more complicated than he was letting on: https://www.youtube.com/watch?v=bnLB98xQc9o - https://www.youtube.com/watch? v=bnLB98xQc9o 

The ability to federate multiple data sources with little to no effort (until you run into performance concerns) and map them all to a unified only what's-asked-for response is incredibly powerful. 

It moves the exploration of the FHIR specification client side and modifications to that specification (via OpenAPI, limited / sub-version / hosting  as a RDBMS structure) can be accommodated by regenerating the GraphQL schema (although keeping in mind rules around deprecating fields). I can interrogate the FHIR schema like it's JSON and see real results without many individual GETs. 

GraphQL provides numerous advantages over the REST implementation with complicated/nested schemas: 

Avoids overfetching (only the data asked for) 

Full intent in one query/one result 

Spec is typed 

Can “explore” client side using GraphiQL (or other tools) and you don’t have to be a developer to explore the data/queries. There are Server/Client versions…you can incrementally expand/build out the schema as you expand/build your data source or  handlers, and the schema isn't hidden in the code. 

GraphQL Mesh builds on GraphQL advantages: 

Uses existing services/standards/sources (SQL, GRPC, MQ, SOAP, OpenAPI/Swagger, oData, MSGraph, GraphQL….). And now, a  FHIR handler (SOAP handler + JSON schema handler + some extra bits). They're looking for a good option / use case for a MS SQL  handler. 

Uses the original GraphQL protocol but with a better dev experience (e.g. the whole "non-opinionated" aspect versus learning a new  data structure) 

Run/execute anywhere 

Federated: connections between different graphs (an example is an event, like a dev conference, with a city/location, and there’s a  separate city service with weather…all events can be returned in a response that includes weather as a property or subobject for each  event). 

Already handles mutations and will be getting more support. FHIR is a big focus because Uri himself was consulting with companies  going after easy FHIR implementations.


My Notes on GraphQL Conference 2021

 GraphQL Conference 2021 

Last week I attended (virtually) the GraphQL Conference 2021 (https://graphqlconf.org/). I didn’t get to attend the full event, but I thought I’d go over  sessions I did get to attend before other meetings cut me short: 

Keynote Panel: 

There are consistent GQL patterns emerging in caching, error handling, refetches, deprecated decoration/tags, and schema federation. Tools are  emerging to coordinate these standards (Apollo Studio, typescript integrations, plugins). Scott: when I worked GraphQL on an external analytics /BI project, we had to consider all of these without mature existing patterns in place. Each was a real challenge and a potential delay to product  delivery. 

It’s (still) gaining steam, Apollo just received $130 million in Series D funding they intend to spend on new devs. Scott: a friend of mine got a cold  offer just today and ask me if I had referred him (I hadn’t). 

Per Laurie Barth from Netflix, GraphQL moves a lot of decisions from the application to the client, but it also moves a lot of problems from the  application to the client. Scott: understandability, exploration, optimization of calls, much more. 

It’s a different mindset. Have to optimize for client-side development (per my note on that last bullet). 

Sean Grove – GraphQL as a Generalized Next-Gen API Client: 

Federation of Soap, OpenAPI, AsyncAPI, and GraphQL via an API Catalog: one graph queries. 

Proponent of spending time reading your API. 

Roy Derks – Headless 

Headless Schema Stitching: https://github.com/royderks/saleor-strapi-stitching 

https://github.com/gmac/schema-stitching-handbook 

Scott: At this point, it’s fairly obvious federation is paramount for many presenters/companies using GraphQL. 

Colby Fayock – Wordpress and GraphQL 

Less interesting for me personally, but a good walkthrough of the basics around how a GraphQL interface gets rid of a lot of the all-or-none  pattern that can cripple REST interfaces that are chatty (as was the case for WordPress pre-version 4.7). 

Tanmai Gopal 

Concept of batch and dedup in the GraphQL resolvers. 

More succinctly, you get better gains federating the data instead of the services. Avoid overlap, repeat…optimize. Per below, your data  structure may need to be tailored in some ways to your GraphQL schema and the resolvers/logic may need some unusual optimization as well to  avoid waste. 

Min Chen and Karthik Balasubramanian – Automated Schema Generation from ER-Based Service Modeling 

Linkedin optimizations to use declarative ER-based service modeling to create the schema. 

Combination of GET/FINDER and extensions to get performant arrays (basically on tables before joins happen) where GraphQL might otherwise  trigger a deep lookup before resolving.

My last job our GraphQL schema was auto-generated by the code with some decorators. We didn’t get as far as flattening the ids to increase  performance, but we didn’t lockstep schema changes against code initially – code moved and schema followed automatically. Did mean we had  to move code around and regenerate when we considered (and updated) the “usuability” of the schema structure for external clients. Per the speakers and per my own experience, data source structure is crucial and may have to complement your GraphQL implementation for  performance and usability. 

They did have to address gaps in the GraphQL definition language and their implementation. 

Uri Golshtein – GQL to the Next Level: 

I was excited about this one. I have a FHIR-GQL presentation of his queued up to watch this week. 

Works for Envelop – create plugins for GraphQL (https://the-guild.dev/blog/introducing-envelop

Of the opinion most schemas are too opinionated and the more you can generalize and let tools handle it, the better. Scott: it’s interesting,  because sometimes “opinionated” makes it much easier for the client to understand. There’s a balance. If the client doesn’t use it because it’s  non-intuitive, then it has little value even if it’s less opinionated. 

Solve the hard problems once, use anywhere. 

Frameworks for frameworks.


Burning Bridges

Based on the lack of a response, I think I've burnt my bridges at Facebook.  Honestly, it's a bit sad because I like to think both my management and GraphQL skills are pretty good and they create some amazing tech - but I didn't mince words after the second exchange:

<name>, I would love to work for you as a company that has such cool tech. But I have to say....as someone who understands you have an audience of three billion and can't get your %^%% together when it comes to being a responsible entity in the world....I'm concerned.  I really don't think I can be part of that....I can barely stand to talk to friends on FB knowing the implications for the world politically. simply because we're sharing memes and humor and that supports your visibility for antisocial upvoting.  Let me know when your ML is cleaned up and doesn't cause global stress. I fully understand I could help fix your problems ethically, but I haven't seen a commitment to resolving the problem/s.


As someone who works in ML, I get it's a challenge and there are hard problems, but it's a challenge a company has to step into, not talk away.  I truly hope FB finds an ethical sweet spot

Secret Santa

There is a LOT of garbage in this code. Notes to myself, print statements to debug, etc.  But this is the current incarnation of the secret santa code I'm using.  The old XML/Outlook version in C sharp was better, but I ran into email issues with Office moving online and switching employers and ending up on a Mac. Now I just generate .txt files.

2022 updates should include getting rid of the separate checks for exclusions and telling it to check for anyone in the full exclusion list so I can make it ragged.

Here....target == who[1] or target == who[2] or target == who[0]

And there's a lot of unnecessary iterative garbage to make sure it can brute force it's way to a list when it gets toward the end where it might dead end itself.  But to be honest, that doesn't take 100 iterations, it's over in like four. Anyway...I think I can boil this down to a dozen lines of code, so maybe I'll do that next year. Personally, I'm just glad I was able to find it again after moving machines twice in 2.5 years.

#0 fix the code >>

#0a put the guts of the retry in a function that can error out with an error message

#0b and let the error message run a global retry

#  load >> run >> each person >> one person fails >> clear and run

#1 import from a settings file (don't need a UI although the last one had one)

#2 which means we need to write to a settings file

#   name, spouse, last year (use the format year(last)file.txt as the default

#   use JSON instead of XML this time), ah....need an email address!

#3 put it in a bucket (file) in S3, put the code in a python lambda

#4 autoemail - lambda send email with ses: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-send-email-ses/

 

 

#2020 list...this needs to generate from input/output

#e.g. that last value should be a read from last year's file

listWho = [("Scott","Jen","Jackie")]

listWho = listWho + [("Eryn","Scott","Jen")]

listWho = listWho + [("Oliver","Jackie","Andrew")]

listWho = listWho + [("Jen","Scott","Ceri")]

listWho = listWho + [("Andrew","Jackie","Jen")]

listWho = listWho + [("Jackie","Andrew","John")]

listWho = listWho + [("Allison","Ceri","Andrew")]

listWho = listWho + [("Ceri","Allison","Ellen")]

listWho = listWho + [("John","Ellen","Scott")]

listWho = listWho + [("Ellen","John","Allison")]

 

 

 

def LoopLoop(listWho):

    targetExclusion = []

   

    for who in listWho:

        #print (len(listWho))

        #print(who)

        print(" ")

        print(" ")

        print("Owner: " + who[0])

        myRand = random.randint(0,len(listWho)-1)

        #print("random: " + str(myRand))

        target = listWho[myRand][1]

        #print("target: " + target)

        myIter = 0

        #could put all this in a function and call for success or failure

        #eg while false...

        #target can't be used already

 

        while target == who[1] or target == who[2] or target == who[0] or target in targetExclusion:

            target = listWho[random.randint(0,len(listWho)-1)][0] #I think it was my [1] here that was the mess, never returned somne folks

            print("temp target: " + target)

           

            myIter = myIter + 1

            #print(myIter)

            if myIter >=100:

                print("I FAILED")

                return False;

                #break #kill it and we will start over

 

        targetExclusion = targetExclusion + [target]

        print(targetExclusion)

        print("target: " + target)

        f= open(str(datetime.now().year) + "_" + who[0] + ".txt","w+")

        f.write("YOUR SECRET SANTA RECIPIENT IS: " + target)

        f.close()

        #do it again

        #actually, turn this into the loop

    return True; #ah, this is where I"m failing, I have to get to len to return true

 

 

print(listWho)

mybool = False

print(mybool)

while mybool == False:

    print(mybool)

    mybool = LoopLoop(listWho)

 

print ("Mybool = ")

print (mybool)

print ("end of script")

Reading November 2021

Yeah, yeah.  Blah blah. I didn't update the last reading list.  I will...I've got lots of stuff read, I'm just slow to update.  11/28/2021, I'm closing this month down early.  I have some other things I'm part way into, but they can just make my December list.

Busy Weekend

Wow...very busy weekend.  

On Friday, I got a hankering for a banana split.  I could have gone to the DQ, but a DQ banana split is the very bottom of my banana split ranking.  I'd rather try something I know nothing about and take the chance I'm not getting ice milk with oversugared toppings.  So we [Poot and I] went to Dar's Double Scoop in St. Paul.  Very enjoyable and delicious...under that mess of toppings is coconut and two kinds of chocolate ice cream.  It's smaller than some banana splits I've had, but let's be honest, it's incredibly reasonable and the price was really good and I don't need a banana split twice that size.  It's always too much anyway.


I liked their sculpture.  Here's Poot posing.  No need to do a mask version outside.

I did think this in the back where the BBQ joint [smelled SO good] and bathrooms were was pretty funny.  They didn't label the actual exit nearly as well.
 

On Saturday, we went to Aguirre the Wrath of God with K and L at the Trylon.  We hit Merlin's Rest for dill pickle soup, drinks, and fish and chips, and pasties first. I tried to convince my niece she should drive over to join us as she has a brand new license.

Aguirre was wonderful.  The scenes where he tromps around the boat dealing with monkeys and proclaims he will have a new kingdom and his rebellion against Spain to found said kingdom while everyone dies on the journey was surreal.  I'm looking forward to some of the other movies in the Warner Herzog series at the Trylon.


And last night, Poot and I went up to the Hook and Ladder to see Jill Sobule.  We stopped at Arbeiter Brewing first.  This photo isn't from last night, but it's from not so long ago when we went up specifically to catch the opening of the collaboration with Venn Brewing, Collider.  At 9.3% that stuff is heavy.  I'm headed up to find some in a growler tomorrow for my neighbor, as well as pick up a book at Moon Palace.

The Hook and Ladder was excellent for covid protection.  Masks and proof of vaccination. Not to mention the space isn't so huge you're swamped in people

The opening act was the Jorgensen Duo. Poot liked them enough to go chat and pick up an album.

Jill Sobule was hilarious.  Lot of hard core fans in the audience.  She started off with a fuck Aaron Rodgers and then told stories about songs she'd played while she was in the middle of brain surgery [including I kissed a girl].  Poot and I helped crowdfund her brain surgery, so those were cool stories.

She's brilliant on her instrument.  I liked the part where she launched into a little Jimi Hendrik riff in the middle of a not so hard core song.

Tuesday, November 02, 2021

The Deedle Box

Been a loooong time since I embedded a video.  That's not as easy as I remember.  This is the Deedle Box.  The kid used to scream Deedle, deedle, deedle in frustration - for a long time it seemed like their only word/phrase.  We managed to capture it once on this photo box and although it's starting to degrade a bit, it still works after all this time.  I thought it was worth capturing for posterity, or at least until YouTube is no more.


Sunday, October 31, 2021

Hausu

E was off to see Hausu at the Trylon tonight with some classmates.  I think yesterday after Monthly Munchies [our dinner group] at Wiederholt's, they caught Rocky Horror at the college movie theater.  Sounds more fun that waiting for trick or treaters who may or may not show up in the second year of Covid. [Addendum: first trick or treater - her name was Eden, she was maybe 3, and wearing a skeleton-decorated cap and was very excited I gave her an extra five pieces of candy].

Grandma E fixed up their Hausu hoody from the Trylon  It fell apart in the washing machine after one use and was patched, but then it fell apart immediately around the patch.  We're hoping grandma's new backing with some give to it will help, but she did refer to it as, "Made out of snot."

Speaking of Grandma E, Grandpa J came down with a case of breakthrough covid in the last week.  He went in for monoclonal antibody treatment and he seems to be doing ok after a slight fever and issues with his stomach.  We were supposed to head up there Sunday/Monday to help pack them up for snowbirding. That area up around mid-northern Minnesota is not the place to be out in public.  Actually, most anywhere isn't lately given the total lack of masking up.  Weiderholt's was pretty much mask free last night, despite being packed.  The grocery store seems about 25% masked.  And I saw a few folks get to the door and turn around at the Mason Jar near me when I walked to pick up leaf bags because there was a line inside unmasked.  Hospital cases in MN are still close to 100/day.  

Saturday, October 30, 2021

Gamehole Con 2021 - Day 5

And we made it.  Day 5 of Gamehole Con.  Which was really just a morning at Gamehole Con and a lot of travel.  We had an 8 a.m. game of Arkham Horror, the Living Card Game.  We showed up at 7:45 after packing up and everyone else was there so we got an early start, which was good, because we defeated the boss pretty much on the 10:00 a.m. deadline.

Great game. Cooperative.  Reminiscent of Betrayal at House on the Hill, but in a way I think Klund would like.  Living Card Games add expansions of characters, scenarios, and more, and it definitely felt more cooperative in nature than BaHotH...BHH? I thought the cards worked really well together as well as the special abilities, and it didn't take long to figure out I could swap fear against me for damage against a monster [mostly ghouls in this scenario] in a good way and use my mental power as a better attack system, particularly once I could cycle a few spells with a clever sidekick.  Others on the team were WAY better at searching than I was. If I'd been alone, I'd still be sifting around in the bookshelves and floor boards.

Bit of a fun story telling mechanism as well.  Some of that was left to the characters - e.g. my character was a waitress and someone [team decision] owned the house, so why did a waitress own the house?  That was actually a very important decision point at the end of the scenario, and you do experience-up as you move between scenarios.


Kudos to our game coordinator, although they just shut down the 2021 event list, so I can't thank him by name.  He was very prepared - walked us through it to the point we could play alone when he had to make a bathroom run, to the extent we even knew where to place additional doom and whether we had to wait for him to get back to trigger an event.  Additionally, he provided a very nice write up of the round sequence, actions, and even which versions of the game you should buy if you want to pick it up yourself.  He did highlight that the REVISED Core Set supports four players and the old set does not, so if you're shopping used, it's definitely something to watch for depending on the number you intend to play with when avoiding Cthulhu-y monsters.

Finally, these are two places we did NOT go, even though E and I stopped in the Dells to find lunch.  We wanted to eat at Denny's [the Denny's that's not part of the chain, although the one that is part of the chain is also there], but there were literally people out the door and down the sidewalk.  I don't think Dells seasons is officially over, which is....[checks the temperature outside, brrrr]...amazing.  We went to the Moose almost next door instead.

I seriously can't quite fathom who goes to the Totally 80's place just to take social media photos.  I must be getting old, because that sounds like something an old person would rail against.  It has no appeal for me whatsoever and that video looks boring.  How do you sell that as a business model?
 
The Mustard Museum....way more tempting.  They seem serious about their museum.  It's free.  And you can shop mustards by country, awards, recipes, and more.  Quite the set up.  Unless you're anti-condiment for the most part, like me.  They even purport to be America's Mustard College, fight song and all.

So that wraps it up.  I dropped E off at college and spent Sunday evening and all of Monday cleaning up and catching up with the things I'd left behind to go boardgaming.  Wonderful trip, and well worth almost 2% of my year, timewise.   Didn't realize how much I'd missed it with covid canceling it last year.

Thursday, October 28, 2021

Gamehole Con 2021 - Day 4

Day four was our semi-relaxed day.  The plan was for us to finish up ramen and the rest of the group to finish up Indian food and meet up at the Air BnB for some outside-of-GHC gaming.

E and I started the day by doing a long stint at True Dungeon "Weird Magic".  I think I've mentioned it in the past, but True Dungeon is a bit like a fantasy themed distributed escape room with a running story and experience and equipment.  Equipment is random depending on the tokens you get.  As a n00b this can be tough because if you land on an experienced team they'll want to try fighting at a higher difficulty to pull more treasure.  On the flip side, they can loan you equipment that levels you up, gets you more treasure, etc.  That was the kind of team we were on this time.  They did a great job of explaining it better than any team we've ever been with before. They even explained the "ghost" to us that no one explained last year as a friend who was ill and couldn't attend, but they could run him through on his pre-purchased ticket and use his tokens so he'd collect treasure.  

One of the guys amusingly explained to us that there were limits to ghosts as some obsessives had taken to running a dungeon with themselves and nine ghosts for a while to maximize their treasure [at an expense].  No photos because I don't want to ruin it for anyone.  The surprise of the story and the rooms is most of the fun.  This year's theme was sort of a cyberpunk witch  thing.  We did fail at one room where we had to align colored blocks by changing their colors in a machine with glowing lights on top....boom.  Damage.  But at least it doesn't eliminate you from the game.  E loves playing the thief...each class does something slightly different.  Pushes hockey pucks for damage, traces shapes to find clues or treasure, identifies symbols [oof, memorization] to cast spells, throws two hockey pucks, and more.

We played Space Invaders with Kane.  It's a branded version of Flip Ships, so it wasn't new for me or for E.  Also, a very fast game so we finished up early and found some lunch.  This is a GREAT game if you're looking for something party friendly.  Ms Klenko was there as well - just out of frame.

Some vendor hall photos.  E threatening me with a LARP-ing weapon. 

Kitsune, for sale.  A game E, and Klund, and I hate above almost all others.  We had a HORRIBLE time playing it several years ago and I made it worse by knowingly forcing an extra hour of play when it could have been over just to troll E and Klund.

I had to ask Apong if this was racist.

I own a Xeno game - an expansion for Axis and Allies - but this is downright weird.

Eryn came away with some loot.  Breast cancer suppotive Ticket to Ride trains, as well as Ticket to Ride Europe and Ticket to Ride India from the scratch and dent which was a holiday ask, so it was like Christmas early.  A cool pin, dice [including some not shown here that bend light like fiber optic cables - enough so that I initially thought they glowed], and a few bonus cards from Kane for Fuse.
 

Celtica was our last on-site game of the day.  Very old Ravensburger game with an ironic puzzle component where you build amulets.  Get a handful of colored wizard cards.  Move the wizards on the board any spaces that are all or part of your cards.  Some spaces good.  Some bad. Some draw another card.  We played two games and play was much better on the second game once players started taking some chances to score an extra card in a color to get past a bad space. It won a 2007 children's game award, so that'll give you an idea of the complexity.
 


Beer, local, spotted cow. I think Commuter was the other option in the gaming hall.  It might have been cheaper to keep a whole six pack in the car, but I saved most of my drinking for the AirBnB.  I don't like feeling tired while gaming with new players.  The little spider dude was already at our table.  I think that might be Eryn's third smoothie in three days.  The coffee/ice cream/smoothie stand is probably the best sustenance at Gamehole Con.
 

Back side of the beholder.  I sent it to my wife and channeled Michael Scott's "That's what she said."  Childish, but I felt it was a particularly fun use of the meme.

We had dinner at Morris Ramen.  Apong went a few times after we gave him the name/location.  Maybe my favorite place in Madison.  Young crowd and absolutely wonderful food.  We had the spicy ramen.  Can't recommend it enough.

Back at the house, we sat down for a five person game of Power Grid.  That might be the best number.  Boardgamegeek does say 4-5.  Apong added that red wall across the bottom to make sure we didn't stray into unusable German territory.

Klund won this one with some spirited bidding on ecologically responsible power.

We played minimal hands of The Crew, but enough to understand the basics.  The goal is to have different players take different tricks, in specific orders, etc, cooperatively.  I'm not sure I can play with just my wife, but if we have the neighbors over I'll get it out as it gets incrementally [hand to hand] more difficult over fifty round and the general idea is easy enough to pick up in a few minutes.


And we finished off the night with a game of Cosmic Factory as E now has their own.  We reserved a few minutes for packing and cleaning so that 8:00 a.m. games didn't mean getting up at 6:30 to check out. I think I took home about 80 percent of the food I brought with me.  Definitely overkill.

Wednesday, October 27, 2021

Gamehole Con 2021 - Day 3

Starting to feel like a lot of boardgaming yet?  No kidding.

Friday...we're not to the weekend yet.  E and I started our day by heading over to Mickie's Dairy Bar by the Madison campus.  It's a usual stop for us now and Apong picked up on it from my FB feed and headed over not long after us.  Great food - cash only, so come prepared - but huge plates, well prepared, and at great prices.  Not to mention I've never  had an unfriendly waitstaff and this time was no exception.  She went out of her way to talk to us about food and work.


First game of the day was Tournament at Camelot.  It's a trick-taking game with a twist for your primary character, secondary character, and a number of places and artifacts associated with the round table.  We had a bit of a rocky start because the coordinator hadn't played in a while and couldn't remember the difference between what basically was a round and a hand.  It made a BIG difference for play as some things weren't visible until all tricks had been played.

E's particular card combo facilitated drawing more and more specialty cards.  You can see the obvious difference between their hand and mine.

One of the best  parts of the game is that it is fairly easy to manipulate the target as you figure out the rules.  The woman across from me was point free [a good thing, think of getting points as damage] until we got a little more savvy, and then players would use "ties" in the card number/suit to pull the lowest or highest card out of contention, meaning the trick would default to the second highest or second lowest depending on the situation.  Made for some pretty spirited table talk.

This is not us.  Random people playing Cthulhu Wars.   I don't think that 90-120 minute playtime on boardgamegeek is accurate.  They seemed to have been there MUCH longer than that.  I assume they're playing with an expansion as I think the base set only accommodates up to four.  Ah, it does exit in a 6 to 8 and clocks in at at least 120: https://boardgamegeek.com/boardgame/145039/cthulhu-wars-six-eight-player-earth-map.

Some more rando Gameholeconers.  Not sure what they're playing but they were interested in my random photo taking.  There were a couple of tables with lengthy games going on including one the next day with a huge custom Mario Kart type board game.

E and I played games with Kane Klenko, the game designer, for a few sessions.  During this one we played Fuse, a few prototypes, and Cosmic Factory pictured here.  This was a fun game - easy to pick up if you want a family game that's fast: five one minute rounds.  You're using 2x2 cards to make a 3x3 grid and score for areas with orange, areas with green, areas with blue, and continuous asteroids [like a wall in Alhambra].  Your lowest two scores are your end score.

Those cards in the middle are for snatching if you think you have the most points in one of the three planet categories.  Pick up extra points if you're right.  Lose some if you're wrong. I'm obviously going for a green planet play and wall points here.  I'm not sure what E is up to as a strategy.  Or Kane for that matter...their layouts are much less monochromatic than mine.  There are cards that mix it all up by forcing the tile draft to be different, adding black holes [removes cards], and more.

We had a gap, so went to the library to play a round of Wingspan.  I stole Klund's strategy and focused on birds that took other birds.  Even so, with big piles of point cards, E and I had close scores.

We also played Battleline.  Sean, who taught me Power Grid forever ago, also taught me this game.  Love it.  Think three card poker hands [sequential, suits, total] and any "cohort" that wins a column counts toward a win on your part either via a number of wins or sequential wins.  There are some cards for mixing it up [like wilds] and you have to pay attention, because with only one of each card, it may become impossible to win with a column and that means that column is immediately and irrevocably won by your opponent.

While E was off playing other games, I went back to Liberty Station.  My burnt ends grilled cheese from the day before was a bit too much, so I settled for a bowl of burnt end chili.  Top notch. That and a beer were the perfect amount of lunch time food.

Gaymer group.  E didn't make it to an event but bought a pin from them.

It's Apong, and he's involved in nuclear annihilation.  He's playing on the Solvanti system. I had a gap where I could have played, but it felt disappointing going to a gaming convention and playing on a computer.

That said, they all looked like they were having fun whenever I saw folks using the pads.  Honestly, with everyone in the same place, it's just a LAN party.

Mike hosted Shadows Over Camelot.  Not to be confused with the Camelot game earlier.  I had watched a video on this one randomly in the past and was interested.  It's a semi-cooperative where you go on quests alone or together to gain renown for the round table.  But someone is the traitor.

Both Eryn and I felt it suffered a bit because we had younger [e.g. 8?] players and they'd go a little OCD at times trying to make sure all the knights were on the right colored seats, etc.  In the end, we kind of let the person we knew was the traitor slide so he could finish the game by placing the last catapult.  With another group, might be more fun, but I don't think I'd consider it a go to game for replayability if I owned it.

I was Sir Gawain.  My power was drawing two cards at Camelot.

That shirt across from me is the traitor.  At this point in the game, we had five white swords, but you really need 7-8 to try and force a victory.


Way more swords, but there are a LOT of catapults out there, and when there are 12, game over [so really when there are about 11 because the traitor can try and play one on purpose as their "bad event" each turn].

Setup.  I swear I played no less than four games with Picts in them over Gameholecon.  Picts are big.

E went off to play games and prototypes with Kane and Klund.  I, on the other hand, bred peppers and used those peppers to create chili in Scoville.  It was fun...but most of the mechanisms have better implementations in other games.

The trick is walking between the rows like in Children of the Corn to breed better peppers by combining the colors.  Brown peppers are generally gross, but you can sell them, and they are used in recipes.  White and Ghost and Black peppers are better, although you need those other colors for optimal scoring.  


The winner had very few recipes.  You could win by a few other methods.  I put in a good showing by having a lot of smaller points on recipes and on the market cards.  Here's the card for cross referencing pepper colors.  The x was the big one to avoid...everything else had some sort of use.  Downside to the game was constantly referecing the card if you hadn't played it a few times already.

Friday night...bedtime.  I went back, made some chicken at almost 11 p.m. because I'd missed dinner while gaming and E had a brat.  E and Klund got back LATE - they hung with Kane for a long time discussing the pros and cons of the prototypes and discussing possible changes.  Sounded like a better time than Scoville.