Sunday, February 10, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1 Part g/h

Ok....now it gets tricky.  I'm supposed to turn the tip calculator into a GUI, and then a GUI with a slide.  I could just use C#, but that's pretty week.  I might as well go VB COM (and in case that's offensive, I still have a secret santa program running on VB COM including Outlook integration for almost 15+ years.  I compiled it and just use it...I'm too lazy to update.  If I went digging, I probably have tgXML around as well, my treasure generator using XML in VB COM for AD&D third edition).  So I was thinking I might try pure javascript, but then thought, well, I'll have to pull in bootstrap and this npm live-server thing is cool, but ultimately sort of a waste of my time and disk space.  And as soon as I thought that, I thought, why don't I just use Angular?  And that made me think, that seems so heavy...oh yeah, people use Vue and React. I pondered React, but realized I have a developer on my team who keeps telling me how wonderful it is so, being the obstinate person I am, I used Vue, on JSFiddle so I could use someone's pre-fiddled fun circle slider, and save my work without having to find it locally.

My biggest issue wasn't the basic structure of Vue, it was trying to parseFloat and Math.roundup and get it to work within the framework of Vue without concatenating.

Here it was doing the stupid concatenation instead of math, which really annoyed me, because it wasn't a Vue-specific issue.

Here I fixed it.  You can see where I started to put it into a function instead of inline, which is better, but I was lazy and just proving my point (that I could do it).


You can play with it here...
https://jsfiddle.net/NodToNothing/e6c7amk9/1/

And here's the code using a cheater textarea....

Saturday, February 09, 2019

Snow

Ice, snow, ice, snow....bit of a mess out there.  I've got one friend who slid and sideswiped his car, and my wife spun out and took a chunk out of her hubcap last night.  For me, it's been fairly uneventful, although Thursday, getting Eryn to and from school was a bit of a challenge.

In the morning, it was clear but icy when we left, but just a few minutes into our ride and it started to snow and whiteout.  When we got closer to school I had to have her confirm that what I was turning onto was the off ramp.  After dropping her off, I stopped to answer my phone and hack a portal (ingree) on the way back to work, so I pulled into a church lot.  But someone had cleverly plowed the first few feet of the lot and nothing else, which I couldn't see in the white out, so the Mustang just stopped, pinned by snow under it and wedged along the side.  I was momentarily panicked (obviously AAA would be a while), but then scooped out all the snow I could, carefully lined the wheels up exactly with how I'd come in and backed it out in the main road when there was a gap.

Later, after a LOT more snow had fallen I went to pick Eryn up and made a stop at the library.  Unfortunately, the library is at the bottom of a big hill.  So I got down fine, but the rear wheel drive wasn't having it trying to do the almost 45 degree turn uphill.  I couldn't even drive across the parking spots without getting stuck and having to back up.  I had almost given up when I decided the angle on the other side gave me a better run at the hill and had been tamped down a bit more by other library patrons.  So I went in reverse all around the lot until I got traction to turn and roll up the hill.  Definitely helpful that there weren't many cars around.

Likewise, when I stopped at the school to pick Eryn up, I did a drive through the lot to make sure I wasn't going to block every other car going through the lot and at the little hill that exits onto the main road, it was obvious I wasn't going to be able to turn left.  So I turned right, hopped the berm of snow, and then immediately turned left.  The guy behind me looked surprised, but understanding.  Later, I saw a guy outside his car pushing while his daughter drove to get over that same berm in a car with a higher base.

So we got home, and then couldn't manage to get into the garage.  I could have parked on the street and shoveled, but I wasn't so sure I wouldn't have to push it loose if I did that.  So Eryn and I swapped places so she could drive while I pushed.

I pushed.  And pushed.  And pushed.  And pushed some more.  Finally I asked her if she was giving it enough gas, because it seemed it wasn't getting any acceleration at all.  She said yes, so I said to give it a bit more.  I pushed, and then asked, was she sure she was in drive?  No.  She was in park.  She was embarrassed.  But at least it was easy to get in the garage after that.  Unfortunately, it's what likely made my back hurt so bad in conjunction with the shoveling.

Here's a nice sunrise picture of the ice at rest.  Cahokia has their earthen mounds.  We have a snow mound/s.  Mean Mr. Mustard says he's on vacation, but for all I know his car is under that pile somewhere and he's running out of gas to keep himself warm barely a hop, skip, and a jump from his cube.  Very To Build a Fire.


Friday, February 08, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1 Part f

Version f...I think that's also 6. Break it out into functions. Some of that was already done, but I finished the job. I guess, if I was being a good programmer, I might have it ask whether the tip should be rounded up or not. And yeah, there's some weird code in a few spots, but fast and functional was my goal, not elegant.
 
import math

#Version 1: basic
#Version 2: round up
#Version 3: next, ONLY enter numbers
#Version 4: ask again for a number - already done!
#Version 5: no negative numbers
#Version 6: use some functions

def inputNumber(message):
  while True:
    try:
       returnValue = float(raw_input(message))
       if returnValue < 0:
           raise ValueError
       else:
           return returnValue
    except ValueError:
       return inputNumber("Not a non-negative value! Try again.")

def grandTotal(tip, bill):
    return str(y + (y * x/100))

def grandTotalRounded(tip, bill):
    return str(y + math.ceil((y * x/100)*100)/100)
    
def tipPrint(tip):
    return str((y * x/100)*100)

def tipRoundedPrint(tip):
    return str(math.ceil((y * x/100)*100))


#print("Enter a tip:")
x = inputNumber("Enter a tip:")
print("Tip is: " + str(x))
#print("Enter a bill/total: ")
y = inputNumber("Enter a bill/total: ")
print("Bill is: " + str(y))

#this won't work because I need a precision factor (cents) in my ceil()
#so use full ints?
print("Tip is: " + tipPrint(x) + " cents") #cents
print("Tip rounded up is: " + tipRoundedPrint(x) + " cents")  #what do I expect?
print("Total is: " + grandTotal(x,y))

#with 3% and 1.85 should be 1.91
print("Total rounded up is: " + grandTotalRounded(y,x))

Sigh...mismatched function name.  If I had a dime for every time...

Enter a tip:3
Tip is: 3.0
Enter a bill/total: 82.55
Bill is: 82.55
Tip is: 247.65 cents
Tip rounded up is: 248.0 cents

Traceback (most recent call last):
  File "C:/Python27/TipCalculator.py", line 45, in 
    print("Total is: " + grandTotal(x,y))
NameError: name 'grandTotal' is not defined
>>> ================================ RESTART ================================
>>> 
Enter a tip:3
Tip is: 3.0
Enter a bill/total: 82.55
Bill is: 82.55
Tip is: 247.65 cents
Tip rounded up is: 248.0 cents
Total is: 85.0265
Total rounded up is: 85.03
>>> ================================ RESTART ================================
>>> 
Enter a tip:-2
Not a non-negative value! Try again.1.8
Tip is: 1.8
Enter a bill/total: 77.25
Bill is: 77.25
Tip is: 139.05 cents
Tip rounded up is: 140.0 cents
Total is: 78.6405
Total rounded up is: 78.65

Thursday, February 07, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1 Part d/e

It was exciting to find out I'd already done part d/4, so I jumped right into no negative numbers. That would be a really mean tipping system. I found some other bugs as I went - I spelled negative wrong, the tip info didn't say "cents" so you couldn't be sure what was going on there, and my error handling message wasn't generic enough to cover all cases (versus specific messages, which is annoying for me, although good for the user).
import math

#Version 1: basic
#Version 2: round up
#Version 3: next, ONLY enter numbers
#Version 4: ask again for a number - already done!
#Version 5: no negative numbers

def inputNumber(message):
  while True:
    try:
       returnValue = float(raw_input(message))
       if returnValue < 0:
           raise ValueError
       else:
           return returnValue
    except ValueError:
       return inputNumber("Not a non-negative value! Try again.")


#print("Enter a tip:")
x = inputNumber("Enter a tip:")
print("Tip is: " + str(x))
#print("Enter a bill/total: ")
y = inputNumber("Enter a bill/total: ")
print("Bill is: " + str(y))

#this won't work because I need a precision factor (cents) in my ceil()
#so use full ints?
print("Tip is: " + str((y * x/100)*100) + " cents") #cents
print("Tip rounded up is: " + str(math.ceil((y * x/100)*100)) + " cents")  #what do I expect?
print("Total is: " + str(y + (y * x/100)))

#with 3% and 1.85 should be 1.91
print("Total rounded up is: " + str(y + math.ceil((y * x/100)*100)/100))

I notice that I don't always have the right precision...my money isn't necessarily two decimal spots. I think I know how to fix that with a decimal or I could bite the bullet and use one of the money packages/imports that exists. That might be part 8. I notice I have to flip it to a GUI coming up here soon...I'll have to port this code over to javascript (although I'd be much, much faster with C#).

Enter a tip:-1
Tip is: -1.0
Enter a bill/total: 1.50
Bill is: 1.5
Tip is: -1.5
Tip rounded up is: -1.0
Total is: 1.485
Total rounded up is: 1.49
>>> ================================ RESTART ================================
>>> 
Enter a tip:-1
Not an integer! Try again.-2
Not an integer! Try again.3
Not an integer! Try again.4
Not an integer! Try again.
>>> ================================ RESTART ================================
>>> 
Enter a tip:-2
Not an integer! Try again.3
Tip is: 3.0
Enter a bill/total: 150
Bill is: 150.0
Tip is: 450.0
Tip rounded up is: 450.0
Total is: 154.5
Total rounded up is: 154.5
>>> ================================ RESTART ================================
>>> 
Enter a tip:-3
Not a non-negiative value! Try again.0
Tip is: 0.0
Enter a bill/total: 150
Bill is: 150.0
Tip is: 0.0 cents
Tip rounded up is: 0.0
Total is: 150.0
Total rounded up is: 150.0
>>> ================================ RESTART ================================
>>> 
Enter a tip:-2
Not a non-negative value! Try again.-3
Not a non-negative value! Try again.-4
Not a non-negative value! Try again.3
Tip is: 3.0
Enter a bill/total: 17.25
Bill is: 17.25
Tip is: 51.75 cents
Tip rounded up is: 52.0
Total is: 17.7675
Total rounded up is: 17.77
>>> 

Wednesday, February 06, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1 Part c

Version 3, or c, depending on your preference. Goal is to only enter numbers. This wasn't working for me very well until I swapped input for raw_input. Apparently I could have eval-ed the input, or been a normal boy and just used Python 3. It's on here somewhere.

import math

#Version 1: basic
#Version 2: round up
#Version 3: next, ONLY enter numbers

def inputNumber(message):
  while True:
    try:
       return float(raw_input(message))
    except ValueError:
       return inputNumber("Not an integer! Try again.")


#print("Enter a tip:")
x = inputNumber("Enter a tip:")
print("Tip is: " + str(x))
#print("Enter a bill/total: ")
y = inputNumber("Enter a bill/total: ")
print("Bill is: " + str(y))

#this won't work because I need a precision factor (cents) in my ceil()
#so use full ints?
print("Tip is: " + str((y * x/100)*100)) #cents
print("Tip rounded up is: " + str(math.ceil((y * x/100)*100)))  #what do I expect?
print("Total is: " + str(y + (y * x/100)))

#with 3% and 1.85 should be 1.91
print("Total rounded up is: " + str(y + math.ceil((y * x/100)*100)/100))

This was actually way more interesting on output then I'd have expected. First, I was using a function from 101 computing, and they converted input to int...that was no good. It rounded my whole bill. So I used a float. Which works. Even with a more complicated set of inputs. And then my non-numeric inputs crashed, which is where I had to switch to raw_input for 2.7 and a tighter loop.
Enter a tip:7
Tip is: 7
Enter a bill/total: 2.50
Bill is: 2
Tip is: 0
Tip rounded up is: 0.0
Total is: 2
Total rounded up is: 2.0
>>> ================================ RESTART ================================
>>> 
Enter a tip:7
Tip is: 7.0
Enter a bill/total: 2.50
Bill is: 2.5
Tip is: 17.5
Tip rounded up is: 18.0
Total is: 2.675
Total rounded up is: 2.68
>>> ================================ RESTART ================================
>>> 
Enter a tip:8.5
Tip is: 8.5
Enter a bill/total: 2.57
Bill is: 2.57
Tip is: 21.845
Tip rounded up is: 22.0
Total is: 2.78845
Total rounded up is: 2.79
>>> 

Tuesday, February 05, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1 Part b

I don't know why this was so difficult.  I'm pretty sure that /100, *100, /100 is probably wrong anyway, it just works because the math works.  Anyway, rounding UP the pennies in the % because I'm a greedy corporate f*cker.


import math

print("Enter a tip:")
x =input()
print("Tip is: " + str(x))
print("Enter a bill/total: ")
y = input()
print("Bill is: " + str(y))

#this won't work because I need a precision factor (cents) in my ceil()
#so use full ints?
print("Tip is: " + str((y * x/100)*100)) #cents
print("Tip rounded up is: " + str(math.ceil((y * x/100)*100)))  #what do I expect?
print("Total is: " + str(y + (y * x/100)))

#with 3% and 1.85 should be 1.91
print("Total rounded up is: " + str(y + math.ceil((y * x/100)*100)/100))


Output for a good use case:
Enter a tip:
3
Tip is: 3
Enter a bill/total: 
1.85
Bill is: 1.85
Tip is: 5.55
Tip rounded up is: 6.0
Total is: 1.9055
Total rounded up is: 1.91

Monday, February 04, 2019

Exercises for Programmers: 57 Challenges to Develop Your Coding Skills - Chapter 1

Chapter 1, the most basic option for a tip calculator using Python.  No type checking and no error handling.

print("Enter a tip:")
x =input()
print("Tip is: " + str(x))
print("Enter a bill/total: ")
y = input()
print("Bill is: " + str(y))

print("Tip is: " + str(y * x/100))
print("Total is: " + str(y + (y * x/100)))


  • Step 2: round up the tip to the cent and the total to the cent.
  • Step 3: restrict the user to numbers for the bill and tip %.
  • Step 4: if the input isn't a number/%, ask them to try again or bail.
  • Step 5: no negatives
  • Step 6: use functions
  • Step 7: make it a gui (well, that's not going to happen in Python....maybe use Javascript) - use a slider, not a prompt.  Could use Visual Studio/C# as well, although that's got overhead.

These Shining Lives

Last night we went to see These Shining Lives at Theatre in the Round.  It was about four women who worked in a watch factory licking radium brushes until they fell ill and died.

It was a good play, but there was more exposition than showing, although I'm not sure how that's avoidable.  You can't exactly show the women with bones extracted from their jaws and pitted with radiation poisoning.  You have to imagine that part. And I'm pretty sure whatever you imagine, it's not as bad as the reality.  Go here (http://boredomtherapy.com/radium-girls/) and you can see a knee and chin affected by radium-based cancer.  Specifically, the chin/jaw of the main character.  They should have shown the photos at the play.  Pretty damn horrific.  I've always said I appreciate my job because although it might screw with the temporary livelihood of individuals, it never puts me in a position where I have to worry about their long term health and/or life.

Here's a link to a Radium Girls reading, which is parallel and took place in Connecticut instead of Ottawa (Illinois). 

 

Betrayal at House on the Hill: Legacy

We've been playing a four person series of Betrayal at House on the Hill: Legacy.  Eryn, Pooteewheet, Me, and P (friend of Eryn's).  On Saturday we played episode one.  Which is a little disingenuous as there is an episode zero.  An introduction.  Episode one was more fun than episode zero, although the narrative elements make it really enjoyable.  It's basically an RPG with some boardgame functions wrapped around it.

I like the naming your character convention.  I went with little Weezie Lynn Gables and her teddy bear Sanford.  I got the Scholar role, which was largely pointless, and weird for a 12 year old.  It was more amusing when I drew a card that said I was chained up in a room and had to unchain myself.  I told my wife Sanford and I were play acting a bit of bondage, but I had escaped because we had a safe word.  Justifiably creepy for a precocious little scholar.


I was pretty sure I handled the game correctly and basically barricaded myself in a room on the top floor behind rows of traps that basically prevented the other characters from backing up.  So not only did I have traps between me and the baddy, I had all the other characters between me and the baddy.  This is undoubtedly how a 12 year old should approach being knowingly stalked by supernatural entities.  Make the adults deal with it and set up some Home-Alone traps just in case they're useless.

Sunday, February 03, 2019

I'm tired of typing month/day/year once a month...

Quick code for listing month/day/year in Python.  I believe [0] is the first weekday of the month.  Weird little function/library.  There are a lot of variations to play with: https://docs.python.org/2/library/calendar.html

import datetime, calendar
year = 2019
month = 1
num_days = calendar.monthrange(year, month)[1]
for i in range(1,num_days+1):
    print(str(month) + "/" + str(i) + "/" + str(year) + ": ")

Acceptance criteria failure! My numbers are first to last, I want last to first.  So the range gets modified.

import datetime, calendar
year = 2019
month = 2
num_days = calendar.monthrange(year, month)[1]
for i in range(num_days, 0, -1):
    print(str(month) + "/" + str(i) + "/" + str(year) + ": ")

February 2019 Reading




Saturday, January 26, 2019

Yellow Bike

I like bicycling videos.  There's a whole post about them around here somewhere that's been slowly falling apart as the videos disappear off Youtube.  I have bicycles I pound into the ground that last longer than some things on Youtube.  It's not a very permanent platform which surprises me, given the things I put up on it in the early days are still there.  That said, I know of at least one video I have that disappeared because there was copyrighted music playing in the background.  I never post for hits - only for a personal archive, so it's amusing how tightly fair use of whatever is just playing over a speaker somewhere, like a coffee shop, can negate your right to a video.  Given the whole microtransaction culture, you have to worry at some point you might not be able to post something in any way because it has someone's copyrighted/patented color, advertising playing somewhere, clothing patterns, or one of a million things you'll need permission to show.  Hyperbole and vaguely the stuff of science fiction, but it has parallels.

Then again, sometimes it just moves.  I think the Pushbike song is one such example - I should just relink.

Anyway, courtesy of one of the RAGBRAI groups I follow, here's Pedro the Lion singing about his Yellow Bike.

 

Sunday, January 20, 2019

Machine Learning 101 - TCJUG

A little over a week ago I went to the Twin Cities User Group presentation on Machine Learning 101 by Mark Kalal at Intertech.  The presentations are member-driven, so they can be prototypes or one offs, but it was enjoyable even if a bit basic (for me) in spots.

He introduced me to Nand Kishor, a big data guy who is prolific and writes over at House of Bots.

This diagram by Nand was particularly interesting.  I've seen similar breakdowns, but this diagram is easily digestible for someone not in the data science space.  Unfortunately, for me, it makes me realize how much I float in that top level of the chart and seldom get to go deep sea diving.

His focus for machine learning work was focused on Weka or Wakaito out of New Zealand.  It fits well into a presentation at Code Freeze a few days ago where one of the presenters pointed out how often you should visualize the big data you're working with at every step to understand how it's changing, what's being highlighted, and what's outside the norm.  In this case it was small sets of data and the tool is crude, but effective.  e.g. after about 40 megs, the data requires the command line, so there are limitations to what you can assess.  I'd like to try it out with some of our data, to see if there are questions that can be intuited out of our already aggregated data.

I don't have his presentation because I think I wrote the link down incorrectly (rather than just taking a picture - tags me as old I think), but I reached out to see if there's a link so I can include a little more of his low-level work here.


Thursday, January 17, 2019

January Reading

Well, the problem with recording reading, at least as far as I can tell at the moment, is way too much training.  I pretty much failed at keeping track in December. But I probably spent 40 hours in classes.  This month won't be much better - graphql, aws, github, react, vue, d3...two conferences on machine learning.  But I'm going to try anyway.  Reading small short articles is good for me.  I think better if I've got some variety.  Although I might record it here and then write more elsewhere if it's really interesting. So here goes...one more try.  My first though, however, is that a should code a short loop to spit out all the days of the month in the format I want....

  • 1/31/2019: Chapter 5: "Creating a GraphQL API" - Learning GraphQL: Declarative Data Fetching for Modern Web Apps by Eve Porcello and Alex Banks
  • 1/30/2019: Chapter 4: "Designing a Schema" - Learning GraphQL: Declarative Data Fetching for Modern Web Apps by Eve Porcello and Alex Banks
  • 1/29/2019: Chapter 3: "The GraphQL Query Language" - Learning GraphQL: Declarative Data Fetching for Modern Web Apps by Eve Porcello and Alex Banks
  • 1/28/2019: Chapter 2: "Graph Theory" - Learning GraphQL: Declarative Data Fetching for Modern Web Apps by Eve Porcello and Alex Banks
  • 1/27/2019: Chapter 1: "Welcome to GraphQL" - Learning GraphQL: Declarative Data Fetching for Modern Web Apps by Eve Porcello and Alex Banks
  • 1/26/2019: Sector Roadmap: Cloud Analytic Databases 2017 (Gigom via Snowflake) by William McKnight
    • analytical, operational, transactional (types of databases)
    • data warehouse >> database designers ended up answering questions, not business (what we saw even with some flavors of analytics engines).
    • Lots of talk about supporting diverse data (XML, JSON) - this is an issue we saw with Microstrategy versus Datameer, the ability to JSON_VALUE out values stored in semi-structured fields.
    • Learning that you can just "pause" SQL Server (Microsoft) is pretty cool.  Our ElasticSearch nodes require spin up/spin down time that's almost impossible to avoid / implement with our schedule.
    • Redshift (AWS) got very low scores.
    • Addressed: Robustness of SQL, Built-in optimization (cost versus rules based), On-the-fly Elasticity (an issue for us to scale up/down), dynamic environment adaptation, Separate of compute from storage (huge....really huge), and support for diverse data.
  • (BOOK) 1/25/2019: The Stone Sky: The Broken Earth Trilogy 3 by N.K. Jemisin, 2017.  464 pages.
  • 1/24/2019: This Mansplaining Chart Is Absolutely Heroic & Can Be Sent To Anyone Who Needs It - Bustle
  • (BOOK) 1/23/2019: Lovecraft's Monsters (edited by Ellen Datlow), various.  432 pages.
  • 1/23/2019: "Children of the Fang" by John Langan in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/23/2019: "Haruspicy by Gemma Files in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/23/2019: "That of Which We Speak When we Speak of the Unspeakable" by Nick Mamatas in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/23/2019: "The Bleeding Shadow" by Joe R. Lansdale in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/23/2019; "I've Come to Talk With You Again" by Karl Edward Wagner in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/23/2019: "Waiting at the Crossroads Motel" by Steve Rasnic Tem in Lovecraft's Monsters (edited by Ellen Datlow)
    • Solid tale with a noir Cthulhu bend.
  • 1/23/2019: "Black as the Pit, From Pole to Pole" by Howard Waldrop and Steven Utley in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/22/2019: "Jar of Salts" by Gemma Files in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/22/2019: "The Sect of the Idiot" by Thomas Liggotti in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/22/2019: "Love is Forbidden We Croak and Howl" by Caitlin R. Kiernan in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/22/2019: Secrets of the Creative Brain - Nancy C. Andreasen in The Atlantic in 2014
    • I remember having some aspect of this excitement pulling together a number of technologies to create something new when I worked more closely with technology.  I don't think management always gives one the right tools/time to be creative unless you're approaching it as a way to "think big" and write a book or teach others.  But garbage - noise - gets in the way.  Process, source control, the minutae of stories rather than the bigger driven set of features.
    • threshold theory, which holds that above a certain level, intelligence doesn’t have much effect on creativity: most creative people are pretty smart, but they don’t have to be that smart, at least as measured by conventional intelligence tests. An IQ of 120, indicating that someone is very smart but not exceptionally so, is generally considered sufficient for creative genius.
    • divergent versus convergent (one answer) thinking - she notes that this doesn't necessarily explain creativity because both may be forms of creativity.
    • Many forms of creativity, from writing a novel to discovering the structure of DNA, require this kind of ongoing, iterative process.
    • One difference between a great writer like Shakespeare and, say, the typical stockbroker is the size and richness of the verbal lexicon in his or her temporal association cortices, as well as the complexity of the cortices’ connections with other association regions in the frontal and parietal lobes.
    • Many creative people are polymaths, people with broad interests in many fields—a common trait among my study subjects.
    • “There is no greater joy that I have in my life than having an idea that’s a good idea. At that moment it pops into my head, it is so deeply satisfying and rewarding … 
  • 1/21/2019: Medieval Walls of Ávila - Atlas Obscura
  • 1/21/2019: Ravens Are Evolving, and Not in the Way You'd Expect: Instead of branching into new species, raven groups experienced something called "speciation reversal."
    • “What were once two distinct organisms can collide and become one, weaving their previously distinct genomes into a single tapestry. It's a complex but beautiful work of nature, really."
  • 1/20/2019: Many Voters Think Trump’s a Self-Made Man. What Happens When You Tell Them Otherwise?
    • "estimated that over the course of his lifetime, the younger Trump received more than $413 million in today’s dollars from his father."
    • "Many Americans were and remain misinformed about the central aspect of Trump’s business career, which was his sole credential in his bid for office."
    • "the practices of even serious journalists may not always produce an informed public"
    • "As we enter the 2020 cycle, reporters and campaign workers may assume voters know about all sorts of things that they don’t. But our research shows that the basic information plugged-in elites take for granted is not known by many Americans, and can be consequential in political evaluations."
    • Interesting how humans are still tied to mythologies and the need to believe in them.  Trump as the anti-Arthur.  Or, perhaps, Arthur, given how dubious some of that king's policies were.  That would be a fun mash up.
  • 1/19/2019: Killers of the king: the men who dared to execute Charles I
    • On Henry Marten: "For instance, he thought of the name of the body that would face the king: ‘the Good People of England’. That’s a very clever construct, because to take a king to trial you had to set up something fairly worthy."
    • Re: one of the regicides, Harrison: "After he had been hanged, resuscitated and castrated, and while he was being gutted, he managed to swing a punch at his executioner."
    • Added the book to my list; https://www.amazon.com/Killers-King-Execute-Charles-2016-02-16/dp/B01FIWHM96/
  • 1/18/2019: Streampunks: YouTube and the Rebels Remaking Media by Robert Kyncl and Maany Peyvan via GetAbstract
    • [There's a variation of this in my own company for subs and what happens during an economic downturn] - Subscription services flail if they lack a “funnel” – a loyal group of “free users” the service can persuade to start paying. Subscription services must cope with the dreaded “churn” – viewers who sign up for a subscription but leave. Free services seldom have to deal with churn. But if subscribers stick around after a few months, they become unlikely to churn. The subscription turns into a normal monthly expenditure. That resilience matters greatly when the economy slows down. During the 2008 recession, Netflix and Amazon Prime held onto a large percentage of their subscribers.
    • [This surprised me - that's damn accurate] Content ID boasts a 99.7% accuracy rate at identifying uploaded videos. It compares anything uploaded against a vast reference file. More than 50% of YouTube’s payments to the music industry derive from ad revenue on fan-uploaded videos.
  • 1/17/2019: Trumppunk Resists Presidential Bunk Or, Updating Obscuring Mirrorshades with Revelatory Magnifying Glasses Enhances Seeing the Forces of Normalcy
    • Trumppunk—metafictional fictions about Trump’s fictions
    • Trumppunk, unlike Cyberpunk, does not have mirrorshades, because Trump looks directly at the sun.
    • "Literary agent Jonny Geller explains that the “commercial view among publishers seems to be that people are living it [Trumpism] and haven’t got the head space for reading it. . . . It is a lack of courage and imagination” "
  • 11/17/2019: Mother of All Breaches Exposes 773 Million Emails, 21 Million Passwords
    • I remember when Troy Hunt wrote semi Microsoft-centric security papers over a decade ago when I was a tech coach on the lawschool project.  His first in depth delineation of security concerns was a bible to me for a while when we started hardening our application.
    • I think credential stuffing (same password multiple accounts) might be how my microsoft account was breached for a few moments before I MFA-ed it and changed passwords.
  • 1/16/2019: (TRAINING) Code Freeze 2019 at the University of Minnesota all day.  I'll cover in a separate post - some great presentations on Machine Learning.
  • 1/16/2019: Remembering ‘Babylon 5,’ One of the Smartest Sci-Fi Series Ever, 25 Years After Its Debut
    • no kids, no robots
    • not enough detail in the article - my wife and I watched the series when it was originally out and it was favorite for my friend Dan, who died last year, and me to talk about.  I remember how frustrated he was when an episode was moved.
  • 1/15/2019: Something Is Broken in Our Science Fiction: Why can’t we move past cyberpunk
    • there’s steampunk, biopunk, nanopunk, stonepunk, clockpunk, rococopunk, raypunk, nowpunk, atompunk, mannerpunk, salvagepunk, Trumppunk, solarpunk, and sharkpunk (no joke!)
    • Moreover, as SF scholar Sean Guynes-Vishniac argues, publishers always want to find evermore-narrowly-sliced microgenres, hoping to squeeze every aesthetic niche dry.
    • Cyberpunk derivatives on Wikipedia (may need to be its own reading entry)
    • At its root, then, cyberpunk is arguably a kind of fiction unable to imagine a future very different from its present.
    • retain the hope of writing fiction that confronts readers with new ways of thinking about their relationship to the future—our future
  • 1/14/2019: Remnants by Fred Chappeli in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/13/2019: " Inelastic Collisions" by Elizabeth Bear in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/12/2019: "The Dappled Thing" by William Browning Spencer in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/11/2019: Two years after #Pizzagate showed the dangers of hateful conspiracies, they’re still rampant on YouTube
    • Cool, I didn't know this site existed: https://algotransparency.org
    • More cool - you can see the code they use to walk Youtube here: https://github.com/pnbt/youtube-explore
    • Or the Network Contagion Research Institute: http://ncri.io/
    • I had no ideas about the Frazzle conspiracy nonsense.  Damn that's dumb.
    • "The platform’s recommendation engine adds the power of repetition, allowing similar claims — no matter how preposterous — to be served again and again to people who show an initial interest in a subject."
  • 1/10/2019:  (TRAINING) TCJUG (Twin Cities Java User Group) at Intertech.  Topic was Machine Learning 101. I'll cover in a separate post: http://www.nodtonothing.com/2019/01/machine-learning-101-tcjug.html
  • 1/9/2019: "A Quarter to Three" by Kim Newman in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/8/2019: New Paper: A 'Mirror Image' of Our Universe Existed Before The Big Bang
    • Well, not many details.  But the notion that the scientist who's proposing a universe where time runs backward is called Turok.  That's funny.
  • 1/7/2019: The ACLU made the Border Patrol reveal its terrifying legal theories
    • Counsel for CBP has cherry-picked legal precedents to produce a kafka-esque litany of excuses for stops, including being close to the border, being on a "known smuggling route," driving "inconsistent with local traffic patterns," being "from out of the area," having a covered cargo area; paying "undue attention to the agent's presence," avoiding "looking at the agent," slowing down on seeing the agent, being dirty, etc.
  • 1/6/2019: "The Same Deep Waters as You" by Brian Hodge in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/5/2019: "Red Goat Black Goat" by Nadia Bulkin in Lovecraft's Monsters (edited by Ellen Datlow)
    • Maybe my favorite in the book.
  • 1/4/2019: "Bulldozer" by Laird Barron in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/3/2019: "Only the End of the World Again" by Neal Gaiman in Lovecraft's Monsters (edited by Ellen Datlow)
  • 1/2/2019: Watch “The Midnight Parasites,” a Surreal Japanese Animation Set in the World of Hieronymus Bosch’s The Garden of Earthly Delights (1972) - a weird 9 minute video that does do a pretty good job of capturing the feeling of the painting in some ways.
  • 1/1/2019: Was There a Real King Arthur?
    • “Truth be told, the Arthur of Geoffrey of Monmouth is a deeply unlikable sociopath, a violent, quick-to-anger, murderous thug,” says Russell. “He is someone who very much fits the Dark Age idea of a successful king, but not a hero for the Middle Ages.”
    • Good quote: “It’s clear that rather than inventing everything, Geoffrey used a variety of sources, including folklore, chronicles, king lists, dynastic tables, oral tales, and bardic praise poems, in order to create a patriotic British narrative,” he says. “Arthur is an amalgam of at least five characters. He is, in effect, a composite Celtic superhero—the ultimate warrior for the Britons.”

Sunday, December 09, 2018

December Reading


  • 12/23/2018: Sinus Trouble Can Lead to Depression, Lost Work
    • My wife sent me that link.  Depression, no.  Lost work, a bit.  Generally once in the spring and once in the fall when it starts to migrate into a sore throat and some physical exhaustion.  That could be interpreted as depression, but all I can say about that is...it is not.
  • 12/22/2018: Allergies or Chronic Sinusitis? Most Get It Wrong and Don't Get Treated
    • Mine is sinusitis most of the time.  Allergies feel very different, and I can tell when they're in full bloom (ha) because when I'm riding my bicycling and there's pollen, my eyes will literally tear up for ten+ mile stretches through the lower verdant valleys of the Minnesota/Mississippi river systems.
    • But...it's not ruining my life in general unless it does the migrate to the throat issue.  E.g. not > 2x per year. But it can last awhile, and this year it's been tenacious. That said, I can breath out both sides of my nose, and although I'm sleepy earlier than usual, that's generally 11:00+ p.m. and I'm riding a bike for several hours a week at high speed.  I can definitely breath.
  • 12/21/2018: Scott Hanselman's Newsletter of Wonderful Things, December 17th edition.
    • I like curated lists.  A curated list once a quarter.  Even better.
  • 12/20/2018:
  • 12/19/2018:
  • 12/18/2018:
  • 12/17/2018:
  • 12/16/2018:
  • 12/15/2018:
  • 12/14/2018:
  • 12/13/2018:
  • 12/12/2018:
  • 12/11/2018:
  • 12/10/2018:
  • 12/9/2018: Facebook's Very Bad Month Just Got Worse - New Yorker
    • I hope every company I work for can always say they weren't (even passively) complicit in a genocide or a fucking up multiple democracies in the aid of totalitarianism.
  • 12/8/2018:
  • 12/7/2018
  • 12/6/2018:
  • 12/5/2018:
  • 12/4/2018:
  • 12/3/2018:
  • 12/2/2018:
  • 12/1/2018:

Monday, November 19, 2018

November Reading

No excuses, just pick it up again :)

  • 11/30/2018: My First Game - GML - Attacking & Collisons - Space Rocks (Part 3) (16:37)
    • This was good, although some of the glitches I ran into were rough.  I didn't quite get the "rooms" inheriting from "rooms" part until sleeping on it last night.  I might still be wrong when it comes to persistence between rooms, but I'm going to try it in a minute.  I also had issues with the restart logic on the ship.  I swear she just destroyed the whole game and restarted it, but that restarted lives and score, so I had to determine where to inject a life count and a restart on Enter.  It took forever because I had a misplaced }.  The problems in coding never, ever.....ever change.
  • 11/30/2018: My First Game - GML - Score, Lives & Effects - Space Rocks (Part 4) (12:38)
  • 11/30/2018: My First Game - GML - Sound Effects & Polish - Space Rocks (Part 5) (10:18)
  • 11/29/2018: My First Game - GML - Setup & Movement - Space Rocks (Part 2) (14:25)
  • 11/28/2018: My First Game - Intro to GameMaker - Space Rocks (Part I) (12:41)
    • Learning a new framework.  2D (so less overhead than Unity).
  • 11/27/2018: Service Now Request Fulfiler Training (30 minutes?)
    • These five courses were part of a seven course series I started in 2017 to get approval access in Service Now for my projects.  I generally ignored finishing up so as not to step on dev toes during approval.  But with the layoffs, I inherited the legacy corporate wiki and I have to be able to approve patches and ponder whether I should be figuring out how to shut it down (now that we have MS equivalent tools, the timing is good >> I should determine how to cut it all over to Office 365).  These took much longer than they say because of the reading-out-loud nature and the frequent work interruptions.  I'd guess the five classes were closer to 6 hours total.  The only thing I really appreciated was the description of the GsF process which is used when there's a significant outage to do a root cause dig and retro.  One of my projects landed in that space due to an outage (which is ultimately related to significant org-led turnover in the last two years and missing a best practice after we took on Oracle DB maintenance ourselves (woo, devops) to expedite work.  There was a huge post incident dig with groups I'd never met before.  Now I know why.  As Mort said - it's exciting to have a real example, because you can take the training and never encounter the actual in-practice reality until 6-24 months after the course.
  • 11/26/2018: Service Now Change Management Tool Training (40 minutes)
  • 11/25/2018: Service Now Change Process Training (60 minute)
  • 11/24/2018: Service Now Problem Management Tool Training (15 minutes)
  • 11/23/2018: ServiceNow Problem Management Process Training (18 minutes) 
  • 11/22/2018: Diary of a Concussion by Elizabeth Lopatto (2017 article originally on The Verge).
    • Took a year+ for me to feel normal again.  I've heard the same from others.  They usually fib a bit to friends, family, and coworkers once they can spoof it.  Tweeted her and got a response.
  • 11/21/2018: New – Predictive Scaling for EC2, Powered by Machine Learning - official AWS write up.
  • 11/21/2018: AWS Adds The Most Anticipated Feature To Amazon EC2
    • Whoa....predictive scaling.  Was utilization-based and schedule-based previously.
    • AIOps
    • re:Invent is November 26-30.
  • 11/20/2018:  'N*****fishing' Is the New Form of Blackface: The word describes white women who change their appearance to look black or racially ambiguous. We spoke to someone accused of this, and to the women calling her out.
    • I had no idea this was a thing.
  • 11/20/2018: Neo-Nazis Are Organizing Secretive Paramilitary Training Across America: The creation of a new social networking platform called “The Base” appears to be an effort to shift Naziism from a divided digital space to physical, violent insurgency.
    • the majority of extremist-related killings in the last decade were committed by right-wing extremists.
  • 11/20/2018: What is machine learning? We drew you another flowchart
    • supervised, unsupervised, reinforcement (trial and error - e.g. entropy)
  • 11/19/2018: Rare and diverse giant viruses unexpectedly found in a forest soil ecosystem
  • 11/18/2018: Researchers capture first representative of most abundant giant viruses in the sea

Sunday, October 28, 2018

Stallworth

A picture of Ron Stallworth right before he speaks at Town Hall at my office.  They've got a particularly good line up of speakers lately, including one of the attorneys from the Cosby trial.

Stallworth's story about joining the Klan back in the day, which became Spike Lee's BlackKKlansman, is fascinating.  It was interesting to hear him talk about how much of what he did was about prevention of terrorist acts (burning crosses for instance) not arrests.  The goal was to shut them down before they happened, even if it meant subterfuge (sending cop cars past planned burn sites).  He also talked about how he wasn't infiltrating only the Klan, but the left as well, basically getting a read on all potential violence in his city.

He talked for a while about getting the story/book to print and film, which was an interesting angle and got away from the basic story I'd already watched by watching the movie (and he covered where there was some artistic license like his girlfriend, although the cross burning on the day he was taken off the case was true).

Stallworth's outspoken (negative) opinions about our current president clearly made the coordinator (not the one on stage, but the one with the microphone) nervous.  I saw one audience member leave after the first 45 comment.  I'm ok with that.  One out of an audience of hundreds.  And the current administration isn't particularly friendly (ouch, that was a Minnesotan way to put that) to LGBTQ, or really anyone who isn't their core. That's not aligned with corporate values.

Great presentation - wish I could have been at the one later in the evening (elsewhere) where he talked about his recent phone call with David Duke.


Mouse

I put the table cloth back on the table finally after it was washed to get my spills off it (better there than the computer).  I reached for my mouse and it wasn't there, so I used the pad.  Reached again, it wasn't there.  Back to the pad.  Finally I looked behind the machine and to the left because I knew I had observed it on the table.  

It's there.


Tuesday, October 23, 2018

Catching Up

I think I finally have a pile of photos all sorted, so I can catch up a bit.  And some books sitting nearby, and things.  But tonight...tonight I just went for a run.  Which was really more of a walk.  I picked up ZombiesRun again.  Eryn and I originally ran it back in 2013, so I qualify as a legacy member and get the first three seasons free rather than on a sub.  That's nice - because I think it's like 100 episodes.  That'll get me through months before I need to worry about what else I should run to, or if I want a yearly sub or if it's simply going to destroy my feet.

I bought some wireless ear phones and a phone arm band.  I don't intend to go full on runner, but I don't want an excuse like I can't hear in the winter without gloves.

But tomorrow I'm going to catch up on our Chicago picks from last weekend.  We took a short trip out there.  Primarily to eat.  But we also caught the field museum.  It was a fun trip.  Not as involved as our trips to Chicago in the past, but it's nice to know we're still capable of driving out there and back without falling apart.

Sunday, October 21, 2018

Eight Minute Empire II

Well, at least when the easy AI is involved, my "goods" strategy holds up.  Go for the crystals and the "wild" resources and score yourself an easy six points.  That's usually more than enough to swing the win your way.  Doesn't mean I'll always win, but about 2/3 or 3/4.  Enough that I could make a living in Vegas playing board games.

....Vegas.  Board games.  Holy crap someone needs a board game casino.  In bed with the mob for wood, bricks, ore, and wool/sheep?  Crazy.  I'm almost of the opinion someone needs to sponsor me in the endeavor.   Wow....that doesn't exist except as betting on other games (I'm searching Google)?  That's wild...must be the time to income ratio.  But you'd think with high rollers that could be resolved.  Or at least made part and parcel of an existing casino.  



LOL...and then of course I'm proven very, very wrong moments later when I'm not approaching it from a balanced perspective...



Well....I did say 2/3 or 3/4....