π§Ή Winter Haikus & π§Ή Emergency Spring Cleaning βββββββββββββββββββββββββ β January 27, 2024 β Forth Haiku βββββββββββ β’ Introduced in 2011 β’ Small Programs in Forth β’ Colorful Pictures, Animations, Sounds β’ Pixel/Fragment Shader β’ Forth -> JavaScript -> WebGL β’ Anyone can post β’ Anyone can create a "Create a derived work" β’ Runs on the Web + Google AppEngine https://forthsalon.appspot.com/ AppEngine βββββββββ β’ Launched in April 7, 2008 β’ Initially Python - Later Go, Java, PHP, NodeJS, .NET, and Ruby β’ Designed to scale from tiny to millions β’ Free for tiny β’ Built-in Datastore, Account Handling, Memcache, Web Templates, Search API Compatibility βββββββββββββ β’ For several years, slow incremental change - Master/Slave Datastore to High Replication Datastore - forthsalon -> forthsalon-hrd - Changes to the python database library - User account handling deprecated - Used to seem the perfect place to put a dead hand Compatibility... ββββββββββββββββ β’ But then this January Python2 + old runtime deprecated - January 30, 2024 last day to push old version - Unclear how much longer old runtimes will work - Underpinnings clearly more VM-like β’ A bunch of changes required - Dependencies using pip - New datastore interface - No more Search API Bigtable ββββββββ β’ NoSQL + Eventual consistency β’ Indexed on (Row:string, Column:string, Time:int64) β’ Build your own structure, store protocol buffers β’ Atomic transactions at row level β’ Highly distributed + scalable Cloud Datastore βββββββββββββββ β’ Make this look more like SQL β’ Entities = Rows β’ Keys and Ancestors abstracting Bigtable row keys β’ Automatic indexes kept fields by default β’ Additional indexes added in index.yaml β’ Still eventual consistency β’ Transactions limited historically small number of "entity groups" (common ancestors) class Haiku(ndb.Model): when = ndb.DateTimeProperty(auto_now_add=True) title = ndb.StringProperty() author = ndb.StringProperty() code = ndb.TextProperty() score = ndb.IntegerProperty() rank = ndb.FloatProperty(default=0.0) last_modified = ndb.DateTimeProperty(auto_now=True) parent = ndb.StringProperty(default='') parent_recorded = ndb.BooleanProperty(default=False) Changes βββββββ β’ Switched from Search API to searching for author / title prefix β’ Added dependencies explicitly β’ Adopted new Flask framework β’ Switched to new Datastore API library β Winter Haikus β QUESTIONSβ π Thank you!