807c776739fa

Update
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Thu, 14 Jul 2016 23:01:56 +0000
parents 37fbb1777117
children c5d7d2b74b48
branches/tags (none)
files README.markdown

Changes

--- a/README.markdown	Thu Jul 14 22:57:51 2016 +0000
+++ b/README.markdown	Thu Jul 14 23:01:56 2016 +0000
@@ -57,13 +57,18 @@
 
 * Added Prolog list support to [Bones][].  Need to think about the UI more, but
   it speeds things up considerably (I don't *fully* understand *why* yet...).
+
 * Started playing guitar again after a month of so of not at all.  Truss rod is
   all out of whack thanks to the changing weather.
+
 * Read some more [AMOP][].  My brain hurts.
+
 * Read more [Masters of Doom][].
+
 * Noticed the `dynamic-extent` declaration of a `flet`ed function in
   Alexandria's `extremum`... should look into this for the bigass `labels` in
   [Bones][].
+
 * Did a bit more from the [Mazes book][].
 
 ### 2016-06-03
@@ -73,10 +78,13 @@
 * Went to a talk by Tony Hoare at my school.  It was interesting, but the more
   I dive into purely theoretical things the more I realize I really love
   *actually making the computer do things*.
+
 * Started watching the [ELS 2016][] videos.  I wish I could have made it this
   year, but unfortunately my school schedule conflicted.  Next year!
+
 * Asked for help/advice/feedback on the UI for [Bones][]:
   <https://gist.github.com/sjl/1f4bb73967663af0f9276b491af84140>
+
 * Implemented `cut` for [Bones][].  I simplified the book's fuckery quite a bit
   and it turned out to work pretty well, after chasing down a couple of other
   pre-existing bugs.
@@ -87,17 +95,23 @@
   is to rewrite the bulk of the compiler.  This sounds bad, but "rewrite the
   compiler" has been on my list of things to do for a while now, so it's as good
   a time as any.
+
 * The compiler is pretty crufty because it started out with me trying to wrap my
   head around the awful [WAM book][] and grew organically.  Now that I've got
   a fairly solid understanding of how this shit works, my second attempt should
   be nicer.
+
 * Watched more [ELS 2016][] videos.
+
 * Finished reading the main part of [AMOP][].  Gonna put it down and move on to
   [LOL][] instead of trying to power through reading the entire MOP spec.
+
 * Started rewriting the [Bones][] compiler.  Made good progress, will probably
   take another day or so to get working and then another day to clean up.
+
 * I really should go through and type hint all the stuff in that compiler.  The
   type hints have proven useful in the rest of the project.
+
 * Started thinking about what an inspector plugin for [cl-nrepl][] would
   look like.  The "dump the object" code I wrote for the new compiler is ugly
   and painful to write -- if I just had a nice inspector I wouldn't need to fuck
@@ -110,8 +124,7 @@
 
 ### 2016-06-07
 
-* [Finished
-  rewriting](https://bitbucket.org/sjl/bones/commits/72bbdd5157258b77c85a6c0172240a26bb7ad4a4) the [Bones][] compiler.
+* [Finished rewriting](https://bitbucket.org/sjl/bones/commits/72bbdd5157258b77c85a6c0172240a26bb7ad4a4) the [Bones][] compiler.
 
 ### 2016-06-08
 
@@ -121,8 +134,10 @@
 
 * Downloading/updating everything to prepare for my long-ass flight back to the
   states tomorrow.
+
 * Grabbing doc trees with `wget`, but also might try out [Dash][] to see if it
   can reduce this pain a bit.
+
 * Roswell broke when I updated it through Homebrew and I had to manually remove
   all its cached files in `~/.roswell` for it to work again.  Computers are
   garbage.
@@ -135,23 +150,29 @@
 ### 2016-06-11 - 2016-06-23
 
 * Traveling in the US.  I miss American food.
+
 * I had left a cache of paper books at a friend's place in the US, so I read
   through a few while I was there.
+
 * Read through [ANSI Common Lisp][].  Pretty basic, nothing too advanced in it.
   It reminded me how much I hate Paul Graham's function/variable naming style.
   Aim for brevity of *ideas*, not characters.
+
 * Read/skimmed [Successful Lisp][].  Also pretty basic, but kind of weird at the
   same time.  It seemed to just skim a lot of topics and not really go in-depth
   enough on any of them.  Except for the chapter about the bit-twiddling
   operations, which I haven't seen in any other Lisp book (except maybe
   [CLtL2][]).  I don't think I'd recommend it.
+
 * Read through most of the [OpenGL SuperBible][].  Graphics programming is some
   really neat and powerful stuff wrapped in a hilarious nest of disgusting
   syntax and boilerplate.
+
 * I really want to play around with shaders and such, but the C++ development
   environment seems like an enourmous pain in the ass.  There's also [CEPL][]
   but I'm worried that I should really know some OpenGL before diving into that.
   I might poke at WebGL a bit as a middle ground.
+
 * Read through [On Writing][] by Stephen King.  Some good advice in there,
   especially about just reading and writing a *lot*.  I haven't been reading
   enough lately -- so from now on the Kindle is gonna replace my phone while on
@@ -160,11 +181,15 @@
 ### 2016-06-24
 
 * Still jet lagged.  Catching up on things back in Iceland.
+
 * Halfway through [Salem's Lot][].  I forgot how much I loved reading fiction.
+
 * Grabbed a bunch of GDC talks from [this thread][Reddit GDC] to watch later.
+
 * Read more [LOL][].  This dude is a wonderful nutbag.  The chapter on
   efficiency is crazy, but interesting.  I might use some of its ideas in
   [Bones][] once I've got that to a stable place.
+
 * Watched the Juice it or Lose It talk from that Reddit thread.  Really nice.
   Simple stuff like tweening makes a big difference.
 
@@ -174,14 +199,18 @@
   was really interesting.  The idea that making Ellie stick close to the player
   means that any mistakes become the player's fault (so they won't blame her)
   seems obvious now, but wasn't before I watched it.
+
 * Finally finished up a blog post that's been halfway done for months.  Might
   post it on Monday.
+
 * Finished [LOL][] (though I had to tap out halfway through the final Forth
   chapter).  My dude certainly has a lot of fresh, hot, steaming takes.  I'd
   recommend the book, but only with a rabbit-sized grain of salt.
+
 * Watched the [ELS 2016][] talk "Type Checking on Heterogeneous Sequences in
   Common Lisp".  Seems a lot like the Clojure spec stuff that was released
   shortly after.
+
 * Started a blog post about Lisp and symbols which turned into a 5k word
   monster.  Gonna edit it down over the next few days and post it some time next
   week.
@@ -191,11 +220,14 @@
 * Watched the "Antichamber: An Overnight Success, Seven Years in the Making" GDC
   video.  Pretty inspiring, though I think he still probably underestimates how
   much luck matters.
+
 * Started reading [The Implementation of Prolog][].  Some good ideas and
   explanations in here, though the coding style is maddening.  I might even try
   a clean rewrite of [Bones][] a year or two down the line, using some of the
   concepts I'm seeing here.
+
 * Started doing the [Coding Math][] series again.  Finished episode 28.
+
 * Started back into the [Mazes book][] again.  Implemented Wilson's Algorithm in
   my little [demo][Mazes].
 
@@ -203,15 +235,18 @@
 
 * Printed off and read the manuals for two Lisp things I've been meaning to look
   into: [iterate][] and [parenscript][].
+
 * [parenscript][] seems like an ugly, practical compile-to-JS Lisp.  It's not
   pretty, but it has macros so I make it pretty if desired.  And at least it's
   not abandoned like [Wisp][].
+
 * [iterate][] is neat.  I can definitely see how it's cleaner than `loop`.
   There are some parts that seem tricky, but I have the feeling that they're
   edge cases that I only say because I read the manual cover-to-cover -- I doubt
   they'd appear much in real life.  I really should just bite the bullet and
   start using it -- there's no other way to learn -- but `loop` is like
   a comfortable rut I've found myself stuck in...
+
 * Did the first few lessons of [Learning WebGL][].  So far I understand
   everything (reading the [SuperBible][OpenGL SuperBible] helped a ton).  I'm
   beginning to think graphics programming *seems* really tough because it's
@@ -236,11 +271,14 @@
   countless stories and characters unfold, each one unique, and all of them
   created by the interaction of the player's imagination and the game's
   procedural mechanics.  I'd love to make a game like that.
+
 * Posted a [blog post](http://stevelosh.com/blog/2016/06/symbolic-computation/)
   about symbolic computation.
+
 * [Added support for dynamic calling](https://bitbucket.org/sjl/bones/commits/de6e248866f44f1b997669339a7cce227305419c)
   (Prolog's `call/1`) in [Bones][].  This lets you write `not/1` trivially,
   which we need for some GDL games.
+
 * Fixed a [nasty unrelated bug](https://bitbucket.org/sjl/bones/commits/05ce726f28744cb1c412e0f450fac3b978a6001d)
   in the `bind!` function of [Bones][]' VM.
 
@@ -251,6 +289,7 @@
   success.  Lots of good advice in it which seems obvious in retrospect, but
   I can see how in the heat of the moment it would be easy to lose sight of the
   bigger picture.
+
 * Did another episode of [Coding Math][].  This one is about writing a tweening
   library.  I ended up writing a ridiculous pair of [tweening
   macros](https://bitbucket.org/sjl/coding-math/src/783609c42ef0955634097267531ee06541275574/src/tween.lisp)
@@ -260,6 +299,7 @@
   table?  No problem!  `(tween-place! (car (slot-value (gethash 'foo table)
   'myslot)) 500 2.0 #'tween-linear)`  I shudder to think how you'd do this in
   a language without macros...
+
 * Added support for running [Bones][]' test suite on [CCL][].  Up til now I've
   just been using [SBCL][] for development, but I accidentally opened the wrong
   REPL today and didn't notice until I got a traceback for something stupid
@@ -268,12 +308,15 @@
   implementation with zero extra effort.  It's *so* nice to be working in
   a language with an *actual standard*.  I put the CCL testing into the
   precommit hook to help keep me honest going forward.
+
 * Ported two GDL games (`hanoi7_bugfix` and `aipsrovers01`) into Bones'
   `examples/` directory.  Now that I can write `not/1` it was trivial, and
   should be trivial for all GDL games.  It is *really* tedious to do by hand
   though, so I really want to write a GDL to Bones translator.  But to do that
   I think I need to sort out the `assert`/`retract` situation.
+
 * More [Learning WebGL][].
+
 * Added the Hunt and Kill algorithm to [Mazes][], and also started diving into
   [iterate][] by switching over a few of the `loop`s.  I'm never gonna learn if
   I don't just force myself to jump in the deep end.
@@ -326,9 +369,11 @@
 ### 2016-07-01
 
 * More [Learning WebGL][].
+
 * Another episode of [Coding Math][].  Penner's easing functions are beautiful
   little functions clouded by a haze of godawful programming style.  I tried to
   write my versions to be a bit more readable, at the expense of some speed.
+
 * Finished [The Road][].  Meh.
 
 ### 2016-07-02
@@ -486,14 +531,16 @@
   `timeit` macro but I would have liked to know how to introspect the
   expressions a macro gets and work with them.
 
-  One of the things that makes Lisp macros so nice is that the expressions
+    One of the things that makes Lisp macros so nice is that the expressions
   macros get (and the tools you use to work on them) are the same kinds of
   things you use everywhere *else* in the language (lists, symbols, etc).  This
   makes it really frictionless to switch back and forth.  If your macros are
   getting some special `AST_Node` type that you need to learn to work with it
   feels a lot more like work.
+
 * Poked around in `#lisp` and `#sbcl` to clear up some performance-related
   questions I had about Lisp arrays.  I have exciting new ideas for [Bones][].
+
 * Added anonymous variables and the `*_void` instructions to [Bones][].  This
   was more difficult than I anticipated, but part of it was a bunch of
   refactoring that had to happen along the way.
@@ -502,17 +549,19 @@
 
 * Did the "Intro to Fractals" episode of [Coding Math][].  Fun stuff.  Need to
   play around with animating them like he did at the very end.
+
 * More [Learning WebGL][].
+
 * Spent most of the day implementing the "logic stack" assertion/retraction
   I [rambled about](https://gist.github.com/sjl/1f4bb73967663af0f9276b491af84140)
   a while back.
 
-  It works, and it looks pretty good in action!  It also cut the time in my
+    It works, and it looks pretty good in action!  It also cut the time in my
   little benchmark almost in half (because we only need to compile the state
   code once instead of like 3+ times at each node), and it's MUCH nicer to read
   rule definitions now.
 
-  I'm thinking that programatically parsing/running GDL games is actually
+    I'm thinking that programatically parsing/running GDL games is actually
   feasible now, so I think that'll be my next step.  Once I can run arbitrary
   GDL games without having to translate the logic by hand I'll have a LOT more
   nice test cases.
@@ -521,9 +570,11 @@
 
 * Cleaned up the UI of [Bones][] a bit.  The new function/macro pairs are a lot
   cleaner to read and work with.
+
 * Got a couple of books out of the RU library before it closes for a few weeks
   in the summer.  Started going through [Algorithms and Networking for Computer
   Games][ancg] and made a little [sandbox][] repo to play around in.
+
 * Hacked together a quick [proof of concept][hype] GDL player that can read and
   search arbitrary GDL games.  It's so nice to see things finally starting to
   come together!
@@ -535,9 +586,11 @@
 ### 2016-07-08
 
 * More [Coding Math][].
+
 * After rereading the section of the [WAM book][] on anonymous variables
   I realized I could clean things up a lot in [Bones][].  I *knew* it had to be
   easier than I was making it.
+
 * More [Mazes][].
 
 ### 2016-07-09
@@ -548,16 +601,22 @@
   Gregory Heisler's [50 Portraits][heisler] -- you can learn a lot from
   listening to someone experienced talk about what goes through their mind as
   they create something.
+
 * Finished the [Learning WebGL][] series.  I'd definitely recommend it.  It's
   a really good introduction to OpenGL if you just want to learn how the damn
   graphics card works without fucking around with the nightmarish C/C++
   build/ecosystem.  Just open a browser and start hitting OpenGL.
+
 * Started the [WebGL Fundamentals][] series.  I want to get a second look at
   this stuff before I dive in and try to poke at it with Lisp.
+
 * Started screwing around with [parenscript][] in my little [sandbox][].
+
 * Poked a bit more at the [ANCG book][ancg].  Gonna try to take this one in
   bite-sized pieces.
+
 * More [Coding Math][].
+
 * Poked around at some basic GGP games, which revealed some bugs and memory
   problems in [Bones][], so I fixed them.
 
@@ -566,14 +625,18 @@
 * Watched the "Learning Through Failure - Portico" GDC talk.  Short but good.
   I think the best idea in is was "players only learn through failure when they
   *understand* what went wrong".
+
 * Brain dumped some stuff about [Bones][] below.
+
 * Removed the stupid garbage `set-*` opcodes from Bones and consolidated them
   into the `unify-*` opcodes like God intended.  Proceeded to rename those
   stupid `unify-*` opcodes to `subterm-*` so mortals can understand what the
   fuck is going on.
+
 * Poked a bit and pushing the constant optimization down into the compilation
   phase, but ran into a bit of a wall so I threw away the diff.  Might take
   another stab at it later once I let it roll around in my head a bit.
+
 * Mostly refactored the Bones code store to be a `simple-array`, after profiling
   indicates that most of the runtime is spent in data vector refs.
 
@@ -716,12 +779,15 @@
 
 * Finished up the [Bones][] code store refactor and a couple of other minor
   things.
+
 * Switched over the Bones main store to be a `simple-array` too.  Another
   performance increase.  I've switched to a new game for benchmarking because
   the previous one was starting to finish too fast for me to be confident in
   getting sane results.  I think that's a good sign.
+
 * Puttered around with a bunch of other little optimizations.  Not *super*
   productive, but I did learn a lot along the way, so I think it was worth it.
+
 * Today's commits took the runtime for the `aipsrovers01` game from about 47
   seconds down to 19 seconds.  Not too bad!
 
@@ -729,29 +795,36 @@
 
 * Watched the "Interpreting Feedback & Maintaining Your Vision" GDC talk.
   I like the idea of not backing down and changing to try to give users exactly
-  what they want all the time.  The last slide in the talk is the best -- a
-  game is a conduit to get some idea/experience from your head into the players'
-  heads.  Players give you feedback based on what happens in their heads, but
-  they don't know what's going on in yours, so you need to interpret their
-  feedback keeping that in mind.
+  what they want all the time.
+
+    The last slide in the talk is the best -- a game is a conduit to get some
+  idea/experience from your head into the players' heads.  Players give you
+  feedback based on what happens in their heads, but they don't know what's
+  going on in yours, so you need to interpret their feedback keeping that in
+  mind.
+
 * More [Coding Math][].
+
 * Implemented last call optimization in [Bones][].  Not much of a speed
   improvement for the particular GGP games I've been testing with, but it had to
   happen at some point, so we can write actual Prolog without blowing the stack.
+
 * Got a good start on splitting apart the Bones store like I wrote about above.
   It'll probably take another day or two two finish up.
 
 ### 2016-07-13
 
 * Spent an hour or so cleaning up my `.vimrc` and plugins, and moving fully to
-  [neovim][].  The catalyst was discovering [miniyank][].  I've been using
-  [YankRing][] for years, but it has always been *super* janky.  The way the
-  original YankRing works is to rebind all the keys that could possibly result
-  in yanking text, like `d`, `c`, `x`, and `y` to a function that handles them.
-  As you might imagine, this can cause problems -- especially with plugins like
-  [Paredit][] that need to manage those keys too.  Miniyank hooks into a new
-  neovim event, which lets it do what it needs to do without all the hacky
-  workarounds.
+  [neovim][].
+
+    The catalyst was discovering [miniyank][].  I've been using [YankRing][] for
+  years, but it has always been *super* janky.  The way the original YankRing
+  works is to rebind all the keys that could possibly result in yanking text,
+  like `d`, `c`, `x`, and `y` to a function that handles them.  As you might
+  imagine, this can cause problems -- especially with plugins like [Paredit][]
+  that need to manage those keys too.  Miniyank hooks into a new neovim event,
+  which lets it do what it needs to do without all the hacky workarounds.
+
 * Finished splitting apart the [Bones][] main WAM store into separate type/value
   arrays.
 
@@ -760,12 +833,16 @@
 * Watched the "Distributed High Performance Computing in Common Lisp" talk from
   [ELS 2016][] over breakfast.  It would be really fun to try to get a GGP
   player running on an 11k-core supercomputer...
+
 * Got [Bones][] to run on ECL.  I needed to hack [policy-cond][] to do it, but
   I talked to the ECL maintainer in IRC and hopefully I should be able to remove
   the hack in the future.  Performance is pretty bad, but at least it runs!
+
 * Tried out the [PAIP][] tries for [Hype][]'s transposition tables, but they
   don't seem to be much better than a vanilla CL hash table, at least in SBCL.
   Oh well.
+
 * Wrote a real nasty macro to improve the performance of Bones' hot loop.
+
 * Remapped a couple of more keys on my keyboard and I feel like I'm going
   insane, but I think it'll be worth it in the long run.