Monthly Archives: December 2021

Phil 12.31.2021

Got reading of GML files working. Now I need to handle coordinates and elevation:

And it works!

Need to add some lighting:

Need to add gridlines (Add method to ShapePrimitives):

prim = GeomLines(Geom.UHStatic)

# thats the first triangle

# you can also add a few at once
prim.addVertices(2, 1, 3)

prim.addVertices(0, 5, 6)

Phil 12.30.2021

Getting the surface creation out of the initial creation and into the load. Also, more colors and rotating text!

Working on the results section of the paper

Phil 12.29.2021

Good progress on the technique paper. Procrastinating about the PNAS paper. I need to think about that one some more

Also good progress on the terrain viewer. I have most of the plumbing done and am almost ready to read in the GML:

Phil 12.28.21


  • Text Outlaw for emails

GPT Agents

Phil 12.27.21


  • Text Outlaw for emails

GPT Agents

Phil 12.23.21

Outlaw again, dammit

Online gifts/contributions

This is pretty cool, and might be a very nice way of showing word choice visualization by the GPT – PyUpSet


  • Submit LaTeX!!!! (email)

GPT Agents

  • Create outlines for the approach paper (train small models on specific populations) and the application paper (behaviors in covid models)

Phil 12/22/21

Call outlaw

Check into agent Jim Levine: He represents these guys

GPT Agents

  • Realized this morning that there is another way of doing prompts now that I have the tool running. Something like “Once you accept the idea that {}, the next likely step is”. After playing around a bit, I got this prompts working: once we accept the “conspiracy theory” that “the moon landing was faked”, then next theory we deed to verify is that “the moon” is actually just a big-ass TV, and the moon-landing was just an elaborate hoax. This looks like a promising direction!


  • Finish paper and get off to MARCOM for checking – done
  • Got the template paper running it its own folder – done


  • Read Tamahau’s paper before meeting – no meeting, but done anyway

GPT Agents

  • There was a meeting! Next task is to put together the outline for the two papers and distribute the link

Phil 12/20/2021


  • Sprint Review
  • Sprint planning
  • Work on paper! Based on the reviewer’s comments, I’m thinking of changing the name of the maps from Belief maps to “Jukurrpa Charts”, which reference the Australian Aboriginal Dreamtime, which I think are a nice analogy to what language models really are, a system of fixed relationships between latent concepts and language that can be traversed using narrative forms, or “dreamtracks”. The other option would be to use the term Neural Language Maps. The only problem is that NLM also means ‘Neural Language Models’. Maybe Neural Semantic Maps (NSMs)?
  • Wound up going with Neural Narrative Mapping

Phil 12.17.2021


  • The paper got accepted with R&R! Worked with Aaron on roughing out the changes
  • Made an update to the codebase to just draw the groups since the computational orders data doesn’t have the topic connections. It will be nice to generate quick overviews too.
  • Used that to create a new GML for our splash figure:

Also got another nice ride in:

Phil 12.16.2021


  • Call Outlaw again!
  • Doctor!


  • Finish mods to ForceNode and CanvasFrame. Yay! Got everything working the way I want. Need to integrate in the main codebase now.
# Repulsion function.  `self' and `n2` should be nodes.  This will
# adjust the dx and dy values of `self` `n2`. If you want objects with more mass to be given
# 'more room', set common_mass to zero
def linRepulsion(self, n2:'ForceNode', common_mass:float = 1.0):
xDist = self.x - n2.x
yDist = self.y - n2.y
distance2 = xDist * xDist + yDist * yDist # Distance squared

if distance2 > 0:
if common_mass == 0:
common_mass = self.mass
factor = self.pp.repulsion_scalar * common_mass / distance2
self.dx += xDist * factor
self.dy += yDist * factor
  • Moved adjust_node to ForceNode and renamed it:
def adjust_mass_size(self, mass:float = 0, size:float = 0, scalar:float=0 ):
#set up the scalar regardless
if mass == 0 and scalar == 0:
print("WARNING! CanvasFrame.adjust_node(): mass == 0 and scalar == 0")

if scalar == 0 and size != 0:
scalar = size / self.size

if mass != 0:
self.mass = mass
self.mass *= scalar

# now just use the scalar. The reason we do this is that the call to self.canvas.coords() returns
# a SCALED value of coordinates. If we set them directly from size, they will be too big if
# zoomed out and too small if zoomed in
self.size *= scalar
x0, y0, x1, y1 =
old_x_size = abs(x1 - x0)
old_y_size = abs(y1 - y0)
x_size = old_x_size * scalar
y_size = old_y_size * scalar
x_offset = (x_size - old_x_size)/2.0
y_offset = (y_size - old_y_size)/2.0, x0-x_offset, y0-y_offset, x1+x_offset, y1+y_offset)
  • Start on R&R? Haven’t seen the response yet

Go for a longer ride today:

Phil 12.15.2021

Hasbro is making emotional support robots


  • Get paper back for R&R today?
  • 2:00 Talk. Need to prep
  • Update the CanvasFrame testbed so that ForceNodes have their weight and size adjusted in real time. Then migrate to the MapBuilder app
    • Poked at the Atlas algorithm for a while and some of the ways that mass are used don’t make much sense to me. Making some tweaks. I do have an update working, but I’m not sure if I want to pass a scalar or an explicit value in. Maybe both? If the value is zero, don’t use it?

GPT Agents

  • 4:15 UMBC meeting. Didn’t discuss that much. I need to get started on the Yelp template as soon as the IEEE paper final is submitted


  • Went over changes with Jarod. He’ll add an appendix of definitions
  • Went over progress with Tamahau. I need to review his SLR pdf as well

Phil 12.14.2021


  • Finish fixing the code so that there is an option for weights to be the default or calculated. I can use the calculated now for the GML, and then work out how to use the calculated for the live editing.
  • This looks better:
  • Here’s what I’m doing:

if weight < 1:
weight = 1.0
weight = math.log10(weight)
radius = radius * weight
fn = cf.create_ForceNode(, radius, color, x=xpos, y=ypos)
fn.mass = weight
self.force_node = fn
  • I still need to adjust the sizes and weights in the live edit
  • Put talk together once the code is fixed and schedule

GPT Agents

  • Read Jarod’s SLR – About halfway through
  • Good meeting with Tony and Panos. I went over the concept and tools, and we had a remarkably wide-ranging discussion. I wound up sending Tony and Panos PDFs of the book draft

Phil 12.13.2021

The emergence of collective knowledge and cumulative culture in animals, humans and machines

  • Each of us may know much, yet the collective knowledge in our communities is far richer and more powerful when harnessed towards a common end. Moreover, when spread over time and generations, collective contributions to knowledge can generate the forms of cumulative cultural achievement that underlie the extraordinary global success of our species. This theme issue reveals the surprising diversity of contexts over which the emergence and evolution of forms of collective knowledge and cumulative culture have begun to be identified in the natural world and engineered into new technologies. Manifestations range across the cultural evolution of vocal repertoires in birds and whales, primate conventions and technologies, language evolution, social networking, swarm robotics and humanoid robots.


  • Managed to break something in the conspiracy data that is causing the graph to explode. Chasing down possible causes. It seems to be related to saving the model to the DB
  • Fixed it. The weight was being set differently on the load than as the graph is built. The thing is, the load is probably right, but I need to make that work as the graph is built first

GPT Agents

  • Nice chat with Antonio about using the tool to explore gamification strategies