From 4cff2254725cdc13e662cc583dfe6f339f2a7c16 Mon Sep 17 00:00:00 2001 From: Steve Krouse Date: Tue, 12 Feb 2019 18:24:09 +0000 Subject: [PATCH] updated git log --- _data/files.csv | 1 + _data/git-log.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/_data/files.csv b/_data/files.csv index ab92126..59c8fe4 100644 --- a/_data/files.csv +++ b/_data/files.csv @@ -57,6 +57,7 @@ fileName ./notes/jonathan-edwards/07-10-18.md ./notes/jonathan-edwards/08-21-18.md ./notes/jonathan-edwards/10-09-18.md +./notes/jonathan-edwards/02-12-19.md ./notes/kill-html-css.md ./notes/michael-nielsen.md ./notes/aidan-cunniffe-call-11-29-17.md diff --git a/_data/git-log.json b/_data/git-log.json index 7c1957e..82e65f9 100644 --- a/_data/git-log.json +++ b/_data/git-log.json @@ -1 +1 @@ -[{"committer": {"date": 1549647684, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549647684, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["68fa3a56b9a7e356aada52a24a6f79c168207715"], "commit": "b1bb75754891251b2b24f2a83dda81d4d86f74a7", "message": "## Feb 8, 2019\n\n* TOC\n{: toc }\n\nWoke up late, and only got a few hours of work in today. My girlfriend and I have been very active - running all four days we've been in Rome so far!\n\nMy DCTP paper was accepted into Salon de Refuge, which is a mixed blessing. It's great that I know have to take the time to make the piece decent, but it's also not what I was hoping to spend my time on right now... I'll talk it over with JE and get his advice on decreasing the scope of the piece so I can get something good by the workshop on April 2nd. I'll also have to prepare a talk too!\n\n### Turbine buttons that make buttons visualized!\n\nMy favorite cyclic and higher-order FRP example now has a very fun visual to go along with it:\n\n\n\n### Tufte-style polish\n\nGlen was nice enough to read my last entry and make a very kind and helpful comment:\n\n

"These diagrams were initially disappointing." There is some visual design work you can do to make them clearer. First by organizing things spatially along a grid, and then by using colors and line/font weights to create layers a la Tufte: pic.twitter.com/ShIvO55I3s

— Glen Chiacchieri (@Glench) February 7, 2019
\n\n\nThis is a really great point. My diagrams thus far have been created about as fast as possible while trying to get 80% of the details right. They are basically pencil and paper sketches, but done on the computer.\n\nWhile part of me thinks it'd be fun to try and get these sketches pixel perfect, I worry that is a longer task, and I'd be better served right now inspecting the Hareactive/Turbine stream data structures to get a better sense of what I'll be able glean from them to then visualize. Then once I have a better idea of *what's possible*, I may come back and try and make these pictures clearer and more accurate.", "changes": []}, {"committer": {"date": 1549647676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549647676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["9cdd8f2bccfe8f430715dd218a3af21fdbc0f6f3"], "commit": "68fa3a56b9a7e356aada52a24a6f79c168207715", "message": "# Please enter the commit message for your changes. Lines starting\n# with '#' will be kept; you may remove them yourself if you want to.\n# An empty message aborts the commit.\n# On branch master\n# Your branch is up-to-date with 'origin/master'.\n#", "changes": []}, {"committer": {"date": 1549560322, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["eac79ff566a882b6bbf3fac92d38cf0c191f98aa"], "commit": "9cdd8f2bccfe8f430715dd218a3af21fdbc0f6f3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5f6a6c47dbc68038902000b76344698dd3d623f", "parents": ["14de86204f31a74b997cb1003f7d0f27355581ac"], "commit": "eac79ff566a882b6bbf3fac92d38cf0c191f98aa", "message": "## Feb 7, 2019\n\n* TOC\n{: toc }\n\n### Last week till now 02/07/19\n\nI spent a bit more time Thursday last week visualizing single Hareactive events and behaviors. I spoke with JE and he thought I was roughly on the right track. I came up with a simple pan-and-zooming interface and had this wacky idea that we could simply shrink a large object so you'd have to zoom way in to see the values. But then I got bogged down in SVG text layout algorithms and gave up. I felt like I was losing the forest for the trees.\n\nFriday was devoted to researching mbeddr for Dark, which was fun. I watched a bunch of their videos, got it installed, messed around, and, even read a few papers they published. I then finally printed out and read most of Cognitive Dimensions of Notation, which I realized was an instant classic, and I then spent an hour trying to compile a list of \"classics.\"\n\nOn Saturday, I recorded a very long in-person conversation with rntz, which was fun but also exhausting due to the length. It was a fun, math-heavy conversation. I recorded it on my new H4N mic where each of us was speaking into one of the stereo mics, which I think came out OK.\n\nOn Monday, my girlfriend and I flew to Rome for more sunshine in our lives, so I didn't get any work done.\n\nTuesday morning was working on mbeddr for Dark. (I have been scheduling these Dark presentations every 3 weeks or so to give me more time for other work. The next two will be Coda and Retool. Maybe I'll be in SF in March to give one of these in person!)\n\nYesterday and today were mostly research and I got a decent bit done, mostly in pencil and paper and Figma...\n\n### Turbine Viz Sketches\n\nAfter getting lost in the weeds with text layout last week, I realized that I'd be better served prototyping in diagrams first rather than code, so I tried my hand at visualizing the first few 7GUIs tasks.\n\n\n\nI should probably put `{ ... }` or `DomEvent { ... }` as the values in the first line of the counter but I guess I forgot. Besides that it seems to make OK sense. It's a bit weird that the `7` is at the bottom but it appears next to the count in the diagram, but that could be solved in a few different ways, for example putting the `7` where it belongs and sending an arrow up to it.\n\n\n\nThe temp converter has a nice parallel structure, but then there's that awkward 3rd-and-4th switch over on each side. One possible way to simplify this is by only computing C (by converting F to C, combining, and stepping) and then mapping over that Behavior to get back to F. But it's really half a dozen of one or six of the other...\n\nI experimented at the bottoms with heights as a function of magnitude, which I think came out nicely. The loops at the bottom make reasonable sense. The main thing I dislike about this example is that `newValue` at the top and `setValue` at the bottom feel very imperitive, breaking the nice denotations, but I guess that's kind of unavoidable given the way the HTML DOM works...\n\nFor the temp converter, I also tried an [alternative with timelines that all line up that didn't quite come together](https://user-images.githubusercontent.com/2288939/52426228-dcbd5980-2afd-11e9-9e0e-e600fcca4cf5.png).\n\n\n\nThe flight booker was a fun. Here I experimented with a few different ways to display Behaviors. All the way to the right, I have a Behavior that's always true and it's simply a line with a T over it. Then down at the bottom-left corner, I have a Behavior that's switches between T/F a few times, with hard lines between switches, and soft dotted-lines between where computations occurred but returned the same value as before. In the actual prototype you could imagine hovering over that place to see the computation that occurred there. (However, as I reflect on it now, this diagram might reflect the implementation detail that these behaviors are push-based too strongly...) One interesting note: I realized while making this diagram that the `keepWhen` function is a better use that what I actually had in the code (`filterApply`).\n\nI don't mind that the GUI elements are spread out haphazardly on the canvas here, as long as elsewhere I can see them in the order that they appear on the page. Another possible interface is to not have them rendered in the SVG at all, but when you hover over them, it'll light up in the respective GUI, much like the HTML devtools inspector.\n\nThis is also the first time I experimented with putting a lot of code (for the lift in the bottom-left) on the screen. It doesn't quite make sense in context (I just copied and pasted), but it's a reasonable placeholder. In the first version of the prototype, this will not be possible, because we won't have access to the source code.\n\nThe loopy bits for the background colors of the textboxes is pretty straightforward. I like how that came out much, much more than with the temp converter, because setting the background color to a Behavior feels more semantic.\n\n\n\nIt was fun to work with time and higher-order flows. I simplified this diagram by assuming access to a \"seconds since the app started\" stream that you see in the top-right and bottom-left. Like the last example, I put some \"filler code\" for the `snapshotWith` that won't be possible in the prototype.\n\nThe higher order stream came out well. I think it's important to keep them lined up the way I did for clarity. I don't know if it's obvious that the third stream is always `5.7`. Maybe I should put the dotted line markers at `5.7` throughout and put the `5.7` at the end as well? The dotted markers are an interesting trick, but there's also the step-function approach. And here's another idea: number lines with firm line markers usually represent continuous numbers, but that's how I've been representing Events. Maybe I should represent events as circles with no line (or a really stylized / faded line) and leave the timeline to Behaviors...\n\n#### Deep diagrams\n\nThese diagrams were initially disappointing. Even when I look at them, they are immediately intimidating, even off-putting. They don't yield to insights in 3 seconds, like many other visual aids do.\n\nHowever, upon reflection, I thought about how many of Tufte's diagrams take many minutes of study to fully grasp, and then even more time to mine for interesting insights. So while these diagrams might take 30 seconds or 5 minutes to comprehend, that's an order of magnitude better than an hour or two to understand the code. And they will likely be helped along by *liveness* when they are connected to GUIs that can be interacted with, turning the crank on these diagrams.\n\n### Next steps 02/07/19\n\nI'm going to finish preparing for my mbeddr presentation for Dark in 3 hours tonight. Tomorrow and Monday I will try to continue pushing this work forward for my meeting with JE on Monday, maybe switching to coding some of this up... I'd like to do a visualization of my buttons that create buttons example before that.\n\nAs far as next steps on coding, I'd like to go high level and see what I can inspect/crawl out of Turbine stream and component data structures to turn into the diagrams above. Then I'll combine the low-level work from last week with this high-level work to have beautiful diagrams! (I also need to do a bunch of refactoring with last week's code. It was getting a bit annoying working with SVG in the way I was. I am wondering if I should build an abstraction over SVG that converts it to a normal X-Y plane...)\n\nI think Tuesday next week would be a good time to finally publish the Tudor Girba podcast, and finish editing the JE podcast and send it off for transcription.\n\nWednesday could be a good time for some FRC work. Thurs and Friday I'll plan on getting back to working on the research.", "changes": []}, {"committer": {"date": 1549560246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5f6a6c47dbc68038902000b76344698dd3d623f", "parents": ["6458a7aee50d1669a86d3d3935ce65f20ddb3407"], "commit": "14de86204f31a74b997cb1003f7d0f27355581ac", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56460783ee4364d32f248796563bd863797b51b3", "parents": ["abe728c2cb5df12865c6b83521b0eabd668537e8"], "commit": "6458a7aee50d1669a86d3d3935ce65f20ddb3407", "message": "removed forestry", "changes": [[0, 26, ".forestry/settings.yml"]]}, {"committer": {"date": 1549103580, "timezone": "+0000", "name": "Forestry.io", "email": "support@forestry.io"}, "author": {"date": 1549103580, "timezone": "+0000", "name": "steveykrouse@gmail.com", "email": "steveykrouse@gmail.com"}, "tree": "8acce7078e4ad3ba6a7272ad6c5fb8eb780c34a6", "parents": ["301633e5428e2c79ae658ff28ee3279a0f59c845"], "commit": "abe728c2cb5df12865c6b83521b0eabd668537e8", "message": "Update from Forestry.io - Updated Forestry configuration", "changes": [[26, 0, ".forestry/settings.yml"]]}, {"committer": {"date": 1548874832, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56460783ee4364d32f248796563bd863797b51b3", "parents": ["c1a33d455973146bcfe97247a223e89d47d7d686"], "commit": "301633e5428e2c79ae658ff28ee3279a0f59c845", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bc15aed83118813ddd9c078ce37f30c183fd92", "parents": ["90e04f0a74b4c27e4eae156610877e3bf87012b6"], "commit": "c1a33d455973146bcfe97247a223e89d47d7d686", "message": "## Jan 30, 2019\n\n* TOC\n{: toc }\n\nAaaaaaaand, I'm back! It's been too long since I've done research and a proper log entry. Instead of struggling through getting set up with working on Hareactive/Turbine, I thought it better to wait until I spoke with Simon, and use the waiting time for other work, such as freelancing and the podcast. I've also been obsessed with the Sword of Truth series on audio-book, so that's to blame as well.\n\n### Podcast update 1/30/19\n\nAs far as the podcast goes, it's been productive:\n\n* The Tudor Girba episode is ready to go, including the transcript, but I just need to write a summary blurb at the top and then publish and submit to HN.\n\n* The JE episode is edited. It just needs an intro and outtro, transcript and blurb.\n\n* I recorded an conversation with Cyrus Omar\n\n* I am speaking with with Michael Arntzenius *in person* on Saturday!\n\nThis will leave me with plenty of podcast editing and publishing to do in February in Rome. (My girlfriend and I are headed to Rome for ~3 weeks for more sunshine in our lives. And Italian food, of course.)\n\n### Balance update 1/30/19\n\nI've been doing a better job of balance than in the past. My only remaining problem is that it's a bit difficult to decide when to do what, and when to switch. I've noticed that I get most of my research work done in the days before meeting with JE, and most of my work for Dark done in the days before meeting with Dark. I don't often meet with FRC, so I sometimes forget about them, but I have two active projects for them that are waiting for whenever I have the time...\n\nI'm glad I did the research on Modern Smalltalks for Dark. It was fustrating at the start, but well worth it at the end. Dreading doing it for mbeddr and TLA+ but I know I'll be thankful afterwards. The plan is to spend all of Friday on Dark stuff.\n\nYesterday, today, and tomorrow are research so as to have impressive things to show and tell to JE tomorrow.\n\nNext week will be Dark, FRC, and some research, some podcast.\n\n### Call with Simon Friis Vindum\n\nI finally got Simon on the phone! It's been a number of weeks of waiting for him to finish up with his exams. He was wonderful. We chatted for ~2 hours, first about a few issues I opened on his projects, then about the devtool, and finally I shared my screen and he help get me set up in the right code environment and got started adding SVG elements to the Turbine library.\n\nOne issue he mentioned with the devtools is that intermediate stream variable names don't get captured in any data structure, so people will have to figure those out from context.\n\nWe also talked a bit about how push-based might has a memory leak problem because parents have references to children, that otherwise would be garbage collected.\n\n### Turbine devtool\n\nFinally the rubber is hitting the road! It's awesome to see this coming together in a real live project at long last. Simon and I came up with a plan for moving forward:\n\n1. Add SVG elements to Turbine. Done, [pending fixes and merge](https://github.com/funkia/turbine/pull/102).\n2. Create a visualization for a simple number stream. [Done this morning.](https://github.com/stevekrouse/turbine/blob/f05807fcbf4abcb3eeb31234eb723c5ee9f90fca/examples/simple/index.ts)\n3. Visualize push-based stream (label between intervals)\n4. Visualize pull-based stream (constantly sample and maybe graph)\n5. Visualize non-numbers\n6. Visualize data structure dependencies, starting with map...\n7. Visualize higher order...\n8. Visualize cyclical...\n9. Visualize Turbine/HTML-based streams\n10. Use the devtool to finish 7GUIs (add types?), and submit a pull req for that.\n 11. Write a paper/presentation/video about the devtool\n\nI realized this morning about all the important little things I need to figure out now, such as dynamically displaying all the stream data. I settled on the fastest solution I could think of: simple arrow based pan and zoom. I wonder if I should go extreme with it and just make the font of large objects really tiny and you can zoom in to see their properties. That'd work as a placeholder.\n\nI feel myself already wishing to \"eject\" from a devtool, so I can do cool things, such as when you hit space, it pops open a box where you can search for operations like in Facebook origami. But instead you can type, with autocomplete, various flow names and it'll suggest flow combinators based on their types, and supply default arguments, and show the output flow as you scroll through the options. Or maybe the options are the output flow!\n\n### Ink and Switch\n\nLast week I met with the Ink and Switch team. It seems like it's former Heroku people doing research towards a company a la Dark. It was really fun! I just got off a call with pvh from their team. He showed me their [farm](https://github.com/inkandswitch/farm) software. So cool! He was repeating back my whole mission back at me! He calls it \"Personal Software\". They are using it at their company - right now it's a dashboard of a todolist, personal updates, a chat thing. It's living! Amazing! It makes me think that the day will come soon when personal software is upon us. I can already imagine moving the Future of Coding Slack to a platform like this... Very cool!\n\nTheir underlying technology is similar to dat/beaker/scuttlebutt/ifps. pvh had to explain how the internet works to me, Nat, UPD, WebRTC, etc, for me to follow. It's build on top of a JSON CRDT so that it causes the least conflicts. It's a peer to peer data model, and", "changes": []}, {"committer": {"date": 1548874801, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bc15aed83118813ddd9c078ce37f30c183fd92", "parents": ["b3310adf87f91e8c8fcf7db24b3a41cb94610af7"], "commit": "90e04f0a74b4c27e4eae156610877e3bf87012b6", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39586fa6cf6396a6b3fedc39258b2ca59dbfb2ec", "parents": ["d09d2ce909eb25ee69c56398801dc12a0bca1615"], "commit": "b3310adf87f91e8c8fcf7db24b3a41cb94610af7", "message": "added ink and switch presentation", "changes": [[135, 0, "drafts/ink-and-switch.md"]]}, {"committer": {"date": 1548346761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e40cc14003504858b840ff3b294134e2f6d7cd19", "parents": ["ba6788ae41fa6175d242eafbb54f7074a863f76a"], "commit": "b2af49f21e7ebb3dfde6ee788cee48100162caf4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "280fb39627116ceaaba8a790622c7f1f831dd702", "parents": ["ea2492bd4675170734dbe8b3a9d035855255ad07"], "commit": "ba6788ae41fa6175d242eafbb54f7074a863f76a", "message": "add dctp draft 1 feedback, and responses", "changes": [[287, 3, "drafts/dctp.md"]]}, {"committer": {"date": 1548091944, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c575b3d1bcaf2cbc8e63ef1a0502c776897d6e3", "parents": ["d05647ff413501ec9753ad66f8e9ad1fc90b06d3"], "commit": "ea2492bd4675170734dbe8b3a9d035855255ad07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28c097b789ce6e50c1d5702965014864aec1af8b", "parents": ["3186ade2e6d2394feffdd8612744dea00606d689"], "commit": "d05647ff413501ec9753ad66f8e9ad1fc90b06d3", "message": "tidy up dctp draft 1", "changes": [[67, 63, "drafts/dctp.md"]]}, {"committer": {"date": 1548082492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "188ee9e5d4a2a6173ebc73f4f41221332ca7d22a", "parents": ["7a2c1d89fd48080b4771a72b6c2aefbe8ca824d5"], "commit": "3186ade2e6d2394feffdd8612744dea00606d689", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4bc6ec345a74c87ddcc6cd49ec72ada97dc9499", "parents": ["29c5f0081b7f18e8e4df9474a2b1bfd533202e38"], "commit": "7a2c1d89fd48080b4771a72b6c2aefbe8ca824d5", "message": "dctp draft 1 mostly done", "changes": [[266, 84, "drafts/dctp.md"]]}, {"committer": {"date": 1548007049, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0cd383e7f817d53ea8c7a245e22a3d4d8e4dfe22", "parents": ["1e2d49025fba1d51f937ffc24fb5ea89022880ef"], "commit": "29c5f0081b7f18e8e4df9474a2b1bfd533202e38", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e486532efb791dd403c836339946e85c45185285", "parents": ["aa9c9d058e5601b0caaa816659bf733de9e424fa"], "commit": "1e2d49025fba1d51f937ffc24fb5ea89022880ef", "message": "continue dctp", "changes": [[97, 40, "drafts/dctp.md"]]}, {"committer": {"date": 1547986003, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e5cb339b02daff6b5cc65fdd3bdfe97fee8af33a", "parents": ["1d5ee28823790ada777f261e664eaec342195d38"], "commit": "aa9c9d058e5601b0caaa816659bf733de9e424fa", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e515c62dfa1d2e2726515d9f6531aa83f586cac3", "parents": ["7cab41a300a52f0f2382777039a28a7c04160506"], "commit": "1d5ee28823790ada777f261e664eaec342195d38", "message": "reorganize dctp second section", "changes": [[72, 45, "drafts/dctp.md"]]}, {"committer": {"date": 1547983229, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "995984f46c159ab152817b2ff8ea25c5c31cd96c", "parents": ["0baa8e6c1095da563f00e3548b516081fb881377"], "commit": "7cab41a300a52f0f2382777039a28a7c04160506", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f614179f3deda83015e5f9781ebcf73bf8e1f922", "parents": ["0e1d9953b393470cea02c68d26cd20be132da46e"], "commit": "0baa8e6c1095da563f00e3548b516081fb881377", "message": "add animation examples to dctp essay", "changes": [[123, 65, "drafts/dctp.md"]]}, {"committer": {"date": 1547846698, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2b29822f4690b4b0e20dd63b9f2916e40d4eb1f0", "parents": ["8148b45d47a103c00fdb047a90e5bb335e63e9a4"], "commit": "0e1d9953b393470cea02c68d26cd20be132da46e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2c020b9f17a938444cdfb80c58754c5a77aa17a", "parents": ["3dbe157b1988a661cbea7a3cfaabf99dc581defb"], "commit": "8148b45d47a103c00fdb047a90e5bb335e63e9a4", "message": "fix broken link", "changes": [[1, 1, "index.md"]]}, {"committer": {"date": 1547846608, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3ac41974f4e547c05b78501790ce589e1e9ec01", "parents": ["bc2cbd0ebb0b107bc5616d73cc2a0c7bde5983ab"], "commit": "3dbe157b1988a661cbea7a3cfaabf99dc581defb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3629878a0b7c4a1d9f3c3f6e28214b6282df1ee3", "parents": ["67333ec4f6d348ad4266a27e0515f85305f7644f"], "commit": "bc2cbd0ebb0b107bc5616d73cc2a0c7bde5983ab", "message": "/about spelling fixes", "changes": [[4, 3, "about.md"]]}, {"committer": {"date": 1547840484, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "540e2248150f97eb1d0ef057cc389f94808f9e82", "parents": ["1ee958eae3567287cff6fe737fe5aaef5c00dd14"], "commit": "67333ec4f6d348ad4266a27e0515f85305f7644f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6fd230d2742df8398c46cd0f1add854b2a81fc4b", "parents": ["1542462504a1dbde027ebaf2fef69d65c1494e1a"], "commit": "1ee958eae3567287cff6fe737fe5aaef5c00dd14", "message": "continued dctp", "changes": [[76, 52, "drafts/dctp.md"]]}, {"committer": {"date": 1547812506, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b1af9579db79d718b700a6bae1c0a3462bbe8c8", "parents": ["25eb6a88d20c4492691a64044d092aa84a7cd8ae"], "commit": "1542462504a1dbde027ebaf2fef69d65c1494e1a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "33b5023018ffb8b90e717d7c09d1dcb3fc1c1049", "parents": ["8b299cdb0b8f901f5ee3c19fdc9322a745abd4dc"], "commit": "25eb6a88d20c4492691a64044d092aa84a7cd8ae", "message": "continuing writing, conal elliott war cry", "changes": [[75, 43, "drafts/dctp.md"]]}, {"committer": {"date": 1547769738, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d90cf4cf08c905886cad7ae5e6d4c69751367d88", "parents": ["6cd6999c1f09f9c1d03b60359d50c3371cc677e9"], "commit": "8b299cdb0b8f901f5ee3c19fdc9322a745abd4dc", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b2ef3c2f31f65bf1b8081d980a9a1879c92b720", "parents": ["b5cc2696c94538352f9be682b0e5f71438a67356"], "commit": "6cd6999c1f09f9c1d03b60359d50c3371cc677e9", "message": "late night dctp writings", "changes": [[78, 15, "drafts/dctp.md"]]}, {"committer": {"date": 1547748525, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dde5aa52076dc6715ad3c2da9a63f661b726b43c", "parents": ["0006abbfb8ebfc1c65afb031b9e90116cc3f6ec8"], "commit": "b5cc2696c94538352f9be682b0e5f71438a67356", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a16bf5f8a385b6fdb6e7547ce7aaee510fb29fe5", "parents": ["1b695f789113c3b12c7b08f5f98a9f81851582a0"], "commit": "0006abbfb8ebfc1c65afb031b9e90116cc3f6ec8", "message": "continued explaination of dctp", "changes": [[156, 0, "drafts/dctp.md"]]}, {"committer": {"date": 1547728877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c823883cb4b280378d0c9067b2142742a27aaea8", "parents": ["fe62ecec6b2e308f0e88fc63cc8f2bd34fc209d6"], "commit": "1b695f789113c3b12c7b08f5f98a9f81851582a0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8a83c02ebe84532d11fc4c3e0c5fcdc8243de6b4", "parents": ["b617b42f211ace33695e73360b88ef28897240a7"], "commit": "fe62ecec6b2e308f0e88fc63cc8f2bd34fc209d6", "message": "## Jan 17, 2019\n\nSome quick updates:\n\n* Realizing I got the year wrong on the title of my last entry. It's 2019, not 2018!\n* Feeling great! At coffee shop with my girlfriend today for a change of scenery.\n* Just got back from a 4 day trip to Rome. Great vacation. Got some sun, had great tomato sauce and pasta, relaxed, and Tweeted. We may go back for a longer trip (a couple of weeks) to live and work there for the sun and food while London is gloomy.\n* London is sunny today so I will run this afternoon.\n* I had a wonderful call with Conal Elliott on Monday. Along with JE's prodding, I decided to try my hand at an essay explaining DCTP and Conal's vision, and maybe submit to Salon de Refuge.\n* Great call with JE yesterday. Going to continue with hareactive, turbine, etc, but mostly waiting to talk to Simon Friis Vindum and team after their exams are finished on the 25th of Jan. Making a hareactive canvas library sounds fun. JE also suggested finishing 7GUIs and the devtools together which is a great idea.\n* Spent a good amount of last week researching Smalltalk for Dark, which I hope to publish at some point. Will need to figure out with them when the next session will be. Maybe in two weeks? Maybe TLA+?\n* Excited to host an online FoC meetup Sunday night GMT. Not sure how to structure it... will figure something out...\n* For more of what I'm working on, [head over to the Github board](https://github.com/stevekrouse/futureofcoding.org/projects/3)", "changes": []}, {"committer": {"date": 1547727615, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8a83c02ebe84532d11fc4c3e0c5fcdc8243de6b4", "parents": ["814215947849c5c69ce8bd569cdb74bd1ceb03e0"], "commit": "b617b42f211ace33695e73360b88ef28897240a7", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f396ab64567adf1db57db36e82fb7b3de920c9d", "parents": ["ddb16ba9da195fdcf3c7e744caa53c7314776843"], "commit": "814215947849c5c69ce8bd569cdb74bd1ceb03e0", "message": "add JE notes 01-16-19", "changes": [[41, 0, "notes/jonathan-edwards/01-16-19.md"]]}, {"committer": {"date": 1547726108, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34fd8d96422dc433495cfc78dea088df918a5c49", "parents": ["ebf4ae0f8da6c7d44479b87cdfd2b94141d1add4"], "commit": "ddb16ba9da195fdcf3c7e744caa53c7314776843", "message": "updated git log", "changes": [[2, 1, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0d31a98e3c8e38d72578adee1f0a7441c421ae6a", "parents": ["d2208b712756a521a524fe74e3f752e24ff0d94c"], "commit": "ebf4ae0f8da6c7d44479b87cdfd2b94141d1add4", "message": "added conal call notes", "changes": [[0, 54, "notes/conal-elliott.md"], [103, 0, "notes/conal-elliott/01-14-18.md"], [43, 0, "notes/conal-elliott/index.md"]]}, {"committer": {"date": 1546797917, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac7409136405672ea8ba76faf5b4c412ca64df46", "parents": ["a70f1200a2de4e2ad9a08a3e0c48847f4b63da73"], "commit": "d2208b712756a521a524fe74e3f752e24ff0d94c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "18fed776e09f7be757ac6f02366df465b0635515", "parents": ["8322e1879b04e1f382648a56021bdb6f3627f832"], "commit": "a70f1200a2de4e2ad9a08a3e0c48847f4b63da73", "message": "## Organizing my work on 1/6/18\n\nHaven't journaled in a while. Moved a lot of this thought to Github Issues which I don't love to be honest but it works ok.\n\nFeeling like progress is slow. Resisting working on podcasts. Feels like busy work. But I should probably knock it out.\n\nAlso resisting working on Dark but it'd probably make me feel great to install one of those and spend 4 hours on it. Maybe tomorrow.\n\nOk let's say today is publish Vlad.\n\nTomorrow is 4 hours Dark.\n\nMaybe Tuesday I can do Turbine 7GUIs. Maybe just keep with Dark if I have momentum.\n\nWednesday another 4 hours Dark or 7GUIs or prep JE.\n\nThursday is prep for JE. 4 hours should do it. Maybe find time to start earlier in the week too.\n\nLet's say no Tudor podcast work this week. No rush there...maybe let's hold off scheduling next podcasts (Cyrus and Hillel) until Feb and am through publishing Tudor and JE. I've got enough on my plate with Dark back in the mix and Tudor's 3 hour podcast. And all the P4 work! (And the community! And FRC!)\n\nOk so this week, the priorities are:\n\n* Prep JE\n* Dark\n* Vlad publish\n\nLet's say no FRC, Turbine/P4, community, Tudor (but that just means only if I really want to). Ok now my week feels reasonable. For Dark, I'll try with whatever feels easiest and keep switching until I'm mostly done with one. Maybe Pharo and GT because Tudor may help me?", "changes": []}, {"committer": {"date": 1546797288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "18fed776e09f7be757ac6f02366df465b0635515", "parents": ["cafb1fe0d2d1a401c6c4a8f27cba1d92f2846ebe"], "commit": "8322e1879b04e1f382648a56021bdb6f3627f832", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28ff6a760c21501f0befddf644cfa44fe0068371", "parents": ["24348a82df0beb97de8e62a7f870eb515ea2bfd9"], "commit": "cafb1fe0d2d1a401c6c4a8f27cba1d92f2846ebe", "message": "added episode 35, vlad magdalin", "changes": [[583, 0, "episodes/035.md"], [2, 0, "index.md"]]}, {"committer": {"date": 1546792240, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d94f24c24275d616bdb35e2f054990f98fbd7123", "parents": ["8b419779ac1f557cd1c0398cf43f660697021f09"], "commit": "24348a82df0beb97de8e62a7f870eb515ea2bfd9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e2f9899cab28cd5c639da90d852b8a00478c142", "parents": ["c7ac6c48ca5d8667618d8904f13bc27418cd8aad"], "commit": "8b419779ac1f557cd1c0398cf43f660697021f09", "message": "reogranizd front page text", "changes": [[3, 11, "index.md"]]}, {"committer": {"date": 1545740034, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e889c24910af303d6f40f73cae41fb22d73aaf3", "parents": ["43a27eda1b15344e11308259deb3a5ac122bb5ad"], "commit": "c7ac6c48ca5d8667618d8904f13bc27418cd8aad", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "980cc87c304cf1038b5cf22c8c40405a203c2e0c", "parents": ["dc10b83e968e7f4b76679f299af0f2ca3e06b683"], "commit": "43a27eda1b15344e11308259deb3a5ac122bb5ad", "message": "added pictures, spellcheck, removed sections, clean up intro", "changes": [[34, 45, "about.md"]]}, {"committer": {"date": 1545739559, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3139f687230ebbb992a63aad16020abc7d911fb2", "parents": ["dfac3fa0ae7c920604a48e9d12cbbe4ffa356d83"], "commit": "dc10b83e968e7f4b76679f299af0f2ca3e06b683", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f9fe11f8a41290dae5aa74d69a86b4f4f4b00d7", "parents": ["df4c41cc00588fb0180f0411a9bef3ed4ce5dcbb"], "commit": "dfac3fa0ae7c920604a48e9d12cbbe4ffa356d83", "message": "oops wrong subdirectory", "changes": [[0, 26, "assets/style.scss"]]}, {"committer": {"date": 1545739497, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dea6a24d8cec1d7c902536c3e5164d397a1a732a", "parents": ["20b08ab036ad3494729a1935b988af359f00202c"], "commit": "df4c41cc00588fb0180f0411a9bef3ed4ce5dcbb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9a0fae1cbc9ac23f7a7aa228191f47b75bbba13", "parents": ["56a849f47f7f2a0f3b0de686535b03cb2075923b"], "commit": "20b08ab036ad3494729a1935b988af359f00202c", "message": "re-added assets after removing lfs", "changes": [[26, 0, "assets/style.scss"]]}, {"committer": {"date": 1545398289, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3771b6e6ee9e48c5ab664c21ff529f04b6904ac9", "parents": ["6e442d0498a17b6ad1a2c25d1ba180c437f27c0e"], "commit": "8f7d8538a518203e8ff1001fbd3c9efa56c147b8", "message": "updated git log", "changes": [[42, 36, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1892d76a32883f6011b0b8f253cbd316300161e", "parents": ["ffe61fa8cd0a22044629bdf38abff06aa2f8e946"], "commit": "6e442d0498a17b6ad1a2c25d1ba180c437f27c0e", "message": "force git to notice _data/files.csv changes", "changes": [[7, 6, "README.md"]]}, {"committer": {"date": 1545397879, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "328514c1379543593923c52fc4480d07dc383815", "parents": ["2370dda3b89da5e682e992d447687c394165015c"], "commit": "ffe61fa8cd0a22044629bdf38abff06aa2f8e946", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "92f38fce02a431ca3106c1ff80054a5dd3521144", "parents": ["8d1e638838e962514e296a0504c4e1121e25dfdd"], "commit": "2370dda3b89da5e682e992d447687c394165015c", "message": "migrated all html to md", "changes": [[11, 23, "404.md"], [7, 0, "episodes/001.md"], [76, 0, "episodes/002.md"], [13, 0, "episodes/003.md"], [9, 0, "episodes/004.md"], [12, 0, "episodes/005.md"], [12, 0, "episodes/006.md"], [9, 0, "episodes/007.md"], [9, 0, "episodes/008.md"], [28, 0, "episodes/009.md"], [14, 0, "episodes/010.md"], [14, 0, "episodes/011.md"], [9, 0, "episodes/012.md"], [21, 0, "episodes/013.md"], [65, 0, "episodes/014.md"], [13, 0, "episodes/015.md"], [110, 0, "episodes/016.md"], [9, 0, "episodes/017.md"], [144, 0, "episodes/018.md"], [41, 0, "episodes/019.md"], [33, 0, "episodes/020.md"], [27, 0, "episodes/021.md"], [37, 0, "episodes/022.md"], [35, 0, "episodes/023.md"], [27, 0, "episodes/024.md"], [44, 0, "episodes/025.md"], [45, 0, "episodes/026.md"], [44, 0, "episodes/027.md"], [44, 0, "episodes/028.md"], [23, 0, "episodes/029.md"], [1168, 0, "episodes/030.md"], [481, 0, "episodes/031.md"], [1074, 0, "episodes/032.md"], [684, 0, "episodes/033.md"], [897, 0, "episodes/034.md"], [0, 84, "episodes/1-welcome.html"], [0, 89, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [0, 89, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [0, 86, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [0, 102, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [0, 153, "episodes/14-research-recap-seven-master-planning.html"], [0, 91, "episodes/15-raising-genius-with-scott-mueller.html"], [0, 185, "episodes/16-research-recap-eight-life-and-work-planning.html"], [0, 87, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [0, 194, "episodes/18-research-recap-nine.html"], [0, 133, "episodes/19-building-universe-joe-cohen.html"], [0, 154, "episodes/2-research-recap.html"], [0, 33, "episodes/20.md"], [0, 27, "episodes/21.md"], [0, 37, "episodes/22.md"], [0, 35, "episodes/23.md"], [0, 27, "episodes/24.md"], [0, 44, "episodes/25.md"], [0, 45, "episodes/26.md"], [0, 44, "episodes/27.md"], [0, 44, "episodes/28.md"], [0, 23, "episodes/29.md"], [0, 91, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [0, 1168, "episodes/30.md"], [0, 481, "episodes/31.md"], [0, 1074, "episodes/32.md"], [0, 684, "episodes/33.md"], [0, 897, "episodes/34.md"], [0, 86, "episodes/4-research-recap-two.html"], [0, 87, "episodes/5-samantha-john.html"], [0, 87, "episodes/6-research-recap-three.html"], [0, 86, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [0, 86, "episodes/8-research-recap-four.html"], [0, 106, "episodes/9-research-recap-five.html"], [0, 295, "essays/eve/index.html"], [227, 0, "essays/eve/index.md"], [34, 35, "index.md"], [0, 9, "reflections/14.html"], [5, 0, "reflections/14.md"], [0, 9, "slack-readme.html"], [5, 0, "slack-readme.md"], [0, 9, "slack.html"], [5, 0, "slack.md"]]}, {"committer": {"date": 1545393138, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e10a6dffa45059d70ca6ffe9d7e112857525610", "parents": ["323d192795be87df70847f6f4b0d17548659af17"], "commit": "8d1e638838e962514e296a0504c4e1121e25dfdd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c91a225dbb0636ac0a57f9e151653a1888581afb", "parents": ["7778ef349ea6a1f80b1cb3cc1c35b98d1b5148c9"], "commit": "323d192795be87df70847f6f4b0d17548659af17", "message": "refactored analytics.html into _layouts/default.html", "changes": [[0, 9, "_includes/analytics.html"], [9, 0, "_layouts/default.html"], [1, 1, "about.md"], [1, 1, "drafts/app-idea.md"], [1, 1, "drafts/boundaries.md"], [1, 1, "drafts/casual.md"], [1, 1, "drafts/invented-or-discovered.md"], [1, 1, "drafts/learnable-programming.md"], [1, 1, "drafts/power.md"], [1, 1, "drafts/regex-for-humans.md"], [1, 1, "drafts/visual.md"], [1, 1, "essays/sissies.md"], [1, 1, "ideas.md"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/aidan-cunniffe-call-11-29-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/bret-victor/SimulationAsAPracticalTool.md"], [1, 1, "notes/bret-victor/dynamicland.md"], [1, 1, "notes/bret-victor/explorable-explanations.md"], [1, 1, "notes/bret-victor/index.md"], [1, 1, "notes/bret-victor/kill-math.md"], [1, 1, "notes/bret-victor/learnable-programming.md"], [1, 1, "notes/bret-victor/magic-ink.md"], [1, 1, "notes/bret-victor/questions.md"], [1, 1, "notes/bret-victor/substroke.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [1, 1, "notes/dynamicland-zine.md"], [1, 1, "notes/future-authoring.md"], [1, 1, "notes/glen-chiacchieri-12-29-17.md"], [1, 1, "notes/halfway-there-cis-240.md"], [1, 1, "notes/historical-accidents.md"], [1, 1, "notes/jaime-brandon-call-12-12-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/jcr-licklider.md"], [1, 1, "notes/jonathan-edwards/06-14-18.md"], [1, 1, "notes/jonathan-edwards/07-10-18.md"], [1, 1, "notes/jonathan-edwards/08-21-18.md"], [1, 1, "notes/jonathan-edwards/09-26-18.md"], [1, 1, "notes/jonathan-edwards/10-09-18.md"], [0, 1, "notes/jonathan-edwards/11-09-18.md"], [0, 1, "notes/jonathan-edwards/11-21-18.md"], [0, 1, "notes/jonathan-edwards/12-12-18.md"], [1, 1, "notes/joy-js-review.md"], [1, 1, "notes/kevin-lynagh.md"], [1, 1, "notes/live/2018.md"], [1, 1, "notes/michael-nielsen.md"], [1, 1, "notes/nicky-case-call-11-1-17.md"], [1, 1, "notes/no-silver-bullet.md"], [1, 1, "notes/samuel-loncar.md"], [1, 1, "papers/comprehensible-frp/feedback.md"], [1, 1, "papers/comprehensible-frp/index.md"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "reflections/10.md"], [1, 1, "reflections/11.md"], [1, 1, "reflections/12.md"], [1, 1, "reflections/13.md"]]}, {"committer": {"date": 1545336859, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "72ac5baef9662f70e4ae5b8335c7c05b5418e428", "parents": ["2b2e57371b57e88ac9513498226f8511cb942f1d"], "commit": "7778ef349ea6a1f80b1cb3cc1c35b98d1b5148c9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8ec4bce187bac47cfc152e906604bb5e3413100a", "parents": ["1a7af56218460c9e64d13388742012b8960f4602"], "commit": "2b2e57371b57e88ac9513498226f8511cb942f1d", "message": "added navbar, github button, patreon button to all md pages", "changes": [[12, 20, "_layouts/default.html"], [26, 0, "assets/css/style.scss"], [0, 206, "index.html"], [149, 0, "index.md"]]}, {"committer": {"date": 1545329462, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "882fdbc7858484242f880472aedc1b45118d9a27", "parents": ["28e9bc5d78e9139a18358534342be8690f75c079"], "commit": "1a7af56218460c9e64d13388742012b8960f4602", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dbc95b1ac269999c182b55aed2fa6b8e0cb6c9e2", "parents": ["b74910f2fb9487f1422cc3e7bac7b17090ed263e"], "commit": "28e9bc5d78e9139a18358534342be8690f75c079", "message": "add link to edit pages in footer on github", "changes": [[36, 0, "_layouts/default.html"]]}, {"committer": {"date": 1545307782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c695d9aebb2f38a62d95d16acc927e5fec5300b4", "parents": ["d7b952864a5c397147abb83c2daff665703393df"], "commit": "c97f5b8362b01f863a78ff4afbe91fedb5959982", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6372b59e0a9342a8146681e7337285fb8e763922", "parents": ["f8d19075bfa49a149de73e12ee5efce619c800c9"], "commit": "d7b952864a5c397147abb83c2daff665703393df", "message": "added slack readme", "changes": [[9, 0, "slack-readme.html"]]}, {"committer": {"date": 1544716709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cefd21dce0e5a94e8543d7b924df28d3eafce881", "parents": ["cb81542718dca32c888701afa6acc496fa2e8e9d"], "commit": "f8d19075bfa49a149de73e12ee5efce619c800c9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "692e1617750cb34a9c868d35ee79ed093a66c245", "parents": ["7c608c2fe0e774c31045910130542555939c9649"], "commit": "cb81542718dca32c888701afa6acc496fa2e8e9d", "message": "## Dec 13, 2018\n\n* TOC\n{: toc }\n\nFeeling a bit overwhelmed, rushed, frenetic today for some reason. Deep breaths, Steve, deep breaths.\n\n### One prototype at a time\n\n[History and future of p4](https://github.com/stevekrouse/futureofcoding.org/issues/86)\n\nNow that I'm settled on Turbine (modulus the 15 issues I created, and many more to come), I'm beginning to think about what I hope to build with Turbine: p4.\n\nI was getting a bit overwhelmed with all my ideas for p4. I made a big list and asked JE for help figuring out what's essential and what I can do without for this prototype:\n\n* Immutable editing\n\t* content hash like Unison and IPFS\n\t* do we hash definitions or expressions?\n\t* do we do work to cannonicalize hashes? (such as commutativity of addition)\n\t* no delete\n\t* no edit, only create new thing\n\t* refacorting\n* Detachable GUI Literals\n\t* Everywhere you have a GUI, you need to be able to put an expression: detachable GUI literals!\n\t* GUI for every system f language primitive\n\t* Bootstrap visual editor?!\n\t* Are all apps just expressions visualized?\n\t* Expression-based operating system instead of file-based or app-based\n* Other ideas\n\t* A la carte language semantics, like haskell langauge extensions\n\t* Always running, like spreadsheet or google doc, no run or pause, only open or close\n\t* infinite canvas (can I still use Turbine...?)\n\t* exploring which concepts we can move from the language compiler to the editor (no free variables, type inference is just local if not just a type “suggestion”)\n\nHe helped me realize that most of these ideas represent *entirely different prototypes*! I can't just combine them all like this. Prototypes explore one new idea at a time. So what's the idea for p4?\n\nJE hit the nail on the head: p4 is an IDE for Turbine. This is particularly funny because p1 was an IDE for JQuery and p2 was an IDE for VueJS! Those both used blockly but that wouldn't help with p4 because blocks solve a different problem than what p4 is trying to solve: improve the PX of DCTP, most directly by _showing live streams as the user interacts with the output_.\n\nOn my run a few hours ago, I was thinking about what my data model would be for p4. Then it hit me: Turbine is the data model. (Along with hareactive, io, and jabz.) Those stream data structures *are the thing the p4 user is creating*.\n\nI *could* start p4 by building a projectional editor for Turbine/hareactive/io/jabz and all of JS. But can I get away with less?\n\nOne way to get away with less is to build a UI for the turbine/hareactive/io/jabz functions/combinators and then have users type regular text js where we need functional expressions (similar to aprt.us and pane).\n\nThe other way to do *even less* is to allow text to be the interaction model for Turbine and simply start with a devtools that shows the streams. If my main conviction is that seeing the streams will help, let's *just* do that. What's great about this idea is that a stream visualizer is a pre-req for any other p4 end-product anyways, so I might as well just publish it as it's own thing, and then move on afterwards.\n\nIn summary, p4 is now the Turbine devtools project, in the spirit of the CycleJS devtools.\n\nWait... because this feels reachable (I can imagine myself achieving it in early 2019 and it existing), it makes me wonder more about next steps...\n\n* Do I try to take up the Turbine mantel and get others to use it?\n* Do I go towards the structured editor idea?\n* Do I experiment with one of the other ideas listed above?\n\nAll valid answers. The thing is, whatever I do, I need a UI library I love, and that library needs a stream visualizer, so build that first. And then we'll talk.\n\n### Donation platform\n\nBefore starting the Patreon, I wanted to look around for alternatives. I found Stripe, Paypal and Donationbox allow for subscriptions with much less fees. However, I asked a few people with Patreons and a few of the people who said they'd be my supporters, and both said that I should stick with Patreon, mostly for the branding. It explains itself and gives off the right vibes, which is hard to do with a do-it-your-self platform. Patreon it is!\n\n### Next week\n\n* p4 & Turbine\n* Patreon launch\n* couple hours of freelance\n\nMaybe something like:\n\n* Monday - Patreon\n* Tuesday - Patreon\n* Wednesday - p4 & Turbine\n* Thursday - p4 & Turbine\n* Friday - freelance", "changes": [[1, 1, "_data/git-log.json"], [151, 0, "notes/jonathan-edwards/12-12-18.md"]]}, {"committer": {"date": 1544573499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "137932667a3bbac6ba0f37a21b636a83e6505c9b", "parents": ["732b8609e3452148751c58040dab24fc472a0133"], "commit": "7c608c2fe0e774c31045910130542555939c9649", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e1ec597f526b0a6c552b2d896c1d990a9ad486be", "parents": ["58691892084d488eccbc8aba5d27f2b86b10b3a2"], "commit": "732b8609e3452148751c58040dab24fc472a0133", "message": "## Dec 11, 2018\n\n* TOC\n{: toc }\n\n### Last week\n\nLast week was productive in terms of publishing two podcast and recording a third. I also worked a bit freelance. I only need to do a dozen hours freelance at this point in conjunction with the money from the podcast sponsorship to make ends meet. Eventually with more sponsorship and Patreon, maybe I can slowly lower the number of hours freelance towards zero.\n\n### Github Issues / Projects\n\nI also started my Dec Regroup Projects, including moving my todos to Github Issues / Github Projects. I now have three Github projects:\n\n* [To Do](https://github.com/stevekrouse/futureofcoding.org/projects/3) is my pipeline of tasks\n* [To Research](https://github.com/stevekrouse/futureofcoding.org/projects/2) is my pipeline of links and topics\n* [My podcast pipeline](https://github.com/stevekrouse/futureofcoding.org/projects/1) is where I organize my guests\n\nI'm a bit worried about how this new system will interact with this log. While it felt silly to copy and paste todo lists over and over in this log, it's also a bummer doing things in my new system doesn't show up in here. This log is supposed to be a log of all my work on this project, so I'd love to pull in Github issues activity somehow... Now that I say it \"out loud\" I wonder if I can do that automatically... For now though, I may just copy and paste some things from Github issues here when relevant.\n\n### Jekyll refactoring\n\nI get really fustrated with Jekyll sometimes. My main issues were:\n\n* I was having trouble with importing page snipets\n* I wanted to be able to preview my site locally with all the CSS. (Github Pages had some setting I didn't have set.)\n\nAfter many annoying hours I was able to make both of these things work. My main next big issue is a navbar on all my pages of:\n\n* Home\n* About\n* Podcast\n* Log\n* Community\n* Contact\n* Fork\n\nOf course new styles and logo would be nice as well, and maybe a commenting system, but it's not top priority.\n\nAnd to be honest, starting the Patreon is bigger priority than all of these but I'm a bit scared so I keep procrastinating...\n\n### Turbine 7GUIs!!\n\nAfter doing 3 hours of emails yesterday (I was sick towards the end of last week, so I took Thursday off and didn't do my emails Friday, sat, or Sun), I spent a few hours messing with Turbine, and then ~7 hours today in it. So fun! Despite being rough around the edges, it feels like there's really something wonderful here - I'm very impressed with the design. Polishing this is a million times better than having to start from scratch.\n\nTo take it for a spin, I've been doing the 7GUIs tasks in Turbine, and whenever I get stuck or find a bug, I write it down, and sometimes open an issue. I'm tracking all the progress in [this Github issue](https://github.com/stevekrouse/futureofcoding.org/issues/96), which I will copy and paste here:\n\n#### Issue opened\n\n* [typescript issue on starter kit](https://github.com/funkia/turbine-starter/issues/2)\n* [combining model and view](https://github.com/funkia/turbine/issues/81)\n* [devtools](https://github.com/funkia/turbine/issues/82)\n* [a single page documentation cheatsheet](https://github.com/funkia/turbine/issues/84)\n* [Text input bug](https://github.com/funkia/turbine/issues/86)\n* [versioned documentation and various styles of `output`](https://github.com/funkia/turbine/issues/85)\n\n#### To open issue\n\n##### Issues using `lift`:\n\n1. Do I import it from `jabz` and do `lift(f, b1, b2)`? Or I use it as `b1.lift(f, b2)`?\n2. It doesn't work in the view with error `Attempt to sample non-replaced placeholder`\n3. Doesn't seem to work for 4 behaviors but the documentation says \"You can also combine in this fashion any number of behaviors\"\n\n##### Constructors need to be documented across all projects\n\n* I need the constant behaviors, streams, `IO.of` to be easier to get at than going to the tests to find them.\n\n##### filterApply bug\n\n`filterApply(Behavior.of(undefined).map(() => () => true), stream).log()` upon an event from `stream` errors: `predicate.at(...) is not a function`. If you replaced `undefined` with `1`, the error goes away.\n\n##### * `time.log()` does nothing\n\nIt should at least error if it's not going to show you anything, but I might prefer it to show me all the milliseconds.\n\n##### when doesn't log correctly\n\n`when(Behavior.of(true)).log()` errors `Cannot read property 'Symbol(Symbol.iterator)' of undefined` but `yield sample(when(Behavior.of(true)).map(x => console.log(x)))` outputs an `OfFuture` value\n\n#### To look into more\n\n* What is the `moment` function (described [here](https://github.com/funkia/turbine/issues/51#issuecomment-306897232))?\n\n* Use [`loop`](https://github.com/funkia/turbine#loop) successfully without `this.source.addListener is not a function` error\n\n* What's the difference between `go` and `fgo`? Also, the placement of arguments here is confusing:\n\n```javascript\nconst tempView = ({ c, f }) =>\n go(function*() {\n```\n\n* When you can do infix dot vs prefix\n\n* I want a dummy model so I can see the view while I mess with stuff and not get `The generator function never yielded a monad and no monad was specified.` without\n\n```javascript\nconst tempModel = fgo(function* ({ }) {\n yield Now.of(10)\n});\n```\n\n* Need to call the function created with `performStream` or `performStreamLatest` (I don't get the difference): `performStreamLatest(book_.map(() => withEffects(() => alert('hi'))()))`\n\n* It's also quite annoying to keep the output and inputs in sync always.\n\n### Priorities 12/12/18 - 12/21/18\n\n* freelance 10 hours\n* Patreon 20 hours\n* Turbine 20 hours\n * finish 7GUIs\n * work on various issues\n\n### Push to vacation or 2019\n\n* publish Tudor and Vlad episodes\n* p4 stuff\n* website design and improvements", "changes": []}, {"committer": {"date": 1544130077, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e1ec597f526b0a6c552b2d896c1d990a9ad486be", "parents": ["8dfd194237e2b0a2be248458af7cc2f240c2d1a1"], "commit": "58691892084d488eccbc8aba5d27f2b86b10b3a2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b1b50ffc268308cb65e341c46327c22ab37d1c9b", "parents": ["a47b20448ce1ea826ce94980958e8d5cd9fe3fe5"], "commit": "8dfd194237e2b0a2be248458af7cc2f240c2d1a1", "message": "replicate css locally", "changes": [[19, 1, "_config.yml"]]}, {"committer": {"date": 1544130062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "68fea216356c31550450d242697cd9017c54dd5b", "parents": ["b7112ed1b8d93be33274632144ca6b6ffad4ed59"], "commit": "a47b20448ce1ea826ce94980958e8d5cd9fe3fe5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "43ff3a2ef1b335531ae9c2e8c21baf045428c89d", "parents": ["5edb0c0bd9718ac1ed85edba0cb0631f72af0cfe"], "commit": "b7112ed1b8d93be33274632144ca6b6ffad4ed59", "message": "remove infinite loop", "changes": [[9, 1, "_includes/analytics.html"]]}, {"committer": {"date": 1544127681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c52c67af38c6291d32add8944f121bc347066c45", "parents": ["a60bdf6b5c41d29c624a5f0ae03a7d030bc2af86"], "commit": "5edb0c0bd9718ac1ed85edba0cb0631f72af0cfe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4620cf436c72473762976236feb4e10f388ce54e", "parents": ["2be3136cb36df23f2197d067fcb923169d3d87af"], "commit": "a60bdf6b5c41d29c624a5f0ae03a7d030bc2af86", "message": "refactor analytics to _includes", "changes": [[1, 0, "_includes/analytics.html"], [1, 11, "about.md"], [1, 11, "drafts/app-idea.md"], [1, 11, "drafts/boundaries.md"], [1, 11, "drafts/casual.md"], [1, 11, "drafts/invented-or-discovered.md"], [1, 11, "drafts/learnable-programming.md"], [1, 11, "drafts/power.md"], [1, 11, "drafts/regex-for-humans.md"], [1, 11, "drafts/visual.md"], [1, 11, "essays/sissies.md"], [1, 2, "ideas.md"], [1, 11, "notes/aaron-kent-call-9-15-17.md"], [1, 11, "notes/aidan-cunniffe-call-11-29-17.md"], [1, 11, "notes/andre-staltz-call-10-9-17.md"], [1, 11, "notes/andre-staltz-call-9-11-17.md"], [1, 11, "notes/bret-victor/SimulationAsAPracticalTool.md"], [1, 11, "notes/bret-victor/dynamicland.md"], [1, 11, "notes/bret-victor/explorable-explanations.md"], [1, 11, "notes/bret-victor/index.md"], [1, 11, "notes/bret-victor/kill-math.md"], [1, 11, "notes/bret-victor/learnable-programming.md"], [1, 11, "notes/bret-victor/magic-ink.md"], [1, 11, "notes/bret-victor/questions.md"], [1, 11, "notes/bret-victor/substroke.md"], [1, 11, "notes/dan-scanlon-call-9-5-17.md"], [1, 11, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [1, 11, "notes/dynamicland-zine.md"], [1, 11, "notes/future-authoring.md"], [1, 11, "notes/glen-chiacchieri-12-29-17.md"], [1, 11, "notes/halfway-there-cis-240.md"], [1, 11, "notes/historical-accidents.md"], [1, 11, "notes/jaime-brandon-call-12-12-17.md"], [1, 11, "notes/jaime-brandon-call-9-5-17.md"], [1, 11, "notes/jcr-licklider.md"], [1, 11, "notes/jonathan-edwards/06-14-18.md"], [1, 11, "notes/jonathan-edwards/07-10-18.md"], [1, 11, "notes/jonathan-edwards/08-21-18.md"], [1, 11, "notes/jonathan-edwards/09-26-18.md"], [1, 11, "notes/jonathan-edwards/10-09-18.md"], [1, 11, "notes/jonathan-edwards/11-09-18.md"], [1, 11, "notes/jonathan-edwards/11-21-18.md"], [1, 11, "notes/joy-js-review.md"], [1, 11, "notes/kevin-lynagh.md"], [1, 11, "notes/live/2018.md"], [1, 11, "notes/michael-nielsen.md"], [1, 11, "notes/nicky-case-call-11-1-17.md"], [1, 11, "notes/no-silver-bullet.md"], [1, 11, "notes/samuel-loncar.md"], [1, 11, "papers/comprehensible-frp/feedback.md"], [1, 11, "papers/comprehensible-frp/index.md"], [1, 11, "plan.md"], [1, 11, "principles.md"], [1, 11, "reflections/10.md"], [1, 11, "reflections/11.md"], [1, 11, "reflections/12.md"], [1, 11, "reflections/13.md"]]}, {"committer": {"date": 1544127559, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9fb4b2b120d753096ca6aa2825738f4c830cc2d", "parents": ["b443369e09913f7f6570c27334fb13e91c3d593f"], "commit": "2be3136cb36df23f2197d067fcb923169d3d87af", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "64d022a162359763cc7a51cb00bd0be80b6116eb", "parents": ["16ebfed4e1047c0d6a15947e409258d0843c2435"], "commit": "b443369e09913f7f6570c27334fb13e91c3d593f", "message": "removed unbreakable-links", "changes": [[1, 1, "404.md"], [1, 1, "README.md"], [0, 1, "about.md"], [1, 1, "drafts/app-idea.md"], [1, 1, "drafts/boundaries.md"], [1, 1, "drafts/casual.md"], [0, 1, "drafts/invented-or-discovered.md"], [1, 1, "drafts/learnable-programming.md"], [1, 1, "drafts/legal-code.md"], [1, 1, "drafts/power.md"], [1, 1, "drafts/regex-for-humans.md"], [1, 1, "drafts/visual.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [1, 1, "episodes/18-research-recap-nine.html"], [1, 1, "episodes/19-building-universe-joe-cohen.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/20.md"], [1, 1, "episodes/21.md"], [1, 1, "episodes/22.md"], [1, 1, "episodes/23.md"], [1, 1, "episodes/24.md"], [1, 1, "episodes/25.md"], [1, 1, "episodes/26.md"], [1, 1, "episodes/27.md"], [1, 1, "episodes/28.md"], [1, 1, "episodes/29.md"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/30.md"], [1, 1, "episodes/31.md"], [1, 1, "episodes/32.md"], [1, 1, "episodes/33.md"], [1, 1, "episodes/34.md"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "essays/sissies.md"], [0, 11, "ideas.md"], [1, 1, "index.html"], [0, 1, "journal.md"], [0, 1, "links.md"], [1, 1, "log.md"], [0, 1, "notes/aaron-kent-call-9-15-17.md"], [0, 1, "notes/aidan-cunniffe-call-11-29-17.md"], [0, 1, "notes/andre-staltz-call-10-9-17.md"], [0, 1, "notes/andre-staltz-call-9-11-17.md"], [0, 1, "notes/bret-victor/SimulationAsAPracticalTool.md"], [0, 1, "notes/bret-victor/dynamicland.md"], [0, 1, "notes/bret-victor/explorable-explanations.md"], [1, 1, "notes/bret-victor/index.md"], [0, 1, "notes/bret-victor/kill-math.md"], [1, 1, "notes/bret-victor/learnable-programming.md"], [0, 1, "notes/bret-victor/magic-ink.md"], [1, 1, "notes/bret-victor/questions.md"], [0, 1, "notes/bret-victor/substroke.md"], [1, 1, "notes/conal-elliott.md"], [0, 1, "notes/dan-scanlon-call-9-5-17.md"], [0, 1, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [0, 1, "notes/dynamicland-zine.md"], [0, 1, "notes/future-authoring.md"], [0, 1, "notes/glen-chiacchieri-12-29-17.md"], [1, 1, "notes/halfway-there-cis-240.md"], [1, 1, "notes/hilltop-lang.md"], [0, 1, "notes/historical-accidents.md"], [0, 1, "notes/jaime-brandon-call-12-12-17.md"], [0, 1, "notes/jaime-brandon-call-9-5-17.md"], [0, 1, "notes/jcr-licklider.md"], [0, 1, "notes/jonathan-edwards/06-14-18.md"], [0, 1, "notes/jonathan-edwards/07-10-18.md"], [0, 1, "notes/jonathan-edwards/08-21-18.md"], [0, 1, "notes/jonathan-edwards/09-26-18.md"], [0, 1, "notes/jonathan-edwards/10-09-18.md"], [0, 1, "notes/joy-js-review.md"], [0, 1, "notes/kevin-lynagh.md"], [1, 1, "notes/kill-html-css.md"], [1, 1, "notes/kill-primitives.md"], [0, 1, "notes/live/2018.md"], [0, 1, "notes/michael-nielsen.md"], [0, 1, "notes/nicky-case-call-11-1-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "notes/no-silver-bullet.md"], [0, 1, "notes/quotes.md"], [0, 1, "notes/samuel-loncar.md"], [1, 1, "notes/simon-friis-vindum.md"], [0, 1, "notes/stefan-lesser-12-13-17.md"], [0, 1, "papers/comprehensible-frp/feedback.md"], [0, 1, "papers/comprehensible-frp/index.md"], [0, 1, "plan.md"], [0, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"], [0, 1, "reflections/10.md"], [0, 1, "reflections/11.md"], [0, 1, "reflections/12.md"], [0, 1, "reflections/13.md"], [0, 43, "unbreakable-links/README.md"], [0, 186, "unbreakable-links/index.js"]]}, {"committer": {"date": 1544126259, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9efe849f2906e841306859068ab2f063b25f5aa7", "parents": ["6251dd3936c7e37f4eaf05f381dec71b38b32b97"], "commit": "16ebfed4e1047c0d6a15947e409258d0843c2435", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cfc205e9afd7c39458149a92c752ed589a8f4192", "parents": ["ac3968a768d457c34ced3234b5c1f71752925990"], "commit": "6251dd3936c7e37f4eaf05f381dec71b38b32b97", "message": "fix things for jekyll doctor", "changes": [[2, 1, "_config.yml"], [1, 1, "episodes/34.md"]]}, {"committer": {"date": 1544022205, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544022189, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "54b60b082dd447d9eeef50b4e8132984e17ae4ae", "parents": ["93028c9c45cbb73ac65d02b047dbc716acec4274"], "commit": "ac3968a768d457c34ced3234b5c1f71752925990", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544022205, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544022189, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "22aa0286e3cba1f30a4c792f859fabda879d9222", "parents": ["800707f73c87840384f2b9a1ff65bba4399bc144"], "commit": "93028c9c45cbb73ac65d02b047dbc716acec4274", "message": "added episode 34; katherine ye", "changes": [[1, 1, "episodes/33.md"], [897, 0, "episodes/34.md"], [2, 1, "index.html"]]}, {"committer": {"date": 1543867662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "584a58dcbb5ec4a7e325636cc2e7d10e8b14af0c", "parents": ["3fec824d6a70ba3ac0cca7f6dafb804dca11b867"], "commit": "00b5743987eb1fb411a56d2813bda342db678199", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1a860f4e7d216b0dacde48b54e47b8ebf1ea1e72", "parents": ["5f841a9e72a67ea1eb18712a35f6e3179b7c5918"], "commit": "3fec824d6a70ba3ac0cca7f6dafb804dca11b867", "message": "fix single l conal elliott typo", "changes": [[2, 1, "404.md"], [1, 1, "about.md"], [2, 2, "drafts/casual.md"], [6, 6, "episodes/33.md"], [1, 1, "journal.md"], [3, 3, "links.md"], [2, 2, "notes/bret-victor/learnable-programming.md"], [0, 54, "notes/conal-elliot.md"], [54, 0, "notes/conal-elliott.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "reflections/13.md"]]}, {"committer": {"date": 1543859116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "761b6681bd4515e4cf35d65bdd56fa825bf6b09c", "parents": ["91ca8d4875e5745f5f2826433e36bdc807170607"], "commit": "5f841a9e72a67ea1eb18712a35f6e3179b7c5918", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fc50959003ba0139494a244259844c3146a2c5cc", "parents": ["53f4eb1ffe778baf0fa7194b1dfcfefa15126f07"], "commit": "91ca8d4875e5745f5f2826433e36bdc807170607", "message": "udpate episode 33 transcript", "changes": [[308, 283, "episodes/33.md"]]}, {"committer": {"date": 1543854038, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4957cd18d734b2c9d39e37941e801ac234b8251d", "parents": ["28d4fb3ec1aae8cb94b0c3dbcc7fff450193a789"], "commit": "53f4eb1ffe778baf0fa7194b1dfcfefa15126f07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "521e7ee83f7e7fc51f6b7e9e6d2f3c68482597c2", "parents": ["dab6c9032a60683fe1d5771d85cf771f4e7cfd93"], "commit": "28d4fb3ec1aae8cb94b0c3dbcc7fff450193a789", "message": "added episode 33, reflection 14 /about", "changes": [[659, 0, "episodes/33.md"], [1, 0, "index.html"], [9, 0, "reflections/14.html"]]}, {"committer": {"date": 1543836949, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea48ddbb738c35206e89d4e110417e618fc0f570", "parents": ["d8a3c8e853d50a11c6c556a9934c4cfcea7c1aeb"], "commit": "dab6c9032a60683fe1d5771d85cf771f4e7cfd93", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0b42ade66c8e3286eb9b632f98771dfb5c308759", "parents": ["e1e24399f616a6ebc30a028b701cd335696f1360"], "commit": "d8a3c8e853d50a11c6c556a9934c4cfcea7c1aeb", "message": "## Dec 3 2018 Notes\n\n* TOC\n{: toc }\n\n### First two weeks Dec 2018\n\nThis week, the focus is on the podcast and my freelance work. I would like to publish my reflection 14 episode as well as edit Katherine's episode and prep for and record Vlad's episode. Let's say the podcast will be Mon, Tues and Weds this week and I'll do freelance Thursday and Friday.\n\nNext week I want to focus on research, playing with Turbine and other p4 thoughts...\n\n### Equality of code\n\nI asked Paul Chiusano about hashing code that's equivalent but syntactically different, such as 1+x and x+1, and apparently Unison \"doesn’t normalize commutative operations.\" Some relevant links he sent me are [Normalizing](https://en.m.wikipedia.org/wiki/Normalization_property_(abstract_rewriting)) and [Rice's Theorem](https://en.m.wikipedia.org/wiki/Rice%27s_theorem).\n\n### p4 thoughts 12/3/18\n\n#### Start with non UI motivating problems\n\nA way to simplify this problem is to build an FP playground to solve normal FP problems with cyclical streams first and work our way up to UI:\n\n* Such as the problems that [Pane](http://joshuahhh.com/projects/pane/) solves\n* Here's an idea for a developer tool extension slice-and-dice playground thing. Here's a common pattern I found useful: \tquerySelect some nodes and map/filter over them a bunch, such as:\n\n```javascript\n[].slice.call(editorElement.querySelectorAll('*'))\n\n .map(e => [e, e.innerText])\n\n .map(([e, text]) => [e, text.match(/^(#+)\\s.*$/)])\n\n .filter(([e, m]) => m)\n\n .map(([e, m]) => [e, m[1]])\n\n .forEach(([e,m]) => {\n\n e.style.fontSize = (50 - (5*m.length)) || 3;\n\n e.style.marginBottom = 2 + \"px\";\n\n e.style.marginTop = 2 + \"px\";\n })\n```\n\nThe issue with this approach is that we may create a FP playground that won't scale up to cyclical UI problems...\n\n#### Fluidity is not the initial focus\n\nI realize that part of why structured editors haven't been able to compete with text-based coding is:\n\n1. Computers come with a hardware input device especially designed for text input: the keyboard!\n2. We all have spent dozens of hours learning to use this keyboard for text input!\n\nIt's simply not a fair comparison to expect a new interface to be as fluid as text from Day 1. Of course fluidity is important and of course making it work with people's existing hardware and skills will help with adoption, but they aren't the first things to worry about. Maybe the ultimate interface will require new input hardware and/or a lot of practice to get the hang of. Hopefully we can get away with the keyboard and mouse and make the onboarding simple, but we don't want to pigeonhole ourselves over it.\n\nThe initial focus should be on the comprehensibility of the code and the liveness of the experience. Liveness means that an incremental action should result in an incremental result. This is possible without fluidity, which means that \"taking the incremental action\" may not be ergonomic for some reason.\n\n(However, I will note that fluidity is SUPER important to me. I would love to build an interface that's only optionally dependent on the mouse.)\n\n#### All Literals are GUIs...\n\nIf we throw out text-based coding and agree to a structured editor of some kind, you may realize that we can automatically represent colors as a color picker instead of (or in addition to) a hex value or rgb value. Cyrus Omar has work where he embed's a regex playground right into the IDE. (As Tudor Girba says, whenever you leave the IDE, the \"I\" has failed.)\n\nIf you follow this line of thinking, you realize that ALL literals are GUIs! Numbers can be scrubbable or many other interactive representations, booleans are a checkbox thing... We can even nest GUIs! You could have a string as a widget which is basically a text box but you can add other arbitrary expressions inside - no more escaping characters necessary! Lists can be a specialized GUI where you can add and remove expressions or do comprehensions.\n\nWe can continue this idea for all kinds of expressions: if-expressions, pattern-matching, lambdas, function application... Can we build nestable custom GUIs for every part of System F/Haskell?! I think so!\n\nThe key here is the nestability. Normally a color picker or other GUI is a top-level thing. But why? I don't see any reason why it can't be as expression-like as coding.\n\nWhen you define a function it will default to a basic representation but it should allow you to *add a more specific GUI to represent your function!*\n\nThese thoughts were inspired mostly by Tudor Girba, but also are related to [Niko Autio's Microeditor ideas](https://futureofcoding.org/notes/niko-autio-microeditor.html).\n\nI am curious how to combine this idea with the ideas of Hazel and Josh's principle of radical visibility of preview evaluation with test data. Same with the hashing stuff. There are so many cool PX ideas to combine together!\n\nDrawing this out will be interesting. And if I can show how we can do any pattern from Haskell, completeness is guaranteed!\n\nIn terms of implantation, not sure if HTML or canvas is the way to go. Would be fun to play with Turbine on this project...", "changes": []}, {"committer": {"date": 1543248438, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7490b1ed3c1ae081df8b4c51ea2aa366091543b7", "parents": ["273255117a506906cfd881f7a10f9fdd84630197"], "commit": "02e1e774e04695aacb476f1fa29c0ef5fb615630", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a16f01ae8dc28d089f7e23a2d8051393b7550a0", "parents": ["c848c3d111893971f22972d8007f7de0229599e9"], "commit": "273255117a506906cfd881f7a10f9fdd84630197", "message": "## A productive few days in late Nov 2018\n\n* TOC\n{: toc }\n\n### Fun Calls\n\n#### JE\n\nWent really well. [Notes here.](/notes/jonathan-edwards/11-21-18) The end-result was that I should either find or build my own Reflex alternative in JS. It's easier to start from a compile-target, a DSL, than from a visual editor. Once I have this built, I can use it to think about visual abstractions to compile to it. And I can use the framework to build those abstractions in a bootstrappy way.\n\n#### Philip Tchernavskij\n\nPhD student in Paris also interested in the malleability of software, but coming from the HCI and political perspective. His work sounds a lot like Dynamicland.\n\n#### Kartik Agaram\n\nAnother person interested in the same goal / themes of software malleability. It's really fun to chat with people like Kartik and Philip where we agree so much on goals but are coming from different places and see entirely different implementations of these ideas. I got Kartik, to agree to [record the conversation as an experiment](https://www.youtube.com/watch?v=DuMdDXCMDk0). I think it went well. Apparently 18 people watched it. Maybe if we continue chatting from where we left off, I can grab the audio from the conversations and turn it into a podcast. Or maybe we can do a podcast from scratch at some point.\n\n### Blinknote\n\n

💭Yesterday I wished for a dream note-taking chrome extension

🎁@dankantor supplied with me the initial code

👨‍💻I hacked for ~2 hours last night

✨I have a working Chrome extension! https://t.co/51Res4TnlI

— Steve Krouse 🇬🇧 (@stevekrouse) November 23, 2018
\n\n\nThis was a really fun project, and it really energized me. In my head, hacking this together was like running up a hill and the prideful energy I felt afterwards was like running down the hill and I still feel like I'm running downhill three days later! I am actually writing this journal entry in Blinknote. It's so amazing to use tools that you make yourself. So much pride. It definitely encourages working and working with more of a smile. It also allows you to feel less boxed in - you can change things if they don't work for you.\n\nIt makes me even more excited for my vision of programming as allowing others to make their own tools, collaboratively. Working on ones own tools makes me think of whittling a spatula from a branch with a knife. However I don't think that's the right metaphor for my system because I want to highlight the collaborative nature more.\n\n### FoC London dinner\n\nThis was a lot more work than I expected, finding a restaurant, getting people to RSVP, setting up payments, emailing people, dealing with dietary restrictions, confirming with restaurant, people's plans change, etc. One way to keep myself sane during this process is not to judge myself on the outcome but on the process, and even by just the fact that I'm doing it, trying things. My refrain is \"full credit for showing up\". I hope it goes well Wednesday!\n\n### Kits vs apps\n\nThis is a common theme I've seen a lot ever since my visit to Dynamicland. I saw it again in Pharo and wrote up [a draft / ouline of an essay about it](https://futureofcoding.org/drafts/boundaries).\n\nI've never liked the kit idea. In another incarnation, it's \"everything is a document\". I think the STEPS project had this. It's always felt messy, ugly, and lame. On one level this is just a surface thing: overlapping windows, lots of gray top navs of windows, nested menus and right-click menus.\n\nHowever on another level it feels like the messiness is a bit real. For one, it's usual a dynamicly typed system. For another, it always feels less polished and usable than apps. As in, I can't imagine my mom using it.\n\n### I'm over the web\n\nThis is a big deal. For a while I've thought that HTML, CSS, and JS would be ok, as a compile target, but I no longer think so, particularly after Tudor showed me Pharo. He made the point that having everything in \"a single render tree\" is really key, and I don't feel I quite understand why but this does feel critical to me intuitively.\n\nDifferences include:\n\n* single render tree, mentioned above\n* different security model that will allow more things because it will expect users to understand more of the code they are \"importing\"\n* caching that will make more sense, better offline & online story, maybe some peer-to-peer in there too\n* different computational model from JS and HTML DOM\n\nThus my goal-system-I-have-no-name-for (wow, I really should come up with a working title for this... potluck? d1 for dream 1? I guess logichub could be d2?) will have to be built on a new system. Initially this system can be embedded within the web as a web app, but eventually I can imagine it having its own standalone \"browser\" that would work on various operating systems. Or I guess it could turn into an operating system itself!\n\nWhy start as a web app? I have to pick some platform and web is what I know best and I hate installing things and I love my chromebook so web seems like a solid pick.\n\nThe key question for all smalltalk-like systems: how do you prevent it from becoming its own universe? For example, Pharo or Lively Web.\n\nMy answer is that you start with single-user apps, starting with daily productivity tools, like notes, email, calendar, task management, and then once you have a critical mass, people will slowly spawn more ambitious projects that the community will use, and it will grow from there.\n\nI guess if it works within a webapp, people can use it on the web, so that's a pretty good story, as compared to Pharo which requires a download. So maybe the answer is that if we build it on the web to start with, it could seem like a website to most people, kinda like Lively Web or Tiddlywiki.\n\n### Fluidity vs structure\n\nI need to spend some time defining fluidity and structure, but this graph feels provocative:\n\n![](https://i.imgur.com/iVXH72a.jpg)\n\nI think fluidity has to do with live-ness, feedback loop speed, incremental actions causing incremental result, etc. And structure has to do with possible / impossible states, types, schemas. I'm stuck on where AST editors fit in this layout: they enable greater feedback loop speed knowledge of errors and prevent error states, yet they are not as fluid as using text but text doesn't give you as much info as fast.\n\nOne interesting note is that Airtable is particularly noteworth as having high structure and also high fluidity.\n\n### Conal -> Turbine\n\nJust as I decided (in the last meeting with JE) to build or find a JS lib for DCTP, I popped onto Twitter to find this:\n\n

Stumbled across another *spot-on* post about FRP by @paldepind: "Let's reinvent FRP" https://t.co/Ga7ywHnySI .

— Conal Elliott (@conal) November 23, 2018
\n\n\nWhich led me back to [Turbine](https://github.com/funkia/turbine), which I had found a few months back and mistakenly disregarded as the \"wrong kind of FRP\" as mistakenly interpreted their Now monad thing. I'm now quite excited about this library! I already sent two long emails to the creator, Simon, and hope he responds soon. Here's what I wrote I'd like to collaborate on:\n\n> 1. Documentation. For example, I had to figure out how `list` worked from reading the source and puzzling together a few examples without explanations. I'd love to help document every function in the API. (Additionally, I believe the code itself could use some comment documentation but that's more up to you.)\n>\n> 2. Understanding the types of the streams I'm working with would help a lot. Maybe getting TypeScript set up ([as I failed to do in the issue above](https://github.com/funkia/turbine-starter/issues/2)) would help here.\n>\n> 3. Being able to \"inspect\" streams better as a debugging and understanding tool. [CycleJS has this wonderful devtool](https://github.com/cyclejs/cyclejs/tree/master/devtool) and there are [a number of other really cool stream visualization tools](https://github.com/stevekrouse/futureofcoding.org/blob/95bad27a4d9e2bbd0b186b7683eecf97197fe068/drafts/frp.md#71-visualizations) we can draw on for inspiration. At the very least, a better `console.log` story would go a long way. It was really tough to figure out what was going on with my streams.\n>\n> 4. Collapsing higher-order streams is really hard, but luckily [this picture](https://user-images.githubusercontent.com/2288939/48842176-78ef8400-ed8b-11e8-8996-307d841f9ac5.png) makes it a LOT easier. It saved my life last night as I was working on my favorite FRP problem of [buttons that add buttons that add buttons... but only the odd buttons](https://codesandbox.io/s/w2kvqr5nw8). Maybe we can build on this picture somehow or at least incorporate it into the documentation...\n>\n> 5. [As stated in the issue above](https://github.com/funkia/turbine/issues/81), I don't like the way the model and view are separated. I wonder if it's possible to combine them like in Reflex and other \"original FRP\" frameworks.\n\nAnd after we/I work on these more pressing issues, the next step will be building a layer on top of that Turbine that would make the development experience *much* better. That is, building a GUI that \"compiles\" to Turbine, for example, kind of in the spirit of Conal's Tangible Functional Programming. Here I am referring to more radical ideas than improving the documentation or a simple devtool, such a projectional editor in the spirit of Lamdu, Luna, Isomorf, Dark, Unison, and Hazel.\n\n### Todos 11/26/18\n\n* wait for Simon palepind response\n * maybe get started on some of the issues: documentation, try to combine view and model, build 7guis things, play with TodoMVC if they have it (or build it)\n* reflection episode\n* edit Katherine podcast\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)", "changes": []}, {"committer": {"date": 1543238661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a16f01ae8dc28d089f7e23a2d8051393b7550a0", "parents": ["7945e2ff22517fe650646561482c6872c0337879"], "commit": "c848c3d111893971f22972d8007f7de0229599e9", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c136dbf1360d9556af12be25a685dcd84a18fee6", "parents": ["1e4443578c9704843a082fc8dbfa03dbf087c561"], "commit": "7945e2ff22517fe650646561482c6872c0337879", "message": "added boundaries of apps outline draft", "changes": [[39, 0, "drafts/boundaries.md"]]}, {"committer": {"date": 1543237666, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a9cbb5cdd3d6461888443694982f8f9211af5f27", "parents": ["befd86be4cf60da8bba5052379fe1db0220af116"], "commit": "1e4443578c9704843a082fc8dbfa03dbf087c561", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "757dde3a7b1c2c822550837d564af676398432ad", "parents": ["bbe3c6ad56187b93440332568909dbe0e37ce81e"], "commit": "befd86be4cf60da8bba5052379fe1db0220af116", "message": "added JE meeting ntoes 11/21/18", "changes": [[79, 0, "notes/jonathan-edwards/11-21-18.md"]]}, {"committer": {"date": 1542805879, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea202405af27561551e5bf852147fa2d45569c02", "parents": ["783bcd703e182c7f639d3442d8e07fa6a1884929"], "commit": "bbe3c6ad56187b93440332568909dbe0e37ce81e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c4fd6191f7dadaf19ec03268acae090b071019c", "parents": ["717c4a653f1540907e06edddde02085041940878"], "commit": "783bcd703e182c7f639d3442d8e07fa6a1884929", "message": "## p4 thinking for JE meeting\n\n* TOC\n{: toc }\n\n### Theme of my work\n\nA fun question on Twitter yesterday encouraged me to think a bit broader as to an underlying theme to my work that would encompass this project, as well as other outside of \"improving programming\" (namely, LogicHub). I'm proud of what I came up with:\n\n

Offloading mental tasks better done by computers to computers, so humans are freed up to think creative thoughts

— Steven Krouse (@stevekrouse) November 21, 2018
\n\n\n### Some responses about fluid Haskell\n\nSean McDirmid suggested Haskell for Mac, which is very cool and close to what I want so I installed it, but I wasn't able to see an easy way to get Reflex to work with it...\n\nLuke Iannini apparently worked on a [live recompiler for Haskell](https://github.com/lukexi/halive).\n\nThe monadfix people shocked me when they said:\n\n> None of us have been able to achieve the \"fluid, live Haskell programming experience\" that you're yearning for, even without \"has to work GHCJS\" as an additional constraint.\n\nMy new thesis is that this fluid Haskell doesn't really exist - at least for most Haskell developers.\n\nArtyom from monadfix was also very kind and commented on my issue about installing intero. Too bad they can't help here!\n\n### Biggest experience problems with Haskell/Reflex\n\nI made a full day's effort of trying to steelman Haskell/Reflex and make the experience as good as possible before trying to improve it - yet I just have such distaste for installing and debugging shit in the terminal (as well as using the existing Reflex setup I have) that I wonder if I can simply pull on my memory for the key issues...\n\n#### 1. Speed of feedback loop\n\nThe main thing was that speed of feedback on all fronts (syntax, types, output) was so slow and required so many keystrokes. In particular there were times that I could point to places in my code where I just wanted to know the type of something but did not know how to ask Haskell for that information.\n\n#### 2. API Discoverability\n\nIn other words, \"I have some things. I want some other things. What blocks can I use to go from what I have to what I want?\" In Scratch, all the \"legos are on the floor\" to help with this. I find that the lodash JS library also does a superb job of this. I found the Reflex documentation and the Haskell autocomplete tooling to feel like I'm basically guess and checking.\n\n#### 3. Plumbing code\n\nSuch as converting `Int` or `String` to `Text` and back, or worst of all, collapsing higher-order streams. I was very excited to find this extremely helpful video, [Real World Reflex](https://www.youtube.com/watch?v=dNBUDAU9sv4) last night which has a really wonderful slide to help with this:\n\n![image](https://user-images.githubusercontent.com/2288939/48842176-78ef8400-ed8b-11e8-8996-307d841f9ac5.png)\n\n#### 4. Visualize streams\n\nThis includes seeing the \"shape\" of streams and how streams make up other streams as in rxmarbles.com, as well as watching the live data flow through streams.\n\n#### 5. Direct manipulation\n\nThis whole thing won't feel natural without direct or bi-directional manipulation of the output because why not?\n\n### Next step ideas\n\n#### 1. Stay in Haskell\n\nContinue working towards a fluid experience in Haskell/Reflex.\n\n1. Find someone to help me setup a better experience and plow through.\n2. Make better documentation for Reflex\n3. Make better utility functions on top of Reflex so I don't have to do as much type conversion/plumbing\n4. Make a devtool for Haskell/Reflex to visualize the streams\n5. [I'd probably never get here] Use some of the bi-directional sketch-n-sketch work\n\n#### 2. Build/use JS library/framework\n\n1. Investigate CycleJS\n2. Look for another stream framework with higher-level and cyclic streams.\n3. See if I can only allow consts and no object modifications while still getting cycles (maybe use a fix-like thing?)\n\n#### 3. Build/use JS Haskell interpreter\n\n1. Investigate the two I already found [here](https://github.com/johang88/haskellinjavascript) and [here](https://github.com/evilcandybag/JSHC), the first of which comes with [an online REPL](http://hiji.tinyrocket.se/)\n2. Experiment with them to see if I can achieve a fast feedback loop\n3. Build a Reflex-like library on top of them\n\n#### 4. Build a higher-level system that compiles to JS\n\n1. Sketch out what it would look like, pulling inspiration from Facebook Origami, the rx visualization tools, the animation tools such as Principle For Mac, Josh Horowitz's [Pane](http://joshuahhh.com/projects/pane/) and what it references including [Aprt.us](http://aprt.us/).\n2. Prototype what \"format\" it would compile to in JS, be it a CycleJS data structure or something else\n3. Build it...\n\nI'm going to spend the next ~30 min doing the sketching discussed above in preparation for my meeting in a few hours with JE.\n\n### Todos 11/20/18\n\n* p4 next steps\n * read the first 6 chapters of TaPL\n * draw out what a better time would look like\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast\n* edit Katherine podcast\n* prep for Tudor podcast", "changes": []}, {"committer": {"date": 1542802726, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c4fd6191f7dadaf19ec03268acae090b071019c", "parents": ["c67accbabc18fc099b4478e0e194fb75cb30af6c"], "commit": "717c4a653f1540907e06edddde02085041940878", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "844810a9f18ee2521fb7d3aa8012f949e31da18c", "parents": ["ad1b9cf01d3fd7be3498444bc18b9e97ce0cfc31"], "commit": "c67accbabc18fc099b4478e0e194fb75cb30af6c", "message": "updated pane in live 2018", "changes": [[2, 2, "notes/live/2018.md"]]}, {"committer": {"date": 1542732647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "010a32c4fc0d84c7a76ba07ede8d20cf10736038", "parents": ["3c4ba62e1637cc6424ddb27d2299752586553dec"], "commit": "ad1b9cf01d3fd7be3498444bc18b9e97ce0cfc31", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0430789c8be015f0c7df49169438524f20db22d8", "parents": ["8c51748313d96449c372baad1a9d9c9b6950777f"], "commit": "3c4ba62e1637cc6424ddb27d2299752586553dec", "message": "## Failing to achieve a fluid Haskell environment\n\n* TOC\n{: toc }\n\nToday I tried (and failed) to do the todo-item from yesterday of:\n\n> watch videos of expert Haskellers on Twitch and try to copy their setup\n\n### The chimera of a fluid Haskell\n\n

I've heard rumors of a fluid, live Haskell programming experience. Has anyone captured such a chimera on video?

— Steven Krouse (@stevekrouse) November 20, 2018
\n\n\nFirst I googled around, trying to find videos of this. Nothing came up that easily after 30ish minutes of looking. Haven't gotten anything on Twitter either.\n\n### Intero\n\nI then re-discovered [intero](http://commercialhaskell.github.io/intero/) which seems to promise 90% of what I was looking for, such typeahead suggestions, jump to definition, type of selection, and type errors as you type in the editor with underlines.\n\nI spend a 1.5 hours trying to get this to work, and failed. I had lunch and came back with the idea to [record it](https://www.useloom.com/share/80c4a4a43f5a4bff8eb207ceeeb96a98). It took me another hour to fail and produced [this issue](https://github.com/commercialhaskell/intero/issues/592).\n\nI emailed Chris Done (creator of intero) and [monadfix](https://monadfix.io), asking if I could pay them to help me set this up.\n\n### Todos 11/20/18\n\n(I put an asterix (*) next to the items that I can do tomorrow.)\n\n* p4 next steps\n * read the first 6 chapters of TaPL / finish Stephen Diehl's book*\n * find someone to help me set up fluid haskell setup\n * video myself building a few things in Reflex, talking out loud about my experience\n * make a list of all the bad experiences, and ways to improve them\n * draw out what a better time would look like*\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast*\n* edit Katherine podcast*\n* prep for Tudor podcast*", "changes": []}, {"committer": {"date": 1542645441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0430789c8be015f0c7df49169438524f20db22d8", "parents": ["857951e243b5769ccd2ab62e42f149dc91748be4"], "commit": "8c51748313d96449c372baad1a9d9c9b6950777f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f401b62c8107fd5e7905276459ab9b53f3881920", "parents": ["bfc39f68927dc52d8c17947e0f8e467629c6c4ce"], "commit": "857951e243b5769ccd2ab62e42f149dc91748be4", "message": "## Making the most of a lazy, jetlagged Monday\n\n* TOC\n{: toc }\n\nI woke early for an Alexander lesson this morning, which was a big mistake as I am not nearly over my jetlag. I went back to bed after getting back and thus didn't get much work done today. Maybe 3 hours of reading, as discussed below, and random Inbox tasks I get done after writing this for an hour or two.\n\n### Paths forward for p4\n(I wrote this section yesterday and the shower note before that.)\n\n![image](https://user-images.githubusercontent.com/2288939/48720162-0cec0f00-ec17-11e8-832f-a092e24d94f0.png)\n\nReflex is the closest thing to the way I think UI should be written and yet it's so crappy to use. I think that fixing the worst parts of this is a great first step. Of course there are many other things to improve such as direct-manipulation, visual metaphors, etc, but let's start with the most egregious places first.\n\n#### Path 1: use Haskell\nCan I turn off optimizing flags in compiler, use a linter or code augmenter, haskell-id (or whatever thing that auto-checks code), sourcegraph? Maybe watching Haskell developers on Twitch would give me a better sense of the state-of-the-art workflow.\n\n#### Path 2: use JS\nCycleJS or rolling my own thing.\nMaybe with JS linter to only allow consts and no object modifications (will be tricky to get cycles this way...).\n\n#### Path 3: build JS haskell interpreter\nBuild an interpreter with ability to swap nodes as running (like Scratch, Smalltalk)\n\n### Haskell interpreter in JS\n\nToday after my jetlag sleepiness I read another few chapters of Stephen Diehl's book [Write You a Haskell](http://dev.stephendiehl.com/fun/index.html), including typing, evaluation, type inference, and the higher-level design of a \"ProtoHaskell\". It seems like a tractable problem, mostly an engineering problem given that it's mostly \"solved\". I even found two already on Github [here](https://github.com/johang88/haskellinjavascript) and [here](https://github.com/evilcandybag/JSHC), the first of which comes with [an online REPL](http://hiji.tinyrocket.se/)! It would be interesting to test the speeds of these REPLS vs each other and GHC.\n\nNow that I know a bit more about how Haskell works under the hood, I wonder how I would implement the features that I think would make a better experience:\n\n1. Replacing expressions in the evaluation tree with other expressions as things are \"running\". In particular, I used to think I could evaluate the AST by visiting nodes one by one and I could replace an old subtree with a newer one, but now I'm not so sure that's how things work...\n2. Representing various expressions or terms as hashes. In particular, how would I represent closures or the environment in hashed terms?\n\nTalking with Cyrus Omar, the Lamdu team, Paul Chuisano, Stephen Diehl will be key in this process... I feel very lucky to be able to confer with the world experts on these topics!\n\n### Go back to drawing, Steve\n\nI can feel myself being pulled into \"engineering mode\" already and it's too early. I don't have my eye fixed on an experience target well enough to get dragged into trying to achieve it. For my work tomorrow, I shall draw out, in tedious frame-by-frame detail, what a simple experience with this \"ideal Haskell experience\" would look like. I wonder if I could make a simple stop-motion video out of it... The features I think are most important:\n\n1. When I type out a UI term, it should appear in view in under a second (or even less) and be interactive\n2. The types of every expression should be immediately accessible\n3. The operations I can perform on expressions should be suggested in an accessible way, as well as new expressions I can add in relevant places\n4. HMR\n5. Automatic plumbing code or plumbing suggestions for conversions between silly types like strings and numbers\n6. The live values running through the program should be tied to the static code somehow to give the types color\n\nFor contrast, I think maybe I should start by trying to accomplish a few UI tasks in Reflex and record them and then make a list of all the pieces of data I wanted to know or actions I wanted to be able to take faster.\n\n### Todos 11/19/18\n\n* p4 next steps\n * watch videos of expert Haskellers on Twitch and try to copy their setup\n * build a few things in Reflex and video myself not having a good time\n * draw out what a better time would look like\n * read the first 6 chapters of TaPL\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast\n* edit Katherine podcast\n* prep for Tudor podcast", "changes": []}, {"committer": {"date": 1542233093, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f401b62c8107fd5e7905276459ab9b53f3881920", "parents": ["fa7a4a794b3e257cb5240be91f92ec6b04bfd48b"], "commit": "bfc39f68927dc52d8c17947e0f8e467629c6c4ce", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a691b6fabbb7d6bf7b53d529c68bfa664a472044", "parents": ["9905ea021be45351f7265d8771ad79d8144ba2f1"], "commit": "fa7a4a794b3e257cb5240be91f92ec6b04bfd48b", "message": "## Mid Nov 2018 Many Thoughts\n\n* TOC\n{:toc}\n\n### SPLASH 2018 recap\n\nI normally don't like to travel but this trip was possibly the best thing I've had to travel for in my life. I'm very excited to do more things like this, maybe a couple times per year.\n\n#### Internet friends IRL\n\nI've been referring to this period of my life as my \"Twitter Friends Phase\" because I am making so many friends and then I also get to see them in person. Just in last week in Boston alone, here are all the amazing people I got to spend time with:\n\nWill Chriton, Joel, Jonathan Edwards, Ravi, Brian, Cyrus, Glen, Sean McDirmid, Paul Chuisano, Geoffrey Litt, John Maloney, Charles Roberts, Chris Granger, Eyal Lotem and Yair Chuchem from Lamdu, Roben Kleene, Daniel Moon, the ReScala team from Technische Universität Darmstadt (Ragnar, Pascal), Josh Horowitz, Roly Perera, Caleb Helbling, Evan Czaplicki\n\nSadly I only have one photo from the event. I should do better next time!\n\n![image](https://user-images.githubusercontent.com/2288939/48514489-683f8b00-e82c-11e8-91aa-6b54dd936273.png)\n\n#### LIVE 2018\n\nI have trouble with lectures. I'd much prefer sitting at home in my sweatpants, listening at 2x speed and bouncing if it's not for me right now. However, LIVE 2018 was one of the best days ever, not in spite but *because* it was a day full of mind-blowing demos one after another.\n\nI recorded them on my phone and uploaded online to a lot of thank-you's. The Bootleg page had a fun run, including Jeremy Asheknas's transcript which landed on the front page of HN for the day (not when I posted it, but when he posted it a few hours later).\n\n### Next Research\n\nI really have two very interesting directions to go in: making FRP experience better, or expanding the FRP universe to multi-node. We choose FRP experience for now, but I'm thinking about the other thing on the side.\n\n#### p4 11/14/18\n\n(Tracked at https://github.com/stevekrouse/futureofcoding.org/issues/86)\n\nThe goal is to submit this work to \\ in Feb and a good title for the PX workshop (says JE) is \"FRP eXperience\".\n\nThere are a few different levels here:\n\n* the abstraction / code\n* the streams, including data and how they fit together\n* the output UI\n\n##### Infinite canvas drawings\n\n![image](https://user-images.githubusercontent.com/2288939/48514496-6d9cd580-e82c-11e8-8bf4-1b4af9aef054.png)\n\n##### Other tools for inspiration\n\n* WYSIWYG hybrids such as Sketch-n-Sketch\n* Aprt.us, which would be a more visual language. Key question is how to do higher-order & cyclic, and other abstractions\n* Facebook Origami\n* Lamdu/Luna/Dark and all the projectional editors\n* principle - design tool with timeline editor\n* framer\n\n##### Worst parts of Reflex/Haskell\n\nBut then I thought: let's focus on the really key issue here. What's the highest-leverage improvement to be made? What's the *worst* part of using Reflex/Haskell now? In the shower note on the right below, it says:\n\n1. feedback loop: knowing if the syntax is right, if the types make sense, what the code I'm looking at *is* from both a type, data, and UI perspective\n2. knowing what's possible (syntax, API, types)\n\n##### p4 prioritized features\n\n1. With this framing, a quick compile time (or intepreter time) could be key. Reflex seems to take 4+ seconds. Can I do sub 1? Or faster? How about hot reloading?\n2. Great docs, autocomplete, type annotations everywhere\n3. Automatic plumbing: can we semi-automatically lift transforms inside monadic contexts? Ditto for automatic type coersion plumbing like int to string, etc\n4. Stream visualization, including how streams make other streams, the shape of streams, and also the data for each stream\n5. (Bi-directional) Direct manipulation of UI\n\n![image](https://user-images.githubusercontent.com/2288939/48357110-d0904000-e665-11e8-9154-3768ad3ce414.png)\n\n##### Implementation\n\nJE send me an email:\n\n> Can you implement your FRP eXperience using FRP, and apply it to itself? That might be challenging, but would also be very impressive. It will be seen as a limitation if it can't apply to itself, although that might be unavoidable in the first phase. But I think that at the very least you need to implement it in some FRP framework to avoid the charge of hypocrisy.\n\nMy response: The only implementation of the FRP I argue for in my paper is Reflex/ghcjs. It doesn't exist in PureScript, Elm, F#, etc. Turns out laziness makes it a lot easier to implement. My next experiment is to try to do it in JS with CycleJS. I've tried this in the past. It's not easy -- it's not built for this use case -- but it seems possible, even cycles. More to follow...\n\n* I did a very naive implementation of streams stuff in JS here: https://codesandbox.io/s/81225lrop2\n* It'd probably be better to build off cyclejs. Over a year ago I tried to do something similar so maybe I can start there? https://codesandbox.io/s/xlrynkqoqp Inspecting the types of streams is key. Maybe I can use the cyclejs devtools and/or augment them somehow. Could typescript or something similar help me encode the types of streams of streams of streams? Could monaco help with autocomplete suggestions?\n\nSome other ideas for building this:\n\n* racket turnstule dsl for building typed langauges\n* L. Kats and E. Visser. The spoofax language workbench.\n* C. Omar. Reasonably Programmable Syntax. PhD thesis, Carnegie Mellon University, 2017.\n* Build a JS interpreter with laziness based on [Stephen Diehl's work](https://futureofcoding.org/log#stephen-diehl-lunch)\n\n#### Cloud FRP 11/14/18\n\n(Tracked at https://github.com/stevekrouse/futureofcoding.org/issues/85)\n\n* At SPLASH, I was really excited to find [ScalaLoci](https://scala-loci.github.io/) which was about placement types of reactive programming in Scala. Very related to this work. I need to peruse their Related Work section for more details.\n* I found a way to make sense of reading (which I was having trouble with above). All data is \"public\" but by default anything you do is encrypted so only you can read it. You can also encrypt it with others' private keys if you want them to have access. We'd probably want to make who can have access be a `Behavior` so that we can change this if we want to revoke access.\n* Eventually, the next step here will be implementing this, probably in Haskell\n\n#### Name ideas 11/14/18\n\nNow that I'm clear I am building a system, and not just producing research, I am thinking on a name. Here are some themes it could embody:\n\n* malleability\n* conviviality\n* casual\n* customizability\n* cooperation\n* denoational\n\nAnd here are my favorite names of the moment:\n\n1. Potluck\n2. viv\n3. Stride (probably can't do because there's already a similar-ish thing)\n\nAnd here's what Twitter thinks:\n\n

Preferences on potential new programming language name..?

— Steven Krouse (@stevekrouse) November 11, 2018
\n\n\n#### 2019 Conference deadlines\n\n- \\: Salon de Refuge (Jan 7, April 1) Genoa, Italy\n- \\: PX/19 (Feb 1, April 1) Genoa, Italy\n- PPIG (June-ish, Aug) UK\n- SPLASH: Onward! (mid-April, end-Oct) Athens, Greece\n- SPLASH: LIVE (June/July, end-Oct) Athens, Greece\n\n### Possible Dec 2018 Re-group Projects\n\nI got this project started a year ago as fast as possible, and it seems like now-ish is a good time to regroup a bit and work on a few upgrades... Maybe I'll set aside Dec in do some of these things...\n\n#### Meetups more a thing\n\nIt seems like there's interest in hosting/attending these in lots of cities, and with a bit of effort (a website with guidelines) we can have them in a bunch of cities. I can do London and maybe New York, Caleb Helbing has been talking about starting for Boston, Amjad Masad (of Repl.it) says he can take SF...\n\n#### Branding\n\n* Amjad suggested that a cool logo could go a long way. I actually had a dream a night or two ago about making the logo a interesting color blue...\n* Relatedly, the webiste styling could use an upgrade, a color scheme, top nav, footers, make it clear I accept pull requests on github, comments on pages\n* The podcast could really use intro and outtro music\n* Change the Slack URL to futureofcoding.slack.com, and make a doc explaining channels (maybe fix this up a bit) with descriptions and threading\n\n#### Re-organize systems\n\n* This log system is a bit janky (too much git integration, adding date to headers, hashtag based system could be nice for collecting for topics, todo system could be better than constant appending)\n* Jekyll seems simple but is actually quite complex and I've found it to be a nightmare to get things the way I want. Maybe I switch to a different platform. Maybe I slowly roll my own static site generator. Maybe I do it on now.sh...?\n* Especially now that Google Inbox is dying, I need to get my FoC research + FoC Thinking lists out and into another system\n* Relatedly, Github Issues could use some love. Potentially I could move everything here, and then come up with a better input mechanism to github issues...\n\n#### Sustainability\n\n* I have had a number of people strongly encourage me to set up a Patreon so they can support my work. This is terribly exciting! Top priority.\n* Here's a probably silly idea: a future of coding job board. A place where people in the community can connect with companies in the community. Maybe if it gets big enough, companies can sponsor it to get listed higher?\n\n### Todos 11/14/18\n\n* Dec regroup projects (above)\n* p4 storyboards (maybe 2-3 totally different takes, shallow, brainstorming mode)\n* schedule JE podcast in late Nov", "changes": []}, {"committer": {"date": 1542037303, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a691b6fabbb7d6bf7b53d529c68bfa664a472044", "parents": ["6dc84106e93104bfff9298e5072b969e7d247dea"], "commit": "9905ea021be45351f7265d8771ad79d8144ba2f1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a9794135a9d4053ba922896e2b64422ba4a300e", "parents": ["9038e5527d2acfa637ce6f7234d94e2a1ffa9f13"], "commit": "6dc84106e93104bfff9298e5072b969e7d247dea", "message": "fix typo", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1542036245, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "10b34b80e3422f172e23a4427c2273893b09891e", "parents": ["53f08fdddfb679ed8de5e8cb8d4de7c7f774f41c"], "commit": "9038e5527d2acfa637ce6f7234d94e2a1ffa9f13", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "377f9f2dc9a08af1cfb46a539474cb977c0d2829", "parents": ["928bcf2fbc9d804d7850667846a9aa57df785e79"], "commit": "53f08fdddfb679ed8de5e8cb8d4de7c7f774f41c", "message": "modified homepage links", "changes": [[16, 11, "about.md"], [5, 2, "index.html"]]}, {"committer": {"date": 1542034634, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dfff7cc8a2986b94f876ccb31e17ae52150de236", "parents": ["bb978361f35f870858a28152899777d9a5d2084c"], "commit": "928bcf2fbc9d804d7850667846a9aa57df785e79", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c22fb1f872bcd7d4d648799a12f01bd6cb9e4f8a", "parents": ["71b780b1d4c39d3f315795b0b88d7f85567f69d2"], "commit": "bb978361f35f870858a28152899777d9a5d2084c", "message": "add mobile modeling link to eve history", "changes": [[8, 0, "essays/eve/index.html"]]}, {"committer": {"date": 1542034325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "24f2765343ed8e423780354cf12e49704052ea94", "parents": ["df3bcd8f03910c9cba5b3f6e95ddc71b8ccde245"], "commit": "71b780b1d4c39d3f315795b0b88d7f85567f69d2", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a32fa723ccab47046b860fe6e4802bf8bfa657e7", "parents": ["465ffac1872072fd67a2f18ce0a8bac03285999b"], "commit": "df3bcd8f03910c9cba5b3f6e95ddc71b8ccde245", "message": "added je nov 2018 meeting notes", "changes": [[50, 0, "notes/jonathan-edwards/11-09-18.md"]]}, {"committer": {"date": 1542034020, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7569b43df8397b7806fc66672a9c10563328350", "parents": ["36c7ff8a926b071aa0741e3e1d8ace85775dfdeb"], "commit": "465ffac1872072fd67a2f18ce0a8bac03285999b", "message": "updated git log", "changes": [[10, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7a1051d668801fcf3caeb5aa22a1f6ae1acd892", "parents": ["f826c560afcef8da1dadf4fb48992b75175b0f9c"], "commit": "36c7ff8a926b071aa0741e3e1d8ace85775dfdeb", "message": "added granger transcript link", "changes": [[1, 1, "notes/live/2018.md"]]}, {"committer": {"date": 1541692326, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7dacdc72af7b468ed4e458a5f61e441d732a5454", "parents": ["1c19627f87a3bd1bd43bd6b75d28f26036e9dee0"], "commit": "f826c560afcef8da1dadf4fb48992b75175b0f9c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "06d7f80dfe89edccea267cbfa2609fa0f354a150", "parents": ["8ac30dc4058bd7094c60cf970fde72fc831986bd"], "commit": "1c19627f87a3bd1bd43bd6b75d28f26036e9dee0", "message": "added Gemfile", "changes": [[2, 0, "Gemfile"], [252, 0, "Gemfile.lock"]]}, {"committer": {"date": 1541692277, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56beb93b55ad3f012454ad2f553723621bcc4e18", "parents": ["3ccdda0cab1f3b3e18d5531fe81e116b58731196"], "commit": "8ac30dc4058bd7094c60cf970fde72fc831986bd", "message": "updated git log", "changes": [[0, 10, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "87fc0a47e06f9121cbf8a4a1eaf68116ffc3e232", "parents": ["2efa74fed6f8f8c7e2a0c5559e22d9d392fcd8ae"], "commit": "3ccdda0cab1f3b3e18d5531fe81e116b58731196", "message": "update live 2018 styles", "changes": [[46, 17, "notes/live/2018.md"]]}, {"committer": {"date": 1541690181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77cf5444d744ccb3ec824ca01e5afb034e55d2e6", "parents": ["eaceadacd8311d89b73f4a4311f32dbf17624fd4"], "commit": "2efa74fed6f8f8c7e2a0c5559e22d9d392fcd8ae", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a932145c763410f4285b1ecfa6f0d5e193ba9e1b", "parents": ["35485ef22bb3174d51ab95c0dba00cf5e5799f35"], "commit": "eaceadacd8311d89b73f4a4311f32dbf17624fd4", "message": "added live 2018", "changes": [[166, 0, "notes/live/2018.md"]]}, {"committer": {"date": 1541357411, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "33e9a5816c8438aa005f3170a0f7b271bfba7a4d", "parents": ["1b764837ae84ec363fea46d5cae76c23ba08f45d"], "commit": "35485ef22bb3174d51ab95c0dba00cf5e5799f35", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bcdb157ce4656ced9bae25178a3189c07b52306a", "parents": ["6498b77009ff98e6f8521351995b063a87d33d57"], "commit": "1b764837ae84ec363fea46d5cae76c23ba08f45d", "message": "last minute FRP slide edits", "changes": [[3, 5, "papers/comprehensible-frp/slides.html"]]}, {"committer": {"date": 1541190041, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc72f2a54fc828c35c06815f6347ce5ab157955f", "parents": ["218f331dca70c5f57d5edf0b5ff8991b07a990cb"], "commit": "6498b77009ff98e6f8521351995b063a87d33d57", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d15498479e21288192d5a3a7c29f6af84d7e7f61", "parents": ["2fdae19fe25b59558bb043ea6443911a662732d0"], "commit": "218f331dca70c5f57d5edf0b5ff8991b07a990cb", "message": "new about framing from plane to Boston", "changes": [[64, 137, "about.md"]]}, {"committer": {"date": 1541085868, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e5fb21284a1d7d942f0a9718d7b7ba060476d041", "parents": ["0912f432adf3811326cdcf458104fadd833d6f7a"], "commit": "2fdae19fe25b59558bb043ea6443911a662732d0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c8a884db2320cc7f69b71ef2ea177825c2c7282f", "parents": ["c8742951ed6aa2368a21dc3e2407a37b78dc1a55"], "commit": "0912f432adf3811326cdcf458104fadd833d6f7a", "message": "## Notes 10/31/18-11/1/18\n\n* TOC\n{: toc }\n\n### More FRP talk practice!\n\n[Yesterday's practice](https://www.useloom.com/share/d52de5de266b4862afa2777176f652bb) was pretty solid! I'm not sure if I'll have time to review it and do a better one today...\n\n### Stephen Diehl lunch\n\nThis morning I poked around on the internet for tutorials related to creating \"toy Haskells\" particularly interpreted and not compiled. This is related to wanting to create a FP language with a much *livelier* feel, aka [prototype 4](https://futureofcoding.org/log#prototype-4) and sometimes referred to as viv, potluck, stride, etc. I came across Stephen Diehl's many writings on these topics and saw on his Twitter that he went to the London Haskell meetup last night, so I messaged him and we had lunch a few hours later! I love the internet.\n\nHe claimed that in order to design a functional language you need to settle on three things:\n\n1. AST\n2. Core calculi\n3. Evaluation semantics\n\nThe code is parsed to the AST, the AST is reduced to something that resembles the core calculi (you can see this in ghci with D dump core), and then the evaluation semantics determine how things are evaluated.\n\n#### Core calculi\n\n* untyped lambda calculus (Scheme)\n* System-F (Haskell)\n* Martin Lof (Haskell + dependent types)\n\n#### Evaluation semantics\n\n1. Call by value (eval arguments first)\n2. Call by need (lazy, like Haskell)\n3. Call by push value (he didn't explain)\n\n#### Random notes\n\n* Apparently recursive-do is possible in Stephan's basic interpreter in his book (2k lines of Haskell) because it's just built on top of mfix, which is mutual recursion, and bind...\n* He strongly reccomended I read Ben Pierce's book, at least chapters 1-11. One of his coworkers forewarned that it's more of a reference manual than a book to read cover to cover.\n* He also recommended Robert Harper's _Practical Foundations_, which is about adding things a la carte to semantics.\n\n### Splash plans\n\nDinner Thursday night with some folks. Message me if you want to join!\n\n### Interesting cloud data projects\n\nI found [edsu.org](https://edsu.org/) via [this HN post](https://news.ycombinator.com/item?id=18316116). Seems cool. Similar to a lot of other projects floating around the ether these days. The comments are full of them. Just wanted to jot it down here.\n\n### Todos 11/1/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) (including learning about the stuff from Stephan Diehl above) and/or [multi-node FRP](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n* Read all of [Kartik](http://akkartik.name/) & chat with Antranig and Philip & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox --> github issues/project (including these todos)", "changes": []}, {"committer": {"date": 1540893201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c8a884db2320cc7f69b71ef2ea177825c2c7282f", "parents": ["d80d90f87dc2dab178b785fd8ee3c0cc87fd74ca"], "commit": "c8742951ed6aa2368a21dc3e2407a37b78dc1a55", "message": "updated git log", "changes": [[1, 1, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b5c4d9b12c3b0ce63a452619ee867c13941555d", "parents": ["caa632fb57bb9d24c5dccb696956a0d35282f4e0"], "commit": "d80d90f87dc2dab178b785fd8ee3c0cc87fd74ca", "message": "## Practicing FRP Talk\n\nThe plan is to practice the talk once a day until the conference and review it on video and take notes on how to improve each time. Here are the videos I've done so far. They get better so you'd probably want to just go to the last one:\n\nhttps://www.useloom.com/share/340140803ec24931b0bfb0e0f4d260e3\nhttps://www.useloom.com/share/d50ae47bb6f44056b3a5231406598643\nhttps://www.useloom.com/share/c0db356f8193400c92441410e4005686\nhttps://www.useloom.com/share/bc107f1d6e7249208e5152b909e9a659\nhttps://www.useloom.com/share/b636f469dcea42ce946b25dd5c0a75d3", "changes": [[243, 0, "papers/comprehensible-frp/slides.html"], [0, 252, "papers/comprehensible-frp/talk.html"]]}, {"committer": {"date": 1540549021, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "475df93a6e5eff9412bb81fc00e4326372bb3eb8", "parents": ["7ab9f387fba127906ec9716c3a1b4657d769bcca"], "commit": "caa632fb57bb9d24c5dccb696956a0d35282f4e0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ca35bcd56abb4996cf4ac56ca7630f25ebefbf5", "parents": ["ad2b722da120705d1f1a2a10d83599123bc5e8cd"], "commit": "7ab9f387fba127906ec9716c3a1b4657d769bcca", "message": "## Notes 10/25-26/18\n\n* TOC\n{: toc }\n\n### Cleaning .git repo\n\nI spent ~2 hours yesterday morning cleaning up my `.git` repo for this website. It's only fair considering how I abuse this repo so, but it was still quite frustrating. The .`git` repo was over 200MB! Eventually I learned that the issue was all the large `.mp4` and `.pdf` files I added a while ago and since removed but since lurked in the git info. So I removed them, and then accidentally pushed those changes to github. Now I'll have to [eventually fix those broken links](https://github.com/stevekrouse/futureofcoding.org/issues/82).\n\n### The Next 700 PLs\n\nConal's talk from two days ago pointed me to The Next 700 Programming Languages by Peter Landin. It felt like very modern essay, not one written in 1965! The beginning didn't speak to me but sections 8 and beyond really did. He coins the term \"denotative language\" to replace the \"functional\" vs \"imperative\" debate: a language with nested subexpressions, where each expression *denotes* something, it's dependent only on its subexpressions listed's values. This is a useful definition!\n\nAt the end of this article there's a discussion section where the author and other famous computer scientists discuss these issues, debating what is a declarative language. It's really amazing to see!\n\n### Denotation of users (shower 8/25/18)\nI want a place to consolidate all my work on this, so I've started [a github issue for it](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n\n* creating a user is a very imperitive notion.\n* much better if we say that a user merely *is* a pair of keys: `user :: (public key, private key)`\n* when we want to construct an stream that's tied with a user, we must merely `sign :: User -> Stream a -> UserStream a` the stream.\n* setting any user details (name, email address, photo) are merely signing data that claims those things for yourself\n* Reading seems less natural, but the idea is that when we want data from another computer, we need to `lift` a `Stream` to a `Stream (Stream)` of some sort (to account for when we get the stream as well as when it happens), and in this lifting we can optionally supply a `User` parameter. Pieces of state themselves will decide if and how they will allow themselves to be lifted, and to which users.\n\n![img_20181025_184131](https://user-images.githubusercontent.com/2288939/47558190-79bb0480-d90a-11e8-8c8e-3f69851d7354.jpg)\n\n\n### Todos 10/26/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or [multi-node FRP](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n* set SPLASH intentions\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox --> github issues/project (including these todos)\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540544890, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ca35bcd56abb4996cf4ac56ca7630f25ebefbf5", "parents": ["44801179c7d9619f377cc5112eec8af7c56aa8ca"], "commit": "ad2b722da120705d1f1a2a10d83599123bc5e8cd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e89013140c71266286a4208f840e26b3ba8e33e", "parents": ["b44593b3a48378af0e6329fafda127cc6ad98668"], "commit": "44801179c7d9619f377cc5112eec8af7c56aa8ca", "message": "added dynamicland jfi essay", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1540487898, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e8c558fd64f7dd00d100fb4d642e763cfd439919", "parents": ["4593c9e7789b98f8c2c10994ebfe159d23466465"], "commit": "b44593b3a48378af0e6329fafda127cc6ad98668", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f3cb403a247fdceffbfb94df73d7fab5be05d3c2", "parents": ["31f416b5ec311ac2781e8dea853f3a70aa9e8b9b"], "commit": "4593c9e7789b98f8c2c10994ebfe159d23466465", "message": "incorporated talk feedback in slides", "changes": [[5, 4, "papers/comprehensible-frp/index.md"], [354, 0, "papers/comprehensible-frp/reflex-diagram-simplified.svg"], [252, 0, "papers/comprehensible-frp/talk.html"]]}, {"committer": {"date": 1540454974, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b8ad63fb8b016a9f0846f37db9074f2a320f571e", "parents": ["0d7609d62b3bef1693bbef2fedd2d5376615a768"], "commit": "31f416b5ec311ac2781e8dea853f3a70aa9e8b9b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "20747cc6cac70458036781b95395ca156b98ff43", "parents": ["dca2ff91312ca93913f8450de8479342e521d78d"], "commit": "0d7609d62b3bef1693bbef2fedd2d5376615a768", "message": "updated _data/files.csv which has been hard to update...", "changes": [[84, 78, "_data/files.csv"]]}, {"committer": {"date": 1540367393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f3736de19f19e30d8fb1e2501092418367b3d6ed", "parents": ["120045909ceaa8d9711f68c8f47e4c52fcc57cac"], "commit": "dca2ff91312ca93913f8450de8479342e521d78d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79778ad30f7ee2a0763fcf799dd3e0016ce93fbc", "parents": ["50d65da2f4d9eb77ee0a91e6c048ca6b7e1441f2"], "commit": "120045909ceaa8d9711f68c8f47e4c52fcc57cac", "message": "## Back to research & denotational design\n\n* TOC\n{: toc }\n\nYesterday I resolved to do more research (roughly two days per week, leaving three days for emails, podcast, and freelancing), and I had a good start yesterday with a half-day of solid research!\n\n### Older Oct 2018 shower notes\n\nA few scattered notes from earlier this month that are semi-interesting:\n\n* wouldn't it be neat if HTML had a date/time widget built-in (so it could work in email) that displayed a time in the correct timezone automatically (detected from your browser, or manually change-able within the widget)?\n* Is addition (+) too general? Is there not enough *intent* encoded within it? Would it be better to say 7 years and then 2 years later = 9 years? Or 4 kilos with an additional 3 kilos = 7 kilos?\n* why are mouseX and mouseY FRP Behaviors and not Events? Because they happen so fast! Maybe we should expose slow things, such as network requests, as Events, with a way to Behavior-ify them!\n* Context is key: behaviors on my machine are events are yours!\n\n![img_20181023_185142](https://user-images.githubusercontent.com/2288939/47412738-7128c980-d764-11e8-9064-fff991ce45a4.jpg)\n\n### Shower denotational design\n\nConal Elliot is the man. My god, I'm so excited to be able to grok a part of what he has to say! Yesterday I re-watched [Denotational Design: from meanings to programs](https://github.com/conal/talk-2014-lambdajam-denotational-design) and was re-blown away. It's funny: whenever I recommend Conal to friends I have to caveat it with, \"I need to watch his stuff multiple times before I get it.\" This was true of this talk as well.\n\nSo here's the denotational methodology as far as I can tell:\n\n1. Come up with abstract \"uses\" you want the library to be able to accomplish\n2. Come up with a sketch of an API\n3. Write down the relevant types\n4. Write down the μ (mu, meaning) of those types as mathematical objects (likely, functions)\n5. Write down the μ of each API function\n6. See if any of your types fit existing type classes (monoid, functor, applicative, monad, comonad, etc)\n\nSo I tried to follow it in the shower yesterday and I think it went pretty well!\n\n![img_20181023_185153](https://user-images.githubusercontent.com/2288939/47412736-7128c980-d764-11e8-8156-a4685887655f.jpg)\n\nI had a few key insights:\n\n* There should be a way to turn `Events a` on one computer to something like `Event (Event User a)`, where the outer event represents *this computer's perception* of the event happening and the inner event represents when the event *actually happened*.\n* Another key insight: the default behavior of FRP applications should be to persist data for forever unless programmed otherwise. The resetting of app's data on page reload is a wacky accident!\n* I was having trouble coming up with the semantics for a User... We want a way to authenticate someone and then we need a unique key to identify them. In terms of access for reading and writing, I imagine that logic should live (like everything else) with the relevant pieces of state.\n\nI had another insight, but more about [prototype 4](https://futureofcoding.org/log#prototype-4):\n\n* If we want to have an app be always running\n* And we also want to have each modification create an entirely new hash of its definition (no mutation)\n* How do we stay sane?\n* We could have a pointer-based naming system. It could point at a hash to start.\n* Then if we edit a sub-expression in that hash, it creates a new hash for the sub-expression\n* It may auto-create a new definition for the larger expression\n* And it may also auto-update the pointer to point to the new hash of the larger expression\n* Migrations could happen in a similar way if we update a piece of state it could help us combine the old state with a way of producing new state. (Up until time t produce state in this way, then map it to this new format, and then produce state in this new way...)\n\n### Todos 10/24/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or [multi-node FRP](https://futureofcoding.org/log#cloud-or-multi-node-frp) (continued above with denotational design)\n* set SPLASH intentions\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540365958, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79778ad30f7ee2a0763fcf799dd3e0016ce93fbc", "parents": ["c1f9063080c10176bf60bf93dbec127977e176d6"], "commit": "50d65da2f4d9eb77ee0a91e6c048ca6b7e1441f2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cd0accc1d5312034ac9fd9195d939b8d0e5509bf", "parents": ["d544cf32f358d6e4c8c73a0b9675dcf726e2ee67"], "commit": "c1f9063080c10176bf60bf93dbec127977e176d6", "message": "published episode 32, quinn slack", "changes": [[9, 4, "episodes/32.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1540364585, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "85207c55fa05812af2474947677767c1db78ad70", "parents": ["5caf64c6368a17e1f08fe6156e7ef459c60620d5"], "commit": "d544cf32f358d6e4c8c73a0b9675dcf726e2ee67", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97fcf7e0d2815d45725ede3a6bb8a6547d0bc8cd", "parents": ["a6e92e3a99523133b2f7e99f927a01c74da03060"], "commit": "5caf64c6368a17e1f08fe6156e7ef459c60620d5", "message": "add paper talk, and fix paper index", "changes": [[5, 332, "papers/comprehensible-frp/index.md"], [87, 0, "papers/comprehensible-frp/talk-feedback.md"]]}, {"committer": {"date": 1540225333, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "753c3c8a2dbc3e96bea84edcbc72270f0a7101cf", "parents": ["2cbafb47b030ae1e412197c3f1ff39b730dc4f3b"], "commit": "a6e92e3a99523133b2f7e99f927a01c74da03060", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "41840acd14f10bb699b1fce34ded6ab87b828a65", "parents": ["cfceff5ebd7f237b7e17c46fa55ac5d64711f4a5"], "commit": "2cbafb47b030ae1e412197c3f1ff39b730dc4f3b", "message": "fix header episode 32", "changes": [[1, 0, "episodes/32.md"]]}, {"committer": {"date": 1540224597, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5300b2478ba70d6af043a7c4940dcf9ac12d8522", "parents": ["103c62c9fc795bb944dadd10542412cea172206a"], "commit": "cfceff5ebd7f237b7e17c46fa55ac5d64711f4a5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "07bada34c37ce7b7ef6a0b5ebd4a6520810ff72e", "parents": ["ca97ee3f89c9bd6333b6ff3bef58b0ffda6e48e6"], "commit": "103c62c9fc795bb944dadd10542412cea172206a", "message": "added most of episode 32 - quinn slack", "changes": [[1068, 0, "episodes/32.md"]]}, {"committer": {"date": 1540206475, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b610160465849d7165bf091b1a8ae714e2c3c673", "parents": ["550481b30b10105a033ff952de97c837db08e1af"], "commit": "ca97ee3f89c9bd6333b6ff3bef58b0ffda6e48e6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "21370f809241eb16f7bddf7b5f215c0762001901", "parents": ["1281d8565ef51471b0cd8583b4098b24f768aaea"], "commit": "550481b30b10105a033ff952de97c837db08e1af", "message": "## Getting settled in London\n\n* TOC\n{: toc }\n\nGetting set up in London has taken a lot more effort than anticipated (wifi, broadband, furniture, food, new friends, transit, etc, etc), but I'm settled enough this week to have time for focused work.\n\n### FRP talk feedback session\n\nJE suggested that I record my practice talk ([slides here](https://output.jsbin.com/gopajav#1)), which [I did here two weeks ago](https://www.useloom.com/share/d50ae47bb6f44056b3a5231406598643), and send it around to a few friends (Glen Chiacchieri, Geoffrey Litt, Ivan Reese, and Joshua Horowitz) and ask that they all meet online to give me feedback, writers' workshop style. We are meeting today at 6pm London time. I'm excited to see how it goes! I imagine I'll have another few hours to hone the talk this week afterwards. I'd like to have a clean recorded version I can share around online.\n\n\n### Italy CS Philosophy and History conference\n\nLast week I attended at two-day conference in Bertinoro, Italy after learning of it from Tomas Petricek on Twitter. I traveled on Monday and Thursday and the conference was on Tuesday and Wednesday. Almost every time I travel I consider the trip not to be worth it. This trip, however, was *almost* worth it. I definitely did learn some things, gained some new perspectives into the history and philosophical origins of my field, but I regret that I could've learned and did more from home on the internet, in a book, or working, rather than listening to random talks at 1x speed. I fear I will have a similar reaction to SPLASH, except that it's 3x the cost of a cheap jaunt to Italy from London.\n\n### My \"life set-up\"\n\nIvan Reese brought it to my attention that my life set up wasn't entirely clear to him from my podcast and notes, which I'd like to correct on the next reflection update episode. The way I've been explaining it to people IRL is that I have three things going on: freelance software work, my podcast, and my research. My research is the aim, yet it's also what I have recently found the least time for. My freelance work is for a venture capital firm connecting their SaaS services together to make money. My podcast is something I do for fun, but recently has gotten sponsorship - it's not enough for me to stop freelancing but Amjad (my sponsor) seems to think we may be able to get it there with some more growth eventually\n\n### Planning this week 10/22/18\n\nHere's the time I have this week:\n\nToday - 4ish hours\nTues - 7ish hours\nWednesday - 2ish hours (busy with Alexander Technique)\nThursday - 7ish hours\nFriday - 6ish hours (meeting Nadia Eghbal)\n\nIn terms of freelancing, I can get away with not working much this week.\n\nIn terms of the podcast, I merely must edit and release Quinn Slack's episode in the next day or two. (3 hours)\n\n This leaves me a lot of time for my research, which has been much neglected the past few weeks! Very exciting.\n\n### Cloud (or multi-node) FRP\n\nWhile my intention was to continue my research in the direction of [prototype 4](https://futureofcoding.org/log#prototype-4), I have been tantilized by the problem of how to extend the FRP abstraction to \"the backend\". In other words, apps with data stored somewhere \"in the cloud\".\n\nTo extend the simple counter application, simply make it a multi-computer counter, that aggregates all the counts to a button across all computers. As is often the case, once put in those words, the problem doesn't seem so hard. One approach is to have a \"lift\" operator that would allow us to transform a button's `Event ()` into a `MultiWindow [Event ()]`, upon which we could do various operations, such as merging all the event streams and counting the occurrences.\n\nOr consider the much more complicated problem of a realtime multiplayer game like agar.io or slither.io. As I've learned the hard way, you cannot simply send the x- and y- positions of each player to each other player and update position accordingly. You must instead *anticipate* where each player is going to be based on their current position and velocity and project them there until you receive the next word on their position and velocity and then you can subtly nudge that player to where they actually are, and are headed.\n\nHow could I model such an arrangement without mentioning low level details such as sockets? I think the concept of *perspective* is relevant here. From *a single player's perspective* the x- and y- position, and velocity are all FRP Behaviors, defined at all points in time because their computation happens to quickly. However, those values for *other players* must be modeled as FRP Events, because we only get glimpses of them at discrete points in time. However we must on the screen display other player's positions as continuous behaviors so we must use the complicated logic to predict and update our *perception* of the other players to construct a Behavior for them out of our Event of them.\n\nMy thinking above is lead by my intuition of FRP, types, and what the abstractions allow. However I feel a desperate need to have a proper medium to help shape my thoughts to only go in proper ways. Potentially Haskell or PureScript could be such a medium. I am considering watching/reading Conal's advice on denotative design again. Maybe I need to come up with mathematical objects to model what I mean by a \"multi-widow\" or \"multi-user\" application or event stream. These are the question on my mind when I pick up this stream of thoughts...\n\n### Todos 10/22/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or multi-node FRP (above)\n* set SPLASH intentions\n* edit and publish Quinn Slack podcast\n* version 2 of FRP talk, put on FoC site and reorganize the way it is on the website (delete HTML version)\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540203761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "21370f809241eb16f7bddf7b5f215c0762001901", "parents": ["ee159fbc8175098d6393b34e5334661b893f7c00"], "commit": "1281d8565ef51471b0cd8583b4098b24f768aaea", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8e3b1cd13970353373b33d6a1dd148b26b41f985", "parents": ["8a7fd6a8625707b90c706718888721cf6b4c760c"], "commit": "ee159fbc8175098d6393b34e5334661b893f7c00", "message": "add meeting w je notes from last month", "changes": [[58, 0, "notes/jonathan-edwards/10-09-18.md"]]}, {"committer": {"date": 1540123337, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d191c8ddd36ea53bff2c233bc23bf208195f9b9b", "parents": ["3ef86e76fa5ed0fa42da1fe49f6304ea9b1c307f"], "commit": "8a7fd6a8625707b90c706718888721cf6b4c760c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b3647c59492ad4c24c85b5395de05acf6057b505", "parents": ["40eb72db034c8680a5dcc28503ebb178a5f8fa78"], "commit": "3ef86e76fa5ed0fa42da1fe49f6304ea9b1c307f", "message": "old journal to raw githack", "changes": [[1, 1, "_data/commitToJournalMarkdown.json"]]}, {"committer": {"date": 1540123291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "170ea7198f7b3fdeabb8007cdbf187ef24beeb18", "parents": ["f23c366d0a4e780d9e664bc7218fa72b4e3507c7"], "commit": "40eb72db034c8680a5dcc28503ebb178a5f8fa78", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "682580163a855b3250f9df0dd698fadbf80c9637", "parents": ["2d450cdc12e13028f172f29839415d7f071b4087"], "commit": "f23c366d0a4e780d9e664bc7218fa72b4e3507c7", "message": "rawgit --> raw githack", "changes": [[1, 1, "drafts/regex-for-humans.md"], [1, 1, "journal.md"], [4, 4, "notes/bret-victor/index.md"], [1, 1, "unbreakable-links/README.md"], [1, 1, "unbreakable-links/index.js"]]}, {"committer": {"date": 1539875446, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fc235bd7842340811d4e1232cc49ed4e6ed5013c", "parents": ["019bd1e2998e9a8ac911b099266f56c61827e8ba"], "commit": "2d450cdc12e13028f172f29839415d7f071b4087", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "75993443bf38dd69f246547ef4bdab27f2b3b2b3", "parents": ["601d7a2efd51a72e9d6410c9632b4b763006fedb"], "commit": "019bd1e2998e9a8ac911b099266f56c61827e8ba", "message": "updated homepage text", "changes": [[5, 3, "index.html"]]}, {"committer": {"date": 1539363599, "timezone": "+0100", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1539363599, "timezone": "+0100", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0c527c51d6003dd4ddbfc838f175f4c6b4758ca1", "parents": ["3111f8ca250a5ca28f43691f5e1690b3d5097aa8"], "commit": "601d7a2efd51a72e9d6410c9632b4b763006fedb", "message": "underline time on hover to clarify its a link", "changes": [[3, 0, "episodes/31.md"]]}, {"committer": {"date": 1539332462, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "882db18bbf1841110c48c8f1b15abe0953c93917", "parents": ["4090545c52864c7d986ab452059fdf22c7843972"], "commit": "3111f8ca250a5ca28f43691f5e1690b3d5097aa8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1239d9763336786db4a79755f1bf339cac2bd22", "parents": ["93aec407e10eeb08294f95b1380cf4a3fa408f1f"], "commit": "4090545c52864c7d986ab452059fdf22c7843972", "message": "added episode 31, nadia", "changes": [[478, 0, "episodes/31.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1539029553, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bd4ca48038931c9b0e3c2da97b0536d56b4cdde7", "parents": ["76bb266e6e487809d966dc2e6a2bb4e5e40a5dbc"], "commit": "93aec407e10eeb08294f95b1380cf4a3fa408f1f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a82ec42071f47d88077592e12be5c56a7469903", "parents": ["094b43a3c8a8e630eb00c3ceda981dc2c1666145"], "commit": "76bb266e6e487809d966dc2e6a2bb4e5e40a5dbc", "message": "added transcript direct linking", "changes": [[10, 0, "episodes/30.md"]]}, {"committer": {"date": 1539028779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "37be344dc5dcae8160f2ef3cc56f75bc3a4256f0", "parents": ["ab12143aeefb69e8f367bc2107914ca4550901c4"], "commit": "094b43a3c8a8e630eb00c3ceda981dc2c1666145", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "430791fbad3712dbf3289d4fb55f6881459dfa37", "parents": ["46b6989fcfa803bfc1fb14bca0891273fc8378a8"], "commit": "ab12143aeefb69e8f367bc2107914ca4550901c4", "message": "## Shower note 10/3/18\n\n![img_0095](https://user-images.githubusercontent.com/2288939/46630530-62bf9880-cb3c-11e8-9120-86bf88c58311.jpg)", "changes": []}, {"committer": {"date": 1538827096, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "430791fbad3712dbf3289d4fb55f6881459dfa37", "parents": ["d00cf61639772941f4e67d4fd6e1b504f0c5104e"], "commit": "46b6989fcfa803bfc1fb14bca0891273fc8378a8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "603a98d8b464bd3ee849f19154f6882df23fd680", "parents": ["2f3fe212fba27cc35f290356217b3a5f0f68b930"], "commit": "d00cf61639772941f4e67d4fd6e1b504f0c5104e", "message": "## New city, new framing\n\n* TOC\n{: toc }\n\n### Move to London\n\nMy girlfriend and I moved to London this past Monday. I haven't done any proper work since then, I've been so busy getting our home set up. The trickiest bit was the internet, both wifi and mobile, but I solved it for now with a combination of a mobile wifi hotspot and Google Project Fi with a Google Pixel 2 XL. the jetlag is also annoying. I am hopeful that I'll get back to a real work cadance the week after next, with some work done next week.\n\n### New framing customization conversation\n\nI’ve been (very much in the back of my mind) developing a new framing for my work that I have (somewhat successfully for the first time last night) explained at parties to lay people. (Halfway down this partly-true account, I delve into more technical details than I would not do with a lay person.)\n\nMe: I am working towards a world where people can modify the apps they use while they are using them. The dream is to abolish the “settings menu” of each app, because you can literally modify anything about it. For example, what’s an app you use every day - email? Could you imagine any ways you’d want to change it to suit your workflow better?\n\nParty Person: I can’t think of anything... I’ve never thought of it before.\n\nMe: Exactly! When you can’t change anything, it doesn’t occur to you how it could be better changed. Do you ever question changing the speed of gravity? That’s the first step: enfranchisement, empowerment. Once you realize that you can change things, you won’t be able to stop yourself for coming up with ideas for improvements. For example, I would like to be able to have my email remind me in 3 days when someone I emailed doesn’t email me back, but only when my phone's location is at the office because I don’t want to be bothered at home. That’s custom logic that’s impossible today for no good reason.\n\nPP: That's neat... but many people can barely even use technology as complicated as it already is. Who would really want to change things?\n\nMe: That’s a great point. I don’t think my grandparents would ever customize anything. Neither my parents probably. However, if customizing software became as easy as I hope it can be, I can imagine a world where my father, a businessman, would hire a tech firm to customize much of his firm’s software to their needs, like they now hire a consulting firm to customize their Salesforce for them. But that’s all down the line...\n\nRealistically my main users will be other programmers like myself. You'd think that programmers today could customize the apps they use, but not at all. Today if Gmail open sourced itself, it would be as impossible for me to change any part of it. The codebase is simply to large and the coding style too unwieldy for a single person to comprehend and change it. However, with the new programming language I envision, it should take me a reasonable amount of time (a couple hours, depdening on the task) to customize the software I use in the course of using it -- similar to using a settings menu, but on a bigger scale.\n\nThis new language would unleash the creativity of millions of programmers to improve the apps they use all the time! In the past, open-source software only worked for developer-facing projects like operating systems and programming languages, but with this new language, I think we could build open-source versions of BETTER quality than company-created apps. We have more people and time at our disposal than any company! If this sounds crazy, people thought that a regular-person-created encyclepedia was crazy, yet all the world needed to make an encyclepedia better than any private company's was the platform of wiki software. I believe a similarly democratizing platform could exist for software itself. Do I sound crazy?\n\nPP: Um, a bit < ... nervous laughter ... > But don’t all those apps have proprietary licenses and content deals in place?\n\nMe: Yeah, I don't know how we'd get around liscening deals, such as the ones Netflix have. But as far as other proprietary stuff goes, we could rebuild it in this new language, such as rebuilding social networks into open, federated protocols like Mastadon. (I do worry that Facebook is so big and high-quality already that it'll be difficult to compete with it, but I hold out hope!) It was the same when open-source started. At first, all the offerings were made by large companies and that was assumed that was how it had to be. Then Linux and git, distributed version control changed everything. I think making software customization 100x easier would cause an even more disruptive shift in the way software is consumed and produced. If software is eating the world, I want individuals, not massive organizations to be doing the eating.\n\nPP: Wow. I guess that makes sense... But it’s also nice to have things uniform, such as a back button in the same place in all my apps, and all my connected Google services.\n\nMe: That’s a good point. There’s a lot to be had from centralization as well (until Google shuts down or ruins your favorite service). There are always trade-offs in these things. It’s hard to imagine the solutions to those problems now -- like it would’ve been impossible to imagine Two-Factor Authentication before the web was created -- but I believe we can make a decentralized world as convenient, or even more so, than a centralized one because everyone will be empowered to improve things that they think need improving. Maybe paid services would pop up that would help transport your data between apps.\n\nPP: When you say “decentralized”, do you mean “on the blockchain”?\n\nMe: <... laughs and shakes my head ...> Honestly I have no idea. It's a complex question: who has control of what. Another essential problem: how to manage millions of slightly different versions of the same piece of highly customized software. That alone is an incredibly difficult research question! I’m currently just working on a piece of a piece of a piece of this puzzle.\n\nPP: What piece are you working on now?\n\nMe: I’m working on the visual side of things, building an interface that’s similar to a WYSIWYG like Squarespace or Weebly or Microsoft World but can create any arbitrarily complex interface that code could create.\n\nPP: Oh, that would be useful.\n\nMe: Yep. It’s the holy grail. People have been working on this for decades. My old boss Lloyd Tabb worked on it at Netscape in the 90s. Then he was optimistic as myself, but after beating his head against this problem for years, he believes it’s impossible. I’m still optimistic. There has been a ton of amazing research in the past decades since then, particularly in the field of functional and functional reactive programming.\n\nPP: Do you really think someone who doesn’t know how to code would ever be able to make any significant change to the apps they use?\n\nMe: I really do. For three years I taught coding to people of all ages and skill levels, but mostly beginner children aged 8-13 years old. I learned that the right programming environment makes all the difference. We used MIT Scratch which allowed many students who had never coded before to finish a full whack-a-mole style game in a single class without much of our help! I believe that with the right programming environment and proper motivation, anyone that can read can learn to code. I am hoping to solve both problems with a single solution: if we build a programming environment that allows people to customize the apps they use, we will have also provided them with the motivation to learn how to do it.\n\nPP: So is this even possible?\n\nMe: I intend to spend my career finding out.\n\nPP: Well, good luck with all that.... I see my friend. Great meeting you.", "changes": []}, {"committer": {"date": 1538572732, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1538572732, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "603a98d8b464bd3ee849f19154f6882df23fd680", "parents": ["8e71295e605ba42458cb6278467215d5090673df"], "commit": "2f3fe212fba27cc35f290356217b3a5f0f68b930", "message": "updated frp paper to final version", "changes": [["-", "-", "papers/comprehensible-frp/comprehensible-frp.pdf"]]}, {"committer": {"date": 1537985652, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b953d840b4df4bf85e439b7001afe678fe016c2c", "parents": ["63eb8b5f7088531e3959052e4cf9b5de2fafa59a"], "commit": "8e71295e605ba42458cb6278467215d5090673df", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7374c930109e79aa0c808b839db1eaa701a5fb35", "parents": ["fe1192b2e67021d2e90b9be85cbb616c310e72a4"], "commit": "63eb8b5f7088531e3959052e4cf9b5de2fafa59a", "message": "frp essay feedback, meeting with JE", "changes": [[36, 0, "notes/jonathan-edwards/09-26-18.md"], [206, 0, "papers/comprehensible-frp/feedback.md"]]}, {"committer": {"date": 1537972807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e501a1ceba8a745ba9f620a8eabe597197e3b46", "parents": ["e631ba9cc2659ffb0e2106f84920e6d18d64f1a6", "9cf50e678ff582d11e0cc32d6af487a654a61f75"], "commit": "fe1192b2e67021d2e90b9be85cbb616c310e72a4", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1537972703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5a700eabec3d037c5aeb55b54f734ee5e38b412c", "parents": ["4415a04ed70e3944c2fa54e23528720586de203f"], "commit": "e631ba9cc2659ffb0e2106f84920e6d18d64f1a6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2fdbfb06ecfac3d2329369e76a8477fefba1d8fd", "parents": ["ab202057a02d7817cbcf07ecdcc95a75a88c94ce"], "commit": "4415a04ed70e3944c2fa54e23528720586de203f", "message": "## Lots of random updates Sept 2018\n\n* TOC\n{: toc }\n\nI've had a lot of trouble getting this log entry out. I just got backed up with stuff and then it got harder and harder. I will try in the future to spurt out shorter updates because this was overwhelming and no fun.\n\n### What is \"this thing we all talk about\"?\n\nNames are hard but names matter:\n\n

What field are these people of?

Vaneer Bush (Memex), J. C. R. Licklider (ARPANET), Ivan Sutherland (GUI), Douglas Engelbart (computer mouse, “the mother of all demos”), Seymour Papert (LOGO), Alan Kay (OOP, desktop metaphor), Ted Nelson (hypertext), Mitch Resnick (Scratch)

— Steven Krouse (@stevekrouse) September 15, 2018
\n\n\n

Agreed that a name doesn't *really* matter, but as @geoffreylitt says, it's nice to be able to have a phrase instead of handwaving with "you know, the topics that we're interested, related to Alan Kay, Bret Victor, Engelbart..."

— Steven Krouse (@stevekrouse) September 17, 2018
\n\n\n### Reading\n\n#### Enlightenment now\n\nBest book I read this year. So amazing. What an optimistic vision for the future. The opening of the book has a quote from one of my dad's favorite philosophers, Spinoza, as well as one of mine, David Deutch. Highly recommend this book to anyone anywhere, but especially people who are anxious about the future. In short, I would vote for Stephen Pinker for president (of anything) after reading this.\n\n##### LogicHub + betting market\n\nRead this also gave me hope for a LogicHub platform for ideas. In the past, I figured we'd \"teach\" people to be logical and then let them loose to do their crowd-source-y thing, but after reading this book I wonder if we would want to make it more like a betting market in some ways. What's neat about a betting market is that:\n\n1. It encourages you to be more thoughtful because you're \"putting your money where your mouth is\"\n2. It allows people with contrarian opinions to move the market towards their opinion based on how sure they are on their opinion\n\nWhat's not great about a betting market is that its \"resulting\" (term from *Thinking in Bets*), the decision-making process is opaque so we can't share or improve on each others' thoughts. It'd be great if we could somehow create a place where you could show your decision-making-process as well as take a stand for your conviction and then eventually get the benefit (or not) when time shows \"who wins.\"\n\n#### How to change your mind\n\nTurns out many of our heroes in this \"field with no name\" did LSD and it got me pumped:\n\n

🤯 Engelbart did LSD! To aid in problem solving!! (from “How to Change Your Mind”)

— Steven Krouse (@stevekrouse) September 18, 2018
\n\n\n#### Kartik Agaram\n\nMe finding Kartik's work is a success story in our wonderful internet research community. In the Future of Programming Slack, Stefan Lesser tried to galvanize us around RSS feeds, then Nikolas Martens posted his list, which Daniel Garcia then found Kartik's work in! Really a team effort.\n\nI am in LOVE with his /about page and want to use it as a jumping off point for a new draft of my own /about page:\n\n> I'm working on ways to better convey the [global structure of programs](http://akkartik.name/post/readable-bad). The goal: use an open-source tool, get an idea for a simple tweak, fork the repo, orient yourself, and make the change you visualized -- all in a single afternoon. Understanding a strange codebase is hard; I can't change that, but I think I can make it easier for people to persevere. I want to carve steps into the wall of the learning process. I want to replace quantum leaps of understanding after weeks of effort with an hour of achievement for an honest hour (or three) of effort.\n>\n> This focus on helping outsiders _comprehend_ a project is unconventional. I'm less concerned about the [readability](http://akkartik.name/post/readable-bad) of a codebase. I find the usual rhetoric around ‘readability’ tends to focus on helping authors merge contributions rather than helping others understand and _appreciate_ their efforts. If you've ever seen an open source project whose CONTRIBUTINGdocument consists of a nit-picky list of formatting rules and procedures for submitting patches, you know what I mean. There's a paucity of guidance earlier in the pipeline, when newcomers aren't thinking about sending a patch, just trying to understand the sea of abstractions, to keep their heads above water. I think improving this guidance might greatly increase the amount of citizen involvement in open source, [the number of eyeballs reviewing code](https://en.wikipedia.org/wiki/Linus%27s_Law), rather than simply using projects and treating their internals as [externalities](https://en.wikipedia.org/wiki/Externality)until the next [serious security vulnerability](http://heartbleed.com/). Our society is more [anti-fragile](https://en.wikipedia.org/wiki/Antifragile) when there's greater grassroots oversight of the software that is [eating our world](http://www.wired.com/business/2012/04/ff_andreessen/5).\n>\n> Everyone doesn't have to understand every line of code that helps manage their lives, but all software should _reward curiosity_.\n\nSurprisingly and also excitingly, I think Kartik and I disagree on a number of points on how to reach this shared goal. I'm excited to read some of his posts soon and figure out why. Here are some I want to start with (some were recommended by him and not written by him) but I imagine I'll read 'em all shortly:\n\n* http://akkartik.name/post/libraries\n* https://lobste.rs/s/zyomiu/what_does_it_mean_design_software_well#c_yvvkwm\n* http://wiki.c2.com/?BlubParadox\n* http://blog.cleancoder.com/uncle-bob/2017/10/04/CodeIsNotTheAnswer.html\n\n#### Spreadsheet-paradigm deep dive\n\nFor Dark, I did a deep dive on the spreadsheet paradigm. I want to write more about this but don't have the time at the moment. The thoughts are in [this private google doc I can hopefully make public soon](https://docs.google.com/document/d/14Tw387o_rnpa7Ru2n5ZpAabiCTrlm3Oan69UCmks6xE/edit#)\n\nOne fun picture (will find this later) is that Forms/3 beat APL at its own game (matrices) - I think they did a user study to \"prove\" this.\n\n

Turns out my seemingly-novel ideas for improving spreadsheets were in Lotus Improv in 1990 https://t.co/GF8B9l1sy0

— Steven Krouse (@stevekrouse) September 11, 2018
\n\n\n### Last NYC FoP meetup\n\nThe NYC Future of Programming meetup went out with a bang. (It's likely not the last one forever, but it's the last before I move to London so will have to wait till I visit or someone takes it upon themselves to continue.)\n\nJason Brennan talked about Beach which was amazing. I find myself inspired by his ideas, including the infinite canvas for a programming language.\n\nThen after some technical (and climate) difficulties Corey spoke about his experiences from Eve. He mentioned how raising VC money probably wasn't the right move. Now he's finishing his degree and is teaching coding with robots and building his language/environment (called Mech) to support that. Mech is quite similar to Even in many respects, which is quite exciting.\n\nJosh Horowitz (from Dynamicland) talked about Pane, his functional programming node-and-wire prototype that he's presenting at SPLASH. One of the key ideas is that he's reversed it: the nodes are data and the wires are functions. This makes a lot of sense when you are trying to show the data. We met up afterwards to chat for ~2 hours about these ideas - hopefully we can meet up again this week to continue. My current thoughts are very much in this direction.\n\n### First podcast sponsorship offer!\n\nI got an email *during the Future of Programming meetup* from Amjad from Replit, offering to sponsor the podcast! This is a huge deal to me, even from just a \"stamp of approval\" perspective. But also the money will help pay for transcripts for episodes which people have been asking about, and other various upgrades. Big win!\n\n(I also want to be careful about this, so if anyone isn't down with this or how I mention them in the beginning of episodes, I am all ears.)\n\n### bretvictorfan.club\n\nI am sorry that this will make likely Bret uncomfortable, but I hope he'll realize that it's in the best possible spirit of love, respect, and admiration for his ideas.\n\n

I think I'm gonna do it... pic.twitter.com/9wKgw8b7g8

— Steven Krouse (@stevekrouse) September 19, 2018
\n\n\n### shower notes july, aug, sept 2018\n\nI have been doing a poor job of moving my shower notes into a digital form of any sort over the past few months. I figured I'd put em all here in case anyone's curious. You never know - sometimes I get those \"in your shower notes from last year you said...\" emails.\n\n![image](https://user-images.githubusercontent.com/2288939/46044930-2b87cb00-c0ea-11e8-9855-c6113b619d33.png)\n\n### prototype 4\n\nThe [future work](https://futureofcoding.org/papers/comprehensible-frp/#7-future-work) section of my paper talks about visual metaphors for FRP. While I do think this is quite important in order to \"democratize visual intuition\" ([Penrose](http://penrose.ink/)), I wonder if it's necessary. What if we take normal FRP haskell-ish notation as a starting place and simply augment it with LIVE-ness, such as an interpreted environment, showing data, and evaluating as far as possible even when there are holes (Cyrus Omar's work). Geoff Litt and Paul Chiusano suggested that expressions with holes are just functions with those holes as parameters, and we could put a slider or examples values in there. Always concretions, never pure abstractions.\n\nHere's another idea I've been toying with: Jason's Brennan's notion of a programming environment on an endless canvas, like in Sketch or Photoshop. One thing this could enable is a structure-less structured editor - in that you could put together pieces of expressions in various places and combine them later. I guess this would be similar to Scratch or Blockly... which I don't love... One possibility is to use the layer metaphor from Photoshop as a programmatic abstraction, but I don't know what that would mean exactly yet.\n\nMy first thought was to build this as a FP thing first and build my way up to FRP. It could be the [data slice-and-dice ninja thing](https://futureofcoding.org/log#yesterday%E2%80%99s-slice-and-dice-data-ninja-playground), starting with JSON/CSV slice, dicing, and joining -- this is related to [datafun](http://www.rntz.net/datafun/).\n\nBut then I went ahead and did a drawings for it as an FRP platform:\n\n![img_0032](https://user-images.githubusercontent.com/2288939/46086431-122c6080-c176-11e8-8a3c-214ab5e09154.jpg)\n![img_0033](https://user-images.githubusercontent.com/2288939/46086528-4acc3a00-c176-11e8-9be7-d5e9017bca9a.jpg)\n![img_0034](https://user-images.githubusercontent.com/2288939/46086472-296b4e00-c176-11e8-9974-441aaf189d39.jpg)\n![img_0035](https://user-images.githubusercontent.com/2288939/46086469-26705d80-c176-11e8-85a8-852189cef443.jpg)\n\n### Accepted to REBLS 2018!\n\nVery exciting, getting my first paper accepted. Got a bunch of feedback to read and then incorporate. Will read it this afternoon, take notes, put them here, and then meet with Jonathan Edwards about it as well.\n\n### New framing of my work\n\n(This is related to the new /about page Kartik has inspired.) Software is never really ever started but only incremented, added to, improved upon. Thus the key is to shoot for customize-ability, modify-ability, change-ability, mold-ability - I want to evoke clay, play-doh, etc. This would truly catalyze the computer revolution because regular people would be able to *modify the software they use*. (The killer app for this language/platform could be a build-your-own-email-app thingy. I can imagine a world where top-level execs hire college grads to help them customize their email app workflow.)\n\nIn order to achieve this, we need the two pillars of comprehensibility (understand what's up quickly) and composibility (plug and play with existing pieces).\n\nFunctional programming is great but we need solid abstractions to fully liberate it from the Von Neuman architecture (Out of the tarpit, Conal). For example, Reflex > Redux (my paper), but we need to make FP and FRP usable with LIVE and other visualizations.\n\nCurrently, I'm working on drawing out various prototypes. I want to stay in this phase for a while, making sure I know what I want to build, getting feedback on it from Jonathan and other smarties. Next step is to scope it down to a reasonable prototype and to go code.\n\n#### New framing open questions:\n\n* would JetBrains MPS be hepful here as a way to build a structured editor for live-ness?\n* can I use an existing language or do I need to start that from scratch as well...?\n\n### Todos 9/26/18\n\n* Get replit.com sponsorship started (draft copy)\n* Fix up Explicitly Comprehensible by Sunday\n* Edit Nadia Eghbal podcast\n* Read all of [Kartik](http://akkartik.name/)\n * Re-do my /about page\n* Continue with prototype 4 / new framing of my work...?\n* Organize FoC Thinking & FoC Research lists from Google Inbox", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1537799987, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1537799987, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c3a43bbe3883e1720f5ebda45678f8806ecf390e", "parents": ["b16ded2435685afbec9ffe90701e7f581ea16000"], "commit": "9cf50e678ff582d11e0cc32d6af487a654a61f75", "message": "added Cubix link", "changes": [[1, 0, "episodes/30.md"]]}, {"committer": {"date": 1537799876, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1537799876, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a72c74d94a4bb9ffd581c495abc6f73bda44c3dc", "parents": ["ab202057a02d7817cbcf07ecdcc95a75a88c94ce"], "commit": "b16ded2435685afbec9ffe90701e7f581ea16000", "message": "fixed Theil typo", "changes": [[1, 1, "episodes/30.md"]]}, {"committer": {"date": 1537645360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b5be5ddc2f2ffcaed9fba7d89ef668dfe46c983", "parents": ["440e89ea14b15089bcb523f462b71d2ca3c126b4"], "commit": "ab202057a02d7817cbcf07ecdcc95a75a88c94ce", "message": "updated git log", "changes": [[0, 6, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a8b7fc5ffd1a3d941c535599842a9b73e31ba77", "parents": ["457d7011799a9667ef3149d5836d955ad0c52a75"], "commit": "440e89ea14b15089bcb523f462b71d2ca3c126b4", "message": "working on fixing strange git bug...", "changes": [[7, 0, "_data/files.csv"]]}, {"committer": {"date": 1537644402, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e582f0db46e6c8808483dd15b4e187e3f474dfe", "parents": ["7816da98ca5dcb5a62b5e4ea968d69c9e88ffb83"], "commit": "457d7011799a9667ef3149d5836d955ad0c52a75", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e9e59e371c61db2631cab87acb5bf3a4abbe866", "parents": ["8104ba62a8543d2c73fb2321022563a56498689a"], "commit": "7816da98ca5dcb5a62b5e4ea968d69c9e88ffb83", "message": "added episode 30, james koppel", "changes": [[1157, 0, "episodes/30.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1536683911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d366d84c39fc46fe9a86e28039cdbb6a73397df8", "parents": ["138641ea1454e5d2379dcbc144e0c068138dd3d2"], "commit": "8104ba62a8543d2c73fb2321022563a56498689a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3f62c9f1ef23fce4294d5fe01b5cb7d0cf1e18c9", "parents": ["c91b94928e098cf0f0c1ed4c5ae9cdf3b5a2a812"], "commit": "138641ea1454e5d2379dcbc144e0c068138dd3d2", "message": "## FRP Morning 9/11/18\n\n* TOC\n{: toc }\n\n### From Debugging Towards Live Tuing of Reactive Applications\n\nI was sent this paper by Jonathan Edwards for feedback to the authors. It was recently accepted into LIVE. It was right up my alley. It's the notion of taking the DAG visualization of a FRP app, but making it editable at the visualization level, similar to a node-and-wire environment, such as Facebook Origami. It was a fun read, and I gave a few notes to the authors.\n\n### Beautiful Conal Quotes\n\nThere are a few things Conal said that have really stuck with me, so I took the time to transcribe them and put them [here](/notes/conal-elliot). But I'll paste them below as well because they are just so wonderful:\n\n> It’s important to me that you cannot look in a behavior and say like “when does it change (change in the sense of events)?” Because in order to answer that question One would need a more complex semantic model.\n> Now, many or most so-called FRP systems I see out there do have some notion of “when does something change.” And every one of those breaks the semantic model.\n>\n> It’s like you have arithmetic, right? So FRP is arithmetic for time-varying quantities of all sorts of types. By arithmetic, I mean some algebra, some set of operators that have nice laws, nice properties. And imagine if you thought of arithmetic as about compositional structure or about the express that you evaluated.\n>\n> If you added 3 and 4, can you tell tell the difference between that and what you get by adding 2 and 5? It’s very important to the laws of arithmetic that you cannot tell the difference. If you could tell the difference, then what you would have would not be a type of numbers with a nice set of operations. It would be something more like a type of trees or something like that. And there would be no interesting equational properties. And you’d have something very complicated. And you’d have to talk about your API instead of talking about... You wouldn’t be doing math, you’d be doing data structure manipulation.\n>\n> For instance every time you hear somebody talk about FRP in terms of graphs or propagation or something like that, they are missing the point entirely. Because they are taking about some sort of operational, mechanistic model, not about what it means.\n>\n> And what I see happen over and over is not only do people generate a complex model but they don’t know it’s complex because they haven’t looked at it precisely. And they thwart most attempts to do nontrivial optimization’s because they’ve exposed too much information. So I want to make it as abstract and useful as possible, so it’s simple for somebody to think about, and I can do radically different sorts of optimization experiments.\n\nOf course, this doesn't mean that a \"debugging engine\" can't break these abstractions to keep track of these things so as to aid you in understanding. The key is that the programmer cannot break this abstraction at the semantic level, so we can do creative optimizations, etc. In other words, I can write `3+4=2+5` and we can talk about each of those four numbers indepdenently. They don't immedialy collapse to `7=7` the instant I write them down.\n\nI also love this beautiful quote about functions as boxes and values as flowing across arrows:\n\n> It's an inherently first-order visualization. In other words, the visualization itself makes a hard visually syntactic distinction between functions and values. What's great about functional programing is that functions are values... [with] visual arrows, with every composition, you get something more complex than what you had before. Complexity grows and grows and grows. Visual langauges are very sparse, rather than a dense notation. So pretty quickly you get swamped... You use up a lot of space not saying very much.\n\n### Feyman Method to Solving FRP Notation\n\nThe method is:\n\n1. Write down the problem.\n2. Think very hard.\n3. Write down the solution.\n\nHere's what that looked like:\n\n![image](https://user-images.githubusercontent.com/2288939/45373019-63f0ba80-b5bc-11e8-92c0-e7e894314bfc.png)\n\nWhat I decided was (for now) to give up on wires and arrows to visualize flow and depedencies. Instead I want to be more creative about showing those things, such as spatial arrangement, labelling (including colors, words, and on-hover interactions), etc.\n\nI then pseudo-coded a few classic GUI problems. (I may steal other problems from [7GUIS](https://eugenkiss.github.io/7guis/).)\n\nWhat I discovered here is that the classic notation of FP isn't all that bad. (That's not quite true. For example, [Conal's original bouncing ball](https://futureofcoding.org/log#bouncing-ball-solved) is tough to read. More on this in the todos below...)\n\nThe problems are:\n\n#### 1. Expression construction made \"live\" & \"concrete\"\n\nYou want to be able to construct these expressions in any order, such as:\n\nA) Start with an widget, like a button, and then derive some state from it, and then plop it back in itself.\n\nB) Start with a notion of some state (you haven't yet defined), and build up a widget from that state, which then can be defined in terms of the widget.\n\nSelf-referencing makes this possible more difficult, but nothing a structure-y editor couldn't solve.\n\n#### 2. See the dataflow behind behaviors & events\n\nI dont see any reason why this shouldn't be possible as an \"overlay\" of some sort on top of the classic FP notation.\n\nI can also imagine an on-hover interaction to functions that allow you to visualize how they transform their inputs into their output, such as [this one](https://futureofcoding.org/log#lets-visualize-all-the-fp-list-operators).\n\nIt'd be neat to have an over-arching shape of an application so you can visually get a sense for how it fits together, but I don't know if anyone's done that yet. Node-and-wires don't tell you much: they tell you less than regular FP syntax, and often in more confusing ways.\n\n#### What's the type of FRP Widgets?\n\nI'm not clear on what the \"type\" of widgets should be -- that is, what they \"return\".\n\nAre they a \"structure\" of some sort that you can then get various event streams (such as click) \"from\"?\n\nOr should they simply return the (or a list of the) event stream(s) that they \"contain\"?\n\n### Blur the line between front & backend\n\nIn the past I called this idea \"higher level HTTP requests\" or \"HTTP = JQuery\". Here are some thoughts I put on Twitter along these lines yesterday:\n\n\n\n### Next steps 9/11/18\n\n* pseudo-code more GUI problems, possibly from [7GUIS](https://eugenkiss.github.io/7guis/), building up to ToDoMVC\n* think about what and where traditional FRP syntax is difficult (such as [Conal's original bouncing ball](https://futureofcoding.org/log#bouncing-ball-solved)), and also more modern syntaxes... re-check out PureScript in this vein", "changes": [[12, 2, "notes/conal-elliot.md"]]}, {"committer": {"date": 1536443596, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536443596, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9fb88ce02314463fbaaf17f2414ece4c0829f3c6", "parents": ["760bef72611f0aecc1a83ef1a1c8eb3f0c99c254"], "commit": "c91b94928e098cf0f0c1ed4c5ae9cdf3b5a2a812", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1536443201, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1536443201, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "957e8ea461285928b233783bd4dc829a6c4917c4", "parents": ["d3a45ade4511110945e12486b823bf444b00c346"], "commit": "760bef72611f0aecc1a83ef1a1c8eb3f0c99c254", "message": "## Candlewood Lake Vacation, etc\n\n* TOC\n{: toc }\n\nAs expected, I haven't gotten much done here the past few weeks. I was\non vacation and wanted to do more freelance stuff, which I did. I'm\nalso reading a great series of novels by Robin Hobb which are\ndistracting. However, I'm excited about all the chatter around my\npodcast, tweeters, on the Slack group. Thanks to all that listen, and\nespecially to those that write in - even just to say hi!\n\n### Foundations\n\nI've been thinking a lot what we take for granted, and questioning\neverything. So why not the foundations. There's the Turing Machine\n(wah ich is the epitome of inelegant) and Lambda Calculus (which is a\nmillion times better by comparison). But can we do better? Are there\nother alternatives? I did some Wikipedia-ing, but didn't come up with\nmuch interesting. Here are some links:\n\n*\nhttps://www.reddit.com/r/AskComputerScience/comments/78wnv4/is_there_an\n_alternative_to_lambda_calculus_as_a/\n* https://en.wikipedia.org/wiki/Process_calculus\n*\nhttps://en.wikipedia.org/wiki/Category:Term-rewriting_programming_langu\nages\n\nI'm going to this [whacky workshop in\nItaly](https://programme.hypotheses.org/autumn-workshop-formalisms-at-t\nhe-interface-with-machines-languages-and-systems) next month that will\nhopefully encourage me to think outside the box on these topics. What\neven *is* a computer program?\n\n### Misc links\n\n* [Datafun](http://www.rntz.net/datafun/) - functional query language!\nVery cool. Along the lines of the question I've been having about why\nwe have different data structures in databases vs in our languages.\n* [Wolfram on Math\nNotation](https://www.stephenwolfram.com/publications/mathematical-nota\ntion-past-future/) - very good. Thought provoking!\n\n### OAP - open authorial principle\n\nI've been having fun Twitter conversations with\n[Antranig](https://twitter.com/amb26ponder) (who I think lives in\nLondon!). He has [a really cool paper on this\nOAP](https://github.com/amb26/papers/blob/master/onward-2016/onward-201\n6.pdf), which is very similar in spirit to r0ml's notion of \"liberal\nsoftware.\" Many of the examples were in about object inherentance in\nJava which I am allergic to, but I love the idea of formalisizing this\nideal.\n\nWhat are the key actions that need to be enabled for this principle:\n\n1. Finding/understanding all relevant sections in the code. (This is\nrelated to my recent work.)\n2. Making the change (including previewing it)\n3. Managing various versions\n\nI also had two other interesting, random thoughts:\n\n1. The \"Settings Menu\" is a list of global variables you can set to\nrange of pre-defined constants\n2. Where does composability play into the OAP?\n\n### Todo 9/8/18\n\n* \"Future work\" - better \"notations\" for higher-order streams (as in\nReflex). I should be able to get 5-10 hours here this week. That's the\ngoal at least.\n* Organize \"FoC Thinking\" - I've been collecting a list of things to\nthink about in my inbox, but I'd like to get that somewhere public.\n\t* at the top: https://eugenkiss.github.io/7guis/\n* Organize \"FoC Research\" - same idea but more for things to read for\ninspiration, like papers\n\t* at the top: https://github.com/hypotext/notation", "changes": [[1, 0, "log.md"]]}, {"committer": {"date": 1535468707, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f7a64f097b8475d03768a7486919748250669dd0", "parents": ["31838cb3ba540a823236c8920f29114cb637efb1"], "commit": "d3a45ade4511110945e12486b823bf444b00c346", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "61bd44823e44ffa30707b84cf6dd3332e868c0d5", "parents": ["2cb7b93a9dd10679b6f900438ed664d78ef6a384"], "commit": "31838cb3ba540a823236c8920f29114cb637efb1", "message": "add woofjs workflow to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1535398329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ea41727f212e21c3f40b50da21750ac51c9d028", "parents": ["1853da463483be7bb9495b66a7215feba61b9d2b"], "commit": "2cb7b93a9dd10679b6f900438ed664d78ef6a384", "message": "updated git log", "changes": [[5, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc91374e6cdfe918b4247feda780c77fe14edd05", "parents": ["198556aca1735db6219365d43363fa87c4556326"], "commit": "1853da463483be7bb9495b66a7215feba61b9d2b", "message": "added reflection 13, podcasts 28 and 29", "changes": [[44, 0, "episodes/28.md"], [23, 0, "episodes/29.md"], [2, 0, "index.html"], [4, 0, "notes/aaron-kent-call-9-15-17.md"], [118, 0, "notes/jonathan-edwards/06-14-18.md"], [140, 0, "notes/jonathan-edwards/07-10-18.md"], [92, 0, "notes/jonathan-edwards/08-21-18.md"], [64, 8, "reflections/13.md"]]}, {"committer": {"date": 1535323079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "38b44287889769c52dad7fde674d1422c971213e", "parents": ["d1abf772486931f25b757ffaf93c30966f7d6b10"], "commit": "198556aca1735db6219365d43363fa87c4556326", "message": "updated git log", "changes": [[94, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab9a9f7961c2f49c174365b980ad0e7e943559ae", "parents": ["5f41ce04e95929074d60290a4b25e2b1466299e0"], "commit": "d1abf772486931f25b757ffaf93c30966f7d6b10", "message": "attempting to add directory listings...", "changes": [[36, 3, "404.md"], [5, 0, "README.md"], [0, 1, "notes/index.html"]]}, {"committer": {"date": 1535321825, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "081c0350ad966bc567d67d414c019218128b94cd", "parents": ["7ef007826b5d36c7b10de50b4f6c5075312f5583"], "commit": "5f41ce04e95929074d60290a4b25e2b1466299e0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da2543021094982c194c86ed183b3db2a94455df", "parents": ["624d805a08ad51845658edeb0eda31ff0f2d7326"], "commit": "7ef007826b5d36c7b10de50b4f6c5075312f5583", "message": "add sitemaps", "changes": [[2, 0, "_config.yml"]]}, {"committer": {"date": 1535199813, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1535199813, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "c4e037527c4953c2cc6ff57d4705e62e22a7e282", "parents": ["2554d62622244699c4b78687db33c3191bb0a033"], "commit": "624d805a08ad51845658edeb0eda31ff0f2d7326", "message": "started reflection 13 outline", "changes": [[49, 0, "reflections/13.md"]]}, {"committer": {"date": 1534937625, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1534937625, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f5b3debd20f26441ccf47ffd77b348dee0741a82", "parents": ["fbd86a350730552192edd863b54c8abb0befd4a9"], "commit": "2554d62622244699c4b78687db33c3191bb0a033", "message": "Fix frp draft redirect", "changes": [[2, 2, "404.md"]]}, {"committer": {"date": 1534542152, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "24f205d609bb455fa01edfaf0a2c051c66d3d75d", "parents": ["99e3f93836b5e480ed9382ec983d074eda0f33b8"], "commit": "fbd86a350730552192edd863b54c8abb0befd4a9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "124044ebb598bcdb5322f70681be7e67bbc63ba5", "parents": ["6bff7c5cb005d10bab1b76a7004631a90b6f5990"], "commit": "99e3f93836b5e480ed9382ec983d074eda0f33b8", "message": "fixed LaTeX link", "changes": [[2, 2, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534541885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6bea9488ddf1fbbbbabb7777623c55e9c55f6d11", "parents": ["8be9c9d772ea122f54db871ad41aec5fe8dff524"], "commit": "6bff7c5cb005d10bab1b76a7004631a90b6f5990", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9e5695120319696828eadc169e24b36fb32d0902", "parents": ["64b8083919e2cc6756692f30258d6d59ce404b56"], "commit": "8be9c9d772ea122f54db871ad41aec5fe8dff524", "message": "fix frp paper header typo", "changes": [[0, 1, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534541671, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da7bf5146454d444aab1983232b1da15ba0893a6", "parents": ["342b7b9ec018f2188bb7252a5f7b016c5d8d53d5"], "commit": "64b8083919e2cc6756692f30258d6d59ce404b56", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0cb58451f427686a20339e78362cdf8118e76903", "parents": ["95bad27a4d9e2bbd0b186b7683eecf97197fe068"], "commit": "342b7b9ec018f2188bb7252a5f7b016c5d8d53d5", "message": "## London, REBLS, & future plans\n\n* TOC\n{: toc }\n\n\n### Moving to London!\n\nLast week I got the Exceptional Tech Talent Visa which means I'm moving there on Oct 1. Just bought my plane ticket. Hope to be there for a year or two.\n\n### Submitted to REBLS 2018!!\n\nLast night I submitted my the [the submitted PDF version](./papers/comprehensible-frp/comprehensible-frp.pdf) of the paper to REBLS! It took ~10 hours to translate the [blog version](./papers/comprehensible-frp) to the PDF version! I had a lot of trouble with LaTeX, so I fiuged I should put up the [full LaTex code and associated files ](https://github.com/stevekrouse/futureofcoding.org/tree/master/papers/comprehensible-frp/LaTex) in case it'd be helpful for future independent researchers. Turns out they extended the deadline for another two weeks just now (probably because they didn't get enough submissions), but it's nice to have it behind me.\n\nLooking at the cost of flights to Boston from London, it seems pretty stable, so I don't need to get it yet. I can also register for SPLASH up until Oct 1 for $100 off. I hear back if I get in on Sept 25th.\n\n### Next two weeks (8/20/18-8/31/18)\n\nNext week I agreed to write an essay about Dynamicland. Also, I'm visiting Boston for a few days to visit my programming research friends! I'd also like to do more work for First Round Capital next week. So I don't think I'll have much time here.\n\nThe following week will be more vacation focused with my parents, brothers, and grandparents. I may do a bit of work for First Round and Dark, but not likely work here.\n\n### Future research directions\n\nHere are a few ideas. I'm going to chat with Jonathan Edwards in Boston next week so maybe we can review this together.\n\n#### 1. [Comprehensible FRP's Future work](./papers/comprehensible-frp#7-future-work)\n\nI'm actually very excited about this section. Here's basically the plan. Take the Reflex TodoMVC diagram from this paper and tweak in in Figma a bunch. At the same time, work on getting this stuff to compile in JavaScript somehow. The goal here is very explicitly a language / visual environment. If it's good, I win. If it's bad, maybe I turn it into a paper.\n\n#### 2. [Anti-IO Monad](http://futureofcoding.org/log#my-growing-anti-io-monad-obsession)\n\nThis is a neat line of inquiry but I don't have a very concrete next step here. It's very related to the ideas in this tweet storm:\n\n\n\nAnd the lovely replies:\n\n

Interesting.

2¢ — I think when you push for extreme reductions, throwing away ever more context.. you eventually run into the Berry Paradox (https://t.co/4ULmDa7DPt)

— Ivan Reese (@spiralganglion) August 10, 2018
\n\n\n

sounds like church encoding https://t.co/4Md0GECpXo

— Mariano Guerra (@warianoguerra) August 10, 2018
\n\n\n#### 3. [Slice-and-Dice Data-ninja playground](http://futureofcoding.org/log#yesterday%E2%80%99s-slice-and-dice-data-ninja-playground)\n\nThis is very much jumping to an entirely different problem. It's intriguing, but not as likely.\n\n#### 4. Liberal Software\n\nFrom a motivation/vision perspective, this is important. I'd love to collaborate with r0ml on this.", "changes": [[2, 1, "404.md"], [0, 352, "drafts/frp.md"], [49, 43, "index.html"], [819, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.bbx"], [2894, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.bst"], [5, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.cbx"], [18, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.dbx"], [199, 0, "papers/comprehensible-frp/LaTeX/README"], [88, 0, "papers/comprehensible-frp/LaTeX/acmart.bib"], [2671, 0, "papers/comprehensible-frp/LaTeX/acmart.cls"], ["-", "-", "papers/comprehensible-frp/LaTeX/counter.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-actions.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-architecture.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-entries.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-graph.png"], [47, 0, "papers/comprehensible-frp/LaTeX/frp.bib"], [363, 0, "papers/comprehensible-frp/LaTeX/frp.tex"], ["-", "-", "papers/comprehensible-frp/LaTeX/highlight-actions.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/highlight-entries.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/reflex-graph.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/rxfiddle.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/rxmarbles.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/todomvc.png"], ["-", "-", "papers/comprehensible-frp/comprehensible-frp.pdf"], [357, 0, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534266841, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "00aaebdc15cad776b0f34b2dfe84964154e9ff44", "parents": ["ba882940a80b1ba98625b6bf3d70e6a9fd5bca52"], "commit": "95bad27a4d9e2bbd0b186b7683eecf97197fe068", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2ae2e1149c13fde1392531f475e24cb9728be88", "parents": ["df071f988cff3d6adb8a86709e34d12057c865f0"], "commit": "ba882940a80b1ba98625b6bf3d70e6a9fd5bca52", "message": "fixed frp typos (thanks matt marcus)", "changes": [[7, 9, "drafts/frp.md"]]}, {"committer": {"date": 1534261913, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1856ce64c8b155674610a2748179383fadf9f3b9", "parents": ["d17aec58fed6efab0433df37717d2661f3d531bd"], "commit": "df071f988cff3d6adb8a86709e34d12057c865f0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e41871c8f895bc0fb4fa1f4f3d8f2600f4e4fb09", "parents": ["3c4cbb21b92688aca129a8d0be53f1eb6b76c5ea"], "commit": "d17aec58fed6efab0433df37717d2661f3d531bd", "message": "## Incorporated Jonathan Edwards feedback on frp draft 2\n\n* TOC\n{: toc }\n\nAs usual I received some prompt and insightful feedback from Jonathan Edwards yesterday:\n\n> Abstract\n> scalable->modular, larger->entire\n> “this paper shows how higher-order and cyclic streams can improve comprehensibility.”\n\n✔\n\n> Introduction\n> they depend => they depend upon\n\n✔\n\n> Elm architecture\n> Elm is more like ML than Haskell\n> Defer mentioning higher-order/cyclic streams till later when you define them.\n> Instead: “user interfaces are inherently a cycle of alternating input and output, which is reflected in the Elm architecture”\n\n✔\n\n> Reflex\n> Show the types of button and display\n\n✔\n\n> Note how the do notation is implicitly assembling the view as if by accumulating side-effects from button and display, unlike the explicit construction in Elm.\n\nThe view is very explicitly assembled in Reflex - the vertical order of statements is the explicit order of the view. The \"side-effects\" we get from `button` and `display` are their event streams, which are also explicit. It *is* unfamiliar to use `do`-notation to construct an event propagation network, instead of how it's normally used for imperative code, but that doesn't make this code imperative.\n\n> Is it easy to hierarchically compose views in Reflex?\n\n✔\n\n> delete “we here”\n\n✔\n\n> The price we pay for this explicitness is that events are abstracted from the single values in Elm into a time-stamped stream of values. In Elm we write a global state reducer function that pattern matches on these events. In Reflex we use stream combinators to define the model and view as streams of values of each other. The single global I/O cycle of Elm becomes a number of cyclic definitions between model and view streams in Reflex.\n\n ✔\n\n> Diagrams\n> Finding them a little hard to understand. The top level is the big yellow boxes, but what exactly are they?\n> Categories of some sort? I’d expect the top level of the Elm diagram to be Model, View, and Messages.\n\nThis is a great question. I think this makes it clearer:\n\n", "changes": [[73, 41, "drafts/frp.md"]]}, {"committer": {"date": 1533938667, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b2b724d138d734a174962e9f60a7e9f6c93a117a", "parents": ["e8d146f58c3f897265a6864f98995b8cce4b6db9"], "commit": "514e998799ae0e387b5b262365610aa8fd84d052", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ef1a43fc4c269badcf0ae54b19d1f19b4605459d", "parents": ["236313890011b1a50a959a230e6db62f4f18bf35"], "commit": "e8d146f58c3f897265a6864f98995b8cce4b6db9", "message": "## Added more example code to FRP essay\n\nI added a lot to the essay today. It really feels close, and like it's shaping up. I am aiming to get a completed Draft 2 to Jonathan Edwards by this upcoming Monday.\n\nI added counter button examples to explain Elm and Reflex, and then some ToDoMVC code from each to get into the comparison. I could definitely come up with better example apps (larger would be better), and another way to improve the comparison could be to articulate the Elm Architecture in Reflex (which is supported) in order to keep the syntax more uniform, but I don't have the time for that, especially considering how impossible it is to code in Reflex - at least with the set up I have.\n\nI had a VERY FUSTRATING hour or two today when I was working with ghcjs and Reflex and emacs in my remote shell. My god I hated it. I had to take a break because I felt upset afterwards for an hour or so. I wasn't prepared for how annoying it all was. Such a slooow feedback loop. And so fustrating using emacs! For example, copying and pasting code doesn't work because the formatting gets messed up. Just one example of how everything takes longer.\n\nIn terms of what's left, I have to finish explaining the meat of Reflex TodoMVC, and then maybe explain one other part of Reflex ToDoMVC (should only take another 3 hours), and then write out the \"is the cure worse than the disease\" section (~2 hours), and tie it all together with the related work, conclusion and a final read through and edit (~2 hours). I should be able to spend some time tomorrow and Sunday on this, so we're in good shape for getting it done by Monday.\n\n(In other news, last night at 11:30pm I had [some exciting ideas for a future research topic](https://twitter.com/stevekrouse/status/1027765242217029632).)", "changes": [[160, 34, "drafts/frp.md"]]}, {"committer": {"date": 1533846572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "984043e669bd1e5c85b83bc5349148c37e4c2bc4", "parents": ["0ab9cd9699ddff2a287f5f80c194503c629f975e"], "commit": "236313890011b1a50a959a230e6db62f4f18bf35", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "047ff2b483389114d760f20ee81eee62443114eb", "parents": ["533d10e0afd26477548479dfcf7b7ef97b40fb73"], "commit": "0ab9cd9699ddff2a287f5f80c194503c629f975e", "message": "started adding some realreflex frp types to essay", "changes": [[40, 0, "drafts/frp.md"]]}, {"committer": {"date": 1533843454, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a3ba85438894478e4aeea2cb3cce497542d303ff", "parents": ["6203d4cda9f35794d245f18b0b1e0dbf074cf392"], "commit": "533d10e0afd26477548479dfcf7b7ef97b40fb73", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bc0421679dd311a82d4727cdb3ceb03bcc0a93ba", "parents": ["e7236ccd102415f4b0c513c43b0a5f399c90fbfe"], "commit": "6203d4cda9f35794d245f18b0b1e0dbf074cf392", "message": "edited frp essay, and reorganized todos", "changes": [[39, 38, "drafts/frp.md"]]}, {"committer": {"date": 1533586114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a4a7c0aa09c27a09016506fce9125519c2998164", "parents": ["bbc6ef4eb11242836264746cdf5317fd95701051"], "commit": "e7236ccd102415f4b0c513c43b0a5f399c90fbfe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6464bfd86d2f0ea07b419555af865bf6a614ab7a", "parents": ["490b931161eeb2b6e46fc38f8ea087ad1956d0b1"], "commit": "bbc6ef4eb11242836264746cdf5317fd95701051", "message": "## Back at the FRP essay!\n\n* TOC\n{: toc }\n\nThe changes I'm comitting now were actually done this past Friday. It's not a ton of work but it wasn't pulling teeth - it was fun. And I'm excited enough about it that I actually made my girlfriend listen to me read it to her - she was a great sport. The langauge is a bit technical / high level. There's a lot I need to expound on / elaborate in there, and I imagine that some ambiguity in the essay are weak spots I need to explore more.\n\nYesterday I had a lot of fun comparing and contrasting TodoMVC in Elm and Redux. I printed out the code for both on paper and wrote all over them. I have a lot of questions about the types of things in Redux that I'll have to investigate next.\n\nOne idea I had is that to make the comparison more apples-to-apples, I could write TodoMVC in Redux but with the Elm Architecture - this is possible but not the reverse. However, that is a bunch of work considering how slow my Reflex/ghcjs feedback loop is. Another possible task is implementing focus on input elements, localstorage, and url hash get/set in Reflex to make them truly equal - but that's not really the point so it may be more work than it's worth.\n\nI only have two weeks before I have to submit to REBLS. I think I have enough for the paper in progress section, but I want to make it as best I can before that date. However, I also have work for Dark and First Round I should do this week - as well as taking some time off to spend with family that's around this month. It's a lot going on!\n\n### Dark research\n\nI spent 3 hours this morning compiling lists of various interesting progrmming environments. What I'm most excited about is my list of classics that I've never played with:\n\n* Hypercard\n* squeak / etoys / morphicjs / pharo / http://gtoolkit.org/\n* Labview\n* apl\n* Self\n* Forth\n* Prolog\n* Sketchpad\n* Matlab / simulink\n* Yahoo pipes\n\n\nAs well as a few I keep haering about:\n\n* prograph\n* paxmsp and pure data vvvv\n* JetBrains MPS\n* emacs org mode\n* TLA+ / Alloy\n* Sonic Pi\n* R\n* https://www.blender.org/\n* Godot engine\n* Qt\n* Chalktalk\n* http://mbeddr.com/\n* http://openendedgroup.com/field/OverviewBanners2.html", "changes": [[21, 18, "drafts/frp.md"]]}, {"committer": {"date": 1533325066, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "126647f6b520ae014192a58e48d5ee8eca353400", "parents": ["138b570a145bf779dd1d93109c5d22acd4ff877b"], "commit": "490b931161eeb2b6e46fc38f8ea087ad1956d0b1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7a924a919c35bc7d65d6ed24bdf52dfe803f9e08", "parents": ["b1c21b17b190d3aa39e5dd2bd29cbf4d23ff81f1"], "commit": "138b570a145bf779dd1d93109c5d22acd4ff877b", "message": "added log.rss for Stefan", "changes": [[3, 1, "log.md"], [25, 0, "log.rss"]]}, {"committer": {"date": 1533136714, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2810f8c8b42731b7e790bd7f28bc7d63061fe451", "parents": ["f4f444707ad7ec37281ff587198cd99719af9501"], "commit": "b1c21b17b190d3aa39e5dd2bd29cbf4d23ff81f1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56386ea778aa35ee11039a332e85b70204e8db09", "parents": ["9c091363f83f9b0b30826e99a5052832dc914e92"], "commit": "f4f444707ad7ec37281ff587198cd99719af9501", "message": "## Less FRP essay excitement\n\nHard to figure out why this happened, but I'm less pumped about this these days. I think I'll give myself a break and do other work and hopefully I'll naturally get re-excited about coming back to this. Yesterday I spent 2 hours reading the Reflex documentation. It felt like a useful two hours. The key thing I figured out is that it does cyclic updates via an \"event propagation graph\", but I wasn't able to figure out much more details than that.\n\nSome interesting links:\n\n* [Front end - simple comparison between react, react-flux (ghcjs), and reflex-frp](https://www.reddit.com/r/haskell/comments/5xo6sd/front_end_simple_comparison_between_react/)\n* [how to structure a reflex application vs cyclejs and elm (reddit)](https://www.reddit.com/r/reflexfrp/comments/6l5ddn/how_to_structure_a_reflex_application/)\n* [Evan Czaplicki on higher-order streams](https://news.ycombinator.com/item?id=11669206)", "changes": [[1, 1, "_data/git-log.json"], [1, 0, "drafts/frp.md"]]}, {"committer": {"date": 1532969661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "267a2d938575b535d39334d1bdd01ee17c26e170", "parents": ["987b2dae5c7ddd5f2bff34b3e3411fe287d29220"], "commit": "9c091363f83f9b0b30826e99a5052832dc914e92", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6aa1ad69db2a5f109952f38f1609788b9640dba0", "parents": ["61baad40901025fa7f0250b3364b8c43ea8d9f81"], "commit": "987b2dae5c7ddd5f2bff34b3e3411fe287d29220", "message": "## FRP Essay, draft 2 started\n\n* TOC\n{: toc }\n\n### Relaxing reading on Friday afternoon\n\nI didn't feel like working on my computer, so I printed out my essay, Jonathan Edward's feedback, and grabbed a few papers to re-read I felt would be relevant. Turns out they really were!\n\nFrom [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)\n\n> The core of Functional Programming is thinking about data-flow rather than control-flow.\n\n> it's about managing the same complexity in a way that makes the dependencies between each piece of code obvious, by following the graph of where function arguments come from and where return values end up.\n\nFrom [Out of the Tarpit](https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf):\n\n> There is in principle nothing to stop functional programs from passing a single extra parameter into and out of every single function in the entire system. If this extra parameter were a collection (compound value) of some kind then it could be used to simulate an arbitrarily large set of mutable variables. In effect this approach recreates a single pool of global variables — hence, even though referential transparency is maintained, ease of reasoning is lost (we still know that each function is dependent only upon its arguments, but one of them has become so large and contains irrelevant values that the benefit of this knowledge as an aid to understanding is almost nothing).\n\nOut of the Tarpit turned me on to Dijkstra's [The Humble Programmer](https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html):\n\n> A study of program structure had revealed that programs —even alternative programs for the same task and with the same mathematical content— can differ tremendously in their intellectual manageability. A number of rules have been discovered, violation of which will either seriously impair or totally destroy the intellectual manageability of the program. These rules are of two kinds. Those of the first kind are easily imposed mechanically, viz. by a suitably chosen programming language. Examples are the exclusion of goto-statements and of procedures with more than one output parameter.\n\n> Argument four has to do with the way in which the amount of intellectual effort needed to design a program depends on the program length. It has been suggested that there is some kind of law of nature telling us that **the amount of intellectual effort needed grows with the square of program length**. But, thank goodness, no one has been able to prove this law. And this is because it need not be true. We all know that the only mental tool by means of which a very finite piece of reasoning can cover a myriad cases is called “abstraction”; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. In this connection it might be worth-while to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise. Of course I have tried to find a fundamental cause that would prevent our abstraction mechanisms from being sufficiently effective. But no matter how hard I tried, I did not find such a cause. As a result I tend to the assumption —up till now not disproved by experience— that by suitable application of our powers of abstraction, **the intellectual effort needed to conceive or to understand a program need not grow more than proportional to program length**.\n\n(Bold is mine.)\n\nReading Dijkstra was a revalation. This quote almost makes my part of my first FRP draft look like plagiarism for not attributing this idea to him!\n\n> the intellectual effort needed to conceive or to understand a program need not grow more than proportional to program length\n\nHonestly, I didn't know! But know I do.\n\n### What my FRP essay is really about\n\nI'm realizing that much of my essay need to be deleted, which is sad, but its important to be ruthless about \"killing ones darlings\" when it's time to. I went ahead and deleted it all and started afresh in the same file, but I expect that I will be coming back to the [first draft](https://cdn.rawgit.com/stevekrouse/futureofcoding.org/01f04f48eab8bd4740beb667ae3fb03b4aaf5b0c/drafts/frp.md) a lot to copy and paste various elements.\n\nI see now that my essay is less about the importance of explicit dependencies, but more about how Elm doesn't have them, but Reflex does, and the reason is higher-order and cyclic streams. I worked on this essay for ~90 mintues today and it was a bit pulling teeth. I'm not sure if it's because I'm in a new setting -- the NY Public Library instead of home -- or if I'm sad about the mass deletion, or distracted by my other part time work, or whatever, but I'm going to stop working on this essay today in favor of other part time work, and start again tomorrow morning.", "changes": [[21, 228, "drafts/frp.md"]]}, {"committer": {"date": 1532702313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d522473d50023ec180e1233f48e1008ddf8b7a40", "parents": ["d129e7339e2aea36ae592472b959ccfd1a92179d"], "commit": "61baad40901025fa7f0250b3364b8c43ea8d9f81", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d8f1687f851859df8749b57d1aa9183dc7d1dec7", "parents": ["c73a703249dafef4341388116248202ddbd73f56"], "commit": "d129e7339e2aea36ae592472b959ccfd1a92179d", "message": "## It's been too long!\n\n* TOC\n{: toc }\n\nI've been busy with my part-time jobs! I spent the first two days this week working for Dark, and the rest of the week working for my new gig at First Round Capital. I found two other gigs (another one at Dark and one at the Jain Family Institute), but pushed off their start dates for a month to give me some time to get this FRP essay done. However, I do expect to be splitting my time 50/50 for $ and research going forward, and if-anything leaning more heavily on the $-side of things because I want to make sure things are moving forward there. It's exciting to not have to worry about money as much! I wonder if I'll get sick of this context-switching at some point like Paul Chiusano did and want to go full time on the research.\n\n### FRP Draft Feedback\n\nAfter completing the first draft last week, I sent it over to Jonathan Edwards for feedback. It was truly excellent feedback. I kept reading it over and over again. He was able to highlight the parts of my essay that I was most concerned about, and give very on-point suggestions. Here is his feedback and my thoughts underneath each point:\n\n> “modular comprehensibility” is a heavyweight phrase, and modularity has many meanings. Maybe “locally comprehensible” is lighter and more precise?\n\nAgreed. \"module\" is a loaded word in tech already. Another phrase could be \"piecemeal comprehensible\". Or how about \"self-contained comprehensibility\"?\n\nA metaphor I find helpful is the difference between a novel where anything can happen to anything at any time, and you have to read it sequentially and completely, vs an encyclopedia, which is referential in that you can just look up what you care about (and the entries it specifically references) and be done. So another possible phrase is \"referential\" or \"definitional\" comprehensibility.\n\n> “implicit dependencies and side effects decrease modular comprehensibility” Is the problem being implicit or non-local? Would non-local explicit dependencies be OK?\n\nReally great question. I totally agree that I don't make this point well, because I'm partially confused by it myself.\n\nFor one, it's important to not only list what the dependencies are, but specifically how the dependency affects it's dependent. It's not \"this term depends on x\", but \"this term is precisely 2x + 17\".\n\nAt the end of the day, I want \"data = ...\", which is an explicit definition. If the definition of \"...\" lives in a different file, I don't care because we can build an automated tool to bring them together for visualization purposes. Explicit-ness is the key, and side effects lead to implicit-ness.\n\nIn the essay I complain about \"action at a distance\", but I think you are correct in pointing out that that doesn't really matter. It's more the implicit-ness that's the problem.\n\n> The graphs are larger than needed to make your point. It took me a minute to figure out what you were doing with the edge adjacencies. Probably should explain in figure captions. It might be clearer to make this point with different syntaxes for representing the graph.\n\nOk, good to know.\n\n> “count is constant in the sense…” is asking for an argument. Is a lazy stream really a constant? You don’t need to pick this fight.\n\nOk, good to know! (Didn't realize it was a fight.)\n\n> The reflex example needs more detailed explanation. What does foldDyn do and what is its type? Show how the stream is higher order. Also note the dependence on lazy evaluation (which is also the reason for space leakiness)\n\nAgreed, will do.\n\n> You need to show todomvc in reflex to compare with the Elm example and show how locality is improved. This is the crux of your argument, and you stopped before you got there!\n\nAh, ok, will do! I think this will help me articulate some of the questions in your comments.\n\n> Don’t credit Glen with inventing live programming. Best citations are Steve Tanimoto and Chris Hancock.\n\nOk good point, will look them up.\n\n> You should address the counterargument that your cure is worse than the disease :). Isn’t the bottom line really the cognitive effort to understand the code? Evan says the Elm architecture is no longer FRP and is easier to understand http://elm-lang.org/blog/farewell-to-frp. FRP can get hairy - do you end up just trading non-local dependencies for convoluted semantics?\n\nTotally, totally agreed. I used to have a section in this essay that referred to Elm's Farewell to FRP, but removed it. I'll bring it back!\n\n> Some might argue that the data flows are just as complex topologically, you’ve just encoded them in a very terse and abstract way. You propose building code viz tools to help. But perhaps we could also add assistance for understanding the non-local dependencies in Elm also.\n\nReally on-point question. I think about this myself too. One way to phrase this question is: can we build an automated tool to parse an Elm project into a Reflex project?\n\nI fear that the Elm Architecture is functional in the same way that passing around global state as an explicit argument is functional as they articulate in Out of the Tarpit:\n\n> There is in principle nothing to stop functional programs from passing a single extra parameter into and out of every single function in the entire system. If this extra parameter were a collection (compound value) of some kind then it could be used to simulate an arbitrarily large set of mutable variables. In effect this approach recreates a single pool of global variables — hence, even though referential transparency is maintained, ease of reasoning is lost (we still know that each function is dependent only upon its arguments, but one of them has become so large and contains irrelevant values that the benefit of this knowledge as an aid to understanding is almost nothing).\n\n### Future of Programming Meetup\n\nWe had a fun meetup on Monday of this week. It was great. There were 8 of us at the Work-Bench offices, which was a great location. The way we ran this meeting was that different people showed what they were working on and got some feedback. Nick from Windmill showed a terminal app that runs compile processes in a more visual way. Sam and Rodrigo from Hopscotch showed interface ideas for linking between projects. Steve and Joe from Universe showed a new on-boarding flow that teaches the interface, which reminded me of [this article that I needed some help from Twitter to find](https://twitter.com/stevekrouse/status/1022101883769561089).\n\n### Interesting links\n\n#### [Functional Programs That Explain Their Work](https://www.youtube.com/watch?v=pqtqaL_ojpk)\n\nI found this link on [lamdu.org](http://lamdu.org). So great! The motivations are very similar to my own FRP essay but they take a very different approach. Their goal is:\n\n> allow the user to selectively focus on parts of the execution to help their understanding\n\nWhich sounds a lot like my goal to make reading proportional to comprehension.\n\n#### [Story Generator Redesign](http://glench.com/StoryGeneratorRedesign/)\n\nGlen sent me this link after an email exchange we had. It's a very thought provoking short demo essay thing. It provides evidence for the \"we need lots of little visual domain-specific environments\" argument.\n\n#### [Seymour: Live Programming for the Classroom](https://harc.github.io/seymour-live2017/)\n\nCrazy I haven't read this yet. Really wonderfully written. Of course I am a bit tired of trying to visualize imperative programs, but this is an interesting take on it. This is a bit more advanced than PythonTutor, which they reference in the essay.\n\n#### [Academic Pensieve](http://drorbn.net/AcademicPensieve/About.html)\n\nFound this article via a Michael Nielsen essay. Turns out my experiment in publishing all my work in progress isn't so new. This guy has been doing it since 2008, and says that it's called [Open-notebook science](https://en.wikipedia.org/wiki/Open-notebook_science).\n\n### My growing Anti-IO-Monad Obsession\n\nMy new motto (from I don't know where):\n\n

Imperative Programming is doing
Functional Programming is being

— Steven Krouse (@stevekrouse) July 27, 2018
\n\n\nMy favorite picture (from [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)):\n\n![image](https://user-images.githubusercontent.com/2288939/43324921-49e5fa40-9183-11e8-873d-59639e25382a.png)\n\nAnd my new obsession (from [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm)):\n\n> move I/O entirely out of our programming model into the _implementation_ of a denotationally simple model for whole systems\n\n#### HTTP = JQuery\n\nHere's an example of moving I/O out of the programming model. You have a beautiful FRP app. No IO required to render your app. That's what libraries like React are for. They are like JQuery as a service. You tell it what things should look like it and it does the imperative I/O (virtual-dom diffing and patching) below your level of abstraction.\n\nBut what about some arbitrary HTTP requests that your app needs to make to some backend service? How do we get this IO out of our code?\n\nMy first thought was that we should use a stream of some sort to abstract over the request. But that feels a whole lot like what we already have with JavaScript Promises, and is still very imperative.\n\nThen it hit me (in the shower, as it always does). HTTP requests are like the JQuery DOM queries and mutations. We have to disallow arbitrary HTTP requests in favor of a more holistic abstraction (that will do HTTP under the hood).\n\nI'm not firm on the specifics yet... but the idea is that you would declaratively say which data are needed on the frontend, and others should be persisted on the backend. Potentially, the way to do this right is to blur the front-end and back-end to a single codebase that speaks in a higher-level abstraction, which is then broken up when the app is compiled -- maybe like Meteor. This could help solve many of the issues with trying to the front and back ends.\n\n##### Another HTTP example\n\nLet's take another HTTP example. Let's say you have two services that you want to keep in sync with a third server. Each one sends you webhooks when their data updates. Then you go to the other and update the data there.\n\nLet's say service A notifies you of a change via a webhook. You go notify service B with a POST.\n\nAll is good until service B hits you with a webhook (because you just changed it's data with a POST and it's letting you know that it's data was changed). You could go update A with the changes, but that's a bit crazy because A already has the changes - it was the one who first propagated the changes.\n\nIn order to prevent this craziness, you'd need some way at your server to remember what each service knows so you don't send them redundant updates. However, that feels kinda dirty. Shouldn't your service be stateless...?\n\nHere's my take on the no-IO solution to this problem:\n\n```haskell\n--------------------------------\n-- Functions we need to define\n--------------------------------\nstateView :: State{serviceA} -> State{serviceB} -> State{internal}\nserviceAView :: State{internal} -> State{serviceA}\nserviceBView :: State{internal} -> State{serviceB}\n\n------------------------------------------\n-- Virtual States for diff and patching\n------------------------------------------\ninitialState :: Service S => State{S}\n\nstateReducer :: Service S => webhook{S} -> state{S} -> state{S}\n\ndiffState :: Service S => state{S} -> state{S} -> diff{S}\n\npatch :: Service S => diff{S} -> [HTTP{S}]\n```\n\nOur job is to explain how our internal model of the states join together, and then explain how that model should be persisted in each of the views.\n\nUnder the hood, our library will pull the initial states from both services (hopefully not the entire states but just the relevant parts), and maintain it's internal model of each service's data (the virtual-state), and when there's a diff in what *is* and what *should be* as specified in our model, it'll do the diff and patch with the appropriate HTTP requests.\n\nOne thing to note here is that in the virtual state diffing and patching, I'm using the \"Elm Architecture\" of a reducer thing, which I normally don't like. In an ideal world, it wouldn't be a global reducer like that but more like how I argue in my FRP draft. However, it hurts my brain to think about how to do it that way... Anyways, it's an implementation detail so it doesn't matter too much either way.\n\n### Now until 8/17/18\n\nI am angling to submit my FRP draft essay to REBLS on 8/17/18, so I'll be mostly working on that, along with my Dark and First Round work, over the next three weeks.\n\nAs far as the essay goes, I have plenty of work to do as specified in Jonathan Edward's comments above. In particular I need to get clearer on what's problem (implicit dependencies or non-local dependencies) and also make the case that the solution isn't worse than the disease.", "changes": []}, {"committer": {"date": 1531926592, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d8f1687f851859df8749b57d1aa9183dc7d1dec7", "parents": ["a7b70d1b7876250feb683156b336061c4fe05104"], "commit": "c73a703249dafef4341388116248202ddbd73f56", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "06615050f9fc335ce0e283715679b93bbbd5bfc1", "parents": ["4f3fb33b10ef70c8f59a8c1c600290e2fbff01bc"], "commit": "a7b70d1b7876250feb683156b336061c4fe05104", "message": "finished frp draft 1", "changes": [[81, 41, "drafts/frp.md"]]}, {"committer": {"date": 1531866385, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf492fb71a016c8c1dea1381eb661f3dead156d4", "parents": ["06490ac561c367e1a3328ba4163f4d68890e32fa"], "commit": "4f3fb33b10ef70c8f59a8c1c600290e2fbff01bc", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "31183d6cd1f58b11331cf78bb92ed4708cbb969e", "parents": ["ae55a4ac9508454383bfbddbc814e57a7b10f7e5"], "commit": "06490ac561c367e1a3328ba4163f4d68890e32fa", "message": "added episode 27 to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1531866318, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5eb9a503e5ccf6db0369bc57d59eb9bdfaf6825", "parents": ["eafd7afd1eae824f4b6751b2a0b18ed4780d49bf"], "commit": "ae55a4ac9508454383bfbddbc814e57a7b10f7e5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cc7a4a12bb2abd89fa1248c00ee99149e6e5308a", "parents": ["4f17cb8b78abee54f1df22e0869027959d86e3bd"], "commit": "eafd7afd1eae824f4b6751b2a0b18ed4780d49bf", "message": "added episode 27, david k piano", "changes": [[44, 0, "episodes/27.md"]]}, {"committer": {"date": 1531845997, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bbd52db65df6753800f91316589be46b088621a6", "parents": ["9192f582fbe2bb0d9d48b55e150d9660adbc3038"], "commit": "4f17cb8b78abee54f1df22e0869027959d86e3bd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6c8823c249cd5ee18206930d4f36a98fa57154db", "parents": ["d94698e5e0a1ea78bb4307f237336bcb54cd6fad"], "commit": "9192f582fbe2bb0d9d48b55e150d9660adbc3038", "message": "small hilltop edits", "changes": [[1, 4, "notes/hilltop-lang.md"]]}, {"committer": {"date": 1531845830, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "42d2ff9321b4ade7c1da283759da83284a0ff0f4", "parents": ["a66cb5532b07705c34ab3f5b353b55c05e26b2a0"], "commit": "d94698e5e0a1ea78bb4307f237336bcb54cd6fad", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e97270de8ad030eec71e61b155d055166816a7db", "parents": ["2760505d2f5732c2cad024cd5ca918226be418ab"], "commit": "a66cb5532b07705c34ab3f5b353b55c05e26b2a0", "message": "added hilltop lang review", "changes": [[63, 0, "notes/hilltop-lang.md"]]}, {"committer": {"date": 1531836662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dabd0f691de6b566da38d4c7bde22256fc3053b5", "parents": ["af6c9c9ff9332d2e4b665cc343b6e29dd76ea34e"], "commit": "2760505d2f5732c2cad024cd5ca918226be418ab", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f0996ca2cb09c94a1bafb021eeab289da2c0789", "parents": ["deaef154dc93ee4bd75709790e03c423e4a54239"], "commit": "af6c9c9ff9332d2e4b665cc343b6e29dd76ea34e", "message": "reflex typos", "changes": [[3, 3, "drafts/frp.md"]]}, {"committer": {"date": 1531836554, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ceade910b1e94d30687b282b34a51340509b0407", "parents": ["d0d80ef7b8bef2f486fa01d92bcc912e708ae0bd"], "commit": "deaef154dc93ee4bd75709790e03c423e4a54239", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "757f6acfaf81f643f476afe643fd05ad50a0fc5e", "parents": ["2188ee996d95814bb6aee17918f72b2697f03cc6"], "commit": "d0d80ef7b8bef2f486fa01d92bcc912e708ae0bd", "message": "small frp essay changes", "changes": [[13, 25, "drafts/frp.md"]]}, {"committer": {"date": 1531835985, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8448a9e485fb4da247ac79593e024e9cd0ce51ec", "parents": ["8c9726614c6538b2d00aef70d7105c5c1e65106d"], "commit": "2188ee996d95814bb6aee17918f72b2697f03cc6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "16eec47965bc45f9413641276938058fbd7e57fc", "parents": ["2e24c527c3369067008bbd64f2980ea8711da878"], "commit": "8c9726614c6538b2d00aef70d7105c5c1e65106d", "message": "## Oops forgot to add essay last commit\n\nI also made more changes this morning. I think it's really coming together!", "changes": [[109, 107, "drafts/frp.md"]]}, {"committer": {"date": 1531781840, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a9447cf60287b6d40be12d6d57db91eb7142bd7", "parents": ["ef6884cb1719124574a56be0c196b5d8c9f2426d"], "commit": "2e24c527c3369067008bbd64f2980ea8711da878", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aab07a66cbf9d738742942ce81c077d74b6b4895", "parents": ["2f0cbf878a7138990fb919c51fd7ce56df62b037"], "commit": "ef6884cb1719124574a56be0c196b5d8c9f2426d", "message": "## Turning FRP essay into real paper\n\nI found [some solid advice](https://www.cis.upenn.edu/~sweirich/icfp-plmw15/slides/peyton-jones.pdf) on Twitter for writing a research paper and it got me excited about turing my article into a real paper. I gave it a shot and like it so far.", "changes": []}, {"committer": {"date": 1531748178, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aab07a66cbf9d738742942ce81c077d74b6b4895", "parents": ["185b24afd9ac37b5101bb4f96d41b868484e19e4"], "commit": "2f0cbf878a7138990fb919c51fd7ce56df62b037", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "641fac122450d7934f27524d3ac957c73e2f2d40", "parents": ["7722af28cec608f2c48b74230afeae8750a92662"], "commit": "185b24afd9ac37b5101bb4f96d41b868484e19e4", "message": "small frp essay edits", "changes": [[7, 7, "drafts/frp.md"]]}, {"committer": {"date": 1531747745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "044fd5f04f17d7e935dbf40233c2da6eac5bbbae", "parents": ["42dc0abbe8b43e725bf2178d3e6b29d11decac6a", "1239b90ff29b18e2e36808828595c3d8844cbd8c"], "commit": "7722af28cec608f2c48b74230afeae8750a92662", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1531747735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "44e26041dc5ee1a0ff502b08cbfb38ce63f8e64e", "parents": ["47dce74444500002d577a7c265bad349d3b5b6d3"], "commit": "42dc0abbe8b43e725bf2178d3e6b29d11decac6a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "de669e091c123f3ec0733b36ed670538248e3cb8", "parents": ["a335012aed59dffb91fa6c893bcd10e7cedf8ff7"], "commit": "47dce74444500002d577a7c265bad349d3b5b6d3", "message": "continued editing frp paper", "changes": [[68, 19, "drafts/frp.md"]]}, {"committer": {"date": 1531504993, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1531504993, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "48addff2b262359183929ceb4eea6ad9e4ff5fe2", "parents": ["a335012aed59dffb91fa6c893bcd10e7cedf8ff7"], "commit": "1239b90ff29b18e2e36808828595c3d8844cbd8c", "message": "Create recurse-center-application-07-13-18.txt", "changes": [[48, 0, "notes/recurse-center/applications/recurse-center-application-07-13-18.txt"]]}, {"committer": {"date": 1531486141, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3fe9506a2f071c497f32d0e47f308de18fb31183", "parents": ["a8ebbb9c0e2b74bdcba00ae7b6266892e22bf8bf"], "commit": "a335012aed59dffb91fa6c893bcd10e7cedf8ff7", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9bf854a07ab4fea2ac207a9a7c9c5995ab9569a", "parents": ["bb68b4d1119b77ae25910eb8e000359b674f2337"], "commit": "a8ebbb9c0e2b74bdcba00ae7b6266892e22bf8bf", "message": "edited frp draftinto more of a traditional paper format", "changes": [[51, 42, "drafts/frp.md"]]}, {"committer": {"date": 1531426572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2e126b380c2dd918b4ec87af3e760dfbcda4c961", "parents": ["d7a1624c13ec2967d5130b8ea0953360978b7ce6"], "commit": "bb68b4d1119b77ae25910eb8e000359b674f2337", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "030749bdff6982b360363523d8b537383dd8f105", "parents": ["73fc73152de1fc60449118164889bf99ba0cf907"], "commit": "d7a1624c13ec2967d5130b8ea0953360978b7ce6", "message": "fixed frp draft iframe issues", "changes": [[4, 4, "drafts/frp.md"]]}, {"committer": {"date": 1531425632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b4cb9831c1187b029f58e34581e53b0803f49c42", "parents": ["7156820755365430d156742bfe8ea26d2d551852"], "commit": "73fc73152de1fc60449118164889bf99ba0cf907", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ffaaeaac0475eb424d76282a49700b2e5b05a16d", "parents": ["1ff9c47183cf85136b1041a16343620cad8ff66a"], "commit": "7156820755365430d156742bfe8ea26d2d551852", "message": "## Draft 2 of FRP Essay\n\nI got started this morning at 7am and worked until now (4pm) with only two breaks, a 90-minute and a 30-minute one, which means I worked on this for 7 hours today!! I'm very proud of myself. I'm also excited about how the piece is coming together. I feel my understanding of these topics deepening as I research them more fully in order to write the piece.\n\nOne thing in particular that I came across is the [imitate](https://github.com/staltz/xstream#-imitatetarget) method in CycleJS's xstream, which makes me wonder how far I can get with an FRP framework in vanilla JavaScript... It'd be neat if I didn't have to build a whole runtime!\n\nI was only planning to work on this until noon-ish, then run, and then work on my UK visa application, but I didn't do it that way. I'm going to go run now. If I have energy after that, maybe I'll do my visa app, but if not I'll do that tomorrow. I also have to do my Dark work for next week tomorrow, because I'm going to be out of town this weekend, so I likely won't work on this again until Monday, or more likely, Tuesday of next week.", "changes": [[174, 18, "drafts/frp.md"]]}, {"committer": {"date": 1531344432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "574ed7c839ec7879654a5b013acf0b30e9214112", "parents": ["258508c2c20eee52426cd690d625c64e35350830"], "commit": "1ff9c47183cf85136b1041a16343620cad8ff66a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9e3c1a6611ebe969e7e83d98499a336cb43b3a7", "parents": ["7d9fc4a25feb70768c7464bc991a8e68eaf14e6f"], "commit": "258508c2c20eee52426cd690d625c64e35350830", "message": "## Plan for July 2018\n\n* TOC\n{: toc }\n\nYesterday I had a wonderful conversation with Jonathan Edwards, which helped me figure out my focus for the next month, and possible beyond. I feel very lucky to get his advice.\n\nI updated him on my progress, that I was able to solve [DOM Recursion Problem with Reflex](http://futureofcoding.org/log#dom-recursion-problem-solved-by-reflex), but haven't made much progress on the UI part of visualizing the stream operators yet.\n\nHe was able to give me really great advice here, because he's potentially the original guy who's been insisting that we need to work both on the model and the UI at the same time - as opposed to PL people who only work on the model and Bret Victor people who only work on the UI. It's called co-design, desigining two different pieces towards each other.\n\nHe suggested that before I work on the UI, I should write a blog comparing Reflex to Elm, why I like the Reflex semantics as a model better, why the UI of Haskell is hard to use and why we need a better UI, and only vaugely hand-wave about how I think the UI will look.\n\nThis essay will be a great foundation to build off of. I'll share it on social media, HN, etc.\n\nI started the [essay today here](/drafts/frp).\n\nThen, I should pick a few very specific and small examples, and draw out by hand and Figma what they should look like from a storyboarded perspective, not worrying too much about the general case. I can then publish this as a follow up essay. However, Jonathan warned me (and I agree) that this will likely be difficult, possible where this research thread comes to an end, so we'll see...\n\nHowever, if I am able to get something that looks promising, I should, in effect, concatenate the two essays into a single narrative and submit to either LIVE or REBLS at SLASH on Aug 17th. In particular, Jonathan noted that I should explain in my submission the \"technical challenges for building this for real.\"\n\nIf I don't make it in time for SPLASH, the next relevant workshop would be PX at in the Spring of 2019, which is very far away, so I hope I make it in time!", "changes": []}, {"committer": {"date": 1531330532, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9e3c1a6611ebe969e7e83d98499a336cb43b3a7", "parents": ["e1767a69e27cd02a2999bbdf0e1b9f4dffd15313"], "commit": "7d9fc4a25feb70768c7464bc991a8e68eaf14e6f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4899950cc4d54c5967cda52629c490473f9b1489", "parents": ["99ac4107746c2dca53676e3e5ca82b807c291267"], "commit": "e1767a69e27cd02a2999bbdf0e1b9f4dffd15313", "message": "started frp essay draft", "changes": [[53, 0, "drafts/frp.md"]]}, {"committer": {"date": 1531325899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "12c3a8f1d8a63f7641dc6c8402fdfad6ff69ecd1", "parents": ["15716a0953e420fd46e09b4fcce155f54f9d9472"], "commit": "99ac4107746c2dca53676e3e5ca82b807c291267", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f6acf9e2c72deb45101899cc23eee44d67038eee", "parents": ["7f23878ac38945a2f1d3ca95f0f601e0c40ecf62"], "commit": "15716a0953e420fd46e09b4fcce155f54f9d9472", "message": "created drafts folder, moved essays, and fixed broken links", "changes": [[16, 0, "404.md"], [52, 0, "drafts/app-idea.md"], [175, 0, "drafts/casual.md"], [77, 0, "drafts/customer-support.md"], [51, 0, "drafts/invented-or-discovered.md"], [59, 0, "drafts/learnable-programming.md"], [38, 0, "drafts/legal-code.md"], [60, 0, "drafts/power.md"], [41, 0, "drafts/regex-for-humans.md"], [116, 0, "drafts/visual.md"], [0, 52, "essays/app-idea.md"], [0, 175, "essays/casual.md"], [0, 77, "essays/customer-support.md"], [0, 51, "essays/invented-or-discovered.md"], [0, 59, "essays/learnable-programming.md"], [0, 38, "essays/legal-code.md"], [0, 60, "essays/power.md"], [0, 41, "essays/regex-for-humans.md"], [2, 0, "essays/sissies.md"], [0, 116, "essays/visual.md"]]}, {"committer": {"date": 1531324765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1f3392d41a3860507a00623958a15545b9ec7fe6", "parents": ["d8dfad8cce899187936581c790611ce401c960b2"], "commit": "7f23878ac38945a2f1d3ca95f0f601e0c40ecf62", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2d1b4120e6ca411a7e94f72ef1b9c5de351728d", "parents": ["f1b5b3aa81d1ede791cfac1b21d16bc343d2e9be"], "commit": "d8dfad8cce899187936581c790611ce401c960b2", "message": "refactored 'past research' to 'essays' section", "changes": [[1, 4, "index.html"]]}, {"committer": {"date": 1531151108, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea55d44779b6ac272989aebff4122892ec1f59ae", "parents": ["7ac210c314949b058316b324c3cdf6104f1eda1b"], "commit": "f1b5b3aa81d1ede791cfac1b21d16bc343d2e9be", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "59b9301d8cb7999354ec9ee0df00f7f8c3f32b9d", "parents": ["7bef626190cc356b67729f70ce85415671955a07"], "commit": "7ac210c314949b058316b324c3cdf6104f1eda1b", "message": "## Added Reflection 12\n\nIt's been a while since I reflected on my work here. Part of me things that reflection text should really show up in my log... Maybe I'll add that feature one day, but until then, you have to click on the link above.\n\nAlso, maybe I'll turn this reflection into a short podcast update episode. I could tack it onto the beginning of a podcast interview, like Sam Harris does, but I feel like that's a bit disrespectful to my guest, who doesn't really want that nonesense before their interview, especially if they're going to share it with their audiences.", "changes": [[86, 0, "reflections/12.md"]]}, {"committer": {"date": 1530891821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b00129754bf0b20242717e9520e925e6e484932a", "parents": ["f60c77247796431a0d75b9772de70d7cb67c7f07"], "commit": "7bef626190cc356b67729f70ce85415671955a07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3002adf6a54bb4087f16abe8fa60aa4df50a597b", "parents": ["c624aa70a0ffe154610fd5f520e06ec9ebf2427f"], "commit": "f60c77247796431a0d75b9772de70d7cb67c7f07", "message": "## Yesterday’s Slice-and-Dice Data Ninja Playground\n\n* TOC\n{: toc }\n\nWhile watching fireworks the night before last, I couldn't stop thinking about [Flowsheets](https://tinyletter.com/Flowsheets/archive), my [fuzzyset refactor](http://futureofcoding.org/log#email-to-glen-fuzzyset--fp), my [ideas to improve ObservableHQ](http://futureofcoding.org/log#notes-on-observablehq), and for my own [reactive playground](http://futureofcoding.org/log#project-idea-functional-immutable-strongly-typed-notebook).\n\nHere's how I put it to my girlfriend: \"Glen and I are working on the same problem - code comprehensibility - and with similar approaches - visualizing the live data - but for different types of code. He's working with normal batch code (mostly static input, mostly static output), like data processing, while I'm working with reactive code (which responds to inputs over time), like user interfaces. So my problem is strictly more difficult - possibly even a superset - and is *ever harder*, because I want to allow higher order streams (streams of streams).\n\nSo it occurs to me: why start with the harder problem? We still as an industry haven't solved the easier problem. If I want to do simple data processing, I don't have any satisfactory options. The easiest to use is probably Excel / Google Sheets, but that's a pain and limited. And then there's Jupyter or ObservableHQ, but those are a nightmare in all sorts of errors and slow feedback loops.\n\n### Let's visualize all the FP list operators!\n\nMy first thought was to create metaphoric and live visualizations of all the FP list operators in Figma, such as map, filter, fold, find, some, etc. My thesis here is:\n\nAll list (or stream) operators have highly visible structures that programmers have to simulate in their heads. Why don't we bring those mental visualizations out onto the computer screen as the actual interface? WYSIWYG for list manipulation!\n\nFor example, here's map:\n\n![image](https://user-images.githubusercontent.com/2288939/42383185-84a45440-8104-11e8-930e-c260cc8c6ced.png)\n\nThis is literally how functions are taught in school to children. They are a mapping from a domain to a range. Arrows from one list to another. And you could imagine actually writing the map function on any of the arrows and seeing the data update through the arrows.\n\nFor the fuzzyset problem I’m working on, the visual representation I have in my head is something like:\n\n![image](https://user-images.githubusercontent.com/2288939/42387500-6b5db632-8110-11e8-9c75-2e8222f3f4a1.png)\n\n(It was prettier in my head.)\n\nHowever, I was discouraged when I went to the [lodash documentation](https://lodash.com/docs/4.17.10) to see how many of these I'd have to make. Part of my thesis is that there are only a few key primitives you need to do anything you want with lists. (While this is technically true because all you need is fold, it's likely not true when you consider our mental visualizations of these operators: they are more specific. For example, it'd be difficult to detect that I'm doing a map with `foldr (\\x xs -> x+1:xs) [] [1,2,3]` to get it to expand to the arrows viz above. Ditto with filter, etc.)\n\nHowever, this isn't a showstopper. Just because there are a couple dozen (maybe even ~100) operators doesn't mean I should go home. It's actually a simple-ish project if I want to commit to it. Here are a few questions I have:\n\n1. What about nested combinators? A filter inside a map? A map inside a fold? What about both? Look at this crazy code:\n\n![image](https://user-images.githubusercontent.com/2288939/42384858-28c12ea0-8109-11e8-81b9-78fa6787d0e8.png)\n\n2. How do you visualize the current values of computations within the body of lambda functions? Maybe this isn’t a real problem (as long as you have concrete data to flow through), or maybe it’s the same problem as (1) above.\n\n3. What about user-defined functions? Do they write their own visualizer?\n\n4. Are the FP combinators the essence of list (or data) combinatorics? What about APL? Sometimes nested lists and maps within lists seem cumbersome. What about SQL?\n\n### How about Luna-lang?\n\nI did not have fun with Luna, despite it being squarely centered in all the things I’m into: Haskell, visual coding, live data. For one, Luna only visualize dependencies between values, which are much less rich than I’m thinking in terms of specific metaphoric pictures for each combinator.\n\n![image](https://user-images.githubusercontent.com/2288939/42385339-7be3cf4c-810a-11e8-93a4-d4f605ab0482.png)\n\nSecondly, it’s not nearly as live as I’d want.\n\n### How about a spreadsheet?\n\n![image](https://user-images.githubusercontent.com/2288939/42385591-32d183a2-810b-11e8-8603-7cd785a77aa4.png)\n\nIt was easy to normalize the string (except the regex wasn’t compatible, so that part needs work).\n\nThere’s no `range(10)` function, so I had to create the series by dragging down `+1` of the previous number manually, which won’t scale. I’m not sure how to get around this.\n\nI was surprised to see that there are named ranges now which are similar to variables. The names don’t show up on the sheet (I had to add them manually above as a label) but you can use them in formulas. I did this with `value`, `normalized`, and `gramSize`, but got bored and stopped after a certain point.\n\nSplitting into grams as a mapping was very straight forward (except that there’s no substring and I had to use `LEFT` and `RIGHT` - it’s a bummer there’s no function creation either).\nGrouping and counting was funny - I actually used the `Query` function which is very SQL-like. It worked like a charm, except it didn’t keep the original ordering, which was a bummer. (You can see the query in the bottom of the sheet.\n\nIn order to try to keep the order, I pulled the counts back up into the original grams list. This works, but then there are duplicates of course. I guess I could first remove the duplicates and then join with the counts, but I didn’t do that.\n\nOverall, it’s possible to do stuff in a spreadsheet, but:\n\n* the cell position references are the worst (always breaking things)\n* you need to dynamically creating ranges (not by dragging down)\n* you need user-defined functions\n* you need to see both the data and the formula at the same time\n* you need to be able to visually see the relationships between cells without looking at formulas\n* you need to be able to export your process to code that can run as a library\n\n### What about Flowsheets?\n\nI haven’t had the chance to play with it myself, so I don’t really know, but it looks great. I’d prefer a FP language instead of Python, but doesn’t really matter. I’d be curious how it handles nested data structures.\n\n### What about APL?\n\nI spend ~3 hours yesterday on replicating this code in APL. God it was hard!\n\n![image](https://user-images.githubusercontent.com/2288939/42386185-c44df03a-810c-11e8-836f-da12c5068964.png)\n\n[Here’s a link to it on tryapl.](https://tryapl.org/#?a=%7B%u237A%2C%u2262%u2375%7D%20%u2338%20%7B%27-mississippi-%27%5B%u2375%5D%7D11%203%u2374%u2283%2C/%7B%u2375+%u23733%7D%A8%AF1+%u237311&run)\n\nIt took a very long time, it was very frustrating, I barely understand how the code works, and I am still not quite done. I haven't figured out how to abstract over arbitrary word inputs which would allow me to remove the '-mississippi-' string and hardcoded 11's and 3's.\n\nOne of my biggest complaints about APL is the documentation. It's like it's written in another language! And I wasn't able to find great Stack Overflow support.\n\nI’ve printed out Iverson’s Turing lecture on APL so maybe reading that will help. I’m dying out here!\n\n### The grass is always greener - yet again\n\nI tried to jump ship (again) to a different problem. I thought maybe it would be easier and help with my intended problem, but *surprise* it’s difficult in its own right.\n\n### Todos 7/6/18\n\nI’m not sure where to go from here... I’m feeling as lost as I did in [my last todos](http://futureofcoding.org/log#next-steps-6218).\n\nI guess learning Reflex and building visualizations for it (in Figma to start) is a good next step.\n\n(As an aside, I spent about an hour yesterday learning about PureScript which was fascinating. It compiles to readable JS! It does this by not being lazy. The author has a FRP library called Behaviors that’s just ~100 lines of code. It’s neat but not as firm an abstraction as in Reflex, which I prefer. And so I’m stuck with Reflex. But now I know that maybe I can use ghci to get better type instrumentation this time so maybe it’ll be better.)\n\nIt may be a couple days (or even a week) until I can work here again because I have visa paperwork do to (I may be moving to London) and work for Dark to do. (On the other hand, maybe I’ll procrastinate on those things and be back here sooner.)", "changes": []}, {"committer": {"date": 1530738626, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3002adf6a54bb4087f16abe8fa60aa4df50a597b", "parents": ["adcbb035adb95b81e0f7ba8ed973d7581225445f"], "commit": "c624aa70a0ffe154610fd5f520e06ec9ebf2427f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "471df13fe6edc9ec84d40af96cd3e845320f1d87", "parents": ["5a948e13acb9cfe743b89c3c470c53156950531d"], "commit": "adcbb035adb95b81e0f7ba8ed973d7581225445f", "message": "## Lots of blogging on the 4th\n\n* TOC\n{: toc }\n\n### Rant about abstraction haters\n\nI started the day off with a rant about abstraction haters, which was fun. I'm waiting on some notes from a friend before posting it around.\n\n### [A Human-Readable Interactive Representation of a Code Library](http://glench.github.io/fuzzyset.js/ui/)\n\nI needed a break, so I read through Glen's new essay, in part because its topic is excitingly similar to my own. There's a lot he says that now I no longer have to say myself - I can simply quote him. In fact, I think this essay could provide me with the \"intellectual cover\" from which to begin my own essay - which would allow me to do away with contexualizing why code comprensibility is important.\n\nI also had fun converting some of his code to an FP style, which allowed me to make some points about why the model is important, along with shwoing the data. I've included the email I sent to Glen:\n\n#### Email to Glen, Fuzzyset & FP\n\nHey Glen,\n\nI took some time today to dig into your Fuzzyset explanation. It's wonderful! In particular, I love the little details, such as providing links at the very button numbers that show the calculations of the dot product and magnitude in a popup.\n\nThe second interactive section of your essay, \"Turning a string into a vector\", features some code that incredibly difficult to comprehend, even with the explanation and GUI beside it. As an exercise I removed the incidental complexity in the code (in other words, converted it to a functional style) to clear things up:\n\n\n\nNow you can better follow the logical flow of the code - as opposed to the control flow of the computer. This includes eliminating iteration variables, in fact all mutable variables, which eliminates bugs, such as [a 5-line section that doesn't appear to do anything](https://gist.github.com/stevekrouse/e4c6d782144539907fc30400438243f9#file-fuzzyset_gramcounter-original-js-L7-L11). (Please correct me if I'm wrong.) It also is shorter now: the core of the code is 13 very clear lines (excluding comments).\n\nAdditionally, in this form, you don't need your comments on the side (about normalizing the string and adding dashes) because I've added them in context, which makes it even easier for a user to tweak them.\n\nAnd perhaps the best part of the functional style isn't captured by the code: it's quite visualizable in a way that doesn't require console.log. Each line of code is a constant value, mapped from a previous value. In it's current form I can imagine it being directly converted to something like Flowsheets, and you could marry the abstract symbols and concrete values even further. Dream, here we come!\n\nBest,\nSteve\n\n### Continued Casual, comprehensible, visual essay\n\n[Here's the current status of the outline.](https://gist.github.com/stevekrouse/dd90cbee71e0628fc71f3bff1ec708af) It's tough. It's pretty messy. As I said above, I may use Glen's essay as a starting place and just jump into comprehensibility and reactive programs, and not contextualize why those things are important. At the end of the day, my vision of everyone constantly improving and customizing the software they use as the use it for free, while very compelling for me, is less so for others who have less of the picture in their heads.", "changes": []}, {"committer": {"date": 1530718925, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "471df13fe6edc9ec84d40af96cd3e845320f1d87", "parents": ["b04ebf4772e5b818e548eeff72f2c728d9342bf8"], "commit": "5a948e13acb9cfe743b89c3c470c53156950531d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e4c165a968ca9780d9d36e6f9897044d5944a573", "parents": ["f1d004146eb9acab2b611836bca7839472d0f803"], "commit": "b04ebf4772e5b818e548eeff72f2c728d9342bf8", "message": "first stab at new rant", "changes": [[66, 0, "essays/sissies.md"]]}, {"committer": {"date": 1530635599, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5bc2eebd15597a86641e0fd7af2764a2864ff235", "parents": ["b028eb6684b3c75f16e9d5b9673099b0670e0df9"], "commit": "f1d004146eb9acab2b611836bca7839472d0f803", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "009fdced46853861b50a45578a1e54069a9cce08", "parents": ["67b3d186feabfb206e2bc8d2893b2dfd01d2613b"], "commit": "b028eb6684b3c75f16e9d5b9673099b0670e0df9", "message": "## Added 26, Glen Podcast\n\nIt took me ~1 hour to edit the podcast and ~20 minutes (I timed it) to put it online, including uploading it, writing the description, links, etc. This is one of my favorite conversations so far!", "changes": [[45, 0, "episodes/26.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1530569970, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf8afd8f12040bcfd36e884c758a6aab799f3092", "parents": ["a7ed24322bc932f13894b7d4002715a6943e61d5"], "commit": "67b3d186feabfb206e2bc8d2893b2dfd01d2613b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f30291b38b7ca22669b54f5f6031733a4e8c916c", "parents": ["3e85df6c99d07f1cfd8351c329f3116f6c41b15e"], "commit": "a7ed24322bc932f13894b7d4002715a6943e61d5", "message": "## A tad lost in FRP Land\n\n* TOC\n{: toc }\n\nUnfortunately, Thursday was a bit of a bust. I went to the Games for Changes conference but didn't get inspired. I imagine that'll be the case for most conferences - unless they're _nonferences_, which is basically a conference without talks and focuses on peer-to-peer interactions.\n\n### Fall 2018 conferences\n\nSpeaking of nonferences, the tickets for CycleJSConf 2018 go online today and they only have 40 spots so I should decide about that ASAP. It looks like a long an expensive flight, so I'll have to think on it... As an aside, my girlfriend and I are thinking about moving to London in the next few months, in which case it's cheap and a 2 hour flight. But then it'll be harder to get back to the States for Splash in Boston in early Nov.... These conferences are complicated and expensive!\n\n* Sep 26-28 Strangeloop (and elm-conf) St. Louis\n* Oct 17-19 CycleConf Copenhagen\n* Nov 4-9 SPLASH Boston\n\n### A fourth vision-y essay\n\nI spent 2 hours on Friday (before I had to go to Philly for my grandfather's birthday) on yet another vision-y essay. This one is about how the smallest unit of improvement a person can make in technology is an app, and how that's too big, especially when people mostly just want to add on to existing apps with a feature or customization.\n\n### Casual, comprehensible, visual essay\n\nAt this point I have 4 such essays:\n\n1. [Apps are too big as a unit of improvement](/essays/app-idea)\n2. [People will (learn to) improve software if it's not too hard](/essays/power)\n3. [Software needs to be casually improved](/essays/causal)\n4. [In order to be casually improved, it needs to be visual](/essays/visual)\n\nAnd starting on Wednesday, I've been maintaining a Workflowy nested list of the \"outline\" of this massive essay / thought dump. Workflowy felt like the right tool for this because I'm making a linear argument with a lot of tangents and nested points, and I want to be able to zoom in and out on the sub-points as well as collapse arguments to see the broader shape. The Workflowy is not on source control, so I put [the current version of it in this gist](https://gist.github.com/stevekrouse/626422d9c0e99629afda2a227374911c), and [here's a link to the live one](https://workflowy.com/s/BeQ_.L6nCI8NokW).\n\nFor better or for worse, these ideas keep metastasizing and gobbling up other projects into their purview. For example, on Friday I re-read [the final STEPS report](http://www.vpri.org/pdf/tr2012001_steps.pdf) as well as Guido's [Computer Programming for Everybody](https://www.python.org/doc/essays/cp4e/), the second of which I found from watching [@roml's Liberal Software](https://www.youtube.com/watch?v=i3nJR7PNgI4). All three projects were highly related and I copied and pasted lots of their text into the Workflowy for reference.\n\nI also sent an email to @roml, asking for help articulating the vision for \"liberal software.\" It's a fascinating vision. In particular, I want to clarify how it's different from the Smalltalk, Lively Kernal, Morphic, STEPS, Boxer vision of a unified computing environment. Maybe it's not different from those, but it feels different. For one, I'm more concerned with web-based tools, while those are more OS based. For another, I care a lot about the visual polish of the end software, while those almost deliberately seem to not.\n\nI'd love to zoom in on a sub-topic of my outline and write / polish that concept well so I can publish it, get it out there, but I am finding that easier said than done. I'm also becoming cognizant of how long this writing is taking me, and am worried that it's not the best use of my time... Maybe I should go back to the problem as opposed to motivating and contextualizing the problem.\n\nOn the plus side, I've become skilled enough in communicating what I'm working on and why that yesterday I was able to explain it at a party (in conjunction with Nadia's [Independent Researcher article](https://nadiaeghbal.com/independent-research)). Additionally, both Jonathan Edwards and Paul Chiusano sent me a shockingly relevant paper that came out a few days ago, discussed below, which is a great sign that people understand where my head's at.\n\n### Reading & Watching on 6/2/18\n\nI worked from 9:20-2:00 today, had a 45 min break for lunch, and have been working on this write up for the last hour or two. Productive day! (Although it doesn't really feel it because I don't have much tangible to show for it.)\n\n#### [Debugging Data Flows in Reactive Programs](http://pure.tudelft.nl/ws/files/38856517/paper.pdf)\n\nThis is the paper both Paul and Jonathan sent me, which came out a few days ago. I haven't felt this sinking feeling of \"oh shit someone already beat me to it\" in a long time, which is a great sign.\n\nOn note I'll make up front: the reasoning in this paper feels backwards to me. It's saying: people use FRP, it's hard to debug FRP with imperitive debuggers, so let's make visual debuggers. However, I feel that the visualizations are the key to why FRP should be used in the first place, and the fact that we don't already have good visualizations for it crazy.\n\nThey focus on the [rxjs](https://github.com/ReactiveX/rxjs) library in this example. To be honest, I had considered doing something similar myself, so it's great to see this before I did that. This means that they do visualize streams of streams, but not cyclic streams.\n\nThey also focus a lot on the user interviews, which I find silly, like they're pretending to be a different kind of science than they are.\n\nI speak more about their visualizer, rxfiddle, below in the \"FRP Visualizations\" section.\n\nI find it hilarious that they include a reference to [StoryFlow](http://www.ycwu.org/projects/infovis13.html), a tool to visually track the evolution of a character in a fictional story. It's funny to be because I've been using the [metaphor of fiction](http://futureofcoding.org/essays/casual#reading-fiction) as an example of how it's difficult to follow state in imperative languages.\n\nThey also cited a bunch of papers at the end of their paper that extolled the importance of seeing runtime values in order to comprehend programs, which fits into my thesis nicely. Currently you have to instrument your code manually or set debug breakpoints to inspect. I want you to be able to look with your eyes, mostly, and interact only a bit to see what's up in a program.\n\n#### [Functional Reactive Programming, Continued](https://dl.acm.org/citation.cfm?id=581695)\n\nAfter reading the above paper which focuses on rxjs, I felt my understanding of \"true FRP\" shaken a bit. I often find it hard to keep them all straight in my head, so I read this article in part to see if I could figure it out.\n\nThis was an arrowized paper. It helped me get back into the mindset of FRP, but no great insights here.\n\n#### [Monadic Functional Reactive Programming](https://www.researchgate.net/publication/262292005_Monadic_Functional_Reactive_Programming)\n\nI was in the groove, so I continued on. This article was fascinating, but a bit hard to read because I'm slightly allergic to monads. It was interesting to see that he explicitly says he wasn't able to do \"mutually dependent signals.\"\n\n#### [Practical Principled FRP](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.724.7758&rep=rep1&type=pdf)\n_Forget the past, change the future, FRPNow!_\n\nThis paper is apparently the basis for Hareactive/Turbine (discussed more below) and builds upon Monadic FRP. It seems to solve space/time leaks with some clever restrictions about what you can and cannot depend upon. However, as many monadic interfaces do, this feels very imperitive to me. They have a `Now` monad for goodness sake!\n\nAt the end, they make an tantalizing point that \"synchronous dataflow langauges, such as Lustre, Esterel and Lucid Synchrone\" ... never have a issue with leaky abstractions, even for higher-order dataflow, because they are more restrictive than traditional FRP\" - but he doesn't say in which ways they're more restrictive.\n\n#### [Ryan Trinkle - Reflex](https://www.youtube.com/watch?v=dOy7zIk3IUI)\n\nFascinating talk! In particular, I loved the way he explained why FRP is the best:\n\n1. equational reasoning, which I've been calling \"definitional\"\n2. local reasoning, or understanding apart from context, which I've been calling \"being able to rule out parts of the application you don't have to read\"\n\nAnother key point I got from the video is that if you want to use ghci with reflex-dom, you can, but then you need to use the ghc binders, which requires a desktop environment to see stuff with. Or something like that. Maybe it means I can use ghci to do more than I thought I could...\n\nIn the talk, he shows this tutorial on [building a reflex library through building a terminal library](https://github.com/reflex-frp/reflex-platform/blob/develop/examples/host.hs). Looks fascinating!\n\nI also skimmed another video, which had [a great example and quote about declarativity](https://youtu.be/92eXGvHFbzs?t=40m33s). He shows dynamic list, whose dependencies are all explicitly listed inside of it. Only one place to (recursively) look. This epitomizes why reflux is the only library I am still excited about.\n\nI reached out to [Obsidian](https://obsidian.systems), the Haskell dev shop he runs, to see if they're still hiring. I could definitely see spending some time there, which I can't say about almost any other company.\n\n### FRP Visualizations\n\nBefore I found the FRP Debugging articles, I was saying something along the lines of: we need visuals that support casual understanding of large, complex software programs. FRP support this because the metaphors are very visual. Just look at [rxmarbles.com](http://rxmarbles.com/) and [the cyclejs devtools](https://github.com/cyclejs/cyclejs/tree/master/devtool). If you wanted to visualize imperitive programs, the best you could do is [Python Tutor](http://pythontutor.com/), which merely helps you \"play machine in your head.\"\n\nIt turns out, I'm not the only one to want to provide more live visualizations for FRP:\n\n#### [rxfiddle](https://rxfiddle.net)\nMy inital reaction to this tool was \"neat!\" But upon closer inspection, I'm not impressed:\n\n* the high-level graph in the middle of the screen is confusing. It'd be best if you could zoom in and out on the same structure for high and low level views.\n* clicking on data points is confusing\n* the fact that they show opaque green dots instead of raw data is dumb, especially when it's a number\n\nThey try to vertically align data points. This is a reasonable strategy but doesn't scale super well for complex flows (maybe better layout could solve this). One idea I had would be to use color to show the lineage/causality of events.\n\nOne point they make is that more work needs to be done for combinators that modify flows in a less merge-y way, such as filters, folds, etc. Another point is what to do with a high-frequency event. One idea is sparklines, but there are many ways to compress data.\n\nAdditionally, I find it useful to have both representations of streams: a lazy infinite list, and also a single value that changes over time.\n\nOne final note is that they only show acyclic graphs, which is insufficient for my purposes as discussed elsewhere.\n\n#### [rxviz](https://rxviz.com)\n\nThese are fun. I like them a lot more than rxfidle. They do a great job of showing higher-order streams. They don't, however, show how streams combine to make other streams. They just show one output stream or stream of streams.\n\nFor completeness, here are some other links on visualizing FRP programs:\n\n* [rxvision](https://jaredforsyth.com/rxvision/)\n* [Rx Diagrams](https://blog.angularindepth.com/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams-20fce8e6511)\n* [ReScala RP Debugging](https://dl.acm.org/citation.cfm?id=2884815)\n\n### FRP flavors\n\nThis is a problem I've struggled with for a year or so now. There are so many flavors of FRP out there, with different points on the design space, it's hard to keep them straight.\n\nAndre Stalz has some interesting things to say on this topic [here](https://www.reddit.com/r/javascript/comments/3zr6i0/conversation_whats_the_core_differences_between/) and [here](https://staltz.com/unidirectional-user-interface-architectures.html).\n\nJonathan Edwards suggested I make a survey type doc for them. Neat idea. [FRPZoo](https://github.com/gelisam/frp-zoo) already exists but doesn't quite capture what I want. Also, I don't care so much to compare them all. I want to simply find the one model I want and go with it.\n\n#### [Turbine](https://github.com/funkia/turbine)\n\nSeems like the most Conal-based FRP in JavaScript.\n\nHowever, you add stream on-click handlers in UI elements, which isn't for me.\n\n#### CycleJS, Elm, Redux\n\nAll have the same singleton state + reducer architecture I don't like.\n\nHowever, it is possible to do CycleJS without the singleton state as I did in [this Flappy bird](https://codesandbox.io/s/xlrynkqoqp) about a year ago. The question is: 1) can it do cycles? and 2) how do we like the devtools?\n\n#### [Reflex](https://reflex-frp.org)\n\nI haven't done much more with this, despite watching the videos above, but it remains the only library I still like, despite the annoying type quantifiers and ghcjs nonesense.\n\n#### Purescript\n\nPaul Chiusano suggested I see if Purescript has anything I like in FRP land. Maybe it'd be easier than Reflex.\n\n### Next steps 6/2/18\n\nThere are a few social things to figure out:\n\n* fall conferences\n* the next FoC meetup in NYC\n* a possible meetup in Boston with Nicky Case and Glen\n\nA few other next steps:\n\n* update my Workflowy with notes from today's reading & watching\n\n* cyclejs with non-singleton state - can we do cycles? what do the devtools do (particularly as compared to singleton state)?\n\n* look for PureScript FRP library\n\n* continue learning Reflex. I found [this tutorial](https://github.com/hansroland/reflex-dom-inbits/blob/master/tutorial.md)\n\n#### What am I driving towards?\n\n1. An essay about comprehensible programming\n2. A comprehensible & casually editable ToDoMVC\n3. Tufte-inspired (show data, show comparisons, etc) visualizations (and editor) for cyclical, higher-order, GUI streams\n\n#### Anxiety about speed, focus\n\nI wish that it was more obvious what I should work on next or focus on for this week. I am feeling a bit anxious about getting to a polished published piece of work that I can point to and be proud of, similar to my Visual History of Eve in that it is polished and got attention, but more impressive and meaningful, like a Staltz or BV article.\n\nHowever, while today wasn't particularly directed, it was definitely quite productive. It took me ~2 hours just to write up all that I did today. I just have to trust in the messiness and hope that a smaller piece of a project will appear and provide itself for polish and publish at some point.\n\nAs far as tomorrow goes, let's start by re-reading this entry and going from there...", "changes": [[52, 0, "essays/app-idea.md"], [2, 4, "essays/power.md"]]}, {"committer": {"date": 1530114163, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f01dddb17370cffcd8c2833e51aad88f0270264", "parents": ["025899fb2dfb9960deec81617276f57614b306ef"], "commit": "3e85df6c99d07f1cfd8351c329f3116f6c41b15e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5ea489ec73fed230722d18839e202fb0a62ed07f", "parents": ["b0afa539a314aaf5365b86b2216b47212cfe024f"], "commit": "025899fb2dfb9960deec81617276f57614b306ef", "message": "## Another vision-y essay\n\nI started another essay today. This isn't a great sign that I keep creating new essays, instead of editing the old ones...\n\nI'd like to find a way to release something, which means I'll have to cut down the scope as much as possible. The essay I worked on today does a good job of that. It's just trying to make the point that live modify-ability is a great thing. It's trying to sell the vision.\n\nThe other two essays: [visual](./essays/visual) and [casual](./essays/casual) and more about why FP and FRP is neccesary, and how we'll make it work. I'm stil not sure how to combine or seperate those essays.\n\nEven worse, I've been collecting a large number of notes to add to these essays, and I don't know where they go...\n\n* include referneces to http://glench.com/LegibleMathematics/ in my visualizable essay and also talk about how visualizations are key. they're already in our heads even if we don't know it.visual metaphors. maybe quote the monad guy. quotes about mathmaticians who see things.\n* also I can clarify that when trying to improve understandability of programming you can either improve the model or the interface, and how I'm working on both dimensions at the same time (paul chiusano leverage, glench is only on UI where I used to be, etc)\n* comprehensibility: model + interface...steps proj, Nile + Bret’s visualizations\n* Haskell note from rattray: compiler knows more than you do\n* declariative langauges stink but they allow for foundation for visual tools such as squarespace and looker", "changes": [[62, 0, "essays/power.md"]]}, {"committer": {"date": 1530029786, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dfdba53a7807bc966f3412280dda1bff780257e0", "parents": ["3c94702b3a8f2f9979e5a9c4467e0704b6764568"], "commit": "b0afa539a314aaf5365b86b2216b47212cfe024f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f38128571b88def7dd7b9af54d30f6dedf923e2b", "parents": ["bac4b30b2866284526b18a41715a2d041813f230"], "commit": "3c94702b3a8f2f9979e5a9c4467e0704b6764568", "message": "## Started visual programming essay\n\n* TOC\n{: toc }\n\n### Prisma yesterday\n\nI spent yesterday researching GraphQL for Dark. I combined a few pictures on their website to explain Prisma. It's a little complicated, because it's solving a GraphQL problem with more GraphQL, but I think this photo explains it pretty well:\n\n

One graphic to explain @prisma, the #GraphQL ORM-like layer pic.twitter.com/8jaq2ayUGK

— Steven Krouse (@stevekrouse) June 25, 2018
\n\n\n### The Software Elephant\n\nI was inspired by a wonderful conversation this morning with [James Somers](http://jsomers.net/) (of [The Coming Software Apocalypse](https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/) and many others) to write up my thoughts on how visualizations will save programming. I somewhat-recently read [Fred Brook's No Silver Bullet](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf) where he very eloquently argues that software is \"inherently unvisualizable.\" What makes Brooks so great is that he gives you such a wonderful structure for your arguments, including great metaphors. I actually can't believe my metaphorical luck: in a relevant quote he refers to software as an \"elephant,\" which is perfect because it allows me to reference the story of the blind men and the elephant. I 'm pretty pumped about the rough draft / outline I've come up with in the last 2 hours.\n\nI'm not sure how this essay relates to [Casual Programming](./essays/casual). Maybe it's a replacement? Maybe they're somehow complimentary?\n\n### Next steps 06/26/18\n\nI'm pumped to get this essay polished and published before continuing trying to understand Reflex, etc, etc. I think it's useful to take a break to explain the *why* of what I'm doing before spending more time doing. This post might be similar to [my first (and favorite) Andre Staltz post](https://web.archive.org/web/20180530055638/https://futurice.com/blog/reactive-mvc-and-the-virtual-dom), which is similar in that its a mile-marker on his way to creating CycleJS.", "changes": [[116, 0, "essays/visual.md"]]}, {"committer": {"date": 1529856180, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "defd7702b5762f5017f76691c8ff155f0fb3ce24", "parents": ["22f311851c583fd9477b35a2a76a6ead53a11d0c"], "commit": "bac4b30b2866284526b18a41715a2d041813f230", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7db077a43e98665fd63f98fbe3d88538546c6481", "parents": ["b5dd2b1ec930596864098d356373c606a0ed1223"], "commit": "22f311851c583fd9477b35a2a76a6ead53a11d0c", "message": "## DOM Recursion Problem Solved by Reflex\n\nAs I wrote in [The Model-View Recursion Problem in FRP](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit#):\n\n> In \"Experience Report: Functional Reactive Programming and the DOM\", authors describe a “recursion between FRP and the DOM” problem: “…the DOM tree in an FRP application can change in response to changes in FRP behaviors and events. However such new elements in the DOM tree may also produce new primitive event streams… which the FRP program needs to be able to react to. In other words, there is a cycle of dependencies…”\n\n> You start with two buttons. The first button doesn’t respond to clicks. But the second button, when clicked, adds two more buttons to the page, where again the first button doesn’t respond to clicks, but the second button can add more pairs of buttons on click.\n\n> ... I believe ... the solution is mutually recursive like the code in AFRP, and looks something like:\n\n> `clicksCount = count $ merge $ map (\\[b1, b2] -> b1.clicks) nestedButtons`\n\n> `nestedButtons = repeat clicksCount [button, button]`\n\n> `buttons = flatten nestedButtons`\n\nTurns out the Reflex library allows me to neatly solve this problem. The core of the code looks like:\n\n```haskell\nrec\n countedClicks <- foldDyn (\\a b -> if evenButton a then b + 2 else b) 2 clicks\n\n clicks <- listListView (ffor countedClicks (\\n -> [1..n])) (\\ _ x -> dynTextButton x)\n```\n\nAnd it only took me ~5 hours to write those two lines. No joke. I use a few helper functions of my own creation. You can see the [full code here](/code/reflex/button_and_text.hs). And the [live version here](/code/reflex/button_and_text.jsexe/index.html).\n\nAnd that ~5 hours is not including the ~3 hours it took to get reflex set up on my chromebook. Cloud9, AWS, Digital Ocean, and Codeanywhere all didn't work for different reasons. Eventually I got Google App Engine to work but I didn't realize the version I used would delete everything I install over night. So I created a more permanent instance on Google Compute which works as well and lets me SSH in using the browser. I just have to remember to turn it off when I'm not using it (which I am pretty sure stops the billing), otherwise it costs $100 per month because I'm using a big box.\n\nI'm getting better at emacs which is fun. I install haskell syntax highlighting and am using the shell from within emacs to compile the code in a different window. And I have `sudo python -m SimpleHTTPSever 80` so I can see the code after I compile it with `ghcjs`. I can't use a lot of the really cool emacs haskell extensions because I'm using `ghcjs` instead of `ghc` and `./try-reflex` instead of `cabal` or `stack`, but I'm doing OK now. It took me a while to get used to all the fucking types in reflex, but I'm getting the hang of it.\n\nNext steps... I'm a little lost in terms of what's next because this problem, along with [Reflex ToDoMVC minus a few features](https://github.com/reflex-frp/reflex-todomvc/blob/develop/src/Reflex/TodoMVC.hs) seems to already be solved. One idea is that I can go through Reflex ToDo MVC, line by line, expression by expression, and type-annotate everything and add a bunch more comments. There are definitely parts of it I don't understand, such as the `def` keyword, `&`, and `.~`.\n\nIn a vague sense, I'm working towards building a \"CycleJS devtools dataflow diagram\" experience for Reflex, so another step would be to draw pictures for each type, or a way that I'd display it on the screen and show the values flowing through. And another good step that comes to mind would be to figure out how to get ahold of Reflex internals so I can get a sense of the network and hook into the different event firings.", "changes": [[52, 0, "code/reflex/button_and_text.hs"], [11, 0, "code/reflex/button_and_text.jsexe/index.html"], [6132, 0, "code/reflex/button_and_text.jsexe/lib.js"], [150666, 0, "code/reflex/button_and_text.jsexe/out.js"], [19964, 0, "code/reflex/button_and_text.jsexe/rts.js"], [2, 0, "code/reflex/button_and_text.jsexe/runmain.js"]]}, {"committer": {"date": 1529608753, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "737961e963eed28c44ea833270fd6dae3ce77ab5", "parents": ["e42e44785b88039304b979a5cbf8aba310503b53"], "commit": "b5dd2b1ec930596864098d356373c606a0ed1223", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "31ad03bebd3d4b5df55a382c4f4d26323c51dbcc", "parents": ["4ceddc7cd8db03120cb8a9ea8398dd9940fd6027"], "commit": "e42e44785b88039304b979a5cbf8aba310503b53", "message": "## What am I even working on again?\n\nJonathan Edwards very generously offered to give me some comments on what I'm currently working on if I would take the time to write it up. I spend most of Monday and Tuesday (like 10 hours) on it. My [first attempt](https://docs.google.com/document/d/1JQC7Zp3SqVO2zo5jaj5mADo-uV3qz66mUGuWyg299u4/edit?usp=sharing) spent a lot of time explaining the context for why I found this particular sub-problem (the DOM recursion problem) of the sub-field (FRP) interesting.\n\nBut I did away with all that in [the version I sent over](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#), because that's what researchers do: they explain their problem in its context and attack it. They don't need to sittuate the problem in the broader context so much, because readers of technical papers often already know that context.\n\nThis exercise was challenging, fun, and very worthwhile, even before Jonathan gave me any comments. It's great to be getting some clarity on what I'm doing. I am proud of [the document I sent to Jonathan](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#).\n\nJonathan Edwards made some great comments. He suggested that I polish it up and submit to the [REBL track of SPLASH 2018](https://2018.splashcon.org/track/rebls-2018-papers). I have until Aug 17th to submit. The workshop is Nov 4th. Dominique Devriese, one of the authors of the Experience Report: FRP and the DOM, is on the organizing comittee. Maybe emailing him would be a good next step!\n\n### Casual Programming - first draft\n\nArmed with the newfound clarity around my research, I tried to explain my what I'm working on to two other programmers yesterday. It didn't go well. First of all, I wasn't able to get across the *why* of my research at all. I didn't *motivate the problem* well - neither of them agreed with me that a problem existed there in the first place. Secondly, I didn't do a good job of *defending the uninteresting parts of my solution*. My solution is to use a form of functional reactive programming, so I need to explain why FRP is the right tool for the job.\n\nSo I spent ~4 hours today on a draft of [Casual Programming][./essays/casual] (a phrase [Nikolas Martens used before me](http://blog.rtens.org/why-even-casual-programming-is-hard.html)) to contextualize the problem I'm working on within the vision of the world I'm working towards. It's a rough draft, needs a lot more fleshing out and examples.\nAlso I'm not entirely sure who the audience is, and what it's explaining to them. It's definitely not to be submitted to REBl, because they already get FRP and the problem. So I guess the audience is the programmers who are interested improving programming, but don't know all the academic stuff. The goal, I gues, would be to produce a blog post of similar caliber to Andre Stalz or David Nolan.\n\n### Todos 6/21/18\n\n* Continue working on [Casual Programming][./essays/casual]\n\n* Continue working on the academic version of Casual Programming, which I'm calling [The Model-View Recursion Problem in FRP\n](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#). In particular, formalize things up, probably by using an existing FRP library, maybe arrowized, to test things in, maybe on the browser.\n\n* Email Dominique Devriese\n\nThat's it! Much [last list of todos](http://futureofcoding.org/log#todos-as-of-61616) has either been completed or no longer feel relevant now.", "changes": [[175, 0, "essays/casual.md"]]}, {"committer": {"date": 1529338719, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2aede5ea195d61f373991130ca8b76b0278b4926", "parents": ["d96c290e63479d3cc6e995c92343dc97d85a5294"], "commit": "4ceddc7cd8db03120cb8a9ea8398dd9940fd6027", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "987c075ff8178ee18faaff773971fe1c95900373", "parents": ["0dcecbd13a1cf0a83831d9386e54164c18135a4a"], "commit": "d96c290e63479d3cc6e995c92343dc97d85a5294", "message": "## Mon 6/4/18 - Fri 6/15/18\n\n* TOC\n{: toc }\n\nApologies for going dark here the last two weeks. On the bright side, I have been quite productive, but in an analog sort of way...\n\n### Fedex Kinkos to Brother printer\n\nTwo weeks ago, I spent 3ish hours reading [Functional Reactive Animation](http://conal.net/papers/icfp97/) on my phone. I was finally able to make it all the way through, reading every word, and understanding ~80%. I was very proud. But, I didn't love reading on my phone - I wanted to print some papers out. I didn't have a printer at home -- I hate printers, they always break, and cost a bajillion dollars to buy ink for -- so I went to kinkos to print out most of Conal's papers:\n\n![image](https://user-images.githubusercontent.com/2288939/41498690-cb736744-7141-11e8-98b3-634d0b630f9e.png)\n\nBut here's where I felt like a stupid idiot: it cost $75 bucks to print all that! So I learned from my mistake and went on amazon to buy the printer with the cheapest cost per page, and found a [Brother printer](https://www.amazon.com/gp/product/B0763WDSYZ/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1) that fit the bill. It cost $70 itself, and will print ~500 pages before needing more ink. It's a 10x price reduction!\n\n### FRP Reading\n\n#### [Functional Reactive Animation](http://conal.net/papers/icfp97/)\n\nFinally able to make it through -- this was probably the 3rd or 4th time I attempted to read this paper.\n\n##### Bouncing Ball (solved)\n\nAs it turns out, Conal solved [my bouncing ball problem](http://futureofcoding.org/log#a-bouncing-ball-graph) in this paper. And I don't mean that he gave me hints towards the solution. I mean that he actually gave the code to solved the *same exact problem*. And it's beautiful:\n\n![image](https://user-images.githubusercontent.com/2288939/41498825-84ad7036-7144-11e8-95ec-ad2e0b9acc83.png)\n\nIt's very similar in spirit to what I created. Of course, there are no graphs or visualizations in the code, which is where I want to take this. FRP lends itself really well to live values and graphs.\n\n#### [Genuinely Functional User Interfaces](http://conal.net/papers/genuinely-functional-guis.pdf)\n\nAlso great. Also was able to read every word and understand closer to 90% this time.\n\n**Arrowized FRP is when you use signal combinators, not signals as first class.** This is supposed to help with spacetime leaks, as well as modularity. But of course, they are two-sides of the same coin, and it's easy enough to translate from one to the other.\n\n##### Paddle Ball is beautiful\n\nThe hardest parts of this definition are `xvel` and `yvel`, but it all makes sense when you read the paper and look at it for long enough:\n\n![screenshot 2018-06-16 at 9 09 38 am](https://user-images.githubusercontent.com/2288939/41498840-0913ade0-7145-11e8-85f0-d14793df524a.png)\n\n#### [Denotational design with type class morphisms](http://conal.net/papers/type-class-morphisms/)\n\nHarder and slower. I probably got closer to 60% of this one, but I do feel like I have a much, much better grasp of what programmers mean whey they **model programming concepts with mathematical objects**, and what **semantics** means.\n\n#### [A Fifteen Puzzle in Fran ](https://www.microsoft.com/en-us/research/publication/a-fifteen-puzzle-in-fran/)\n\nRead like a tutorial, explaining how to code an example project. Interesting and helped cement the ideas of FRP. Fascinating how he explained the structure of signal combinations in pictures:\n\n![image](https://user-images.githubusercontent.com/2288939/41498780-6b01893e-7143-11e8-9813-b7c5fa2be9f4.png)\n\n#### [Two-handed Image Navigation in Fran](http://conal.net/papers/TwoHanded/)\n\nAnother tutorial. A bit harder to follow.\n\n#### [Push-Pull FRP](http://conal.net/papers/push-pull-frp/)\n\nI've been having trouble with this one, so have been putting this one off for now, but hope to get to it soon. It's a prerequisite for a number of other papers I want to read.\n\n#### [Asynchronous Functional Reactive Programming for GUIs](https://people.seas.harvard.edu/~chong/pubs/pldi13-elm.pdf)\n\nI skimmed through this one. I wasn't terribly impressed with Elm. I can see now how it's Haskell-lite and FRP-lite. It's definitely more synchronous in spirit, taking some interesting ideas without super-solid foundations and running with them.\n#### [Experience Report: Functional Reactive Programming and the DOM](https://2017.programming-conference.org/event/proweb-2017-papers-experience-report-functional-reactive-programming-and-the-dom)\n\nReally wonderful read - very easy for me to assimilate because I'm so familiar with the DOM. It also helped me see how much of the trouble of FRP comes from not properly and completely abstracting over the imperitivity of the DOM.\n\n##### Recursion between FRP and the DOM\n\nThey do a good job of specifying this problem:\n\n> ...the DOM tree in an FRP application can change in response to changes in FRP behaviors and events. However such new elements in the DOM tree may also produce new primitive event streams... which the FRP program needs to be able to react to. In other words, there is a cycle of dependencies...\"\n\nThe easy solution to this is to give elements names, which we can then use to filter the event stream, but that doesn't feel quite right.\n\nUltimately, the problem is referential transparency: I want to be able to create two buttons that look identical but when I put them next to each other, they emit two different event streams. How is this possible if they are identical? They are not identical! When they were put next to each other, the position of one of them was changed in the layout function, and thus they emit different event streams! Of course in order to preserve modularity (so we don't only get event streams at the top level, when everything is being laid out), we need to use a trick I learned from Conal where you translate the event stream going into a \"component\" with the inverse of the translation you used on its position. (I haven't entirely worked out this scheme, but I feel it's promising.)\n\n### Monad Reading\n\n#### [What we talk about when we talk about monads](https://arxiv.org/abs/1803.10195)\n\nFrom Jonathan Edwards. Great recommendation!\n\nBe careful about the \"romance of mathematics\". It's perfect-ness is illusory. Yet despite this, I still feel like math is our best way to reduce incidental complexity.\n\nThis definitely made me even more skeptical of monads! He showed cases where people put the word \"monad\" in the title of their papers when it had no business being there - just to show how cool they were.\n\n#### Monads and input/output (section 7 of [\"being lazy with class\"](http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf))\n\nFascinating to learn about. Moggi introduced monads to structure the denotational semantics of state and exceptions, but \"a denotation semantics can be viewed as an interpreter written in a functional language\" and \"Wadler used monads to *express* the same programming language features that Moggi used monads to *describe*.\n\n#### [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm)\n\nI printed this one out and re-read it for the 7th time. It's so fucking brilliant.\n\n\"Programming is more about the middle than the end, i.e., more about composition than output.\" And quoting Roly, \"What looks like imperative output can be just what you observe at the boundary between two subsystems.\"\nWe need imperativity in our functional code (usually structured with monads) when we haven't properly abstracted that particular API into a functional interface yet. For example, think about `putChar` and `getChar` from the terminal. How fucking imperative is that?! But FRP (even React) shows you that you don't need to put and get characters from the screen imperatively. Instead you can describe the UI input and output declaratively - no monads required! The way to get rid of monads is by abstracting over imperativity (databases, file systems, operating systems, etc), one by one.\n\n### Other Reading\n\n#### [Tangible Functional Programming](http://conal.net/papers/Eros/)\n\nI enjoyed the beginning, but also had trouble sticking with this one, but hope to get back to it soon. It's so up my alley!\n\n#### [Promise of Live Programming](https://2016.ecoop.org/event/live-2016-the-promise-of-live-programming)\n\nThis was a fun one. Live programming provides a rubric through which to rate a programming system, but not to come up with a programming system.\n\n#### [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)\n\nThis is one of my favorites! These recipe diagrams are just devine! He really makes the case that functional programming is about explicit data dependencies, and it's gorgeous.\n\n#### [Destroy All Ifs](http://degoes.net/articles/destroy-all-ifs)\n\nReally great. He goes even further than I do when thinking about this topic: instead of inputting booleans (or union types) into functions, we should add lambdas, which are semantic explanations of what we want done.\n\n### Todos as of 6/16/16\n\nI'm continuing from [the last todos in this journal](http://futureofcoding.org/log#todos-as-of-52118) (without the completed or no-longer-relevant ones):\n\n* Follow up with Jonathan Edwards with my research direction, current problem(s), next steps, ask for relevant papers, schedule next chat, and send him Woof code\n\n* Read the papers I've printed out, including\n * [Push-Pull FRP](http://conal.net/papers/push-pull-frp/)\n * [Monadic Functional Reactive Programming](https://www.researchgate.net/publication/262292005_Monadic_Functional_Reactive_Programming)\n * [Practical Principled FRP](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.724.7758&rep=rep1&type=pdf)\n * [Hazelnut](https://arxiv.org/abs/1607.04180)\n * [Back to the Future: Time Travel in FRP](http://www.cs.nott.ac.uk/~psxip1/papers/2017-HaskellSymposium-Perez-BackToTheFuture-TimeTravelInFRP-latest.pdf)\n * [Lambda in Motion: Controlling Robots with Haskell](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.456.1707&rep=rep1&type=pdf)\n * [Fudgets](https://www.researchgate.net/publication/2247556_FUDGETS_-_A_Graphical_User_Interface_in_a_Lazy_Functional_Language)\n * [Tangible Functional Programming](http://conal.net/papers/Eros/)\n\n* Other things to read\n * Simon Friis Vindum, including [Let's reinvent FRP](http://vindum.io/blog/lets-reinvent-frp/), Hareactive, and reach out to chat\n * Re-read [Elm goodbye to FRP](http://elm-lang.org/blog/farewell-to-frp). Maybe I'll understand it now. Or soon.\n\n* Update the plan, possibly stealing stuff from the never published [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)\n\n* Reach out to Sean McDirmid, and maybe read [this paper he referenced](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf)", "changes": []}, {"committer": {"date": 1529326967, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "987c075ff8178ee18faaff773971fe1c95900373", "parents": ["5bd3da59b05370f6a95ce10e4fa88df90471c6d0"], "commit": "0dcecbd13a1cf0a83831d9386e54164c18135a4a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "abea17f74c4dc03d0a04fb26d61ed05b3f72abb2", "parents": ["7b543e40f390cf22e1a5ffcdf755f6ad6b2fc857"], "commit": "5bd3da59b05370f6a95ce10e4fa88df90471c6d0", "message": "redirect notes to github as index (for now)", "changes": [[1, 0, "notes/index.html"]]}, {"committer": {"date": 1528825866, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b93ffddcb3de9e5eaacdee812c516e15c2c6d97", "parents": ["2a2631c57ee33759ee72b012334110ad8dcd090d"], "commit": "7b543e40f390cf22e1a5ffcdf755f6ad6b2fc857", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6709bda29f7f850a2a7d22b014d833ec845d6731", "parents": ["24fbff9ce3b8da1489bc7557db633805d9d13929"], "commit": "2a2631c57ee33759ee72b012334110ad8dcd090d", "message": "added episode 25, kevin lynagh", "changes": [[44, 0, "episodes/25.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1528132439, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8b1e13737f4f55e6ed43011d3187dd87945a3c13", "parents": ["1536b59cc7b8b60cc4613bb07d444f85af03df09"], "commit": "24fbff9ce3b8da1489bc7557db633805d9d13929", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c5f34acccd3fbdedfec54de1c1032ddece928592", "parents": ["863d92790183ee15c60d0b3a39f549082d357d5c"], "commit": "1536b59cc7b8b60cc4613bb07d444f85af03df09", "message": "## Friday 6/1/18\n\n* TOC\n{: toc }\n\n### The Mythical Man Month\n\nI was a bit exhausted from coding last week, so I let myself relax with The Mythical Man Month. I had started it a few weeks ago, but I finished it on Friday.\n\nFirst of all, it's shocking to see how many key phrases in this field come from this book:\n\n* The Tar Pit (which is used by the famous \"out of the tar pit\" essay)\n\n* No Silver Bullet\n\n* The Mythical Man Month\n\n* Essential vs Accidental complexity\n\nMuch of the book is still relevant today, even though programming has changed a ton since the 60s, and of course many is just hilarious reminders of how much has changed.\n\n#### No Silver Bullet\n\nAs you may expect, the \"No Silver Bullet\" essay was the most relevant to me, and I LOVED it. Very, very thought provoking.\n\nThe premise of the essay is this: there will be no single magical solution that will drastically improve the beast that is programming. Instead there will be a myriad of small incremental improvements that will over time tame the beast.\n\nA wonderful analogy he uses to illustrate the premise: Before germ theory, we held out hope for magical solutions, such as the fountain of youth, to solve all of our problems. Germ theory, however, told us that no magical solution was coming. Instead we have a long term, tedious war, that will have to struggle against for decades and decades, making slow slow progress. Yet, once we accepted that and stopped wasting all our time looking or waiting for magic, we were able to get to work on making the necessary incremental progress, and look where we are now.\n\n##### Inherently Invisible (bullshit!)\n\nThus it's time to change our focus from the accidental complexity (of hardware limitations, etc) to the essential complexity of ameliorating the inherent difficulties of software development, which are its complexity (so much more intricate than other engineering disciplines), changeability (software is changed rapidly as compared with cars, for example), and invisibility (not naturally mapped onto a 2d visual plane).\n\nOk, I'll agree with him the programming is indeed harder than other kinds of engineering for greater complexity and change-ability. While fast changes are hard to deal with, version control in git and GitHub is pretty good, and I and others have a few ideas on how to improve this. Yet if it is indeed also inherently un-visualizable, than we are going to be hard pressed to address all the complexity in code.\n\nBut of course I strongly disagree that software is inherently un-visualizabe. I think if Brooks looked at the work of Bret Victor and Edward Tufte, he'd see that through innovative design work, we can increase the visualizablity of just about anything. While we might not have great visualizations today, have hope! Many visualizations that seem obvious now were not obvious before they were invented -- and it was in no small part data graphics that led the scientific journal revolution.\n\n##### We don't even know what's essential\n\nAdditionally, I deem much of what Brooks refers to as essential difficulties in programming as accidental to how programming is done today, and not at all essential to solving the problems at hand.\n\nThought experiment: how long would it take for you to describe Twitter, the entire application, from the consumer's perspective, down to every interaction and pixel? Maybe a couple dozen hours, maybe a hundred, at the outset. Yet thousands of engineers are working on it every day. Why? 99% incidental complexity.\n\nOf course, you may argue that to simply describe Twitter in English is not a fair test because English is not precise enough. So what language do we have that's 100% essential complexity, 0% incidental? My thought is that math is just such a language. It talks about conceptual objects and relations, not at all about how such things are computed (unless that's what you are talking about in math). And of course this is why I'm currently working on (as you can see in the last few entries below) describing UIs with only pure maths / piecewise functions with dynamic piece breaks.\n\n##### Communication and composibility are key\n\n100% agreed. So much of what stinks about programming today is that folder-and file interface of code. Impossible to navigate and communicate how things are built and run. I think a key way to overcome this is to build a sounder model for computation that lends itself better to communication and understanding (such as definitions only depend on explicit dependencies, and nowhere else).\n\nComposibility is also key, particularly for re-using code and collaboration.\n\n##### Object-oriented programming\n\nI haven't thought alot about OOP in a while. It's always felt lame to be, particularly because I learned it in Java and it was mostly about inheritance.\n\nYet there's one idea about it, encapsulation, which is kinda neat. The idea is restricting the mutation of state to a higher level operation, hiding the implementation details, and also limiting the number of pathways that can change state. Of course, in practice, objects often become dumb data structures and people just mutate their fields willy nilly with no encapsulation.\n\nI think what OOP is missing here is being explicit about who can access those pathways under which conditions. In other words, being clear about what can effect certain pieces of state, what it depends upon, as opposed to the protocol by which it can be ordered about by.\n\n### GoTo Considered Harfmul\n\nI can't believe it's taken be so long to read this. It's just 1.5 pages. It's so great. Makes me think that even more of what we do to program is also harmful in a similar way. As I've been saying recently, everything but mathmatical expressions are harmful. A new thing that I've been against recently is dynamic scope and lexical scope. Names are super dumb. Content hashing is really the only way to go. [I saw a fun Twitter argument on this this morning with Joe Armstrong.](https://twitter.com/joeerl/status/1003532451652734978)\n\n### Tweets with tools_for_thought\n\nI had a lot of fun tweeting with Michael Nielsen on Twitter via his tools_4_thought account: [https://twitter.com/stevekrouse/status/1002604633209131009](https://twitter.com/stevekrouse/status/1002604633209131009)\n\nI also had success tweeting a Fred Brooks quote: [https://twitter.com/stevekrouse/status/1002614810780094469](https://twitter.com/stevekrouse/status/1002614810780094469)\n\nI find it hilarious how great Twitter is for this community!", "changes": []}, {"committer": {"date": 1527806386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c5f34acccd3fbdedfec54de1c1032ddece928592", "parents": ["a2d17c4e2b192407d29bfc0639977d9d60ed24a1"], "commit": "863d92790183ee15c60d0b3a39f549082d357d5c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "579d87526bfeca4f11d76a6dc115d6073a751059", "parents": ["209436bb1c93ff248f651374a66eafd842d6ac71"], "commit": "a2d17c4e2b192407d29bfc0639977d9d60ed24a1", "message": "## A Bouncing Ball Graph\n\n* TOC\n{: toc }\n\nAfter banging my head against the ball for an hour or so trying to get Newton's method to work in JavaScript, I bailed for the Wolfram Language which, as you'd expect, has excellent primitives for solving equations, both analytic and computational.\n\nHowever, I did really get fed up with constantly re-evaluating old cells to make their definitions update. This was glitchy some of the time too, making me thing there were bugs when it was that I was looking at older version of expressions.\n\n### Wolfram Bouncing Ball\n\nAnyways, it took me a 3-5 hours, but I finally got a piecewise, pure, mostly-non-recursive function which can be infinitely expanded of a bouncing ball. Let's look at the code:\n\n```\nsim[0] = <|start -> 0, end -> 0, vel -> Function[t, 0], pos -> Function[t, 0] |>\nsim[n_] := sim[n] =\n With[{start1 := sim[n - 1][end]},\n With[{previousV := sim[n - 1][vel][start1]},\n With[{vel1 := Function[t, -previousV*0.9 + -10*(t-start1)]},\n With[{startPos := sim[n - 1][pos][start1]},\n With[{pos1 := Function[t, startPos + ((vel1[t] + vel1[start1])/2)*(t -start1)]},\n With[{end1 := First[t/.Solve[{pos1[t] == -473 && t > start1}], t]},\n <|start -> start1, end -> end1, vel -> vel1, pos -> pos1 |>\n ]\n ]\n ]\n ]\n ]\n ]\n\npiece := Function[n, {sim[n][pos][t], t < sim[n][end]}]\n\nPlot[\n {Piecewise[Map[piece, {1,2,3,4,5, 6, 7, 8}]]},\n {t, 0, 100}\n]\n```\n\nWhich gives us the glorious result:\n\n![screenshot 2018-05-31 at 5 43 05 pm](https://user-images.githubusercontent.com/2288939/40809942-2d49c7fa-64fa-11e8-9662-c3fc1ac54195.png)\n\n#### Top-level explaination\n\nThis code isn't at all read-able, even by me, a few hours after I wrote it.\n\nFirst a top-level explaination: the code is creating a piecewise function. Every time the ball hits the bottom (-473), we need to create a new function to represent it's motion post-bounce.\n\nWhat's tricky is that each piece of the function depends on the previous piece's end values (when the ball bounces, we need it's old position and velocity). So we construct this recursive function `sim` which will generate us parts of bounces.\n\n#### Line-by-line explaination\n\n```\nsim[0] = <|start -> 0, end -> 0, vel -> Function[t, 0], pos -> Function[t, 0] |>\n```\n\n`sim[0]` represents the initial conditions, lasting 0 seconds (as the start and end times are the same).\n\n```\nsim[n_] := sim[n] =\n```\n\nWe define `sim[n]` here and also let Wolfram know to (memorize the results of prior runs to `sim` so it doesn't need to recompute the results)[http://reference.wolfram.com/language/tutorial/FunctionsThatRememberValuesTheyHaveFound.html].\n\n```\n With[{start1 := sim[n - 1][end]},\n```\n\nHere I begin a nested series of `With` statements. They are nested because the computations depend on each other and Wolfram `With` statements aren't smart enough to figure out how to handle that.\n\nSome of the variables defined in the `With` statements, such as `start1` above are eventually placed into the association (it's like a dictionary or object) below. I didn't name this variable `start` (as you would in another langauge), because Wolfram would then then I wanted the *key* to be the value of the start variable, such as `<| 4.34 -> 4.34, ... |>` -- so that's why there's a `1` after certain variable names.\n\nAnd now to the meat of this line: it says that the start of the current piece is the end of the prior piece. Pretty straight forward.\n\n```\n With[{previousV := sim[n - 1][vel][start1]},\n```\n\nHere we calculate the final velocity of the previous piece, which we do by evaluating its velocity function on the starting time of this piece (which as we calculated above is the ending time of the previous piece).\n\n```\n With[{vel1 := Function[t, -previousV*0.9 + -10*(t-start1)]},\n```\n\nHere we calulate the velocity of this piece:\n\n * We reverse the end velocity of the previous piece, because the ball should bounce up with the same speed it hit the ground\n * But not quite the same speed because balls never bounce as high as they did when they were dropped, so we multiply the speed by 0.9\n * And then we changing the speed by -10, which is our acceleration, every second after the starting time of this piece.\n\n```\n With[{startPos := sim[n - 1][pos][start1]},\n```\n\nThe starting position of this piece is the position of the previous piece at the end time of that piece (which is the starting time of this piece). This is the same way we found `previousV`.\n\n```\n With[{pos1 := Function[t, startPos + ((vel1[t] + vel1[start1])/2)*(t -start1)]},\n\n```\n\nThen we calculate position:\n\n * starting at the initial position\n * then taking the average of velocity at the current moment and the velocity at the beginning of this piece\n * and multiplying the average velocity by the time elapsed in the current piece so far\n\n```\n With[{end1 := First[t/.Solve[{pos1[t] == -473 && t > start1}], t]},\n```\n\nAnd here we calcuate the time at which this piece hits the floor which I set here to be -473. The meat of this line `Solve[{pos1[t] == -473 && t > start1}], t]` simply asks to solve for `t` where the position is at the floor and the time is after the starting time of this piece. `First[t/.` is just extracting the computed solution out of the result.\n\n```\n <|start -> start1, end -> end1, vel -> vel1, pos -> pos1 |>\n```\n\nAnd here we boringly compile the results of our hard work into a single data structure.\n\n```\npiece := Function[n, {sim[n][pos][t], t < sim[n][end]}]\n```\n\nThis function turns the nth simulation into an array suitable for the `Piecewise` function. It's first argument it the function to be plotted and the second argument is the domain over which it should be plotted. In this case, the first argument is simply the position and the second argument is that the time shall be less than the ending time of the piece.\n\n```\nPlot[\n {Piecewise[Map[piece, {1,2,3,4,5, 6, 7, 8}]]},\n {t, 0, 100}\n]\n```\n\nAnd here we plot 8 pieces of the simulation, resulting in the beautiful graph you saw above.\n\n### But why?\n\nI've been talking a lot about piecewise functions these last few days, to my mom and my girlfriend, and they both think the idea is kinda neat, but don't understand why I'm doing this. I don't have a great defense. Instead of spending 4ish hours making this graph, I could've done the [same thing in WoofJS in 9 lines of very readable code](http://woofjs.com/create#very-simple-ball) in *under 60 seconds* (I timed it):\n\n```javascript\nvar circle = new Circle({})\ncircle.v = 0\nforever(() => {\n circle.v--\n circle.y += circle.v\n if (circle.y < minY) {\n circle.v = circle.v *-0.9\n }\n})\n```\n\n#### I want definitions to be definitional goddammit!\n\nI want that when you define something it stays defined. I've had enough of these mutable reference cells that you can read to and write to at any time. I've had enough of playing Turing Machine!\n\nRedux isn't all that different than global state we had before. Sure it's easily serialize-able, which gives you undo and redo, and time travel debugging, but that's not all I want.\n\nI want to be able to look at a piece of code and know that the only things that can affect that code are written in it. A piece of code should depend on its dependencies. Nothing else should be able to change it. In this way you could understand a small section of your code without having to understand the whole thing. Without this we are doomed to read all our code if we want to understand what's going on.\n\nI don't know much maths beyond high school, so I wonder if my salvation lies in a more powerful structure than a piecewise function. If any math geeks out there are reading this, please let me know if you have any ideas!\n\n### Mitigating thoughts\n\nPossibly these explicit formula and the Logo/Woof implicit, recursive formula are just two sides of the same coin, and we could allow programmers to write in the more intuitive (change the position by X every Y) and then take the derivitive of that to get the explicit form. (It seems like there are ways to get explicit formula for any implicit or recursive formula, so this seems likely...)\n\nIn the same way, I wonder if we can convert a codebase where any mutable cell can be changed by anyone, and statically parse all the places in the code that *could possibly* have an effect on that value, and bring them all together so you can see you things are tangled. (I am doubtful of this because 1. which values are being modified can change dymaically so we can't really assess well statically, 2. I bet this would be such a gnarled mess that it's not really useful expect to show us all the folly of our entangled ways.)\n\n#### There are just a whole bunch of bad things I know about\n\n1 - Control flow of any kind seems like a terrible idea all around. You should just describe the system and the system shall determine which lines of code to run when. Non-monadic Haskell does a great job of doing away with this.\n\n2 - Mutable variables seem like a terrible idea, as discussed above.\n\n3 - The global state reducer from actions also feels like a terrible idea. I don't want anything to be able to emit an action that can change any part of the system. If you look at a piece of state, how are you to know which actions could affect it? I also feel like it's too much power, allowing the system to change itsellf based on the past value of itself.\n\nBut how are these piecewise functions any better, you ask? Great qusetion! As you noticed, when a new piece of the piecewise function is being created, it depends on the values of the last piece. It has the entire state of the app to do what it wills with. Yeah I didn't like this either, but I wasn't able to thing up a way out of it. We really need to know the final velocity / position of the prior piece to start the next bounce. But I'm not terribly beat up about it: maybe allowing pieces to view prior pieces on piece transitions isn't so bad...?\n\nAs far as the first cricism of Redux from above, that the dependencies of a piece of start aren't listed in the state, I haven't yet dealt with that because I haven't built \"prototype\" to also work with unpredictable input, such as mouse clicks. But the idea is to allow mouse clicks to trigger new pieces to be generate at the time of the mouse click. Only time protoyping will tell if this new framework has any merits at all.\n\nPart of me wonders if I need to build an interface for this prototype because exisiting ones (such as Wolfram and Woof) just don't cut it. And part of the whole point is that I'm just constructing transitions between pure mathmatic functions, so should it be super easy to visualize the state of all my functions as graphs?!\n\nAt the very least, I'm glad I was finally able to articulate above my dislike of the current frameworks: you can't tell what's going on at X by just looking at X and asking for its dependencies.", "changes": []}, {"committer": {"date": 1527738703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "579d87526bfeca4f11d76a6dc115d6073a751059", "parents": ["9426c37530ce44d762795ec0e62cc5e3916d7021"], "commit": "209436bb1c93ff248f651374a66eafd842d6ac71", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "496fe5d3d778b1ebfffb0bea2a8caf5ce6cb64c4", "parents": ["63dbb314e2f542f82f911a0971798ebc6ff067f0"], "commit": "9426c37530ce44d762795ec0e62cc5e3916d7021", "message": "## Added old /journal entries to /log\n\nThis closes #66, get /journal entries into /log.\n\n### Notes on ObservableHQ\n\nI did it in ObservableHQ [here](https://beta.observablehq.com/@stevekrouse/parse-and-join-journal-to-commits), which was really fun and fustrating, both!\n\n* It took me 5ish to do this task in JS in ObservableHQ, when it wouldn't have taken more than 1 hour to do by hand (as there were only 68 elements).\n* I both hate and also love ImmutableJS. It provides an API like lodash which is great. It's annoying because the values don't [yet](https://talk.observablehq.com/t/custom-representation-for-object-in-the-output-cell/412/3) display well and I needed to add lots of printLine statements below my code `someImmutableValue.toJS()` just to see what was happening. Also I'd sometimes forget about it and use the old syntax and things would silently break: very fustrating! Also a bit annoying when you're doing `a.something(b)` and you want to switch the arguments - lots of typing! Probably lost an hour on ImmutableJS alone, but it was definitely worth it for the API, speed, and not having to worry about mutability ever.\n* I found the way that code was hidden by default (unless you pinned it open) was counter to what I wanted most of the time. I think I'd probably prefer the reverse: to collapse code when I'm done with it.\n* I lost another hour trying to use [simple-markdown](https://github.com/Khan/simple-markdown) which was waaaay more than I needed, given that all I needed was to split the string on a simple regex. Another hour or so gone there.\n* Maybe a half an hour was lost screwing up with momentjs, which would fail silently on me. So annoying! Give me an error goddamn it!\n* But the most fustrating loss of time came from writing functions: you can't see intermediate values and the debugging support is lack-luster. So the main benefits of a reactive tool is lost the second you want to abstract over a list! I was constantly creating a function and testing in on various elements, and then changing the index one at a time to see how it worked: `someFunction(someLIst.get(5))`. What's the point of putting my code in cells a whole function is just one cell?! You loose all the benefits of the cells and intermediate results because functions are just a textbox! Not entirely sure how I'd fix this but I have an intuition that it should be possible within this paradigm.\n* I really wish I could've also hid the output of a computation, for example the text of the journal which was really long.\n* You can't search through the code with ctl-f because it's mostly hidden.\n* You can't see (without reading) which cells depend on which other ones.\n* You can't drag cells into other orders.\n* It's a bit annoying navigating object hierarcy trees - it'd be better if it defaulted to a table or something maybe.\n\nIt's interesting to note how few operations I used:\n\n* A TON of `map`, `filter`, `some`, `max`, `find` and other Immutable list and map operators\n* regex\n* date parsing and diffing (momentjs)\n* importing the file over HTTP\n* downloading the result JSON as a file\n\nFor regex, I used [regexr.com](https://regexr.com) to live show me the output right on the data I was using.\n\nFor date parsing and diffing, I was constantly screwing this up and had to instrument my own code by hand to figure out in which ways. It definitely feels like there should be a regexr-like environment for this too.\n\nDitto for the list operations: no reason that any of these shouldn't show you the results in a more immediate way, and where you can see the intermediate values too of course. As said above, not 100% sure how to do this but I feel like it's not too tough.\n\nAs for importing and exporting data, not difficult once you find the example somewhere. I think those sorts of primitives should be easy at hand.\n\nSpeaking of easy at hand, I spend a TON of time switching tabs (ObservableHQ doesn't work great in half-screen) to look at the Immutable, Moment, simple-markdown, and various other documentations. It was annoying. They really need autocomplete on variable properties -- but also with documentation, preferably with examples!\n\nAnd of course, I think everything would've been beeter with stronger types. I wasted so much time thinking that everything was OK when it wasn't and banging me head against the wall. I want to know when things fail!\n\nAnd if you can do it with no syntax errors, that's pretty amazing too!\n\n#### Project idea: functional, immutable, strongly-typed notebook?\n\nThis all makes me think that there's a neat prototype opportunity here. All my prior protyotype ideas in this space have been very visually-focused, almost like spreadsheets. Very much like Glen's [FlowSheets](https://tinyletter.com/Flowsheets/archive). But what if we don't need the interface to be a spreadsheet (because variables (as opposed to column and row reference) and nested data structres are nice), but just a vertical series of cells (and cells within cells within cells for nested levels of abstraction)? Syntax errors aren't so bad (considering I haven't yet met a projectional editor I prefer, maybe save Scratch), but let's definitely get some strong types, solid primitives (data structure, string, date, HTTP, importing), and inline documentation.", "changes": [[58, 0, "_data/commitToJournalMarkdown.json"], [3, 2, "log.md"]]}, {"committer": {"date": 1527736120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e0d81027e2c25b1e6da49f216ff612010c3d57f7", "parents": ["8de6e73131294c0a98dfd912388c3fe3a7214f39"], "commit": "63dbb314e2f542f82f911a0971798ebc6ff067f0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1792cc3328d51b3c9d1f03a6fbd36d6a23a21364", "parents": ["8c9419a407b3c534ad0cd71e7c8db9cfa019bce6"], "commit": "8de6e73131294c0a98dfd912388c3fe3a7214f39", "message": "removed colons from page titles to mollify jekyll a la https://github.com/jekyll/jekyll/issues/549", "changes": [[1, 1, "episodes/21.md"], [1, 1, "episodes/22.md"], [1, 1, "episodes/23.md"], [1, 1, "episodes/24.md"]]}, {"committer": {"date": 1527624807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77567e9e6a60384b0e78cbb6a341a8c8f3245b8f", "parents": ["86d7634d3486bf2c116133c3d9ab3e2b2e510a13"], "commit": "8c9419a407b3c534ad0cd71e7c8db9cfa019bce6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["0ef7c3538cd36ec9b7300dbb5b8892dd84618788"], "commit": "86d7634d3486bf2c116133c3d9ab3e2b2e510a13", "message": "## Math and physics as code\n\nI've had this intuition for a while now: wouldn't it be neat if you could somehow \"copy-and-paste\" your physics equations from your textbook and drop them into your computer and that be the code?\n\nLet's describe a bouncing ball.\n\nWorks great to start:\n\n```javascript\nconst a = (t) => -9.8 /* meters per second sq */ * 10 /* px per meter */\nconst v0 = 0\nconst v1 = (t) => v0 + a(t)*t\nconst p0 = 0\nconst p1 = (t) => p0 + (((v1(t)+v0)/2)*t)\n```\n\nBut what about the bounce? There are two problems:\n\n1) We need to reverse the velocity (multiply it by -1)\n2) We need to know at what time the bounce occurs\n\nHow about a piece-wise defined function? For starters, let's just hardcode the bounce intervals at 3, and 9:\n\n```javascript\nconst t_bottom1 = 3 // p1(t) === 0, solve for t\nconst v2 = (t) => -v1(t_bottom1) + a(t)*(t - t_bottom1)\nconst p2 = (t) => p1(t_bottom1) + ((v2(t) + v2(t_bottom1))/2)*(t - t_bottom1)\n\nconst t_bottom2 = 9 // p2(t) === 0, solve for t\nconst v3 = (t) => -v2(t_bottom2) + a(t)*(t - t_bottom2)\nconst p3 = (t) => p2(t_bottom2) + ((v3(t) + v3(t_bottom2))/2)*(t - t_bottom2)\n\nconst p = (t) => {\n if (t < t_bottom1) {\n return p1(t)\n } else if (t < t_bottom2) {\n return p2(t)\n } else {\n return p3(t)\n }\n}\n```\nOk, let's abstract this so the ball can bounce forever-ish:\n\n```javascript\nconst eq0 = {\n t0: -1,\n v: (t) => 0,\n p: (t) => 0\n}\nvar equations = [eq0]\nconst intervals = [0].concat(range(3,1000, 6)) // [0, 3, 9, 15, ...]\nintervals.forEach((t0, i) => {\n var eq = {}\n\n eq_last = equations[i]\n eq.v_last = eq_last.v(t0)\n eq.p_last = eq_last.p(t0)\n\n eq.t0 = t0\n eq.a = (t) => -9.8 /* meters per second sq */ * 10 /* px per meter */\n eq.v = (t) => -eq.v_last + eq.a(t)*(t - t0) // NEXT: can't decrease by 0.9 because then 6 second hardcoded intervals are fucked up\n // THUS: how do make dynamic\n // MAYBE use something like http://algebra.js.org/ to solve the equations\n // WHICH would eventually lead to allowing mouse click generated invervals\n eq.p = (t) => eq.p_last + (((eq.v(t)+eq.v(t0))/2)*(t - t0))\n\n equations.push(eq)\n})\n\nfunction eqI(t) {\n const eqNext = equations.find(eq => t < eq.t0)\n if (!eqNext) { return equations.length-1 }\n const eqNextIndex = equations.indexOf(eqNext)\n return eqNextIndex - 1\n}\n\nconst p = (t) => {\n const eq = equations[eqI(t)]\n return eq.p(t)\n}\n```\n\nFull code to be found [here](http://woofjs.com/create.html#physics-and-math/6).\n\nAs said in the code, next steps are:\n\n1) make the intervals dynamic (so we can decrease the speed by 10% each bounce), maybe using something like http://algebra.js.org/ to solve the equations\n2) see if we can additionally generate intervals by non-predictable user-input, such as mouse clicks\n3) ...turn into flappy bird?\n\nSome notes:\n\n* It was really annoying to code this, because math can be annoying especially inside JS. I wonder how much better it could be in the right kind of environemnt that supports this kind of maths with rapid feedback. I worry that expressing things in this explicit, closed form, with partial equations will be too awkward for people and the gains of mathmatical purity, expresivity won't be worth it. Regardless, I want to follow down this rabbit hole and see where it goes.\n* To really show why it's neat to do things in this closed form, I should probably add a time travel debugger thing, that also shows the positions and velocities and accelerations at different points in time, and change when you tweak the params. Probably would be a neat demo.", "changes": []}, {"committer": {"date": 1527272599, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1527272599, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09", "1c804a419370b04fafa3cd85279534dbeb51da0c"], "commit": "0ef7c3538cd36ec9b7300dbb5b8892dd84618788", "message": "Merge pull request #80 from tom-bop/master\n\nFix typo", "changes": []}, {"committer": {"date": 1527271549, "timezone": "+0000", "name": "tom-bop", "email": "tom@tinybop.com"}, "author": {"date": 1527271549, "timezone": "+0000", "name": "tom-bop", "email": "tom@tinybop.com"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09"], "commit": "1c804a419370b04fafa3cd85279534dbeb51da0c", "message": "Fix typo", "changes": [[1, 1, "episodes/23.md"]]}, {"committer": {"date": 1527019804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1076c9844380cc196d49d6a46cb67e6f5e956ed", "parents": ["046fd231d4a9805568bdd2a7a8d3e2d9e6838d08"], "commit": "01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "149fe398947e50529ff7956c95eccadfd0fd235a", "parents": ["6c80e3f9669ad6934453999c1ddff800dda8b2f6"], "commit": "046fd231d4a9805568bdd2a7a8d3e2d9e6838d08", "message": "removed 'monthly' from NYC meetups", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1527019741, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8493118006f99adf1372c54812ad361e413b70dd", "parents": ["6795eb87e77a85e50753505a52e0a3465822d9df"], "commit": "6c80e3f9669ad6934453999c1ddff800dda8b2f6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3f70f698de1e9a493e175c54246e152df322fdc", "parents": ["d887811af3d3cd2d13485b1d78e29fa912539cc8"], "commit": "6795eb87e77a85e50753505a52e0a3465822d9df", "message": "zero pad episode numbers for alignment", "changes": [[9, 9, "index.html"]]}, {"committer": {"date": 1527019092, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "569709b79a3b52d16185737e1d2dbd17db71ed8a", "parents": ["66a88d8e978ae1ebb7810080e365aa1a796ceef4"], "commit": "d887811af3d3cd2d13485b1d78e29fa912539cc8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "be17b3666992010d351cea4605103d874df9d528", "parents": ["98b4c22905bc72c969924ae15820a3a269de10f6"], "commit": "66a88d8e978ae1ebb7810080e365aa1a796ceef4", "message": "added episode 24, nick santos, windmill", "changes": [[27, 0, "episodes/24.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1526926599, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "044ba8a986a77885702976b050ff51c08fc1dbbd", "parents": ["c93babd9c63fa35a4f26018c79c2c4422a63c492"], "commit": "98b4c22905bc72c969924ae15820a3a269de10f6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "616c94027545a010763f2d237e165205dd3f6725", "parents": ["01fa4fc9dfc9b872b4183fd99e3180b2483f2c94"], "commit": "c93babd9c63fa35a4f26018c79c2c4422a63c492", "message": "## The rabbitholes never end!\n\n* TOC\n{: toc }\n\n### Artist-Centric Programming Tools\n\nFriday night, Twitter sent me a notification to look at this tweet:\n\n

https://t.co/nqIwhoOc39
Recording of our presentation on Artist-Centric Programming Tools at #chi2018

— Jennifer Jacobs (@jsquare) May 18, 2018
\n\n\nFirst of all, I'm amazed and super grateful that Twitter was smart enough to let me know about this.\n\nI only got part-way into [the thesis](http://web.media.mit.edu/~jacobsj/resources/jjacobs_dissertation_final_optimized.pdf), but I'm pumped to finish it. I got distracted by one of her references, InterState...\n\n### [InterState](http://interstate.from.so/)\n\nIn [an earlier entry](http://futureofcoding.org/log#thoughts-for-next-week), I wrote:\n\n> how do Facebook’s Origami, CycleJS devtools, and statecharts somehow fit together?\n\nThis protoype seems to answer that question! I was so excited that I [sent it over to the StateCharts community](https://spectrum.chat/statecharts?thread=535444a5-1743-4124-b767-ed7b490db7ec)!\n\n### Finished re-watching Tangible Functional Programming\n\nReally wonderful! I missed the beauty here in the first watching. Notes [here](/nodes/conal-elliot).\n\n### Some interesting links I found along the way:\n\n* [Concur - a new FRP library](https://github.com/ajnsit/concur) - Found by searching \"Elm Fudgets\" after reading about [Fudgets](http://www.cse.chalmers.se/~hallgren/Thesis/main.html#tutorial) on Conal's reccomendation.\n* [Forms/3](http://web.engr.oregonstate.edu/~burnett/Forms3/forms3.html) - I've heard of this before but checked it out after seeing it referenced by Conal, and it's cooler than I remember.\n* [Links Lang](http://links-lang.org/) - I found this after re-reading [\"What next?\"](https://graydon2.dreamwidth.org/253769.html) by Graydon Hoare. So cool! Unifies all layers of the stack into one language. Excited to check this out soon!\n\n### Open problems as of 5/21/18\n\nAs I was falling alseep last night, I thought about the core problems with existing languages:\n\n1. Redux, Elm, and CycleJS are a pain to code in. Small changes require big refactors. More importantly, emitting actions that can edit state in any way feels similar to the global mutable state we started with, that Andre Staltz argues against in [his arrow post.](https://futurice.com/blog/reactive-mvc-and-the-virtual-dom)\n\n2. IO (and async) in an elegant way. Monads and streams kinda stink and feel imperitive the same way Redux does. ([Conal agrees.](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm))\n\n3. In order to build a solution to these problems, it also needs to be somehow inter-operable with existing web frameworks. Relevant questions include whether its interpreted or compiled, etc, etc.\n\n4. Another open questions is what the backend should look like in order to handle authentication, permissioning, persistance, etc.\n\n5. Another open question: if you want to add phsyics to an object in your code, why not add the equations from your physics class to your program? In other words, how mathmatical and high-level can we get? What's the highest-levle we can get and still have something computable (with good performance) at the end? Additionally, can we make a declarative langauge that's readable and debuggable? (The Seymour Papert's distinction between LOGO's first-person `FORWARD 1, RIGHT 1`, and math's third-person `x^2 + y^2 = z^2`, and how they are really just two sides of the same coin via the derivitive feels relevant here.)\n\n6. Soundness of the type-system from a Scott, Strachey, and Elliot perspective also feels relevant here. I don't want leaky or infinitely-complex abstractions.\n\nI'm not even sure if these problems are truly problems, or just things I don't yet understand. Yet, it feels very relevant to continue down the Conal Elliot, FRP rabbithole. I hope that the more I understand Elliot's and (also Hudak's Arrowized) FRP, the more I'll be able to explain why I dislike Redux, Elm, and CycleJS. (Yet, I am a bit nervous that I won't like *any* implementation of FRP out there. What then?!)\n\n### Todos as of 5/21/18\n\nI still haven't found a better way to manage these than listing them every log entry. Here are the remaining ones:\n\n* Prototype TodoMVC in [InterState](http://interstate.from.so/), and read the paper, and reach out for a conversation\n* Finish reading [Jennifer Jacobs's Dynamic Drawing](http://web.media.mit.edu/~jacobsj/resources/jjacobs_dissertation_final_optimized.pdf), and reach out for a conversation\n* Edit (or throw out) [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)\n* Hareactive\n* Simon Friis Vindum, including [Let's reinvent FRP](http://vindum.io/blog/lets-reinvent-frp/), and possibly reach out for a conversation\n* [Facebook Origami Community](http://futureofcoding.org/log#facebook-origami-community)\n* Stratchey denotational design\n* Conal's Denotational design with typeclass morphisms, Fran, and basically everything he's done\n* [Verlet](https://twitter.com/stevekrouse/status/987339448064053249) and [ConstraintJS](https://twitter.com/coreload/status/989313738539909120)\n* Sean McDirmid (and [these](https://llk.media.mit.edu/papers/archive/ch-phd.pdf) [papers](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf) he referenced)\n* Reach out to Jonathan Edwards\n* make a better system for todos, things-to-research (FoC Research label in Inbox), ideas-to-ponder-on (FoC Thinking label in Inbox), projects/blogs-to-consider-doing", "changes": [[13, 0, "notes/conal-elliot.md"]]}, {"committer": {"date": 1526574583, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea33d6507ccc8640a1eee0003437e083a68e1ada", "parents": ["0d3827002f1cd5d66e603ee7d81b401e0e1a913b"], "commit": "01fa4fc9dfc9b872b4183fd99e3180b2483f2c94", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ddfa58ffa24926b814c2b620c6c3947d79ae3b81", "parents": ["ea574a895dc9e8b99a0f307d6707fc29d62be9b3"], "commit": "0d3827002f1cd5d66e603ee7d81b401e0e1a913b", "message": "added episode 23, brent yorgey", "changes": [[35, 0, "episodes/23.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1526507826, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e34e8ebab74a57103bb2269a497c087feab64f5d", "parents": ["df767b81300c4870b576e9c86d35823b84d81f46"], "commit": "ea574a895dc9e8b99a0f307d6707fc29d62be9b3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a68768f2d23a2451387d1400751fcf3f1016e6c", "parents": ["4dfa151938cd29c169085d2c2f86e3547a41c917"], "commit": "df767b81300c4870b576e9c86d35823b84d81f46", "message": "## Back at it, reading and emails\n\n* TOC\n{: toc }\n\nBesides the readings below, I cleaned up my inbox, which I haven't done in about a week, so that feels good to be back in integrity.\n\n### Jonathan-Edwards-inpsired Reading\n\nI meant to reach out to Jonathan Edwards today (but didn't), and found myself on his twitter, where I found some amazing gems:\n\n* [Against functional programming](https://twitter.com/jonathoda/status/976937603709587456)\n* [Near Future of Programming Languages by Stephen Diehl](http://dev.stephendiehl.com/nearfuture.pdf)\n* This comment amazing comment: [\"Imperative programs, on the other hand, always have a ready axis for decomposition: time. You break your program up into tiny time slices, and then work backwards to find procedures that that get you to the first one, then the second one, etc, until you hit the end of your program.\"](https://news.ycombinator.com/item?id=16726917) on this [Gradual Programming](http://willcrichton.net/notes/gradual-programming/)\n* Conal Elliot: [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm) - This article makes me so happy. Monads, and every other approach to IO in a functional language, stinks. We need to keep looking.\n* [Why program with continuous time?](http://conal.net/blog/posts/why-program-with-continuous-time) - good summary of the key points of FRP\n* [\"What next?\"](https://graydon2.dreamwidth.org/253769.html) by Graydon Hoare, creator of Rust. Holy shit this article is amazing. So many gems! I want to read this article again and again. Would love to email him and get his advice on where to apply my efforts towards improving programming.\n\n### Graydon Hoare-inspired reading\n\n* From Graydon, I was sent to learn about algebraic effect handlers in [Eff](http://www.eff-lang.org/), which didn't really impress me to be honest. Their pitch of \"you know how much you like exception handlers? Let's have more of those\" doesn't resonate with me because I never liked exception handlers. Feels to procedural, contextual to me. I much prefer it encoded in the types, such as a Maybe or Failure type.\n* [Koka](https://www.microsoft.com/en-us/research/project/koka/) makes a little more sense to me, labelling functions based on whether it can raise an exception, possibly not terminate, and be non-deterministic... but I only skimmed the beginning.\n* I was VERY EXCITED to see [Frink](https://en.wikipedia.org/wiki/Frink_(programming_language) and [\"units of measure\" in F#](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure). I've both sad and excited that [this exact idea I've had](http://futureofcoding.org/notes/kill-primitives#4-phsyics-units-for-numbers) has already been had. I claim independent invention!\n\n### Todos of 5/16/17 in no particular order\n\n* Finish re-watching Conal's [Tangible Functional Programming](https://youtu.be/faJ8N0giqzw?t=32m49s) and try to read [the paper](http://conal.net/papers/Eros/eros.pdf), Maybe I should print it out to help me focus...?\n* Also, don't forget [the other ToDos of last week](http://futureofcoding.org/log#some-todos-i-scribbled-down-last-week), especially reaching out to Jonathan Edwards and possibly Sean McDirmid\n* Possibly reach out to Graydon Hoare or at least learn more of what he has to say, including re-reading his \"What next?\"\n* Find a better way to manage these notes and todos so things get less lost...?\n* Edit (or throw out) [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)", "changes": []}, {"committer": {"date": 1525797727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a68768f2d23a2451387d1400751fcf3f1016e6c", "parents": ["031e9d1b697f170cf604d109c75853c424051528"], "commit": "4dfa151938cd29c169085d2c2f86e3547a41c917", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "905e670dc14194df79e92ee50e763097f73b5c56", "parents": ["6e8c88a3a430cac01ba62e463ab93bcc41dc71e7"], "commit": "031e9d1b697f170cf604d109c75853c424051528", "message": "## Notes From Last Week\n\n* TOC\n{: toc }\n\n### Repl.it dev, Mon - Weds\n\nI spent Monday - Wednesday last week working mostly on Repl.it. It was quite fustrating, but in a motivating way: there's so much about programming that needs fixing!\n\nTo give you a taste, I've worked 23 horus at Repl.it. The first 4.5 hours were spent setting up my dev environment, then another 2.25 hours debugging my dev environment, and ~2 hours fixing linting or flow type errors. And I believe most of the productive hours I spent were wasted waiting for webpack to recompile all my code for every little change. Sometimes I'd have to wait 10-20 seconds to see even a small change. Very fustrating and very slow! And, of course, so much of my time was spent understanding complex code, React/Redux abstractions, and funneling scope and state, etc, etc. So much garbage!\n\nFor the 10ish hours I wanted to work there, I clearly was not being productive enough to justify them getting me up to speed on their stack. As of yesterday, we parted ways, so now I'm down to the 1 part-time gig with Dark (and another one in the works, but it's touch-and-go if it'll close). As explained above, this work fustrated me so I'm happy to have it off my plate, but I also got enough fustration to re-spark some motivation in a positive way.\n\n### Thursday 5/3/18\n\nI read from 10am to 3pm. It was interesting but also difficult to stay focused.\n\n* Lucid Synchrone - skimmed\n* Sean McDirmid's Live Programming Video - Awesome! I want to review more of his work.\n* Conal Elliot Haskellcast video - So great. Took notes [here](/notes/conal-elliot).\n* Typeclassopedia - read for a bit, then skimmed.\n* [History of Haskell](http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=2B48E418C19376C73F08B593DCFDCAB7?doi=10.1.1.168.4008&rep=rep1&type=pdf) - read the first half, then skimmed.\n * Haskell was created to solve the \"tower of babel\" problem around all *lazy* langauges sprouting up. Purity and typeclasses came later.\n * I/O was intresting too: streams, contiuations, world-passing, and Monads\n* Can Programming Be Liberated...?\n * No variables or substitution! Just one input functions and function combinators.\n\n### Friday 5/4/18\n\nI wasn't so motivated on Friday, so I mostly read Understanding Comics (reccomended by Conal and BV), and did some part-time work for Dark. I also had a group call with Dennis Heihoff, Shaun Williams, and Ivan Reese, which was fun.\n\n### Devtools, not programming languages\n\nI've realized that \"devtools\" is a better way to describe the field I'm in that \"programming langauges\". Pretty obvious in retrospect, but took me a while to realize this.\n\n### Some ToDos I scribbled down last week\n\n* Stratchey denotational design\n* Conal's Denotational design with typeclass morphisms\n* Conal's Fran\n* Simon Friis Vindum, including http://vindum.io/blog/lets-reinvent-frp/\n* [Verlet](https://twitter.com/stevekrouse/status/987339448064053249) and [ConstraintJS](https://twitter.com/coreload/status/989313738539909120)\n* Sean McDirmid (and [these](https://llk.media.mit.edu/papers/archive/ch-phd.pdf) [papers](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf) he referenced)\n* Reach out to Jonathan Edwards\n\n### Less passion\n\nI haven't been super productive or passionate about stuff in a little while. It's been a bit of a slog getting myself to do research.\n\nPart of the reason is that I've becommed obsessed with The Wheel of Time series on audibook and am making my way through. Almost to the end!\n\n### Foundations\n\nI find myself increasingly curious about foundations, mathmatics, precision, abstraction, etc. I've always been on the fringes of the strong types community, and proving program correctness. These things were what the professors were up to a Penn while I was there. But I've never seen the need to dive in before. I think it was Conal's comments in the Haskellcast video that got me:\n\n1) Those that don't understand FRP are doomed to re-create inferior versions of it\n2) All the FRP implementations out there are more complex than their creators realize because they broke abstractions\n3) You don't truly understand how good or complex a design is until you describe it mathmatically, precisely\n\nMusic to Paul Chiusano's ears, I'm sure.\n\n### Vision: semantic and cannonical\n\nWhy am I so insistent that programming can be better? It's hard to put into words. As I was falling asleep a few nights ago, I was struck by how a two words kept coming to mind: \"semantic\" and \"canonical\". But what does that even mean? I have a fuzzy image of mathmatical expressions in the sky, with a white background behind them, and you can select different parts of the expression and get interesting information about the node, because it's a living object that can be manipulated...", "changes": [[31, 0, "notes/conal-elliot.md"], [33, 0, "notes/simon-friis-vindum.md"]]}, {"committer": {"date": 1525301982, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c6c30f064fea79c30702c45321c5d9237978b6d", "parents": ["2aa0ae3d492cab633ab48f0e4880abf1448d2df7"], "commit": "6e8c88a3a430cac01ba62e463ab93bcc41dc71e7", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d295d4d6073dba921bbe7831dd07cdd3d0b20134", "parents": ["ca2b25b44ef93e32588f786f8966f92089bd9a57"], "commit": "2aa0ae3d492cab633ab48f0e4880abf1448d2df7", "message": "add link to talk about", "changes": [[1, 1, "_data/git-log.json"], [1, 2, "episodes/22.md"]]}, {"committer": {"date": 1525301433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5e26fc78111619ff3e06d0ceb181e54ab3812c61", "parents": ["08a5b5f06b357f13e5e786e370da24d271bb2c97"], "commit": "ca2b25b44ef93e32588f786f8966f92089bd9a57", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "48403bb37ee5cf437fe1381ae08b8a750fb5c979", "parents": ["583cf7c28dab8c3ed63f106a52940435af0a467a"], "commit": "08a5b5f06b357f13e5e786e370da24d271bb2c97", "message": "linkify python tutor", "changes": [[1, 1, "episodes/22.md"]]}, {"committer": {"date": 1525301391, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "45954131917524d72c141e1ad3111b7da9adb284", "parents": ["cae6f341f16ce20849db361ec73c858513297321"], "commit": "583cf7c28dab8c3ed63f106a52940435af0a467a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b45b0981a11fdcdc82c34fbe0e701ab0890e19cc", "parents": ["a8b31d604dc9967eb974010f5242a7bafe01c1a1"], "commit": "cae6f341f16ce20849db361ec73c858513297321", "message": "removed typo", "changes": [[1, 1, "episodes/22.md"]]}, {"committer": {"date": 1525301185, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d43d0a248ca371ec6dd81dead82b45f5db8325dd", "parents": ["1ed27318e99c79ef606007403463ce3d09251355"], "commit": "a8b31d604dc9967eb974010f5242a7bafe01c1a1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a061de1c7a1ca6e9102ffe3b2670fc9106839bad", "parents": ["43b446e7e810fa1dbe162b814c718054fade586c"], "commit": "1ed27318e99c79ef606007403463ce3d09251355", "message": "added episode 22: philip guo", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "episodes/21.md"], [38, 0, "episodes/22.md"], [2, 1, "index.html"]]}, {"committer": {"date": 1525300409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d0c5596c68d082d0848909ae2203a6f129c967d9", "parents": ["2cdbc1b06a1419a6005cccd913f2c5b1c15a1ac6"], "commit": "43b446e7e810fa1dbe162b814c718054fade586c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "353aaa04ae480003435e16a0f09183b92b22c9c8", "parents": ["8f4e61310fb140ff83cc5073a89f2e6bd69f2d1a"], "commit": "2cdbc1b06a1419a6005cccd913f2c5b1c15a1ac6", "message": "updated homepage message, added eve link", "changes": [[2, 1, "index.html"]]}, {"committer": {"date": 1524240466, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e968d384e6be977cf7d2ffd62fe0e4a115228dec", "parents": ["f39077ed57c7d701dbc352b83b320e1ecd63bc19"], "commit": "8f4e61310fb140ff83cc5073a89f2e6bd69f2d1a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab1b6c7238944c77d966032f91785e211a66463e", "parents": ["d8987468dd381b00118a875bdfebf0efa8b78a3e"], "commit": "f39077ed57c7d701dbc352b83b320e1ecd63bc19", "message": "## Morning FRP readings, and next steps\n\n* TOC\n{: toc }\n\n### Morning FRP readings\n\n#### Flapjax\n\nI started the morning by reading [the paper on the Flapjax language/library](http://cs.brown.edu/~sk/Publications/Papers/Published/mgbcgbk-flapjax/paper.pdf). It seems to do FRP in much the same way that CycleJS does: stream combinators. It's kinda neat in how it makes things higher level, but just as with CycleJS, I found it quite difficult to parse the code. However, it is crazy to think that this pre-dated CycleJS by a decade... I guess this goes to Bret's point about aiming higher than \"improving programming.\"\n\n#### \"Real FRP\"\n\nI've gotten tired of [Haskell people talking about \"real FRP\"](https://news.ycombinator.com/item?id=7965027), so I spent a few hours re-reading [the Fran tutorial](http://conal.net/fran/tutorial.htm) and re-watching two of Conal's talks on it ([1](https://www.youtube.com/watch?v=j3Q32brCUAI) and [2](https://www.youtube.com/watch?v=teRC_Lf61Gw)). Finally, I feel like I have a clear understanding of what people mean by \"real FRP.\" I don't think I had seen enough of the \"fake FRP\" when I first watched the video to understand the distinction:\n\nReal FRP is (mostly) about continuous time, in the same way that vector graphics are about continous space. In other words, \"resolution independent time\", or \"time as a function from the real numbers\".\n\nReal FRP is also about denotational design, of which I feel slightly closer to groking, but likely still a hundred hours of Haskell away from. One day I'll memorize the Typeclassopedia and everything will make sense.\n\n### Next steps\n\n#### Hareactive\n\nThis is a JS library for \"real FRP\", and I'm excited to play with it a bit.\n\n#### Sean McDirmid\n\nI've been seeing his name pop up a lot recently, so I'm excitd to check out this [Live Programming Experience](https://www.youtube.com/watch?v=YLrdhFEAiqo) video. Maybe I'll reach out too...\n\n#### Callbags\n\nI'm excited to check out Staltz [new article on Callbacks](https://egghead.io/articles/comparing-callbags-to-rxjs-for-reactive-programming).\n\n#### Facebook Origami Community\n\nAnother thing I want to do is continue to investigate how far I can push Facebook's Origami. There are a few interesting threads in the FB Group I want to either look into or reply to, along with posting a question myself about updating complex centralized state.\n\n* [https://www.facebook.com/groups/origami.community/search/?query=createElement](https://www.facebook.com/groups/origami.community/search/?query=createElement)\n* [https://www.facebook.com/groups/origami.community/permalink/1180492722049608/](https://www.facebook.com/groups/origami.community/permalink/1180492722049608/)\n* [https://www.facebook.com/groups/origami.community/1419542018144676/](https://www.facebook.com/groups/origami.community/1419542018144676/)\n* [https://www.facebook.com/groups/origami.community/permalink/1577202409045302/](https://www.facebook.com/groups/origami.community/permalink/1577202409045302/)\n\n#### Jonathan Edwards\n\nHe's also been saying interseting things on Twitter recently, so I've been meaning to reach out...\n\n#### Synchronous programming langauges\n\nApparently, this is a interesting family of languages, including Lucid and Esterel, etc. I wonder where to start... This article on [Lucid Synchrone](http://www.di.ens.fr/~pouzet/bib/chap_lucid_synchrone_english_iste08.pdf) looks good.\n\n#### Prototype a better text-based dataflow langague\n\nAs in re-write the logic for [a game I made yesterday for fun in WoofJS](woofjs.com/create#ballz). Maybe I could re-write it in Hareactive or just prototype it on paper (without a library to back it up).\n\n#### More centralized place for todos\n\nIt's a bit crazy to put them in a log like this... Maybe /now or /todo would make sense...", "changes": []}, {"committer": {"date": 1524158081, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab1b6c7238944c77d966032f91785e211a66463e", "parents": ["deea5528331b9cc138d0eeb3289804a6062e4646"], "commit": "d8987468dd381b00118a875bdfebf0efa8b78a3e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ba636e2fb12e4920900428af61f911c083652abf", "parents": ["d75cf917fbcebf34ba37f11cc766130b559089a1"], "commit": "deea5528331b9cc138d0eeb3289804a6062e4646", "message": "## Dataflow reading\n\nInspired by my conversation with Brent Yorgey yesterday, I spent ~2 hours reading a 30-page survey paper on data flow programming langauges, with an emphasis on visual data flow langauages, such as LabView. It was fascinating!\n\nA good next step would be to find a similar kind of survey paper but for functional reactive programming. While I could just start with Conal's Fran paper, I expect it'd be more fun and a better use of my time to get a more modern and broad perspective -- if it could include ReactJS and other JS libraries too, even better!\n\n### Booleans are too generic - proofs are better\n\nBrent reccomended [a great article](https://existentialtype.wordpress.com/2011/03/15/boolean-blindness/) in a similar spirit to my \"booleans are too generic\" idea. The main idea here is that truth shouldn't be a data type, but should be a proof, as it is in math.\n\nThat's a bit different from my idea which proposes to create a lot of new, more specific data types to replace True and False, such as Equal and NotEqual, which would be pattern matched against, not branched at like an if-statement.", "changes": [[92, 0, "notes/dataflow/advances-in-dataflow-programming-langauges.md"]]}, {"committer": {"date": 1523892504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "acad817d8be502c73f63de215dc85836554e41fc", "parents": ["5208961beae42e4ebaa2efa14af61780b388516a"], "commit": "d75cf917fbcebf34ba37f11cc766130b559089a1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b6ecd0215b10e3ccde0f87efa4d803d66534af8f", "parents": ["7ace0367b2a7a0d603e3002d93deec745ef361db"], "commit": "5208961beae42e4ebaa2efa14af61780b388516a", "message": "## Notes from Friday 4/13/18\n\n* TOC\n{: toc }\n\nI didn't have time on Friday last week to write up my log entry, so here it is now...\n\n## Dataflow links\n\nOn Friday I ended up opening more links than I had time to actually read.\n\n* I found [this wonderful stack overflow answer that lists a bunch of dataflow programming langauges](https://stackoverflow.com/a/949771)\n* There's [a similar list on Wikipedia](https://en.wikipedia.org/wiki/Dataflow_programming#Languages)\n* I also found [a paper that is doing a good job of explaining the history of dataflow programming languages](http://www.cs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/DataFlowProgrammingLanguages.pdf)\n\n\n## Other links\n\n* I really need to take the time to read [BV's Climate Change essay](http://worrydream.com/ClimateChange)\n* Mentioned in random passing in that article, BV links to [ActiveSheets](http://hirzels.com/martin/papers/debs16-activesheets.pdf), which seems similar enough to Streamsheets to warrant a reading.\n\n\n## Murukesh\n\nFascinating conversation on Friday of last week. Notes in [this google doc](https://docs.google.com/document/d/12gsgrG-S-7E0osjWIECjeWjAQgHWEq0Zsuxcjru7PTU/edit?usp=sharing). Maybe I'll turn it into a proper article. It's fascinating that there's so much progress in this space in both the past and in industries that we ignore.\n\nHe sent me [two](https://www.youtube.com/watch?v=gveTy4EmNyk&feature=youtu.be&t=1385 ) [amazing](https://www.youtube.com/watch?v=UGhfB-NICzg) videos of the NeXTSTEP development environments that Steve Jobs made. Unbelievable. It's like Smalltalk. Really makes you scratch your head as to why we don't have development environments like this today.\n\n\n## repl.it\n\nI had a great call with Amjad of Repl.it last Friday as well, in part from my Eve article. I'm going to follow up with a few ideas for improving their IDE interface, and then possible begin developing for them part-time. I'm very excited about this! It makes me feel much more secure to have a second part-time gig running, as well as that it's starting to feel like finding these part-time gigs at developer-tools companies are repeatedly find-able. Content marketing - who knew?", "changes": []}, {"committer": {"date": 1523571450, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b6ecd0215b10e3ccde0f87efa4d803d66534af8f", "parents": ["7ea0f76f79c9ece1d6bf8e464f3a21f9a144e2aa"], "commit": "7ace0367b2a7a0d603e3002d93deec745ef361db", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac17621961b99b35dc79a8806a0ff77c72ebf971", "parents": ["50654e3938bfcf432524da65d7e2cd4b0516bd40"], "commit": "7ea0f76f79c9ece1d6bf8e464f3a21f9a144e2aa", "message": "## Chores and reading\n\nToday I wasn't really in the mood to do much hard thinking, so I spent a few hours in my inbox catching up on things, doing random chores around the house, and finally brining myself to do some reading relevant to the research topics I've been thinking about lately.\n\nI started with reading [Ian Horrock's UI with Statecharts](http://futureofcoding.org/media/Constructing%20the%20User%20Interface%20with%20Statecharts%20Ian%20Horrocks.pdf), but to a break to go directly to the source ([Harel's Statecharts](http://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf)), and then back to Ian's book. I read parts and skimmed parts of both. They seemed semi-relevant to what I'm trying to do. As far as I could see, neither referenced the management of complex, nested state. They seemed to assume that non-state data (such as the currently displayed value on the calculator screen) was stored somewhere magically.\n\nI then read a series of Andre Staltz posts. It turns out my link to his post on Friday was actually the incorrect post. I meant [this one](https://futurice.com/blog/reactive-mvc-and-the-virtual-dom). He had a lot of other interesting posts, but I found myself not excited about the conclusions he drew. In particular, I didn't like his discussion of [hot vs cold observables](https://staltz.com/cold-and-hot-callbacks.html) because I don't love his conclusions, although I couldn't find any fault with his logic. It'd be a bummer if there wasn't a more elegant way to model this distinction. It really seems like an incidental complexity type of thing. I also came to realize that I find stream-based programming a bit annoying. While it's kinda cool, I wonder if it's overly abstract, the way Haskell can get sometimes.\n\nI then re-read (for the 10th time), [Elm's Farewell to FRP](http://elm-lang.org/blog/farewell-to-frp). Again, an article that feels profound but that I don't like for some reason, mostly because there are a lot of concepts in it that I don't quite understand, but don't like the conclusions reached. It feels similar to when I had to learn AngularJS. I don't really know what the concepts mean, but I can tell somehow that they are less elegant than they could be.\n\nFrom there I found my way to [Lucid Synchrone](http://www.di.ens.fr/~pouzet/bib/chap_lucid_synchrone_english_iste08.pdf), but stopped after a few paragrahs, and just like with statecharts decided I wanted to go to the source, so I started reading [Lucid](http://worrydream.com/refs/Wadge%20-%20Lucid,%20the%20Dataflow%20Programming%20Language.pdf). I'm actually a little shocked that I haven't read this before. There's so much here that I was slowly coming to on my own, but it feels like they've brought it all together for me. And, of course, Bret Victor is a big fan of it I've heard, although I wasn't able to find his thoughts on it anywhere on the internet. My next steps are definitely to read through this, and maybe the Synchrone Experiment.\n\nAnd as much as I want to avoid it, it seems like I may have to get my hands dirty with all this theoretical stuff. Read the Fran paper, other Conal Elliot stuff, maybe read Evan's Elm thesis, as well as other Elm blogs, etc. I imagine all of this stuff could provide interesting conversation topics with Brent next week...", "changes": []}, {"committer": {"date": 1523361534, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac17621961b99b35dc79a8806a0ff77c72ebf971", "parents": ["ee23b8ba40b8e01e2706f9b0970867b7b0c38c2d"], "commit": "50654e3938bfcf432524da65d7e2cd4b0516bd40", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b5c27e4ce0c7fcf76afd73e66659e80e36ff57eb", "parents": ["a4ea6e4cef8b99e4c14eaa445b28ffeeefb71d19"], "commit": "ee23b8ba40b8e01e2706f9b0970867b7b0c38c2d", "message": "## Origami inspired prototyping\n\n* TOC\n{: toc }\n\n### Origami\n\nOver the last week, I've fallen smitten for Facebook's Origami prototyping tool, which was originally built on top of Apple's Quartz Composer, but is now a standalone Mac app. It suprised me because I don't usually expect much from node-and-wire coding environments. I think the main feature that got me is that you can see the live-updating intermediate values of all computations. It's amazing. It makes looking at static code unbearable. Additionally: there's no run button - it's hot-realoading. And they have a great way to add nodes (they call them \"patches\") via the keyboard.\n\n### Node-and-wire prototyping\n\nThis morning, I had the idea of prototyping the Origami UI in Woof. I had a fun few hours doing it: http://woofjs.com/create#origami\n\nI had to come up with techniques for managing lots of things I'd never had to do before in Woof, mostly around nested components and layout. Stuff that HTML and CSS does for you in annoying ways. Turns out it's pretty annoying to calculate widths and paddings manually too...\n\n### Thoughts on a new language...\n\nThe idea in my head is that you have a dependency graph of all the values. The trick, of course, is sequential evaluation and events. Mostly events.\n\n#### Pure expressions\n\nThese are simple. They should always have live-updated values.\n\nThey are normally things you'd want nested internally (which is a common complaint of node-and-wire tools), but when \"proccessing\" a thing, you want vertical or horizontal sequencing, such [as in Elm](http://elm-lang.org/docs/syntax#infix-operators).\n\n#### Sequential evaluation\n\nI think we can do away with it entirely. If you actually need it, you can model it explicitly as [I show in this demo](http://woofjs.com/create.html#animate-via-frames).\n\n#### Events\n\nCan we do without and just have reactive values? Clicks are reactive list of all clicks, and you can get last one and check timestamp a la http://futureofcoding.org/prototypes/streamsheets/.\n\nPotentially, this will be too conceptually difficult, for the same reaons it was to do [CycleJS Flappy Bird without centralized state](https://gist.github.com/stevekrouse/85f350eb82ebbf5b2c244aa9aeffc453) and we'll need a reducer. But maybe nested state via statecharts could save the day.\n\n### Follow up questions\n\n1 - What do I not like about cyclejs and elm (and what's the difference again)?\n\n1a - Is the main reason that it's terrible to code in streams and elm, and thus streamsheets?\n\n1a1 - Idea to make cycle better: swap it: make value be values and have a history function that gets the stream on it?\n\n2 - Is the main difference explicit modeling of time and explictly listing all state?\n\n2a - We don't really need explicitly listing state, just reactively defined\n\n2a1 - What is reactively defined state? wont it eventually bleed into everything depends on everything else and we're back where we started? in other words, the reducer thingy seems stinky for some reason ... it's annoying to use, but making it easier to use just gets rid of the benefits of using it\n\n2a2 - Can we make a calculus for how we want this to work to simplify things? Such as what I was trying to do with [Reactive Woof](http://futureofcoding.org/journal#reactive-woofjs) ... Or is this a cyclejs data structure?\n\n3 - How to statecharts keep track of state...? .. go to Ian's book\n\n3a - Can you do statecharts without events?\n\n4 - Difference between hot and cold streams?\n\n5 - At the end of the day, can we really realize my perception of Anre's vision in [this article](https://staltz.com/unidirectional-user-interface-architectures.html) that all things contain all the ways to modify that thing? Or is it impossible because we want to branch in too many ways in our code, not sequentially, but just with nested cases? Would it at all be possible to define things in one place only? Or would that just hurt our brains even if we could do it?", "changes": []}, {"committer": {"date": 1523027723, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b5c27e4ce0c7fcf76afd73e66659e80e36ff57eb", "parents": ["6dd7f2f2bdace79bb7bcb0f40f5c05544255bdee"], "commit": "a4ea6e4cef8b99e4c14eaa445b28ffeeefb71d19", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["56dd10a5b1db430d3cc9e459ea4007f95cb601e9"], "commit": "6dd7f2f2bdace79bb7bcb0f40f5c05544255bdee", "message": "## Thoughts\n\n### Eve Success\n\nI was a little surprised to see my Eve project stay on the front page for basically a whole day! It got 150 points on HN and up to #6. I got over 10k people on the page, and around 500 on my website homepage. However, I didn't really get anything material out of this experiment.\n\nIt does pass my \"do they spend more time on it then you do test\", because I only spend 10-ish hours here, and even if the average time on the page was 1 minute, that's over 100 hours of time they spent on it.\n\n### Offline morning\n\nThis morning I decided to work with my notebook for 2 hours offline, thinking about other projects to work on. I got a bit excited about a WoofJS refactor plan, but ultimately was most excited about an FRP Scratch tool that is similar to Facebook's Origami (which is based on Apple's Quartz Composer) in that you can see all the intermediate values flowing through, immediate updates, etc.\n\n### Unproductive afternoon\n\nAfter lunch, I was lazy and watched a few hours of TV. Then I got myself on my computer to look at my Cycle and Elm Flappy Birds for inspiration. I was quite fustrated with how awful coding in Cycle and Elm is compared to Facebook Origami, and also a bit inspired by that, too. However, I feel lazy today, so I'll have to pick up on this thread later.\n\n### Thoughts for next week\n\n* Scratch FRP prototyping\n* how do Facebook's Origami, CycleJS devtools, and statecharts somehow fit together?\n* WoofJS refactor plan (start with docs and a build tool)", "changes": []}, {"committer": {"date": 1522767413, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1522767413, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["3b947b24caf12a543390bfc26dc061377f902227", "46271a0cfc47ff407a1e11b920aaad8aeedd4692"], "commit": "56dd10a5b1db430d3cc9e459ea4007f95cb601e9", "message": "Merge pull request #78 from bzg/master\n\nFix typo in link", "changes": []}, {"committer": {"date": 1522714021, "timezone": "+0200", "name": "Bastien", "email": "bzg@gnu.org"}, "author": {"date": 1522714021, "timezone": "+0200", "name": "Bastien", "email": "bzg@gnu.org"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["3b947b24caf12a543390bfc26dc061377f902227"], "commit": "46271a0cfc47ff407a1e11b920aaad8aeedd4692", "message": "Fix typo in link", "changes": [[2, 2, "essays/eve/index.html"]]}, {"committer": {"date": 1522711480, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1522711480, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bf0a03963cfc780863ed8ca496c2653598d85eba", "parents": ["491936a80659bf1db7318755e756c81158692f22"], "commit": "3b947b24caf12a543390bfc26dc061377f902227", "message": "added credits, oops!", "changes": [[1, 1, "essays/eve/index.html"]]}, {"committer": {"date": 1522690586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7f030aca6899ee26ade21256615ade21ae3c6d9", "parents": ["b2b5658d73dfde129e1688f5d6d769e8d403e867"], "commit": "491936a80659bf1db7318755e756c81158692f22", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3b3a2b93d4ec04c1fe39f91abb9d47fc2a5a32e6", "parents": ["4670d274ca888eabdcc5b6ba5f79c763e9e88b43"], "commit": "b2b5658d73dfde129e1688f5d6d769e8d403e867", "message": "finished eve tribute", "changes": [["-", "-", "essays/eve/direct-manipulation-editor.png"], ["-", "-", "essays/eve/favicon.png"], ["-", "-", "essays/eve/grid-eve.gif"], [91, 34, "essays/eve/index.html"], ["-", "-", "essays/eve/v0.4-performance.gif"]]}, {"committer": {"date": 1522664927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3da15b70c5cf7a8e84066597c9ea56ab092ca8ad", "parents": ["b3d990d2d1f8c8214e6ae81ad9713d9a5985106a"], "commit": "4670d274ca888eabdcc5b6ba5f79c763e9e88b43", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "763721bb828bdd2da008d2594d26a1ea260b358f", "parents": ["f5af264c454a0c2421dd670fc69e582b0ade72c4"], "commit": "b3d990d2d1f8c8214e6ae81ad9713d9a5985106a", "message": "## Continuing Eve tribute\n\nApparently, shooting for quantity over quality leads to better quality, so I've decided to complete a small project: the tribute to eve I started last month. Today I finished adding all of the images, videos and links to the page.\n\nWhat remains:\n\n* I need to decide if I should include the other links somewhere in the page, including other dev diaries, other Chris blogs, or Chris's other videos.\n* The story to the page. If it's a \"thanks for your hard work\" or more of just an archieve, etc.\n* Better CSS to make it sexy. Potentially, I'll want a better timeline-y format where the dates are given higher visual priority than they are now.\n\nIt'd be neat if I could get this out in the next few days, maybe on HN, Twitter (send a note to the Eve guys), and reddit on the approriate thread.", "changes": [["-", "-", "essays/eve/FiveSquare.png"], ["-", "-", "essays/eve/card-wiki.png"], ["-", "-", "essays/eve/direct-manipulation-editor.png"], ["-", "-", "essays/eve/eve-v-1.gif"], ["-", "-", "essays/eve/eve-v-2.png"], ["-", "-", "essays/eve/excel-eve.png"], ["-", "-", "essays/eve/first-syntax.png"], ["-", "-", "essays/eve/grid-eve.gif"], [73, 10, "essays/eve/index.html"], ["-", "-", "essays/eve/madlibs-notebook.png"], ["-", "-", "essays/eve/markdown-eve.gif"], ["-", "-", "essays/eve/repl-v-1.png"], ["-", "-", "essays/eve/repl-v-2.png"], ["-", "-", "essays/eve/smalltalk-eve.gif"], ["-", "-", "essays/eve/table-eve.png"], ["-", "-", "essays/eve/v0.4-performance.gif"], ["-", "-", "essays/eve/when-do-madlibs.png"], ["-", "-", "essays/eve/wiki-eve.png"], ["-", "-", "essays/eve/wiki-grid.gif"]]}, {"committer": {"date": 1522067083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1e671a4728199394a6956db7e8e99a502ac6ea4c", "parents": ["54af515f3b34fe7e82280a5c990b74a609cc96cd"], "commit": "f5af264c454a0c2421dd670fc69e582b0ade72c4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "66e4ebfefe98dcd2d57e2c3a02b9baf4d3c3cc9e", "parents": ["3b30c67660a12c36f641750dfadd2bc5d2e908ce"], "commit": "54af515f3b34fe7e82280a5c990b74a609cc96cd", "message": "## Few resources for understanding Nile\n\n\nIn the \"Linked representations\" section of [Bret's Thinking the Unthinkable talk](http://worrydream.com/MediaForThinkingTheUnthinkable/), he has a video of a tool he built to understand Nile. You can find these links:\n\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_beziers.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_points.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_reals.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_shape.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_test.html\n\nI learned a bit about beziers, as well as more about OMeta and Ohm which was useful. Mostly looking through Viewpoints stuff just made me feel overwhelmed, out of my depth, and sad.\n\n### Struggling to settle on work...\n\nMight move on to Dark work this afternoon, or possibly return to my statecharts rabbit hole. Another slightly tempting project is the Eve tribute, in that there's a clear end in sight for it, and people might actually find value in it...", "changes": [[26, 0, "notes/kill-html-css.md"]]}, {"committer": {"date": 1522065903, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "09d7d0c02ee777a70a6d12d2436c933f290e6a73", "parents": ["595e13399ab9fec4e5c5b067c9b3dfb5cc28f433"], "commit": "3b30c67660a12c36f641750dfadd2bc5d2e908ce", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "122e93512b02f17c04f49b1edc75a85aebe3f3b6", "parents": ["54f98e6dc27c9c4cf779578749c815d647c3b541"], "commit": "595e13399ab9fec4e5c5b067c9b3dfb5cc28f433", "message": "removed old file", "changes": [[0, 231, "essays/eve.html"]]}, {"committer": {"date": 1522063531, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f5388c0e72cc7663b7e62482b2acf644e531892", "parents": ["d8b706f04d195e07a525a6034b99fa06e07fbe54"], "commit": "54f98e6dc27c9c4cf779578749c815d647c3b541", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c60423150974f297e5b3fa205da0ae06b56daefa", "parents": ["9a7a1002ff509d5d188052dfb6ab3fc214800690"], "commit": "d8b706f04d195e07a525a6034b99fa06e07fbe54", "message": "## Next steps\n\n* TOC\n{: toc }\n\nI'm excited to get to work today, but also a bit anxious about picking something interesting and worthwhile to work on. Some thoughts:\n\n### Time-box a project\n\nThe idea here is to pick a well-scoped project, so that I can finish it in the next few weeks and publish something that would hopefully be suitable for Hackernews. An example here would be my [tribute to eve](./essays/eve).\n\n### Continue down the statecharts rabbit hole\n\nI still have [a few more resources remaing from my jump down this rabbit hole last week](http://futureofcoding.org/log#what-remains).\n\n### Zoom out and pick up past research or projects\n\nCycleJS, Fran, Streamsheets, FRP for Scratch/Woof, Morphic etc.\n\nIn re-reading my [plan](./plan), I came upon something I've wanted to do for a while now: struggle to understand STEP's Nile. Let's get that a shot...", "changes": []}, {"committer": {"date": 1521744522, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c60423150974f297e5b3fa205da0ae06b56daefa", "parents": ["99a64cbf526adf3fe56f73bb0863d8f96a810a12"], "commit": "9a7a1002ff509d5d188052dfb6ab3fc214800690", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "804571d77276783eb0669badd6fbc9158d1cb407", "parents": ["ff4326f5d391ff18cf50fb7c2842fc2e0f2aec28"], "commit": "99a64cbf526adf3fe56f73bb0863d8f96a810a12", "message": "## 3/22/18 scattered notes\n\n* TOC\n{: toc }\n\n### What I read/watched today\n\nI got a reply from Kevin Lyangh which first sent me to [this video on statecharts](https://keminglabs.com/talks/#yow2015)\n\nThen to I stumbled onto a few David Nolan talks, which I thought were interesting mainly because they referenced \"Two Cultures of the Scientific Revolution\" (which I recently read and didn't think much of), as well as Out of the Tarpit (which I also recently re-read and enjoyed).\n\nI then got pulled into [Rich Hickey's Value of Values](https://www.youtube.com/watch?v=-6BsiVyC1kM) which provided some good counter-arguments to my [thoughts about specificity](./notes/kill-primitives). Echoing what I just heard from David Nolan, he mentions that we almost always choose bad abstractions and that they often get too much in the way. This point really stuck with me, because abstractions and math seem so elegant, yet maybe their overapplication, like with class inheritance in Java, is what gets us into trouble. On the other hand, simple primitives are portable and easy to understand.\n\nThen I read almost all of the articles on The world of statecharts, read most of the threads in the chat.\n\nRosmaro (and medium posts)\n\nhttps://sverweij.gitlab.io/state-machine-cat/\n\nI also read the first few chapters of [Ian Horrock's Constructing the User Interface with Statecharts](./media/Constructing the User Interface with Statecharts Ian Horrocks.pdf).\n\nI also took [some silly notes on how I'm beginning to view much of the \"evil\" in programming due to historical accidents that have remained with us long past their usefulness](./notes/historical-accidents). (Side note: I think it's probably fruitless to look for \"the root of all evil\" in programming, be it historical accidents today or primitives yesterday. There are two ways to replace this persuit: 1. Be more explicit about trade-offs, and the contexts under which you'd choose between alternatives, and 2. Look for a positive philosophy of what programming is, almost in the John Dewey sense.)\n\n### What remains\n\n* Finish reading [Ian Horrock's Constructing the User Interface with Statecharts](./media/Constructing the User Interface with Statecharts Ian Horrocks.pdf) after page 49.\n* Read [xstate's docs](http://davidkpiano.github.io/xstate/docs/#/) and maybe bulid something in it\n* Read the final two pieces of The World of Statecharts that I haven't read yet: [one](https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html) and two](https://statecharts.github.io/how-to-use-statecharts.html)\n*\n(read more about rosmaro guy's no if and no boolean, as well as the anti-if campaign)\n* maybe post to [the statecharts chat](https://spectrum.chat/statecharts/general)\n* read [this research paper about statechart UI building](http://phrogz.net/developing-user-interfaces-using-scxml-statecharts)\n\n### Yearning for real-world problems\n\nAfter watching all of these videos, I was left with a sense of blah. What do I do with all of these thoughts? Is this method or that method better? Under which circumstances? My thinking became so divorced from any concrete problems that I felt impossible to compare the trade-offs between alternatives.\n\nAnd so I had an idea: what if I use coding on WoofJS as a way to explore many of these ideas. More specifically, what if I use refactoring WoofJS to explore some of these ideas?\n\nThe tantilizing idea would be to start small, maybe just one boolean flag, or one function, and slowly refactor the app back to some sort of sanity. Of course, we still are left with the problem of determining what is sane and what is insane. I don't want to simply move WoofJS from VueJS to some new platform, like CycleJS or Elm or xstate, and just have similar-ish problems but in a new framework. That's a very expensive way to try out a framework.\n\nYet on the other hand, I fear that re-building simple apps, like a button that counts how many times it's been clicked, or even ToDo MVC will not expose me to the truly intricate and sticky problems that would expose whether an approach is good, and also motivate alternative approaches to solving such real-world problems.\n\nA relevant thought here is to bring in Alan Kay's advice to Samantha John: make a list of a few complex applications you want to be able to create in a framework to test and motivate its generality. This is reasonable advice. Some that come to mind:\n\n* [ToDo MVC](http://todomvc.com/)\n* [RealWorld](https://github.com/gothinkster/realworld)\n* Basic scratch games (http://coding.space/scratch)\n* Basic JS apps (http://coding.space/web)\n* Agar.io\n* Candy Crush (Sam John's idea)", "changes": [[34, 0, "notes/historical-accidents.md"]]}, {"committer": {"date": 1521741643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521741643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "409e6e474b7307c12a343b2c45d14175d0570ccd", "parents": ["3dd4d893d419b5055119801b8c04a031b2d3a7ae", "ae6ab380e50942dc20ab501d1da5ba4ca017d575"], "commit": "ff4326f5d391ff18cf50fb7c2842fc2e0f2aec28", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1521735090, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1521735090, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0e5ff3e152699d629fbb7f47d914064d2082bfaf", "parents": ["a4e9b56b22b5de360361418d306653f35dcb98af"], "commit": "ae6ab380e50942dc20ab501d1da5ba4ca017d575", "message": "added Constructing UI With Statecharts by Horrocks", "changes": []}, {"committer": {"date": 1521661896, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "409e6e474b7307c12a343b2c45d14175d0570ccd", "parents": ["cbc906cec5051c366a2fcacef25ac5195c0440a2"], "commit": "3dd4d893d419b5055119801b8c04a031b2d3a7ae", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2fb68e2df41f6c0af5c716ad93e80e84565be1b2", "parents": ["a4e9b56b22b5de360361418d306653f35dcb98af"], "commit": "cbc906cec5051c366a2fcacef25ac5195c0440a2", "message": "## Fun, fustrating, little progress on killing primitives\n\nPart of the problem doing work on the computer is that I'm too plugged in. Whenever I get stuck in my thinking, it's almost too easy to google around for related work. There are many benefits for struggling through the problem myself, not least of which is that it's quite fun -- I did it last week via pencil and paper and it was a blast.\n\nToday was 6 hours of FoC work. 0 hours of Dark work. Very productive! Tomorrow maybe I'll do 1.5-3.5 hours of Dark work, and then 3ish hours of work here. In particular, I'm excited to explore xstate, statecharts, David Piano, and maybe email him to invite to chat on the podcast.", "changes": [[115, 0, "notes/kill-primitives.md"]]}, {"committer": {"date": 1521656831, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0e5ff3e152699d629fbb7f47d914064d2082bfaf", "parents": ["6a788946d8483fdb93c2fc923bc442274368fbaa"], "commit": "a4e9b56b22b5de360361418d306653f35dcb98af", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c140c6a5131dd55958171e3f75a3b3faf835bc65", "parents": ["e6fbb5d630d20b246bcaf713af23fe86a0794f98"], "commit": "6a788946d8483fdb93c2fc923bc442274368fbaa", "message": "## 6th plan\n\nSpent a few hours this afternoon thinking about this project from a meta level. Wasn't so much fun, nor particularly productive, but I did get some things off my chest I think.\n\nOn the one hand, I want to spend less time thinking about the work I'm doing, and just do the work. On the other hand, if I just let myself get pulled in interesting directions, I end up falling into internet holes, like I did this morning, and then feel unproductive. Hard to find a balance here. One thought is to set up time-boxes for free-flowing thought vs thought about a specific topic vs building time, etc. Potentially I could do it without a computer or without wifi to focus.\n\nI am going to spend the next hour or so actually doing the work that I'm curious about: primitives (booleans, ints) too generic and lead to overloading, etc, etc.", "changes": [[62, 49, "plan.md"]]}, {"committer": {"date": 1521634686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "398a135577cb15528c77b6fed0e19e51f364b93a", "parents": ["a7136894329649b83925aff279d636120d1a2336"], "commit": "e6fbb5d630d20b246bcaf713af23fe86a0794f98", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5ef70c69cc22b4bbdb3b589f5304326234735158", "parents": ["b0bf24c0cd3e415623667578d94b3c6fc5366261"], "commit": "a7136894329649b83925aff279d636120d1a2336", "message": "## Interface design research\n\n* TOC\n{: toc }\n\n### Pure UI\n\nI picked up today where I left off yesterday, reading about Pure UI and Pure UI control. Excited to continue exploring this way of thinking, and statecharts, David Piano, etc, here: [https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n](https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n)\n\n### Kevin Lynagh\n\nI then clicked on Kevin Lynagh's name in the Pure UI Control essay and fell into a hole about him and Subform, [some notes here](./notes/kevin-lynagh).\n\nExcited to reach out to him for the podcast. Ditto with Adam Solove. Will reach out now...", "changes": [[34, 0, "notes/kevin-lynagh.md"]]}, {"committer": {"date": 1521574326, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "49722e0524bcf027711b85361f059287664c69c2", "parents": ["87eb3e561d02558aa9e657e376eeef3fb99b0de3"], "commit": "b0bf24c0cd3e415623667578d94b3c6fc5366261", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["2b6872a0f80afca2e892f2d1f0f6fd83da528d17"], "commit": "87eb3e561d02558aa9e657e376eeef3fb99b0de3", "message": "## Twitter research\n\n* TOC\n{: toc }\n\n### Inviting people to the podcast\n\nI looked at [this list](https://github.com/stevekrouse/futureofcoding.org/issues/18) of potential guests, invited my friend Nicolae Russan as well as his friend Simon last to the podcast, and reached out to Brent Yorgey as well.\n\nI really enjoyed reading [Brent's slides](http://ozark.hendrix.edu/~yorgey/pub/explaining-errors-slides.pdf) on Explaining Type Errors through an interactive interface where you click on a series of questions. However, it did make me recall Bret Victor's \"interaction considered harmful\" point, and I wonder if there are ways to build a context-sensitive graphic for explaining type errors without any interaction nor a block of text. Maybe with colors? Maybe with shapes? Definitely in the context of where the error is occuring, and not in the console.\n\n### xstate\n\nI then took to [my Twitter list](https://twitter.com/stevekrouse/lists/future-of-coding) for more inspiration, where I stumbled upon [xstate](https://github.com/davidkpiano/xstate), which seems quite similar to CycleJS, particularly now that they can generate state diagrams from your code. I'm quite excited to read:\n\n* https://rauchg.com/2015/pure-ui\n* https://medium.com/@asolove/pure-ui-control-ac8d1be97a8d\n* https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n\nI also stumbled across this neat tool. \"Dynamic layout meets direct manipulation.\": https://subformapp.com/\n\nGoodness! There are so many people building cool things in this space. It's difficult to find a balance between research and novel work.", "changes": []}, {"committer": {"date": 1521571919, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1521571919, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["28ab6280a32c6a13ad58fb83ebbeddc4aa5ef8b4"], "commit": "2b6872a0f80afca2e892f2d1f0f6fd83da528d17", "message": "added paper jonathan edwards recommended", "changes": []}, {"committer": {"date": 1521484921, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["d43f86280d9f377f05f6c43777d4481cfa0c0e78"], "commit": "28ab6280a32c6a13ad58fb83ebbeddc4aa5ef8b4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e103f102d76ec4272c3bd0e47403eb029501671", "parents": ["54072dd320783232c513580bd12cd351042b1600"], "commit": "d43f86280d9f377f05f6c43777d4481cfa0c0e78", "message": "## Newfound excitement\n\n* TOC\n{: toc }\n\n### Direction lost\n\nAfter my visit to Dynamicland at the end of Jan 2018, I [decided to pause this project](http://futureofcoding.org/log#journal-break). I think there are a few reasons I lost direction here:\n\n1. I saw a lot of really smart people that I look up to have a hard time in this space (Bret, Alan, Chris Granger)\n2. I felt that my chances of success were dim\n3. I found it difficult to explain what I was doing to friends, family and strangers at parties\n4. I lost track of who or for what use-case I was doing this work\n\nSo I started looking for full time work as an engineer. Got a job offer. Turned it down. Then found some part-time work...\n\n### Dark (Paul and Ellen's new startup)\n\nPaul Biggar (of CircleCi) has started a new company with Ellen Chisa. They reached out to hire me to do some consulting work for them part time, like 5-10 hours per week. It's actually been amazing, potentially exactly what I needed to get re-invigorated here. I started working with them in early Feb, doing analysis of developer companies, like Eve or Luna. Would love to get some of this work on here in a productive way.\n\nIt's actually been really heartening doing this analysis. I am beginning to see how companies like Eve made mistakes that I could avoid, such as spending years iterating on visual programming interfaces or overly optimizing for beginners right off the bat.\n\n### Fuck the learning curve\n\nIn other words, I am finally beginning to come around to Paul Chuisano's view that learning a new system is a one-time cost. Of course we want to onboard users as fast as possible but it's not the most important thing to get right on day 1, and it's definitely not the thing to optimize for. Instead, let's fuck the learning curve and optimze for the producitivity in the medium-term. (We can always build a better interface later, maybe even a syntax-less one, but text is great for iterating quickly.)\n\n### Working on Woof\n\nHowever, probably the thing that has got me most excited about returning to this project is [the work I did on Woof last week](https://github.com/stevekrouse/WoofJS/commit/04a7ce1e3e371957d4304a049e96dc8a6818bc59). It took me ~6 hours and was mostly super fustrating, but also fun and addicting, like a video game. It reminded me how much I both love and hate programming, and hinted at how amazing it could be with the right abstractions.\n\n### Overloading\n\nA few weeks back, r0ml was kind enough to give me a guided tour of both APL and Squeak Smalltalk. Both were incredibly fascinating and inspiring!\n\nWhile the APL overloading and concise mentality is admirable in some respects, I also wonder if it could be the root cause of much evil. The thought goes something like this: if you use the same concepts for multiple different contexts, you end up artifically boxing yourself in unneccesarily. Instead if you could be more specific about the \"shape\" of your app, and all possible *semantic* states it could get it, you could more purely represent your app as a system of relationships, and then understanding and extending it would be greatly simplified.\n\nThis builds upon my ideas of the past such as \"booleans are too generic,\" to include such ideas as \"integers are too generic.\"\n\n![overloading](https://user-images.githubusercontent.com/2288939/37614064-9828a254-2ba1-11e8-899f-59385ade596d.jpg)\n\n\n### Thoughts about where to spend time\n\nI think I need a new framework for this work. I made a list of the type of activities that I do here:\n\n![time](https://user-images.githubusercontent.com/2288939/37614063-980234f2-2ba1-11e8-9470-196128b4c73c.jpg)\n\nI wonder if it would be better if I structured my work around publishing stuff and trying to get views or upvotes on HN. I like it because of the social proof and it would feel good, but I am worried it's too much click-bait-y and focusing too much getting attention.\n\nAnother thought is to focus my attention on a really small problem that I think I can solve well.\n\nAnother thought is to find a mentor or some structure in the context of other people.\n\nAnother thought that gives me solace is that this stuff is really deep and complicated and the key is optimzing for long term productivity and excitement, so I need to find a structure that lets me have fun here for a while, while staying productive...\n\n#### Throw out HTML, CSS\n\nAnd a final thought is to pick a big ambitious project to spend most of my time on. One idea that I keep returning to is \"throwing out the DOM (HTML, CSS) and starting over on the canvas,\" including building input boxes, etc, from scratch. This project is quite similar to Morphic (more specifically, morphicJS) so I'd start with research there, and try to find other attempts at this vision. Potentially, the canvas is not the right compile target and something more modern or cross-platform would be better, like openGL.\n\nI really admire Elm (and Fran, but need more research here). Also Brent's Diagrams is interesting for inspiration. The dream would be a very mathmatical language, one in which centering stuff, laying it out, would be super simple. Ditto for animation. All maths and relationsihps. All very pure. And cross platform is by default because so abstract. And reactive by default because canvas is immediate mode already. Also, it will be \"turtles all the way down,\" like Smalltalk, in that there's no browser magic elements, like . Everything is hackable. Don't just change the CSS: change the actual thing or whatever.", "changes": []}, {"committer": {"date": 1521481529, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e103f102d76ec4272c3bd0e47403eb029501671", "parents": ["027ff390975786e283d47579757f7e7c67d0cab5"], "commit": "54072dd320783232c513580bd12cd351042b1600", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5422b40475938385b9d29bf78ffb2deb4c922138", "parents": ["357b8c1b62c0fa0a750acfab44ff20d64701d669"], "commit": "027ff390975786e283d47579757f7e7c67d0cab5", "message": "## Started Eve Tribute\n\n(I acutally did this work a few weeks ago and forgot to commit.)", "changes": [[231, 0, "essays/eve.html"], [167, 0, "essays/eve/index.html"], ["-", "-", "essays/eve/media/FiveSquare.png"], ["-", "-", "essays/eve/media/aurora.png"], ["-", "-", "essays/eve/media/card-wiki.png"], ["-", "-", "essays/eve/media/excel-eve.png"], ["-", "-", "essays/eve/media/first-syntax.png"], ["-", "-", "essays/eve/media/first-ui-editor.png"], ["-", "-", "essays/eve/media/grid-eve.gif"], ["-", "-", "essays/eve/media/madlibs-notebook.png"], ["-", "-", "essays/eve/media/markdown-eve.gif"], ["-", "-", "essays/eve/media/table-eve.png"], ["-", "-", "essays/eve/media/when-do-madlibs.png"], ["-", "-", "essays/eve/media/wiki-eve.png"]]}, {"committer": {"date": 1517519283, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fe16d2df067357cbb424ebbf27936c114c4d2e14", "parents": ["3a0300d8930603a7bcf4af1cd07ad4061d872f5a"], "commit": "357b8c1b62c0fa0a750acfab44ff20d64701d669", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0bc8c84a128478472441bf7b5b996497cafc16e2", "parents": ["be36800d08f58cba436654db5fd4da6c02b778b3"], "commit": "3a0300d8930603a7bcf4af1cd07ad4061d872f5a", "message": "added ep 21, aidan cunniffe", "changes": [[27, 0, "episodes/21.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1516728432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "698c1f4b51a9446334c6683260d50792d3bb861b", "parents": ["f5d8ca01b87c68fffe5f33b38448b206ba79eb8b"], "commit": "be36800d08f58cba436654db5fd4da6c02b778b3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "951f3b6035ca3c35730daa27f5153b3892e7835a", "parents": ["633a40e0db568087dcd22da8dbae7b0b4757cdc2"], "commit": "f5d8ca01b87c68fffe5f33b38448b206ba79eb8b", "message": "add dynamicland recap", "changes": [[44, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516662048, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "87c20b46bb871043662d7e78fe1fa584f117c62e", "parents": ["8bf6053280b3e0fd3a1f641663dd3e91965f4012"], "commit": "633a40e0db568087dcd22da8dbae7b0b4757cdc2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b0fe224cd746d7c1fe06c2befe48b8c785b7bd2", "parents": ["d1e4f714331ca1aaea604f6abc58f35a7ffdb236"], "commit": "8bf6053280b3e0fd3a1f641663dd3e91965f4012", "message": "## Journal break\n\nGiven how Bret Victor is the main inspiration for this project, it was really really fascinating to spend so much time around him last week. One of the biggest things I took away was that \"improving programming\" is a difficult goal to shoot for directly. The biggest improvements to programming happened when someone from a different field were shooting towards a bigger, more abstract goal. They also never came from young people. I'm going to have to think through how these new ideas influence this project. Potentially I will put it on pause for a while.\n\n## Interviews tomorrow\n\nI haven't done any interviews this year, but I hope to rectify this with two interviews tomorrow. I'll release one either late this week or early next week, and the other either late next week or early the following week.", "changes": []}, {"committer": {"date": 1516421982, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b0fe224cd746d7c1fe06c2befe48b8c785b7bd2", "parents": ["500ce8b8e04e9519b013dcac56ec98b04378184b"], "commit": "d1e4f714331ca1aaea604f6abc58f35a7ffdb236", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "268eaf5c8fd55c0bc58872bea28f8a19618b04e0", "parents": ["d6903da0a7b984da34a02b278d0bcf2d7ecce14d"], "commit": "500ce8b8e04e9519b013dcac56ec98b04378184b", "message": "don't forget to tweet videos", "changes": [[1, 1, "_data/git-log.json"], [1, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516421868, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "58b36eebc6d9ec44d9305fc240d58dbe3b163cf3", "parents": ["6699e07022b5537656ff80db84ad7c0d7ec7ee5c"], "commit": "d6903da0a7b984da34a02b278d0bcf2d7ecce14d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39fade38eb6790621352c24756f63f9b8c563413", "parents": ["07d7248d79178022619509b38f1489f4942c0a72"], "commit": "6699e07022b5537656ff80db84ad7c0d7ec7ee5c", "message": "dynamicland, day 5 recap", "changes": [[1, 1, "_data/git-log.json"], [29, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516391913, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c843c7800df713f3922c90a7af470df1cdbb82b", "parents": ["dfeef5708b29fc88b81ead052f1a8ce25c3a834d"], "commit": "07d7248d79178022619509b38f1489f4942c0a72", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b8ad3f588dd30f48dd56de117085403a2243e216", "parents": ["bd09974abe246898ab9a9484dfe2b7f6bde5ab29"], "commit": "dfeef5708b29fc88b81ead052f1a8ce25c3a834d", "message": "dynamicland day 5 prep", "changes": [[1, 1, "_data/git-log.json"], [28, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516335676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fa65863ffdce719ac8a89cd02ecbdf89c577196c", "parents": ["2625ce53e4f30ea4a5018f40d0b59380d6f9265d"], "commit": "bd09974abe246898ab9a9484dfe2b7f6bde5ab29", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "98abe6f6a36241445a31fe6c5076be5d8b2f6579", "parents": ["50e41fc33454c06f4b379f2e56ee2cf265f37d0a"], "commit": "2625ce53e4f30ea4a5018f40d0b59380d6f9265d", "message": "dynamicland, day 4", "changes": [[1, 1, "_data/git-log.json"], [39, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516240808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f37bb380995752031f935df550c25c71e0dfe41e", "parents": ["891cd71ae76e36356b7c920830c96646ed8b8b27"], "commit": "50e41fc33454c06f4b379f2e56ee2cf265f37d0a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1c9fc2881f901d215dbc4de04885bf513bdffac3", "parents": ["e301304ab8bebc8ca97c0b1d7f03a9215a152f5a"], "commit": "891cd71ae76e36356b7c920830c96646ed8b8b27", "message": "dynamicland, day 3 recap", "changes": [[39, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516213389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c4f42c8cae6e4dc11a7fe58819e27ab39355f309", "parents": ["fece204a7a0dd48d5d71fef9b920d0d10c311b6a"], "commit": "e301304ab8bebc8ca97c0b1d7f03a9215a152f5a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a0a9a8011561566d1d17f338c37c04fdaf9a608c", "parents": ["1abdb2603f25c7a123627f9cc870212bfe95d91b"], "commit": "fece204a7a0dd48d5d71fef9b920d0d10c311b6a", "message": "day 2 recap; day 3 prep", "changes": [[27, 2, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516134296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9dd8bcafb2be2f88776ce3b930667b8cf8558161", "parents": ["cfc21446f90b736af7c0d2fd3212d888ac536040"], "commit": "1abdb2603f25c7a123627f9cc870212bfe95d91b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cd4ad8fbf4d20596c98da3d373c1a93629ccaf58", "parents": ["c982f944da30ef9562d53727da5719d89ac7f260"], "commit": "cfc21446f90b736af7c0d2fd3212d888ac536040", "message": "## reflection 11\n\nBoom - started and finished in an hour. If I reflect often enough, and don't try to be comprehensive about it, I think I can put up with this.", "changes": [[88, 0, "reflections/11.md"]]}, {"committer": {"date": 1516130705, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fd7b157c9cf521b71dba39bdf824b5e19ffb3d0c", "parents": ["70deb443f87cc4d2129667c0bc5cc3bf9136abbc"], "commit": "c982f944da30ef9562d53727da5719d89ac7f260", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "370b6a95f0d9b889f037262e8061e86240916700", "parents": ["a734c9db4f23c503bfbb31f54f3eb17df09faf00"], "commit": "70deb443f87cc4d2129667c0bc5cc3bf9136abbc", "message": "add link to live page", "changes": [[5, 3, "log.md"]]}, {"committer": {"date": 1516130688, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bdbcb1d38242fe75bf7b2adbf031bb40f605dd1c", "parents": ["da0821d9a2dbea650caf7b4aa6efcd8c16636652"], "commit": "a734c9db4f23c503bfbb31f54f3eb17df09faf00", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8394e2539369ea112e2f70a019223aa508b0054e", "parents": ["e0e6dd87aa3e4a74715f105960f3effb365e1027"], "commit": "da0821d9a2dbea650caf7b4aa6efcd8c16636652", "message": "removed title jekyll typo", "changes": [[1, 1, "episodes/20.md"]]}, {"committer": {"date": 1516123175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9c9d764bec377635f07fa4e2a16b6eaa71b04086", "parents": ["3c6a9e7f9dd8beac4ecd6d54d1810e017c3c2ad7"], "commit": "e0e6dd87aa3e4a74715f105960f3effb365e1027", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a6fc2aa64d8b5e1331ed7793514eb99a5055170", "parents": ["cc25cd723d449a29c6227c9408e63a81f700d0a8"], "commit": "3c6a9e7f9dd8beac4ecd6d54d1810e017c3c2ad7", "message": "prep for dynamicland, day 2", "changes": [[1, 1, "_data/git-log.json"], [69, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516078274, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cb5d5056f2f9b4a85d58bbb8d05a78408d95469e", "parents": ["311452ac76363a63b81bc9ed798f4543d8aac547"], "commit": "cc25cd723d449a29c6227c9408e63a81f700d0a8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3ba72c147a36a300c79e7303d1aa49b2ff5444d4", "parents": ["1275618ef04ff41d5bf7e758f0d0b56a79f87643"], "commit": "311452ac76363a63b81bc9ed798f4543d8aac547", "message": "Dyanmicland visit, day 1", "changes": [[1, 1, "_data/git-log.json"], [47, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1515801319, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fedb4fdb66eabfd616911e314e74e716843682fd", "parents": ["cdb26d0592f615ae760416bb451233568b7d11a9"], "commit": "1275618ef04ff41d5bf7e758f0d0b56a79f87643", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "46b48d59343ec50bd54f55c0349406c6f7030c82", "parents": ["94febe1a8150c6ec54cb18909a26d60db9b4867e"], "commit": "cdb26d0592f615ae760416bb451233568b7d11a9", "message": "## Rushed BV deep dive\n\n### Quick progress\n\nQuick & dirty progress with little to no note taking was made today on a number of BV things:\n\n* Media for Thinking the Unthinkable\n* The Future of Programming\n* Seeing Spaces\n* RESEARCH AGENDA AND FORMER FLOOR PLAN\n* The Humane Representation of Thought\n\nAs well as a few selected references that he linked to from those (or the notes for those), but you'll have to see my notes in this commit for all that jazz.\n\n### Remaining things\n\nThought I didn't get to them today, I think it would be useful to me to read both Bret's _2013 links_ and _What a technologist can do about climate change_ before I show up at Dynamicland. I have plenty of time for both of these things before Monday at 1pm PST, but it's also not a tragedy if I don't get to them.\n\nAs far as my BV deep dive goes, I'd say that it's as done, if not more done, than the deep dive I did into Alan Kay. There's more to be looked at for both men, for Alan there are many videos, and for Bret, there are past websites, projects, and journal entries. But I suspect that after next week, I will feel content in my knowledge of Bret Victor for now, and would be more happy spending time with his sources, than with him directly. And of course, re-reading and re-watching is always useful so I can always comes back to this if I need to.\n\n### Self-directed masters program\n\nOn a trip to the bathroom, I picked up Richard Rorty's _Philosophy and Social Hope_ and was blown away by the first few pages. He alluded to being able to dissolve [my current paradoxical thoughts on the distinction between inventtion vs discovery](/essays/invented-or-discovered). It feels like Rorty might do for Dewey what Deutch does for Popper.\n\nAnyways, I have a stack of books in front of me ranging from Piaget to McLuhan to Raskin to Vygotsky to Brooks to Rheingold to Minsky to Hofstader. And I have at least another dozen such books elsewhere that feel like essential reading for me to live a fufilled life. Thus had the thought to structure all of this reading and reflecting into an organized structure of some sort, which I am currently referring to as a \"self-directed masters program.\" Here are some of the tasks (unordered) that represent my current thinking of the next steps here if I choose to continue planning in this direction...\n\n* look into how other masters' programs, PhD programs, or other programs of study are organized, such as [Open Masters](https://www.openmasters.org/) and [Steph Jang's post](http://stephjang.com/blog/free-masters-program/)\n\n* think about the topics / questions / goals (in other words, why do this over getting a job or starting a company, or any other possible thing?)\n\n* will there be a thesis or end product, one or many?\n\n* mentorship?\n\n* physical location?\n\n* time\n\n* budgeting", "changes": [[1, 1, "_data/git-log.json"], [130, 4, "notes/bret-victor/index.md"], [2, 0, "notes/bret-victor/questions.md"]]}, {"committer": {"date": 1515780096, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "07406860a20a72557192780b0a6ac840fd9b9f26", "parents": ["88383172d451cc20d6df5751352e63a4fad8c175"], "commit": "94febe1a8150c6ec54cb18909a26d60db9b4867e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eaab0b653df713af1adbde0c8eadcd878e1921b7", "parents": ["02c397d7d358656d3ffb1daa7336ba766b0b7ffe"], "commit": "88383172d451cc20d6df5751352e63a4fad8c175", "message": "## Plan for 01/12/18\n\n### _Media for Thinking the Unthinkable_\n\nI spent the morning watching _Media for Thinking the Unthinkable_, again without taking notes, but still making an effort to read sources, which in this case included [The Unreasonable Effectiveness of Mathematics](http://www.jstor.org/stable/2321982) and [An Ill-Advised Personal Note about \"Media for Thinking the Unthinkable\"](http://worrydream.com/MediaForThinkingTheUnthinkable/note.html), the ladder of which had a few wonderful gems, including:\n\n> Any concept, technique, or tool that is specific to software engineering is guaranteed to have a short shelf life, at least on any time scale that I personally care about. (Which is totally fine if you're into that, but this is my ill-advised personal note, not yours, and I personally care about mattering 100 years from now.)\n\nWow, that's fascinating. Makes me wonder about where this desire to attain a lasting legacy comes from.\n\n### Rest of today\n\nI'm going to take an the next hour for lunch and mayge get a haircut, so that puts me at 2pm, and then I have to leave for dinner at 7pm, so I have 5 hours for work. Given that this is my last real work day before visitng Dynamicland, I'd like to get through the following things:\n\n* finish the last ten pages of _Visual Display_\n* finish reading _No Silver Bullet_\n* finish my [BV deep dive](/notes/bret-victor), which includes:\n * The Future of Programming\n * RESEARCH AGENDA AND FORMER FLOOR PLAN\n * Humane Representation of Thought\n * What a technologist can do about climate change\n\nWill probably have to go much faster than usual to make it through. No problem.", "changes": []}, {"committer": {"date": 1515708602, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eaab0b653df713af1adbde0c8eadcd878e1921b7", "parents": ["69ec3c567fb38e04feaad7209cd76d36ab43890b"], "commit": "02c397d7d358656d3ffb1daa7336ba766b0b7ffe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a90b26ed014021e2026e8985350d601d56eb144b", "parents": ["13e2f0088dc30f5e9033aa970a887bfa7a5d5683"], "commit": "69ec3c567fb38e04feaad7209cd76d36ab43890b", "message": "## Reading Tufte\n\n### _The Visual Display of Quantitative Information_\n\nToday I read 178 out of the 190 pages of Tufte's _Visual Display_. It was While I have recently been writing copious notes while I read, today I simply read without taking any notes, despite of course, this adorable note:\n\n

My girlfriend's cat hates it when graphics get order but not magnitude right. He's a big @EdwardTufte fan pic.twitter.com/aSGoFp9CPk

— Steven Krouse (@stevekrouse) January 11, 2018
\n\n\nIt was interesting reading. When I turned the page and found the beginning of the next chapter, I would intend to take a break, but figured I might as well read first read the first few lines of the next chapter just out of curiosity. But then my curiosity would be so piqued that I'd find myself going chapters at a time without breaks. It was a good 4 hours of Tufte today.\n\nGiven that I don't have any immediate concrete, practical use for these skills, I'm not sure how useful it felt. As a study in where ideas come from, it was interesting to see many Bret Victor ideas I'm familiar with in their original context. For example, I recognized sparklines, a Tufte invention, from BV's work (although in a quick web search, I am unable to find an example of this...) This speaks to the question of pre-loading vs just-in-time learning. I feel like most of the value in my reading today will be in knowing where the answers to questions about data visualization will likely be found -- and that there are answers here at all -- rather than the actual rules or techniques that I read given that I am likely soon to forget them in the absence of applying them anytime soon.\n\n### Steve's Search for Meaning\n\nRecently I've been talking a lot about meaning, asking questions about the value of earning money, status anxiety, and company mission statements. Given that this is not the first time my brain has wadded its way into this territory, I am suspect that these concerns are \"real\" concerns, in that I don't actually care about the answers to these questions. I feel that it's much more likely that I am feeling unsettled for some external reasons (such as having less contact with people given all the reading I'm doing, or having less structure in my life), and am then looking for logical questions to focus my and others' attention on to explain away my unsettled internal state.\n\nWhen I shift my attention away from these questions, and back to my current plan of pickling myself in ideas, I feel much less anxiety: as long as I read a lot, and reflect on my reading, I'm following the plan. Another thing that abates my worries: the books and essays on my to-do list are first-class. In fact, it's difficult to find any to remove, and sometimes feels impossible to prioritize. My disquiet disappers entirely if I simply focus on enjoying the pinacle of pleasure that I have the luxury to enjoy by simply being allotted the time to dive into books that are interesting and potentially useful to me. That is, if I stop justifying, and simply enjoy.", "changes": []}, {"committer": {"date": 1515627432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a90b26ed014021e2026e8985350d601d56eb144b", "parents": ["9d19d8baba86170ad8b8ddf98197f70afe25ad7e"], "commit": "13e2f0088dc30f5e9033aa970a887bfa7a5d5683", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f1796306fe60f18d360331c57fa4d4bf63a0fa20", "parents": ["ced126d1bdc35bf85d932e6f345f86d210070e86"], "commit": "9d19d8baba86170ad8b8ddf98197f70afe25ad7e", "message": "## Good meetings and reading\n\n### Questioning the idea of crusade\n\nI've been doing a lot of questioning these days. Today I did my questioning with Omar Rizwan and my cofounder Eli. Maybe Bret's importing of the idea of \"cause\" from social activism into engineering isn't such a great idea? Maybe it's more fun and useful to solve problems for real people on their own terms - without having a bait-and-switch reason why.\n\n### Finishing Learnable Programming\n\nTechnically not 100% finished, given that I need to read all references, and I'm [not entirely done](/notes/no-silver-bullet) with No Silver Bullet.", "changes": [[1, 1, "_data/git-log.json"], [38, 1, "notes/bret-victor/learnable-programming.md"], [73, 0, "notes/no-silver-bullet.md"]]}, {"committer": {"date": 1515536900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "af7da7f7997092b628542eee48192591fbe3da5b", "parents": ["54ac548ddf5f2ed1376fbd2ddfd2b7e53605b63d"], "commit": "ced126d1bdc35bf85d932e6f345f86d210070e86", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bc9bf2a48ef3065d3c765a6623169a2452ff34e0", "parents": ["017b67483cddfcc656c1b7ba3ae99beb26be04c4"], "commit": "54ac548ddf5f2ed1376fbd2ddfd2b7e53605b63d", "message": "## Big long day of BV deep dive\n\nStill making my way through Learnable Programming, making sure to read all of the footnotes and refernces, as well as fully articulate all of the relevant other thoughts I have while I read. This is probably too much writing, I'm beginning to realizing, but I am indeed almost done! With this one essay. Then there is much to do read and re-watch before heading out to Dynamicland.\n\nI also got my first Tufte book, the Visual Display, and would love to get partway into that at least as well.", "changes": [[1, 1, "_data/git-log.json"], [24, 3, "essays/customer-support.md"], [41, 0, "essays/regex-for-humans.md"], [127, 1, "notes/bret-victor/learnable-programming.md"], [23, 0, "notes/bret-victor/questions.md"]]}, {"committer": {"date": 1515276246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "807a3e45ddfa7367f1faf8cb26d2f460421a24dd", "parents": ["16f57287efc9e17bfa21ee829b6e98dec047d7e0"], "commit": "017b67483cddfcc656c1b7ba3ae99beb26be04c4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6a95d45c7aeac43dd00853ca9ea8fefa02d294a9", "parents": ["8dfe71285e19a40034cf28aacbfce0cb65b52d06"], "commit": "16f57287efc9e17bfa21ee829b6e98dec047d7e0", "message": "more LP notes", "changes": [[28, 0, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1515256579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "624db7c2cdbb1af65b7d91797078be947ba1c518", "parents": ["f235d11a785b542ce249936ce1e88eb055ac3906"], "commit": "8dfe71285e19a40034cf28aacbfce0cb65b52d06", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "50ef1c3e268bb41902fabcd028bb5fd434082954", "parents": ["56f0734828adb8e35849d317a2d6a88ac967a855"], "commit": "f235d11a785b542ce249936ce1e88eb055ac3906", "message": "add section about chat bots", "changes": [[1, 1, "_data/git-log.json"], [5, 1, "essays/customer-support.md"]]}, {"committer": {"date": 1515256315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6d34aa14cce6bf119c53e6b85f40890ab39df828", "parents": ["ff27e1e0032dd75749716cfe820add9eb313d213"], "commit": "56f0734828adb8e35849d317a2d6a88ac967a855", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3db6ac40b03f1c51c05f5f79db553b759274f5e2", "parents": ["d2a995d7fadb9046a3b136d917f5323dd01e4452"], "commit": "ff27e1e0032dd75749716cfe820add9eb313d213", "message": "## BV deep dive: learnable programming\n\nDid some good reading and writing this morning! As ususal, I wrote much more than I read. Fun fun!", "changes": [[1, 1, "_data/git-log.json"], [52, 0, "essays/customer-support.md"], [59, 0, "essays/learnable-programming.md"], [93, 33, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1515190081, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a0bc72a5bdae58bb8a73dfd1acb70fb8c7d20249", "parents": ["12946987bf830b95557f1ef7efdf646da20e1f49"], "commit": "d2a995d7fadb9046a3b136d917f5323dd01e4452", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "46d11b3e8f483e12fabaf6011b16b2d5aa13156d", "parents": ["ea747bdc5c805b70ff84461b3ed5ca3adf8d6c03"], "commit": "12946987bf830b95557f1ef7efdf646da20e1f49", "message": "finished reflection 10 (finally)!", "changes": [[31, 92, "reflections/10.md"]]}, {"committer": {"date": 1515189463, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "76c583c4b2d5f9ac49d27e6860bd43f8a208acd0", "parents": ["fb84c847a489c52bc8269b274ec0f7d4b1533443"], "commit": "ea747bdc5c805b70ff84461b3ed5ca3adf8d6c03", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34b58e1a2d2143030e0a7b811db269a71173159e", "parents": ["4f29cd260f0fc7be802a606d3e80d04712b0d36f"], "commit": "fb84c847a489c52bc8269b274ec0f7d4b1533443", "message": "## Shortcut to github issues\n\n* TOC\n{: toc }\n\nNow [futureofcoding.org/issues](./issues) will link to https://github.com/stevekrouse/futureofcoding.org/issues\n\nAnd [futureofcoding.org/issues/3](./issues/3) will link to https://github.com/stevekrouse/futureofcoding.org/issues/3\n\nThis works for arbitrary issues because I wrote the code in the 404 page for this repo, which here acts as a router.", "changes": [[16, 0, "404.md"]]}, {"committer": {"date": 1515187169, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0c9358dc93d8c97ec6b91979fa7c10b5c4d3b89", "parents": ["795c14e50e03c323c0db054f2231dd2b0140caf3"], "commit": "4f29cd260f0fc7be802a606d3e80d04712b0d36f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "99e9799b88588cc45d34f125a76a17738bed2d42", "parents": ["5c391ad1e039666e4c35e774f63b2fc38bf5520f"], "commit": "795c14e50e03c323c0db054f2231dd2b0140caf3", "message": "## Update for this week\n\n* TOC\n{: toc }\n\n\n### Plans to visit Dynamicland!!\n\nI'm very excited to be visiting Dynamicland in two weeks! I'll be there Jan 15-19 2018. I've heard, read, and seen so many amazing things from there, and I'm pumped to see it all firsthand and play with it all. Hopefully I'll have some fun videos, writings, and/or podcasts for y'all from there soon!\n\n### Where have I been this week?\n\nI have not committed to this project/log/journal at all this week, which is directly contradicting my policy of contributing every day, except when otherwise specified. Part of the problem may be that it's unclear *where* I specify which days I have *on* vs *off*. Food for thought.\n\nAnyways, I've really taken this past week for vacation. I took my girlfriend to waterski on Monday, spent the day with my grandparents on Tuesday (six hours of grandparent technology help was fun!), and spend what was supposed to be my last day in FL with my mom and brother on Wednesday.\n\nWe were supposed to leave Thursday morning, but our flight was cancelled because of the snow. I spent the day packing and then unpacking my things and on the computer and then phone with Spirit airlines. Very fustrating.\n\nHowever today I have been working! I spent the morning on email, then had a fun chat with Paul Chiusano about education, and now am here. I plan to spend the next 90ish min here, then workout, then have dinner.\n\nGiven how unproductive we've been this past week, my girlfriend and I are considering spending this weekend (tomorrow and the next day) working too, so stay tuned on that front. No promies.\n\n### Reflecting on reflection 10\n\nI am overwhelmed by the size and scope of reflection 10. It's both too much to think about and also not fun to think about.\n\nAnd it's just plain embaressing, really indefensible to not get any work done because you're blocked on a reflection time. Apparently there was wisdom in the setup that I had before: Monday's are reflection days. You can only spend as much time as you have on a Monday. This is good because it forces me to not include all sorts of tangents.\n\nSo my current idea is to spend the next 90 minutes finishing reflection 10, of which the goal is to come up with a plan for the next two weeks before leaving to visit Dynamicland.\n\n#### Cleaning up reflection 10\n\nMake the BV deep dive section short. No re-reading of notes.\n\nRemove the Alan Kay / possiblitiy and income sections.\n\nKeep misc updates.\n\nThink about priorities.\n\nLet's do it!", "changes": []}, {"committer": {"date": 1514590238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "99e9799b88588cc45d34f125a76a17738bed2d42", "parents": ["4825676c47d70de77de6af4f556ae0fe25517d77", "602ba1680383e18cc902685ad78aaed205ae9081"], "commit": "5c391ad1e039666e4c35e774f63b2fc38bf5520f", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1514590228, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79eccc421307c9e4e20271b4b8e486a98d6655d5", "parents": ["d1443cbc78bef5fb96506bf3171f050674d61462"], "commit": "4825676c47d70de77de6af4f556ae0fe25517d77", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "61922b29ca9a5f67bad6b9eb0dd6ee2dac03cd5a", "parents": ["38b262e91d83963956e21581fc79103fd9c1c39c"], "commit": "d1443cbc78bef5fb96506bf3171f050674d61462", "message": "glen call notes", "changes": [[1, 1, "_data/git-log.json"], [4, 0, "notes/bret-victor/index.md"], [24, 0, "notes/glen-chiacchieri-12-29-17.md"]]}, {"committer": {"date": 1514588570, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1514588570, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ff49f994bb6b02634b5cbf1b52ce47eaf72be7f8", "parents": ["38b262e91d83963956e21581fc79103fd9c1c39c"], "commit": "602ba1680383e18cc902685ad78aaed205ae9081", "message": "add beach link to notes", "changes": [[2, 1, "episodes/20.md"]]}, {"committer": {"date": 1514570064, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1ad148eb452d6c295c95d1e85cb8803d85b16cc9", "parents": ["70943c7668e5e1e14bfac3457c49be7b49fe22e9"], "commit": "38b262e91d83963956e21581fc79103fd9c1c39c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7fc111b95d13bf3a8a16fd1635b4b01b07d33262", "parents": ["2e62bd2632f774a9bb5d0fec774b7bd37fa9d0d8"], "commit": "70943c7668e5e1e14bfac3457c49be7b49fe22e9", "message": "glen call prep", "changes": [[63, 0, "notes/glen-chiacchieri-12-29-17.md"]]}, {"committer": {"date": 1514569394, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2de889e9fdb104f8896fa6450ba2d3aa135accb3", "parents": ["6711faceefd673092487c81a787a5fbe986ab02b"], "commit": "2e62bd2632f774a9bb5d0fec774b7bd37fa9d0d8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aeea5802c82336fa26ed0dbe36e96b6ef2988980", "parents": ["62d4aa8f55cf9fde45e009cac26770e28b1bddbf"], "commit": "6711faceefd673092487c81a787a5fbe986ab02b", "message": "continued working on reflection 10", "changes": [[53, 30, "reflections/10.md"]]}, {"committer": {"date": 1514567455, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9145ae3647f642fb3bed409b354ac3aa67779ea2", "parents": ["50b312677133e85c3bfa9f06f394df1ec5fa1bbf"], "commit": "62d4aa8f55cf9fde45e009cac26770e28b1bddbf", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f91c5388b367bd6cc221f6fd46c300f54341de08", "parents": ["968eab4c42a65b95b092e5026a49a0a37a6202b5"], "commit": "50b312677133e85c3bfa9f06f394df1ec5fa1bbf", "message": "moved hash to link to fix anchor tag", "changes": [[2, 3, "log.md"]]}, {"committer": {"date": 1514560748, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7f193c941e7d02ac7494fb2fe3dde284185ab495", "parents": ["c519f7faf8a52073d621d68f0a595dae2c3720b3"], "commit": "968eab4c42a65b95b092e5026a49a0a37a6202b5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "64671b2710cad0ee2736f8b351e05effa578e274", "parents": ["fc5c1d1119543c9b7b35f916c9910e4c00c571b4"], "commit": "c519f7faf8a52073d621d68f0a595dae2c3720b3", "message": "removed subscribe button nobody used", "changes": [[1, 1, "_data/git-log.json"], [0, 1, "index.html"]]}, {"committer": {"date": 1514560675, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e6ebb74ed44f7035d462dc072fe1f314123cfc7b", "parents": ["8f6345eacc39d9fcf95210a58a09cba7c1fb03f9"], "commit": "fc5c1d1119543c9b7b35f916c9910e4c00c571b4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "756003adb2a9c5031f6ea87b37048319e39924ef", "parents": ["546ba9a392f17100bd7ee13ec0381d8d1cc3bb8b"], "commit": "8f6345eacc39d9fcf95210a58a09cba7c1fb03f9", "message": "updated homepage text", "changes": [[1, 1, "_data/git-log.json"], [1, 2, "index.html"]]}, {"committer": {"date": 1514559901, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "13f5cead9e603df7d7082ce88d75fa5ccf42f2a4", "parents": ["0db04274d2c842939aef3e9b8f2d866d951e3e56"], "commit": "546ba9a392f17100bd7ee13ec0381d8d1cc3bb8b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "040cb5504c935fa781c2aec02181c60847b5f69a", "parents": ["12f207420c8e6e547a16886b7bc5fa7cbcf98735"], "commit": "0db04274d2c842939aef3e9b8f2d866d951e3e56", "message": "changed 404 page to markdown", "changes": [[0, 2, "404.html"], [20, 0, "404.md"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559764, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28b0f6d88df4d2b51b0b9fbdcbfcf590160bc6a1", "parents": ["27733981c295c9ea68601162977b9a7d9deab9e0"], "commit": "12f207420c8e6e547a16886b7bc5fa7cbcf98735", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8d83a64d169046023dc8d97775a81fbf1a1014c7", "parents": ["1a14234aff676a680c6f51b0d8664a09fcf9feb2"], "commit": "27733981c295c9ea68601162977b9a7d9deab9e0", "message": "add episode 20 jason brennan", "changes": [[1, 1, "_data/git-log.json"], [32, 0, "episodes/20.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1513958954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fdec4cd2a71c352e65ddcc816a892418e58c1346", "parents": ["3f0bed05b0a506f3a4c8b17fb598bd77d19c4f12"], "commit": "1a14234aff676a680c6f51b0d8664a09fcf9feb2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4c87bfae037de1243ca2d22f63bbe0a53335c2a7", "parents": ["a992123967ec9eaade9b059f88262a10bd6df1ad"], "commit": "3f0bed05b0a506f3a4c8b17fb598bd77d19c4f12", "message": "## Started Reflection 10 yesterday\n\nAt first I tried to write the reflection entirely in a commit message. There were a few problems with that:\n\n1) I was scared of losing the data because it's not really saved or commited anywhere.\n\n2) I wasn't able to commit my work halfway done. Or if I did then I'd have to copy-and-paste it again into the next commit which would be annoying for readers.\n\nThus I came up with the brilliant idea of creating a file in a new folder for it: [/reflections/10.md](/reflections/10.md)\n\nEven though I finished my 10-day course of 3x antibiotics every day, I am still not feeling 100% better. I've been very tired, so I've been sleeping a lot, which makes me feel better, but also doesn't leave much time for work, particularly because I'm with family and want to spend time with them as well. Hopefully I feel better soon so I can finish this reflection, finish my Work Plan (if the time is right, which it feels like), and finish my BV deep dive before visiting Dynamicland sometime in Janurary (still don't have dates yet).", "changes": [[1, 1, "_data/git-log.json"], [124, 0, "reflections/10.md"]]}, {"committer": {"date": 1513635742, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513635742, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "241990ad21149f655e661c2e4f88c9c3b4530908", "parents": ["647cf9586ca63f5ef28d9522d4ecb9556378e887"], "commit": "a992123967ec9eaade9b059f88262a10bd6df1ad", "message": "add jason brennan quote", "changes": [[4, 0, "notes/quotes.md"]]}, {"committer": {"date": 1513574289, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0c58ec382a52d8311fdb771e0e1045188dac7cd3", "parents": ["2ee46e93ddbfc16f49be83ee305dd759a27dbeb8"], "commit": "647cf9586ca63f5ef28d9522d4ecb9556378e887", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d09a4125365403dbcf425938f6e2710783cebb02", "parents": ["4c7b6ee545a27a9ee2069430e0e5c0315eeb121b"], "commit": "2ee46e93ddbfc16f49be83ee305dd759a27dbeb8", "message": "add additions & deletions to log", "changes": [[1, 1, "_data/git-log.json"], [11, 2, "log.md"]]}, {"committer": {"date": 1513573609, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "80d4cd6657c8fece69c65eec241840caf8270955", "parents": ["6f8a27ab2eee0f692b2e5254720b3ad1bf740a39"], "commit": "4c7b6ee545a27a9ee2069430e0e5c0315eeb121b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "98a182e3c85e7249bf3076ff22373aa61570ba72", "parents": ["ee0780f1f87c1266f5b06725a9942360912f6ef6"], "commit": "6f8a27ab2eee0f692b2e5254720b3ad1bf740a39", "message": "removed li commit format bug", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "log.md"]]}, {"committer": {"date": 1513572034, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ee4e3fb11a1547066a2210c5ba68d84da85c0f9d", "parents": ["9b7fbe6e38dc84da816f8f8b91930d37b5e653d3"], "commit": "ee0780f1f87c1266f5b06725a9942360912f6ef6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "707bf1c592ff7874dd76791c0831ae7d90bc8a83", "parents": ["9374cb8567c187a0f4c289e60de13e39d3059e66"], "commit": "9b7fbe6e38dc84da816f8f8b91930d37b5e653d3", "message": "set jekyll timezone", "changes": [[1, 0, "_config.yml"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513571712, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "774c88a873b903aa404bfe6b31814637ac8a140c", "parents": ["34cb250bded6dfcb58efc71cafc94339d081a101"], "commit": "9374cb8567c187a0f4c289e60de13e39d3059e66", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c060a47042d58a083abe35d2e89fe4468f902c7a", "parents": ["6109ee53ec6c1de6670505690836e3e993e83849"], "commit": "34cb250bded6dfcb58efc71cafc94339d081a101", "message": "log add date; change intro text", "changes": [[1, 1, "_data/git-log.json"], [3, 6, "log.md"]]}, {"committer": {"date": 1513569910, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4c7562bbcaa132d0520f3c97c056702a23c2e3e0", "parents": ["3cd51c1415fd1aadabaef5071e74503fb6925436"], "commit": "6109ee53ec6c1de6670505690836e3e993e83849", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e316297b5ba482404111f77a44a81c2108a0c93f", "parents": ["4cb39f832bb323f432d5cd7cf98b039eb1715a8e"], "commit": "3cd51c1415fd1aadabaef5071e74503fb6925436", "message": "log style changes", "changes": [[1, 1, "_data/git-log.json"], [2, 1, "log.md"]]}, {"committer": {"date": 1513569670, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f42399d84aaadb6e3e644c790891b9452c41fb3", "parents": ["66ec6a623dbb55ae79fc4481dd9ce1a2eec9d706"], "commit": "4cb39f832bb323f432d5cd7cf98b039eb1715a8e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9dec0545dc75217ce78864eb67c4efd377b418d3", "parents": ["4d3ebde7ab3d9fdff57d4019bb4b1c535190f03c"], "commit": "66ec6a623dbb55ae79fc4481dd9ce1a2eec9d706", "message": "added files changed to log", "changes": [[2, 1, ".gitignore"], [1, 0, "404.html"], [1, 1, "_data/git-log.json"], [37, 12, "log.md"]]}, {"committer": {"date": 1513565318, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f21910ab78015f678ed9c31eaca80eb9f56d92d3", "parents": ["2f6d64ad2e0c3ee79725f84f713206e58f2ef1ff"], "commit": "4d3ebde7ab3d9fdff57d4019bb4b1c535190f03c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "86b6f2b4b231e317637cda1e2997ea5757d5ba78", "parents": ["b4f82068b1473a4a2941a4beb3e3faed0941a153"], "commit": "2f6d64ad2e0c3ee79725f84f713206e58f2ef1ff", "message": "added tips to readme", "changes": [[70, 3, "README.md"]]}, {"committer": {"date": 1513564079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513564079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6ffec928d6f7c9f38254d8d33465d629502fd02", "parents": ["0d5da678af2a688887b528773640c746cde75dd2"], "commit": "b4f82068b1473a4a2941a4beb3e3faed0941a153", "message": "## Reflection on reflections\n\n* TOC\n{: toc }\n\n### Running out of space\n\nI just spent almost an hour freeing up space on my Cloud9 instance. I had over 20GB on this machine - and the max size is 10BG! First I deleted all the large directories that I no longer use. Then I tried to figure out how to shrink this directory down.\n\nFirst I installed [Git-LFS](https://git-lfs.github.com/) and tested it out on a single file. However, that file wasn't easily reachable in github pages, so that solution was out. And besides I think that was solving a different problem than the one I have.\n\nThen [this article](https://www.atlassian.com/blog/git/handle-big-repositories-git) helped me delete unneccesary files with git sparse-checkout. I still have a 350MB `.git` directory because they are probably storing those large files.\n\nHowever now I have 7GB of space on this machine and that should last a while if I just add text here from now on. Potentially I'm going to want to `git clone --shallow` this repo from scratch. The problem there is that I have to remember to bring over my config files in the `.git` directory. (It is a bummer that those files aren't more portable!)\n\n### Brief rant on \"overthinking\"\n\nOne of my least favorite words is \"overthinking.\" I firmly believe that whatever someone's problem is, thinking too much can never be the problem.\n\nWe all know people, maybe even ourselves, who have thought themselves into circles about relatively simple decisions. Clearly this person has a thinking problem, but the problem isn't that they are thinking too much: it's that they aren't thinking *well*.\n\nLet me prove it to you by contradiction. Say you are worried that you are overthinking an issue in your life. How in the world are you supposed to be able to evaluate this claim? The only way is meta-cognition: thinking about your thinking process. Through meta-cognition you may come to the conclusion that you have been doing too much *unproductive thinking*. But it would be impossible to say that you were doing too much thinking because the only way you were able to determine that you were thinking too much was more thinking!\n\nThis word \"overthinking\" feels appropriate when someone is doing too much of unhelpful kinds of thinking. Thus I propose we replace it with a new word. Let's say, you're \"thinking poorly.\" Ok, that's a bit harsh. Maybe \"thinking in circles\" is a better metaphor.\n\n### Cons and pros of my current schedule\n\nNow that I've gotten that off my chest, let's do some reflections on my process of reflecting.\n\nI set up this research schedule for myself 4ish months ago. I've learned a lot about how I work in that time. For the most part, I've liked this schedule. Let's reflect on what I don't like:\n\n* non-informative logistics around post production and publication for podcast episodes\n* feeling pressured to reflect, record, edit and publish reflections all in the morning on mondays\n\nThe pros of my current process:\n\n* re-reading my last reflection and journal entries from then until now is really useful\n\n### One question\n\n**What value does recording, editing, and publishing my research recap podcasts provide for me? (Not counting the reflecting I do to prepare to record.)**\n\nNone, save when others listen to it and then contact me to be friends.\n\nIn other words, I gain all of the value from simply doing the reflection in text, minus the people that listen to the podcast that wouldn't read my bi-weekly textual updates. Recording it on audio is simply for audio-only people.\n\nI wonder how many of those there are. I get about 100 downloads on most episodes. I'm not sure how many people actually listen to them after downloading. I used to have listeners contact me, but that has stopped. And I suspsect that many would've contacted me from the conversation episodes alone.\n\nHere's where podcasts shine: two-person conversations. A two person conversation requires little prep time and I usually learn a lot from the conversation. And the person I interview has an audience to spread me around to. (Although that hasn't really ever lead to much yet.)\n\nI'm thinking it makes sense to go to a 1 episode every other week as an interview plus Sam-Harris-style \"housekeeping\" section in the beginning if I have other things to say. For example, I can start my interview with Jason next week with housekeeping notes that I won't be doing research recaps any longer.\n\nWhat about people who want to read my bi-weekly reflections / status update?\n\nA few options.\n\nA) They can read them in the `reflections/` or `updates/` folder.\nB) I can create a TinyLetter bi-weekly newletter like Glen Chiacchieri.\n\nLet's start with (A) for now and see if anyone asks for a newsletter.\n\nOne final question: what's the plan for tomorrow's reflection?\n\nFirst of all, I won't be starting tomorrow's reflection until I finish my personal life reflection (which is private). I estimate that taking 1-4 hours tomorrow so I may not have time to do a reflection here until Tues or Weds.\n\nI definitely want to re-read the last two weeks of journal updates.\n\nI also want to read the prior reflection.\n\nI also want to re-read my plan.\n\nI feel finally ready to finish my work plan. It's basically [what it is now](./plan) plus [this section of my journal](http://futureofcoding.org/log#pickling-my-brain-is-a-lot-of-work).\n\nLet's try and finish my reflection first and publish it. Then I can decide what to do next: continue to BV deep dive, do \"deep thinking\", other \"FoC research\", or write the plan.", "changes": []}, {"committer": {"date": 1513561790, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6ffec928d6f7c9f38254d8d33465d629502fd02", "parents": ["d517082525598fffa80bb7610ceaa54e9c02c54b"], "commit": "0d5da678af2a688887b528773640c746cde75dd2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc05c9bcd6ed6a1681a7eb7e0e6f9d2a76794690", "parents": ["0ce99a21b228edac88cf9fa990a539fa1883ade3"], "commit": "d517082525598fffa80bb7610ceaa54e9c02c54b", "message": "removed git lfs; doesn't work with github pages", "changes": [[0, 1, ".gitattributes"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c1b2b3ae2a102b53695e84b36822102f0367c54", "parents": ["22efc9ec67987a35d1d87ed6981abf43258e7e7b"], "commit": "0ce99a21b228edac88cf9fa990a539fa1883ade3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fa487eea384d014c9c61b43009ca9e5c71bf78aa", "parents": ["c4a9410ebfa88a6a0adcece6ade1edf8457c4bbe"], "commit": "22efc9ec67987a35d1d87ed6981abf43258e7e7b", "message": "test git lfs", "changes": [[1, 0, ".gitattributes"]]}, {"committer": {"date": 1513281798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7621012f20caa44825a4a74651990505db9c2bd1", "parents": ["54c85ce7d678d67a52366eda8d1e8ab8a2d132cc"], "commit": "c4a9410ebfa88a6a0adcece6ade1edf8457c4bbe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ed79f8d97176730d40255224455fb6c25a70e313", "parents": ["9dabb09366b2303d5abf19d3d40b51bf5d7ba28b"], "commit": "54c85ce7d678d67a52366eda8d1e8ab8a2d132cc", "message": "add bezos lightbulb socket quote", "changes": [[1, 1, "_data/git-log.json"], [26, 0, "notes/quotes.md"]]}, {"committer": {"date": 1513276512, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "60dd12d761e7d2bd8d0b302291e1b665453d61d6", "parents": ["6c4b3fe119468993d4b88aae70b8740e4dc03d90"], "commit": "9dabb09366b2303d5abf19d3d40b51bf5d7ba28b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "71917d9c1a8aa8e62062b7f69cd82ce5aa3dacf1", "parents": ["fc686e9205631f5ddfc14f9b95771087adabc11f"], "commit": "6c4b3fe119468993d4b88aae70b8740e4dc03d90", "message": "added climate control outline photo", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513276480, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "01938578320e7c72393da0a83e201169de73bdc2", "parents": ["71efd348012c248cf1d81eff3306417eaea06049"], "commit": "fc686e9205631f5ddfc14f9b95771087adabc11f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8434a3e6a8aa67fe3b2c46a688082b6badedb2d1", "parents": ["04438324bbcfd28d5b57b0fcefee43a7a8e22dbd"], "commit": "71efd348012c248cf1d81eff3306417eaea06049", "message": "## Learnable Programming & video games\n\n* TOC\n{: toc }\n\n### Productive morning\n\nReally excited to be back in the swing of things! Woke up at 7am, snoozed the alarm for 20 mintes, then set up my workspace for 20 minutes (adjusting the chair and computer heights), and got into it!\n\nThis morning I reviewed Evan Miller's _Don't Kill Math_ which was fun.\n\n#### Shower outline of \"climate change for conservatives\"\n\nThis outline shows how much I've internanlized both Nicky Case's know your audience and Scott Adam's persuation techniques. In short, as someone who's been skeptical of the left's portrayal of climate science, I communicated to people like me about ways to assimilate climate science into their existing mental models.\n\n![](/media/2017-12-14 10.17.30.jpg)\n\n\n### Learnable programming\n\nAfter the shower, I pushed myself to re-read Learable Programming. I was at first resistant because I've read it 2 or 3 times now, and the last time was only a few months ago. Almost immediately I realized that I definitely need to read this article again!\n\nThe things about it that surprised me this read:\n\n1. Video games as a vector for powerful mental models. Aligns incentives well in for-profit: people pay for games. Will Wright is a boss. Need to research Minecraft. Maybe go work for Will Wright or some amazing game maker. Or team up with Nicky on a game.\n2. I want to re-write Learnable Programming. I've already put down some thoughts about the re-write. It's mostly a more coherent and justifying able framing, as opposed to explaining the importance of a seemingly random assortment of virtues Bret specifies at the top of the article.\n\n\n### Reading vs writing polished work\n\nGiven that I'm producing outlines for two pieces this morning, in addition to all of the other content that I've been meaning to produce in a polished way, not to mention the backlog of blog ideas I have stuck in a Trello, I am beginning to wonder how I will balance my time as a reader and writer. Right now I'm in reading mode. I think the balance of writing as a form of note-taking is great during this mode. It will help in writing mode for sure. I wonder when I will feel the impetus to switch to writing mode. At the current moment it feels like there's so much for me to get into my head, including:\n\n* Alan Kays videos\n* re-reading Seymour Papert\n* Mountessouri\n* Marshall McLuhan\n* Piaget\n* Chris Granger\n* Nicky Case (again and more thoroughly)\n* John Dewey (I'm becomming obsessed with this guy)\n* F.M. Alexander (feels relevant to this project too)\n\nAnd then I have a dozen books in my apartment that are begging to be read, such as:\n\n* The Mythical Man Month\n* Two culture of the scientific revolution\n* Show your work\n* Society of Mind (minsky)\n* Theory of Fun for video game design\n\nGiven my current pace (assuming I'm not sick and continue to mostly read and not protoype), I feel like this reading will take more than a month but less than a year, which is very reasonable. The only worry is that the more I read, the more I will want to read because I'll want to continue walking the tree up to influence of influences of influences, eventually getting up to Plato or even the Torah.\n\n#### [Pickling my brain](http://futureofcoding.org/plan#1-pickle-myself) is a lot of work!\n\nAs Feynman says, [there are no miracle people](https://www.youtube.com/watch?v=IIDLcaQVMqw.) If you want to be smart you merely have to do what smart people did to become smart. It seems like smart people do a lot of reading. What they're actually doing is assimilating models into their heads. Then when they're not reading they are playing with those models.\n\nIt's a blessing and a curse that there are so many amazing models out there today. It's a blessing because we can be so much smarter than any person in history. It's a curse because if we want to be one of the smartest people of today, there's a lot of pickling to be done!\n\nThe next time someone implies that I was born this smart, I will need to give them a piece of my mind: \"Do you know how much work it takes to be this smart?! Day in and day out I read and write and read and write. Just like an athlete trains the body, I train my mind every day, all day.\"\n\nJoesph Campbell:\n\n> I would get in nine hours of sheet reading done a day. And this went on for five years straight... Reading what you want, and having one book lead to the next, is the way I found my discipline. I've suggested this to many of my students: When you find a writer who really is saying something to you, read everything that writer has written and you will get more education and depth of understanding out of that than reading a scrap here and a scrap there and elsewhere. Then go to people who influenced that writer, or those who were related to him, and your world builds in an organic way that is really marvelous.\n\n(Wow, reading more of this snipet is amazing stuff! Now I'm excited to read this whole book where I found this quote!)\n\nIt's interesting to note here I was already following this strategy before knowing about his advice. It's quite vindicating to know that this strategy worked for someone else. And if it takes me 5 years, that's ok too. I'll just have to find some way to make it financially sustainable...", "changes": [[1, 1, "_data/git-log.json"], [0, 51, "essays/invented-or-discoved.md"], [51, 0, "essays/invented-or-discovered.md"], [0, 111, "notes/bret-victor/bret-victor.md"], [128, 0, "notes/bret-victor/index.md"], [142, 0, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1513261232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1349043665e08bc6f2c9a1db335fad0b6810ba14", "parents": ["5843127b9c400cf210fff5507a99b43fd9ff2afd", "292d84e759eb2b3745ccdd5744ea6e8d4a1e951b"], "commit": "04438324bbcfd28d5b57b0fcefee43a7a8e22dbd", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1513261225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b6544d828f7b371f55ee6c867e4565077f7cb65", "parents": ["3759984a26f0cf045e03397984080aa51500cb74"], "commit": "5843127b9c400cf210fff5507a99b43fd9ff2afd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "25f9cd31d1738fd932af46c6e3fcba847d520643", "parents": ["6becf6f43ae604af3f09050514c3ae7f5d49eacb"], "commit": "3759984a26f0cf045e03397984080aa51500cb74", "message": "continuing BV deep dive", "changes": [[1, 1, "_data/git-log.json"], [13, 2, "notes/bret-victor/bret-victor.md"], [23, 0, "notes/bret-victor/kill-math.md"], [30, 0, "notes/halfway-there-cis-240.md"]]}, {"committer": {"date": 1513211429, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513211429, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "353a6f7efeebe612c34509e044469426c8eb8b40", "parents": ["5809a18fc8ad022f5d14c685bb44abfaa6e6540d"], "commit": "292d84e759eb2b3745ccdd5744ea6e8d4a1e951b", "message": "fix joseph typo", "changes": [[1, 1, "episodes/19-building-universe-joe-cohen.html"]]}, {"committer": {"date": 1513202861, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202861, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7b0b491a65234368af1dc35e0827bf14ed6a348b", "parents": ["20cb2736c5e78530107a45e981531c9365c554f3"], "commit": "5809a18fc8ad022f5d14c685bb44abfaa6e6540d", "message": "added omnystudio embed 19 joe cohen", "changes": [[2, 0, "episodes/19-building-universe-joe-cohen.html"]]}, {"committer": {"date": 1513202798, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202798, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "457c1c28cdc70061b9fea19f90893ba9d07fefb5", "parents": ["26542afb156a84c9a93d95445d089fa45248b6cb"], "commit": "20cb2736c5e78530107a45e981531c9365c554f3", "message": "added Building Universe: Joe Cohen to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1513202629, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202629, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b1b2a5c2ea10d83b0c9e34d02bc68c8490d827e5", "parents": ["6becf6f43ae604af3f09050514c3ae7f5d49eacb"], "commit": "26542afb156a84c9a93d95445d089fa45248b6cb", "message": "rename & publish 19 - Building Universe: Joe Cohen", "changes": [[131, 0, "episodes/19-building-universe-joe-cohen.html"], [0, 127, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1513194223, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "42b627dc21ba1be84488693440b0f41e055f3862", "parents": ["76e76c54be59c64ab8c5020b5cfb2e7c65dc40c6"], "commit": "6becf6f43ae604af3f09050514c3ae7f5d49eacb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "034bc0e82e5290be69c3c4ba21e1d95bcb1444c7", "parents": ["7b43b21e28a83f3d4028e213f06fab59308e26e8"], "commit": "76e76c54be59c64ab8c5020b5cfb2e7c65dc40c6", "message": "added shower notes photo", "changes": []}, {"committer": {"date": 1513194008, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "034bc0e82e5290be69c3c4ba21e1d95bcb1444c7", "parents": ["90b12576ce5b32958c784aebf9722e2ac70d9c5d"], "commit": "7b43b21e28a83f3d4028e213f06fab59308e26e8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97abd660e45bb0aff19fad3126fb0f69dd2e8f53", "parents": ["1a9a78ca409345b23fbbe0a8fbd13389fa3d2473"], "commit": "90b12576ce5b32958c784aebf9722e2ac70d9c5d", "message": "## Back (again)\n\n* TOC\n{: toc }\n\n^ I wonder if the above generates a table of contents in the markdown.\n\n### Sick (again)\n\nIt's deja-vu all over again. I fell back off the horse again for the same reason. It looks like I've had strep throat, on an off for the past 2 months. We're not 100% sure but our prevailing theory is that my girlfriend and I keep passing it back and forth to each other, which is how I still have it even after taking 10 days of antibotics. Now we're both on antibiotics so I feel confident that we're kicking this sickness for good this time.\n\n### Getting back into things (again)\n\nIt's definitely tricky going from sick-mode (which is similar to relax-mode) to work mode, or vice-versa. Once in a mode, it's easy to maintain it, but the transitions are tricky, particularly when they are un-expected. Usually the transition goes smoother when you admit that you're transitioning.\n\nFor example, last night I stayed up to midnight, watched too much TV, had too much to eat for dinner, and had too much snack food after dinner. I woke up this morning feeling almost hung over. I was tired and everything hurt. Contrast this with how I go to bed when I'm in work mode: asleep before 11pm, eat a reasonable meal, none or a small dessert, 1 or 2 episodes of TV, maybe reading, definitely not a movie.\n\n### Scattered thoughts\n\nAs happened last time I got sick, my thoughts seem to have scattered and I feel quite directionless. I feel like I've forgotten why I'm doing a Bret Victor deep dive, as compared with all of the other branches of the tree I could go down.\n\n\n#### Chat with Stefan\n\nIt was really helpful to chat with Stefan Lesser this morning for a few reasons:\n\n1. He was very bright and optimistic, almost cheery. I got a very warm feeling from him. I wonder if it's related to him listening to my podcast because I get a similar feeling from Aidan.\n\n2. We think in very similar ways. Talking to my girlfriend about these ideas is like pulling teeth because we don't speak the same languages. She speaks the artist langauge and I speak the programmer langauge. But Stefan and I can communicate very fluidly. More than that we agree on so many points. It's very validating. I imagine that's part of why working in a research lab, like PARC or Dyanmicland, is so inspiring. Shared vision. Fast communication.\n\n#### Shower Note Session\n\nI was overflowing with thoughts to such a degree, and I was cold to such a degree, that I decided to do one of my famous shower brainstorm sessions. This was definitely one of my more scattered ones:\n\n![](/media/2017-12-13 12.45.20 (1).jpg)\n\nThere's almost too many thoughts and directions in all of those notes. While it was fun and energizing to write them, I am now intimidated by their quantity and scope and don't feel like engaging or proccessing them now. Content overflow is definitley one of my main themes of this project.\n\n### Looking ahead\n\n#### Things on the horizon:\n\n* I have ~3 hours today, ~8 hours tomorrow, and ~3 hours Friday\n* On Friday I go home to Florida for 3 weeks\n* Jan 8 - 12 I will hopefully (just applied) be at [the 1-week Recurse Center program](https://www.recurse.com/blog/121-come-to-rc-for-a-one-week-retreat)\n* Jan 19 - 26 I plan to visit Dynamicland in Oakland\n* I have 2 years of runway before I need to get a job (living in NYC)\n\n#### Thoughts on /plan v5\n\nI felt much more centered after re-reading [my most recent plan](/plan) this\nmorning. My thoughts are:\n\n##### 1. Justify cause/crusade framing\n\nThe cause/crusade framing feels so obvious to me, but definitely not to many others. I want to dig into these feelings a bit more. Think about why prinicpled, conscious, purposeful creation is \"better\" than simply doing stuff for money or more whimsical reasons.\n\n##### 2. Still blocked on philosophy\n\nHow do I know that I'm still blocked here? Because I can't make decisions. I had a great call with Jaime Brandon yesterday. It was very easy for him to diagnose this problem in me because he's faced it himself, as well as seeing it at Eve. When you're too broad, when you don't have good priorities or boundaries, you agonize over each decision, and constantly want to walk up and down the tree. A good project can easily see what it is and what it is not, and doesn't spend much time thinking about paths it didn't take in the tree because *that is not what it is*. A thing in the world defines itself by the path it takes. What it is and what it is not. Staying up in prototype/research land is refusing to do that. Even within prototype/research land, I feel constant agony about what is the priority to research or prototype or communicate or build.\n\nI feel my brain wanting to escape this proccess. I feel it looking for the easy out. Looking for a quick answer it can sub in here so we can get back to more structure, a more easily optimizable game. On the one hand, I applaud my brain for this strategy, because the less unknowns you're working with at one time, the better. Yet on the other hand, I feel like if I took an easy route such as getting a job at a company, I would immediately wish I was back here, working on my own philosophy, as opposed to actualizing someone else's, which I would constanatly be picking apart.\n\nThus, the appeal of the ultimate escape hatch on this procecss: go work for someone who's vision is so clearly better than anything I could come up with at the moment. The candidates for this position are few and far between: Alan Kay, Bret Victor, maybe someone at Bret's lab, maybe Paul Chiusano. We shall see what happens here when I visit Dnyamicland soon.\n\n###### Constructing Meaning\n\nI went deep into this rabbit hole in my shower brainstorm. I have defined a crusade as the most meaningful thing I can do. This is explicitly not the most good I can do from the Juan Benet / Elon Musk / Peter Singer perspective. Yet if this is the case, and it's truly subjective. Then I better be damn sure I know what is meaningful to me. That's why I started making a list of all of my positive memories that held meaning in my life. (It reminded me that my fustration with Looker was that I can't remember a single decision any one made because of a Looker report. In my experience, the tool was analytics for analytis sake.)\n\nThen I got into a hole where I realized that the difficult thing with children as customer is that their incentives are so perverse given the structure we place them in. For example part of why I hate tutoring is that either students are un-motivated or motivated for the wrong reasons (grades), or motivated to just get the end product to show off and thus just want me to program it. It's rare (but happens sometimes) to find a student in the right context: working because they enjoy making something and getting better at making things.\n\nI'm also thinking about the condescending nature of this whole project, particularly the bait-and-switch part, where you sell a product that does X, but only because you have an ulterior motive Y. Sell electric sports cars to accelerate the transition to sustainable energy. Part of me wants to just give it up and go wherever there's the most money. Stop trying to be so normative. Just let people tell you what it is they want and then deliver it. That's not to say that you should blindly listen to customers. It's that you should iterate with customers towards something they will pay a lot for because it solves a big problem for them. Put another way, Looker clearly is solving a massive problem for tens of thousands of people at thousands of companeis. It's truly software through empathy, as Lloyd talks about. Who am I to tell the world what's best for it? In other words, I better have a strong and well-thought-out philosophy for how to make thw world better if I am going to try my hand at shaping it through technology. Otherwise, I might as well just go where the market is because that's garunteed to make people better off (if you assume markets do that).\n\n#### Priorities for Dec and Jan\n\n##### 1) Life priorities\n\nMy main focus for my own health is the Alexander Technique.\n\nFor my family, particularly in the context of the 3-weeks in Florida, the focus is making the most of the time, in the context of others. This means that I want to * strategize ahead of time* to set myself up for success, but *be content in the moment*, even if it feels like a waste of time. In other words, 1) don't see people just because they asked to see you, 2) go to bed early and wake up early, 3) phsyically seperate from others when trying to focus, 4) calendar sculpt. The main priority here is \"peace in the home\", which is a Jewish saying. This is not the time for arguments and figuring things out. It's a powder keg. This is the time for making nice. Reflect later. Figure things out later.\n\n##### 2) Work priorities (12/13/17 - 1/8/18)\n\nCalm, coherent, patient, doing less. The opposite of frenetic. That's my goal. Re-reading my /plan embued me with calm and happiness. Meditating, coming back to my journal to reflect. These are the things that add the structure I need in this purposefully unstructured time.\n\nI can't see any reason to stop my Bret Victor deep dive given that I still have at least half a dozen links to go. I feel like I've lost steam on it, but that might just be a momentum thing. Could return when I get back into it.\n\nI don't want to start doing priority-calculus, seeing if there are other things to read that are slightly more efficient uses of my time.\n\nHowever, I wonder if I should budget more time in my calendar for \"deep thinking.\" I set aside a place in my Inbox (Google Inbox) for notes that I should proccess later. It's the \"deep thinking\" label. I feel like my time for thinking those thoughts has been crowded out by an urgency to finish the Bret deep dive.\n\nNow that I mention it... while this next thought does go against my intention not to play priority-calculus... I have a lot of links in various places that could use some attention, including /links as well as the \"foc research\" label in my Inbox. At the very least I could clean this up a bit and figure out a home for them.\n\nFinally, there clearly are top-of-mind topics that I could keep in a prioritized list somewhere. Basically, the next version of /ideas. These are Blockly++, FRP Scratch/WoofJS, StreamSheets, CycleJS devtools, FRP research incl Reflex & Conol Elliot, essay about essays, better wiki tool, etc.\n\nOk, I need to go eat lunch now. With the remaining 2 hours in the day (given that I spent an hour on this journal entry), I will:\n\n1. Get to inbox zero\n2. Publish Joe Cohen interview\n\nThe plan for tomorrow is:\n\n1. Deep thinking notes procecssing\n2. Calendar sculpting for vacation time\n3. Bret Victor deep dive (unless I come up with anything better)\n4. Plan friday", "changes": []}, {"committer": {"date": 1513188230, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97abd660e45bb0aff19fad3126fb0f69dd2e8f53", "parents": ["6fc2a5d07df03fe9b8434b7c6cc422091e4eb6a3"], "commit": "1a9a78ca409345b23fbbe0a8fbd13389fa3d2473", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e61f62a9ecdf847dc446c0196be68373feee7db", "parents": ["dcfc89a16d0735c0fc229198ba03ea5517d381e3"], "commit": "6fc2a5d07df03fe9b8434b7c6cc422091e4eb6a3", "message": "stellar 2-hour Stefan Lesser convo", "changes": [[1, 1, "_data/git-log.json"], [120, 0, "notes/stefan-lesser-12-13-17.md"]]}, {"committer": {"date": 1513172018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7a5e7d59872ddeead78e86e9d2f02345a2417dd7", "parents": ["8fedb67e480c09374482f67f625145f86a577d7c"], "commit": "dcfc89a16d0735c0fc229198ba03ea5517d381e3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3b13902582d4c897a40da8813ef48b1a094c362b", "parents": ["caae7a01f2d488a669f1b71d3b366e3cca18a5d3"], "commit": "8fedb67e480c09374482f67f625145f86a577d7c", "message": "call with jaime brandon", "changes": [[64, 0, "notes/jaime-brandon-call-12-12-17.md"]]}, {"committer": {"date": 1513171856, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171856, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "a559dc52d8ac9919064abb894e23306337775d08", "parents": ["33f5f13d4b6b48c9acdfeb8a4dd13a0da64109ab"], "commit": "caae7a01f2d488a669f1b71d3b366e3cca18a5d3", "message": "prep for call w stefan\n\nThinking about ways to collaborate on this project...", "changes": [[37, 0, "notes/stefan-lesser-12-13-17.md"]]}, {"committer": {"date": 1513171472, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171472, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "053f49fcc5b9637c98c9dc0e36e92ec0fbc59ce8", "parents": ["6abdba4fb713a2faefc2888ae1e5bb1e057d6499", "f04dbba35685d1236d3212681b4f8b3adc4779a9"], "commit": "33f5f13d4b6b48c9acdfeb8a4dd13a0da64109ab", "message": "Merge branch 'master' of git@github.com:stevekrouse/futureofcoding.org.git", "changes": []}, {"committer": {"date": 1513171372, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171372, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "37fba8a4553c71a6c879e7e0e139384c5ca8cb1a", "parents": ["c4b770e4983ee0cf65c493f366c2ddc34342f729"], "commit": "6abdba4fb713a2faefc2888ae1e5bb1e057d6499", "message": "Chat with Samuel Loncar\n\nWhy am I talking to a religion scholar? Good question! Sam is a\nbrilliant scholar,. Every time we talk it feels like there's so much\nto learn from him. In particular, I love his focus on deeply\nunderstanding historical context -- he reminds me of Alan and Bret in\nthat way. He was excited to meet me and learn about those guys,\nbecause he's interested in the history of technology, particularly the\nreligiousity of Silicon Valley, epitomized by the Singularity and\nanti-deathers.\n\nIn the course of preparing for this chat, I made the following\noutline, which I didn't actually reference in the chat, but looking at\nit now, I see that it's a good model for where my head is currently\nat.\n\n* my career plan\n* crusade / cause\n* inventing on principle\n* We are our tools\n* including ideas, patterns of thought, notation\n* augmenting human intellect\n* copy and paste\n* Dynamicland - ergonomics\n* democratizing tool generation\n* paths\n* build\n* profit\n* Looker, Bubble, Excel\n* non profit\n* Scratch, Wikipedia\n* research\n* Victor, Kay, Papert, Engelbart\n* Patreon?\n* constructing cause\n* now: read Bret, and influences\n* Jan: visit dynamicland\n\n\n* areas of interest\n* comprehensible programming model\n* CycleJS devtool write\n* FRP Scratch/WoofJS\n* workflow and version control\n* underlying interface library\n* LogicHub\n* Ten Brighter Ideas?\n* All assumptions, including reasoning principles, visible and\ntweakable, all the way down to “primary sources”\n* wiki-like (massively collaborative, structured, inter-connected)\nplatform for science\n* A tool for surfacing and ameliorating inconsistencies\n* Allows for multiple contrasting axiomatic views (but possible\nnot any mutually inconsistent ones concurrently)\n* Popper vs Kuhn\n\n* presenting old vs researching new?\n* work at TCS\n* work on Woof (and off-boarding)\n* work on old programming languages\n\n* Doing a podcast?", "changes": [[84, 0, "notes/samuel-loncar.md"]]}, {"committer": {"date": 1513012704, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513012704, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ed772a5c8e4d5e2b98a9f0c1386768bdd943aa12", "parents": ["c4b770e4983ee0cf65c493f366c2ddc34342f729"], "commit": "f04dbba35685d1236d3212681b4f8b3adc4779a9", "message": "Sick again. Reading/watching BV\n\nUnlike usual where I read and watch little and write much, today I'm not feeling great so I'm watching much and writing little. Hopefully I remember much so I can resume writing when I'm better.\n\nIn case anyone is wondering why I'm sick so much, join the club. My best guess is that my girlfriend and I keep passing strep throat back and forth. Hopefully we figure it out soon...", "changes": [[16, 2, "notes/bret-victor/bret-victor.md"]]}, {"committer": {"date": 1512751755, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "95669f12c3c6987e61a8d982832844e8f124bdb6", "parents": ["87e444ab1d808032714a8ea954b67aa43fa1f98f"], "commit": "c4b770e4983ee0cf65c493f366c2ddc34342f729", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bd761bc4f2ccc10687f006a4b1b16aa0fe90b7", "parents": ["df7593416317e3c7bdb24f78060626c568fddc95"], "commit": "87e444ab1d808032714a8ea954b67aa43fa1f98f", "message": "read BV's Dynamical System and Scientific Communication", "changes": [[1, 1, "_data/git-log.json"], [24, 2, "notes/bret-victor/bret-victor.md"]]}, {"committer": {"date": 1512747762, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9edc5d9a3fd7c4f077bfd41946b31b49007349a", "parents": ["924d4ef53b969aaa17f7c0ffd09a4925e9ee6ab5"], "commit": "df7593416317e3c7bdb24f78060626c568fddc95", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ae507ca5e7b1a366c734a7de1c04566ba4e5819d", "parents": ["2a155e3f1aa5b81d50299e70be50ef0c72e2b1d8"], "commit": "924d4ef53b969aaa17f7c0ffd09a4925e9ee6ab5", "message": "fixed typo in media", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1512747681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e33f3624cd8c222674465c0e199a227c4dde28a8", "parents": ["7a74e69dc235401a9ece467457bda58049846d73"], "commit": "2a155e3f1aa5b81d50299e70be50ef0c72e2b1d8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aeca2f6df2f3fc0ac2bee46e3f644e4699fcbe7f", "parents": ["918002a46b4ebfed4f59a8548811d3c180317d4c"], "commit": "7a74e69dc235401a9ece467457bda58049846d73", "message": "added inital files for Joe Cohen Universe interview", "changes": [[1, 1, "_data/git-log.json"], [127, 0, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1512674855, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "652ebc02f8421150e77e072bb577109cb325c0ae", "parents": ["a46cbc793334fff3288167406beadf6f4c95121d"], "commit": "918002a46b4ebfed4f59a8548811d3c180317d4c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4399bc50761da90ce9dded704c3237620aaf5a78", "parents": ["d6afc3e7dcadba7b00a3cb5fa00517b5438ca89f"], "commit": "a46cbc793334fff3288167406beadf6f4c95121d", "message": "added michael nielsen links", "changes": [[53, 0, "notes/michael-nielsen.md"]]}, {"committer": {"date": 1512670622, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6cc1ba1a4025a222fc1fa85f2ebaef7ccd1ddc47", "parents": ["d3d4f601da3cc3ab0c8e3f331995d3bd98e1c93c"], "commit": "d6afc3e7dcadba7b00a3cb5fa00517b5438ca89f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "50338eae2ff97c9d11fd0bcb10e0cd356251b5be", "parents": ["a95de28ea53ba362a818fce73aa49db9f4e41a9c"], "commit": "d3d4f601da3cc3ab0c8e3f331995d3bd98e1c93c", "message": "tired & unproductive today", "changes": [[20, 1, "notes/bret-victor/kill-math.md"]]}, {"committer": {"date": 1512668182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "65ae2c230599e71dff9c8eafb6b6ca79d674a571", "parents": ["b5911160e8c1e3e9fa116b1a68e7e33664c153d0"], "commit": "a95de28ea53ba362a818fce73aa49db9f4e41a9c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d032be312e3ac7525c5bba5ff359b8910bc04052", "parents": ["48d867bb9704d5e9c06db02b42abf0b752703442"], "commit": "b5911160e8c1e3e9fa116b1a68e7e33664c153d0", "message": "updated homepage organization a bit", "changes": [[1, 1, "_data/git-log.json"], [4, 10, "index.html"]]}, {"committer": {"date": 1512599333, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3d9227c88699fd88acb90325844a25af377de16c", "parents": ["123be98e078ee806a3ac318929c2c615e632a4bb"], "commit": "48d867bb9704d5e9c06db02b42abf0b752703442", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5f4db6f7baf2210f1f7feae3327379edaca22f5e", "parents": ["ddd3d52fe01910109df4b953fa453cdbe5706826"], "commit": "123be98e078ee806a3ac318929c2c615e632a4bb", "message": "Writing about, more than reading, Kill Math\n\nToday I wrote ~3000 words about the ~1500 words I read of Bret Victor's Kill Math essay. Clearly it was thought-provoking. This is slightly misleading because I also re-read Chris Granger's Coding is Not the New Literacy as well as an article about Kill Math. Yet, the fact remains that I had a lot to say about these thoughts!\n\nGiven that I was still feeling under the weather today, I didn't workout which gave me lots more time today to do things like make a doctor appointments, as well as do a few clearerthinking.org quizes, and a few emails. I'm in a positive, we-can-solve-it-with-science mood now, which is definitely responsible for, or was caused by, all my discursive writing this morning.\n\nI got in about 4 hours of reading/writing here and 4 hours of miscellaneous tasks, which was less reading/writing than I planned for today but the other tasks were useful so I am happy with it. Tomorrow I only have 3 hours for reading/writing here, and also the aforementioned dentist, as well as a podcast interview, and two meetings.", "changes": [[1, 1, "_data/git-log.json"], [98, 0, "notes/bret-victor/kill-math.md"]]}, {"committer": {"date": 1512578110, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "69300686e323da506b71fdb0669900700ab04052", "parents": ["eb1f76f1b646452854e599fef5902eed502e9b27"], "commit": "ddd3d52fe01910109df4b953fa453cdbe5706826", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "65729d4ad260126f66d6c8c7eabca9921db179fd", "parents": ["ef702fe1a35cc55793233df8f8a434fd4fda0802"], "commit": "eb1f76f1b646452854e599fef5902eed502e9b27", "message": "added outline of legal code essay", "changes": [[1, 1, "_data/git-log.json"], [38, 0, "essays/legal-code.md"]]}, {"committer": {"date": 1512521198, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c07b290c016fe482824302d22c4ccfda3cbad3", "parents": ["3815caa539319d042e1dc1560a605320a3d79193"], "commit": "ef702fe1a35cc55793233df8f8a434fd4fda0802", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0d0351ba6861071e5b2b595c87363d47ce535d28", "parents": ["27727398bc5ff15ce62a9448c99910b30a68dbd0"], "commit": "3815caa539319d042e1dc1560a605320a3d79193", "message": "added link to github commit in log", "changes": [[1, 1, "_data/git-log.json"], [5, 2, "log.md"]]}, {"committer": {"date": 1512520310, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e2109dda52eaca0dbe8f7c5f8da81e12196434d", "parents": ["110a0bbcd0d88c97eef4fc099af25cda70b271bd"], "commit": "27727398bc5ff15ce62a9448c99910b30a68dbd0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c82ab2fc0df94e41257b41b5f80f3f7ba2160263", "parents": ["de367ce3279f1f1eedb69a9ef9f18fbb4e47b948"], "commit": "110a0bbcd0d88c97eef4fc099af25cda70b271bd", "message": "custom log file is looking prettier!", "changes": [[1, 1, "_data/git-log.json"], [26, 8, "log.md"]]}, {"committer": {"date": 1512513479, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "860345f42e74608e09098472a7e155ae94c29164", "parents": ["659de09c5ae5f89cbc9515826599607dcc6a0f24"], "commit": "de367ce3279f1f1eedb69a9ef9f18fbb4e47b948", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "81ff3e639fe280ac4c2d590f3208b8c243506d6b", "parents": ["7026816e859807fa1feedc13b3e90526d7bceba4"], "commit": "659de09c5ae5f89cbc9515826599607dcc6a0f24", "message": "# Bret Victor Deep Dive!\n\n## Bret Victor Folder\n\nI created an entire folder inside my notes directory. I took so many notes on just Magic Ink](/notes/magic-ink) that it seemed like a good idea to have a seperate file for each piece of his work.\n\n## Tired, and maybe sick\n\nThis was a long day! I worked for most of the last 10 hours, and most, at least 7 hours, was reading and writing about Bret's projects. I am exhausted, partially because my throat is hurting :( I've really been sick with this thing for a while now! Let me schedule a doctor's appointment now for tomorrow... Ok, I got an appointment for 4pm tomorrow.\n\n### Trust & doctors\n\nI wish I had a doctor that I trusted, from a philosophical perspective, as much as I trust my Alexander Technique teacher Rebecca. I have trouble understanding the way doctors think, diagnose and cure things -- partially because they go through so much formal training that I didn't have, whereas Alexander Technique was something that a non-medical person created simply from personal analysis.\n\n## So many of my ideas\n\nIn particular I was shocked by how many of my favorite ideas *Bret also wrote about*, including a better medium for mathmatics, including for school children, LogicHub, a wiki-like platform for understanding and argumentation with nested sources.\n\n# Custom Log\n\nI'm really really excited about the work I did on my custom log file yesterday. That was pure fun. Later in the night, I opened it up just to admire it. Hope to work on that again soon!\n\n# Tomorrow (12/6/17)\n\nShould have 5 hours to continue here with the deep dive as long as I am not feeling too sick.", "changes": [[1, 1, "_data/git-log.json"], [33, 0, "notes/bret-victor/SimulationAsAPracticalTool.md"], [64, 0, "notes/bret-victor/bret-victor.md"], [45, 0, "notes/bret-victor/explorable-explanations.md"], [25, 0, "notes/bret-victor/kill-math.md"], [185, 0, "notes/bret-victor/magic-ink.md"], [33, 0, "notes/bret-victor/substroke.md"], [23, 0, "notes/jcr-licklider.md"], [60, 0, "notes/recurse-center/applications/recurse-center-application-06-09-17.txt"], [61, 0, "notes/recurse-center/applications/recurse-center-application-12-05-17.txt"]]}, {"committer": {"date": 1512512241, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e0f892f837668fd1ff5179f867734a9dd4efcf28", "parents": ["cabbba7541685e8ff7456842b2df4ec4259e86f9"], "commit": "7026816e859807fa1feedc13b3e90526d7bceba4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a730dfd38f35ea0a7474054c438165fd607a660e", "parents": ["f1b5c1ade1bbc33d3eb02502bebc826660a745b5"], "commit": "cabbba7541685e8ff7456842b2df4ec4259e86f9", "message": "removed .gitmodules", "changes": [[0, 3, ".gitmodules"]]}, {"committer": {"date": 1512512017, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5d009e5feef4b4deed948741f8681887c99c4c9e", "parents": ["eb376545ef1a2e4689e8585ab2687bc6c8618427"], "commit": "f1b5c1ade1bbc33d3eb02502bebc826660a745b5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e547cff82c4948acd99b93af512a9a5d6ea0f1a", "parents": ["8100b1964ad04405693d2a11e489a61888d03980"], "commit": "eb376545ef1a2e4689e8585ab2687bc6c8618427", "message": "removed _site from repo", "changes": [[1, 0, ".gitignore"]]}, {"committer": {"date": 1512425248, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b3a14247d8f1f5fae0d58af8d7df33588175f3bc", "parents": ["16ff6ccd6912767bf4508ee851caa99c5d7f33ba"], "commit": "8100b1964ad04405693d2a11e489a61888d03980", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79f3582e32adbe42b07b2cadc15d8b4df71b16c5", "parents": ["6c2a8d48c32f5ce875dcba15f521edb9b23a2081"], "commit": "16ff6ccd6912767bf4508ee851caa99c5d7f33ba", "message": "jekll serve; log.html -> log.md", "changes": [[1, 1, "_data/git-log.json"], [0, 11, "log.html"], [31, 0, "log.md"]]}, {"committer": {"date": 1512423794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2b844c65de8bb48b7d6fcf6e60299fe33873ccae", "parents": ["34b79f3e1a0afb1710dc6105d7cbd638eca98480"], "commit": "6c2a8d48c32f5ce875dcba15f521edb9b23a2081", "message": "updated git log", "changes": [[1, 0, "_data/git-log.json"]]}, {"committer": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a5394e99df31213eae7baa1f3650cf297eb6f600", "parents": ["4ff652bcea901c68a76a4ef84d5aac320e78eacf"], "commit": "34b79f3e1a0afb1710dc6105d7cbd638eca98480", "message": "test _data/git-log.json", "changes": [[1, 0, "log.html"]]}, {"committer": {"date": 1512411508, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512411508, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c9a7984632468a50a52995698e98660a7199c2b5", "parents": ["67ee11f4766022056c35451eaf8fbb86dcb2845c", "3c8b6ebffccadb1c7990e1aabfe04a0d76b313ec"], "commit": "4ff652bcea901c68a76a4ef84d5aac320e78eacf", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1512411503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512411503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da4736490e1c2c794ae816a127f20cd464ad7d7c", "parents": ["269c66f1ac3eed42552f45530a5a74fec6c520a1"], "commit": "67ee11f4766022056c35451eaf8fbb86dcb2845c", "message": "added 18 research recap nine to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1512411170, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1512411170, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0f9d6eb7eb64f756ed662d46481980026a01448e", "parents": ["269c66f1ac3eed42552f45530a5a74fec6c520a1"], "commit": "3c8b6ebffccadb1c7990e1aabfe04a0d76b313ec", "message": "Added omnystudio podcast embed", "changes": [[2, 2, "episodes/18-research-recap-nine.html"]]}, {"committer": {"date": 1512408127, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512408127, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "df525ad47d49bf8a2a0d868249cbbb435f43b799", "parents": ["f5712faa898393bcbbeed4741860e1d037099306"], "commit": "269c66f1ac3eed42552f45530a5a74fec6c520a1", "message": "episode 18, research recap nine notes; also joyjs notes", "changes": [[194, 0, "episodes/18-research-recap-nine.html"], [1, 1, "log.html"], [1, 1, "notes/future-authoring.md"], [70, 0, "notes/joy-js-review.md"]]}, {"committer": {"date": 1512257354, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1512257354, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "4a8d55199df4ccd2495d92190ee1a522b53ba3e0", "parents": ["e8cd329e2030da0486aa4f863f93c8eba339c0f2"], "commit": "f5712faa898393bcbbeed4741860e1d037099306", "message": "Almost finished with future authoring\n\nUseful and somewhat fun but also basic stuff for me given how much\nreflection I already do. I really think this course would be great for\nthose who aren’t crazy journal people like me. All the same, I’m glad\nI did it for the structure and clarity. Still have 30ish minutes to go\nso will do that Monday morning :)", "changes": [[241, 107, "notes/future-authoring.md"]]}, {"committer": {"date": 1512168846, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512168846, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fd68313a0739ef14cd74c235532cae41f7aeb795", "parents": ["167d7e891e0b86242502b7582523bfb3c6e6c185"], "commit": "e8cd329e2030da0486aa4f863f93c8eba339c0f2", "message": "# Plan v5 is off to a great start\n\nI'm pumped that the table of contents Jekyll thing worked. That's really beautiful and super elegant.\n\nI think my changes in the diff for this commit speak for themselves. Really excited to come back to this next week.\n\n## Plan for next week\n\nMonday is full with the bi-weekly research summary, working out and two meeings. Calendar sculpting is included in the bi-weekly research summary time.\n\nTuesday and Weds are total open and will remain so, and until 2pm on Thursday and Friday are open as well.\n\nI guess it's mostly Bret Victor deep dive. Fun!\n\nMy first step will probably creating a list of all of his content that I want to get to and then prioritizing it. I don't want to make the mistake of starting from the first post he ever made in his oldest blog. While good for empathy, I want more of the fully-baked stuff.", "changes": [[34, 4, "plan.md"]]}, {"committer": {"date": 1512167658, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512167658, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b29cf12e878b287bedee4f40513e25b6148740b3", "parents": ["82a41954bdbdd869869bdeae4a610f5e49298aa3"], "commit": "167d7e891e0b86242502b7582523bfb3c6e6c185", "message": "# Fith version of plan\n\nVery rambly so far. Had to even siphon of a thousand words into [its own essay](/essays/invented-or-discovered). I found myself unable to figure out where my next header should go or be so I googled around for [how to auto-generate a table of contents](http://www.seanbuscay.com/blog/jekyll-toc-markdown/). The downside to this method I am trying now is that it only works after committing and pushing to Github pages, which I why I am committing this plan in mid-working session. Let's see what happens!", "changes": [[51, 0, "essays/invented-or-discoved.md"], [47, 101, "plan.md"]]}, {"committer": {"date": 1512142893, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512142893, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1d962fef0c9e68ff07ea913a86db986fd1b72f05", "parents": ["b3661b82bdfd27b57597fe3cfc8e44e3383eb8ff"], "commit": "82a41954bdbdd869869bdeae4a610f5e49298aa3", "message": "# Future Authoring, part 1\n\nI recently have fallen into a Jordan Peterson love affair, and stumbled upon [this course he created](https://selfauthoring.com/future-authoring.html), which seems quite relevant to me articulating my goals for this project. I found [a free version](https://pastebin.com/BiFE2fUX) and have [answered the first part of it in not-bold here](/notes/future-authoring) and am taking his advice to wait until a night or two of sleep before doing the second part. Let me put time on my calendar tomorrow afternoon to tackle it.\n\nIt went really well! A lot of it was personal stuff about my life, but readers of my stream-of-consciousness style in this journal are not strangers to that. It feels relevant at times to talk about my life in this journal and this is one of those times. I am a bit worried it may bite me in the butt at some point down the line but that's just fear talking. I don't have any concrete worries here.\n\n## Crusade Discovery\n\n### Well and thoroughly pickled\n\nIn particular I think I made a shockingly large amount of progress on articulating my crusade this morning. And the way I came to it is really a function of a week well sculpted. (I love this phrase, by the way, calendar sculpting. A quick google search makes it seem like I have indeed inventing this phrase. I wonder if it'll catch on.)\n\nFor example, starting my week of thinking about how communication works for my \"essay about essays\" with Nicky Case lead me to Douglas Hofstader's \"Analogy as the Core of Cognition\" which was *exactly* what I needed to read right now, as well as re-reading Seymour Papert's \"Gears of my Childhood\", also exactly what I need to read right now. (Watching Bret Victor's Inventing on Principle last week also played a big part on my thinking this week.)\n\nThen Wednesday diving even deeper into how the brain works, how people learn, why they'd want to learn to code, etc with my coggle brain mapping was amazing. Really helped me spread out my thoughts in space and get clearer about them and how they relate and build upon each other.\n\nThursday my brain was on fire reading through the Dynamicland zine the first way through. I've only made it 4 pages in the second way through and have written ~3.5k words already. I was able yesterday to really *live* in the future and imagine what it would be like, without hating or \"making wrong\" the present. I was able to bask in the possibility while also being grateful for reality. The thing about truly living in the future, while accepting the present, is that you can do it all the time, and it's only when you live with things as core components of your life that you are able to imagine the next step, how to build on top of them, how they interact together, the 3rd, 4th, and 5th level causes. I was even ambitious enough to explain to both my grandma and then my mom about my vision for the future and how it relates to tools and humans and augmentation, etc. They both got it to some degree and were excited that I was excited and I learned more for explaining these thoughts to lay people.\n\nI also had a great conversation with my buddy Jonathan Leung yesterday where he was excited for me for \"not making the present wrong\" because he noticed it was something for me to work on when we did our podcast many months ago. We thought about Elon as a crusader and what his crusade is (averting existential threats) and how that compares with Juan Benets crusade (decentralization).\n\nAdditionally, yesterday was largely inspired by *How to Measure Anything*, my new favorite book which is really going to make a scientist out of me and helped me understand the distinction of mesaurement and how it is truly what science is: reduction in uncertainty.\n\nAs the zine says (quoting someone), the idea is to immerse myself if brilliant thoughts get pickled by all these ideas, which will in turn lead me to having my own ideas.\n\n### Ariculating Crusade\n\nI think here's what's profound about the ideas I had yesterday and today:\n\n0) Tools, or technology, includes ideas, ananlogies, physical machines, virtual software. Anything that allows someone to do or think things, either at all or easier, than without the tool.\n\n1) Humans subsume our tools into ourselves, becoming what we were before plus our new tool. The result is a cohesive whole. Removing the tool reduces the human to what they were before the tool, akin to removing a person's arms.\n\n2) We know a great deal about how the mind works, how our bodies work, how emotions and happiness works, as well as what doesn't work. We can take all of this knowledge and bring it to bear on the problem of desigining proper tools for humans.\n\n*Pause!* How does this relate to programming language tools? Well programming langauges are *tools for designing tools*. Wow. Has there ever been such a tool? Ok, well writing is a tool for desigining tools. The notion of tool is a tool. Ok, so there are plenty. Programming is a tool for desigining tools *that can also desigin itself*. That's pretty neat: you can't make a pencil with a pencil. You can't make a typewritter with a typewritter. But you can make software tools with software tools.\n\nHowever it doesn't feel like *the bootstrapibility of programming languages* is why I'm so passionate about improving programming tools. Let's flip the question on its head: am I more passionate about building better tools for programming than, say, science? Or better dinner table conversations? Or more logical thinking? Nope. I'm really excited about each of those problems. Maybe the dinner table one a bit less emotionally but not that much less. The only reason I was so excited about programming tools was that 1) they were problems I had, 2) they were problems my students had, 3) I knew how to code and would have fun solving them. I'm really excited about all tools for thought and how to really embed them inside of people so that people can *be* augmented, not just be augmented.\n\nWait is that my crusade? *Be* augmented. The metaphor is that we are already the bionic man. We already have technology in our brains. We might as well optimize this software as best we can. And make the technology outside our brains optimal as well because that technology *exists inside our brains too*, just not phsyically. The metaphor for that is 1) my arm isn't \"inside my body\", but it's clearly me and 2) same goes for my clothes.\n\n## Rest of today\n\nI'm going to go workout with Sarah at a barre class now and then grab lunch. The idea this afternoon is to try my hand at another draft of my plan. I think I've got a good head on my shoulders about it this time.\n\nHowever, I think I'll probably want to come back to it after I finish the future authoring and get through my Bret Victor deep dive. Really, my plan seems like it might be done in time for the new year.", "changes": [[428, 0, "notes/future-authoring.md"]]}, {"committer": {"date": 1512075918, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512075918, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39153cce7edf3a334d0d459986625f70adcdfa97", "parents": ["9c32a183002aa904e18181a02a9c896de2eb8f65", "4e71599f55a539ff09645b3dc9220bdf5af81ee2"], "commit": "b3661b82bdfd27b57597fe3cfc8e44e3383eb8ff", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1512074943, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512074943, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39153cce7edf3a334d0d459986625f70adcdfa97", "parents": ["edc39b1e2e14641a281790e25a5833d7c3ce5cac"], "commit": "9c32a183002aa904e18181a02a9c896de2eb8f65", "message": "# Read Dynamicland Zine (& merge commit)\n\nAs you can tell by [reading my notes](/notes/dynamicland-zine.md), I was blown away by the Dynamicland zine.\n\n## Things on my mind\n\n### Markdown headers in commit messages\n\nThis is important so that I can link to content via its anchor tag. (Yes this currently doesn't work because this content is currently not rendered as in the github commits page for this repo. I will need to do that at some point soon-ish.)\n\nThis was bothering me so much that I solved it right now. It's as simple as `git commit --cleanup=verbatim` and then just deleting everything but the message. Closing https://github.com/stevekrouse/futureofcoding.org/issues/62.\n\n### Next steps\n\nIt's becomming clearer that my next steps revolve around Bret Victor and Dynamicland. At the very least I need to spend a few hours there, but I could see it being weeks, months or even a year or two.\n\nThis week I worked on:\n\n1) brainstorm \"essay about essays\"\n2) brainstorm \"learn to code\" essay\n3) read and reflect on zine\n4) reflect on goals and work on long-term plan (tomorrow)\n\nThis was a really great week. However, I'm now seeing my work on the \"learn to code\" essay as potentially premature. Or not premature, but not quite as urgent as I thought. It's not like I'm going to forget my hardwon insights from The Coding Space. While I could write something now, I am only going to learn more about these topics as time goes on. And I can always come back to teaching if I need to remember things for the essay.\n\nThe \"essay about essays\" project is also a bit random. However, if Nicky Case would collaborate with me on it, I would drop all my other projects and jump at that chance.\n\nHowever, if left to my own devices, it feels like its time for a Bret Victor deep dive, much like the Alan Kay deep dive that I did a few months back. (You can read about it in [my old journal.](/journal)) Like my Alan Kay deep dive, this one will likely also take approximately two weeks (12/04/17-12/15/17). Then I go home for three weeks (12/18/17-1/4/18) for the holidays. I might do some (no more than 20 hours) work the week of 12/18/17.\n\nThen it's time for a visit to Dynamicland! https://twitter.com/mandy3284/status/936284579333156864\n\nI'll probably go in early Jan, but it depends on when they want me I guess. I'd love to stay for a week or two and work out of the space every day, but I'd be happy to go for even a single afternoon.\n\nAll this said, while I have set aside all day tomorrow to work on my goals and my plan, I may cut that short if it doesn't feel productive to get a head start on my new priority: the Bret Victor deep dive!", "changes": [[1, 0, "index.html"], [134, 0, "notes/dynamicland-zine.md"]]}, {"committer": {"date": 1512047045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512047045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1771dd4b16f7f94958e73997b9331cd0a78c9619", "parents": ["7c025150fdfefde29750a9772080d32f4ec885b1"], "commit": "edc39b1e2e14641a281790e25a5833d7c3ce5cac", "message": "notes with aidan", "changes": [[33, 0, "notes/aidan-cunniffe-call-11-29-17.md"]]}, {"committer": {"date": 1511974112, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1511974112, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4816b9bca6941e28d7e22acba787f74d97bee118", "parents": ["7c025150fdfefde29750a9772080d32f4ec885b1"], "commit": "4e71599f55a539ff09645b3dc9220bdf5af81ee2", "message": "brainstormed essay about learning to code\n\nI continued my theme of brainstorming/mind-mapping this morning, but with a different essay and also a different medium. The essay topic is learning to code and the medium is a neat platform called coggle. In addition to being easy to use, it also is markdown-based, you can see a history of all previous edits, and it's real-time collaborative. Basically everything I'd want. You can see [my mind map here](https://coggle.it/diagram/Wh6pe8X_9wABwTVA). And here's a picture of it just in case that link doesn't work:\n\n![screenshot 2017-11-29 at 11 36 58 am](https://user-images.githubusercontent.com/2288939/33386902-082b31ba-d4fa-11e7-8aec-730f05df0e0f.png)\n\nVery productive. Really love the medium. One thing I noticed is that part of why mind-mapping software is difficult is that you have to go from abstract to concrete as opposed to being able to list arbitrary nodes and connect them later. I am currently side-stepping this problem by creating a \"TODO\" toplevel node that I can connect random stuff to until I can tell where they are going to best fit in the map.\n\nSpent 3ish hours on it this morning. It also worked great on my iPad, which was really nice. The downside is that I forgot my ergonomic iPad keyboard so I typed on it too much and now my hands hurt a bit.\n\nI am realizing that unlike Prezi, there's no notion of \"path\" to this tool, but I bet I can approximate it by creating a few different duplicates of the base map, and then in the copies, laying out the nodes in various orders. (You can put the nodes wherever you want and the relationships between then will just follow, staying connected.)\n\nI'm going to go get a workout in now, then I have a meeting with someone who wants advice on coding curriculum design with is quite relevant given what I did this morning, and then I chat with Aidan, founder of DropSource.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1511909201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511909201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b7ab86f7586b66231ded454456959a4a7cb943b5", "parents": ["10f357d435e6b65d02a599a8382dae3ed400b7b0", "901de4946ac4b58e8d32594e9f818d5674ab98df"], "commit": "7c025150fdfefde29750a9772080d32f4ec885b1", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1511909196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511909196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4816b9bca6941e28d7e22acba787f74d97bee118", "parents": ["c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2"], "commit": "10f357d435e6b65d02a599a8382dae3ed400b7b0", "message": "added episdeo 17 bubble.is emmanuel", "changes": [[87, 0, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1511903074, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1511903074, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "498f6b732502c13f25e38922f9292b3b5a2e2b3d", "parents": ["c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2"], "commit": "901de4946ac4b58e8d32594e9f818d5674ab98df", "message": "essay about essay brainstorm\n\nGiven that I don't have a title for this essay, I thought it would make more sense to create a github issue for it because those are referenced via unique ids as opposed to their changeable names. (Aside: in writing that last sentence, I realized that I could simply create a `/drafts/` directory and name each of its children elements the same way github issues does: `/drafts/001`, `/drafts/002`. When I settle on a title, I could move the content into the `/essays/` directory and reference it via its name, not its id.) However, I want this log to consist of all work I do on this project, even if it's work outside of a set of changes to files in this directory, so this messages links to my work this afternoon on the \"essay about essays\": https://github.com/stevekrouse/futureofcoding.org/issues/63#issue-277535475", "changes": [[0, 1, "index.html"]]}, {"committer": {"date": 1511884759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511884759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4e579e49d84487d32cd674eaf05766ed0405f1c", "parents": ["ddc8cd46aa2f84aa6032eb181dd091b620efa066"], "commit": "c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2", "message": "Back from sickness and vacation\n\nThe past two weeks didn't go as planned. If you're following this journal, you'll notice that I haven't made any entires or commits for two weeks. This was mostly because I was still(!) feeling sick. Finally I was diagnosed with strep throat, and am feeling a lot better today. Tomorrow is my last dose of antibiotics so hopefully I'll get back to running tomorrow or the day after.\n\nNote: [the entry prior to this one](https://github.com/stevekrouse/futureofcoding.org/commit/8274ccb120bb3781402aed0a9e1d99242b95a479) is fairly defeated in tone. This is because (1) I was unexpectedly starting to feel sick (again) and didn't want to believe it, and (2) I was trying to get too much done in the time allotted. A recipe for defeatedness. I'm feeling much better about things now. Plenty of things to do but one step at a time. Plenty of time to address them all. Most important ones first.\n\nDespite what it says in my plan at the moment, my next step will not be creating a Patreon. This is because (1) the value accrued from having a Patreon up before creating my content probably isn't that high (look at how Vi Hart raised $6k in just a few days on her reputation), (2) it takes a while to get a strong following on a Patreon so the money wouldn't mean much, (3) it's a distraction from focusing on the work the will actually help move me forward at this juncture (planning, reading, writing).\n\nI'm very excited about a potential upcomming collaboration with Nicky Case. On our phone call a few weeks back, I asked him for advice on writing essays and he outline his thoughts in what will hopefully be an essay he and I collab on. That sounds like a lot of fun! It would be great to have a small win under my belt. Despite it likely not being the absolute highest priority right now, it's in the right direction. In other words, even though my Work Plan isn't quite done, I still have a pretty strong feeling that this small detour would move me closer to accomplishing it. As I told Nicky, I have ~20 hours this week to work on the essay. But really there's no rush. I can work on other things this week and come back to that next week.\n\nAnother thing on my mind is the unbreakable-links project. This project has taken much longer than expected. Just another opportunity for me to improve my currently highly inaccurate planning skills. The short-term solution is quite reasonable: whenever I want to move or delete a file in this directory, I simply have to think through what will happen to all prior links to that page. I do this well with the now deprecated /journal page.\n\nOk, so now let me think about my priorities:\n\n* Write 3 different outlines for the \"essay about essays\" to send to Nicky Case\n* Publish the now-very-late podcast with Emmanuel from bubble\n* Spend time writing about my goals for this project\n* Deep dive on Bret, read the Zine, send him an email\n* Write 3 outlines about learning/teaching to code (and learning in general)\n* Continue writing FoC plan\n* Schedule meetings with key people (Aidan, Stefan, Samuel)\n* Migrate other blogs from Trello (including AT essay outline)\n* Reach out to guest or two for next week on the podcast\n\nOk, these are all top priorities that need to happen in the next week or so. The order I do them in doesn't matter much. Let's go ahead and put them on my calendar in blocks, so I can visualize what I can get done and move them around as needed.\n\nThis is what it looks like now:\n\n![screenshot 2017-11-28 at 10 52 36 am](https://user-images.githubusercontent.com/2288939/33329341-51f477f0-d42a-11e7-9091-4d6d3a72a3ff.png)\n\nI'm feeling happy and aligned with this. I am now noticing that this would be in contradiction with what I told Casey, that I have ~20 hours for this project. Depending on how our conversation goes, I can always bump one of these blocks to next week no problem and manufacture 20 hours here. However this is the plan if he doesn't want to work on this this week.\n\nYou may have noticed that I'm more structured today than usual. This is (1) because I have not been regular about my entries the past few weeks and am feeling a bit adrift, and (2) I fell into a Jordan Peterson YouTube hole last night and he says some pretty straightforward things about happiness, including that you need structure. The first question he asks someone who's depressed is, \"do you have a job?\" If the answer is no, then his answer is get one, even if it's not perfect. It will set you up for success. So while I don't want to follow the letter of his advice, I do want to add a little more structure to my life to stave off any kind of emotional turmoil from working alone and jobless.", "changes": [[1, 1, "plan.md"], [2, 0, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510614499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "71db4d50bad3abfeb7f75b057f16106a90e2dccb", "parents": ["4bc7bc623ab7a36942aaba224a906eacf5aaa49c"], "commit": "ddc8cd46aa2f84aa6032eb181dd091b620efa066", "message": "Why is my plan so ugly?\n\nI was hoping to publish my work plan by the end of day today but I don't like it. My thoughts are all over the place. I don't like the summary of steps at the end. It needs more work than I can do right now. Let's not rush.\n\nAs crazy as it sounds, I think I want to create a new work plan from scratch yet again. Hopefully it will be the last time. In particular I want to think through the steps of the plan and the timeline.\n\nI'll also be working on the content for my Patreon in the next few days. I expect that to launch in the next few weeks.\n\nFinally, I am starting to rethink the homepage design. Maybe I'll add some photos. Maybe I'll feature certain content. I could think about the \"user flow\" as opposed to simply listing all content by date.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1510614433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ad171474165c0672a33bb4046836c72ca12055a1", "parents": ["f01ac82f0d9a4b1f4737a4898e9d52f9af155e26"], "commit": "4bc7bc623ab7a36942aaba224a906eacf5aaa49c", "message": "simplified plan a bit, workshopped steps in summary", "changes": [[9, 11, "plan.md"]]}, {"committer": {"date": 1510614400, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614400, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c47663b5453b6152010f6f8dad1b3a33666d671", "parents": ["e7b1554e7fb445ecc59ce0763425ba6c45ef5c80"], "commit": "f01ac82f0d9a4b1f4737a4898e9d52f9af155e26", "message": "updated homepage text", "changes": [[3, 3, "index.html"]]}, {"committer": {"date": 1510612584, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510612584, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "81f053101a1aedcc144c0dc3d71c6bd50f77aa67", "parents": ["fd033c0fa0046e7840435199538f728a0abf9dc1"], "commit": "e7b1554e7fb445ecc59ce0763425ba6c45ef5c80", "message": "edited plan, refactored out principles to own file", "changes": [[33, 117, "plan.md"], [63, 1, "principles.md"]]}, {"committer": {"date": 1510362157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510362157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "be0bc3e48825268c45f09f1cca7013fc57ea2422", "parents": ["d5492388bcd2139280dfd1d6feb13acef64b2b96"], "commit": "fd033c0fa0046e7840435199538f728a0abf9dc1", "message": "rest of nicky case notes", "changes": [[26, 2, "notes/nicky-case-call-11-1-17.md"]]}, {"committer": {"date": 1510360672, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510360672, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1da8849e8cf094e008bbf8132f5c75af6e214b9", "parents": ["b07bd388f11e87e2fa8309b982501167edabb72b"], "commit": "d5492388bcd2139280dfd1d6feb13acef64b2b96", "message": "added notes nicky", "changes": [[91, 0, "notes/nicky-case-call-11-1-17.md"]]}, {"committer": {"date": 1510350681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "23942bb57adbacc8c14b140df306e3b30b06e4db", "parents": ["450731af5170267fe7cd19718809a04ba17b527a"], "commit": "b07bd388f11e87e2fa8309b982501167edabb72b", "message": "fixed heading names and levels", "changes": [[2, 2, "plan.md"]]}, {"committer": {"date": 1510350578, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350578, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ca9cc6e749bb654c2aebf72295c3d137e86b7b5f", "parents": ["a0c8787fd9c798bf8e6e6a331df569ca8a6da491"], "commit": "450731af5170267fe7cd19718809a04ba17b527a", "message": "fixes formatting with elon plan", "changes": [[3, 0, "plan.md"]]}, {"committer": {"date": 1510350435, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350435, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b50713e8ffefcd578f6da13f1536758a5a0820d", "parents": ["156ccaebf2b0c456f32bd921d515e8346b927509", "1db7c38a542b241e95453d4164795bb3eea82939"], "commit": "a0c8787fd9c798bf8e6e6a331df569ca8a6da491", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1510350059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "12e199fdac3caacf994a6089c3e3dc455944d9f5", "parents": ["f87424ddb968181c85ff2769038d33604b0a2bca"], "commit": "156ccaebf2b0c456f32bd921d515e8346b927509", "message": "Done (for now) with plan (I think)\n\nI know the title of this commit doesn't inspire confidence but I think this plan is in a good place. Good enough for me to move on to step 1 of it at least. I'm sure I'll be back here, rethinking things soon enough.\n\n* It feels like every time I come back to working on this plan, I delete everything and start over again. That's not neccesarily a bad thing.\n\n* It's such a bummer to me that I have to write these journal thoughts somewhere random and then copy and paste them into the commit message at the end of my work even though I'm now writing them before I get started. Why can't the commit have a home before you finish the commit?! (Brainflash! I should've just commited the above thoughts to the repo without any changes this morning!)\n\n* Version control is definitely a topic I want to think about more. Really \"version control\" isn't the write word for it. It's more \"iterating on software\" or \"the software workflow\". Managing versions of software is a different problem. The elements of change guy is really the only one I know who's really thinking about this in a thoughtful way.\n\n* I'm not sure where my fustration with this plan is coming from: 1) my lack of progress on it the last few weeks because of my sickness and taking too many meetings, or 2) not having enough data to make a good decision here.", "changes": [[187, 201, "plan.md"]]}, {"committer": {"date": 1510265094, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1510265094, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "13e71a2ec706e71b6ba2b3e3d96b19f34788b6ed", "parents": ["f87424ddb968181c85ff2769038d33604b0a2bca"], "commit": "1db7c38a542b241e95453d4164795bb3eea82939", "message": "fixed comment", "changes": [[2, 2, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510236314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510236314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f1e0d54051e18ec20aa6650fbaa0996d24dd75b1", "parents": ["28dce347e9229fa35001a1a8080b12dcdc1f9b70"], "commit": "f87424ddb968181c85ff2769038d33604b0a2bca", "message": "continued working on plan, outline, goals, why", "changes": [[231, 135, "plan.md"]]}, {"committer": {"date": 1510236291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510236291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f852842e5c3556c17c9cdbe7a2f2ffff9417f6b9", "parents": ["cfd9d3294bd50e528c765c64f0ed1f9647be5ff7"], "commit": "28dce347e9229fa35001a1a8080b12dcdc1f9b70", "message": "added console logs to unbreakable-links", "changes": [[4, 2, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192284, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192284, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f49ad62c56d2c81b7478157c312042ba7b33ff8", "parents": ["0ed4b75012d6096616f817809f3fd652b81d2e72"], "commit": "cfd9d3294bd50e528c765c64f0ed1f9647be5ff7", "message": "removed extra slash in rawGitLink", "changes": [[1, 1, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0812f991a3247ff127d16fdcb553a783eb6b20e2", "parents": ["20466a6b954078a6d5f9a022a146f584bb6b29f8"], "commit": "0ed4b75012d6096616f817809f3fd652b81d2e72", "message": "added unbreakable-links as non-repo", "changes": [[43, 0, "unbreakable-links/README.md"], [182, 0, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192203, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192203, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc2b9252940e907b7f1a69dcce1a2a2cc64491ba", "parents": ["33fb63a15272ba275159f6ea7d5fad73e769d4d4"], "commit": "20466a6b954078a6d5f9a022a146f584bb6b29f8", "message": "removed unbreakable-links repo", "changes": [[0, 1, "unbreakable-links"]]}, {"committer": {"date": 1510191940, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191940, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "02e0602685bb5c71e8f7ddd9db2ebf5aab5efb73", "parents": ["907a770fa718d4a427b004de626b84d7136d2338"], "commit": "33fb63a15272ba275159f6ea7d5fad73e769d4d4", "message": "added unbreakable-links repo inside futureofcoding.org", "changes": [[1, 1, "404.html"], [1, 1, "README.md"], [1, 1, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "ideas.md"], [1, 1, "index.html"], [1, 1, "journal.md"], [1, 1, "links.md"], [1, 1, "log.html"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"], [1, 0, "unbreakable-links"]]}, {"committer": {"date": 1510191647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a2ddc613b0d757865dcc063698af054a43b33b2", "parents": ["c8575bdededdfa8c002aaedfb673cda219b6aa69"], "commit": "907a770fa718d4a427b004de626b84d7136d2338", "message": "update unbreakable-links", "changes": [[1, 1, "404.html"], [1, 1, "README.md"], [1, 1, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "ideas.md"], [1, 1, "index.html"], [1, 1, "journal.md"], [1, 1, "links.md"], [1, 1, "log.html"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1510191053, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191053, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a152934795d857eec9035c211775267aee621372", "parents": ["dd3cce6ec160fdb5bed4c5b0277f1b07a6af8470", "396a87c9e52755cf661539af8df7c275bc2887b3"], "commit": "c8575bdededdfa8c002aaedfb673cda219b6aa69", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1510191047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f24af8e67d18de1367e05e31b60e4775631c2a1f", "parents": ["8faf11d570d5d716fba086fb52c7da19abcbd57d"], "commit": "dd3cce6ec160fdb5bed4c5b0277f1b07a6af8470", "message": "added unbreakable-links, simply ?version=", "changes": [[1, 0, "404.html"], [3, 1, "README.md"], [1, 0, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 0, "episodes/14-research-recap-seven-master-planning.html"], [1, 0, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 0, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 0, "ideas.md"], [1, 1, "index.html"], [2, 1, "journal.md"], [1, 0, "links.md"], [1, 0, "log.html"], [14, 0, "notes/aaron-kent-call-9-15-17.md"], [14, 1, "notes/andre-staltz-call-10-9-17.md"], [14, 0, "notes/andre-staltz-call-9-11-17.md"], [2, 1, "notes/dan-scanlon-call-9-5-17.md"], [2, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 0, "plan.md"], [2, 1, "principles.md"], [0, 1, "prototypes/github-embed-footer"], [1, 0, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1510064943, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1510064943, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ee32cc6c376fde14bf2daa83eac972ed5b02ab3c", "parents": ["8faf11d570d5d716fba086fb52c7da19abcbd57d"], "commit": "396a87c9e52755cf661539af8df7c275bc2887b3", "message": "Plan for week 11/7/17\n\nI was planning to spend all of today on my Plan, but I was given a list-minute invitation to a conference that seems like a good opportunity for me so I'm doing that instead.\n\nTomorrow, Wednesday, Nov 8th, I have meetings and other things all day so I won't post here probably.\n\nThursday in the morning I will be here to work on my Plan. In the afternoon I will be meeting with Paul Chuisano of Unison, Lloyd Tabb of Looker, and Emmanuel Straschnov of Bubble.is -- what a lineup!\n\nFriday *all day no matter what* will be reserved for my Plan! I'll also speak with Nicky Case at some point during the day on Friday which will be amazing.\n\nGenerally next week is mostly free for work on my Plan it is my intention to keep it that was as much as possible. NO MORE MEETINGS. NO EXCUSES.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1509991068, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509991068, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b2cf2a51cee49d6b7e8b365112a6a1ff22ee766c", "parents": ["1fa1f9a1271ed349756895056b4e0f67be397375"], "commit": "8faf11d570d5d716fba086fb52c7da19abcbd57d", "message": "Update episode 16 date", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1509990880, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509990880, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "38e59e7f086ab470f4d180699a230cdeb5903aed", "parents": ["94a8c0eaa3bf68e5585f8e35d9cc170fd12a84d1"], "commit": "1fa1f9a1271ed349756895056b4e0f67be397375", "message": "Added omnycast embed", "changes": [[1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"]]}, {"committer": {"date": 1509974389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c3b5ce25f9c6f9352b1161e8156a5aa9435bf361", "parents": ["1767d80bf19dc8e73a8b4fc43b6b49a4b0941420", "c9357da92284c501906eb64ec3e076845542dd4c"], "commit": "94a8c0eaa3bf68e5585f8e35d9cc170fd12a84d1", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1509974384, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974384, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "01a67431a36b3e7d5320c5b7916d32a9803c62c3", "parents": ["4a47728ae82754e62dca5d7e3d522f024e6e3639"], "commit": "1767d80bf19dc8e73a8b4fc43b6b49a4b0941420", "message": "added 16 research recap eight notes", "changes": [[184, 0, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1509974364, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974364, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c642b2b9b442f4fa3ff1b0123e51a84ed27aed", "parents": ["4e5f04eaf871dc63c8e1a93634254e3077348fdb"], "commit": "4a47728ae82754e62dca5d7e3d522f024e6e3639", "message": "fixed typo with 14 research recap seven", "changes": [[152, 0, "episodes/14-research-recap-seven-master-planning.html"], [0, 152, "episodes/14-research-recap-six-master-planning.html"], [1, 1, "index.html"]]}, {"committer": {"date": 1509751200, "timezone": "-0400", "name": "steveykrouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1509751200, "timezone": "-0400", "name": "steveykrouse", "email": "steveykrouse@gmail.com"}, "tree": "a90505c06c56b8bcff043f6db70c49277593b5b2", "parents": ["8090ac51b758cce4ecb9393734f77fbb56f5734f"], "commit": "c9357da92284c501906eb64ec3e076845542dd4c", "message": "Created new outline for Future of Coding Plan\n\nDon't have time now to explain. It's a mess in there. It begins with the things I need to do next on this project. Then it's an outline. Hope to clean it up soon!", "changes": [[179, 214, "plan.md"]]}, {"committer": {"date": 1509378954, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509378954, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c24fa648e5af641c77c73a264355b58f04db64f4", "parents": ["e533b31f0b395cfb2f982e05bc3df3c030534b03"], "commit": "8090ac51b758cce4ecb9393734f77fbb56f5734f", "message": "Started new version of the Future of Coding Plan\n\n## Future of Coding Plan progress\n\nI’m really excited about the direction this version of the plan is taking! There are still a lot of thinking and analysis that needs to happen here, as well as organizing my thoughts, combining them with /about.html, and also doing a bit more research on this topic, and getting feedback on this plan from friends and experts. In particular I am really excited to continue reading Doug Engelbart’s Paper on Augmenting Human Intelligence and seeing the demo — I think that will help me with this plan and also my world plan which I had trouble working on last week, partially because I was sick and partially because it’s probably part-three of my planning series, instead of part-two. This future of coding plan is probably part two. I know this because I was stuck on my World Plan at the Future of Coding section, where if I finish this one first, I can just link to it there in my World Plan. As far as the other sections of my plan... we’ll see what I come up with.\n\n## Still Sick\n\nI have been taking a while to kick this cold. I feel bad about missing my first week of the podcast last week. It looks like I’ll also be missing this week’s interview because I didn’t do that last week either. Instead of making myself crazy and trying to rush it all in, while at the same time catching up on the last two weeks, and continuing to get better, I’m going to give myself a pass and take this week off from the podcast as well. If any of my listeners out there are worried or wondering where I am and have a suggestion for a better way for me to communicate that I’m taking weeks off, please let me know. I guess I could release a dummy 2-minute podcast episode just saying that I’m sick and won’t be on this week but that feels strange.\n\n## Newfound patience\n\nA number of factors have conspired together to lend me much more patience towards this project — and others in my life — than I had before. There were two main factors that were causing my impatience:\n\n1) when your self-defined job-description is “creating the future” of something, you have to imagine what the future could hold in store, and then bring it back for all of us in the present. However inherent in this is noticing all of the ways the present is lacking and how much we could all benefit from these future benefits now now NOW!\n\n2) I have all sorts of hangups around being a wunderkind. In fact at my last job, that was a nickname they had for me. Now that I’m noticing this pressure, I’m able to have it affect me less.\n\n3) The ideal perspective on changing the world would be wanting the outcome to happen, and truly not caring who accomplishes it or gets the credit. Not only to I want to hold myself to this standard in practice, but deep in my bones I want to be happy when a friend shows me a “competitors” product, not scared or anxious as I feel now. In fact, I want to see all people as collaborators in our shared project of making the world a better place. This is an important emotional reaction to recognize and try to shift. I think it’s similar to the project of overcoming jealousy that I began to undertake as it relates to romantic relationships after reading “Sex at Dawn” which taught me about how romantic jealousy isn’t as natural or positive as I was lead to believe growing up.\n\nCombined with my new love of Essentialism and focus, this newfound patience is giving me better perspective, particularly around the planning fallacy. Instead of assuming things will happen magically in nights and weekends, I now see that I need to allocate the appropriate amount of time for things that are important to me, such as wrapping up my work at The Coding Space and on WoofJS with a neat bow on top, as well as planning my next steps for this project. Instead of thinking I could squeeze these things in in the next few weeks, I am now content for them to take me months or even the next full year.", "changes": [[233, 0, "plan.md"]]}, {"committer": {"date": 1509031277, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509031277, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "17e7b9d52cb56d82997ddf162bc6e1facd37873f", "parents": ["2b21ab29251d10602e4abea6232b8474235f6240"], "commit": "e533b31f0b395cfb2f982e05bc3df3c030534b03", "message": "add slack group invite", "changes": [[7, 1, "index.html"]]}, {"committer": {"date": 1509030647, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509030647, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ed3d0c57f45fa06a77d5601d73f5c4eff0406332", "parents": ["400dcee5064a95264982615a1222fc0686cd4136"], "commit": "2b21ab29251d10602e4abea6232b8474235f6240", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1509030219, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509030219, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b20460c9aebe67fbc538b447b8d013aa843848c6", "parents": ["79518c546497bcb565fb72e92bf531a9c474e9d6"], "commit": "400dcee5064a95264982615a1222fc0686cd4136", "message": "more links from glench", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1509029297, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509029297, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1a9c109352e4b83a5a92f0d6c3aa93b38e442ab8", "parents": ["b882bf061a360082134b3b53f24dee4cffb3c3f3"], "commit": "79518c546497bcb565fb72e92bf531a9c474e9d6", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1509028473, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509028473, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d3071cbae933ba4f8e4ed90ddff27c7e8e6466e8", "parents": ["1612a59ec5b026b0a39442a27302981ae39a49c8"], "commit": "b882bf061a360082134b3b53f24dee4cffb3c3f3", "message": "links from emmanuel schnazer", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1508953160, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508953160, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e13e1de47e0ecdb948d40e191b8e99ffdd753a32", "parents": ["32007660a94ba778b36115df3e559fac170f9a80"], "commit": "1612a59ec5b026b0a39442a27302981ae39a49c8", "message": "links from omar rizwan", "changes": [[13, 0, "links.md"]]}, {"committer": {"date": 1508863470, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508863470, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c2dfc126b5586f1cdf84b8515c3af17f0e642e49", "parents": ["b5b01b56685c127991f0db40997d12b139f0c716"], "commit": "32007660a94ba778b36115df3e559fac170f9a80", "message": "recovering from a sore throat\n\nI came down with a sore throat this weekend, which was pretty bad yesterday and mostly better today. Yesterday I was planning to do my research recap, meet with Yair from Lamdu and record an episode with him, and go to the Future of Programming meeting. Unfortunately, I was able to do none of that, but I did find the energy to work on https://github.com/stevekrouse/unbreakable-links which is both important to work on and a very fun project for me.\n\nToday I'm feeling a lot better, but I still don't want to push myself, especially because I want to conserve my energy for the MoMath fundraiser that I was invited to by Pete Muller when I bumped into him at Springsteen on Broadway and he heard that I'm a Mitch Resnick fan, and that he'll be there tonight! I'll have to make sure to finish his book in the next few hours...\n\nAs far as my main focus, my #1 priority these days is my Planning Series, which starts with \"Life Plan\", then \"World Plan\", and finally \"Future of Coding Plan\". The first two will live on stevekrouse.com and the third will live here, probably on futureofocoding.org/about or futureofcoding.org/plan.\n\n### Just Plans\n\nAs you may notice, I have decided to stop referring to these plans as \"master plans\" for a few reasons: 1) \"master\" is a word with strange slavery connotations (it also makes me uncomfortable to have \"master\" branches in git but one problem at a time), and 2) it makes me feel less egotistical to have \"plans\" as opposed to \"master plans.\"", "changes": [[0, 1, "log.html"]]}, {"committer": {"date": 1508425262, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425262, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "89668065cd30dc68262f9078821c1ccb3424435f", "parents": ["8ab8877ec56965901c690932cc214f9756af6755"], "commit": "b5b01b56685c127991f0db40997d12b139f0c716", "message": "where I've been\n\nOver the last few days, I haven't been pushing nearly as much to this as I used to for two reasons:\n\n1. I am working on unbreakable-links which will allow me to more freely edit the structure of the site, which is key because I need to change it.\n\n2. I am master planning. You can read my life master plan here https://docs.google.com/document/d/1tycCeK3FbOVqiz6xcePqr1iE0QTfsqpEgn4XUsXfuRM/edit", "changes": [[1, 0, "log.html"]]}, {"committer": {"date": 1508425164, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425164, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c2dfc126b5586f1cdf84b8515c3af17f0e642e49", "parents": ["d6f8951ec824b3c2835f35c5b9e661d9a628155b"], "commit": "8ab8877ec56965901c690932cc214f9756af6755", "message": "Create log.html", "changes": [[9, 0, "log.html"]]}, {"committer": {"date": 1508425063, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425063, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e8a668dc762bef223c51f029866fca2959f8ffe4", "parents": ["3d17f10c8b4a0cc457be40f0462cfb57593e5038"], "commit": "d6f8951ec824b3c2835f35c5b9e661d9a628155b", "message": "this journal is officially deprecated -> /log", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1508421096, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508421096, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f76442aaae01fdcaa668ea09c9a0693cc2e8518f", "parents": ["4e5f04eaf871dc63c8e1a93634254e3077348fdb"], "commit": "3d17f10c8b4a0cc457be40f0462cfb57593e5038", "message": "Update links.md", "changes": [[19, 1, "links.md"]]}, {"committer": {"date": 1508274114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1508274114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1c41d937996106403073a9d4bd1669d340a48c53", "parents": ["ed3c55f65bc94654499ffd33c3650722cba6d58e", "793fef9f1fe23c820c98c6ed9af4195764448f40"], "commit": "4e5f04eaf871dc63c8e1a93634254e3077348fdb", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1508274090, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1508274090, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "74b50e49285e7f879aaee0a04f36615a09c67e67", "parents": ["1a9b47ce0b6dfaafa993870f343d8f43df417bed"], "commit": "ed3c55f65bc94654499ffd33c3650722cba6d58e", "message": "added 15 interview with scott mueller", "changes": [[90, 0, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1508255997, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508255997, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d41f732391bb57eba285014bd4b3fd3227db606c", "parents": ["4335744ea1022870a7b391845410a1929bfb03be"], "commit": "793fef9f1fe23c820c98c6ed9af4195764448f40", "message": "Update links.md", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1508251854, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508251854, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "53612b078c76fffe8bc1f2a9c6d1a44baaa65a0b", "parents": ["b8026c26bc95651e3cb625cc9c7a0783dd589f9d"], "commit": "4335744ea1022870a7b391845410a1929bfb03be", "message": "Working on my life master plan...\n\nI feel bad for neglecting this site for the past few days. I've been working hard on my master plan for my life and I'll be back here shortly to continue working on my master plan for this project!", "changes": [[2, 1, "about.md"]]}, {"committer": {"date": 1508251162, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508251162, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ccd292b742ba246f551cdd508c6c9a09a14e9e40", "parents": ["343e9703c7b009ce7beb0ae57d4b827e45a298e8"], "commit": "b8026c26bc95651e3cb625cc9c7a0783dd589f9d", "message": "Update links.md", "changes": [[7, 0, "links.md"]]}, {"committer": {"date": 1508248862, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508248862, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1cf43afb879a4f08521a869a7c66f0b8dfada65f", "parents": ["1a9b47ce0b6dfaafa993870f343d8f43df417bed"], "commit": "343e9703c7b009ce7beb0ae57d4b827e45a298e8", "message": "links from glen chiacchieri", "changes": [[9, 2, "links.md"]]}, {"committer": {"date": 1507574614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507574614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2456bc8bdb13503301429cc7c2ded8a825df6b80", "parents": ["6d57e56f4a7c6eceba6ba109122fd203afc4fe74"], "commit": "1a9b47ce0b6dfaafa993870f343d8f43df417bed", "message": "added link to embed podcast for episode 14 research recap seven", "changes": [[1, 1, "episodes/14-research-recap-six-master-planning.html"]]}, {"committer": {"date": 1507561834, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507561834, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d08fae6283dace3047af828fa1fcc6130c3d9455", "parents": ["1c18aa8db46efb74679c80c23886d890baa7ed3b"], "commit": "6d57e56f4a7c6eceba6ba109122fd203afc4fe74", "message": "added to index.html and switched id to name attribute to make anchor tags work", "changes": [[19, 18, "episodes/14-research-recap-six-master-planning.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1507561360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507561360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "84e47cee8913e8094eb828af6f74b1e3b7bec73a", "parents": ["2e39f9a323775dbe08b9702866a2ace6db8a1451"], "commit": "1c18aa8db46efb74679c80c23886d890baa7ed3b", "message": "added episode 14 research recap seven without omnycast link", "changes": [[151, 0, "episodes/14-research-recap-six-master-planning.html"]]}, {"committer": {"date": 1507558423, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507558423, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c460ee5d4924e672735eeb8a3217d2f422fc67bf", "parents": ["16321d65a0381b78a1aa049d4666aadac9db8319"], "commit": "2e39f9a323775dbe08b9702866a2ace6db8a1451", "message": "added andre staltz call 10-9-17", "changes": [[232, 0, "notes/andre-staltz-call-10-9-17.md"]]}, {"committer": {"date": 1507307045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507307045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c170b14192d864020593446dae6a9ac2717e18", "parents": ["915b40a2d6de7337f6f9a224118d60c042dbe804"], "commit": "16321d65a0381b78a1aa049d4666aadac9db8319", "message": "Continued developing master plan\n\nI've been making a lot of progress in the past few days, thinking about this project at a high level. I made a lot of progress in the shower this morning:\n\n![image](https://user-images.githubusercontent.com/2288939/31288236-13809c5e-aa92-11e7-8ba7-7dadee620891.png)\n\nThere are a few next steps:\n\n1. Articulate my prototype ideas for StreamSheets, Scratch or WoofJS FRP (and come up with a name for this), generic GUI for langauges, and more if I have them.\n\nhttps://github.com/stevekrouse/futureofcoding.org/issues/54\nhttps://github.com/stevekrouse/futureofcoding.org/issues/55\n\n2. Spell out my design principles.\n\nhttps://github.com/stevekrouse/futureofcoding.org/issues/9\n\n3. Send my master plan around to friends.\n\n4. Consider the future organization of the website and if now's a good time to go for it. https://github.com/stevekrouse/futureofcoding.org/issues/53", "changes": [[75, 40, "about.md"], [1, 1, "ideas.md"], [19, 0, "principles.md"], [0, 19, "thesis.md"]]}, {"committer": {"date": 1507292452, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507292452, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "446069bac45860fdeb2dbf71f874b4a1f4a7e9cc", "parents": ["b6e0e47ac0fb3b1bb0555270438ca0235eff4bb3"], "commit": "915b40a2d6de7337f6f9a224118d60c042dbe804", "message": "testing to see what long commit messages look like\n\nCan you see this message?\n\nHow about [this link](http://futureofcoding.org)?\n\n# How about this header?", "changes": []}, {"committer": {"date": 1507209851, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507209851, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "446069bac45860fdeb2dbf71f874b4a1f4a7e9cc", "parents": ["b5cf6d2d524a94e0e08f5dd9b6e7c37f0c4a4369"], "commit": "b6e0e47ac0fb3b1bb0555270438ca0235eff4bb3", "message": "journal death knoll and streamsheets write up", "changes": [[14, 0, "journal.md"]]}, {"committer": {"date": 1507207405, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507207405, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d81876d33a73c9f4e6df6488ad5b7c0f005bcea3", "parents": ["51f4a7a85eba79d9b31ec0281db9dc792e9f581e"], "commit": "b5cf6d2d524a94e0e08f5dd9b6e7c37f0c4a4369", "message": "added petri nets", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1507134430, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507134430, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1d5c3de320240927bf73edf6d420a47f7dfb2544", "parents": ["cc0f4b85157657f02e8da17ba9c3c19bb3333d80"], "commit": "51f4a7a85eba79d9b31ec0281db9dc792e9f581e", "message": "added children programming languages paper", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1507053916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507053916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cc98c9e8e78a0d11b104ebcda198828b07d4bf9c", "parents": ["babbf695b718c41eb7aba3bd2f33708dcf0938fd"], "commit": "cc0f4b85157657f02e8da17ba9c3c19bb3333d80", "message": "lowered header predecede of structural editor subheadings", "changes": [[6, 6, "journal.md"]]}, {"committer": {"date": 1507053844, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507053844, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4fbcdf25acc88e1e39be7cf259d33a74a51d4961", "parents": ["f25ab2fbd97b8da93495d0700aeed53497f7da36"], "commit": "babbf695b718c41eb7aba3bd2f33708dcf0938fd", "message": "structured editing write up", "changes": [[74, 2, "journal.md"], [1, 0, "links.md"], [1126, 0, "notes/niko-autio-microeditor.html"]]}, {"committer": {"date": 1507037911, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507037911, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bb4dfb44103198cd448b8430cc221c3fda554ea1", "parents": ["33b5a65c408c871c930846ddcfafd4cdf9baf70f", "008d0c2d880ec5ef23068db76f9738ec8fcc8e94"], "commit": "f25ab2fbd97b8da93495d0700aeed53497f7da36", "message": "Merge pull request #48 from stevekrouse/episode-13\n\nadded episode 13, waiting for lauch date", "changes": []}, {"committer": {"date": 1507037902, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507037902, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "73ca0e1da3b72872b3de3d1983ae9da63f57406c", "parents": ["453f2bd02372e5d0a83a1305503dead2bdb2cea4"], "commit": "008d0c2d880ec5ef23068db76f9738ec8fcc8e94", "message": "added omnyfocus embed link", "changes": [[1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"]]}, {"committer": {"date": 1506986472, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506986472, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "382c89f259e4dfb1c3c69669c81a7eed94f668ff", "parents": ["06113ec98d94d6da98761e4220a7bb8310f672dd"], "commit": "33b5a65c408c871c930846ddcfafd4cdf9baf70f", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506961454, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506961454, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6bbf79229025277f227b4419c4bc7bbb11e44567", "parents": ["d14b429066043a59c3939956d672389dbf6fcf1e"], "commit": "06113ec98d94d6da98761e4220a7bb8310f672dd", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506952183, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506952183, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b917ae14d4a36bc013ad0493b367c3f3ddbb59f6", "parents": ["8663e9c14ef014b58aabb65a886f60b7fad82c45"], "commit": "d14b429066043a59c3939956d672389dbf6fcf1e", "message": "elm flappy, andre and nick, juan benet master plan", "changes": [[60, 1, "journal.md"]]}, {"committer": {"date": 1506942662, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506942662, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d97e1d79f71a5a920d3292ef105db9498f24573c", "parents": ["d23405ab51b4e01478a5d52913143be1c4eddcb4"], "commit": "8663e9c14ef014b58aabb65a886f60b7fad82c45", "message": "For -> 4 typo", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1506787197, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506787197, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8bbda671d4075a2340d76ca7ed1db3a1a2f53c46", "parents": ["5bafc3c6095dadcc9acfa8b0dd76f28988d6671a"], "commit": "d23405ab51b4e01478a5d52913143be1c4eddcb4", "message": "started about and thesis", "changes": [[151, 0, "about.md"], [2, 1, "index.html"], [19, 0, "thesis.md"]]}, {"committer": {"date": 1506779504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506779504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a38a2e7907bad203a5c4c9cddd9a321a1849a52", "parents": ["5b4673ab621cc3bd485e3a9e53d67aa2090aecb1", "098a7f66a1066f25149342630fbb0bc0f6ec4151"], "commit": "5bafc3c6095dadcc9acfa8b0dd76f28988d6671a", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1506779499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506779499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9b2cb7cc6531b44e9aa62437978fb500b088528", "parents": ["ffa8b9769aa090b0e248a3f868699a75350110fc"], "commit": "5b4673ab621cc3bd485e3a9e53d67aa2090aecb1", "message": "addedl linq", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506711945, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506711945, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "09365822356a81eabbad90b4b685f3a40ac70577", "parents": ["9e788a4a54112430c714e091ed0fdcd838013914"], "commit": "098a7f66a1066f25149342630fbb0bc0f6ec4151", "message": "links from @curious_reader", "changes": [[12, 0, "links.md"]]}, {"committer": {"date": 1506701600, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506701600, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "de13e05389881d2ada5014d62c107cc99bfaed40", "parents": ["ffa8b9769aa090b0e248a3f868699a75350110fc"], "commit": "9e788a4a54112430c714e091ed0fdcd838013914", "message": "fun conversations and elm flappy started", "changes": [[20, 0, "journal.md"]]}, {"committer": {"date": 1506692783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506692783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7f835fbdcd6a146d3e14972e6ab3b6ecdb520623", "parents": ["6aadd6d78159bf6438b9037b95793c07a07814a6"], "commit": "ffa8b9769aa090b0e248a3f868699a75350110fc", "message": "prioritize sideways recipie article", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1506691951, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506691951, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0803adf5c5833fcab2a1c63e34efb38d8a3fc6f2", "parents": ["6aadd6d78159bf6438b9037b95793c07a07814a6"], "commit": "453f2bd02372e5d0a83a1305503dead2bdb2cea4", "message": "added episode 13, waiting for lauch date", "changes": [[102, 0, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1506602406, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506602406, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "029df50d2cc31f0dd7cf787334bce1bc7de48c6e", "parents": ["ab9901937fbaf6b0710fc36825ca244b6d42dae2"], "commit": "6aadd6d78159bf6438b9037b95793c07a07814a6", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1506541743, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506541743, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a47ac91df7bb8d2c5b36f7d52e477a3793ed4b00", "parents": ["981a4004ace5afdc5685954b8dbacde3badc878d"], "commit": "ab9901937fbaf6b0710fc36825ca244b6d42dae2", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506538172, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506538172, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "eb5702623785e07a703d0c09b306b27576c257c0", "parents": ["47466607290c0e3647995281735a90d2fdf150e3"], "commit": "981a4004ace5afdc5685954b8dbacde3badc878d", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506531697, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506531697, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4459c1a67ccaa696b8f71422f41c730a6f17ae6d", "parents": ["197aa63952c34ad7fe0ca57bc47e811338af3d1a"], "commit": "47466607290c0e3647995281735a90d2fdf150e3", "message": "finished cyclejs flappy bird", "changes": [[26, 0, "journal.md"]]}, {"committer": {"date": 1506443673, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506443673, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "36d1788d0f71c679b60867d740e7e8b4f0ed2c9c", "parents": ["ed87c919be2eb7160bb9ed115280e7a5cab1d212"], "commit": "197aa63952c34ad7fe0ca57bc47e811338af3d1a", "message": "Update links.md", "changes": [[6, 2, "links.md"]]}, {"committer": {"date": 1506443502, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506443502, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "03e0e1a753c50a7572a22946238597df8dbe32a2", "parents": ["6a64c41a01f998fd57fcccc44f92b39e166ff23b"], "commit": "ed87c919be2eb7160bb9ed115280e7a5cab1d212", "message": "add links from nicolae rusan", "changes": [[6, 0, "links.md"]]}, {"committer": {"date": 1506441573, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506441573, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7f78207fe71e4ffd14ba900373576bcefcfa100f", "parents": ["19d478945d86279da2f7c6eab86273fd72f6f51e"], "commit": "6a64c41a01f998fd57fcccc44f92b39e166ff23b", "message": "Update journal.md", "changes": [[5, 0, "journal.md"]]}, {"committer": {"date": 1506352193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506352193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7efbde25c25b1b51879f606440fce0db7c24288e", "parents": ["cb152e6c4105cdcbbf26c069d1da1069577308bd"], "commit": "19d478945d86279da2f7c6eab86273fd72f6f51e", "message": "added episdoe 12, research recap six: cyclejs deep dive", "changes": [[86, 0, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1506351892, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506351892, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "66be71ecd978e01cb138e1fd1cee4f5d86153dd2", "parents": ["a87ad52062c1ebc591b38b28da5f507aaaaa7ca5"], "commit": "cb152e6c4105cdcbbf26c069d1da1069577308bd", "message": "fix onionify link", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1506346145, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506346145, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6d51b7622524d355ee364e2e9b634c719428c9e", "parents": ["b90daea3548277613fd882bf911ce5c606e9770e"], "commit": "a87ad52062c1ebc591b38b28da5f507aaaaa7ca5", "message": "research recap 6", "changes": [[48, 1, "journal.md"]]}, {"committer": {"date": 1506116368, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506116368, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7fb7cfb6dc1e6a0ad81263b96160c09d88d0bdf5", "parents": ["cf7b4fc072fa73a47ad989496a21351026c5875a"], "commit": "b90daea3548277613fd882bf911ce5c606e9770e", "message": "Update journal.md", "changes": [[2, 0, "journal.md"]]}, {"committer": {"date": 1506116142, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506116142, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0457a9df66c55dfac378765c7357d0d22cd678c", "parents": ["6c2e63534ab7f2ecd92c7e5c508a5fbb87e3b9d3"], "commit": "cf7b4fc072fa73a47ad989496a21351026c5875a", "message": "Update journal.md", "changes": [[8, 0, "journal.md"]]}, {"committer": {"date": 1506089144, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506089144, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ba1a6436945d4310dd283ef5f12755299c78fe01", "parents": ["581753a6db254e516301d0c1563e233f6e70ea13"], "commit": "6c2e63534ab7f2ecd92c7e5c508a5fbb87e3b9d3", "message": "to recurse or not to recurse", "changes": [[26, 0, "journal.md"]]}, {"committer": {"date": 1506024610, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506024610, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3c619aca47c07bfe2a44e1e14ac8466c578cdbaf", "parents": ["578124f23089e7a4ca842ab8501ae837e4ca8a74"], "commit": "581753a6db254e516301d0c1563e233f6e70ea13", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506023134, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506023134, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "554b60b4e14e6093c7b262477625b75c8705d1c2", "parents": ["914e8301e7b9545e1e655a0cef9c6c9ace91b252"], "commit": "578124f23089e7a4ca842ab8501ae837e4ca8a74", "message": "Update index.html", "changes": [[2, 2, "index.html"]]}, {"committer": {"date": 1506023076, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506023076, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "93e2c0796a83718b6710796db9965ba3a5e4373e", "parents": ["ffc282294d72a15b37008e78634716d4a9f7a6e9"], "commit": "914e8301e7b9545e1e655a0cef9c6c9ace91b252", "message": "Update index.html", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1506021281, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506021281, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1fc5e38ca1bf75637cc29bd245abc28fd2505e92", "parents": ["599f367771f45a75400f952e33bb1fb9f185d758"], "commit": "ffc282294d72a15b37008e78634716d4a9f7a6e9", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1506019627, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506019627, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ef58f17118d2fac3d514b9fefc3162a07990945e", "parents": ["b095cca040ae70c0f3b5290474c4d7a4b8674e71"], "commit": "599f367771f45a75400f952e33bb1fb9f185d758", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505913111, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505913111, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1b364dcc00c752faa58cc6705bca3a01331733c3", "parents": ["3e4c48b6006a11f8ebc059efb738b7f74a37ad33"], "commit": "b095cca040ae70c0f3b5290474c4d7a4b8674e71", "message": "Update journal.md", "changes": [[3, 0, "journal.md"]]}, {"committer": {"date": 1505911811, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505911811, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9e51b88654e147c7d393c0a187ac05be506213f6", "parents": ["ce65837e2716efffcad1fbe84a27a8bc6a80dd4a"], "commit": "3e4c48b6006a11f8ebc059efb738b7f74a37ad33", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1505843561, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505843561, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "05fdd2479253a293c68784bed6393a5d3ce35e21", "parents": ["de134be22d95007c2bfa7eb0567de97b930b5d91"], "commit": "ce65837e2716efffcad1fbe84a27a8bc6a80dd4a", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1505834631, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505834631, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34e717977d5cf78faf6e86cf24eb33f3035c5c7c", "parents": ["a1a0f723e34db654811a009dcbadea6ba2568d71"], "commit": "de134be22d95007c2bfa7eb0567de97b930b5d91", "message": "added pete hunt episode", "changes": [[89, 0, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1505831458, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505831458, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f139f0d58b68e861f5e3b1ea2c044d324431a62a", "parents": ["3e3f2b81f1cf9dd809bae2357983754b4b897cce"], "commit": "a1a0f723e34db654811a009dcbadea6ba2568d71", "message": "played with cycle, create github-embed-footer", "changes": [[3, 0, ".gitmodules"], [17, 0, "journal.md"], [1, 0, "prototypes/github-embed-footer"]]}, {"committer": {"date": 1505751306, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505751306, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d34875392cce56c005890e7ba944942929246a89", "parents": ["80bd8cddfea62940667194d1b9f06d448a7cb049"], "commit": "3e3f2b81f1cf9dd809bae2357983754b4b897cce", "message": "reorganize to research links by topic", "changes": [[46, 43, "links.md"]]}, {"committer": {"date": 1505748783, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505748783, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "92f8b5aaaebac5b90cdcc6c01eff6217ce612826", "parents": ["f987a210e92c54ebeda8daa166872443014e3f00"], "commit": "80bd8cddfea62940667194d1b9f06d448a7cb049", "message": "Update journal.md", "changes": [[18, 0, "journal.md"]]}, {"committer": {"date": 1505748294, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505748294, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "45887bd5e059568ea6ec62071e50557598876d8a", "parents": ["66f5549361e2562841447bc1d19956046ba120e3"], "commit": "f987a210e92c54ebeda8daa166872443014e3f00", "message": "Update links.md", "changes": [[29, 9, "links.md"]]}, {"committer": {"date": 1505508846, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505508846, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2168b992bd2bbe6ab09f2dbd6fab10400159b65", "parents": ["336815f64b5b0b4f0aeeb7be35b50824acd43653"], "commit": "66f5549361e2562841447bc1d19956046ba120e3", "message": "Update journal.md", "changes": [[9, 0, "journal.md"]]}, {"committer": {"date": 1505508833, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505508833, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ab4ec768b29b1c010609a55dded7622332d2ce73", "parents": ["27ecc929931c792e17e3b590adfd2f09d45e9944"], "commit": "336815f64b5b0b4f0aeeb7be35b50824acd43653", "message": "Update links.md", "changes": [[36, 6, "links.md"]]}, {"committer": {"date": 1505496885, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505496885, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a4d609b11e5251db9fd2e10b9a9bd9b8b0879f69", "parents": ["d2a8c8f6d599ef0717dada1479a38ac4275460ac"], "commit": "27ecc929931c792e17e3b590adfd2f09d45e9944", "message": "Update links.md", "changes": [[10, 5, "links.md"]]}, {"committer": {"date": 1505496877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505496877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f155058884fe4d64c732343b37f47f3dc4a10b7b", "parents": ["a7a6d5708dd6d1837e78d043d5e2c54fc2df5b22", "7b2e4f5d2164c753e40ee27c05dc8610eb19f3d3"], "commit": "d2a8c8f6d599ef0717dada1479a38ac4275460ac", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1505496871, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505496871, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9ae1a451b5ae06ffe12121b69d74cacc6fdbf7b6", "parents": ["1edb7c948c876ae562dedc76d566899fa9b056c2"], "commit": "a7a6d5708dd6d1837e78d043d5e2c54fc2df5b22", "message": "added aaron kent call", "changes": [[27, 0, "notes/aaron-kent-call-9-15-17.md"]]}, {"committer": {"date": 1505316748, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316748, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "646b776e4727ee9a48a330415d4967ccfae4af8e", "parents": ["9083f5051da2af3702fe6ea1755ee0a4ba6f4054"], "commit": "7b2e4f5d2164c753e40ee27c05dc8610eb19f3d3", "message": "Update journal.md", "changes": [[23, 0, "journal.md"]]}, {"committer": {"date": 1505316484, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316484, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7d9288d7f7a07b6bfb83e7583545fd845ab5b7ce", "parents": ["27ce85bfc298c11c1bb4a22104630b5db2975389"], "commit": "9083f5051da2af3702fe6ea1755ee0a4ba6f4054", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1505316387, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316387, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a15f6fbf10a7cd4ec53498d0263c35c42ddd75ef", "parents": ["78c146bc2411f5159b04769e584349ea8d251496"], "commit": "27ce85bfc298c11c1bb4a22104630b5db2975389", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1505313069, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505313069, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8ef3c92c6999c913467504db8906f55557767b5e", "parents": ["e0094fce667761206d87e322a5c4875257c3ad5f"], "commit": "78c146bc2411f5159b04769e584349ea8d251496", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1505312891, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505312891, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f4b15059b9ed018982f91ade031ae94d1d127f60", "parents": ["a3b5290a0917e34b321eb614760560ee5a1e4fd1"], "commit": "e0094fce667761206d87e322a5c4875257c3ad5f", "message": "Create 10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html", "changes": [[89, 0, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"]]}, {"committer": {"date": 1505225730, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505225730, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "dbb57d9cbfc7ae96278de7889f8fbd550f4b99a5", "parents": ["b2360fcc457cb6d6a936e68f73e045dd6ffd53b9"], "commit": "a3b5290a0917e34b321eb614760560ee5a1e4fd1", "message": "fix podcast dates", "changes": [[6, 6, "index.html"]]}, {"committer": {"date": 1505225558, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505225558, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3abf2e24b83aab492347229c34b9b1de5ca0d13c", "parents": ["b358b7ae0e0eb99a325ab4317522086ab1384fbd"], "commit": "b2360fcc457cb6d6a936e68f73e045dd6ffd53b9", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1505223682, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505223682, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "eb88c79c85d1f433bdc08f5ab2a1824781470689", "parents": ["9bb940ef8155266aa62b586c546d91923927e413"], "commit": "b358b7ae0e0eb99a325ab4317522086ab1384fbd", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505219671, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505219671, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7bca4b835690ee9ed78e8ad668d75c6c0bdc8d01", "parents": ["680be36767a6f55703869e882a291f7a797c42ae"], "commit": "9bb940ef8155266aa62b586c546d91923927e413", "message": "added links from jaime and andre calls", "changes": [[8, 4, "links.md"]]}, {"committer": {"date": 1505219592, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505219592, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2ff34f9c2f9f83da8f6a74d43bd0a08747883d8", "parents": ["25dabceeb6b549ddd623deab23ca8483f437990c"], "commit": "680be36767a6f55703869e882a291f7a797c42ae", "message": "fix andre call notes links", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1505216260, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505216260, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bf0b38b0d676956da86ee0868e9b0b1d91a9d463", "parents": ["1edb7c948c876ae562dedc76d566899fa9b056c2"], "commit": "25dabceeb6b549ddd623deab23ca8483f437990c", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505163409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8079d5f18550e388d4ebd094e7b9d1c1d6ae330b", "parents": ["08da893bb261b158b291282d3fc0038453e871e5"], "commit": "1edb7c948c876ae562dedc76d566899fa9b056c2", "message": "update research recap five description and add to homepage", "changes": [[1, 1, "episodes/9-research-recap-five.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1505163167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c3138c67c1dc3d95c3028c5c2806f314fbffeb4", "parents": ["ce73581ab1b200248c579630ff295e548186c7f5", "ee8cbb23b6f8faecffcd1c1f4f86e192213024e2"], "commit": "08da893bb261b158b291282d3fc0038453e871e5", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1505163159, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163159, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf6a2496f4fdfcf8d4b7fb61117d707db7e5b279", "parents": ["2585cc7b065637f213d3733ba9f26e65bfa00fc5"], "commit": "ce73581ab1b200248c579630ff295e548186c7f5", "message": "research recap 5", "changes": [[106, 0, "episodes/9-research-recap-five.html"], [56, 0, "journal.md"], [4, 0, "links.md"]]}, {"committer": {"date": 1505163149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a7bbd4363513ad3688a7a88bc2a8cc9355da8bbd", "parents": ["095393203920ac6a43f857e32117037b6564b91a"], "commit": "2585cc7b065637f213d3733ba9f26e65bfa00fc5", "message": "add andre staltz 9-11-17 call", "changes": [[118, 0, "notes/andre-staltz-call-9-11-17.md"]]}, {"committer": {"date": 1504902724, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504902724, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6a4dbd3cbe4008bfe3f66fe951cb2b454cd5c742", "parents": ["095393203920ac6a43f857e32117037b6564b91a"], "commit": "ee8cbb23b6f8faecffcd1c1f4f86e192213024e2", "message": "Update links.md", "changes": [[4, 2, "links.md"]]}, {"committer": {"date": 1504881181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504881181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "315c769413167c1097aa5f28d9d93558c6536171", "parents": ["1cf92bf9347818a44971e4246423e206134cff1c"], "commit": "095393203920ac6a43f857e32117037b6564b91a", "message": "bret victor deep dive day #1", "changes": [[9, 0, "journal.md"], [15, 1, "links.md"]]}, {"committer": {"date": 1504799746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504799746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "84147c6a49636a67043a6c18a94de12d4317a65d", "parents": ["3c61d3a143f71c72400a3f23ce086ef904fbaa06"], "commit": "1cf92bf9347818a44971e4246423e206134cff1c", "message": "alan kay day #5 journal and recap", "changes": [[18, 0, "journal.md"]]}, {"committer": {"date": 1504798819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504798819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b9e5bf6cf7ec1456598bf62512f944e532b40cca", "parents": ["4be18b07ee81247cad4bc031da09f81e29273f43"], "commit": "3c61d3a143f71c72400a3f23ce086ef904fbaa06", "message": "alan kay deep dive day #5 links", "changes": [[3, 0, "ideas.md"], [38, 5, "links.md"]]}, {"committer": {"date": 1504710551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504710551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "32b48067cb548a9e499cc74b3389122c0dd3f477", "parents": ["31cb36531e9fa145dfb65832af0cdfb90c39258f"], "commit": "4be18b07ee81247cad4bc031da09f81e29273f43", "message": "alan kay deep dive #4, journal", "changes": [[21, 0, "journal.md"]]}, {"committer": {"date": 1504709804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504709804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "131bb205491e43f2b7f16461d20f15fc5c87f5ce", "parents": ["8fdc3420b50bef161e0324bd964b3cb343540dc4"], "commit": "31cb36531e9fa145dfb65832af0cdfb90c39258f", "message": "alan kay deep dive day #4 links", "changes": [[40, 9, "links.md"]]}, {"committer": {"date": 1504699778, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504699778, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "60cbdc125e992e54e1617ca03524e45fe8094da1", "parents": ["31bccc1f12bef4f2f86fe20d75d2cb4f174a3be9"], "commit": "8fdc3420b50bef161e0324bd964b3cb343540dc4", "message": "added research recap four", "changes": [[86, 0, "episodes/8-research-recap-four.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1504646268, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504646268, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "534aa02511f7420dc31f17634f0479ae0fb76b9f", "parents": ["dce6d46e520dfcedd8638a9cfa090bb060209e38"], "commit": "31bccc1f12bef4f2f86fe20d75d2cb4f174a3be9", "message": "adding lloyd's episode to homepage", "changes": [[7, 6, "index.html"]]}, {"committer": {"date": 1504646082, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504646082, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3dcf4cb21f128692a262f4ee0944219c785a529", "parents": ["9c23199978c05ac8c9795f0a40925db8f812a10b"], "commit": "dce6d46e520dfcedd8638a9cfa090bb060209e38", "message": "added lloyd episode", "changes": [[86, 0, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"]]}, {"committer": {"date": 1504638064, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504638064, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7960f73fd853389aed4ad1509c50c7beb4c2b670", "parents": ["723e92578386fb3d7afd5200c5a7855c8172cbdd"], "commit": "9c23199978c05ac8c9795f0a40925db8f812a10b", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504637264, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504637264, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "30e885296b52bebebd24c343544652bdbcc9cf0a", "parents": ["04b4251a07635e4e170df62e3e2fb7eade439817"], "commit": "723e92578386fb3d7afd5200c5a7855c8172cbdd", "message": "Update links.md", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1504633019, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504633019, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e366cfc37111f22ac9cce5ee3d50860f5ff71a78", "parents": ["355bb048a4eb34bf5b276230bdd7f4455beaeeda"], "commit": "04b4251a07635e4e170df62e3e2fb7eade439817", "message": "added notes with dan and jaime", "changes": [[95, 0, "notes/dan-scanlon-call-9-5-17.md"], [74, 0, "notes/jaime-brandon-call-9-5-17.md"]]}, {"committer": {"date": 1504617771, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504617771, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b9fd8e1823745f434be8914576eff9c6cf92beb2", "parents": ["c43a1fe747c5608eb5da91c0d629a7a86a20244c"], "commit": "355bb048a4eb34bf5b276230bdd7f4455beaeeda", "message": "journal for alan kay day #3, and logichub #1", "changes": [[10, 0, "journal.md"]]}, {"committer": {"date": 1504617157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504617157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3d04224730ee412e6ef2ad5f184529972092901", "parents": ["aead6827eb4410e45e41e410f91a510acc8b137e"], "commit": "c43a1fe747c5608eb5da91c0d629a7a86a20244c", "message": "alan kay deep dive day #3", "changes": [[9, 1, "links.md"]]}, {"committer": {"date": 1504610254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504610254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "058d4470820568f1dd6368cf3dd0e66c31a84c1e", "parents": ["6d7c3e8ec4ab7101f2eb766786049f41528c370d"], "commit": "aead6827eb4410e45e41e410f91a510acc8b137e", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504553635, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504553635, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8506aed16b27523e563abe4f3dcb4a614600209a", "parents": ["b1222a617914376d290fc00ca4f0dbeb16670767"], "commit": "6d7c3e8ec4ab7101f2eb766786049f41528c370d", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504553081, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504553081, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a28d2baf4a8e6705bfc76a918b6bdb7e054b7106", "parents": ["bf7b99bcbd22cf0a258ab679f00afff059ac96d4"], "commit": "b1222a617914376d290fc00ca4f0dbeb16670767", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504551586, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504551586, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8baa20e152ba25d36d118ba9bcadb307da2e9de7", "parents": ["7f4a1c348f168190d764f5e0629a97d0cdc434fc"], "commit": "bf7b99bcbd22cf0a258ab679f00afff059ac96d4", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504547313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504547313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "67248be4f975ba61253f0d3101924f180dcd9515", "parents": ["8e4ccfe4ec2908031fd3c6d0ef4a18dee9193d0a"], "commit": "7f4a1c348f168190d764f5e0629a97d0cdc434fc", "message": "alan kay deep dive #2, part 2", "changes": [[11, 6, "links.md"]]}, {"committer": {"date": 1504536819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "45b0aa0295de357676d9d2c084707809d4adfad2", "parents": ["9976e7c46d85a09c1c5c4776e3673b8aac44152a"], "commit": "8e4ccfe4ec2908031fd3c6d0ef4a18dee9193d0a", "message": "alan deep dive part #2, journal", "changes": [[3, 0, "ideas.md"], [12, 0, "journal.md"]]}, {"committer": {"date": 1504536693, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536693, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3a6b5f4c6fe813417e8cb67fc97f5b88d723f397", "parents": ["d391cf4dd862a0e26c7133a580fd5dc911134296"], "commit": "9976e7c46d85a09c1c5c4776e3673b8aac44152a", "message": "still Alan Deep Dive #2, part 1 (forgot to save before last commit)", "changes": [[20, 5, "links.md"]]}, {"committer": {"date": 1504536612, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536612, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c83bba5a9ddb4d3736e65f3a4358707e69e29bdc", "parents": ["29d76b2bf84e75b84a6fd0f9f7528a7976979b58"], "commit": "d391cf4dd862a0e26c7133a580fd5dc911134296", "message": "Alan Deep dive #2, part 1", "changes": [[19, 3, "links.md"]]}, {"committer": {"date": 1504470359, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504470359, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "453c87383bc4899da1fad599a0755833df1fb648", "parents": ["470b347d08f5333b6ee20e841f26b6dd0ebfbac3"], "commit": "29d76b2bf84e75b84a6fd0f9f7528a7976979b58", "message": "reflections on schedule 9/3/17", "changes": [[16, 0, "journal.md"]]}, {"committer": {"date": 1504367606, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504367606, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "35d2c685b9c2d1e6250596a6385c106e362c1063", "parents": ["e40d8cb415e5777deaddfdbf5f9f396ac9b7e471"], "commit": "470b347d08f5333b6ee20e841f26b6dd0ebfbac3", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1504366305, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504366305, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "107a5f66e29813249181249cdc7080743c2a55e7", "parents": ["884b050e790f0f268d02440d80b19437754c2d99"], "commit": "e40d8cb415e5777deaddfdbf5f9f396ac9b7e471", "message": "add isomorf.io", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1504307808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504307808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2dedcd9c1adff50958f1d201514402c170800de", "parents": ["3851f3f22bb2fe32c849a91a6f369c3f0e19c456"], "commit": "884b050e790f0f268d02440d80b19437754c2d99", "message": "alan kay reading recap 1", "changes": [[16, 1, "journal.md"]]}, {"committer": {"date": 1504307155, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504307155, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d2838bc302ee7b1af161a95a78dc03a46e56c7ff", "parents": ["3be38c7ad81d3a54a508c833c5ff7a5ce5f0c409"], "commit": "3851f3f22bb2fe32c849a91a6f369c3f0e19c456", "message": "alan kay deep dive #1", "changes": [[40, 1, "links.md"]]}, {"committer": {"date": 1504298645, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504298645, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "38d73430379b008e7f50556e806eeeb57ae322bb", "parents": ["6152b897d20b9f2863bd253e3a45ae43e2bf6cbf"], "commit": "3be38c7ad81d3a54a508c833c5ff7a5ce5f0c409", "message": "Update journal.md", "changes": [[35, 0, "journal.md"]]}, {"committer": {"date": 1504280267, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504280267, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bc23d8753509f3d0a0f68860d834c474f5ffde2f", "parents": ["0ed7e467a44de032c4b971218f3a9391b78288ca"], "commit": "6152b897d20b9f2863bd253e3a45ae43e2bf6cbf", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504126254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504126254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5be86c4272519f71555e09f14d25ceb8215980ed", "parents": ["bbde3535f021ec52629f2cf7981a49d02291aea2"], "commit": "0ed7e467a44de032c4b971218f3a9391b78288ca", "message": "Update links.md", "changes": [[2, 1, "links.md"]]}, {"committer": {"date": 1504115225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504115225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ec22196e273a0dae72d51330e92abf16a699b889", "parents": ["58d8f09f103f135051d81169848d7999621871b9", "5182f4e985a6b476431e58342f95fdd7dbdf76e0"], "commit": "bbde3535f021ec52629f2cf7981a49d02291aea2", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1504115219, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504115219, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "91225e6cd090473f6c28e47201f0a8d7eba88d33", "parents": ["0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e"], "commit": "58d8f09f103f135051d81169848d7999621871b9", "message": "fixed year on episdoes, thanks to irvin for the notice", "changes": [["-", "-", "favicon.ico"], [5, 5, "index.html"], [4, 2, "journal.md"]]}, {"committer": {"date": 1504105479, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504105479, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "648b6ec81c273b23a75e7b7c5572359722157e69", "parents": ["0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e"], "commit": "5182f4e985a6b476431e58342f95fdd7dbdf76e0", "message": "Update journal.md", "changes": [[25, 0, "journal.md"]]}, {"committer": {"date": 1504019188, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504019188, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "964423aaf0dbd798f7469c5c608348d1638992de", "parents": ["dd170c41b5b2561d2be979343aa0a2b2c04432bf"], "commit": "0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e", "message": "added favicon to all html pages", "changes": [[1, 0, "episodes/1-welcome.html"], [1, 0, "episodes/2-research-recap.html"], [1, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 0, "episodes/4-research-recap-two.html"], [2, 1, "episodes/5-samantha-john.html"], [2, 1, "episodes/6-research-recap-three.html"], [0, 3, "ideas.md"], [2, 0, "index.html"]]}, {"committer": {"date": 1504019052, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504019052, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c14137e49ed75fbd7143a0d464b8bec573485679", "parents": ["dbfe291fe2cf65b7ac07b315bd2c530e67511bda"], "commit": "dd170c41b5b2561d2be979343aa0a2b2c04432bf", "message": "test adding favicon 2", "changes": [[10, 12, "ideas.md"]]}, {"committer": {"date": 1504018920, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504018920, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "05f62c9fbf2cb67174eaaaf1b92a862ecc5049ca", "parents": ["35f5f8d51fba23ca11a49039cfbcd187a8591548"], "commit": "dbfe291fe2cf65b7ac07b315bd2c530e67511bda", "message": "test adding favicon 1", "changes": [[5, 2, "ideas.md"]]}, {"committer": {"date": 1504018586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504018586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a7d073e24e5bf97651acb9dc26692512332b94e3", "parents": ["1a8ab5923b5d1047e3f13107b29bcf51c0561e28"], "commit": "35f5f8d51fba23ca11a49039cfbcd187a8591548", "message": "test adding favicon", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504016175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504016175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4878aefbbac8af4ca55c0d7ab82dda0ac99b2ee", "parents": ["0bcc59effc1290e0c94c268a7f3948893d41a446"], "commit": "1a8ab5923b5d1047e3f13107b29bcf51c0561e28", "message": "max width on welcome text", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1504016059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504016059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b5996ec5eeaa79722888485ca3bb7d121eb2e67", "parents": ["777fbfabbf2d995560a1480183f2131b94a2f3f6"], "commit": "0bcc59effc1290e0c94c268a7f3948893d41a446", "message": "made homepage more welcoming and intuative; closes #16; closes #15", "changes": [[14, 5, "index.html"]]}, {"committer": {"date": 1504015401, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504015401, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9f84ce4e85413435ae82ac6512e7a659530e46ad", "parents": ["d3c025919d75a69a736e5ea916cec08e677f4070", "9c891a476b6078ff99dd03d9f6c565ec951f4601"], "commit": "777fbfabbf2d995560a1480183f2131b94a2f3f6", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1504015296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504015296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7838d2297336b169334818bb05a1eed0faebead9", "parents": ["76c39e8aa68d1909251304c8ee926801fa0826ee"], "commit": "d3c025919d75a69a736e5ea916cec08e677f4070", "message": "made readme more welcoming; closes #5", "changes": [[9, 1, "README.md"]]}, {"committer": {"date": 1503950384, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503950384, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e84301305f577c5042408876342cc5433f451475", "parents": ["76c39e8aa68d1909251304c8ee926801fa0826ee"], "commit": "9c891a476b6078ff99dd03d9f6c565ec951f4601", "message": "Update ideas.md", "changes": [[3, 0, "ideas.md"]]}, {"committer": {"date": 1503949885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503949885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2842192301ab33b21ee96860294054a6f6452a42", "parents": ["5485c6b3dd6f3fab8d0a255fb1b636748aeb2a42"], "commit": "76c39e8aa68d1909251304c8ee926801fa0826ee", "message": "research recap 4", "changes": [[27, 0, "journal.md"]]}, {"committer": {"date": 1503945782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503945782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "340b9fc8ee07bf4e25dcdd90bf33a95763e7e517", "parents": ["d44e9b61d5b044c3daa3ae8b4b0690a09e1fa55d"], "commit": "5485c6b3dd6f3fab8d0a255fb1b636748aeb2a42", "message": "updated journal", "changes": [[22, 0, "journal.md"]]}, {"committer": {"date": 1503944976, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503944976, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2d41a197922fe007480e8a5b1be7af2738007686", "parents": ["6cdb093fd0b8c300b708d85f5ab77a0b838d8d7e"], "commit": "d44e9b61d5b044c3daa3ae8b4b0690a09e1fa55d", "message": "inital work on streamsheets", "changes": [[88, 0, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1503706632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503706632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ad34a6f1147b9c95f240b04a1b4fd7f259587a86", "parents": ["c1b7e0677a6a2ccbd456e3b260b54a07eda3df0a"], "commit": "6cdb093fd0b8c300b708d85f5ab77a0b838d8d7e", "message": "updated journal and links with streamsheet research", "changes": [[39, 0, "journal.md"], [16, 5, "links.md"]]}, {"committer": {"date": 1503677827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503677827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1498bfd655e55d6f9c440ca71b4d822d4ccf3804", "parents": ["bfa6019d2d676de7a6b05307baea90c6667bfd15"], "commit": "c1b7e0677a6a2ccbd456e3b260b54a07eda3df0a", "message": "deep dive into imp", "changes": [[25, 3, "links.md"]]}, {"committer": {"date": 1503590944, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503590944, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a932f32c4f02538b4394b69e6673eb93ec614003", "parents": ["938087fbbe751dde1eefbcf9a5a2d08ce7c6a54a"], "commit": "bfa6019d2d676de7a6b05307baea90c6667bfd15", "message": "Update links.md", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1503590891, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503590891, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "457b7b41031a2073eee630931300160257ef354f", "parents": ["a110abe4149e58ff89639ddf08fe0639b213bd5a"], "commit": "938087fbbe751dde1eefbcf9a5a2d08ce7c6a54a", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1503580707, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580707, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ce86a60b0d04ec222e7c7ab1c60044648a38c8f0", "parents": ["3a8cf8f6ac0c45ab4fdf332e4c006a886e4a112b"], "commit": "a110abe4149e58ff89639ddf08fe0639b213bd5a", "message": "Update journal.md", "changes": [[8, 6, "journal.md"]]}, {"committer": {"date": 1503580489, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580489, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3ea98ea97a4a3bf8655ba4a67fbe04ff137bfe37", "parents": ["5b01f2c511b0b6ba3343202fb04f3be1345d02f0"], "commit": "3a8cf8f6ac0c45ab4fdf332e4c006a886e4a112b", "message": "Update 6-research-recap-three.html", "changes": [[1, 1, "episodes/6-research-recap-three.html"]]}, {"committer": {"date": 1503580412, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580412, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5901219943fe631cf3b71e73992bd6c6bc052a31", "parents": ["ef3d6c379b3c16c2a0573edeb94fcf846e560063"], "commit": "5b01f2c511b0b6ba3343202fb04f3be1345d02f0", "message": "Create 6-research-recap-three.html", "changes": [[86, 0, "episodes/6-research-recap-three.html"]]}, {"committer": {"date": 1503580169, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580169, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f5bbfdc55c1e1e5b80d55085060b888ca6c8ee27", "parents": ["89846d82cde6db5d89b3ac723f2ecdff39ef07dc"], "commit": "ef3d6c379b3c16c2a0573edeb94fcf846e560063", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1503528378, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503528378, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c4554b59091f3d32e214aa4b87d07ac009aad1ab", "parents": ["2852e1b42b2a8d0de4dc0da36d26e7875e7ddb1d"], "commit": "89846d82cde6db5d89b3ac723f2ecdff39ef07dc", "message": "updated journal", "changes": [[48, 0, "journal.md"]]}, {"committer": {"date": 1503496605, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503496605, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6b06d609611d405ba9ba9b538c5001fded7970d4", "parents": ["b88d3faa985127a8a56b7e907aecdf1d53c8e781"], "commit": "2852e1b42b2a8d0de4dc0da36d26e7875e7ddb1d", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1503353989, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503353989, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8e6f9db3a905595f215f7ae3346128c93ec1b8da", "parents": ["40591cd3eed6f4d018d94bd03a7be03f3968071b"], "commit": "b88d3faa985127a8a56b7e907aecdf1d53c8e781", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1503353687, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503353687, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6416bda1dcbe0782e0d08f6612ea67d8ef28296c", "parents": ["88e6f5d6daa4b552cedfe5b0378feab08a079bb8"], "commit": "40591cd3eed6f4d018d94bd03a7be03f3968071b", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1503345324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503345324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a05bf783645c934c9d4427e4a96c97e1cd3d163e", "parents": ["9521c213fb40afe91ecc6a3771b04777d820ee16"], "commit": "88e6f5d6daa4b552cedfe5b0378feab08a079bb8", "message": "removed footer from all pages but homepage; added ability to subscribe which closes #17", "changes": [[1, 11, "episodes/1-welcome.html"], [1, 12, "episodes/2-research-recap.html"], [1, 11, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 11, "episodes/4-research-recap-two.html"], [1, 11, "episodes/5-samantha-john.html"], [33, 11, "index.html"]]}, {"committer": {"date": 1503326297, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503326297, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c0b64020a372676ceb963c1e1a12e9f793582665", "parents": ["214e49144722cda20d56ab89f3f8e522af5349e8"], "commit": "9521c213fb40afe91ecc6a3771b04777d820ee16", "message": "Update links.md", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1503070131, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503070131, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1f7219008896a6038ccd250241fd82433ad170d3", "parents": ["884b2f035caeecf8b21e2025b056090d44faf776"], "commit": "214e49144722cda20d56ab89f3f8e522af5349e8", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1502998067, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502998067, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "401bd9471918b433bf4a4c8e1f8fa8455cebcfab", "parents": ["da8a7778217acaddaeeece886f2751077c4d56b4"], "commit": "884b2f035caeecf8b21e2025b056090d44faf776", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1502918997, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502918997, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e0f6bffd6670f9a49e2e0326aef7adf1524e376c", "parents": ["da94d713c61e6f5263354412af9a1b55c3e63341"], "commit": "da8a7778217acaddaeeece886f2751077c4d56b4", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502918042, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502918042, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6f9e2af8f23b1493efeb314fb28942bd7738a363", "parents": ["cd83671ac0a4d68818c40815c9f5202ec078aafc"], "commit": "da94d713c61e6f5263354412af9a1b55c3e63341", "message": "Update links.md", "changes": [[14, 1, "links.md"]]}, {"committer": {"date": 1502906524, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502906524, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "161d4f96fcaaa06d13a40e6c838f9a3888c10849", "parents": ["afc8cd46383832f03e922923ba448fdbaeb75f33"], "commit": "cd83671ac0a4d68818c40815c9f5202ec078aafc", "message": "Update links.md", "changes": [[11, 3, "links.md"]]}, {"committer": {"date": 1502902105, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502902105, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7e73ba1e3a0daf8b500396d2d64cf3f06d642e45", "parents": ["5978088441fe5420eb078617bbad14b637d45761"], "commit": "afc8cd46383832f03e922923ba448fdbaeb75f33", "message": "Update journal.md", "changes": [[12, 0, "journal.md"]]}, {"committer": {"date": 1502748184, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502748184, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9d4e0a2ffd0659336ebd499ced42883991ecfaf", "parents": ["52a0d72bc49f2d56eebcfcdaae440467008f1cd2"], "commit": "5978088441fe5420eb078617bbad14b637d45761", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502747974, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502747974, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "71a95c831017808d6f445828bd2699b57f638012", "parents": ["2e210ab2afde0c57265fb28bebaa62b99eaabc0b"], "commit": "52a0d72bc49f2d56eebcfcdaae440467008f1cd2", "message": "Update links.md", "changes": [[58, 8, "links.md"]]}, {"committer": {"date": 1502724885, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502724885, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fe22f3d96f808f37bb93d2db0c185d05ca9120c9", "parents": ["767ee0e066dae59918dedb7cef8d98c489c6c72d"], "commit": "2e210ab2afde0c57265fb28bebaa62b99eaabc0b", "message": "research recap #3", "changes": [[39, 0, "journal.md"]]}, {"committer": {"date": 1502464548, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502464548, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9023e61265a4ca1c7433c562629d6c25c7cf77e", "parents": ["1d905db3186ec9ecbad0f5984446de831dacecf2"], "commit": "767ee0e066dae59918dedb7cef8d98c489c6c72d", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1502464511, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502464511, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "083c3492f7ef8b02d154185cee92327a2efb432b", "parents": ["cb4a5bb0fe9ce709a5028ff02a12cf178eb1c34a"], "commit": "1d905db3186ec9ecbad0f5984446de831dacecf2", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502462066, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502462066, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "143ec6f754fdea65bd2cb41e01562e268be95358", "parents": ["c6a05412159003f0ab89b608e185e024168a5599"], "commit": "cb4a5bb0fe9ce709a5028ff02a12cf178eb1c34a", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1502379986, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502379986, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "846b7e66441031ba4cda434cef344d77515c1edb", "parents": ["03c2dd7450bd2fc41bf1b83fa5a4e6147f387138"], "commit": "c6a05412159003f0ab89b608e185e024168a5599", "message": "add links from Paul Chiusano", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1502376844, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376844, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bff02edef1726cc2b48e5c27af2a8cc9a84d41ef", "parents": ["538bba305ffd7b4843a8e5a86fa59c51974ea394"], "commit": "03c2dd7450bd2fc41bf1b83fa5a4e6147f387138", "message": "Rename 4-research-recap-2.html to 4-research-recap-two.html", "changes": [[0, 95, "episodes/4-research-recap-2.html"], [95, 0, "episodes/4-research-recap-two.html"]]}, {"committer": {"date": 1502376788, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376788, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a066abe8d14acb0f302178ba02b42464bdd44e12", "parents": ["e46eaa381d71019626793a896891a857fa64fd58"], "commit": "538bba305ffd7b4843a8e5a86fa59c51974ea394", "message": "Update index.html", "changes": [[5, 3, "index.html"]]}, {"committer": {"date": 1502376673, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376673, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7a813c9373733c1d8151b67de61e3b6633ba2c35", "parents": ["862cb573f7d196927e0e241bce24b874f31a414d"], "commit": "e46eaa381d71019626793a896891a857fa64fd58", "message": "Rename welcome.html to 1-welcome.html", "changes": [[93, 0, "episodes/1-welcome.html"], [0, 93, "episodes/welcome.html"]]}, {"committer": {"date": 1502376661, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376661, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7df421633264d81aa064026c23bb25f5d38b3b95", "parents": ["e642a7489092633cebc9c64865b320dc28d3bbfc"], "commit": "862cb573f7d196927e0e241bce24b874f31a414d", "message": "Rename research-recap.html to 2-research-recap.html", "changes": [[164, 0, "episodes/2-research-recap.html"], [0, 164, "episodes/research-recap.html"]]}, {"committer": {"date": 1502376643, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376643, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "33cae8f5a78d90c4bd04300e8e84acde2e39116e", "parents": ["75a15e5afd4647eb89760a29c19585552eb93a8a"], "commit": "e642a7489092633cebc9c64865b320dc28d3bbfc", "message": "Create 5-samantha-john.html", "changes": [[96, 0, "episodes/5-samantha-john.html"]]}, {"committer": {"date": 1502314198, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502314198, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3fdb7ee81f0201396f60c07548b7db1028239ca2", "parents": ["fb2143eab317b7bcfa772920044767c556036a91"], "commit": "75a15e5afd4647eb89760a29c19585552eb93a8a", "message": "Update journal.md", "changes": [[20, 0, "journal.md"]]}, {"committer": {"date": 1502313055, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502313055, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cc8646c861d60d040010df24d6b7b88615c6fb16", "parents": ["205cdbcde350d24a410ca1bed3d7d528f3b313b2"], "commit": "fb2143eab317b7bcfa772920044767c556036a91", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1502312989, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502312989, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9eca22a19d745287dce065d429075b1f9cf1d7fb", "parents": ["e7cc2f2e88d2776ff7fb39d5ec9d81b99744d5d4"], "commit": "205cdbcde350d24a410ca1bed3d7d528f3b313b2", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1502312371, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1502312371, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "de4f3c8f115c2b5793ca1bafdd2d0de34c988ace", "parents": ["d54315a0c0538a1db8ff280006da5e1679850ef1"], "commit": "e7cc2f2e88d2776ff7fb39d5ec9d81b99744d5d4", "message": "fixed titles", "changes": [[1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/research-recap.html"], [1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1502312283, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502312283, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d12332cb2a7f2f33f9f1c5e17c5d7f991a1ff6cc", "parents": ["3da6bb30628a7579850b012f314cfb696f4913c7"], "commit": "d54315a0c0538a1db8ff280006da5e1679850ef1", "message": "Create 4-research-recap-2.html", "changes": [[95, 0, "episodes/4-research-recap-2.html"]]}, {"committer": {"date": 1502306462, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306462, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d7ddcf32611281da6c29e8894da4a955f01c820c", "parents": ["d0a57405625bb1abbcc4e6850eb5b07898d61b0e"], "commit": "3da6bb30628a7579850b012f314cfb696f4913c7", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1502306424, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306424, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8b03755a76604504a84006547a4be95eeb693c4a", "parents": ["47c59e1457c1e8a72aa782730820b5eb7d7e9d50"], "commit": "d0a57405625bb1abbcc4e6850eb5b07898d61b0e", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1502306080, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306080, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fc60b6ceea128ffa5289b8b386a6225d1091e1a6", "parents": ["32df2b40de64f6fbe6f9d03b735be84131f10c31"], "commit": "47c59e1457c1e8a72aa782730820b5eb7d7e9d50", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[2, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501885105, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501885105, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "82dcdc2fffad3912e9a041510b0c02c0e2b956e8", "parents": ["26f4b8c09974d8ff4f26b7a803e503f412193a16"], "commit": "32df2b40de64f6fbe6f9d03b735be84131f10c31", "message": "Update journal.md", "changes": [[31, 0, "journal.md"]]}, {"committer": {"date": 1501714956, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501714956, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5746307e3dc24cdad0f35396728de798bd195df9", "parents": ["638d103988118d00d7f8c31feba1dd76463e6629"], "commit": "26f4b8c09974d8ff4f26b7a803e503f412193a16", "message": "Update journal.md", "changes": [[77, 0, "journal.md"]]}, {"committer": {"date": 1501531351, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531351, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "05f8a5f452819daa654f88fa53e3a312d7fd0656", "parents": ["9217dca06d06e84af2b91c64bb96f9b894afac5f"], "commit": "638d103988118d00d7f8c31feba1dd76463e6629", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501531315, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531315, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5feef29f707c463753591fd91e9d65a8ebaa69ba", "parents": ["d735647475da480d8e2abc7a408a73120ed44a00"], "commit": "9217dca06d06e84af2b91c64bb96f9b894afac5f", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[5, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501531109, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531109, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c0c7c2b73165fdb1b4c97c473936e5c23dfd8fff", "parents": ["388e22a2c5492e530dfa0fd3c9471f021878ddd5"], "commit": "d735647475da480d8e2abc7a408a73120ed44a00", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501530655, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501530655, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "945c23be3a9d68ce8115f94e1a5d7140a5c610b9", "parents": ["35aa796a98cd47fc0efb255910a9c9115e1a07a2"], "commit": "388e22a2c5492e530dfa0fd3c9471f021878ddd5", "message": "trying to fix over linkifying", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1501525079, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501525079, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "81fd40c85681feae6f84f34c4eec3b22c49945f5", "parents": ["bc9289ed25417b1cf99a9328195d962c342d0415"], "commit": "35aa796a98cd47fc0efb255910a9c9115e1a07a2", "message": "linkify links in
  • elements", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1501524784, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524784, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0b51a71acc444fb78aa7bac74df4a0cc92a0f3da", "parents": ["35f7998ab3000c864031a3a519ffd6b7534c94ed"], "commit": "bc9289ed25417b1cf99a9328195d962c342d0415", "message": "Update journal.md", "changes": [[9, 1, "journal.md"]]}, {"committer": {"date": 1501524631, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524631, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cfcbe3a992f5026f1a3ee39d1066927c39932100", "parents": ["5c0e281537b3276d8465e746946c9f34a6d06fdd"], "commit": "35f7998ab3000c864031a3a519ffd6b7534c94ed", "message": "Update journal.md", "changes": [[39, 1, "journal.md"]]}, {"committer": {"date": 1501524513, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524513, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0df9e68a2f72329ba90deaeae88de8c8b079dbc", "parents": ["47c33c57f8fabbe2e1448e2e21b678aa75ef00be"], "commit": "5c0e281537b3276d8465e746946c9f34a6d06fdd", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501515165, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501515165, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "28c451aff492bf2321dbed811473d6fc894789d2", "parents": ["07077d4b96b4f8fbfb38efae875e85009fa9fdea"], "commit": "47c33c57f8fabbe2e1448e2e21b678aa75ef00be", "message": "research recap", "changes": [[37, 0, "journal.md"]]}, {"committer": {"date": 1501367316, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367316, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1c0ec1d1dd824b43db7313e98e3db6189766dc26", "parents": ["d9b59aeb3354c35a78cf3cde7b0f4de3f2c24573"], "commit": "07077d4b96b4f8fbfb38efae875e85009fa9fdea", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1501367251, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367251, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "2d084fc9977dc08faa8c70901012e85fd04a124c", "parents": ["8d1d7f437ac7681a3aeb32b27697eab4d29fab84"], "commit": "d9b59aeb3354c35a78cf3cde7b0f4de3f2c24573", "message": "Create 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[93, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501367155, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367155, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "96bbd9f53b5e4ca35eddd431ed1e4078c7c2b8bd", "parents": ["374b007644205216b076abd99e313802e278f7be"], "commit": "8d1d7f437ac7681a3aeb32b27697eab4d29fab84", "message": "Update welcome.html", "changes": [[1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1501367134, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367134, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6c1c22249140c1eb9f954f55fd149eb3428a8a89", "parents": ["d9793143d5e1af28b91c9017b44ad82a42ec13a6"], "commit": "374b007644205216b076abd99e313802e278f7be", "message": "Update research-recap.html", "changes": [[1, 1, "episodes/research-recap.html"]]}, {"committer": {"date": 1501367092, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367092, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d48626bee48760cdea6f6f6644893651b695ef28", "parents": ["4a98fdc1f4c2ce109b319b257394ce859bad37e6"], "commit": "d9793143d5e1af28b91c9017b44ad82a42ec13a6", "message": "change to omnystudio", "changes": [[1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1501364285, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501364285, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "667eb6804332e032efd2c1c1be9b9906cc7a5e93", "parents": ["e9da71dafdcf3d0950b86a3d06c5a06ffa783d07"], "commit": "4a98fdc1f4c2ce109b319b257394ce859bad37e6", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501281469, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1501281469, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ce51bfa8af66694bd55f948863cd8fa94e28f55e", "parents": ["b302a9c22c7955292073d4d9a36219893f752e7f"], "commit": "e9da71dafdcf3d0950b86a3d06c5a06ffa783d07", "message": "fix links", "changes": [[4, 4, "ideas.md"]]}, {"committer": {"date": 1501281321, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1501281321, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5498a19d71f696e62ac3a0331d16f7438e84924e", "parents": ["273eaa324fdebdb6893a4b8b4a68b7cba6e1ca33"], "commit": "b302a9c22c7955292073d4d9a36219893f752e7f", "message": "shower thoughts", "changes": [[7, 0, "ideas.md"], [72, 0, "journal.md"]]}, {"committer": {"date": 1501266054, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501266054, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f92c83494724df368a6274059ddd3dd7e62902d7", "parents": ["9431c568308bd82a38e32b67b294fd9f7b64e295"], "commit": "273eaa324fdebdb6893a4b8b4a68b7cba6e1ca33", "message": "Update journal.md", "changes": [[3, 2, "journal.md"]]}, {"committer": {"date": 1501266014, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501266014, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e955d3c6718839341ceb8409681f3b9a3babe98b", "parents": ["fd320fea0d25d04fabd49dce2b71f6d0c4cb2e12"], "commit": "9431c568308bd82a38e32b67b294fd9f7b64e295", "message": "Update ideas.md", "changes": [[7, 3, "ideas.md"]]}, {"committer": {"date": 1501265951, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501265951, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1aa4caeb70d0f47b6966ceb69dbdf67378294942", "parents": ["4b758ec5c3f50f86d89ea1aba0863cb87c39eba3"], "commit": "fd320fea0d25d04fabd49dce2b71f6d0c4cb2e12", "message": "Update journal.md", "changes": [[54, 0, "journal.md"]]}, {"committer": {"date": 1501016380, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501016380, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "34a43d697da56782ed49f80eb67c2c99aa77bf1b", "parents": ["3441a136ce43472ea8aded086d592df617635ed2"], "commit": "4b758ec5c3f50f86d89ea1aba0863cb87c39eba3", "message": "Update journal.md", "changes": [[8, 0, "journal.md"]]}, {"committer": {"date": 1501015316, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501015316, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9bca6256cec62fad96359b9677cbdcce1e5b0395", "parents": ["432e2658f263dfa9963bfc3ff878ad13129a5ee3"], "commit": "3441a136ce43472ea8aded086d592df617635ed2", "message": "Update ideas.md", "changes": [[23, 7, "ideas.md"]]}, {"committer": {"date": 1501014507, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501014507, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cf52d57bdbc2eb2730c2d2f73c580d3f0d5bb7fa", "parents": ["a220d282c518d49d9234bf1c7e7d3753dc268610"], "commit": "432e2658f263dfa9963bfc3ff878ad13129a5ee3", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501012956, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012956, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f14205a41ccbb5dbbb93376310f111a324a7942f", "parents": ["17d11eabe1a617d8e3b2664be88140f22eee7fa0"], "commit": "a220d282c518d49d9234bf1c7e7d3753dc268610", "message": "fix footer links", "changes": [[3, 3, "episodes/research-recap.html"]]}, {"committer": {"date": 1501012933, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012933, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4d20e7216089342c1676ec0de11a52d169a0e37c", "parents": ["2e71960e97e64c1c4c78c17787cc665d8706582e"], "commit": "17d11eabe1a617d8e3b2664be88140f22eee7fa0", "message": "fix footer links", "changes": [[3, 3, "episodes/welcome.html"]]}, {"committer": {"date": 1501012779, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012779, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1b7455a811253876ef160182929a4334ef9d9eb7", "parents": ["cf74ca68d9c9f16761a47442443067ce20ba77cf"], "commit": "2e71960e97e64c1c4c78c17787cc665d8706582e", "message": "add lamdu notes", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501012697, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012697, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ccefd532437d8c5614412ed2991d86e4e7375ecf", "parents": ["b9624982e0dd3a6d5ed788306895ff490bef2edd"], "commit": "cf74ca68d9c9f16761a47442443067ce20ba77cf", "message": "lamdu writeup", "changes": [[56, 0, "journal.md"]]}, {"committer": {"date": 1500992793, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992793, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7590f74d61d345c0ad1e19ffd739907de4e2389d", "parents": ["3f4021414d722a8bb0f375e845481512101b512a"], "commit": "b9624982e0dd3a6d5ed788306895ff490bef2edd", "message": "Update index.html", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500992727, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992727, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fbadaeb88d258772f2eda2a6c1ca7a3e78e0ab8c", "parents": ["9cfae7beb5f0ba8a968a71017d7c5f82e50f04e2"], "commit": "3f4021414d722a8bb0f375e845481512101b512a", "message": "add link to prototype ideas", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1500992689, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992689, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a8ccd5de2a97602f65b4c98693ba3d2249d19705", "parents": ["69b23b211eebbb2d3756fc187f4257aa33783d57"], "commit": "9cfae7beb5f0ba8a968a71017d7c5f82e50f04e2", "message": "Create ideas.md", "changes": [[32, 0, "ideas.md"]]}, {"committer": {"date": 1500992290, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992290, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0db3a958a08b2b5f8da2a8796d0d389bec752d75", "parents": ["801fa2609ce42a0e76505d54855ed76b313aaa68"], "commit": "69b23b211eebbb2d3756fc187f4257aa33783d57", "message": "Update links.md", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1500991303, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991303, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "196e03d81c25d47a9300d7f4859f45c92f2c2c15", "parents": ["c02f1acd2252793de7f6ddeeb65855ef5ba9d0bd"], "commit": "801fa2609ce42a0e76505d54855ed76b313aaa68", "message": "add google analytics", "changes": [[12, 0, "links.md"]]}, {"committer": {"date": 1500991225, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991225, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "de127e86a8a3a3cd74ad4faacd2a108a4bb72585", "parents": ["f7a822bb94027da0c3ba8c9ae15b41cb10e656fa"], "commit": "c02f1acd2252793de7f6ddeeb65855ef5ba9d0bd", "message": "add google analytics", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1500991100, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991100, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d2adf789f70a7f47bcb0d08d99c6bac76c3a9e86", "parents": ["c3f3bf67b23961f7c414914a544465888cd06258"], "commit": "f7a822bb94027da0c3ba8c9ae15b41cb10e656fa", "message": "add google analytics", "changes": [[11, 1, "episodes/research-recap.html"]]}, {"committer": {"date": 1500991079, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991079, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e469ad64acea9c3f0a6ab05cb345ce366968c394", "parents": ["d0707711f4ab90f363b8e3359c53166b3c6dfd64"], "commit": "c3f3bf67b23961f7c414914a544465888cd06258", "message": "add google analytics", "changes": [[10, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1500990921, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500990921, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9efdfe8f844aa20fb92414a033dcbf509625d34c", "parents": ["e788ce53bd5cb6f86e32c3864de386aeea4a8f40"], "commit": "d0707711f4ab90f363b8e3359c53166b3c6dfd64", "message": "add google analytics", "changes": [[10, 1, "index.html"]]}, {"committer": {"date": 1500990731, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500990731, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1ecae1e8d3956530d0a5aafdd95e924ed4918222", "parents": ["ee339ba4a20421afc3d681bd69afbf368f08c1dc"], "commit": "e788ce53bd5cb6f86e32c3864de386aeea4a8f40", "message": "fix bottom links", "changes": [[3, 3, "index.html"]]}, {"committer": {"date": 1500928015, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500928015, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ab4adf8636be19a546266c12dd45432b7d1df4d9", "parents": ["0e1ea56104172c7262ac0bf20585dcfa40bd64ca"], "commit": "ee339ba4a20421afc3d681bd69afbf368f08c1dc", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1500921884, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500921884, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2e0385ada392a34213f0e3a927668e2cf67e77a", "parents": ["eca07dda28af54f5eabaf646651e160c5dd26300"], "commit": "0e1ea56104172c7262ac0bf20585dcfa40bd64ca", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1500920964, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920964, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b6a5b82bc158ae6aaea8d3e8d5bdcd7538019a13", "parents": ["eb23b3040d464f966e3005979ab7e71b0cd62048"], "commit": "eca07dda28af54f5eabaf646651e160c5dd26300", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1500920806, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920806, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6eb08cedbc1efc01af1b67e92c805a81f7cddad5", "parents": ["e9f8ec1cc820995c13c59b9e8380bfb374c3805f"], "commit": "eb23b3040d464f966e3005979ab7e71b0cd62048", "message": "Update links.md", "changes": [[18, 1, "links.md"]]}, {"committer": {"date": 1500920707, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920707, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "265572da017cf35e961cb8fa6204f954045ce862", "parents": ["abf75bb298072a6f4303224156769989704f65e2"], "commit": "e9f8ec1cc820995c13c59b9e8380bfb374c3805f", "message": "Update journal.md", "changes": [[24, 0, "journal.md"]]}, {"committer": {"date": 1500649855, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500649855, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7aecf0422dc9471ab7c06c1d6391ec30b0abae32", "parents": ["f2e3cbdd8624b94f254fd1823adacc020393b501"], "commit": "abf75bb298072a6f4303224156769989704f65e2", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1500649676, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500649676, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "54dc03eb8865744c14b14b4e42d1d57c73c31e32", "parents": ["06579420bb0fd8fae5ef222e9e5a0e611a81ccce"], "commit": "f2e3cbdd8624b94f254fd1823adacc020393b501", "message": "Update links.md", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1500558085, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558085, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "28b8a20092ccf85cc43b700eaffdcc5a828eebea", "parents": ["33196f53a035199f39b952e8d82a599f3f21afe1"], "commit": "06579420bb0fd8fae5ef222e9e5a0e611a81ccce", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1500558068, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558068, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "576e0637d43a9b4aa24e2b7f94334ef91d630e38", "parents": ["e22fffb110ce5c5917ef89b6ac1b59525c70a1f0"], "commit": "33196f53a035199f39b952e8d82a599f3f21afe1", "message": "yesterday's updates (7/19/17)", "changes": [[11, 0, "journal.md"]]}, {"committer": {"date": 1500558042, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558042, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7961911a5b53ef0d3084f933d83a1df1984d364e", "parents": ["4670a33f503a621f606de0338df1c21d161967fe"], "commit": "e22fffb110ce5c5917ef89b6ac1b59525c70a1f0", "message": "fix links link", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500500477, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500500477, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "15c2c3f8c012a742b115370a6a2bf3a634862edc", "parents": ["207f76e0041efaa099d0fb60864f5528559c3ed9"], "commit": "4670a33f503a621f606de0338df1c21d161967fe", "message": "Update links.md", "changes": [[34, 3, "links.md"]]}, {"committer": {"date": 1500408202, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500408202, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e99b2e341be12d5c7368f4a9184114d7075f0ee6", "parents": ["2495a9c8adc24235ccec7d7a7f825ec9e907afcc"], "commit": "207f76e0041efaa099d0fb60864f5528559c3ed9", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1500407981, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1500407981, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fef628a1477b5f8290e9395d9964582d124a2597", "parents": ["a10dd1f1d37c50f22ac503dec9f1ab89719f2c7c", "709e90be612c2939ea36291db08b813a98c9be23"], "commit": "2495a9c8adc24235ccec7d7a7f825ec9e907afcc", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1500407979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1500407979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b09f215e4f6d78a329d57578ca0b4ff64896a445", "parents": ["91c9fa028171f74a80606df03c1b834e1e45dad2"], "commit": "a10dd1f1d37c50f22ac503dec9f1ab89719f2c7c", "message": "added episode pages and references", "changes": [[154, 0, "episodes/research-recap.html"], [84, 0, "episodes/welcome.html"], [2, 2, "index.html"], [1, 1, "links.md"]]}, {"committer": {"date": 1500407247, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500407247, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "502d475b149ae4ba2e73bcddf123d8f5889ef2f8", "parents": ["91c9fa028171f74a80606df03c1b834e1e45dad2"], "commit": "709e90be612c2939ea36291db08b813a98c9be23", "message": "Update links.md", "changes": [[16, 5, "links.md"]]}, {"committer": {"date": 1500400718, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500400718, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "465b9020edf955d9cac950dc8b6d15301cacf1ba", "parents": ["7f79dbdbee403def60d22f1acda6557f8eb8e340"], "commit": "91c9fa028171f74a80606df03c1b834e1e45dad2", "message": "Update journal.md", "changes": [[9, 0, "journal.md"]]}, {"committer": {"date": 1500399184, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500399184, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9ecad0707c37795d4d0dc6009cec4a218dcd7aa", "parents": ["1dba9bf3ef06f670f3267642ee7af541b9a50976"], "commit": "7f79dbdbee403def60d22f1acda6557f8eb8e340", "message": "added links to research", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1500399100, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500399100, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f341c24af6ac15e6702c1432ece4d06f020932ed", "parents": ["faefba95285f1ba67c0c63cfea9c3030df8c4910"], "commit": "1dba9bf3ef06f670f3267642ee7af541b9a50976", "message": "Update index.html", "changes": [[16, 8, "index.html"]]}, {"committer": {"date": 1500314350, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500314350, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "529a57626ee608be86e02ffcc28871fa2c0b988f", "parents": ["53ececf46a95b881d193f6656f09160602350bd7"], "commit": "faefba95285f1ba67c0c63cfea9c3030df8c4910", "message": "Update links.md", "changes": [[8, 4, "links.md"]]}, {"committer": {"date": 1500313724, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500313724, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1768e45b63413583e945649ca3e207454c3b0226", "parents": ["487c053f8e70c4bb9f40be655a930b3f6f8f320b"], "commit": "53ececf46a95b881d193f6656f09160602350bd7", "message": "Update links.md", "changes": [[1, 2, "links.md"]]}, {"committer": {"date": 1500313254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500313254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "82536187df2a137eaf4a8679b2b426ff6099c217", "parents": ["aed3ac3e9cf4ee5fc0f04f8fba03acabeca44de4"], "commit": "487c053f8e70c4bb9f40be655a930b3f6f8f320b", "message": "Update links.md", "changes": [[31, 11, "links.md"]]}, {"committer": {"date": 1500311128, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500311128, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e9e08099d8255aa29634e4a79d0bd512de978409", "parents": ["8dc0bb21d4d6dacdc94340976a0e237bde05e4c5"], "commit": "aed3ac3e9cf4ee5fc0f04f8fba03acabeca44de4", "message": "Create links.md", "changes": [[73, 0, "links.md"]]}, {"committer": {"date": 1500310271, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500310271, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ded5098cb93feb78faba5ec986a974db164307e9", "parents": ["3753932e3e5349ede5cfbba89759687956cba50d"], "commit": "8dc0bb21d4d6dacdc94340976a0e237bde05e4c5", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1500310031, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500310031, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1e58377bf4489116ad2ba40604e99f4c22b96112", "parents": ["38c4027ca83dd393edc92cffa79c89eab9aae9bb"], "commit": "3753932e3e5349ede5cfbba89759687956cba50d", "message": "Update journal.md", "changes": [[12, 0, "journal.md"]]}, {"committer": {"date": 1500229080, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500229080, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9855d6946d1f49c99d9e780d4f7ea08aa192032a", "parents": ["5747144f8de14ac4c16342ffc311c96e00048da0"], "commit": "38c4027ca83dd393edc92cffa79c89eab9aae9bb", "message": "added research recap podcast", "changes": [[2, 1, "index.html"]]}, {"committer": {"date": 1500066903, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500066903, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4031a09ebf6ea4b8ab60c864a3e5a34c7f7fab65", "parents": ["aff080ee465da567bffe93d385ec68287e38dd5c"], "commit": "5747144f8de14ac4c16342ffc311c96e00048da0", "message": "add journal entry", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1500060145, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500060145, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1eef697a387fdaab4d29a063c5b9904cffbd9e73", "parents": ["a92e1c440993fc3bb39c139becaefe0d02437303"], "commit": "aff080ee465da567bffe93d385ec68287e38dd5c", "message": "update title", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500060097, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500060097, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "db3f3e6e51d3c1df0d2d84f17627408d0cdb1d82", "parents": ["ace634aa12e6650123d998a2094539c1929fb638"], "commit": "a92e1c440993fc3bb39c139becaefe0d02437303", "message": "added new entry", "changes": [[58, 1, "journal.md"]]}, {"committer": {"date": 1499970734, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970734, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0f9c29970b46629947d72a22ef4915597e015261", "parents": ["4720d6c8e0090e5f2f4d25ff6e256f4c24f8168a"], "commit": "ace634aa12e6650123d998a2094539c1929fb638", "message": "update link to journal", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1499970620, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970620, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4b1d77bfc69fb0e70ebd246b2436f86b99c7a275", "parents": ["1ead311874b6f342a3b40a1b5373e854a3bc5f2f"], "commit": "4720d6c8e0090e5f2f4d25ff6e256f4c24f8168a", "message": "trying to convince jekyll to render markdown journal", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1499970314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eb2b7a9ed0b3a37ac1ea758e64f86584ce241fef", "parents": ["370adad619d4aab37f6a1138c478df062c7b316f"], "commit": "1ead311874b6f342a3b40a1b5373e854a3bc5f2f", "message": "made index and journal", "changes": [[109, 0, "index.html"], [29, 0, "journal.md"]]}, {"committer": {"date": 1499966878, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1499966878, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "dd51fbfc57a6a827408fa8f488ef8b53e9bbcfac", "parents": ["6db953a511fcbb3cc295ea37be2e83e897b50a91"], "commit": "370adad619d4aab37f6a1138c478df062c7b316f", "message": "Create CNAME", "changes": [[1, 0, "CNAME"]]}, {"committer": {"date": 1499966362, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1499966362, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0de3abfcba6e54ad703f1f813d093a5d6bb41e57", "parents": [], "commit": "6db953a511fcbb3cc295ea37be2e83e897b50a91", "message": "Initial commit", "changes": [[1, 0, "README.md"]]}] +[{"committer": {"date": 1549995849, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549995849, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e42ee9094bfc209b2d9cc857ecb149c3b806f92a", "parents": ["2ccd2566894571a1232e3f638b8c30ce780ee592"], "commit": "312d421eac6c9a8a1c678e3f994fb52ddab217a3", "message": "## Feb 12, 2019\n\n* TOC\n{: toc }\n\n### Yesterday 02/11/19\n\nAfter struggling to parse Turbine/Hareactive data structures, I sent Simon Friis Vindum an email to schedule a meeting for him to help walk me through it. He shot back a great question, asking for a \"motivating example\" of what I want to accomplish. I thought it'd take me just a couple minutes to sketch out the \"target data structure\" I'd like to parse out of Turbine, but I ended up spending all of yesterday, and likely more time this week on it.\n\nI [started with the simple counter app](https://www.useloom.com/share/8e9c4c3d0626434db70451de80085020), and tried to [manually instrument the required streams to visualize it](https://github.com/stevekrouse/turbine/commit/cd29104d013909905e97a041faacd5bb240e9ce7#diff-21eaf57ee66140aa3ac48e9f4376ea62R170). I ended up doing some random tricks to get it to work, but it was a super valuable exercise.\n\n![image](https://user-images.githubusercontent.com/2288939/52640195-38109280-2ed6-11e9-9f40-44b40ddb9b2e.png)\n\nI'm excited to continue with this for the other 7GUIs projects, like the temp converter, timer, etc. Even my buttons that make buttons! I think it'd be a mistake to try to abstract too early here, but instead focus on the specific goal visualizations and eventually map backwards to a more general tool.\n\nSome little things that I'll need to work at some point:\n\n1. Getting arrows to rotate. I'll probably want to use the `marker` svg tag.\n2. I'll probably want the arrows to stay stationary and have the events move leftwards (to simulate the arrow moving), and give you the ability to scrub time somehow. I can then probably delete the pan and zoom stuff. I wonder if I'll need some background context to make it clear the arrow is \"moving\", such as a tickmarks on the timelines.\n3. I am curious how I'll do layout algorithms for this diagrams in the general case. I shot a message to Josh Horowitz to ask what he did for Pane because he mentioned it was difficult but he came up with something good. I'm mostly curious about the laying out of boxes and arrows at a high level but this will also be interesting even at the smaller levels, of calculating pixels relatively for all things. One such thing that's particularly important is laying out the text labels for Events, particularly when Events occur close together in time. The tooltip solution I have now is meager at best.\n4. Make a sharper distinction between how I treat Behaviors and Events. This will become more apparent for pull-based Behaviors... I should also strike up a discussion with Simon about how his push-based Behaviors are really Dynamics (from Reflex).\n\n**Note:** I just had a great [meeting with JE](/notes/jonathan-edwards/02-12-19) that cleared up some of these questions.\n\n### Future of Coding Meetups on the road\n\nI have a lot of traveling the next few months. It'd be great to take the FoC Meetups on the road with me to these cities somewhere in these dates:\n\n* March 1-14 London\n* March 15-24 SF\n* April 28-May 13 NYC\n\nI think it's worth setting aside time to plan this out, so I will maybe try to this over the coming weeks -- sooner rather than later. I struggle so much with the format... dinner, drinks, at an office, or a bar/restaurant, presenting, etc, etc... I'll ping around and think about it more...\n\n### Week of 02/11/19\n\nTomorrow I'd like to finally write the blog for and then release the Tudor Girba episode. I think it'd also be good to finish up JE's episode and send over for transcription. Then maybe I should work on [DCTP Todos](https://futureofcoding.org/drafts/dctp#todo).\n\nThursday I'm visiting the Vatican, and Saturday I'm doing more touristy stuff, so not sure how much work will get done then. Friday and Sunday are free. I have plenty to do (FRC, visualizer, meetups, DCTP essay), so I'll just have to figure it out.", "changes": [[8, 1, "drafts/dctp.md"], [35, 0, "notes/jonathan-edwards/02-12-19.md"]]}, {"committer": {"date": 1549647697, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549647684, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b35b7214ef30cf4bf7ad805e20871d67f1227c82", "parents": ["b1bb75754891251b2b24f2a83dda81d4d86f74a7"], "commit": "2ccd2566894571a1232e3f638b8c30ce780ee592", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1549647684, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549647684, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["68fa3a56b9a7e356aada52a24a6f79c168207715"], "commit": "b1bb75754891251b2b24f2a83dda81d4d86f74a7", "message": "## Feb 8, 2019\n\n* TOC\n{: toc }\n\nWoke up late, and only got a few hours of work in today. My girlfriend and I have been very active - running all four days we've been in Rome so far!\n\nMy DCTP paper was accepted into Salon de Refuge, which is a mixed blessing. It's great that I know have to take the time to make the piece decent, but it's also not what I was hoping to spend my time on right now... I'll talk it over with JE and get his advice on decreasing the scope of the piece so I can get something good by the workshop on April 2nd. I'll also have to prepare a talk too!\n\n### Turbine buttons that make buttons visualized!\n\nMy favorite cyclic and higher-order FRP example now has a very fun visual to go along with it:\n\n\n\n### Tufte-style polish\n\nGlen was nice enough to read my last entry and make a very kind and helpful comment:\n\n

    "These diagrams were initially disappointing." There is some visual design work you can do to make them clearer. First by organizing things spatially along a grid, and then by using colors and line/font weights to create layers a la Tufte: pic.twitter.com/ShIvO55I3s

    — Glen Chiacchieri (@Glench) February 7, 2019
    \n\n\nThis is a really great point. My diagrams thus far have been created about as fast as possible while trying to get 80% of the details right. They are basically pencil and paper sketches, but done on the computer.\n\nWhile part of me thinks it'd be fun to try and get these sketches pixel perfect, I worry that is a longer task, and I'd be better served right now inspecting the Hareactive/Turbine stream data structures to get a better sense of what I'll be able glean from them to then visualize. Then once I have a better idea of *what's possible*, I may come back and try and make these pictures clearer and more accurate.", "changes": []}, {"committer": {"date": 1549647676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549647676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["9cdd8f2bccfe8f430715dd218a3af21fdbc0f6f3"], "commit": "68fa3a56b9a7e356aada52a24a6f79c168207715", "message": "# Please enter the commit message for your changes. Lines starting\n# with '#' will be kept; you may remove them yourself if you want to.\n# An empty message aborts the commit.\n# On branch master\n# Your branch is up-to-date with 'origin/master'.\n#", "changes": []}, {"committer": {"date": 1549560322, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1fcd3c89318ab45dcefc8f2882d188128737f36a", "parents": ["eac79ff566a882b6bbf3fac92d38cf0c191f98aa"], "commit": "9cdd8f2bccfe8f430715dd218a3af21fdbc0f6f3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560250, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5f6a6c47dbc68038902000b76344698dd3d623f", "parents": ["14de86204f31a74b997cb1003f7d0f27355581ac"], "commit": "eac79ff566a882b6bbf3fac92d38cf0c191f98aa", "message": "## Feb 7, 2019\n\n* TOC\n{: toc }\n\n### Last week till now 02/07/19\n\nI spent a bit more time Thursday last week visualizing single Hareactive events and behaviors. I spoke with JE and he thought I was roughly on the right track. I came up with a simple pan-and-zooming interface and had this wacky idea that we could simply shrink a large object so you'd have to zoom way in to see the values. But then I got bogged down in SVG text layout algorithms and gave up. I felt like I was losing the forest for the trees.\n\nFriday was devoted to researching mbeddr for Dark, which was fun. I watched a bunch of their videos, got it installed, messed around, and, even read a few papers they published. I then finally printed out and read most of Cognitive Dimensions of Notation, which I realized was an instant classic, and I then spent an hour trying to compile a list of \"classics.\"\n\nOn Saturday, I recorded a very long in-person conversation with rntz, which was fun but also exhausting due to the length. It was a fun, math-heavy conversation. I recorded it on my new H4N mic where each of us was speaking into one of the stereo mics, which I think came out OK.\n\nOn Monday, my girlfriend and I flew to Rome for more sunshine in our lives, so I didn't get any work done.\n\nTuesday morning was working on mbeddr for Dark. (I have been scheduling these Dark presentations every 3 weeks or so to give me more time for other work. The next two will be Coda and Retool. Maybe I'll be in SF in March to give one of these in person!)\n\nYesterday and today were mostly research and I got a decent bit done, mostly in pencil and paper and Figma...\n\n### Turbine Viz Sketches\n\nAfter getting lost in the weeds with text layout last week, I realized that I'd be better served prototyping in diagrams first rather than code, so I tried my hand at visualizing the first few 7GUIs tasks.\n\n\n\nI should probably put `{ ... }` or `DomEvent { ... }` as the values in the first line of the counter but I guess I forgot. Besides that it seems to make OK sense. It's a bit weird that the `7` is at the bottom but it appears next to the count in the diagram, but that could be solved in a few different ways, for example putting the `7` where it belongs and sending an arrow up to it.\n\n\n\nThe temp converter has a nice parallel structure, but then there's that awkward 3rd-and-4th switch over on each side. One possible way to simplify this is by only computing C (by converting F to C, combining, and stepping) and then mapping over that Behavior to get back to F. But it's really half a dozen of one or six of the other...\n\nI experimented at the bottoms with heights as a function of magnitude, which I think came out nicely. The loops at the bottom make reasonable sense. The main thing I dislike about this example is that `newValue` at the top and `setValue` at the bottom feel very imperitive, breaking the nice denotations, but I guess that's kind of unavoidable given the way the HTML DOM works...\n\nFor the temp converter, I also tried an [alternative with timelines that all line up that didn't quite come together](https://user-images.githubusercontent.com/2288939/52426228-dcbd5980-2afd-11e9-9e0e-e600fcca4cf5.png).\n\n\n\nThe flight booker was a fun. Here I experimented with a few different ways to display Behaviors. All the way to the right, I have a Behavior that's always true and it's simply a line with a T over it. Then down at the bottom-left corner, I have a Behavior that's switches between T/F a few times, with hard lines between switches, and soft dotted-lines between where computations occurred but returned the same value as before. In the actual prototype you could imagine hovering over that place to see the computation that occurred there. (However, as I reflect on it now, this diagram might reflect the implementation detail that these behaviors are push-based too strongly...) One interesting note: I realized while making this diagram that the `keepWhen` function is a better use that what I actually had in the code (`filterApply`).\n\nI don't mind that the GUI elements are spread out haphazardly on the canvas here, as long as elsewhere I can see them in the order that they appear on the page. Another possible interface is to not have them rendered in the SVG at all, but when you hover over them, it'll light up in the respective GUI, much like the HTML devtools inspector.\n\nThis is also the first time I experimented with putting a lot of code (for the lift in the bottom-left) on the screen. It doesn't quite make sense in context (I just copied and pasted), but it's a reasonable placeholder. In the first version of the prototype, this will not be possible, because we won't have access to the source code.\n\nThe loopy bits for the background colors of the textboxes is pretty straightforward. I like how that came out much, much more than with the temp converter, because setting the background color to a Behavior feels more semantic.\n\n\n\nIt was fun to work with time and higher-order flows. I simplified this diagram by assuming access to a \"seconds since the app started\" stream that you see in the top-right and bottom-left. Like the last example, I put some \"filler code\" for the `snapshotWith` that won't be possible in the prototype.\n\nThe higher order stream came out well. I think it's important to keep them lined up the way I did for clarity. I don't know if it's obvious that the third stream is always `5.7`. Maybe I should put the dotted line markers at `5.7` throughout and put the `5.7` at the end as well? The dotted markers are an interesting trick, but there's also the step-function approach. And here's another idea: number lines with firm line markers usually represent continuous numbers, but that's how I've been representing Events. Maybe I should represent events as circles with no line (or a really stylized / faded line) and leave the timeline to Behaviors...\n\n#### Deep diagrams\n\nThese diagrams were initially disappointing. Even when I look at them, they are immediately intimidating, even off-putting. They don't yield to insights in 3 seconds, like many other visual aids do.\n\nHowever, upon reflection, I thought about how many of Tufte's diagrams take many minutes of study to fully grasp, and then even more time to mine for interesting insights. So while these diagrams might take 30 seconds or 5 minutes to comprehend, that's an order of magnitude better than an hour or two to understand the code. And they will likely be helped along by *liveness* when they are connected to GUIs that can be interacted with, turning the crank on these diagrams.\n\n### Next steps 02/07/19\n\nI'm going to finish preparing for my mbeddr presentation for Dark in 3 hours tonight. Tomorrow and Monday I will try to continue pushing this work forward for my meeting with JE on Monday, maybe switching to coding some of this up... I'd like to do a visualization of my buttons that create buttons example before that.\n\nAs far as next steps on coding, I'd like to go high level and see what I can inspect/crawl out of Turbine stream and component data structures to turn into the diagrams above. Then I'll combine the low-level work from last week with this high-level work to have beautiful diagrams! (I also need to do a bunch of refactoring with last week's code. It was getting a bit annoying working with SVG in the way I was. I am wondering if I should build an abstraction over SVG that converts it to a normal X-Y plane...)\n\nI think Tuesday next week would be a good time to finally publish the Tudor Girba podcast, and finish editing the JE podcast and send it off for transcription.\n\nWednesday could be a good time for some FRC work. Thurs and Friday I'll plan on getting back to working on the research.", "changes": []}, {"committer": {"date": 1549560246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5f6a6c47dbc68038902000b76344698dd3d623f", "parents": ["6458a7aee50d1669a86d3d3935ce65f20ddb3407"], "commit": "14de86204f31a74b997cb1003f7d0f27355581ac", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1549560244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56460783ee4364d32f248796563bd863797b51b3", "parents": ["abe728c2cb5df12865c6b83521b0eabd668537e8"], "commit": "6458a7aee50d1669a86d3d3935ce65f20ddb3407", "message": "removed forestry", "changes": [[0, 26, ".forestry/settings.yml"]]}, {"committer": {"date": 1549103580, "timezone": "+0000", "name": "Forestry.io", "email": "support@forestry.io"}, "author": {"date": 1549103580, "timezone": "+0000", "name": "steveykrouse@gmail.com", "email": "steveykrouse@gmail.com"}, "tree": "8acce7078e4ad3ba6a7272ad6c5fb8eb780c34a6", "parents": ["301633e5428e2c79ae658ff28ee3279a0f59c845"], "commit": "abe728c2cb5df12865c6b83521b0eabd668537e8", "message": "Update from Forestry.io - Updated Forestry configuration", "changes": [[26, 0, ".forestry/settings.yml"]]}, {"committer": {"date": 1548874832, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56460783ee4364d32f248796563bd863797b51b3", "parents": ["c1a33d455973146bcfe97247a223e89d47d7d686"], "commit": "301633e5428e2c79ae658ff28ee3279a0f59c845", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bc15aed83118813ddd9c078ce37f30c183fd92", "parents": ["90e04f0a74b4c27e4eae156610877e3bf87012b6"], "commit": "c1a33d455973146bcfe97247a223e89d47d7d686", "message": "## Jan 30, 2019\n\n* TOC\n{: toc }\n\nAaaaaaaand, I'm back! It's been too long since I've done research and a proper log entry. Instead of struggling through getting set up with working on Hareactive/Turbine, I thought it better to wait until I spoke with Simon, and use the waiting time for other work, such as freelancing and the podcast. I've also been obsessed with the Sword of Truth series on audio-book, so that's to blame as well.\n\n### Podcast update 1/30/19\n\nAs far as the podcast goes, it's been productive:\n\n* The Tudor Girba episode is ready to go, including the transcript, but I just need to write a summary blurb at the top and then publish and submit to HN.\n\n* The JE episode is edited. It just needs an intro and outtro, transcript and blurb.\n\n* I recorded an conversation with Cyrus Omar\n\n* I am speaking with with Michael Arntzenius *in person* on Saturday!\n\nThis will leave me with plenty of podcast editing and publishing to do in February in Rome. (My girlfriend and I are headed to Rome for ~3 weeks for more sunshine in our lives. And Italian food, of course.)\n\n### Balance update 1/30/19\n\nI've been doing a better job of balance than in the past. My only remaining problem is that it's a bit difficult to decide when to do what, and when to switch. I've noticed that I get most of my research work done in the days before meeting with JE, and most of my work for Dark done in the days before meeting with Dark. I don't often meet with FRC, so I sometimes forget about them, but I have two active projects for them that are waiting for whenever I have the time...\n\nI'm glad I did the research on Modern Smalltalks for Dark. It was fustrating at the start, but well worth it at the end. Dreading doing it for mbeddr and TLA+ but I know I'll be thankful afterwards. The plan is to spend all of Friday on Dark stuff.\n\nYesterday, today, and tomorrow are research so as to have impressive things to show and tell to JE tomorrow.\n\nNext week will be Dark, FRC, and some research, some podcast.\n\n### Call with Simon Friis Vindum\n\nI finally got Simon on the phone! It's been a number of weeks of waiting for him to finish up with his exams. He was wonderful. We chatted for ~2 hours, first about a few issues I opened on his projects, then about the devtool, and finally I shared my screen and he help get me set up in the right code environment and got started adding SVG elements to the Turbine library.\n\nOne issue he mentioned with the devtools is that intermediate stream variable names don't get captured in any data structure, so people will have to figure those out from context.\n\nWe also talked a bit about how push-based might has a memory leak problem because parents have references to children, that otherwise would be garbage collected.\n\n### Turbine devtool\n\nFinally the rubber is hitting the road! It's awesome to see this coming together in a real live project at long last. Simon and I came up with a plan for moving forward:\n\n1. Add SVG elements to Turbine. Done, [pending fixes and merge](https://github.com/funkia/turbine/pull/102).\n2. Create a visualization for a simple number stream. [Done this morning.](https://github.com/stevekrouse/turbine/blob/f05807fcbf4abcb3eeb31234eb723c5ee9f90fca/examples/simple/index.ts)\n3. Visualize push-based stream (label between intervals)\n4. Visualize pull-based stream (constantly sample and maybe graph)\n5. Visualize non-numbers\n6. Visualize data structure dependencies, starting with map...\n7. Visualize higher order...\n8. Visualize cyclical...\n9. Visualize Turbine/HTML-based streams\n10. Use the devtool to finish 7GUIs (add types?), and submit a pull req for that.\n 11. Write a paper/presentation/video about the devtool\n\nI realized this morning about all the important little things I need to figure out now, such as dynamically displaying all the stream data. I settled on the fastest solution I could think of: simple arrow based pan and zoom. I wonder if I should go extreme with it and just make the font of large objects really tiny and you can zoom in to see their properties. That'd work as a placeholder.\n\nI feel myself already wishing to \"eject\" from a devtool, so I can do cool things, such as when you hit space, it pops open a box where you can search for operations like in Facebook origami. But instead you can type, with autocomplete, various flow names and it'll suggest flow combinators based on their types, and supply default arguments, and show the output flow as you scroll through the options. Or maybe the options are the output flow!\n\n### Ink and Switch\n\nLast week I met with the Ink and Switch team. It seems like it's former Heroku people doing research towards a company a la Dark. It was really fun! I just got off a call with pvh from their team. He showed me their [farm](https://github.com/inkandswitch/farm) software. So cool! He was repeating back my whole mission back at me! He calls it \"Personal Software\". They are using it at their company - right now it's a dashboard of a todolist, personal updates, a chat thing. It's living! Amazing! It makes me think that the day will come soon when personal software is upon us. I can already imagine moving the Future of Coding Slack to a platform like this... Very cool!\n\nTheir underlying technology is similar to dat/beaker/scuttlebutt/ifps. pvh had to explain how the internet works to me, Nat, UPD, WebRTC, etc, for me to follow. It's build on top of a JSON CRDT so that it causes the least conflicts. It's a peer to peer data model, and", "changes": []}, {"committer": {"date": 1548874801, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bc15aed83118813ddd9c078ce37f30c183fd92", "parents": ["b3310adf87f91e8c8fcf7db24b3a41cb94610af7"], "commit": "90e04f0a74b4c27e4eae156610877e3bf87012b6", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548874800, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39586fa6cf6396a6b3fedc39258b2ca59dbfb2ec", "parents": ["d09d2ce909eb25ee69c56398801dc12a0bca1615"], "commit": "b3310adf87f91e8c8fcf7db24b3a41cb94610af7", "message": "added ink and switch presentation", "changes": [[135, 0, "drafts/ink-and-switch.md"]]}, {"committer": {"date": 1548346761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e40cc14003504858b840ff3b294134e2f6d7cd19", "parents": ["ba6788ae41fa6175d242eafbb54f7074a863f76a"], "commit": "b2af49f21e7ebb3dfde6ee788cee48100162caf4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548346759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "280fb39627116ceaaba8a790622c7f1f831dd702", "parents": ["ea2492bd4675170734dbe8b3a9d035855255ad07"], "commit": "ba6788ae41fa6175d242eafbb54f7074a863f76a", "message": "add dctp draft 1 feedback, and responses", "changes": [[287, 3, "drafts/dctp.md"]]}, {"committer": {"date": 1548091944, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c575b3d1bcaf2cbc8e63ef1a0502c776897d6e3", "parents": ["d05647ff413501ec9753ad66f8e9ad1fc90b06d3"], "commit": "ea2492bd4675170734dbe8b3a9d035855255ad07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548091942, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28c097b789ce6e50c1d5702965014864aec1af8b", "parents": ["3186ade2e6d2394feffdd8612744dea00606d689"], "commit": "d05647ff413501ec9753ad66f8e9ad1fc90b06d3", "message": "tidy up dctp draft 1", "changes": [[67, 63, "drafts/dctp.md"]]}, {"committer": {"date": 1548082492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "188ee9e5d4a2a6173ebc73f4f41221332ca7d22a", "parents": ["7a2c1d89fd48080b4771a72b6c2aefbe8ca824d5"], "commit": "3186ade2e6d2394feffdd8612744dea00606d689", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548082490, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4bc6ec345a74c87ddcc6cd49ec72ada97dc9499", "parents": ["29c5f0081b7f18e8e4df9474a2b1bfd533202e38"], "commit": "7a2c1d89fd48080b4771a72b6c2aefbe8ca824d5", "message": "dctp draft 1 mostly done", "changes": [[266, 84, "drafts/dctp.md"]]}, {"committer": {"date": 1548007049, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0cd383e7f817d53ea8c7a245e22a3d4d8e4dfe22", "parents": ["1e2d49025fba1d51f937ffc24fb5ea89022880ef"], "commit": "29c5f0081b7f18e8e4df9474a2b1bfd533202e38", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1548007047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e486532efb791dd403c836339946e85c45185285", "parents": ["aa9c9d058e5601b0caaa816659bf733de9e424fa"], "commit": "1e2d49025fba1d51f937ffc24fb5ea89022880ef", "message": "continue dctp", "changes": [[97, 40, "drafts/dctp.md"]]}, {"committer": {"date": 1547986003, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e5cb339b02daff6b5cc65fdd3bdfe97fee8af33a", "parents": ["1d5ee28823790ada777f261e664eaec342195d38"], "commit": "aa9c9d058e5601b0caaa816659bf733de9e424fa", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547986002, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e515c62dfa1d2e2726515d9f6531aa83f586cac3", "parents": ["7cab41a300a52f0f2382777039a28a7c04160506"], "commit": "1d5ee28823790ada777f261e664eaec342195d38", "message": "reorganize dctp second section", "changes": [[72, 45, "drafts/dctp.md"]]}, {"committer": {"date": 1547983229, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "995984f46c159ab152817b2ff8ea25c5c31cd96c", "parents": ["0baa8e6c1095da563f00e3548b516081fb881377"], "commit": "7cab41a300a52f0f2382777039a28a7c04160506", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547983227, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f614179f3deda83015e5f9781ebcf73bf8e1f922", "parents": ["0e1d9953b393470cea02c68d26cd20be132da46e"], "commit": "0baa8e6c1095da563f00e3548b516081fb881377", "message": "add animation examples to dctp essay", "changes": [[123, 65, "drafts/dctp.md"]]}, {"committer": {"date": 1547846698, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2b29822f4690b4b0e20dd63b9f2916e40d4eb1f0", "parents": ["8148b45d47a103c00fdb047a90e5bb335e63e9a4"], "commit": "0e1d9953b393470cea02c68d26cd20be132da46e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846696, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2c020b9f17a938444cdfb80c58754c5a77aa17a", "parents": ["3dbe157b1988a661cbea7a3cfaabf99dc581defb"], "commit": "8148b45d47a103c00fdb047a90e5bb335e63e9a4", "message": "fix broken link", "changes": [[1, 1, "index.md"]]}, {"committer": {"date": 1547846608, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3ac41974f4e547c05b78501790ce589e1e9ec01", "parents": ["bc2cbd0ebb0b107bc5616d73cc2a0c7bde5983ab"], "commit": "3dbe157b1988a661cbea7a3cfaabf99dc581defb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547846607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3629878a0b7c4a1d9f3c3f6e28214b6282df1ee3", "parents": ["67333ec4f6d348ad4266a27e0515f85305f7644f"], "commit": "bc2cbd0ebb0b107bc5616d73cc2a0c7bde5983ab", "message": "/about spelling fixes", "changes": [[4, 3, "about.md"]]}, {"committer": {"date": 1547840484, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "540e2248150f97eb1d0ef057cc389f94808f9e82", "parents": ["1ee958eae3567287cff6fe737fe5aaef5c00dd14"], "commit": "67333ec4f6d348ad4266a27e0515f85305f7644f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547840482, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6fd230d2742df8398c46cd0f1add854b2a81fc4b", "parents": ["1542462504a1dbde027ebaf2fef69d65c1494e1a"], "commit": "1ee958eae3567287cff6fe737fe5aaef5c00dd14", "message": "continued dctp", "changes": [[76, 52, "drafts/dctp.md"]]}, {"committer": {"date": 1547812506, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b1af9579db79d718b700a6bae1c0a3462bbe8c8", "parents": ["25eb6a88d20c4492691a64044d092aa84a7cd8ae"], "commit": "1542462504a1dbde027ebaf2fef69d65c1494e1a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547812505, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "33b5023018ffb8b90e717d7c09d1dcb3fc1c1049", "parents": ["8b299cdb0b8f901f5ee3c19fdc9322a745abd4dc"], "commit": "25eb6a88d20c4492691a64044d092aa84a7cd8ae", "message": "continuing writing, conal elliott war cry", "changes": [[75, 43, "drafts/dctp.md"]]}, {"committer": {"date": 1547769738, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d90cf4cf08c905886cad7ae5e6d4c69751367d88", "parents": ["6cd6999c1f09f9c1d03b60359d50c3371cc677e9"], "commit": "8b299cdb0b8f901f5ee3c19fdc9322a745abd4dc", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547769736, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b2ef3c2f31f65bf1b8081d980a9a1879c92b720", "parents": ["b5cc2696c94538352f9be682b0e5f71438a67356"], "commit": "6cd6999c1f09f9c1d03b60359d50c3371cc677e9", "message": "late night dctp writings", "changes": [[78, 15, "drafts/dctp.md"]]}, {"committer": {"date": 1547748525, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dde5aa52076dc6715ad3c2da9a63f661b726b43c", "parents": ["0006abbfb8ebfc1c65afb031b9e90116cc3f6ec8"], "commit": "b5cc2696c94538352f9be682b0e5f71438a67356", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547748523, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a16bf5f8a385b6fdb6e7547ce7aaee510fb29fe5", "parents": ["1b695f789113c3b12c7b08f5f98a9f81851582a0"], "commit": "0006abbfb8ebfc1c65afb031b9e90116cc3f6ec8", "message": "continued explaination of dctp", "changes": [[156, 0, "drafts/dctp.md"]]}, {"committer": {"date": 1547728877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c823883cb4b280378d0c9067b2142742a27aaea8", "parents": ["fe62ecec6b2e308f0e88fc63cc8f2bd34fc209d6"], "commit": "1b695f789113c3b12c7b08f5f98a9f81851582a0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8a83c02ebe84532d11fc4c3e0c5fcdc8243de6b4", "parents": ["b617b42f211ace33695e73360b88ef28897240a7"], "commit": "fe62ecec6b2e308f0e88fc63cc8f2bd34fc209d6", "message": "## Jan 17, 2019\n\nSome quick updates:\n\n* Realizing I got the year wrong on the title of my last entry. It's 2019, not 2018!\n* Feeling great! At coffee shop with my girlfriend today for a change of scenery.\n* Just got back from a 4 day trip to Rome. Great vacation. Got some sun, had great tomato sauce and pasta, relaxed, and Tweeted. We may go back for a longer trip (a couple of weeks) to live and work there for the sun and food while London is gloomy.\n* London is sunny today so I will run this afternoon.\n* I had a wonderful call with Conal Elliott on Monday. Along with JE's prodding, I decided to try my hand at an essay explaining DCTP and Conal's vision, and maybe submit to Salon de Refuge.\n* Great call with JE yesterday. Going to continue with hareactive, turbine, etc, but mostly waiting to talk to Simon Friis Vindum and team after their exams are finished on the 25th of Jan. Making a hareactive canvas library sounds fun. JE also suggested finishing 7GUIs and the devtools together which is a great idea.\n* Spent a good amount of last week researching Smalltalk for Dark, which I hope to publish at some point. Will need to figure out with them when the next session will be. Maybe in two weeks? Maybe TLA+?\n* Excited to host an online FoC meetup Sunday night GMT. Not sure how to structure it... will figure something out...\n* For more of what I'm working on, [head over to the Github board](https://github.com/stevekrouse/futureofcoding.org/projects/3)", "changes": []}, {"committer": {"date": 1547727615, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8a83c02ebe84532d11fc4c3e0c5fcdc8243de6b4", "parents": ["814215947849c5c69ce8bd569cdb74bd1ceb03e0"], "commit": "b617b42f211ace33695e73360b88ef28897240a7", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547727614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f396ab64567adf1db57db36e82fb7b3de920c9d", "parents": ["ddb16ba9da195fdcf3c7e744caa53c7314776843"], "commit": "814215947849c5c69ce8bd569cdb74bd1ceb03e0", "message": "add JE notes 01-16-19", "changes": [[41, 0, "notes/jonathan-edwards/01-16-19.md"]]}, {"committer": {"date": 1547726108, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34fd8d96422dc433495cfc78dea088df918a5c49", "parents": ["ebf4ae0f8da6c7d44479b87cdfd2b94141d1add4"], "commit": "ddb16ba9da195fdcf3c7e744caa53c7314776843", "message": "updated git log", "changes": [[2, 1, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1547726106, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0d31a98e3c8e38d72578adee1f0a7441c421ae6a", "parents": ["d2208b712756a521a524fe74e3f752e24ff0d94c"], "commit": "ebf4ae0f8da6c7d44479b87cdfd2b94141d1add4", "message": "added conal call notes", "changes": [[0, 54, "notes/conal-elliott.md"], [103, 0, "notes/conal-elliott/01-14-18.md"], [43, 0, "notes/conal-elliott/index.md"]]}, {"committer": {"date": 1546797917, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac7409136405672ea8ba76faf5b4c412ca64df46", "parents": ["a70f1200a2de4e2ad9a08a3e0c48847f4b63da73"], "commit": "d2208b712756a521a524fe74e3f752e24ff0d94c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797776, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "18fed776e09f7be757ac6f02366df465b0635515", "parents": ["8322e1879b04e1f382648a56021bdb6f3627f832"], "commit": "a70f1200a2de4e2ad9a08a3e0c48847f4b63da73", "message": "## Organizing my work on 1/6/18\n\nHaven't journaled in a while. Moved a lot of this thought to Github Issues which I don't love to be honest but it works ok.\n\nFeeling like progress is slow. Resisting working on podcasts. Feels like busy work. But I should probably knock it out.\n\nAlso resisting working on Dark but it'd probably make me feel great to install one of those and spend 4 hours on it. Maybe tomorrow.\n\nOk let's say today is publish Vlad.\n\nTomorrow is 4 hours Dark.\n\nMaybe Tuesday I can do Turbine 7GUIs. Maybe just keep with Dark if I have momentum.\n\nWednesday another 4 hours Dark or 7GUIs or prep JE.\n\nThursday is prep for JE. 4 hours should do it. Maybe find time to start earlier in the week too.\n\nLet's say no Tudor podcast work this week. No rush there...maybe let's hold off scheduling next podcasts (Cyrus and Hillel) until Feb and am through publishing Tudor and JE. I've got enough on my plate with Dark back in the mix and Tudor's 3 hour podcast. And all the P4 work! (And the community! And FRC!)\n\nOk so this week, the priorities are:\n\n* Prep JE\n* Dark\n* Vlad publish\n\nLet's say no FRC, Turbine/P4, community, Tudor (but that just means only if I really want to). Ok now my week feels reasonable. For Dark, I'll try with whatever feels easiest and keep switching until I'm mostly done with one. Maybe Pharo and GT because Tudor may help me?", "changes": []}, {"committer": {"date": 1546797288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "18fed776e09f7be757ac6f02366df465b0635515", "parents": ["cafb1fe0d2d1a401c6c4a8f27cba1d92f2846ebe"], "commit": "8322e1879b04e1f382648a56021bdb6f3627f832", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546797287, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28ff6a760c21501f0befddf644cfa44fe0068371", "parents": ["24348a82df0beb97de8e62a7f870eb515ea2bfd9"], "commit": "cafb1fe0d2d1a401c6c4a8f27cba1d92f2846ebe", "message": "added episode 35, vlad magdalin", "changes": [[583, 0, "episodes/035.md"], [2, 0, "index.md"]]}, {"committer": {"date": 1546792240, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d94f24c24275d616bdb35e2f054990f98fbd7123", "parents": ["8b419779ac1f557cd1c0398cf43f660697021f09"], "commit": "24348a82df0beb97de8e62a7f870eb515ea2bfd9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1546792238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e2f9899cab28cd5c639da90d852b8a00478c142", "parents": ["c7ac6c48ca5d8667618d8904f13bc27418cd8aad"], "commit": "8b419779ac1f557cd1c0398cf43f660697021f09", "message": "reogranizd front page text", "changes": [[3, 11, "index.md"]]}, {"committer": {"date": 1545740034, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e889c24910af303d6f40f73cae41fb22d73aaf3", "parents": ["43a27eda1b15344e11308259deb3a5ac122bb5ad"], "commit": "c7ac6c48ca5d8667618d8904f13bc27418cd8aad", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545740033, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "980cc87c304cf1038b5cf22c8c40405a203c2e0c", "parents": ["dc10b83e968e7f4b76679f299af0f2ca3e06b683"], "commit": "43a27eda1b15344e11308259deb3a5ac122bb5ad", "message": "added pictures, spellcheck, removed sections, clean up intro", "changes": [[34, 45, "about.md"]]}, {"committer": {"date": 1545739559, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3139f687230ebbb992a63aad16020abc7d911fb2", "parents": ["dfac3fa0ae7c920604a48e9d12cbbe4ffa356d83"], "commit": "dc10b83e968e7f4b76679f299af0f2ca3e06b683", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f9fe11f8a41290dae5aa74d69a86b4f4f4b00d7", "parents": ["df4c41cc00588fb0180f0411a9bef3ed4ce5dcbb"], "commit": "dfac3fa0ae7c920604a48e9d12cbbe4ffa356d83", "message": "oops wrong subdirectory", "changes": [[0, 26, "assets/style.scss"]]}, {"committer": {"date": 1545739497, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dea6a24d8cec1d7c902536c3e5164d397a1a732a", "parents": ["20b08ab036ad3494729a1935b988af359f00202c"], "commit": "df4c41cc00588fb0180f0411a9bef3ed4ce5dcbb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545739496, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9a0fae1cbc9ac23f7a7aa228191f47b75bbba13", "parents": ["56a849f47f7f2a0f3b0de686535b03cb2075923b"], "commit": "20b08ab036ad3494729a1935b988af359f00202c", "message": "re-added assets after removing lfs", "changes": [[26, 0, "assets/style.scss"]]}, {"committer": {"date": 1545398289, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3771b6e6ee9e48c5ab664c21ff529f04b6904ac9", "parents": ["6e442d0498a17b6ad1a2c25d1ba180c437f27c0e"], "commit": "8f7d8538a518203e8ff1001fbd3c9efa56c147b8", "message": "updated git log", "changes": [[42, 36, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545398288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1892d76a32883f6011b0b8f253cbd316300161e", "parents": ["ffe61fa8cd0a22044629bdf38abff06aa2f8e946"], "commit": "6e442d0498a17b6ad1a2c25d1ba180c437f27c0e", "message": "force git to notice _data/files.csv changes", "changes": [[7, 6, "README.md"]]}, {"committer": {"date": 1545397879, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "328514c1379543593923c52fc4480d07dc383815", "parents": ["2370dda3b89da5e682e992d447687c394165015c"], "commit": "ffe61fa8cd0a22044629bdf38abff06aa2f8e946", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545397877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "92f38fce02a431ca3106c1ff80054a5dd3521144", "parents": ["8d1e638838e962514e296a0504c4e1121e25dfdd"], "commit": "2370dda3b89da5e682e992d447687c394165015c", "message": "migrated all html to md", "changes": [[11, 23, "404.md"], [7, 0, "episodes/001.md"], [76, 0, "episodes/002.md"], [13, 0, "episodes/003.md"], [9, 0, "episodes/004.md"], [12, 0, "episodes/005.md"], [12, 0, "episodes/006.md"], [9, 0, "episodes/007.md"], [9, 0, "episodes/008.md"], [28, 0, "episodes/009.md"], [14, 0, "episodes/010.md"], [14, 0, "episodes/011.md"], [9, 0, "episodes/012.md"], [21, 0, "episodes/013.md"], [65, 0, "episodes/014.md"], [13, 0, "episodes/015.md"], [110, 0, "episodes/016.md"], [9, 0, "episodes/017.md"], [144, 0, "episodes/018.md"], [41, 0, "episodes/019.md"], [33, 0, "episodes/020.md"], [27, 0, "episodes/021.md"], [37, 0, "episodes/022.md"], [35, 0, "episodes/023.md"], [27, 0, "episodes/024.md"], [44, 0, "episodes/025.md"], [45, 0, "episodes/026.md"], [44, 0, "episodes/027.md"], [44, 0, "episodes/028.md"], [23, 0, "episodes/029.md"], [1168, 0, "episodes/030.md"], [481, 0, "episodes/031.md"], [1074, 0, "episodes/032.md"], [684, 0, "episodes/033.md"], [897, 0, "episodes/034.md"], [0, 84, "episodes/1-welcome.html"], [0, 89, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [0, 89, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [0, 86, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [0, 102, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [0, 153, "episodes/14-research-recap-seven-master-planning.html"], [0, 91, "episodes/15-raising-genius-with-scott-mueller.html"], [0, 185, "episodes/16-research-recap-eight-life-and-work-planning.html"], [0, 87, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [0, 194, "episodes/18-research-recap-nine.html"], [0, 133, "episodes/19-building-universe-joe-cohen.html"], [0, 154, "episodes/2-research-recap.html"], [0, 33, "episodes/20.md"], [0, 27, "episodes/21.md"], [0, 37, "episodes/22.md"], [0, 35, "episodes/23.md"], [0, 27, "episodes/24.md"], [0, 44, "episodes/25.md"], [0, 45, "episodes/26.md"], [0, 44, "episodes/27.md"], [0, 44, "episodes/28.md"], [0, 23, "episodes/29.md"], [0, 91, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [0, 1168, "episodes/30.md"], [0, 481, "episodes/31.md"], [0, 1074, "episodes/32.md"], [0, 684, "episodes/33.md"], [0, 897, "episodes/34.md"], [0, 86, "episodes/4-research-recap-two.html"], [0, 87, "episodes/5-samantha-john.html"], [0, 87, "episodes/6-research-recap-three.html"], [0, 86, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [0, 86, "episodes/8-research-recap-four.html"], [0, 106, "episodes/9-research-recap-five.html"], [0, 295, "essays/eve/index.html"], [227, 0, "essays/eve/index.md"], [34, 35, "index.md"], [0, 9, "reflections/14.html"], [5, 0, "reflections/14.md"], [0, 9, "slack-readme.html"], [5, 0, "slack-readme.md"], [0, 9, "slack.html"], [5, 0, "slack.md"]]}, {"committer": {"date": 1545393138, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e10a6dffa45059d70ca6ffe9d7e112857525610", "parents": ["323d192795be87df70847f6f4b0d17548659af17"], "commit": "8d1e638838e962514e296a0504c4e1121e25dfdd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545393137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c91a225dbb0636ac0a57f9e151653a1888581afb", "parents": ["7778ef349ea6a1f80b1cb3cc1c35b98d1b5148c9"], "commit": "323d192795be87df70847f6f4b0d17548659af17", "message": "refactored analytics.html into _layouts/default.html", "changes": [[0, 9, "_includes/analytics.html"], [9, 0, "_layouts/default.html"], [1, 1, "about.md"], [1, 1, "drafts/app-idea.md"], [1, 1, "drafts/boundaries.md"], [1, 1, "drafts/casual.md"], [1, 1, "drafts/invented-or-discovered.md"], [1, 1, "drafts/learnable-programming.md"], [1, 1, "drafts/power.md"], [1, 1, "drafts/regex-for-humans.md"], [1, 1, "drafts/visual.md"], [1, 1, "essays/sissies.md"], [1, 1, "ideas.md"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/aidan-cunniffe-call-11-29-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/bret-victor/SimulationAsAPracticalTool.md"], [1, 1, "notes/bret-victor/dynamicland.md"], [1, 1, "notes/bret-victor/explorable-explanations.md"], [1, 1, "notes/bret-victor/index.md"], [1, 1, "notes/bret-victor/kill-math.md"], [1, 1, "notes/bret-victor/learnable-programming.md"], [1, 1, "notes/bret-victor/magic-ink.md"], [1, 1, "notes/bret-victor/questions.md"], [1, 1, "notes/bret-victor/substroke.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [1, 1, "notes/dynamicland-zine.md"], [1, 1, "notes/future-authoring.md"], [1, 1, "notes/glen-chiacchieri-12-29-17.md"], [1, 1, "notes/halfway-there-cis-240.md"], [1, 1, "notes/historical-accidents.md"], [1, 1, "notes/jaime-brandon-call-12-12-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/jcr-licklider.md"], [1, 1, "notes/jonathan-edwards/06-14-18.md"], [1, 1, "notes/jonathan-edwards/07-10-18.md"], [1, 1, "notes/jonathan-edwards/08-21-18.md"], [1, 1, "notes/jonathan-edwards/09-26-18.md"], [1, 1, "notes/jonathan-edwards/10-09-18.md"], [0, 1, "notes/jonathan-edwards/11-09-18.md"], [0, 1, "notes/jonathan-edwards/11-21-18.md"], [0, 1, "notes/jonathan-edwards/12-12-18.md"], [1, 1, "notes/joy-js-review.md"], [1, 1, "notes/kevin-lynagh.md"], [1, 1, "notes/live/2018.md"], [1, 1, "notes/michael-nielsen.md"], [1, 1, "notes/nicky-case-call-11-1-17.md"], [1, 1, "notes/no-silver-bullet.md"], [1, 1, "notes/samuel-loncar.md"], [1, 1, "papers/comprehensible-frp/feedback.md"], [1, 1, "papers/comprehensible-frp/index.md"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "reflections/10.md"], [1, 1, "reflections/11.md"], [1, 1, "reflections/12.md"], [1, 1, "reflections/13.md"]]}, {"committer": {"date": 1545336859, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "72ac5baef9662f70e4ae5b8335c7c05b5418e428", "parents": ["2b2e57371b57e88ac9513498226f8511cb942f1d"], "commit": "7778ef349ea6a1f80b1cb3cc1c35b98d1b5148c9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545336858, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8ec4bce187bac47cfc152e906604bb5e3413100a", "parents": ["1a7af56218460c9e64d13388742012b8960f4602"], "commit": "2b2e57371b57e88ac9513498226f8511cb942f1d", "message": "added navbar, github button, patreon button to all md pages", "changes": [[12, 20, "_layouts/default.html"], [26, 0, "assets/css/style.scss"], [0, 206, "index.html"], [149, 0, "index.md"]]}, {"committer": {"date": 1545329462, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "882fdbc7858484242f880472aedc1b45118d9a27", "parents": ["28e9bc5d78e9139a18358534342be8690f75c079"], "commit": "1a7af56218460c9e64d13388742012b8960f4602", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545329460, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dbc95b1ac269999c182b55aed2fa6b8e0cb6c9e2", "parents": ["b74910f2fb9487f1422cc3e7bac7b17090ed263e"], "commit": "28e9bc5d78e9139a18358534342be8690f75c079", "message": "add link to edit pages in footer on github", "changes": [[36, 0, "_layouts/default.html"]]}, {"committer": {"date": 1545307782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c695d9aebb2f38a62d95d16acc927e5fec5300b4", "parents": ["d7b952864a5c397147abb83c2daff665703393df"], "commit": "c97f5b8362b01f863a78ff4afbe91fedb5959982", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1545307779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6372b59e0a9342a8146681e7337285fb8e763922", "parents": ["f8d19075bfa49a149de73e12ee5efce619c800c9"], "commit": "d7b952864a5c397147abb83c2daff665703393df", "message": "added slack readme", "changes": [[9, 0, "slack-readme.html"]]}, {"committer": {"date": 1544716709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cefd21dce0e5a94e8543d7b924df28d3eafce881", "parents": ["cb81542718dca32c888701afa6acc496fa2e8e9d"], "commit": "f8d19075bfa49a149de73e12ee5efce619c800c9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544716659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "692e1617750cb34a9c868d35ee79ed093a66c245", "parents": ["7c608c2fe0e774c31045910130542555939c9649"], "commit": "cb81542718dca32c888701afa6acc496fa2e8e9d", "message": "## Dec 13, 2018\n\n* TOC\n{: toc }\n\nFeeling a bit overwhelmed, rushed, frenetic today for some reason. Deep breaths, Steve, deep breaths.\n\n### One prototype at a time\n\n[History and future of p4](https://github.com/stevekrouse/futureofcoding.org/issues/86)\n\nNow that I'm settled on Turbine (modulus the 15 issues I created, and many more to come), I'm beginning to think about what I hope to build with Turbine: p4.\n\nI was getting a bit overwhelmed with all my ideas for p4. I made a big list and asked JE for help figuring out what's essential and what I can do without for this prototype:\n\n* Immutable editing\n\t* content hash like Unison and IPFS\n\t* do we hash definitions or expressions?\n\t* do we do work to cannonicalize hashes? (such as commutativity of addition)\n\t* no delete\n\t* no edit, only create new thing\n\t* refacorting\n* Detachable GUI Literals\n\t* Everywhere you have a GUI, you need to be able to put an expression: detachable GUI literals!\n\t* GUI for every system f language primitive\n\t* Bootstrap visual editor?!\n\t* Are all apps just expressions visualized?\n\t* Expression-based operating system instead of file-based or app-based\n* Other ideas\n\t* A la carte language semantics, like haskell langauge extensions\n\t* Always running, like spreadsheet or google doc, no run or pause, only open or close\n\t* infinite canvas (can I still use Turbine...?)\n\t* exploring which concepts we can move from the language compiler to the editor (no free variables, type inference is just local if not just a type “suggestion”)\n\nHe helped me realize that most of these ideas represent *entirely different prototypes*! I can't just combine them all like this. Prototypes explore one new idea at a time. So what's the idea for p4?\n\nJE hit the nail on the head: p4 is an IDE for Turbine. This is particularly funny because p1 was an IDE for JQuery and p2 was an IDE for VueJS! Those both used blockly but that wouldn't help with p4 because blocks solve a different problem than what p4 is trying to solve: improve the PX of DCTP, most directly by _showing live streams as the user interacts with the output_.\n\nOn my run a few hours ago, I was thinking about what my data model would be for p4. Then it hit me: Turbine is the data model. (Along with hareactive, io, and jabz.) Those stream data structures *are the thing the p4 user is creating*.\n\nI *could* start p4 by building a projectional editor for Turbine/hareactive/io/jabz and all of JS. But can I get away with less?\n\nOne way to get away with less is to build a UI for the turbine/hareactive/io/jabz functions/combinators and then have users type regular text js where we need functional expressions (similar to aprt.us and pane).\n\nThe other way to do *even less* is to allow text to be the interaction model for Turbine and simply start with a devtools that shows the streams. If my main conviction is that seeing the streams will help, let's *just* do that. What's great about this idea is that a stream visualizer is a pre-req for any other p4 end-product anyways, so I might as well just publish it as it's own thing, and then move on afterwards.\n\nIn summary, p4 is now the Turbine devtools project, in the spirit of the CycleJS devtools.\n\nWait... because this feels reachable (I can imagine myself achieving it in early 2019 and it existing), it makes me wonder more about next steps...\n\n* Do I try to take up the Turbine mantel and get others to use it?\n* Do I go towards the structured editor idea?\n* Do I experiment with one of the other ideas listed above?\n\nAll valid answers. The thing is, whatever I do, I need a UI library I love, and that library needs a stream visualizer, so build that first. And then we'll talk.\n\n### Donation platform\n\nBefore starting the Patreon, I wanted to look around for alternatives. I found Stripe, Paypal and Donationbox allow for subscriptions with much less fees. However, I asked a few people with Patreons and a few of the people who said they'd be my supporters, and both said that I should stick with Patreon, mostly for the branding. It explains itself and gives off the right vibes, which is hard to do with a do-it-your-self platform. Patreon it is!\n\n### Next week\n\n* p4 & Turbine\n* Patreon launch\n* couple hours of freelance\n\nMaybe something like:\n\n* Monday - Patreon\n* Tuesday - Patreon\n* Wednesday - p4 & Turbine\n* Thursday - p4 & Turbine\n* Friday - freelance", "changes": [[1, 1, "_data/git-log.json"], [151, 0, "notes/jonathan-edwards/12-12-18.md"]]}, {"committer": {"date": 1544573499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "137932667a3bbac6ba0f37a21b636a83e6505c9b", "parents": ["732b8609e3452148751c58040dab24fc472a0133"], "commit": "7c608c2fe0e774c31045910130542555939c9649", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544573471, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e1ec597f526b0a6c552b2d896c1d990a9ad486be", "parents": ["58691892084d488eccbc8aba5d27f2b86b10b3a2"], "commit": "732b8609e3452148751c58040dab24fc472a0133", "message": "## Dec 11, 2018\n\n* TOC\n{: toc }\n\n### Last week\n\nLast week was productive in terms of publishing two podcast and recording a third. I also worked a bit freelance. I only need to do a dozen hours freelance at this point in conjunction with the money from the podcast sponsorship to make ends meet. Eventually with more sponsorship and Patreon, maybe I can slowly lower the number of hours freelance towards zero.\n\n### Github Issues / Projects\n\nI also started my Dec Regroup Projects, including moving my todos to Github Issues / Github Projects. I now have three Github projects:\n\n* [To Do](https://github.com/stevekrouse/futureofcoding.org/projects/3) is my pipeline of tasks\n* [To Research](https://github.com/stevekrouse/futureofcoding.org/projects/2) is my pipeline of links and topics\n* [My podcast pipeline](https://github.com/stevekrouse/futureofcoding.org/projects/1) is where I organize my guests\n\nI'm a bit worried about how this new system will interact with this log. While it felt silly to copy and paste todo lists over and over in this log, it's also a bummer doing things in my new system doesn't show up in here. This log is supposed to be a log of all my work on this project, so I'd love to pull in Github issues activity somehow... Now that I say it \"out loud\" I wonder if I can do that automatically... For now though, I may just copy and paste some things from Github issues here when relevant.\n\n### Jekyll refactoring\n\nI get really fustrated with Jekyll sometimes. My main issues were:\n\n* I was having trouble with importing page snipets\n* I wanted to be able to preview my site locally with all the CSS. (Github Pages had some setting I didn't have set.)\n\nAfter many annoying hours I was able to make both of these things work. My main next big issue is a navbar on all my pages of:\n\n* Home\n* About\n* Podcast\n* Log\n* Community\n* Contact\n* Fork\n\nOf course new styles and logo would be nice as well, and maybe a commenting system, but it's not top priority.\n\nAnd to be honest, starting the Patreon is bigger priority than all of these but I'm a bit scared so I keep procrastinating...\n\n### Turbine 7GUIs!!\n\nAfter doing 3 hours of emails yesterday (I was sick towards the end of last week, so I took Thursday off and didn't do my emails Friday, sat, or Sun), I spent a few hours messing with Turbine, and then ~7 hours today in it. So fun! Despite being rough around the edges, it feels like there's really something wonderful here - I'm very impressed with the design. Polishing this is a million times better than having to start from scratch.\n\nTo take it for a spin, I've been doing the 7GUIs tasks in Turbine, and whenever I get stuck or find a bug, I write it down, and sometimes open an issue. I'm tracking all the progress in [this Github issue](https://github.com/stevekrouse/futureofcoding.org/issues/96), which I will copy and paste here:\n\n#### Issue opened\n\n* [typescript issue on starter kit](https://github.com/funkia/turbine-starter/issues/2)\n* [combining model and view](https://github.com/funkia/turbine/issues/81)\n* [devtools](https://github.com/funkia/turbine/issues/82)\n* [a single page documentation cheatsheet](https://github.com/funkia/turbine/issues/84)\n* [Text input bug](https://github.com/funkia/turbine/issues/86)\n* [versioned documentation and various styles of `output`](https://github.com/funkia/turbine/issues/85)\n\n#### To open issue\n\n##### Issues using `lift`:\n\n1. Do I import it from `jabz` and do `lift(f, b1, b2)`? Or I use it as `b1.lift(f, b2)`?\n2. It doesn't work in the view with error `Attempt to sample non-replaced placeholder`\n3. Doesn't seem to work for 4 behaviors but the documentation says \"You can also combine in this fashion any number of behaviors\"\n\n##### Constructors need to be documented across all projects\n\n* I need the constant behaviors, streams, `IO.of` to be easier to get at than going to the tests to find them.\n\n##### filterApply bug\n\n`filterApply(Behavior.of(undefined).map(() => () => true), stream).log()` upon an event from `stream` errors: `predicate.at(...) is not a function`. If you replaced `undefined` with `1`, the error goes away.\n\n##### * `time.log()` does nothing\n\nIt should at least error if it's not going to show you anything, but I might prefer it to show me all the milliseconds.\n\n##### when doesn't log correctly\n\n`when(Behavior.of(true)).log()` errors `Cannot read property 'Symbol(Symbol.iterator)' of undefined` but `yield sample(when(Behavior.of(true)).map(x => console.log(x)))` outputs an `OfFuture` value\n\n#### To look into more\n\n* What is the `moment` function (described [here](https://github.com/funkia/turbine/issues/51#issuecomment-306897232))?\n\n* Use [`loop`](https://github.com/funkia/turbine#loop) successfully without `this.source.addListener is not a function` error\n\n* What's the difference between `go` and `fgo`? Also, the placement of arguments here is confusing:\n\n```javascript\nconst tempView = ({ c, f }) =>\n go(function*() {\n```\n\n* When you can do infix dot vs prefix\n\n* I want a dummy model so I can see the view while I mess with stuff and not get `The generator function never yielded a monad and no monad was specified.` without\n\n```javascript\nconst tempModel = fgo(function* ({ }) {\n yield Now.of(10)\n});\n```\n\n* Need to call the function created with `performStream` or `performStreamLatest` (I don't get the difference): `performStreamLatest(book_.map(() => withEffects(() => alert('hi'))()))`\n\n* It's also quite annoying to keep the output and inputs in sync always.\n\n### Priorities 12/12/18 - 12/21/18\n\n* freelance 10 hours\n* Patreon 20 hours\n* Turbine 20 hours\n * finish 7GUIs\n * work on various issues\n\n### Push to vacation or 2019\n\n* publish Tudor and Vlad episodes\n* p4 stuff\n* website design and improvements", "changes": []}, {"committer": {"date": 1544130077, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e1ec597f526b0a6c552b2d896c1d990a9ad486be", "parents": ["8dfd194237e2b0a2be248458af7cc2f240c2d1a1"], "commit": "58691892084d488eccbc8aba5d27f2b86b10b3a2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b1b50ffc268308cb65e341c46327c22ab37d1c9b", "parents": ["a47b20448ce1ea826ce94980958e8d5cd9fe3fe5"], "commit": "8dfd194237e2b0a2be248458af7cc2f240c2d1a1", "message": "replicate css locally", "changes": [[19, 1, "_config.yml"]]}, {"committer": {"date": 1544130062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "68fea216356c31550450d242697cd9017c54dd5b", "parents": ["b7112ed1b8d93be33274632144ca6b6ffad4ed59"], "commit": "a47b20448ce1ea826ce94980958e8d5cd9fe3fe5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544130061, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "43ff3a2ef1b335531ae9c2e8c21baf045428c89d", "parents": ["5edb0c0bd9718ac1ed85edba0cb0631f72af0cfe"], "commit": "b7112ed1b8d93be33274632144ca6b6ffad4ed59", "message": "remove infinite loop", "changes": [[9, 1, "_includes/analytics.html"]]}, {"committer": {"date": 1544127681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c52c67af38c6291d32add8944f121bc347066c45", "parents": ["a60bdf6b5c41d29c624a5f0ae03a7d030bc2af86"], "commit": "5edb0c0bd9718ac1ed85edba0cb0631f72af0cfe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4620cf436c72473762976236feb4e10f388ce54e", "parents": ["2be3136cb36df23f2197d067fcb923169d3d87af"], "commit": "a60bdf6b5c41d29c624a5f0ae03a7d030bc2af86", "message": "refactor analytics to _includes", "changes": [[1, 0, "_includes/analytics.html"], [1, 11, "about.md"], [1, 11, "drafts/app-idea.md"], [1, 11, "drafts/boundaries.md"], [1, 11, "drafts/casual.md"], [1, 11, "drafts/invented-or-discovered.md"], [1, 11, "drafts/learnable-programming.md"], [1, 11, "drafts/power.md"], [1, 11, "drafts/regex-for-humans.md"], [1, 11, "drafts/visual.md"], [1, 11, "essays/sissies.md"], [1, 2, "ideas.md"], [1, 11, "notes/aaron-kent-call-9-15-17.md"], [1, 11, "notes/aidan-cunniffe-call-11-29-17.md"], [1, 11, "notes/andre-staltz-call-10-9-17.md"], [1, 11, "notes/andre-staltz-call-9-11-17.md"], [1, 11, "notes/bret-victor/SimulationAsAPracticalTool.md"], [1, 11, "notes/bret-victor/dynamicland.md"], [1, 11, "notes/bret-victor/explorable-explanations.md"], [1, 11, "notes/bret-victor/index.md"], [1, 11, "notes/bret-victor/kill-math.md"], [1, 11, "notes/bret-victor/learnable-programming.md"], [1, 11, "notes/bret-victor/magic-ink.md"], [1, 11, "notes/bret-victor/questions.md"], [1, 11, "notes/bret-victor/substroke.md"], [1, 11, "notes/dan-scanlon-call-9-5-17.md"], [1, 11, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [1, 11, "notes/dynamicland-zine.md"], [1, 11, "notes/future-authoring.md"], [1, 11, "notes/glen-chiacchieri-12-29-17.md"], [1, 11, "notes/halfway-there-cis-240.md"], [1, 11, "notes/historical-accidents.md"], [1, 11, "notes/jaime-brandon-call-12-12-17.md"], [1, 11, "notes/jaime-brandon-call-9-5-17.md"], [1, 11, "notes/jcr-licklider.md"], [1, 11, "notes/jonathan-edwards/06-14-18.md"], [1, 11, "notes/jonathan-edwards/07-10-18.md"], [1, 11, "notes/jonathan-edwards/08-21-18.md"], [1, 11, "notes/jonathan-edwards/09-26-18.md"], [1, 11, "notes/jonathan-edwards/10-09-18.md"], [1, 11, "notes/jonathan-edwards/11-09-18.md"], [1, 11, "notes/jonathan-edwards/11-21-18.md"], [1, 11, "notes/joy-js-review.md"], [1, 11, "notes/kevin-lynagh.md"], [1, 11, "notes/live/2018.md"], [1, 11, "notes/michael-nielsen.md"], [1, 11, "notes/nicky-case-call-11-1-17.md"], [1, 11, "notes/no-silver-bullet.md"], [1, 11, "notes/samuel-loncar.md"], [1, 11, "papers/comprehensible-frp/feedback.md"], [1, 11, "papers/comprehensible-frp/index.md"], [1, 11, "plan.md"], [1, 11, "principles.md"], [1, 11, "reflections/10.md"], [1, 11, "reflections/11.md"], [1, 11, "reflections/12.md"], [1, 11, "reflections/13.md"]]}, {"committer": {"date": 1544127559, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9fb4b2b120d753096ca6aa2825738f4c830cc2d", "parents": ["b443369e09913f7f6570c27334fb13e91c3d593f"], "commit": "2be3136cb36df23f2197d067fcb923169d3d87af", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544127558, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "64d022a162359763cc7a51cb00bd0be80b6116eb", "parents": ["16ebfed4e1047c0d6a15947e409258d0843c2435"], "commit": "b443369e09913f7f6570c27334fb13e91c3d593f", "message": "removed unbreakable-links", "changes": [[1, 1, "404.md"], [1, 1, "README.md"], [0, 1, "about.md"], [1, 1, "drafts/app-idea.md"], [1, 1, "drafts/boundaries.md"], [1, 1, "drafts/casual.md"], [0, 1, "drafts/invented-or-discovered.md"], [1, 1, "drafts/learnable-programming.md"], [1, 1, "drafts/legal-code.md"], [1, 1, "drafts/power.md"], [1, 1, "drafts/regex-for-humans.md"], [1, 1, "drafts/visual.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [1, 1, "episodes/18-research-recap-nine.html"], [1, 1, "episodes/19-building-universe-joe-cohen.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/20.md"], [1, 1, "episodes/21.md"], [1, 1, "episodes/22.md"], [1, 1, "episodes/23.md"], [1, 1, "episodes/24.md"], [1, 1, "episodes/25.md"], [1, 1, "episodes/26.md"], [1, 1, "episodes/27.md"], [1, 1, "episodes/28.md"], [1, 1, "episodes/29.md"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/30.md"], [1, 1, "episodes/31.md"], [1, 1, "episodes/32.md"], [1, 1, "episodes/33.md"], [1, 1, "episodes/34.md"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "essays/sissies.md"], [0, 11, "ideas.md"], [1, 1, "index.html"], [0, 1, "journal.md"], [0, 1, "links.md"], [1, 1, "log.md"], [0, 1, "notes/aaron-kent-call-9-15-17.md"], [0, 1, "notes/aidan-cunniffe-call-11-29-17.md"], [0, 1, "notes/andre-staltz-call-10-9-17.md"], [0, 1, "notes/andre-staltz-call-9-11-17.md"], [0, 1, "notes/bret-victor/SimulationAsAPracticalTool.md"], [0, 1, "notes/bret-victor/dynamicland.md"], [0, 1, "notes/bret-victor/explorable-explanations.md"], [1, 1, "notes/bret-victor/index.md"], [0, 1, "notes/bret-victor/kill-math.md"], [1, 1, "notes/bret-victor/learnable-programming.md"], [0, 1, "notes/bret-victor/magic-ink.md"], [1, 1, "notes/bret-victor/questions.md"], [0, 1, "notes/bret-victor/substroke.md"], [1, 1, "notes/conal-elliott.md"], [0, 1, "notes/dan-scanlon-call-9-5-17.md"], [0, 1, "notes/dataflow/advances-in-dataflow-programming-langauges.md"], [0, 1, "notes/dynamicland-zine.md"], [0, 1, "notes/future-authoring.md"], [0, 1, "notes/glen-chiacchieri-12-29-17.md"], [1, 1, "notes/halfway-there-cis-240.md"], [1, 1, "notes/hilltop-lang.md"], [0, 1, "notes/historical-accidents.md"], [0, 1, "notes/jaime-brandon-call-12-12-17.md"], [0, 1, "notes/jaime-brandon-call-9-5-17.md"], [0, 1, "notes/jcr-licklider.md"], [0, 1, "notes/jonathan-edwards/06-14-18.md"], [0, 1, "notes/jonathan-edwards/07-10-18.md"], [0, 1, "notes/jonathan-edwards/08-21-18.md"], [0, 1, "notes/jonathan-edwards/09-26-18.md"], [0, 1, "notes/jonathan-edwards/10-09-18.md"], [0, 1, "notes/joy-js-review.md"], [0, 1, "notes/kevin-lynagh.md"], [1, 1, "notes/kill-html-css.md"], [1, 1, "notes/kill-primitives.md"], [0, 1, "notes/live/2018.md"], [0, 1, "notes/michael-nielsen.md"], [0, 1, "notes/nicky-case-call-11-1-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "notes/no-silver-bullet.md"], [0, 1, "notes/quotes.md"], [0, 1, "notes/samuel-loncar.md"], [1, 1, "notes/simon-friis-vindum.md"], [0, 1, "notes/stefan-lesser-12-13-17.md"], [0, 1, "papers/comprehensible-frp/feedback.md"], [0, 1, "papers/comprehensible-frp/index.md"], [0, 1, "plan.md"], [0, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"], [0, 1, "reflections/10.md"], [0, 1, "reflections/11.md"], [0, 1, "reflections/12.md"], [0, 1, "reflections/13.md"], [0, 43, "unbreakable-links/README.md"], [0, 186, "unbreakable-links/index.js"]]}, {"committer": {"date": 1544126259, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9efe849f2906e841306859068ab2f063b25f5aa7", "parents": ["6251dd3936c7e37f4eaf05f381dec71b38b32b97"], "commit": "16ebfed4e1047c0d6a15947e409258d0843c2435", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544126257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cfc205e9afd7c39458149a92c752ed589a8f4192", "parents": ["ac3968a768d457c34ced3234b5c1f71752925990"], "commit": "6251dd3936c7e37f4eaf05f381dec71b38b32b97", "message": "fix things for jekyll doctor", "changes": [[2, 1, "_config.yml"], [1, 1, "episodes/34.md"]]}, {"committer": {"date": 1544022205, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544022189, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "54b60b082dd447d9eeef50b4e8132984e17ae4ae", "parents": ["93028c9c45cbb73ac65d02b047dbc716acec4274"], "commit": "ac3968a768d457c34ced3234b5c1f71752925990", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1544022205, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1544022189, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "22aa0286e3cba1f30a4c792f859fabda879d9222", "parents": ["800707f73c87840384f2b9a1ff65bba4399bc144"], "commit": "93028c9c45cbb73ac65d02b047dbc716acec4274", "message": "added episode 34; katherine ye", "changes": [[1, 1, "episodes/33.md"], [897, 0, "episodes/34.md"], [2, 1, "index.html"]]}, {"committer": {"date": 1543867662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "584a58dcbb5ec4a7e325636cc2e7d10e8b14af0c", "parents": ["3fec824d6a70ba3ac0cca7f6dafb804dca11b867"], "commit": "00b5743987eb1fb411a56d2813bda342db678199", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543867661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1a860f4e7d216b0dacde48b54e47b8ebf1ea1e72", "parents": ["5f841a9e72a67ea1eb18712a35f6e3179b7c5918"], "commit": "3fec824d6a70ba3ac0cca7f6dafb804dca11b867", "message": "fix single l conal elliott typo", "changes": [[2, 1, "404.md"], [1, 1, "about.md"], [2, 2, "drafts/casual.md"], [6, 6, "episodes/33.md"], [1, 1, "journal.md"], [3, 3, "links.md"], [2, 2, "notes/bret-victor/learnable-programming.md"], [0, 54, "notes/conal-elliot.md"], [54, 0, "notes/conal-elliott.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "reflections/13.md"]]}, {"committer": {"date": 1543859116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "761b6681bd4515e4cf35d65bdd56fa825bf6b09c", "parents": ["91ca8d4875e5745f5f2826433e36bdc807170607"], "commit": "5f841a9e72a67ea1eb18712a35f6e3179b7c5918", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543859115, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fc50959003ba0139494a244259844c3146a2c5cc", "parents": ["53f4eb1ffe778baf0fa7194b1dfcfefa15126f07"], "commit": "91ca8d4875e5745f5f2826433e36bdc807170607", "message": "udpate episode 33 transcript", "changes": [[308, 283, "episodes/33.md"]]}, {"committer": {"date": 1543854038, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4957cd18d734b2c9d39e37941e801ac234b8251d", "parents": ["28d4fb3ec1aae8cb94b0c3dbcc7fff450193a789"], "commit": "53f4eb1ffe778baf0fa7194b1dfcfefa15126f07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543854036, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "521e7ee83f7e7fc51f6b7e9e6d2f3c68482597c2", "parents": ["dab6c9032a60683fe1d5771d85cf771f4e7cfd93"], "commit": "28d4fb3ec1aae8cb94b0c3dbcc7fff450193a789", "message": "added episode 33, reflection 14 /about", "changes": [[659, 0, "episodes/33.md"], [1, 0, "index.html"], [9, 0, "reflections/14.html"]]}, {"committer": {"date": 1543836949, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea48ddbb738c35206e89d4e110417e618fc0f570", "parents": ["d8a3c8e853d50a11c6c556a9934c4cfcea7c1aeb"], "commit": "dab6c9032a60683fe1d5771d85cf771f4e7cfd93", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543836802, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0b42ade66c8e3286eb9b632f98771dfb5c308759", "parents": ["e1e24399f616a6ebc30a028b701cd335696f1360"], "commit": "d8a3c8e853d50a11c6c556a9934c4cfcea7c1aeb", "message": "## Dec 3 2018 Notes\n\n* TOC\n{: toc }\n\n### First two weeks Dec 2018\n\nThis week, the focus is on the podcast and my freelance work. I would like to publish my reflection 14 episode as well as edit Katherine's episode and prep for and record Vlad's episode. Let's say the podcast will be Mon, Tues and Weds this week and I'll do freelance Thursday and Friday.\n\nNext week I want to focus on research, playing with Turbine and other p4 thoughts...\n\n### Equality of code\n\nI asked Paul Chiusano about hashing code that's equivalent but syntactically different, such as 1+x and x+1, and apparently Unison \"doesn’t normalize commutative operations.\" Some relevant links he sent me are [Normalizing](https://en.m.wikipedia.org/wiki/Normalization_property_(abstract_rewriting)) and [Rice's Theorem](https://en.m.wikipedia.org/wiki/Rice%27s_theorem).\n\n### p4 thoughts 12/3/18\n\n#### Start with non UI motivating problems\n\nA way to simplify this problem is to build an FP playground to solve normal FP problems with cyclical streams first and work our way up to UI:\n\n* Such as the problems that [Pane](http://joshuahhh.com/projects/pane/) solves\n* Here's an idea for a developer tool extension slice-and-dice playground thing. Here's a common pattern I found useful: \tquerySelect some nodes and map/filter over them a bunch, such as:\n\n```javascript\n[].slice.call(editorElement.querySelectorAll('*'))\n\n .map(e => [e, e.innerText])\n\n .map(([e, text]) => [e, text.match(/^(#+)\\s.*$/)])\n\n .filter(([e, m]) => m)\n\n .map(([e, m]) => [e, m[1]])\n\n .forEach(([e,m]) => {\n\n e.style.fontSize = (50 - (5*m.length)) || 3;\n\n e.style.marginBottom = 2 + \"px\";\n\n e.style.marginTop = 2 + \"px\";\n })\n```\n\nThe issue with this approach is that we may create a FP playground that won't scale up to cyclical UI problems...\n\n#### Fluidity is not the initial focus\n\nI realize that part of why structured editors haven't been able to compete with text-based coding is:\n\n1. Computers come with a hardware input device especially designed for text input: the keyboard!\n2. We all have spent dozens of hours learning to use this keyboard for text input!\n\nIt's simply not a fair comparison to expect a new interface to be as fluid as text from Day 1. Of course fluidity is important and of course making it work with people's existing hardware and skills will help with adoption, but they aren't the first things to worry about. Maybe the ultimate interface will require new input hardware and/or a lot of practice to get the hang of. Hopefully we can get away with the keyboard and mouse and make the onboarding simple, but we don't want to pigeonhole ourselves over it.\n\nThe initial focus should be on the comprehensibility of the code and the liveness of the experience. Liveness means that an incremental action should result in an incremental result. This is possible without fluidity, which means that \"taking the incremental action\" may not be ergonomic for some reason.\n\n(However, I will note that fluidity is SUPER important to me. I would love to build an interface that's only optionally dependent on the mouse.)\n\n#### All Literals are GUIs...\n\nIf we throw out text-based coding and agree to a structured editor of some kind, you may realize that we can automatically represent colors as a color picker instead of (or in addition to) a hex value or rgb value. Cyrus Omar has work where he embed's a regex playground right into the IDE. (As Tudor Girba says, whenever you leave the IDE, the \"I\" has failed.)\n\nIf you follow this line of thinking, you realize that ALL literals are GUIs! Numbers can be scrubbable or many other interactive representations, booleans are a checkbox thing... We can even nest GUIs! You could have a string as a widget which is basically a text box but you can add other arbitrary expressions inside - no more escaping characters necessary! Lists can be a specialized GUI where you can add and remove expressions or do comprehensions.\n\nWe can continue this idea for all kinds of expressions: if-expressions, pattern-matching, lambdas, function application... Can we build nestable custom GUIs for every part of System F/Haskell?! I think so!\n\nThe key here is the nestability. Normally a color picker or other GUI is a top-level thing. But why? I don't see any reason why it can't be as expression-like as coding.\n\nWhen you define a function it will default to a basic representation but it should allow you to *add a more specific GUI to represent your function!*\n\nThese thoughts were inspired mostly by Tudor Girba, but also are related to [Niko Autio's Microeditor ideas](https://futureofcoding.org/notes/niko-autio-microeditor.html).\n\nI am curious how to combine this idea with the ideas of Hazel and Josh's principle of radical visibility of preview evaluation with test data. Same with the hashing stuff. There are so many cool PX ideas to combine together!\n\nDrawing this out will be interesting. And if I can show how we can do any pattern from Haskell, completeness is guaranteed!\n\nIn terms of implantation, not sure if HTML or canvas is the way to go. Would be fun to play with Turbine on this project...", "changes": []}, {"committer": {"date": 1543248438, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7490b1ed3c1ae081df8b4c51ea2aa366091543b7", "parents": ["273255117a506906cfd881f7a10f9fdd84630197"], "commit": "02e1e774e04695aacb476f1fa29c0ef5fb615630", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543248405, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a16f01ae8dc28d089f7e23a2d8051393b7550a0", "parents": ["c848c3d111893971f22972d8007f7de0229599e9"], "commit": "273255117a506906cfd881f7a10f9fdd84630197", "message": "## A productive few days in late Nov 2018\n\n* TOC\n{: toc }\n\n### Fun Calls\n\n#### JE\n\nWent really well. [Notes here.](/notes/jonathan-edwards/11-21-18) The end-result was that I should either find or build my own Reflex alternative in JS. It's easier to start from a compile-target, a DSL, than from a visual editor. Once I have this built, I can use it to think about visual abstractions to compile to it. And I can use the framework to build those abstractions in a bootstrappy way.\n\n#### Philip Tchernavskij\n\nPhD student in Paris also interested in the malleability of software, but coming from the HCI and political perspective. His work sounds a lot like Dynamicland.\n\n#### Kartik Agaram\n\nAnother person interested in the same goal / themes of software malleability. It's really fun to chat with people like Kartik and Philip where we agree so much on goals but are coming from different places and see entirely different implementations of these ideas. I got Kartik, to agree to [record the conversation as an experiment](https://www.youtube.com/watch?v=DuMdDXCMDk0). I think it went well. Apparently 18 people watched it. Maybe if we continue chatting from where we left off, I can grab the audio from the conversations and turn it into a podcast. Or maybe we can do a podcast from scratch at some point.\n\n### Blinknote\n\n

    💭Yesterday I wished for a dream note-taking chrome extension

    🎁@dankantor supplied with me the initial code

    👨‍💻I hacked for ~2 hours last night

    ✨I have a working Chrome extension! https://t.co/51Res4TnlI

    — Steve Krouse 🇬🇧 (@stevekrouse) November 23, 2018
    \n\n\nThis was a really fun project, and it really energized me. In my head, hacking this together was like running up a hill and the prideful energy I felt afterwards was like running down the hill and I still feel like I'm running downhill three days later! I am actually writing this journal entry in Blinknote. It's so amazing to use tools that you make yourself. So much pride. It definitely encourages working and working with more of a smile. It also allows you to feel less boxed in - you can change things if they don't work for you.\n\nIt makes me even more excited for my vision of programming as allowing others to make their own tools, collaboratively. Working on ones own tools makes me think of whittling a spatula from a branch with a knife. However I don't think that's the right metaphor for my system because I want to highlight the collaborative nature more.\n\n### FoC London dinner\n\nThis was a lot more work than I expected, finding a restaurant, getting people to RSVP, setting up payments, emailing people, dealing with dietary restrictions, confirming with restaurant, people's plans change, etc. One way to keep myself sane during this process is not to judge myself on the outcome but on the process, and even by just the fact that I'm doing it, trying things. My refrain is \"full credit for showing up\". I hope it goes well Wednesday!\n\n### Kits vs apps\n\nThis is a common theme I've seen a lot ever since my visit to Dynamicland. I saw it again in Pharo and wrote up [a draft / ouline of an essay about it](https://futureofcoding.org/drafts/boundaries).\n\nI've never liked the kit idea. In another incarnation, it's \"everything is a document\". I think the STEPS project had this. It's always felt messy, ugly, and lame. On one level this is just a surface thing: overlapping windows, lots of gray top navs of windows, nested menus and right-click menus.\n\nHowever on another level it feels like the messiness is a bit real. For one, it's usual a dynamicly typed system. For another, it always feels less polished and usable than apps. As in, I can't imagine my mom using it.\n\n### I'm over the web\n\nThis is a big deal. For a while I've thought that HTML, CSS, and JS would be ok, as a compile target, but I no longer think so, particularly after Tudor showed me Pharo. He made the point that having everything in \"a single render tree\" is really key, and I don't feel I quite understand why but this does feel critical to me intuitively.\n\nDifferences include:\n\n* single render tree, mentioned above\n* different security model that will allow more things because it will expect users to understand more of the code they are \"importing\"\n* caching that will make more sense, better offline & online story, maybe some peer-to-peer in there too\n* different computational model from JS and HTML DOM\n\nThus my goal-system-I-have-no-name-for (wow, I really should come up with a working title for this... potluck? d1 for dream 1? I guess logichub could be d2?) will have to be built on a new system. Initially this system can be embedded within the web as a web app, but eventually I can imagine it having its own standalone \"browser\" that would work on various operating systems. Or I guess it could turn into an operating system itself!\n\nWhy start as a web app? I have to pick some platform and web is what I know best and I hate installing things and I love my chromebook so web seems like a solid pick.\n\nThe key question for all smalltalk-like systems: how do you prevent it from becoming its own universe? For example, Pharo or Lively Web.\n\nMy answer is that you start with single-user apps, starting with daily productivity tools, like notes, email, calendar, task management, and then once you have a critical mass, people will slowly spawn more ambitious projects that the community will use, and it will grow from there.\n\nI guess if it works within a webapp, people can use it on the web, so that's a pretty good story, as compared to Pharo which requires a download. So maybe the answer is that if we build it on the web to start with, it could seem like a website to most people, kinda like Lively Web or Tiddlywiki.\n\n### Fluidity vs structure\n\nI need to spend some time defining fluidity and structure, but this graph feels provocative:\n\n![](https://i.imgur.com/iVXH72a.jpg)\n\nI think fluidity has to do with live-ness, feedback loop speed, incremental actions causing incremental result, etc. And structure has to do with possible / impossible states, types, schemas. I'm stuck on where AST editors fit in this layout: they enable greater feedback loop speed knowledge of errors and prevent error states, yet they are not as fluid as using text but text doesn't give you as much info as fast.\n\nOne interesting note is that Airtable is particularly noteworth as having high structure and also high fluidity.\n\n### Conal -> Turbine\n\nJust as I decided (in the last meeting with JE) to build or find a JS lib for DCTP, I popped onto Twitter to find this:\n\n

    Stumbled across another *spot-on* post about FRP by @paldepind: "Let's reinvent FRP" https://t.co/Ga7ywHnySI .

    — Conal Elliott (@conal) November 23, 2018
    \n\n\nWhich led me back to [Turbine](https://github.com/funkia/turbine), which I had found a few months back and mistakenly disregarded as the \"wrong kind of FRP\" as mistakenly interpreted their Now monad thing. I'm now quite excited about this library! I already sent two long emails to the creator, Simon, and hope he responds soon. Here's what I wrote I'd like to collaborate on:\n\n> 1. Documentation. For example, I had to figure out how `list` worked from reading the source and puzzling together a few examples without explanations. I'd love to help document every function in the API. (Additionally, I believe the code itself could use some comment documentation but that's more up to you.)\n>\n> 2. Understanding the types of the streams I'm working with would help a lot. Maybe getting TypeScript set up ([as I failed to do in the issue above](https://github.com/funkia/turbine-starter/issues/2)) would help here.\n>\n> 3. Being able to \"inspect\" streams better as a debugging and understanding tool. [CycleJS has this wonderful devtool](https://github.com/cyclejs/cyclejs/tree/master/devtool) and there are [a number of other really cool stream visualization tools](https://github.com/stevekrouse/futureofcoding.org/blob/95bad27a4d9e2bbd0b186b7683eecf97197fe068/drafts/frp.md#71-visualizations) we can draw on for inspiration. At the very least, a better `console.log` story would go a long way. It was really tough to figure out what was going on with my streams.\n>\n> 4. Collapsing higher-order streams is really hard, but luckily [this picture](https://user-images.githubusercontent.com/2288939/48842176-78ef8400-ed8b-11e8-8996-307d841f9ac5.png) makes it a LOT easier. It saved my life last night as I was working on my favorite FRP problem of [buttons that add buttons that add buttons... but only the odd buttons](https://codesandbox.io/s/w2kvqr5nw8). Maybe we can build on this picture somehow or at least incorporate it into the documentation...\n>\n> 5. [As stated in the issue above](https://github.com/funkia/turbine/issues/81), I don't like the way the model and view are separated. I wonder if it's possible to combine them like in Reflex and other \"original FRP\" frameworks.\n\nAnd after we/I work on these more pressing issues, the next step will be building a layer on top of that Turbine that would make the development experience *much* better. That is, building a GUI that \"compiles\" to Turbine, for example, kind of in the spirit of Conal's Tangible Functional Programming. Here I am referring to more radical ideas than improving the documentation or a simple devtool, such a projectional editor in the spirit of Lamdu, Luna, Isomorf, Dark, Unison, and Hazel.\n\n### Todos 11/26/18\n\n* wait for Simon palepind response\n * maybe get started on some of the issues: documentation, try to combine view and model, build 7guis things, play with TodoMVC if they have it (or build it)\n* reflection episode\n* edit Katherine podcast\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)", "changes": []}, {"committer": {"date": 1543238661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a16f01ae8dc28d089f7e23a2d8051393b7550a0", "parents": ["7945e2ff22517fe650646561482c6872c0337879"], "commit": "c848c3d111893971f22972d8007f7de0229599e9", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543238660, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c136dbf1360d9556af12be25a685dcd84a18fee6", "parents": ["1e4443578c9704843a082fc8dbfa03dbf087c561"], "commit": "7945e2ff22517fe650646561482c6872c0337879", "message": "added boundaries of apps outline draft", "changes": [[39, 0, "drafts/boundaries.md"]]}, {"committer": {"date": 1543237666, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a9cbb5cdd3d6461888443694982f8f9211af5f27", "parents": ["befd86be4cf60da8bba5052379fe1db0220af116"], "commit": "1e4443578c9704843a082fc8dbfa03dbf087c561", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1543237665, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "757dde3a7b1c2c822550837d564af676398432ad", "parents": ["bbe3c6ad56187b93440332568909dbe0e37ce81e"], "commit": "befd86be4cf60da8bba5052379fe1db0220af116", "message": "added JE meeting ntoes 11/21/18", "changes": [[79, 0, "notes/jonathan-edwards/11-21-18.md"]]}, {"committer": {"date": 1542805879, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea202405af27561551e5bf852147fa2d45569c02", "parents": ["783bcd703e182c7f639d3442d8e07fa6a1884929"], "commit": "bbe3c6ad56187b93440332568909dbe0e37ce81e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542805870, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c4fd6191f7dadaf19ec03268acae090b071019c", "parents": ["717c4a653f1540907e06edddde02085041940878"], "commit": "783bcd703e182c7f639d3442d8e07fa6a1884929", "message": "## p4 thinking for JE meeting\n\n* TOC\n{: toc }\n\n### Theme of my work\n\nA fun question on Twitter yesterday encouraged me to think a bit broader as to an underlying theme to my work that would encompass this project, as well as other outside of \"improving programming\" (namely, LogicHub). I'm proud of what I came up with:\n\n

    Offloading mental tasks better done by computers to computers, so humans are freed up to think creative thoughts

    — Steven Krouse (@stevekrouse) November 21, 2018
    \n\n\n### Some responses about fluid Haskell\n\nSean McDirmid suggested Haskell for Mac, which is very cool and close to what I want so I installed it, but I wasn't able to see an easy way to get Reflex to work with it...\n\nLuke Iannini apparently worked on a [live recompiler for Haskell](https://github.com/lukexi/halive).\n\nThe monadfix people shocked me when they said:\n\n> None of us have been able to achieve the \"fluid, live Haskell programming experience\" that you're yearning for, even without \"has to work GHCJS\" as an additional constraint.\n\nMy new thesis is that this fluid Haskell doesn't really exist - at least for most Haskell developers.\n\nArtyom from monadfix was also very kind and commented on my issue about installing intero. Too bad they can't help here!\n\n### Biggest experience problems with Haskell/Reflex\n\nI made a full day's effort of trying to steelman Haskell/Reflex and make the experience as good as possible before trying to improve it - yet I just have such distaste for installing and debugging shit in the terminal (as well as using the existing Reflex setup I have) that I wonder if I can simply pull on my memory for the key issues...\n\n#### 1. Speed of feedback loop\n\nThe main thing was that speed of feedback on all fronts (syntax, types, output) was so slow and required so many keystrokes. In particular there were times that I could point to places in my code where I just wanted to know the type of something but did not know how to ask Haskell for that information.\n\n#### 2. API Discoverability\n\nIn other words, \"I have some things. I want some other things. What blocks can I use to go from what I have to what I want?\" In Scratch, all the \"legos are on the floor\" to help with this. I find that the lodash JS library also does a superb job of this. I found the Reflex documentation and the Haskell autocomplete tooling to feel like I'm basically guess and checking.\n\n#### 3. Plumbing code\n\nSuch as converting `Int` or `String` to `Text` and back, or worst of all, collapsing higher-order streams. I was very excited to find this extremely helpful video, [Real World Reflex](https://www.youtube.com/watch?v=dNBUDAU9sv4) last night which has a really wonderful slide to help with this:\n\n![image](https://user-images.githubusercontent.com/2288939/48842176-78ef8400-ed8b-11e8-8996-307d841f9ac5.png)\n\n#### 4. Visualize streams\n\nThis includes seeing the \"shape\" of streams and how streams make up other streams as in rxmarbles.com, as well as watching the live data flow through streams.\n\n#### 5. Direct manipulation\n\nThis whole thing won't feel natural without direct or bi-directional manipulation of the output because why not?\n\n### Next step ideas\n\n#### 1. Stay in Haskell\n\nContinue working towards a fluid experience in Haskell/Reflex.\n\n1. Find someone to help me setup a better experience and plow through.\n2. Make better documentation for Reflex\n3. Make better utility functions on top of Reflex so I don't have to do as much type conversion/plumbing\n4. Make a devtool for Haskell/Reflex to visualize the streams\n5. [I'd probably never get here] Use some of the bi-directional sketch-n-sketch work\n\n#### 2. Build/use JS library/framework\n\n1. Investigate CycleJS\n2. Look for another stream framework with higher-level and cyclic streams.\n3. See if I can only allow consts and no object modifications while still getting cycles (maybe use a fix-like thing?)\n\n#### 3. Build/use JS Haskell interpreter\n\n1. Investigate the two I already found [here](https://github.com/johang88/haskellinjavascript) and [here](https://github.com/evilcandybag/JSHC), the first of which comes with [an online REPL](http://hiji.tinyrocket.se/)\n2. Experiment with them to see if I can achieve a fast feedback loop\n3. Build a Reflex-like library on top of them\n\n#### 4. Build a higher-level system that compiles to JS\n\n1. Sketch out what it would look like, pulling inspiration from Facebook Origami, the rx visualization tools, the animation tools such as Principle For Mac, Josh Horowitz's [Pane](http://joshuahhh.com/projects/pane/) and what it references including [Aprt.us](http://aprt.us/).\n2. Prototype what \"format\" it would compile to in JS, be it a CycleJS data structure or something else\n3. Build it...\n\nI'm going to spend the next ~30 min doing the sketching discussed above in preparation for my meeting in a few hours with JE.\n\n### Todos 11/20/18\n\n* p4 next steps\n * read the first 6 chapters of TaPL\n * draw out what a better time would look like\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast\n* edit Katherine podcast\n* prep for Tudor podcast", "changes": []}, {"committer": {"date": 1542802726, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c4fd6191f7dadaf19ec03268acae090b071019c", "parents": ["c67accbabc18fc099b4478e0e194fb75cb30af6c"], "commit": "717c4a653f1540907e06edddde02085041940878", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542802725, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "844810a9f18ee2521fb7d3aa8012f949e31da18c", "parents": ["ad1b9cf01d3fd7be3498444bc18b9e97ce0cfc31"], "commit": "c67accbabc18fc099b4478e0e194fb75cb30af6c", "message": "updated pane in live 2018", "changes": [[2, 2, "notes/live/2018.md"]]}, {"committer": {"date": 1542732647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "010a32c4fc0d84c7a76ba07ede8d20cf10736038", "parents": ["3c4ba62e1637cc6424ddb27d2299752586553dec"], "commit": "ad1b9cf01d3fd7be3498444bc18b9e97ce0cfc31", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542732568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0430789c8be015f0c7df49169438524f20db22d8", "parents": ["8c51748313d96449c372baad1a9d9c9b6950777f"], "commit": "3c4ba62e1637cc6424ddb27d2299752586553dec", "message": "## Failing to achieve a fluid Haskell environment\n\n* TOC\n{: toc }\n\nToday I tried (and failed) to do the todo-item from yesterday of:\n\n> watch videos of expert Haskellers on Twitch and try to copy their setup\n\n### The chimera of a fluid Haskell\n\n

    I've heard rumors of a fluid, live Haskell programming experience. Has anyone captured such a chimera on video?

    — Steven Krouse (@stevekrouse) November 20, 2018
    \n\n\nFirst I googled around, trying to find videos of this. Nothing came up that easily after 30ish minutes of looking. Haven't gotten anything on Twitter either.\n\n### Intero\n\nI then re-discovered [intero](http://commercialhaskell.github.io/intero/) which seems to promise 90% of what I was looking for, such typeahead suggestions, jump to definition, type of selection, and type errors as you type in the editor with underlines.\n\nI spend a 1.5 hours trying to get this to work, and failed. I had lunch and came back with the idea to [record it](https://www.useloom.com/share/80c4a4a43f5a4bff8eb207ceeeb96a98). It took me another hour to fail and produced [this issue](https://github.com/commercialhaskell/intero/issues/592).\n\nI emailed Chris Done (creator of intero) and [monadfix](https://monadfix.io), asking if I could pay them to help me set this up.\n\n### Todos 11/20/18\n\n(I put an asterix (*) next to the items that I can do tomorrow.)\n\n* p4 next steps\n * read the first 6 chapters of TaPL / finish Stephen Diehl's book*\n * find someone to help me set up fluid haskell setup\n * video myself building a few things in Reflex, talking out loud about my experience\n * make a list of all the bad experiences, and ways to improve them\n * draw out what a better time would look like*\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast*\n* edit Katherine podcast*\n* prep for Tudor podcast*", "changes": []}, {"committer": {"date": 1542645441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0430789c8be015f0c7df49169438524f20db22d8", "parents": ["857951e243b5769ccd2ab62e42f149dc91748be4"], "commit": "8c51748313d96449c372baad1a9d9c9b6950777f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542645420, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f401b62c8107fd5e7905276459ab9b53f3881920", "parents": ["bfc39f68927dc52d8c17947e0f8e467629c6c4ce"], "commit": "857951e243b5769ccd2ab62e42f149dc91748be4", "message": "## Making the most of a lazy, jetlagged Monday\n\n* TOC\n{: toc }\n\nI woke early for an Alexander lesson this morning, which was a big mistake as I am not nearly over my jetlag. I went back to bed after getting back and thus didn't get much work done today. Maybe 3 hours of reading, as discussed below, and random Inbox tasks I get done after writing this for an hour or two.\n\n### Paths forward for p4\n(I wrote this section yesterday and the shower note before that.)\n\n![image](https://user-images.githubusercontent.com/2288939/48720162-0cec0f00-ec17-11e8-832f-a092e24d94f0.png)\n\nReflex is the closest thing to the way I think UI should be written and yet it's so crappy to use. I think that fixing the worst parts of this is a great first step. Of course there are many other things to improve such as direct-manipulation, visual metaphors, etc, but let's start with the most egregious places first.\n\n#### Path 1: use Haskell\nCan I turn off optimizing flags in compiler, use a linter or code augmenter, haskell-id (or whatever thing that auto-checks code), sourcegraph? Maybe watching Haskell developers on Twitch would give me a better sense of the state-of-the-art workflow.\n\n#### Path 2: use JS\nCycleJS or rolling my own thing.\nMaybe with JS linter to only allow consts and no object modifications (will be tricky to get cycles this way...).\n\n#### Path 3: build JS haskell interpreter\nBuild an interpreter with ability to swap nodes as running (like Scratch, Smalltalk)\n\n### Haskell interpreter in JS\n\nToday after my jetlag sleepiness I read another few chapters of Stephen Diehl's book [Write You a Haskell](http://dev.stephendiehl.com/fun/index.html), including typing, evaluation, type inference, and the higher-level design of a \"ProtoHaskell\". It seems like a tractable problem, mostly an engineering problem given that it's mostly \"solved\". I even found two already on Github [here](https://github.com/johang88/haskellinjavascript) and [here](https://github.com/evilcandybag/JSHC), the first of which comes with [an online REPL](http://hiji.tinyrocket.se/)! It would be interesting to test the speeds of these REPLS vs each other and GHC.\n\nNow that I know a bit more about how Haskell works under the hood, I wonder how I would implement the features that I think would make a better experience:\n\n1. Replacing expressions in the evaluation tree with other expressions as things are \"running\". In particular, I used to think I could evaluate the AST by visiting nodes one by one and I could replace an old subtree with a newer one, but now I'm not so sure that's how things work...\n2. Representing various expressions or terms as hashes. In particular, how would I represent closures or the environment in hashed terms?\n\nTalking with Cyrus Omar, the Lamdu team, Paul Chuisano, Stephen Diehl will be key in this process... I feel very lucky to be able to confer with the world experts on these topics!\n\n### Go back to drawing, Steve\n\nI can feel myself being pulled into \"engineering mode\" already and it's too early. I don't have my eye fixed on an experience target well enough to get dragged into trying to achieve it. For my work tomorrow, I shall draw out, in tedious frame-by-frame detail, what a simple experience with this \"ideal Haskell experience\" would look like. I wonder if I could make a simple stop-motion video out of it... The features I think are most important:\n\n1. When I type out a UI term, it should appear in view in under a second (or even less) and be interactive\n2. The types of every expression should be immediately accessible\n3. The operations I can perform on expressions should be suggested in an accessible way, as well as new expressions I can add in relevant places\n4. HMR\n5. Automatic plumbing code or plumbing suggestions for conversions between silly types like strings and numbers\n6. The live values running through the program should be tied to the static code somehow to give the types color\n\nFor contrast, I think maybe I should start by trying to accomplish a few UI tasks in Reflex and record them and then make a list of all the pieces of data I wanted to know or actions I wanted to be able to take faster.\n\n### Todos 11/19/18\n\n* p4 next steps\n * watch videos of expert Haskellers on Twitch and try to copy their setup\n * build a few things in Reflex and video myself not having a good time\n * draw out what a better time would look like\n * read the first 6 chapters of TaPL\n* [regroup projects](https://futureofcoding.org/log#possible-dec-2018-re-group-projects)\n* schedule JE podcast\n* edit Katherine podcast\n* prep for Tudor podcast", "changes": []}, {"committer": {"date": 1542233093, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f401b62c8107fd5e7905276459ab9b53f3881920", "parents": ["fa7a4a794b3e257cb5240be91f92ec6b04bfd48b"], "commit": "bfc39f68927dc52d8c17947e0f8e467629c6c4ce", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542233083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a691b6fabbb7d6bf7b53d529c68bfa664a472044", "parents": ["9905ea021be45351f7265d8771ad79d8144ba2f1"], "commit": "fa7a4a794b3e257cb5240be91f92ec6b04bfd48b", "message": "## Mid Nov 2018 Many Thoughts\n\n* TOC\n{:toc}\n\n### SPLASH 2018 recap\n\nI normally don't like to travel but this trip was possibly the best thing I've had to travel for in my life. I'm very excited to do more things like this, maybe a couple times per year.\n\n#### Internet friends IRL\n\nI've been referring to this period of my life as my \"Twitter Friends Phase\" because I am making so many friends and then I also get to see them in person. Just in last week in Boston alone, here are all the amazing people I got to spend time with:\n\nWill Chriton, Joel, Jonathan Edwards, Ravi, Brian, Cyrus, Glen, Sean McDirmid, Paul Chuisano, Geoffrey Litt, John Maloney, Charles Roberts, Chris Granger, Eyal Lotem and Yair Chuchem from Lamdu, Roben Kleene, Daniel Moon, the ReScala team from Technische Universität Darmstadt (Ragnar, Pascal), Josh Horowitz, Roly Perera, Caleb Helbling, Evan Czaplicki\n\nSadly I only have one photo from the event. I should do better next time!\n\n![image](https://user-images.githubusercontent.com/2288939/48514489-683f8b00-e82c-11e8-91aa-6b54dd936273.png)\n\n#### LIVE 2018\n\nI have trouble with lectures. I'd much prefer sitting at home in my sweatpants, listening at 2x speed and bouncing if it's not for me right now. However, LIVE 2018 was one of the best days ever, not in spite but *because* it was a day full of mind-blowing demos one after another.\n\nI recorded them on my phone and uploaded online to a lot of thank-you's. The Bootleg page had a fun run, including Jeremy Asheknas's transcript which landed on the front page of HN for the day (not when I posted it, but when he posted it a few hours later).\n\n### Next Research\n\nI really have two very interesting directions to go in: making FRP experience better, or expanding the FRP universe to multi-node. We choose FRP experience for now, but I'm thinking about the other thing on the side.\n\n#### p4 11/14/18\n\n(Tracked at https://github.com/stevekrouse/futureofcoding.org/issues/86)\n\nThe goal is to submit this work to \\ in Feb and a good title for the PX workshop (says JE) is \"FRP eXperience\".\n\nThere are a few different levels here:\n\n* the abstraction / code\n* the streams, including data and how they fit together\n* the output UI\n\n##### Infinite canvas drawings\n\n![image](https://user-images.githubusercontent.com/2288939/48514496-6d9cd580-e82c-11e8-8bf4-1b4af9aef054.png)\n\n##### Other tools for inspiration\n\n* WYSIWYG hybrids such as Sketch-n-Sketch\n* Aprt.us, which would be a more visual language. Key question is how to do higher-order & cyclic, and other abstractions\n* Facebook Origami\n* Lamdu/Luna/Dark and all the projectional editors\n* principle - design tool with timeline editor\n* framer\n\n##### Worst parts of Reflex/Haskell\n\nBut then I thought: let's focus on the really key issue here. What's the highest-leverage improvement to be made? What's the *worst* part of using Reflex/Haskell now? In the shower note on the right below, it says:\n\n1. feedback loop: knowing if the syntax is right, if the types make sense, what the code I'm looking at *is* from both a type, data, and UI perspective\n2. knowing what's possible (syntax, API, types)\n\n##### p4 prioritized features\n\n1. With this framing, a quick compile time (or intepreter time) could be key. Reflex seems to take 4+ seconds. Can I do sub 1? Or faster? How about hot reloading?\n2. Great docs, autocomplete, type annotations everywhere\n3. Automatic plumbing: can we semi-automatically lift transforms inside monadic contexts? Ditto for automatic type coersion plumbing like int to string, etc\n4. Stream visualization, including how streams make other streams, the shape of streams, and also the data for each stream\n5. (Bi-directional) Direct manipulation of UI\n\n![image](https://user-images.githubusercontent.com/2288939/48357110-d0904000-e665-11e8-9154-3768ad3ce414.png)\n\n##### Implementation\n\nJE send me an email:\n\n> Can you implement your FRP eXperience using FRP, and apply it to itself? That might be challenging, but would also be very impressive. It will be seen as a limitation if it can't apply to itself, although that might be unavoidable in the first phase. But I think that at the very least you need to implement it in some FRP framework to avoid the charge of hypocrisy.\n\nMy response: The only implementation of the FRP I argue for in my paper is Reflex/ghcjs. It doesn't exist in PureScript, Elm, F#, etc. Turns out laziness makes it a lot easier to implement. My next experiment is to try to do it in JS with CycleJS. I've tried this in the past. It's not easy -- it's not built for this use case -- but it seems possible, even cycles. More to follow...\n\n* I did a very naive implementation of streams stuff in JS here: https://codesandbox.io/s/81225lrop2\n* It'd probably be better to build off cyclejs. Over a year ago I tried to do something similar so maybe I can start there? https://codesandbox.io/s/xlrynkqoqp Inspecting the types of streams is key. Maybe I can use the cyclejs devtools and/or augment them somehow. Could typescript or something similar help me encode the types of streams of streams of streams? Could monaco help with autocomplete suggestions?\n\nSome other ideas for building this:\n\n* racket turnstule dsl for building typed langauges\n* L. Kats and E. Visser. The spoofax language workbench.\n* C. Omar. Reasonably Programmable Syntax. PhD thesis, Carnegie Mellon University, 2017.\n* Build a JS interpreter with laziness based on [Stephen Diehl's work](https://futureofcoding.org/log#stephen-diehl-lunch)\n\n#### Cloud FRP 11/14/18\n\n(Tracked at https://github.com/stevekrouse/futureofcoding.org/issues/85)\n\n* At SPLASH, I was really excited to find [ScalaLoci](https://scala-loci.github.io/) which was about placement types of reactive programming in Scala. Very related to this work. I need to peruse their Related Work section for more details.\n* I found a way to make sense of reading (which I was having trouble with above). All data is \"public\" but by default anything you do is encrypted so only you can read it. You can also encrypt it with others' private keys if you want them to have access. We'd probably want to make who can have access be a `Behavior` so that we can change this if we want to revoke access.\n* Eventually, the next step here will be implementing this, probably in Haskell\n\n#### Name ideas 11/14/18\n\nNow that I'm clear I am building a system, and not just producing research, I am thinking on a name. Here are some themes it could embody:\n\n* malleability\n* conviviality\n* casual\n* customizability\n* cooperation\n* denoational\n\nAnd here are my favorite names of the moment:\n\n1. Potluck\n2. viv\n3. Stride (probably can't do because there's already a similar-ish thing)\n\nAnd here's what Twitter thinks:\n\n

    Preferences on potential new programming language name..?

    — Steven Krouse (@stevekrouse) November 11, 2018
    \n\n\n#### 2019 Conference deadlines\n\n- \\: Salon de Refuge (Jan 7, April 1) Genoa, Italy\n- \\: PX/19 (Feb 1, April 1) Genoa, Italy\n- PPIG (June-ish, Aug) UK\n- SPLASH: Onward! (mid-April, end-Oct) Athens, Greece\n- SPLASH: LIVE (June/July, end-Oct) Athens, Greece\n\n### Possible Dec 2018 Re-group Projects\n\nI got this project started a year ago as fast as possible, and it seems like now-ish is a good time to regroup a bit and work on a few upgrades... Maybe I'll set aside Dec in do some of these things...\n\n#### Meetups more a thing\n\nIt seems like there's interest in hosting/attending these in lots of cities, and with a bit of effort (a website with guidelines) we can have them in a bunch of cities. I can do London and maybe New York, Caleb Helbing has been talking about starting for Boston, Amjad Masad (of Repl.it) says he can take SF...\n\n#### Branding\n\n* Amjad suggested that a cool logo could go a long way. I actually had a dream a night or two ago about making the logo a interesting color blue...\n* Relatedly, the webiste styling could use an upgrade, a color scheme, top nav, footers, make it clear I accept pull requests on github, comments on pages\n* The podcast could really use intro and outtro music\n* Change the Slack URL to futureofcoding.slack.com, and make a doc explaining channels (maybe fix this up a bit) with descriptions and threading\n\n#### Re-organize systems\n\n* This log system is a bit janky (too much git integration, adding date to headers, hashtag based system could be nice for collecting for topics, todo system could be better than constant appending)\n* Jekyll seems simple but is actually quite complex and I've found it to be a nightmare to get things the way I want. Maybe I switch to a different platform. Maybe I slowly roll my own static site generator. Maybe I do it on now.sh...?\n* Especially now that Google Inbox is dying, I need to get my FoC research + FoC Thinking lists out and into another system\n* Relatedly, Github Issues could use some love. Potentially I could move everything here, and then come up with a better input mechanism to github issues...\n\n#### Sustainability\n\n* I have had a number of people strongly encourage me to set up a Patreon so they can support my work. This is terribly exciting! Top priority.\n* Here's a probably silly idea: a future of coding job board. A place where people in the community can connect with companies in the community. Maybe if it gets big enough, companies can sponsor it to get listed higher?\n\n### Todos 11/14/18\n\n* Dec regroup projects (above)\n* p4 storyboards (maybe 2-3 totally different takes, shallow, brainstorming mode)\n* schedule JE podcast in late Nov", "changes": []}, {"committer": {"date": 1542037303, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a691b6fabbb7d6bf7b53d529c68bfa664a472044", "parents": ["6dc84106e93104bfff9298e5072b969e7d247dea"], "commit": "9905ea021be45351f7265d8771ad79d8144ba2f1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542037302, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a9794135a9d4053ba922896e2b64422ba4a300e", "parents": ["9038e5527d2acfa637ce6f7234d94e2a1ffa9f13"], "commit": "6dc84106e93104bfff9298e5072b969e7d247dea", "message": "fix typo", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1542036245, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "10b34b80e3422f172e23a4427c2273893b09891e", "parents": ["53f08fdddfb679ed8de5e8cb8d4de7c7f774f41c"], "commit": "9038e5527d2acfa637ce6f7234d94e2a1ffa9f13", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542036244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "377f9f2dc9a08af1cfb46a539474cb977c0d2829", "parents": ["928bcf2fbc9d804d7850667846a9aa57df785e79"], "commit": "53f08fdddfb679ed8de5e8cb8d4de7c7f774f41c", "message": "modified homepage links", "changes": [[16, 11, "about.md"], [5, 2, "index.html"]]}, {"committer": {"date": 1542034634, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dfff7cc8a2986b94f876ccb31e17ae52150de236", "parents": ["bb978361f35f870858a28152899777d9a5d2084c"], "commit": "928bcf2fbc9d804d7850667846a9aa57df785e79", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c22fb1f872bcd7d4d648799a12f01bd6cb9e4f8a", "parents": ["71b780b1d4c39d3f315795b0b88d7f85567f69d2"], "commit": "bb978361f35f870858a28152899777d9a5d2084c", "message": "add mobile modeling link to eve history", "changes": [[8, 0, "essays/eve/index.html"]]}, {"committer": {"date": 1542034325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "24f2765343ed8e423780354cf12e49704052ea94", "parents": ["df3bcd8f03910c9cba5b3f6e95ddc71b8ccde245"], "commit": "71b780b1d4c39d3f315795b0b88d7f85567f69d2", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a32fa723ccab47046b860fe6e4802bf8bfa657e7", "parents": ["465ffac1872072fd67a2f18ce0a8bac03285999b"], "commit": "df3bcd8f03910c9cba5b3f6e95ddc71b8ccde245", "message": "added je nov 2018 meeting notes", "changes": [[50, 0, "notes/jonathan-edwards/11-09-18.md"]]}, {"committer": {"date": 1542034020, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7569b43df8397b7806fc66672a9c10563328350", "parents": ["36c7ff8a926b071aa0741e3e1d8ace85775dfdeb"], "commit": "465ffac1872072fd67a2f18ce0a8bac03285999b", "message": "updated git log", "changes": [[10, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1542034018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7a1051d668801fcf3caeb5aa22a1f6ae1acd892", "parents": ["f826c560afcef8da1dadf4fb48992b75175b0f9c"], "commit": "36c7ff8a926b071aa0741e3e1d8ace85775dfdeb", "message": "added granger transcript link", "changes": [[1, 1, "notes/live/2018.md"]]}, {"committer": {"date": 1541692326, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7dacdc72af7b468ed4e458a5f61e441d732a5454", "parents": ["1c19627f87a3bd1bd43bd6b75d28f26036e9dee0"], "commit": "f826c560afcef8da1dadf4fb48992b75175b0f9c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692325, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "06d7f80dfe89edccea267cbfa2609fa0f354a150", "parents": ["8ac30dc4058bd7094c60cf970fde72fc831986bd"], "commit": "1c19627f87a3bd1bd43bd6b75d28f26036e9dee0", "message": "added Gemfile", "changes": [[2, 0, "Gemfile"], [252, 0, "Gemfile.lock"]]}, {"committer": {"date": 1541692277, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56beb93b55ad3f012454ad2f553723621bcc4e18", "parents": ["3ccdda0cab1f3b3e18d5531fe81e116b58731196"], "commit": "8ac30dc4058bd7094c60cf970fde72fc831986bd", "message": "updated git log", "changes": [[0, 10, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541692276, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "87fc0a47e06f9121cbf8a4a1eaf68116ffc3e232", "parents": ["2efa74fed6f8f8c7e2a0c5559e22d9d392fcd8ae"], "commit": "3ccdda0cab1f3b3e18d5531fe81e116b58731196", "message": "update live 2018 styles", "changes": [[46, 17, "notes/live/2018.md"]]}, {"committer": {"date": 1541690181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77cf5444d744ccb3ec824ca01e5afb034e55d2e6", "parents": ["eaceadacd8311d89b73f4a4311f32dbf17624fd4"], "commit": "2efa74fed6f8f8c7e2a0c5559e22d9d392fcd8ae", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541690179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a932145c763410f4285b1ecfa6f0d5e193ba9e1b", "parents": ["35485ef22bb3174d51ab95c0dba00cf5e5799f35"], "commit": "eaceadacd8311d89b73f4a4311f32dbf17624fd4", "message": "added live 2018", "changes": [[166, 0, "notes/live/2018.md"]]}, {"committer": {"date": 1541357411, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "33e9a5816c8438aa005f3170a0f7b271bfba7a4d", "parents": ["1b764837ae84ec363fea46d5cae76c23ba08f45d"], "commit": "35485ef22bb3174d51ab95c0dba00cf5e5799f35", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541357409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bcdb157ce4656ced9bae25178a3189c07b52306a", "parents": ["6498b77009ff98e6f8521351995b063a87d33d57"], "commit": "1b764837ae84ec363fea46d5cae76c23ba08f45d", "message": "last minute FRP slide edits", "changes": [[3, 5, "papers/comprehensible-frp/slides.html"]]}, {"committer": {"date": 1541190041, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc72f2a54fc828c35c06815f6347ce5ab157955f", "parents": ["218f331dca70c5f57d5edf0b5ff8991b07a990cb"], "commit": "6498b77009ff98e6f8521351995b063a87d33d57", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541190040, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d15498479e21288192d5a3a7c29f6af84d7e7f61", "parents": ["2fdae19fe25b59558bb043ea6443911a662732d0"], "commit": "218f331dca70c5f57d5edf0b5ff8991b07a990cb", "message": "new about framing from plane to Boston", "changes": [[64, 137, "about.md"]]}, {"committer": {"date": 1541085868, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e5fb21284a1d7d942f0a9718d7b7ba060476d041", "parents": ["0912f432adf3811326cdcf458104fadd833d6f7a"], "commit": "2fdae19fe25b59558bb043ea6443911a662732d0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1541085843, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c8a884db2320cc7f69b71ef2ea177825c2c7282f", "parents": ["c8742951ed6aa2368a21dc3e2407a37b78dc1a55"], "commit": "0912f432adf3811326cdcf458104fadd833d6f7a", "message": "## Notes 10/31/18-11/1/18\n\n* TOC\n{: toc }\n\n### More FRP talk practice!\n\n[Yesterday's practice](https://www.useloom.com/share/d52de5de266b4862afa2777176f652bb) was pretty solid! I'm not sure if I'll have time to review it and do a better one today...\n\n### Stephen Diehl lunch\n\nThis morning I poked around on the internet for tutorials related to creating \"toy Haskells\" particularly interpreted and not compiled. This is related to wanting to create a FP language with a much *livelier* feel, aka [prototype 4](https://futureofcoding.org/log#prototype-4) and sometimes referred to as viv, potluck, stride, etc. I came across Stephen Diehl's many writings on these topics and saw on his Twitter that he went to the London Haskell meetup last night, so I messaged him and we had lunch a few hours later! I love the internet.\n\nHe claimed that in order to design a functional language you need to settle on three things:\n\n1. AST\n2. Core calculi\n3. Evaluation semantics\n\nThe code is parsed to the AST, the AST is reduced to something that resembles the core calculi (you can see this in ghci with D dump core), and then the evaluation semantics determine how things are evaluated.\n\n#### Core calculi\n\n* untyped lambda calculus (Scheme)\n* System-F (Haskell)\n* Martin Lof (Haskell + dependent types)\n\n#### Evaluation semantics\n\n1. Call by value (eval arguments first)\n2. Call by need (lazy, like Haskell)\n3. Call by push value (he didn't explain)\n\n#### Random notes\n\n* Apparently recursive-do is possible in Stephan's basic interpreter in his book (2k lines of Haskell) because it's just built on top of mfix, which is mutual recursion, and bind...\n* He strongly reccomended I read Ben Pierce's book, at least chapters 1-11. One of his coworkers forewarned that it's more of a reference manual than a book to read cover to cover.\n* He also recommended Robert Harper's _Practical Foundations_, which is about adding things a la carte to semantics.\n\n### Splash plans\n\nDinner Thursday night with some folks. Message me if you want to join!\n\n### Interesting cloud data projects\n\nI found [edsu.org](https://edsu.org/) via [this HN post](https://news.ycombinator.com/item?id=18316116). Seems cool. Similar to a lot of other projects floating around the ether these days. The comments are full of them. Just wanted to jot it down here.\n\n### Todos 11/1/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) (including learning about the stuff from Stephan Diehl above) and/or [multi-node FRP](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n* Read all of [Kartik](http://akkartik.name/) & chat with Antranig and Philip & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox --> github issues/project (including these todos)", "changes": []}, {"committer": {"date": 1540893201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c8a884db2320cc7f69b71ef2ea177825c2c7282f", "parents": ["d80d90f87dc2dab178b785fd8ee3c0cc87fd74ca"], "commit": "c8742951ed6aa2368a21dc3e2407a37b78dc1a55", "message": "updated git log", "changes": [[1, 1, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540893054, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b5c4d9b12c3b0ce63a452619ee867c13941555d", "parents": ["caa632fb57bb9d24c5dccb696956a0d35282f4e0"], "commit": "d80d90f87dc2dab178b785fd8ee3c0cc87fd74ca", "message": "## Practicing FRP Talk\n\nThe plan is to practice the talk once a day until the conference and review it on video and take notes on how to improve each time. Here are the videos I've done so far. They get better so you'd probably want to just go to the last one:\n\nhttps://www.useloom.com/share/340140803ec24931b0bfb0e0f4d260e3\nhttps://www.useloom.com/share/d50ae47bb6f44056b3a5231406598643\nhttps://www.useloom.com/share/c0db356f8193400c92441410e4005686\nhttps://www.useloom.com/share/bc107f1d6e7249208e5152b909e9a659\nhttps://www.useloom.com/share/b636f469dcea42ce946b25dd5c0a75d3", "changes": [[243, 0, "papers/comprehensible-frp/slides.html"], [0, 252, "papers/comprehensible-frp/talk.html"]]}, {"committer": {"date": 1540549021, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "475df93a6e5eff9412bb81fc00e4326372bb3eb8", "parents": ["7ab9f387fba127906ec9716c3a1b4657d769bcca"], "commit": "caa632fb57bb9d24c5dccb696956a0d35282f4e0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540549011, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ca35bcd56abb4996cf4ac56ca7630f25ebefbf5", "parents": ["ad2b722da120705d1f1a2a10d83599123bc5e8cd"], "commit": "7ab9f387fba127906ec9716c3a1b4657d769bcca", "message": "## Notes 10/25-26/18\n\n* TOC\n{: toc }\n\n### Cleaning .git repo\n\nI spent ~2 hours yesterday morning cleaning up my `.git` repo for this website. It's only fair considering how I abuse this repo so, but it was still quite frustrating. The .`git` repo was over 200MB! Eventually I learned that the issue was all the large `.mp4` and `.pdf` files I added a while ago and since removed but since lurked in the git info. So I removed them, and then accidentally pushed those changes to github. Now I'll have to [eventually fix those broken links](https://github.com/stevekrouse/futureofcoding.org/issues/82).\n\n### The Next 700 PLs\n\nConal's talk from two days ago pointed me to The Next 700 Programming Languages by Peter Landin. It felt like very modern essay, not one written in 1965! The beginning didn't speak to me but sections 8 and beyond really did. He coins the term \"denotative language\" to replace the \"functional\" vs \"imperative\" debate: a language with nested subexpressions, where each expression *denotes* something, it's dependent only on its subexpressions listed's values. This is a useful definition!\n\nAt the end of this article there's a discussion section where the author and other famous computer scientists discuss these issues, debating what is a declarative language. It's really amazing to see!\n\n### Denotation of users (shower 8/25/18)\nI want a place to consolidate all my work on this, so I've started [a github issue for it](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n\n* creating a user is a very imperitive notion.\n* much better if we say that a user merely *is* a pair of keys: `user :: (public key, private key)`\n* when we want to construct an stream that's tied with a user, we must merely `sign :: User -> Stream a -> UserStream a` the stream.\n* setting any user details (name, email address, photo) are merely signing data that claims those things for yourself\n* Reading seems less natural, but the idea is that when we want data from another computer, we need to `lift` a `Stream` to a `Stream (Stream)` of some sort (to account for when we get the stream as well as when it happens), and in this lifting we can optionally supply a `User` parameter. Pieces of state themselves will decide if and how they will allow themselves to be lifted, and to which users.\n\n![img_20181025_184131](https://user-images.githubusercontent.com/2288939/47558190-79bb0480-d90a-11e8-8c8e-3f69851d7354.jpg)\n\n\n### Todos 10/26/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or [multi-node FRP](https://github.com/stevekrouse/futureofcoding.org/issues/85)\n* set SPLASH intentions\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox --> github issues/project (including these todos)\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540544890, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ca35bcd56abb4996cf4ac56ca7630f25ebefbf5", "parents": ["44801179c7d9619f377cc5112eec8af7c56aa8ca"], "commit": "ad2b722da120705d1f1a2a10d83599123bc5e8cd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540544889, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e89013140c71266286a4208f840e26b3ba8e33e", "parents": ["b44593b3a48378af0e6329fafda127cc6ad98668"], "commit": "44801179c7d9619f377cc5112eec8af7c56aa8ca", "message": "added dynamicland jfi essay", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1540487898, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e8c558fd64f7dd00d100fb4d642e763cfd439919", "parents": ["4593c9e7789b98f8c2c10994ebfe159d23466465"], "commit": "b44593b3a48378af0e6329fafda127cc6ad98668", "message": "updated git log", "changes": [[1, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540487897, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f3cb403a247fdceffbfb94df73d7fab5be05d3c2", "parents": ["31f416b5ec311ac2781e8dea853f3a70aa9e8b9b"], "commit": "4593c9e7789b98f8c2c10994ebfe159d23466465", "message": "incorporated talk feedback in slides", "changes": [[5, 4, "papers/comprehensible-frp/index.md"], [354, 0, "papers/comprehensible-frp/reflex-diagram-simplified.svg"], [252, 0, "papers/comprehensible-frp/talk.html"]]}, {"committer": {"date": 1540454974, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b8ad63fb8b016a9f0846f37db9074f2a320f571e", "parents": ["0d7609d62b3bef1693bbef2fedd2d5376615a768"], "commit": "31f416b5ec311ac2781e8dea853f3a70aa9e8b9b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540454973, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "20747cc6cac70458036781b95395ca156b98ff43", "parents": ["dca2ff91312ca93913f8450de8479342e521d78d"], "commit": "0d7609d62b3bef1693bbef2fedd2d5376615a768", "message": "updated _data/files.csv which has been hard to update...", "changes": [[84, 78, "_data/files.csv"]]}, {"committer": {"date": 1540367393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f3736de19f19e30d8fb1e2501092418367b3d6ed", "parents": ["120045909ceaa8d9711f68c8f47e4c52fcc57cac"], "commit": "dca2ff91312ca93913f8450de8479342e521d78d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540367365, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79778ad30f7ee2a0763fcf799dd3e0016ce93fbc", "parents": ["50d65da2f4d9eb77ee0a91e6c048ca6b7e1441f2"], "commit": "120045909ceaa8d9711f68c8f47e4c52fcc57cac", "message": "## Back to research & denotational design\n\n* TOC\n{: toc }\n\nYesterday I resolved to do more research (roughly two days per week, leaving three days for emails, podcast, and freelancing), and I had a good start yesterday with a half-day of solid research!\n\n### Older Oct 2018 shower notes\n\nA few scattered notes from earlier this month that are semi-interesting:\n\n* wouldn't it be neat if HTML had a date/time widget built-in (so it could work in email) that displayed a time in the correct timezone automatically (detected from your browser, or manually change-able within the widget)?\n* Is addition (+) too general? Is there not enough *intent* encoded within it? Would it be better to say 7 years and then 2 years later = 9 years? Or 4 kilos with an additional 3 kilos = 7 kilos?\n* why are mouseX and mouseY FRP Behaviors and not Events? Because they happen so fast! Maybe we should expose slow things, such as network requests, as Events, with a way to Behavior-ify them!\n* Context is key: behaviors on my machine are events are yours!\n\n![img_20181023_185142](https://user-images.githubusercontent.com/2288939/47412738-7128c980-d764-11e8-9064-fff991ce45a4.jpg)\n\n### Shower denotational design\n\nConal Elliot is the man. My god, I'm so excited to be able to grok a part of what he has to say! Yesterday I re-watched [Denotational Design: from meanings to programs](https://github.com/conal/talk-2014-lambdajam-denotational-design) and was re-blown away. It's funny: whenever I recommend Conal to friends I have to caveat it with, \"I need to watch his stuff multiple times before I get it.\" This was true of this talk as well.\n\nSo here's the denotational methodology as far as I can tell:\n\n1. Come up with abstract \"uses\" you want the library to be able to accomplish\n2. Come up with a sketch of an API\n3. Write down the relevant types\n4. Write down the μ (mu, meaning) of those types as mathematical objects (likely, functions)\n5. Write down the μ of each API function\n6. See if any of your types fit existing type classes (monoid, functor, applicative, monad, comonad, etc)\n\nSo I tried to follow it in the shower yesterday and I think it went pretty well!\n\n![img_20181023_185153](https://user-images.githubusercontent.com/2288939/47412736-7128c980-d764-11e8-8156-a4685887655f.jpg)\n\nI had a few key insights:\n\n* There should be a way to turn `Events a` on one computer to something like `Event (Event User a)`, where the outer event represents *this computer's perception* of the event happening and the inner event represents when the event *actually happened*.\n* Another key insight: the default behavior of FRP applications should be to persist data for forever unless programmed otherwise. The resetting of app's data on page reload is a wacky accident!\n* I was having trouble coming up with the semantics for a User... We want a way to authenticate someone and then we need a unique key to identify them. In terms of access for reading and writing, I imagine that logic should live (like everything else) with the relevant pieces of state.\n\nI had another insight, but more about [prototype 4](https://futureofcoding.org/log#prototype-4):\n\n* If we want to have an app be always running\n* And we also want to have each modification create an entirely new hash of its definition (no mutation)\n* How do we stay sane?\n* We could have a pointer-based naming system. It could point at a hash to start.\n* Then if we edit a sub-expression in that hash, it creates a new hash for the sub-expression\n* It may auto-create a new definition for the larger expression\n* And it may also auto-update the pointer to point to the new hash of the larger expression\n* Migrations could happen in a similar way if we update a piece of state it could help us combine the old state with a way of producing new state. (Up until time t produce state in this way, then map it to this new format, and then produce state in this new way...)\n\n### Todos 10/24/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or [multi-node FRP](https://futureofcoding.org/log#cloud-or-multi-node-frp) (continued above with denotational design)\n* set SPLASH intentions\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540365958, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79778ad30f7ee2a0763fcf799dd3e0016ce93fbc", "parents": ["c1f9063080c10176bf60bf93dbec127977e176d6"], "commit": "50d65da2f4d9eb77ee0a91e6c048ca6b7e1441f2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540365954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cd0accc1d5312034ac9fd9195d939b8d0e5509bf", "parents": ["d544cf32f358d6e4c8c73a0b9675dcf726e2ee67"], "commit": "c1f9063080c10176bf60bf93dbec127977e176d6", "message": "published episode 32, quinn slack", "changes": [[9, 4, "episodes/32.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1540364585, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "85207c55fa05812af2474947677767c1db78ad70", "parents": ["5caf64c6368a17e1f08fe6156e7ef459c60620d5"], "commit": "d544cf32f358d6e4c8c73a0b9675dcf726e2ee67", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540364581, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97fcf7e0d2815d45725ede3a6bb8a6547d0bc8cd", "parents": ["a6e92e3a99523133b2f7e99f927a01c74da03060"], "commit": "5caf64c6368a17e1f08fe6156e7ef459c60620d5", "message": "add paper talk, and fix paper index", "changes": [[5, 332, "papers/comprehensible-frp/index.md"], [87, 0, "papers/comprehensible-frp/talk-feedback.md"]]}, {"committer": {"date": 1540225333, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "753c3c8a2dbc3e96bea84edcbc72270f0a7101cf", "parents": ["2cbafb47b030ae1e412197c3f1ff39b730dc4f3b"], "commit": "a6e92e3a99523133b2f7e99f927a01c74da03060", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540225330, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "41840acd14f10bb699b1fce34ded6ab87b828a65", "parents": ["cfceff5ebd7f237b7e17c46fa55ac5d64711f4a5"], "commit": "2cbafb47b030ae1e412197c3f1ff39b730dc4f3b", "message": "fix header episode 32", "changes": [[1, 0, "episodes/32.md"]]}, {"committer": {"date": 1540224597, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5300b2478ba70d6af043a7c4940dcf9ac12d8522", "parents": ["103c62c9fc795bb944dadd10542412cea172206a"], "commit": "cfceff5ebd7f237b7e17c46fa55ac5d64711f4a5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540224593, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "07bada34c37ce7b7ef6a0b5ebd4a6520810ff72e", "parents": ["ca97ee3f89c9bd6333b6ff3bef58b0ffda6e48e6"], "commit": "103c62c9fc795bb944dadd10542412cea172206a", "message": "added most of episode 32 - quinn slack", "changes": [[1068, 0, "episodes/32.md"]]}, {"committer": {"date": 1540206475, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b610160465849d7165bf091b1a8ae714e2c3c673", "parents": ["550481b30b10105a033ff952de97c837db08e1af"], "commit": "ca97ee3f89c9bd6333b6ff3bef58b0ffda6e48e6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540206457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "21370f809241eb16f7bddf7b5f215c0762001901", "parents": ["1281d8565ef51471b0cd8583b4098b24f768aaea"], "commit": "550481b30b10105a033ff952de97c837db08e1af", "message": "## Getting settled in London\n\n* TOC\n{: toc }\n\nGetting set up in London has taken a lot more effort than anticipated (wifi, broadband, furniture, food, new friends, transit, etc, etc), but I'm settled enough this week to have time for focused work.\n\n### FRP talk feedback session\n\nJE suggested that I record my practice talk ([slides here](https://output.jsbin.com/gopajav#1)), which [I did here two weeks ago](https://www.useloom.com/share/d50ae47bb6f44056b3a5231406598643), and send it around to a few friends (Glen Chiacchieri, Geoffrey Litt, Ivan Reese, and Joshua Horowitz) and ask that they all meet online to give me feedback, writers' workshop style. We are meeting today at 6pm London time. I'm excited to see how it goes! I imagine I'll have another few hours to hone the talk this week afterwards. I'd like to have a clean recorded version I can share around online.\n\n\n### Italy CS Philosophy and History conference\n\nLast week I attended at two-day conference in Bertinoro, Italy after learning of it from Tomas Petricek on Twitter. I traveled on Monday and Thursday and the conference was on Tuesday and Wednesday. Almost every time I travel I consider the trip not to be worth it. This trip, however, was *almost* worth it. I definitely did learn some things, gained some new perspectives into the history and philosophical origins of my field, but I regret that I could've learned and did more from home on the internet, in a book, or working, rather than listening to random talks at 1x speed. I fear I will have a similar reaction to SPLASH, except that it's 3x the cost of a cheap jaunt to Italy from London.\n\n### My \"life set-up\"\n\nIvan Reese brought it to my attention that my life set up wasn't entirely clear to him from my podcast and notes, which I'd like to correct on the next reflection update episode. The way I've been explaining it to people IRL is that I have three things going on: freelance software work, my podcast, and my research. My research is the aim, yet it's also what I have recently found the least time for. My freelance work is for a venture capital firm connecting their SaaS services together to make money. My podcast is something I do for fun, but recently has gotten sponsorship - it's not enough for me to stop freelancing but Amjad (my sponsor) seems to think we may be able to get it there with some more growth eventually\n\n### Planning this week 10/22/18\n\nHere's the time I have this week:\n\nToday - 4ish hours\nTues - 7ish hours\nWednesday - 2ish hours (busy with Alexander Technique)\nThursday - 7ish hours\nFriday - 6ish hours (meeting Nadia Eghbal)\n\nIn terms of freelancing, I can get away with not working much this week.\n\nIn terms of the podcast, I merely must edit and release Quinn Slack's episode in the next day or two. (3 hours)\n\n This leaves me a lot of time for my research, which has been much neglected the past few weeks! Very exciting.\n\n### Cloud (or multi-node) FRP\n\nWhile my intention was to continue my research in the direction of [prototype 4](https://futureofcoding.org/log#prototype-4), I have been tantilized by the problem of how to extend the FRP abstraction to \"the backend\". In other words, apps with data stored somewhere \"in the cloud\".\n\nTo extend the simple counter application, simply make it a multi-computer counter, that aggregates all the counts to a button across all computers. As is often the case, once put in those words, the problem doesn't seem so hard. One approach is to have a \"lift\" operator that would allow us to transform a button's `Event ()` into a `MultiWindow [Event ()]`, upon which we could do various operations, such as merging all the event streams and counting the occurrences.\n\nOr consider the much more complicated problem of a realtime multiplayer game like agar.io or slither.io. As I've learned the hard way, you cannot simply send the x- and y- positions of each player to each other player and update position accordingly. You must instead *anticipate* where each player is going to be based on their current position and velocity and project them there until you receive the next word on their position and velocity and then you can subtly nudge that player to where they actually are, and are headed.\n\nHow could I model such an arrangement without mentioning low level details such as sockets? I think the concept of *perspective* is relevant here. From *a single player's perspective* the x- and y- position, and velocity are all FRP Behaviors, defined at all points in time because their computation happens to quickly. However, those values for *other players* must be modeled as FRP Events, because we only get glimpses of them at discrete points in time. However we must on the screen display other player's positions as continuous behaviors so we must use the complicated logic to predict and update our *perception* of the other players to construct a Behavior for them out of our Event of them.\n\nMy thinking above is lead by my intuition of FRP, types, and what the abstractions allow. However I feel a desperate need to have a proper medium to help shape my thoughts to only go in proper ways. Potentially Haskell or PureScript could be such a medium. I am considering watching/reading Conal's advice on denotative design again. Maybe I need to come up with mathematical objects to model what I mean by a \"multi-widow\" or \"multi-user\" application or event stream. These are the question on my mind when I pick up this stream of thoughts...\n\n### Todos 10/22/18\n\n* continue research with [prototype 4](https://futureofcoding.org/log#prototype-4) and/or multi-node FRP (above)\n* set SPLASH intentions\n* edit and publish Quinn Slack podcast\n* version 2 of FRP talk, put on FoC site and reorganize the way it is on the website (delete HTML version)\n* Read all of [Kartik](http://akkartik.name/) & redo my /about page\n* Organize FoC Thinking & FoC Research lists from Google Inbox\n* Read m fix paper, and understand how the circular monad works... and how I can simulate it in JS", "changes": []}, {"committer": {"date": 1540203761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "21370f809241eb16f7bddf7b5f215c0762001901", "parents": ["ee159fbc8175098d6393b34e5334661b893f7c00"], "commit": "1281d8565ef51471b0cd8583b4098b24f768aaea", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540203756, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8e3b1cd13970353373b33d6a1dd148b26b41f985", "parents": ["8a7fd6a8625707b90c706718888721cf6b4c760c"], "commit": "ee159fbc8175098d6393b34e5334661b893f7c00", "message": "add meeting w je notes from last month", "changes": [[58, 0, "notes/jonathan-edwards/10-09-18.md"]]}, {"committer": {"date": 1540123337, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d191c8ddd36ea53bff2c233bc23bf208195f9b9b", "parents": ["3ef86e76fa5ed0fa42da1fe49f6304ea9b1c307f"], "commit": "8a7fd6a8625707b90c706718888721cf6b4c760c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b3647c59492ad4c24c85b5395de05acf6057b505", "parents": ["40eb72db034c8680a5dcc28503ebb178a5f8fa78"], "commit": "3ef86e76fa5ed0fa42da1fe49f6304ea9b1c307f", "message": "old journal to raw githack", "changes": [[1, 1, "_data/commitToJournalMarkdown.json"]]}, {"committer": {"date": 1540123291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "170ea7198f7b3fdeabb8007cdbf187ef24beeb18", "parents": ["f23c366d0a4e780d9e664bc7218fa72b4e3507c7"], "commit": "40eb72db034c8680a5dcc28503ebb178a5f8fa78", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1540123282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "682580163a855b3250f9df0dd698fadbf80c9637", "parents": ["2d450cdc12e13028f172f29839415d7f071b4087"], "commit": "f23c366d0a4e780d9e664bc7218fa72b4e3507c7", "message": "rawgit --> raw githack", "changes": [[1, 1, "drafts/regex-for-humans.md"], [1, 1, "journal.md"], [4, 4, "notes/bret-victor/index.md"], [1, 1, "unbreakable-links/README.md"], [1, 1, "unbreakable-links/index.js"]]}, {"committer": {"date": 1539875446, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fc235bd7842340811d4e1232cc49ed4e6ed5013c", "parents": ["019bd1e2998e9a8ac911b099266f56c61827e8ba"], "commit": "2d450cdc12e13028f172f29839415d7f071b4087", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539875441, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "75993443bf38dd69f246547ef4bdab27f2b3b2b3", "parents": ["601d7a2efd51a72e9d6410c9632b4b763006fedb"], "commit": "019bd1e2998e9a8ac911b099266f56c61827e8ba", "message": "updated homepage text", "changes": [[5, 3, "index.html"]]}, {"committer": {"date": 1539363599, "timezone": "+0100", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1539363599, "timezone": "+0100", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0c527c51d6003dd4ddbfc838f175f4c6b4758ca1", "parents": ["3111f8ca250a5ca28f43691f5e1690b3d5097aa8"], "commit": "601d7a2efd51a72e9d6410c9632b4b763006fedb", "message": "underline time on hover to clarify its a link", "changes": [[3, 0, "episodes/31.md"]]}, {"committer": {"date": 1539332462, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "882db18bbf1841110c48c8f1b15abe0953c93917", "parents": ["4090545c52864c7d986ab452059fdf22c7843972"], "commit": "3111f8ca250a5ca28f43691f5e1690b3d5097aa8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539332457, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1239d9763336786db4a79755f1bf339cac2bd22", "parents": ["93aec407e10eeb08294f95b1380cf4a3fa408f1f"], "commit": "4090545c52864c7d986ab452059fdf22c7843972", "message": "added episode 31, nadia", "changes": [[478, 0, "episodes/31.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1539029553, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bd4ca48038931c9b0e3c2da97b0536d56b4cdde7", "parents": ["76bb266e6e487809d966dc2e6a2bb4e5e40a5dbc"], "commit": "93aec407e10eeb08294f95b1380cf4a3fa408f1f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539029550, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2a82ec42071f47d88077592e12be5c56a7469903", "parents": ["094b43a3c8a8e630eb00c3ceda981dc2c1666145"], "commit": "76bb266e6e487809d966dc2e6a2bb4e5e40a5dbc", "message": "added transcript direct linking", "changes": [[10, 0, "episodes/30.md"]]}, {"committer": {"date": 1539028779, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "37be344dc5dcae8160f2ef3cc56f75bc3a4256f0", "parents": ["ab12143aeefb69e8f367bc2107914ca4550901c4"], "commit": "094b43a3c8a8e630eb00c3ceda981dc2c1666145", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1539028727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "430791fbad3712dbf3289d4fb55f6881459dfa37", "parents": ["46b6989fcfa803bfc1fb14bca0891273fc8378a8"], "commit": "ab12143aeefb69e8f367bc2107914ca4550901c4", "message": "## Shower note 10/3/18\n\n![img_0095](https://user-images.githubusercontent.com/2288939/46630530-62bf9880-cb3c-11e8-9120-86bf88c58311.jpg)", "changes": []}, {"committer": {"date": 1538827096, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "430791fbad3712dbf3289d4fb55f6881459dfa37", "parents": ["d00cf61639772941f4e67d4fd6e1b504f0c5104e"], "commit": "46b6989fcfa803bfc1fb14bca0891273fc8378a8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1538826167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "603a98d8b464bd3ee849f19154f6882df23fd680", "parents": ["2f3fe212fba27cc35f290356217b3a5f0f68b930"], "commit": "d00cf61639772941f4e67d4fd6e1b504f0c5104e", "message": "## New city, new framing\n\n* TOC\n{: toc }\n\n### Move to London\n\nMy girlfriend and I moved to London this past Monday. I haven't done any proper work since then, I've been so busy getting our home set up. The trickiest bit was the internet, both wifi and mobile, but I solved it for now with a combination of a mobile wifi hotspot and Google Project Fi with a Google Pixel 2 XL. the jetlag is also annoying. I am hopeful that I'll get back to a real work cadance the week after next, with some work done next week.\n\n### New framing customization conversation\n\nI’ve been (very much in the back of my mind) developing a new framing for my work that I have (somewhat successfully for the first time last night) explained at parties to lay people. (Halfway down this partly-true account, I delve into more technical details than I would not do with a lay person.)\n\nMe: I am working towards a world where people can modify the apps they use while they are using them. The dream is to abolish the “settings menu” of each app, because you can literally modify anything about it. For example, what’s an app you use every day - email? Could you imagine any ways you’d want to change it to suit your workflow better?\n\nParty Person: I can’t think of anything... I’ve never thought of it before.\n\nMe: Exactly! When you can’t change anything, it doesn’t occur to you how it could be better changed. Do you ever question changing the speed of gravity? That’s the first step: enfranchisement, empowerment. Once you realize that you can change things, you won’t be able to stop yourself for coming up with ideas for improvements. For example, I would like to be able to have my email remind me in 3 days when someone I emailed doesn’t email me back, but only when my phone's location is at the office because I don’t want to be bothered at home. That’s custom logic that’s impossible today for no good reason.\n\nPP: That's neat... but many people can barely even use technology as complicated as it already is. Who would really want to change things?\n\nMe: That’s a great point. I don’t think my grandparents would ever customize anything. Neither my parents probably. However, if customizing software became as easy as I hope it can be, I can imagine a world where my father, a businessman, would hire a tech firm to customize much of his firm’s software to their needs, like they now hire a consulting firm to customize their Salesforce for them. But that’s all down the line...\n\nRealistically my main users will be other programmers like myself. You'd think that programmers today could customize the apps they use, but not at all. Today if Gmail open sourced itself, it would be as impossible for me to change any part of it. The codebase is simply to large and the coding style too unwieldy for a single person to comprehend and change it. However, with the new programming language I envision, it should take me a reasonable amount of time (a couple hours, depdening on the task) to customize the software I use in the course of using it -- similar to using a settings menu, but on a bigger scale.\n\nThis new language would unleash the creativity of millions of programmers to improve the apps they use all the time! In the past, open-source software only worked for developer-facing projects like operating systems and programming languages, but with this new language, I think we could build open-source versions of BETTER quality than company-created apps. We have more people and time at our disposal than any company! If this sounds crazy, people thought that a regular-person-created encyclepedia was crazy, yet all the world needed to make an encyclepedia better than any private company's was the platform of wiki software. I believe a similarly democratizing platform could exist for software itself. Do I sound crazy?\n\nPP: Um, a bit < ... nervous laughter ... > But don’t all those apps have proprietary licenses and content deals in place?\n\nMe: Yeah, I don't know how we'd get around liscening deals, such as the ones Netflix have. But as far as other proprietary stuff goes, we could rebuild it in this new language, such as rebuilding social networks into open, federated protocols like Mastadon. (I do worry that Facebook is so big and high-quality already that it'll be difficult to compete with it, but I hold out hope!) It was the same when open-source started. At first, all the offerings were made by large companies and that was assumed that was how it had to be. Then Linux and git, distributed version control changed everything. I think making software customization 100x easier would cause an even more disruptive shift in the way software is consumed and produced. If software is eating the world, I want individuals, not massive organizations to be doing the eating.\n\nPP: Wow. I guess that makes sense... But it’s also nice to have things uniform, such as a back button in the same place in all my apps, and all my connected Google services.\n\nMe: That’s a good point. There’s a lot to be had from centralization as well (until Google shuts down or ruins your favorite service). There are always trade-offs in these things. It’s hard to imagine the solutions to those problems now -- like it would’ve been impossible to imagine Two-Factor Authentication before the web was created -- but I believe we can make a decentralized world as convenient, or even more so, than a centralized one because everyone will be empowered to improve things that they think need improving. Maybe paid services would pop up that would help transport your data between apps.\n\nPP: When you say “decentralized”, do you mean “on the blockchain”?\n\nMe: <... laughs and shakes my head ...> Honestly I have no idea. It's a complex question: who has control of what. Another essential problem: how to manage millions of slightly different versions of the same piece of highly customized software. That alone is an incredibly difficult research question! I’m currently just working on a piece of a piece of a piece of this puzzle.\n\nPP: What piece are you working on now?\n\nMe: I’m working on the visual side of things, building an interface that’s similar to a WYSIWYG like Squarespace or Weebly or Microsoft World but can create any arbitrarily complex interface that code could create.\n\nPP: Oh, that would be useful.\n\nMe: Yep. It’s the holy grail. People have been working on this for decades. My old boss Lloyd Tabb worked on it at Netscape in the 90s. Then he was optimistic as myself, but after beating his head against this problem for years, he believes it’s impossible. I’m still optimistic. There has been a ton of amazing research in the past decades since then, particularly in the field of functional and functional reactive programming.\n\nPP: Do you really think someone who doesn’t know how to code would ever be able to make any significant change to the apps they use?\n\nMe: I really do. For three years I taught coding to people of all ages and skill levels, but mostly beginner children aged 8-13 years old. I learned that the right programming environment makes all the difference. We used MIT Scratch which allowed many students who had never coded before to finish a full whack-a-mole style game in a single class without much of our help! I believe that with the right programming environment and proper motivation, anyone that can read can learn to code. I am hoping to solve both problems with a single solution: if we build a programming environment that allows people to customize the apps they use, we will have also provided them with the motivation to learn how to do it.\n\nPP: So is this even possible?\n\nMe: I intend to spend my career finding out.\n\nPP: Well, good luck with all that.... I see my friend. Great meeting you.", "changes": []}, {"committer": {"date": 1538572732, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1538572732, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "603a98d8b464bd3ee849f19154f6882df23fd680", "parents": ["8e71295e605ba42458cb6278467215d5090673df"], "commit": "2f3fe212fba27cc35f290356217b3a5f0f68b930", "message": "updated frp paper to final version", "changes": [["-", "-", "papers/comprehensible-frp/comprehensible-frp.pdf"]]}, {"committer": {"date": 1537985652, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b953d840b4df4bf85e439b7001afe678fe016c2c", "parents": ["63eb8b5f7088531e3959052e4cf9b5de2fafa59a"], "commit": "8e71295e605ba42458cb6278467215d5090673df", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537985647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7374c930109e79aa0c808b839db1eaa701a5fb35", "parents": ["fe1192b2e67021d2e90b9be85cbb616c310e72a4"], "commit": "63eb8b5f7088531e3959052e4cf9b5de2fafa59a", "message": "frp essay feedback, meeting with JE", "changes": [[36, 0, "notes/jonathan-edwards/09-26-18.md"], [206, 0, "papers/comprehensible-frp/feedback.md"]]}, {"committer": {"date": 1537972807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e501a1ceba8a745ba9f620a8eabe597197e3b46", "parents": ["e631ba9cc2659ffb0e2106f84920e6d18d64f1a6", "9cf50e678ff582d11e0cc32d6af487a654a61f75"], "commit": "fe1192b2e67021d2e90b9be85cbb616c310e72a4", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1537972703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5a700eabec3d037c5aeb55b54f734ee5e38b412c", "parents": ["4415a04ed70e3944c2fa54e23528720586de203f"], "commit": "e631ba9cc2659ffb0e2106f84920e6d18d64f1a6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537972621, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2fdbfb06ecfac3d2329369e76a8477fefba1d8fd", "parents": ["ab202057a02d7817cbcf07ecdcc95a75a88c94ce"], "commit": "4415a04ed70e3944c2fa54e23528720586de203f", "message": "## Lots of random updates Sept 2018\n\n* TOC\n{: toc }\n\nI've had a lot of trouble getting this log entry out. I just got backed up with stuff and then it got harder and harder. I will try in the future to spurt out shorter updates because this was overwhelming and no fun.\n\n### What is \"this thing we all talk about\"?\n\nNames are hard but names matter:\n\n

    What field are these people of?

    Vaneer Bush (Memex), J. C. R. Licklider (ARPANET), Ivan Sutherland (GUI), Douglas Engelbart (computer mouse, “the mother of all demos”), Seymour Papert (LOGO), Alan Kay (OOP, desktop metaphor), Ted Nelson (hypertext), Mitch Resnick (Scratch)

    — Steven Krouse (@stevekrouse) September 15, 2018
    \n\n\n

    Agreed that a name doesn't *really* matter, but as @geoffreylitt says, it's nice to be able to have a phrase instead of handwaving with "you know, the topics that we're interested, related to Alan Kay, Bret Victor, Engelbart..."

    — Steven Krouse (@stevekrouse) September 17, 2018
    \n\n\n### Reading\n\n#### Enlightenment now\n\nBest book I read this year. So amazing. What an optimistic vision for the future. The opening of the book has a quote from one of my dad's favorite philosophers, Spinoza, as well as one of mine, David Deutch. Highly recommend this book to anyone anywhere, but especially people who are anxious about the future. In short, I would vote for Stephen Pinker for president (of anything) after reading this.\n\n##### LogicHub + betting market\n\nRead this also gave me hope for a LogicHub platform for ideas. In the past, I figured we'd \"teach\" people to be logical and then let them loose to do their crowd-source-y thing, but after reading this book I wonder if we would want to make it more like a betting market in some ways. What's neat about a betting market is that:\n\n1. It encourages you to be more thoughtful because you're \"putting your money where your mouth is\"\n2. It allows people with contrarian opinions to move the market towards their opinion based on how sure they are on their opinion\n\nWhat's not great about a betting market is that its \"resulting\" (term from *Thinking in Bets*), the decision-making process is opaque so we can't share or improve on each others' thoughts. It'd be great if we could somehow create a place where you could show your decision-making-process as well as take a stand for your conviction and then eventually get the benefit (or not) when time shows \"who wins.\"\n\n#### How to change your mind\n\nTurns out many of our heroes in this \"field with no name\" did LSD and it got me pumped:\n\n

    🤯 Engelbart did LSD! To aid in problem solving!! (from “How to Change Your Mind”)

    — Steven Krouse (@stevekrouse) September 18, 2018
    \n\n\n#### Kartik Agaram\n\nMe finding Kartik's work is a success story in our wonderful internet research community. In the Future of Programming Slack, Stefan Lesser tried to galvanize us around RSS feeds, then Nikolas Martens posted his list, which Daniel Garcia then found Kartik's work in! Really a team effort.\n\nI am in LOVE with his /about page and want to use it as a jumping off point for a new draft of my own /about page:\n\n> I'm working on ways to better convey the [global structure of programs](http://akkartik.name/post/readable-bad). The goal: use an open-source tool, get an idea for a simple tweak, fork the repo, orient yourself, and make the change you visualized -- all in a single afternoon. Understanding a strange codebase is hard; I can't change that, but I think I can make it easier for people to persevere. I want to carve steps into the wall of the learning process. I want to replace quantum leaps of understanding after weeks of effort with an hour of achievement for an honest hour (or three) of effort.\n>\n> This focus on helping outsiders _comprehend_ a project is unconventional. I'm less concerned about the [readability](http://akkartik.name/post/readable-bad) of a codebase. I find the usual rhetoric around ‘readability’ tends to focus on helping authors merge contributions rather than helping others understand and _appreciate_ their efforts. If you've ever seen an open source project whose CONTRIBUTINGdocument consists of a nit-picky list of formatting rules and procedures for submitting patches, you know what I mean. There's a paucity of guidance earlier in the pipeline, when newcomers aren't thinking about sending a patch, just trying to understand the sea of abstractions, to keep their heads above water. I think improving this guidance might greatly increase the amount of citizen involvement in open source, [the number of eyeballs reviewing code](https://en.wikipedia.org/wiki/Linus%27s_Law), rather than simply using projects and treating their internals as [externalities](https://en.wikipedia.org/wiki/Externality)until the next [serious security vulnerability](http://heartbleed.com/). Our society is more [anti-fragile](https://en.wikipedia.org/wiki/Antifragile) when there's greater grassroots oversight of the software that is [eating our world](http://www.wired.com/business/2012/04/ff_andreessen/5).\n>\n> Everyone doesn't have to understand every line of code that helps manage their lives, but all software should _reward curiosity_.\n\nSurprisingly and also excitingly, I think Kartik and I disagree on a number of points on how to reach this shared goal. I'm excited to read some of his posts soon and figure out why. Here are some I want to start with (some were recommended by him and not written by him) but I imagine I'll read 'em all shortly:\n\n* http://akkartik.name/post/libraries\n* https://lobste.rs/s/zyomiu/what_does_it_mean_design_software_well#c_yvvkwm\n* http://wiki.c2.com/?BlubParadox\n* http://blog.cleancoder.com/uncle-bob/2017/10/04/CodeIsNotTheAnswer.html\n\n#### Spreadsheet-paradigm deep dive\n\nFor Dark, I did a deep dive on the spreadsheet paradigm. I want to write more about this but don't have the time at the moment. The thoughts are in [this private google doc I can hopefully make public soon](https://docs.google.com/document/d/14Tw387o_rnpa7Ru2n5ZpAabiCTrlm3Oan69UCmks6xE/edit#)\n\nOne fun picture (will find this later) is that Forms/3 beat APL at its own game (matrices) - I think they did a user study to \"prove\" this.\n\n

    Turns out my seemingly-novel ideas for improving spreadsheets were in Lotus Improv in 1990 https://t.co/GF8B9l1sy0

    — Steven Krouse (@stevekrouse) September 11, 2018
    \n\n\n### Last NYC FoP meetup\n\nThe NYC Future of Programming meetup went out with a bang. (It's likely not the last one forever, but it's the last before I move to London so will have to wait till I visit or someone takes it upon themselves to continue.)\n\nJason Brennan talked about Beach which was amazing. I find myself inspired by his ideas, including the infinite canvas for a programming language.\n\nThen after some technical (and climate) difficulties Corey spoke about his experiences from Eve. He mentioned how raising VC money probably wasn't the right move. Now he's finishing his degree and is teaching coding with robots and building his language/environment (called Mech) to support that. Mech is quite similar to Even in many respects, which is quite exciting.\n\nJosh Horowitz (from Dynamicland) talked about Pane, his functional programming node-and-wire prototype that he's presenting at SPLASH. One of the key ideas is that he's reversed it: the nodes are data and the wires are functions. This makes a lot of sense when you are trying to show the data. We met up afterwards to chat for ~2 hours about these ideas - hopefully we can meet up again this week to continue. My current thoughts are very much in this direction.\n\n### First podcast sponsorship offer!\n\nI got an email *during the Future of Programming meetup* from Amjad from Replit, offering to sponsor the podcast! This is a huge deal to me, even from just a \"stamp of approval\" perspective. But also the money will help pay for transcripts for episodes which people have been asking about, and other various upgrades. Big win!\n\n(I also want to be careful about this, so if anyone isn't down with this or how I mention them in the beginning of episodes, I am all ears.)\n\n### bretvictorfan.club\n\nI am sorry that this will make likely Bret uncomfortable, but I hope he'll realize that it's in the best possible spirit of love, respect, and admiration for his ideas.\n\n

    I think I'm gonna do it... pic.twitter.com/9wKgw8b7g8

    — Steven Krouse (@stevekrouse) September 19, 2018
    \n\n\n### shower notes july, aug, sept 2018\n\nI have been doing a poor job of moving my shower notes into a digital form of any sort over the past few months. I figured I'd put em all here in case anyone's curious. You never know - sometimes I get those \"in your shower notes from last year you said...\" emails.\n\n![image](https://user-images.githubusercontent.com/2288939/46044930-2b87cb00-c0ea-11e8-9855-c6113b619d33.png)\n\n### prototype 4\n\nThe [future work](https://futureofcoding.org/papers/comprehensible-frp/#7-future-work) section of my paper talks about visual metaphors for FRP. While I do think this is quite important in order to \"democratize visual intuition\" ([Penrose](http://penrose.ink/)), I wonder if it's necessary. What if we take normal FRP haskell-ish notation as a starting place and simply augment it with LIVE-ness, such as an interpreted environment, showing data, and evaluating as far as possible even when there are holes (Cyrus Omar's work). Geoff Litt and Paul Chiusano suggested that expressions with holes are just functions with those holes as parameters, and we could put a slider or examples values in there. Always concretions, never pure abstractions.\n\nHere's another idea I've been toying with: Jason's Brennan's notion of a programming environment on an endless canvas, like in Sketch or Photoshop. One thing this could enable is a structure-less structured editor - in that you could put together pieces of expressions in various places and combine them later. I guess this would be similar to Scratch or Blockly... which I don't love... One possibility is to use the layer metaphor from Photoshop as a programmatic abstraction, but I don't know what that would mean exactly yet.\n\nMy first thought was to build this as a FP thing first and build my way up to FRP. It could be the [data slice-and-dice ninja thing](https://futureofcoding.org/log#yesterday%E2%80%99s-slice-and-dice-data-ninja-playground), starting with JSON/CSV slice, dicing, and joining -- this is related to [datafun](http://www.rntz.net/datafun/).\n\nBut then I went ahead and did a drawings for it as an FRP platform:\n\n![img_0032](https://user-images.githubusercontent.com/2288939/46086431-122c6080-c176-11e8-8a3c-214ab5e09154.jpg)\n![img_0033](https://user-images.githubusercontent.com/2288939/46086528-4acc3a00-c176-11e8-9be7-d5e9017bca9a.jpg)\n![img_0034](https://user-images.githubusercontent.com/2288939/46086472-296b4e00-c176-11e8-9974-441aaf189d39.jpg)\n![img_0035](https://user-images.githubusercontent.com/2288939/46086469-26705d80-c176-11e8-85a8-852189cef443.jpg)\n\n### Accepted to REBLS 2018!\n\nVery exciting, getting my first paper accepted. Got a bunch of feedback to read and then incorporate. Will read it this afternoon, take notes, put them here, and then meet with Jonathan Edwards about it as well.\n\n### New framing of my work\n\n(This is related to the new /about page Kartik has inspired.) Software is never really ever started but only incremented, added to, improved upon. Thus the key is to shoot for customize-ability, modify-ability, change-ability, mold-ability - I want to evoke clay, play-doh, etc. This would truly catalyze the computer revolution because regular people would be able to *modify the software they use*. (The killer app for this language/platform could be a build-your-own-email-app thingy. I can imagine a world where top-level execs hire college grads to help them customize their email app workflow.)\n\nIn order to achieve this, we need the two pillars of comprehensibility (understand what's up quickly) and composibility (plug and play with existing pieces).\n\nFunctional programming is great but we need solid abstractions to fully liberate it from the Von Neuman architecture (Out of the tarpit, Conal). For example, Reflex > Redux (my paper), but we need to make FP and FRP usable with LIVE and other visualizations.\n\nCurrently, I'm working on drawing out various prototypes. I want to stay in this phase for a while, making sure I know what I want to build, getting feedback on it from Jonathan and other smarties. Next step is to scope it down to a reasonable prototype and to go code.\n\n#### New framing open questions:\n\n* would JetBrains MPS be hepful here as a way to build a structured editor for live-ness?\n* can I use an existing language or do I need to start that from scratch as well...?\n\n### Todos 9/26/18\n\n* Get replit.com sponsorship started (draft copy)\n* Fix up Explicitly Comprehensible by Sunday\n* Edit Nadia Eghbal podcast\n* Read all of [Kartik](http://akkartik.name/)\n * Re-do my /about page\n* Continue with prototype 4 / new framing of my work...?\n* Organize FoC Thinking & FoC Research lists from Google Inbox", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1537799987, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1537799987, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c3a43bbe3883e1720f5ebda45678f8806ecf390e", "parents": ["b16ded2435685afbec9ffe90701e7f581ea16000"], "commit": "9cf50e678ff582d11e0cc32d6af487a654a61f75", "message": "added Cubix link", "changes": [[1, 0, "episodes/30.md"]]}, {"committer": {"date": 1537799876, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1537799876, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a72c74d94a4bb9ffd581c495abc6f73bda44c3dc", "parents": ["ab202057a02d7817cbcf07ecdcc95a75a88c94ce"], "commit": "b16ded2435685afbec9ffe90701e7f581ea16000", "message": "fixed Theil typo", "changes": [[1, 1, "episodes/30.md"]]}, {"committer": {"date": 1537645360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b5be5ddc2f2ffcaed9fba7d89ef668dfe46c983", "parents": ["440e89ea14b15089bcb523f462b71d2ca3c126b4"], "commit": "ab202057a02d7817cbcf07ecdcc95a75a88c94ce", "message": "updated git log", "changes": [[0, 6, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537645356, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a8b7fc5ffd1a3d941c535599842a9b73e31ba77", "parents": ["457d7011799a9667ef3149d5836d955ad0c52a75"], "commit": "440e89ea14b15089bcb523f462b71d2ca3c126b4", "message": "working on fixing strange git bug...", "changes": [[7, 0, "_data/files.csv"]]}, {"committer": {"date": 1537644402, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e582f0db46e6c8808483dd15b4e187e3f474dfe", "parents": ["7816da98ca5dcb5a62b5e4ea968d69c9e88ffb83"], "commit": "457d7011799a9667ef3149d5836d955ad0c52a75", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1537644398, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e9e59e371c61db2631cab87acb5bf3a4abbe866", "parents": ["8104ba62a8543d2c73fb2321022563a56498689a"], "commit": "7816da98ca5dcb5a62b5e4ea968d69c9e88ffb83", "message": "added episode 30, james koppel", "changes": [[1157, 0, "episodes/30.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1536683911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d366d84c39fc46fe9a86e28039cdbb6a73397df8", "parents": ["138641ea1454e5d2379dcbc144e0c068138dd3d2"], "commit": "8104ba62a8543d2c73fb2321022563a56498689a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536681927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3f62c9f1ef23fce4294d5fe01b5cb7d0cf1e18c9", "parents": ["c91b94928e098cf0f0c1ed4c5ae9cdf3b5a2a812"], "commit": "138641ea1454e5d2379dcbc144e0c068138dd3d2", "message": "## FRP Morning 9/11/18\n\n* TOC\n{: toc }\n\n### From Debugging Towards Live Tuing of Reactive Applications\n\nI was sent this paper by Jonathan Edwards for feedback to the authors. It was recently accepted into LIVE. It was right up my alley. It's the notion of taking the DAG visualization of a FRP app, but making it editable at the visualization level, similar to a node-and-wire environment, such as Facebook Origami. It was a fun read, and I gave a few notes to the authors.\n\n### Beautiful Conal Quotes\n\nThere are a few things Conal said that have really stuck with me, so I took the time to transcribe them and put them [here](/notes/conal-elliot). But I'll paste them below as well because they are just so wonderful:\n\n> It’s important to me that you cannot look in a behavior and say like “when does it change (change in the sense of events)?” Because in order to answer that question One would need a more complex semantic model.\n> Now, many or most so-called FRP systems I see out there do have some notion of “when does something change.” And every one of those breaks the semantic model.\n>\n> It’s like you have arithmetic, right? So FRP is arithmetic for time-varying quantities of all sorts of types. By arithmetic, I mean some algebra, some set of operators that have nice laws, nice properties. And imagine if you thought of arithmetic as about compositional structure or about the express that you evaluated.\n>\n> If you added 3 and 4, can you tell tell the difference between that and what you get by adding 2 and 5? It’s very important to the laws of arithmetic that you cannot tell the difference. If you could tell the difference, then what you would have would not be a type of numbers with a nice set of operations. It would be something more like a type of trees or something like that. And there would be no interesting equational properties. And you’d have something very complicated. And you’d have to talk about your API instead of talking about... You wouldn’t be doing math, you’d be doing data structure manipulation.\n>\n> For instance every time you hear somebody talk about FRP in terms of graphs or propagation or something like that, they are missing the point entirely. Because they are taking about some sort of operational, mechanistic model, not about what it means.\n>\n> And what I see happen over and over is not only do people generate a complex model but they don’t know it’s complex because they haven’t looked at it precisely. And they thwart most attempts to do nontrivial optimization’s because they’ve exposed too much information. So I want to make it as abstract and useful as possible, so it’s simple for somebody to think about, and I can do radically different sorts of optimization experiments.\n\nOf course, this doesn't mean that a \"debugging engine\" can't break these abstractions to keep track of these things so as to aid you in understanding. The key is that the programmer cannot break this abstraction at the semantic level, so we can do creative optimizations, etc. In other words, I can write `3+4=2+5` and we can talk about each of those four numbers indepdenently. They don't immedialy collapse to `7=7` the instant I write them down.\n\nI also love this beautiful quote about functions as boxes and values as flowing across arrows:\n\n> It's an inherently first-order visualization. In other words, the visualization itself makes a hard visually syntactic distinction between functions and values. What's great about functional programing is that functions are values... [with] visual arrows, with every composition, you get something more complex than what you had before. Complexity grows and grows and grows. Visual langauges are very sparse, rather than a dense notation. So pretty quickly you get swamped... You use up a lot of space not saying very much.\n\n### Feyman Method to Solving FRP Notation\n\nThe method is:\n\n1. Write down the problem.\n2. Think very hard.\n3. Write down the solution.\n\nHere's what that looked like:\n\n![image](https://user-images.githubusercontent.com/2288939/45373019-63f0ba80-b5bc-11e8-92c0-e7e894314bfc.png)\n\nWhat I decided was (for now) to give up on wires and arrows to visualize flow and depedencies. Instead I want to be more creative about showing those things, such as spatial arrangement, labelling (including colors, words, and on-hover interactions), etc.\n\nI then pseudo-coded a few classic GUI problems. (I may steal other problems from [7GUIS](https://eugenkiss.github.io/7guis/).)\n\nWhat I discovered here is that the classic notation of FP isn't all that bad. (That's not quite true. For example, [Conal's original bouncing ball](https://futureofcoding.org/log#bouncing-ball-solved) is tough to read. More on this in the todos below...)\n\nThe problems are:\n\n#### 1. Expression construction made \"live\" & \"concrete\"\n\nYou want to be able to construct these expressions in any order, such as:\n\nA) Start with an widget, like a button, and then derive some state from it, and then plop it back in itself.\n\nB) Start with a notion of some state (you haven't yet defined), and build up a widget from that state, which then can be defined in terms of the widget.\n\nSelf-referencing makes this possible more difficult, but nothing a structure-y editor couldn't solve.\n\n#### 2. See the dataflow behind behaviors & events\n\nI dont see any reason why this shouldn't be possible as an \"overlay\" of some sort on top of the classic FP notation.\n\nI can also imagine an on-hover interaction to functions that allow you to visualize how they transform their inputs into their output, such as [this one](https://futureofcoding.org/log#lets-visualize-all-the-fp-list-operators).\n\nIt'd be neat to have an over-arching shape of an application so you can visually get a sense for how it fits together, but I don't know if anyone's done that yet. Node-and-wires don't tell you much: they tell you less than regular FP syntax, and often in more confusing ways.\n\n#### What's the type of FRP Widgets?\n\nI'm not clear on what the \"type\" of widgets should be -- that is, what they \"return\".\n\nAre they a \"structure\" of some sort that you can then get various event streams (such as click) \"from\"?\n\nOr should they simply return the (or a list of the) event stream(s) that they \"contain\"?\n\n### Blur the line between front & backend\n\nIn the past I called this idea \"higher level HTTP requests\" or \"HTTP = JQuery\". Here are some thoughts I put on Twitter along these lines yesterday:\n\n\n\n### Next steps 9/11/18\n\n* pseudo-code more GUI problems, possibly from [7GUIS](https://eugenkiss.github.io/7guis/), building up to ToDoMVC\n* think about what and where traditional FRP syntax is difficult (such as [Conal's original bouncing ball](https://futureofcoding.org/log#bouncing-ball-solved)), and also more modern syntaxes... re-check out PureScript in this vein", "changes": [[12, 2, "notes/conal-elliot.md"]]}, {"committer": {"date": 1536443596, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1536443596, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9fb88ce02314463fbaaf17f2414ece4c0829f3c6", "parents": ["760bef72611f0aecc1a83ef1a1c8eb3f0c99c254"], "commit": "c91b94928e098cf0f0c1ed4c5ae9cdf3b5a2a812", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1536443201, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1536443201, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "957e8ea461285928b233783bd4dc829a6c4917c4", "parents": ["d3a45ade4511110945e12486b823bf444b00c346"], "commit": "760bef72611f0aecc1a83ef1a1c8eb3f0c99c254", "message": "## Candlewood Lake Vacation, etc\n\n* TOC\n{: toc }\n\nAs expected, I haven't gotten much done here the past few weeks. I was\non vacation and wanted to do more freelance stuff, which I did. I'm\nalso reading a great series of novels by Robin Hobb which are\ndistracting. However, I'm excited about all the chatter around my\npodcast, tweeters, on the Slack group. Thanks to all that listen, and\nespecially to those that write in - even just to say hi!\n\n### Foundations\n\nI've been thinking a lot what we take for granted, and questioning\neverything. So why not the foundations. There's the Turing Machine\n(wah ich is the epitome of inelegant) and Lambda Calculus (which is a\nmillion times better by comparison). But can we do better? Are there\nother alternatives? I did some Wikipedia-ing, but didn't come up with\nmuch interesting. Here are some links:\n\n*\nhttps://www.reddit.com/r/AskComputerScience/comments/78wnv4/is_there_an\n_alternative_to_lambda_calculus_as_a/\n* https://en.wikipedia.org/wiki/Process_calculus\n*\nhttps://en.wikipedia.org/wiki/Category:Term-rewriting_programming_langu\nages\n\nI'm going to this [whacky workshop in\nItaly](https://programme.hypotheses.org/autumn-workshop-formalisms-at-t\nhe-interface-with-machines-languages-and-systems) next month that will\nhopefully encourage me to think outside the box on these topics. What\neven *is* a computer program?\n\n### Misc links\n\n* [Datafun](http://www.rntz.net/datafun/) - functional query language!\nVery cool. Along the lines of the question I've been having about why\nwe have different data structures in databases vs in our languages.\n* [Wolfram on Math\nNotation](https://www.stephenwolfram.com/publications/mathematical-nota\ntion-past-future/) - very good. Thought provoking!\n\n### OAP - open authorial principle\n\nI've been having fun Twitter conversations with\n[Antranig](https://twitter.com/amb26ponder) (who I think lives in\nLondon!). He has [a really cool paper on this\nOAP](https://github.com/amb26/papers/blob/master/onward-2016/onward-201\n6.pdf), which is very similar in spirit to r0ml's notion of \"liberal\nsoftware.\" Many of the examples were in about object inherentance in\nJava which I am allergic to, but I love the idea of formalisizing this\nideal.\n\nWhat are the key actions that need to be enabled for this principle:\n\n1. Finding/understanding all relevant sections in the code. (This is\nrelated to my recent work.)\n2. Making the change (including previewing it)\n3. Managing various versions\n\nI also had two other interesting, random thoughts:\n\n1. The \"Settings Menu\" is a list of global variables you can set to\nrange of pre-defined constants\n2. Where does composability play into the OAP?\n\n### Todo 9/8/18\n\n* \"Future work\" - better \"notations\" for higher-order streams (as in\nReflex). I should be able to get 5-10 hours here this week. That's the\ngoal at least.\n* Organize \"FoC Thinking\" - I've been collecting a list of things to\nthink about in my inbox, but I'd like to get that somewhere public.\n\t* at the top: https://eugenkiss.github.io/7guis/\n* Organize \"FoC Research\" - same idea but more for things to read for\ninspiration, like papers\n\t* at the top: https://github.com/hypotext/notation", "changes": [[1, 0, "log.md"]]}, {"committer": {"date": 1535468707, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f7a64f097b8475d03768a7486919748250669dd0", "parents": ["31838cb3ba540a823236c8920f29114cb637efb1"], "commit": "d3a45ade4511110945e12486b823bf444b00c346", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535468701, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "61bd44823e44ffa30707b84cf6dd3332e868c0d5", "parents": ["2cb7b93a9dd10679b6f900438ed664d78ef6a384"], "commit": "31838cb3ba540a823236c8920f29114cb637efb1", "message": "add woofjs workflow to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1535398329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6ea41727f212e21c3f40b50da21750ac51c9d028", "parents": ["1853da463483be7bb9495b66a7215feba61b9d2b"], "commit": "2cb7b93a9dd10679b6f900438ed664d78ef6a384", "message": "updated git log", "changes": [[5, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535398324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc91374e6cdfe918b4247feda780c77fe14edd05", "parents": ["198556aca1735db6219365d43363fa87c4556326"], "commit": "1853da463483be7bb9495b66a7215feba61b9d2b", "message": "added reflection 13, podcasts 28 and 29", "changes": [[44, 0, "episodes/28.md"], [23, 0, "episodes/29.md"], [2, 0, "index.html"], [4, 0, "notes/aaron-kent-call-9-15-17.md"], [118, 0, "notes/jonathan-edwards/06-14-18.md"], [140, 0, "notes/jonathan-edwards/07-10-18.md"], [92, 0, "notes/jonathan-edwards/08-21-18.md"], [64, 8, "reflections/13.md"]]}, {"committer": {"date": 1535323079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "38b44287889769c52dad7fde674d1422c971213e", "parents": ["d1abf772486931f25b757ffaf93c30966f7d6b10"], "commit": "198556aca1735db6219365d43363fa87c4556326", "message": "updated git log", "changes": [[94, 0, "_data/files.csv"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535323076, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab9a9f7961c2f49c174365b980ad0e7e943559ae", "parents": ["5f41ce04e95929074d60290a4b25e2b1466299e0"], "commit": "d1abf772486931f25b757ffaf93c30966f7d6b10", "message": "attempting to add directory listings...", "changes": [[36, 3, "404.md"], [5, 0, "README.md"], [0, 1, "notes/index.html"]]}, {"committer": {"date": 1535321825, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "081c0350ad966bc567d67d414c019218128b94cd", "parents": ["7ef007826b5d36c7b10de50b4f6c5075312f5583"], "commit": "5f41ce04e95929074d60290a4b25e2b1466299e0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1535321820, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da2543021094982c194c86ed183b3db2a94455df", "parents": ["624d805a08ad51845658edeb0eda31ff0f2d7326"], "commit": "7ef007826b5d36c7b10de50b4f6c5075312f5583", "message": "add sitemaps", "changes": [[2, 0, "_config.yml"]]}, {"committer": {"date": 1535199813, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1535199813, "timezone": "-0400", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "c4e037527c4953c2cc6ff57d4705e62e22a7e282", "parents": ["2554d62622244699c4b78687db33c3191bb0a033"], "commit": "624d805a08ad51845658edeb0eda31ff0f2d7326", "message": "started reflection 13 outline", "changes": [[49, 0, "reflections/13.md"]]}, {"committer": {"date": 1534937625, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1534937625, "timezone": "-0400", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f5b3debd20f26441ccf47ffd77b348dee0741a82", "parents": ["fbd86a350730552192edd863b54c8abb0befd4a9"], "commit": "2554d62622244699c4b78687db33c3191bb0a033", "message": "Fix frp draft redirect", "changes": [[2, 2, "404.md"]]}, {"committer": {"date": 1534542152, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "24f205d609bb455fa01edfaf0a2c051c66d3d75d", "parents": ["99e3f93836b5e480ed9382ec983d074eda0f33b8"], "commit": "fbd86a350730552192edd863b54c8abb0befd4a9", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534542149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "124044ebb598bcdb5322f70681be7e67bbc63ba5", "parents": ["6bff7c5cb005d10bab1b76a7004631a90b6f5990"], "commit": "99e3f93836b5e480ed9382ec983d074eda0f33b8", "message": "fixed LaTeX link", "changes": [[2, 2, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534541885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6bea9488ddf1fbbbbabb7777623c55e9c55f6d11", "parents": ["8be9c9d772ea122f54db871ad41aec5fe8dff524"], "commit": "6bff7c5cb005d10bab1b76a7004631a90b6f5990", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534541882, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9e5695120319696828eadc169e24b36fb32d0902", "parents": ["64b8083919e2cc6756692f30258d6d59ce404b56"], "commit": "8be9c9d772ea122f54db871ad41aec5fe8dff524", "message": "fix frp paper header typo", "changes": [[0, 1, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534541671, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da7bf5146454d444aab1983232b1da15ba0893a6", "parents": ["342b7b9ec018f2188bb7252a5f7b016c5d8d53d5"], "commit": "64b8083919e2cc6756692f30258d6d59ce404b56", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534540295, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0cb58451f427686a20339e78362cdf8118e76903", "parents": ["95bad27a4d9e2bbd0b186b7683eecf97197fe068"], "commit": "342b7b9ec018f2188bb7252a5f7b016c5d8d53d5", "message": "## London, REBLS, & future plans\n\n* TOC\n{: toc }\n\n\n### Moving to London!\n\nLast week I got the Exceptional Tech Talent Visa which means I'm moving there on Oct 1. Just bought my plane ticket. Hope to be there for a year or two.\n\n### Submitted to REBLS 2018!!\n\nLast night I submitted my the [the submitted PDF version](./papers/comprehensible-frp/comprehensible-frp.pdf) of the paper to REBLS! It took ~10 hours to translate the [blog version](./papers/comprehensible-frp) to the PDF version! I had a lot of trouble with LaTeX, so I fiuged I should put up the [full LaTex code and associated files ](https://github.com/stevekrouse/futureofcoding.org/tree/master/papers/comprehensible-frp/LaTex) in case it'd be helpful for future independent researchers. Turns out they extended the deadline for another two weeks just now (probably because they didn't get enough submissions), but it's nice to have it behind me.\n\nLooking at the cost of flights to Boston from London, it seems pretty stable, so I don't need to get it yet. I can also register for SPLASH up until Oct 1 for $100 off. I hear back if I get in on Sept 25th.\n\n### Next two weeks (8/20/18-8/31/18)\n\nNext week I agreed to write an essay about Dynamicland. Also, I'm visiting Boston for a few days to visit my programming research friends! I'd also like to do more work for First Round Capital next week. So I don't think I'll have much time here.\n\nThe following week will be more vacation focused with my parents, brothers, and grandparents. I may do a bit of work for First Round and Dark, but not likely work here.\n\n### Future research directions\n\nHere are a few ideas. I'm going to chat with Jonathan Edwards in Boston next week so maybe we can review this together.\n\n#### 1. [Comprehensible FRP's Future work](./papers/comprehensible-frp#7-future-work)\n\nI'm actually very excited about this section. Here's basically the plan. Take the Reflex TodoMVC diagram from this paper and tweak in in Figma a bunch. At the same time, work on getting this stuff to compile in JavaScript somehow. The goal here is very explicitly a language / visual environment. If it's good, I win. If it's bad, maybe I turn it into a paper.\n\n#### 2. [Anti-IO Monad](http://futureofcoding.org/log#my-growing-anti-io-monad-obsession)\n\nThis is a neat line of inquiry but I don't have a very concrete next step here. It's very related to the ideas in this tweet storm:\n\n\n\nAnd the lovely replies:\n\n

    Interesting.

    2¢ — I think when you push for extreme reductions, throwing away ever more context.. you eventually run into the Berry Paradox (https://t.co/4ULmDa7DPt)

    — Ivan Reese (@spiralganglion) August 10, 2018
    \n\n\n

    sounds like church encoding https://t.co/4Md0GECpXo

    — Mariano Guerra (@warianoguerra) August 10, 2018
    \n\n\n#### 3. [Slice-and-Dice Data-ninja playground](http://futureofcoding.org/log#yesterday%E2%80%99s-slice-and-dice-data-ninja-playground)\n\nThis is very much jumping to an entirely different problem. It's intriguing, but not as likely.\n\n#### 4. Liberal Software\n\nFrom a motivation/vision perspective, this is important. I'd love to collaborate with r0ml on this.", "changes": [[2, 1, "404.md"], [0, 352, "drafts/frp.md"], [49, 43, "index.html"], [819, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.bbx"], [2894, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.bst"], [5, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.cbx"], [18, 0, "papers/comprehensible-frp/LaTeX/ACM-Reference-Format.dbx"], [199, 0, "papers/comprehensible-frp/LaTeX/README"], [88, 0, "papers/comprehensible-frp/LaTeX/acmart.bib"], [2671, 0, "papers/comprehensible-frp/LaTeX/acmart.cls"], ["-", "-", "papers/comprehensible-frp/LaTeX/counter.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-actions.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-architecture.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-entries.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/elm-graph.png"], [47, 0, "papers/comprehensible-frp/LaTeX/frp.bib"], [363, 0, "papers/comprehensible-frp/LaTeX/frp.tex"], ["-", "-", "papers/comprehensible-frp/LaTeX/highlight-actions.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/highlight-entries.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/reflex-graph.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/rxfiddle.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/rxmarbles.png"], ["-", "-", "papers/comprehensible-frp/LaTeX/todomvc.png"], ["-", "-", "papers/comprehensible-frp/comprehensible-frp.pdf"], [357, 0, "papers/comprehensible-frp/index.md"]]}, {"committer": {"date": 1534266841, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "00aaebdc15cad776b0f34b2dfe84964154e9ff44", "parents": ["ba882940a80b1ba98625b6bf3d70e6a9fd5bca52"], "commit": "95bad27a4d9e2bbd0b186b7683eecf97197fe068", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534266838, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2ae2e1149c13fde1392531f475e24cb9728be88", "parents": ["df071f988cff3d6adb8a86709e34d12057c865f0"], "commit": "ba882940a80b1ba98625b6bf3d70e6a9fd5bca52", "message": "fixed frp typos (thanks matt marcus)", "changes": [[7, 9, "drafts/frp.md"]]}, {"committer": {"date": 1534261913, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1856ce64c8b155674610a2748179383fadf9f3b9", "parents": ["d17aec58fed6efab0433df37717d2661f3d531bd"], "commit": "df071f988cff3d6adb8a86709e34d12057c865f0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1534261763, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e41871c8f895bc0fb4fa1f4f3d8f2600f4e4fb09", "parents": ["3c4cbb21b92688aca129a8d0be53f1eb6b76c5ea"], "commit": "d17aec58fed6efab0433df37717d2661f3d531bd", "message": "## Incorporated Jonathan Edwards feedback on frp draft 2\n\n* TOC\n{: toc }\n\nAs usual I received some prompt and insightful feedback from Jonathan Edwards yesterday:\n\n> Abstract\n> scalable->modular, larger->entire\n> “this paper shows how higher-order and cyclic streams can improve comprehensibility.”\n\n✔\n\n> Introduction\n> they depend => they depend upon\n\n✔\n\n> Elm architecture\n> Elm is more like ML than Haskell\n> Defer mentioning higher-order/cyclic streams till later when you define them.\n> Instead: “user interfaces are inherently a cycle of alternating input and output, which is reflected in the Elm architecture”\n\n✔\n\n> Reflex\n> Show the types of button and display\n\n✔\n\n> Note how the do notation is implicitly assembling the view as if by accumulating side-effects from button and display, unlike the explicit construction in Elm.\n\nThe view is very explicitly assembled in Reflex - the vertical order of statements is the explicit order of the view. The \"side-effects\" we get from `button` and `display` are their event streams, which are also explicit. It *is* unfamiliar to use `do`-notation to construct an event propagation network, instead of how it's normally used for imperative code, but that doesn't make this code imperative.\n\n> Is it easy to hierarchically compose views in Reflex?\n\n✔\n\n> delete “we here”\n\n✔\n\n> The price we pay for this explicitness is that events are abstracted from the single values in Elm into a time-stamped stream of values. In Elm we write a global state reducer function that pattern matches on these events. In Reflex we use stream combinators to define the model and view as streams of values of each other. The single global I/O cycle of Elm becomes a number of cyclic definitions between model and view streams in Reflex.\n\n ✔\n\n> Diagrams\n> Finding them a little hard to understand. The top level is the big yellow boxes, but what exactly are they?\n> Categories of some sort? I’d expect the top level of the Elm diagram to be Model, View, and Messages.\n\nThis is a great question. I think this makes it clearer:\n\n", "changes": [[73, 41, "drafts/frp.md"]]}, {"committer": {"date": 1533938667, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b2b724d138d734a174962e9f60a7e9f6c93a117a", "parents": ["e8d146f58c3f897265a6864f98995b8cce4b6db9"], "commit": "514e998799ae0e387b5b262365610aa8fd84d052", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533938055, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ef1a43fc4c269badcf0ae54b19d1f19b4605459d", "parents": ["236313890011b1a50a959a230e6db62f4f18bf35"], "commit": "e8d146f58c3f897265a6864f98995b8cce4b6db9", "message": "## Added more example code to FRP essay\n\nI added a lot to the essay today. It really feels close, and like it's shaping up. I am aiming to get a completed Draft 2 to Jonathan Edwards by this upcoming Monday.\n\nI added counter button examples to explain Elm and Reflex, and then some ToDoMVC code from each to get into the comparison. I could definitely come up with better example apps (larger would be better), and another way to improve the comparison could be to articulate the Elm Architecture in Reflex (which is supported) in order to keep the syntax more uniform, but I don't have the time for that, especially considering how impossible it is to code in Reflex - at least with the set up I have.\n\nI had a VERY FUSTRATING hour or two today when I was working with ghcjs and Reflex and emacs in my remote shell. My god I hated it. I had to take a break because I felt upset afterwards for an hour or so. I wasn't prepared for how annoying it all was. Such a slooow feedback loop. And so fustrating using emacs! For example, copying and pasting code doesn't work because the formatting gets messed up. Just one example of how everything takes longer.\n\nIn terms of what's left, I have to finish explaining the meat of Reflex TodoMVC, and then maybe explain one other part of Reflex ToDoMVC (should only take another 3 hours), and then write out the \"is the cure worse than the disease\" section (~2 hours), and tie it all together with the related work, conclusion and a final read through and edit (~2 hours). I should be able to spend some time tomorrow and Sunday on this, so we're in good shape for getting it done by Monday.\n\n(In other news, last night at 11:30pm I had [some exciting ideas for a future research topic](https://twitter.com/stevekrouse/status/1027765242217029632).)", "changes": [[160, 34, "drafts/frp.md"]]}, {"committer": {"date": 1533846572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "984043e669bd1e5c85b83bc5349148c37e4c2bc4", "parents": ["0ab9cd9699ddff2a287f5f80c194503c629f975e"], "commit": "236313890011b1a50a959a230e6db62f4f18bf35", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533846568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "047ff2b483389114d760f20ee81eee62443114eb", "parents": ["533d10e0afd26477548479dfcf7b7ef97b40fb73"], "commit": "0ab9cd9699ddff2a287f5f80c194503c629f975e", "message": "started adding some realreflex frp types to essay", "changes": [[40, 0, "drafts/frp.md"]]}, {"committer": {"date": 1533843454, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a3ba85438894478e4aeea2cb3cce497542d303ff", "parents": ["6203d4cda9f35794d245f18b0b1e0dbf074cf392"], "commit": "533d10e0afd26477548479dfcf7b7ef97b40fb73", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533843449, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bc0421679dd311a82d4727cdb3ceb03bcc0a93ba", "parents": ["e7236ccd102415f4b0c513c43b0a5f399c90fbfe"], "commit": "6203d4cda9f35794d245f18b0b1e0dbf074cf392", "message": "edited frp essay, and reorganized todos", "changes": [[39, 38, "drafts/frp.md"]]}, {"committer": {"date": 1533586114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a4a7c0aa09c27a09016506fce9125519c2998164", "parents": ["bbc6ef4eb11242836264746cdf5317fd95701051"], "commit": "e7236ccd102415f4b0c513c43b0a5f399c90fbfe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533585568, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6464bfd86d2f0ea07b419555af865bf6a614ab7a", "parents": ["490b931161eeb2b6e46fc38f8ea087ad1956d0b1"], "commit": "bbc6ef4eb11242836264746cdf5317fd95701051", "message": "## Back at the FRP essay!\n\n* TOC\n{: toc }\n\nThe changes I'm comitting now were actually done this past Friday. It's not a ton of work but it wasn't pulling teeth - it was fun. And I'm excited enough about it that I actually made my girlfriend listen to me read it to her - she was a great sport. The langauge is a bit technical / high level. There's a lot I need to expound on / elaborate in there, and I imagine that some ambiguity in the essay are weak spots I need to explore more.\n\nYesterday I had a lot of fun comparing and contrasting TodoMVC in Elm and Redux. I printed out the code for both on paper and wrote all over them. I have a lot of questions about the types of things in Redux that I'll have to investigate next.\n\nOne idea I had is that to make the comparison more apples-to-apples, I could write TodoMVC in Redux but with the Elm Architecture - this is possible but not the reverse. However, that is a bunch of work considering how slow my Reflex/ghcjs feedback loop is. Another possible task is implementing focus on input elements, localstorage, and url hash get/set in Reflex to make them truly equal - but that's not really the point so it may be more work than it's worth.\n\nI only have two weeks before I have to submit to REBLS. I think I have enough for the paper in progress section, but I want to make it as best I can before that date. However, I also have work for Dark and First Round I should do this week - as well as taking some time off to spend with family that's around this month. It's a lot going on!\n\n### Dark research\n\nI spent 3 hours this morning compiling lists of various interesting progrmming environments. What I'm most excited about is my list of classics that I've never played with:\n\n* Hypercard\n* squeak / etoys / morphicjs / pharo / http://gtoolkit.org/\n* Labview\n* apl\n* Self\n* Forth\n* Prolog\n* Sketchpad\n* Matlab / simulink\n* Yahoo pipes\n\n\nAs well as a few I keep haering about:\n\n* prograph\n* paxmsp and pure data vvvv\n* JetBrains MPS\n* emacs org mode\n* TLA+ / Alloy\n* Sonic Pi\n* R\n* https://www.blender.org/\n* Godot engine\n* Qt\n* Chalktalk\n* http://mbeddr.com/\n* http://openendedgroup.com/field/OverviewBanners2.html", "changes": [[21, 18, "drafts/frp.md"]]}, {"committer": {"date": 1533325066, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "126647f6b520ae014192a58e48d5ee8eca353400", "parents": ["138b570a145bf779dd1d93109c5d22acd4ff877b"], "commit": "490b931161eeb2b6e46fc38f8ea087ad1956d0b1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533325062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7a924a919c35bc7d65d6ed24bdf52dfe803f9e08", "parents": ["b1c21b17b190d3aa39e5dd2bd29cbf4d23ff81f1"], "commit": "138b570a145bf779dd1d93109c5d22acd4ff877b", "message": "added log.rss for Stefan", "changes": [[3, 1, "log.md"], [25, 0, "log.rss"]]}, {"committer": {"date": 1533136714, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2810f8c8b42731b7e790bd7f28bc7d63061fe451", "parents": ["f4f444707ad7ec37281ff587198cd99719af9501"], "commit": "b1c21b17b190d3aa39e5dd2bd29cbf4d23ff81f1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1533135745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "56386ea778aa35ee11039a332e85b70204e8db09", "parents": ["9c091363f83f9b0b30826e99a5052832dc914e92"], "commit": "f4f444707ad7ec37281ff587198cd99719af9501", "message": "## Less FRP essay excitement\n\nHard to figure out why this happened, but I'm less pumped about this these days. I think I'll give myself a break and do other work and hopefully I'll naturally get re-excited about coming back to this. Yesterday I spent 2 hours reading the Reflex documentation. It felt like a useful two hours. The key thing I figured out is that it does cyclic updates via an \"event propagation graph\", but I wasn't able to figure out much more details than that.\n\nSome interesting links:\n\n* [Front end - simple comparison between react, react-flux (ghcjs), and reflex-frp](https://www.reddit.com/r/haskell/comments/5xo6sd/front_end_simple_comparison_between_react/)\n* [how to structure a reflex application vs cyclejs and elm (reddit)](https://www.reddit.com/r/reflexfrp/comments/6l5ddn/how_to_structure_a_reflex_application/)\n* [Evan Czaplicki on higher-order streams](https://news.ycombinator.com/item?id=11669206)", "changes": [[1, 1, "_data/git-log.json"], [1, 0, "drafts/frp.md"]]}, {"committer": {"date": 1532969661, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "267a2d938575b535d39334d1bdd01ee17c26e170", "parents": ["987b2dae5c7ddd5f2bff34b3e3411fe287d29220"], "commit": "9c091363f83f9b0b30826e99a5052832dc914e92", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532968232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6aa1ad69db2a5f109952f38f1609788b9640dba0", "parents": ["61baad40901025fa7f0250b3364b8c43ea8d9f81"], "commit": "987b2dae5c7ddd5f2bff34b3e3411fe287d29220", "message": "## FRP Essay, draft 2 started\n\n* TOC\n{: toc }\n\n### Relaxing reading on Friday afternoon\n\nI didn't feel like working on my computer, so I printed out my essay, Jonathan Edward's feedback, and grabbed a few papers to re-read I felt would be relevant. Turns out they really were!\n\nFrom [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)\n\n> The core of Functional Programming is thinking about data-flow rather than control-flow.\n\n> it's about managing the same complexity in a way that makes the dependencies between each piece of code obvious, by following the graph of where function arguments come from and where return values end up.\n\nFrom [Out of the Tarpit](https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf):\n\n> There is in principle nothing to stop functional programs from passing a single extra parameter into and out of every single function in the entire system. If this extra parameter were a collection (compound value) of some kind then it could be used to simulate an arbitrarily large set of mutable variables. In effect this approach recreates a single pool of global variables — hence, even though referential transparency is maintained, ease of reasoning is lost (we still know that each function is dependent only upon its arguments, but one of them has become so large and contains irrelevant values that the benefit of this knowledge as an aid to understanding is almost nothing).\n\nOut of the Tarpit turned me on to Dijkstra's [The Humble Programmer](https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html):\n\n> A study of program structure had revealed that programs —even alternative programs for the same task and with the same mathematical content— can differ tremendously in their intellectual manageability. A number of rules have been discovered, violation of which will either seriously impair or totally destroy the intellectual manageability of the program. These rules are of two kinds. Those of the first kind are easily imposed mechanically, viz. by a suitably chosen programming language. Examples are the exclusion of goto-statements and of procedures with more than one output parameter.\n\n> Argument four has to do with the way in which the amount of intellectual effort needed to design a program depends on the program length. It has been suggested that there is some kind of law of nature telling us that **the amount of intellectual effort needed grows with the square of program length**. But, thank goodness, no one has been able to prove this law. And this is because it need not be true. We all know that the only mental tool by means of which a very finite piece of reasoning can cover a myriad cases is called “abstraction”; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. In this connection it might be worth-while to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise. Of course I have tried to find a fundamental cause that would prevent our abstraction mechanisms from being sufficiently effective. But no matter how hard I tried, I did not find such a cause. As a result I tend to the assumption —up till now not disproved by experience— that by suitable application of our powers of abstraction, **the intellectual effort needed to conceive or to understand a program need not grow more than proportional to program length**.\n\n(Bold is mine.)\n\nReading Dijkstra was a revalation. This quote almost makes my part of my first FRP draft look like plagiarism for not attributing this idea to him!\n\n> the intellectual effort needed to conceive or to understand a program need not grow more than proportional to program length\n\nHonestly, I didn't know! But know I do.\n\n### What my FRP essay is really about\n\nI'm realizing that much of my essay need to be deleted, which is sad, but its important to be ruthless about \"killing ones darlings\" when it's time to. I went ahead and deleted it all and started afresh in the same file, but I expect that I will be coming back to the [first draft](https://cdn.rawgit.com/stevekrouse/futureofcoding.org/01f04f48eab8bd4740beb667ae3fb03b4aaf5b0c/drafts/frp.md) a lot to copy and paste various elements.\n\nI see now that my essay is less about the importance of explicit dependencies, but more about how Elm doesn't have them, but Reflex does, and the reason is higher-order and cyclic streams. I worked on this essay for ~90 mintues today and it was a bit pulling teeth. I'm not sure if it's because I'm in a new setting -- the NY Public Library instead of home -- or if I'm sad about the mass deletion, or distracted by my other part time work, or whatever, but I'm going to stop working on this essay today in favor of other part time work, and start again tomorrow morning.", "changes": [[21, 228, "drafts/frp.md"]]}, {"committer": {"date": 1532702313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d522473d50023ec180e1233f48e1008ddf8b7a40", "parents": ["d129e7339e2aea36ae592472b959ccfd1a92179d"], "commit": "61baad40901025fa7f0250b3364b8c43ea8d9f81", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1532702282, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d8f1687f851859df8749b57d1aa9183dc7d1dec7", "parents": ["c73a703249dafef4341388116248202ddbd73f56"], "commit": "d129e7339e2aea36ae592472b959ccfd1a92179d", "message": "## It's been too long!\n\n* TOC\n{: toc }\n\nI've been busy with my part-time jobs! I spent the first two days this week working for Dark, and the rest of the week working for my new gig at First Round Capital. I found two other gigs (another one at Dark and one at the Jain Family Institute), but pushed off their start dates for a month to give me some time to get this FRP essay done. However, I do expect to be splitting my time 50/50 for $ and research going forward, and if-anything leaning more heavily on the $-side of things because I want to make sure things are moving forward there. It's exciting to not have to worry about money as much! I wonder if I'll get sick of this context-switching at some point like Paul Chiusano did and want to go full time on the research.\n\n### FRP Draft Feedback\n\nAfter completing the first draft last week, I sent it over to Jonathan Edwards for feedback. It was truly excellent feedback. I kept reading it over and over again. He was able to highlight the parts of my essay that I was most concerned about, and give very on-point suggestions. Here is his feedback and my thoughts underneath each point:\n\n> “modular comprehensibility” is a heavyweight phrase, and modularity has many meanings. Maybe “locally comprehensible” is lighter and more precise?\n\nAgreed. \"module\" is a loaded word in tech already. Another phrase could be \"piecemeal comprehensible\". Or how about \"self-contained comprehensibility\"?\n\nA metaphor I find helpful is the difference between a novel where anything can happen to anything at any time, and you have to read it sequentially and completely, vs an encyclopedia, which is referential in that you can just look up what you care about (and the entries it specifically references) and be done. So another possible phrase is \"referential\" or \"definitional\" comprehensibility.\n\n> “implicit dependencies and side effects decrease modular comprehensibility” Is the problem being implicit or non-local? Would non-local explicit dependencies be OK?\n\nReally great question. I totally agree that I don't make this point well, because I'm partially confused by it myself.\n\nFor one, it's important to not only list what the dependencies are, but specifically how the dependency affects it's dependent. It's not \"this term depends on x\", but \"this term is precisely 2x + 17\".\n\nAt the end of the day, I want \"data = ...\", which is an explicit definition. If the definition of \"...\" lives in a different file, I don't care because we can build an automated tool to bring them together for visualization purposes. Explicit-ness is the key, and side effects lead to implicit-ness.\n\nIn the essay I complain about \"action at a distance\", but I think you are correct in pointing out that that doesn't really matter. It's more the implicit-ness that's the problem.\n\n> The graphs are larger than needed to make your point. It took me a minute to figure out what you were doing with the edge adjacencies. Probably should explain in figure captions. It might be clearer to make this point with different syntaxes for representing the graph.\n\nOk, good to know.\n\n> “count is constant in the sense…” is asking for an argument. Is a lazy stream really a constant? You don’t need to pick this fight.\n\nOk, good to know! (Didn't realize it was a fight.)\n\n> The reflex example needs more detailed explanation. What does foldDyn do and what is its type? Show how the stream is higher order. Also note the dependence on lazy evaluation (which is also the reason for space leakiness)\n\nAgreed, will do.\n\n> You need to show todomvc in reflex to compare with the Elm example and show how locality is improved. This is the crux of your argument, and you stopped before you got there!\n\nAh, ok, will do! I think this will help me articulate some of the questions in your comments.\n\n> Don’t credit Glen with inventing live programming. Best citations are Steve Tanimoto and Chris Hancock.\n\nOk good point, will look them up.\n\n> You should address the counterargument that your cure is worse than the disease :). Isn’t the bottom line really the cognitive effort to understand the code? Evan says the Elm architecture is no longer FRP and is easier to understand http://elm-lang.org/blog/farewell-to-frp. FRP can get hairy - do you end up just trading non-local dependencies for convoluted semantics?\n\nTotally, totally agreed. I used to have a section in this essay that referred to Elm's Farewell to FRP, but removed it. I'll bring it back!\n\n> Some might argue that the data flows are just as complex topologically, you’ve just encoded them in a very terse and abstract way. You propose building code viz tools to help. But perhaps we could also add assistance for understanding the non-local dependencies in Elm also.\n\nReally on-point question. I think about this myself too. One way to phrase this question is: can we build an automated tool to parse an Elm project into a Reflex project?\n\nI fear that the Elm Architecture is functional in the same way that passing around global state as an explicit argument is functional as they articulate in Out of the Tarpit:\n\n> There is in principle nothing to stop functional programs from passing a single extra parameter into and out of every single function in the entire system. If this extra parameter were a collection (compound value) of some kind then it could be used to simulate an arbitrarily large set of mutable variables. In effect this approach recreates a single pool of global variables — hence, even though referential transparency is maintained, ease of reasoning is lost (we still know that each function is dependent only upon its arguments, but one of them has become so large and contains irrelevant values that the benefit of this knowledge as an aid to understanding is almost nothing).\n\n### Future of Programming Meetup\n\nWe had a fun meetup on Monday of this week. It was great. There were 8 of us at the Work-Bench offices, which was a great location. The way we ran this meeting was that different people showed what they were working on and got some feedback. Nick from Windmill showed a terminal app that runs compile processes in a more visual way. Sam and Rodrigo from Hopscotch showed interface ideas for linking between projects. Steve and Joe from Universe showed a new on-boarding flow that teaches the interface, which reminded me of [this article that I needed some help from Twitter to find](https://twitter.com/stevekrouse/status/1022101883769561089).\n\n### Interesting links\n\n#### [Functional Programs That Explain Their Work](https://www.youtube.com/watch?v=pqtqaL_ojpk)\n\nI found this link on [lamdu.org](http://lamdu.org). So great! The motivations are very similar to my own FRP essay but they take a very different approach. Their goal is:\n\n> allow the user to selectively focus on parts of the execution to help their understanding\n\nWhich sounds a lot like my goal to make reading proportional to comprehension.\n\n#### [Story Generator Redesign](http://glench.com/StoryGeneratorRedesign/)\n\nGlen sent me this link after an email exchange we had. It's a very thought provoking short demo essay thing. It provides evidence for the \"we need lots of little visual domain-specific environments\" argument.\n\n#### [Seymour: Live Programming for the Classroom](https://harc.github.io/seymour-live2017/)\n\nCrazy I haven't read this yet. Really wonderfully written. Of course I am a bit tired of trying to visualize imperative programs, but this is an interesting take on it. This is a bit more advanced than PythonTutor, which they reference in the essay.\n\n#### [Academic Pensieve](http://drorbn.net/AcademicPensieve/About.html)\n\nFound this article via a Michael Nielsen essay. Turns out my experiment in publishing all my work in progress isn't so new. This guy has been doing it since 2008, and says that it's called [Open-notebook science](https://en.wikipedia.org/wiki/Open-notebook_science).\n\n### My growing Anti-IO-Monad Obsession\n\nMy new motto (from I don't know where):\n\n

    Imperative Programming is doing
    Functional Programming is being

    — Steven Krouse (@stevekrouse) July 27, 2018
    \n\n\nMy favorite picture (from [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)):\n\n![image](https://user-images.githubusercontent.com/2288939/43324921-49e5fa40-9183-11e8-873d-59639e25382a.png)\n\nAnd my new obsession (from [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm)):\n\n> move I/O entirely out of our programming model into the _implementation_ of a denotationally simple model for whole systems\n\n#### HTTP = JQuery\n\nHere's an example of moving I/O out of the programming model. You have a beautiful FRP app. No IO required to render your app. That's what libraries like React are for. They are like JQuery as a service. You tell it what things should look like it and it does the imperative I/O (virtual-dom diffing and patching) below your level of abstraction.\n\nBut what about some arbitrary HTTP requests that your app needs to make to some backend service? How do we get this IO out of our code?\n\nMy first thought was that we should use a stream of some sort to abstract over the request. But that feels a whole lot like what we already have with JavaScript Promises, and is still very imperative.\n\nThen it hit me (in the shower, as it always does). HTTP requests are like the JQuery DOM queries and mutations. We have to disallow arbitrary HTTP requests in favor of a more holistic abstraction (that will do HTTP under the hood).\n\nI'm not firm on the specifics yet... but the idea is that you would declaratively say which data are needed on the frontend, and others should be persisted on the backend. Potentially, the way to do this right is to blur the front-end and back-end to a single codebase that speaks in a higher-level abstraction, which is then broken up when the app is compiled -- maybe like Meteor. This could help solve many of the issues with trying to the front and back ends.\n\n##### Another HTTP example\n\nLet's take another HTTP example. Let's say you have two services that you want to keep in sync with a third server. Each one sends you webhooks when their data updates. Then you go to the other and update the data there.\n\nLet's say service A notifies you of a change via a webhook. You go notify service B with a POST.\n\nAll is good until service B hits you with a webhook (because you just changed it's data with a POST and it's letting you know that it's data was changed). You could go update A with the changes, but that's a bit crazy because A already has the changes - it was the one who first propagated the changes.\n\nIn order to prevent this craziness, you'd need some way at your server to remember what each service knows so you don't send them redundant updates. However, that feels kinda dirty. Shouldn't your service be stateless...?\n\nHere's my take on the no-IO solution to this problem:\n\n```haskell\n--------------------------------\n-- Functions we need to define\n--------------------------------\nstateView :: State{serviceA} -> State{serviceB} -> State{internal}\nserviceAView :: State{internal} -> State{serviceA}\nserviceBView :: State{internal} -> State{serviceB}\n\n------------------------------------------\n-- Virtual States for diff and patching\n------------------------------------------\ninitialState :: Service S => State{S}\n\nstateReducer :: Service S => webhook{S} -> state{S} -> state{S}\n\ndiffState :: Service S => state{S} -> state{S} -> diff{S}\n\npatch :: Service S => diff{S} -> [HTTP{S}]\n```\n\nOur job is to explain how our internal model of the states join together, and then explain how that model should be persisted in each of the views.\n\nUnder the hood, our library will pull the initial states from both services (hopefully not the entire states but just the relevant parts), and maintain it's internal model of each service's data (the virtual-state), and when there's a diff in what *is* and what *should be* as specified in our model, it'll do the diff and patch with the appropriate HTTP requests.\n\nOne thing to note here is that in the virtual state diffing and patching, I'm using the \"Elm Architecture\" of a reducer thing, which I normally don't like. In an ideal world, it wouldn't be a global reducer like that but more like how I argue in my FRP draft. However, it hurts my brain to think about how to do it that way... Anyways, it's an implementation detail so it doesn't matter too much either way.\n\n### Now until 8/17/18\n\nI am angling to submit my FRP draft essay to REBLS on 8/17/18, so I'll be mostly working on that, along with my Dark and First Round work, over the next three weeks.\n\nAs far as the essay goes, I have plenty of work to do as specified in Jonathan Edward's comments above. In particular I need to get clearer on what's problem (implicit dependencies or non-local dependencies) and also make the case that the solution isn't worse than the disease.", "changes": []}, {"committer": {"date": 1531926592, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d8f1687f851859df8749b57d1aa9183dc7d1dec7", "parents": ["a7b70d1b7876250feb683156b336061c4fe05104"], "commit": "c73a703249dafef4341388116248202ddbd73f56", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531926588, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "06615050f9fc335ce0e283715679b93bbbd5bfc1", "parents": ["4f3fb33b10ef70c8f59a8c1c600290e2fbff01bc"], "commit": "a7b70d1b7876250feb683156b336061c4fe05104", "message": "finished frp draft 1", "changes": [[81, 41, "drafts/frp.md"]]}, {"committer": {"date": 1531866385, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf492fb71a016c8c1dea1381eb661f3dead156d4", "parents": ["06490ac561c367e1a3328ba4163f4d68890e32fa"], "commit": "4f3fb33b10ef70c8f59a8c1c600290e2fbff01bc", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866382, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "31183d6cd1f58b11331cf78bb92ed4708cbb969e", "parents": ["ae55a4ac9508454383bfbddbc814e57a7b10f7e5"], "commit": "06490ac561c367e1a3328ba4163f4d68890e32fa", "message": "added episode 27 to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1531866318, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d5eb9a503e5ccf6db0369bc57d59eb9bdfaf6825", "parents": ["eafd7afd1eae824f4b6751b2a0b18ed4780d49bf"], "commit": "ae55a4ac9508454383bfbddbc814e57a7b10f7e5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531866315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cc7a4a12bb2abd89fa1248c00ee99149e6e5308a", "parents": ["4f17cb8b78abee54f1df22e0869027959d86e3bd"], "commit": "eafd7afd1eae824f4b6751b2a0b18ed4780d49bf", "message": "added episode 27, david k piano", "changes": [[44, 0, "episodes/27.md"]]}, {"committer": {"date": 1531845997, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bbd52db65df6753800f91316589be46b088621a6", "parents": ["9192f582fbe2bb0d9d48b55e150d9660adbc3038"], "commit": "4f17cb8b78abee54f1df22e0869027959d86e3bd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845994, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6c8823c249cd5ee18206930d4f36a98fa57154db", "parents": ["d94698e5e0a1ea78bb4307f237336bcb54cd6fad"], "commit": "9192f582fbe2bb0d9d48b55e150d9660adbc3038", "message": "small hilltop edits", "changes": [[1, 4, "notes/hilltop-lang.md"]]}, {"committer": {"date": 1531845830, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "42d2ff9321b4ade7c1da283759da83284a0ff0f4", "parents": ["a66cb5532b07705c34ab3f5b353b55c05e26b2a0"], "commit": "d94698e5e0a1ea78bb4307f237336bcb54cd6fad", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531845827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e97270de8ad030eec71e61b155d055166816a7db", "parents": ["2760505d2f5732c2cad024cd5ca918226be418ab"], "commit": "a66cb5532b07705c34ab3f5b353b55c05e26b2a0", "message": "added hilltop lang review", "changes": [[63, 0, "notes/hilltop-lang.md"]]}, {"committer": {"date": 1531836662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dabd0f691de6b566da38d4c7bde22256fc3053b5", "parents": ["af6c9c9ff9332d2e4b665cc343b6e29dd76ea34e"], "commit": "2760505d2f5732c2cad024cd5ca918226be418ab", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836659, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f0996ca2cb09c94a1bafb021eeab289da2c0789", "parents": ["deaef154dc93ee4bd75709790e03c423e4a54239"], "commit": "af6c9c9ff9332d2e4b665cc343b6e29dd76ea34e", "message": "reflex typos", "changes": [[3, 3, "drafts/frp.md"]]}, {"committer": {"date": 1531836554, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ceade910b1e94d30687b282b34a51340509b0407", "parents": ["d0d80ef7b8bef2f486fa01d92bcc912e708ae0bd"], "commit": "deaef154dc93ee4bd75709790e03c423e4a54239", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531836551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "757f6acfaf81f643f476afe643fd05ad50a0fc5e", "parents": ["2188ee996d95814bb6aee17918f72b2697f03cc6"], "commit": "d0d80ef7b8bef2f486fa01d92bcc912e708ae0bd", "message": "small frp essay changes", "changes": [[13, 25, "drafts/frp.md"]]}, {"committer": {"date": 1531835985, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8448a9e485fb4da247ac79593e024e9cd0ce51ec", "parents": ["8c9726614c6538b2d00aef70d7105c5c1e65106d"], "commit": "2188ee996d95814bb6aee17918f72b2697f03cc6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531835926, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "16eec47965bc45f9413641276938058fbd7e57fc", "parents": ["2e24c527c3369067008bbd64f2980ea8711da878"], "commit": "8c9726614c6538b2d00aef70d7105c5c1e65106d", "message": "## Oops forgot to add essay last commit\n\nI also made more changes this morning. I think it's really coming together!", "changes": [[109, 107, "drafts/frp.md"]]}, {"committer": {"date": 1531781840, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a9447cf60287b6d40be12d6d57db91eb7142bd7", "parents": ["ef6884cb1719124574a56be0c196b5d8c9f2426d"], "commit": "2e24c527c3369067008bbd64f2980ea8711da878", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531781767, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aab07a66cbf9d738742942ce81c077d74b6b4895", "parents": ["2f0cbf878a7138990fb919c51fd7ce56df62b037"], "commit": "ef6884cb1719124574a56be0c196b5d8c9f2426d", "message": "## Turning FRP essay into real paper\n\nI found [some solid advice](https://www.cis.upenn.edu/~sweirich/icfp-plmw15/slides/peyton-jones.pdf) on Twitter for writing a research paper and it got me excited about turing my article into a real paper. I gave it a shot and like it so far.", "changes": []}, {"committer": {"date": 1531748178, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aab07a66cbf9d738742942ce81c077d74b6b4895", "parents": ["185b24afd9ac37b5101bb4f96d41b868484e19e4"], "commit": "2f0cbf878a7138990fb919c51fd7ce56df62b037", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531748176, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "641fac122450d7934f27524d3ac957c73e2f2d40", "parents": ["7722af28cec608f2c48b74230afeae8750a92662"], "commit": "185b24afd9ac37b5101bb4f96d41b868484e19e4", "message": "small frp essay edits", "changes": [[7, 7, "drafts/frp.md"]]}, {"committer": {"date": 1531747745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747745, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "044fd5f04f17d7e935dbf40233c2da6eac5bbbae", "parents": ["42dc0abbe8b43e725bf2178d3e6b29d11decac6a", "1239b90ff29b18e2e36808828595c3d8844cbd8c"], "commit": "7722af28cec608f2c48b74230afeae8750a92662", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1531747735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "44e26041dc5ee1a0ff502b08cbfb38ce63f8e64e", "parents": ["47dce74444500002d577a7c265bad349d3b5b6d3"], "commit": "42dc0abbe8b43e725bf2178d3e6b29d11decac6a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531747731, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "de669e091c123f3ec0733b36ed670538248e3cb8", "parents": ["a335012aed59dffb91fa6c893bcd10e7cedf8ff7"], "commit": "47dce74444500002d577a7c265bad349d3b5b6d3", "message": "continued editing frp paper", "changes": [[68, 19, "drafts/frp.md"]]}, {"committer": {"date": 1531504993, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1531504993, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "48addff2b262359183929ceb4eea6ad9e4ff5fe2", "parents": ["a335012aed59dffb91fa6c893bcd10e7cedf8ff7"], "commit": "1239b90ff29b18e2e36808828595c3d8844cbd8c", "message": "Create recurse-center-application-07-13-18.txt", "changes": [[48, 0, "notes/recurse-center/applications/recurse-center-application-07-13-18.txt"]]}, {"committer": {"date": 1531486141, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3fe9506a2f071c497f32d0e47f308de18fb31183", "parents": ["a8ebbb9c0e2b74bdcba00ae7b6266892e22bf8bf"], "commit": "a335012aed59dffb91fa6c893bcd10e7cedf8ff7", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531486137, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9bf854a07ab4fea2ac207a9a7c9c5995ab9569a", "parents": ["bb68b4d1119b77ae25910eb8e000359b674f2337"], "commit": "a8ebbb9c0e2b74bdcba00ae7b6266892e22bf8bf", "message": "edited frp draftinto more of a traditional paper format", "changes": [[51, 42, "drafts/frp.md"]]}, {"committer": {"date": 1531426572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2e126b380c2dd918b4ec87af3e760dfbcda4c961", "parents": ["d7a1624c13ec2967d5130b8ea0953360978b7ce6"], "commit": "bb68b4d1119b77ae25910eb8e000359b674f2337", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531426569, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "030749bdff6982b360363523d8b537383dd8f105", "parents": ["73fc73152de1fc60449118164889bf99ba0cf907"], "commit": "d7a1624c13ec2967d5130b8ea0953360978b7ce6", "message": "fixed frp draft iframe issues", "changes": [[4, 4, "drafts/frp.md"]]}, {"committer": {"date": 1531425632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b4cb9831c1187b029f58e34581e53b0803f49c42", "parents": ["7156820755365430d156742bfe8ea26d2d551852"], "commit": "73fc73152de1fc60449118164889bf99ba0cf907", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531424877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ffaaeaac0475eb424d76282a49700b2e5b05a16d", "parents": ["1ff9c47183cf85136b1041a16343620cad8ff66a"], "commit": "7156820755365430d156742bfe8ea26d2d551852", "message": "## Draft 2 of FRP Essay\n\nI got started this morning at 7am and worked until now (4pm) with only two breaks, a 90-minute and a 30-minute one, which means I worked on this for 7 hours today!! I'm very proud of myself. I'm also excited about how the piece is coming together. I feel my understanding of these topics deepening as I research them more fully in order to write the piece.\n\nOne thing in particular that I came across is the [imitate](https://github.com/staltz/xstream#-imitatetarget) method in CycleJS's xstream, which makes me wonder how far I can get with an FRP framework in vanilla JavaScript... It'd be neat if I didn't have to build a whole runtime!\n\nI was only planning to work on this until noon-ish, then run, and then work on my UK visa application, but I didn't do it that way. I'm going to go run now. If I have energy after that, maybe I'll do my visa app, but if not I'll do that tomorrow. I also have to do my Dark work for next week tomorrow, because I'm going to be out of town this weekend, so I likely won't work on this again until Monday, or more likely, Tuesday of next week.", "changes": [[174, 18, "drafts/frp.md"]]}, {"committer": {"date": 1531344432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "574ed7c839ec7879654a5b013acf0b30e9214112", "parents": ["258508c2c20eee52426cd690d625c64e35350830"], "commit": "1ff9c47183cf85136b1041a16343620cad8ff66a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531343715, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9e3c1a6611ebe969e7e83d98499a336cb43b3a7", "parents": ["7d9fc4a25feb70768c7464bc991a8e68eaf14e6f"], "commit": "258508c2c20eee52426cd690d625c64e35350830", "message": "## Plan for July 2018\n\n* TOC\n{: toc }\n\nYesterday I had a wonderful conversation with Jonathan Edwards, which helped me figure out my focus for the next month, and possible beyond. I feel very lucky to get his advice.\n\nI updated him on my progress, that I was able to solve [DOM Recursion Problem with Reflex](http://futureofcoding.org/log#dom-recursion-problem-solved-by-reflex), but haven't made much progress on the UI part of visualizing the stream operators yet.\n\nHe was able to give me really great advice here, because he's potentially the original guy who's been insisting that we need to work both on the model and the UI at the same time - as opposed to PL people who only work on the model and Bret Victor people who only work on the UI. It's called co-design, desigining two different pieces towards each other.\n\nHe suggested that before I work on the UI, I should write a blog comparing Reflex to Elm, why I like the Reflex semantics as a model better, why the UI of Haskell is hard to use and why we need a better UI, and only vaugely hand-wave about how I think the UI will look.\n\nThis essay will be a great foundation to build off of. I'll share it on social media, HN, etc.\n\nI started the [essay today here](/drafts/frp).\n\nThen, I should pick a few very specific and small examples, and draw out by hand and Figma what they should look like from a storyboarded perspective, not worrying too much about the general case. I can then publish this as a follow up essay. However, Jonathan warned me (and I agree) that this will likely be difficult, possible where this research thread comes to an end, so we'll see...\n\nHowever, if I am able to get something that looks promising, I should, in effect, concatenate the two essays into a single narrative and submit to either LIVE or REBLS at SLASH on Aug 17th. In particular, Jonathan noted that I should explain in my submission the \"technical challenges for building this for real.\"\n\nIf I don't make it in time for SPLASH, the next relevant workshop would be PX at in the Spring of 2019, which is very far away, so I hope I make it in time!", "changes": []}, {"committer": {"date": 1531330532, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9e3c1a6611ebe969e7e83d98499a336cb43b3a7", "parents": ["e1767a69e27cd02a2999bbdf0e1b9f4dffd15313"], "commit": "7d9fc4a25feb70768c7464bc991a8e68eaf14e6f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531330528, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4899950cc4d54c5967cda52629c490473f9b1489", "parents": ["99ac4107746c2dca53676e3e5ca82b807c291267"], "commit": "e1767a69e27cd02a2999bbdf0e1b9f4dffd15313", "message": "started frp essay draft", "changes": [[53, 0, "drafts/frp.md"]]}, {"committer": {"date": 1531325899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "12c3a8f1d8a63f7641dc6c8402fdfad6ff69ecd1", "parents": ["15716a0953e420fd46e09b4fcce155f54f9d9472"], "commit": "99ac4107746c2dca53676e3e5ca82b807c291267", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531325895, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f6acf9e2c72deb45101899cc23eee44d67038eee", "parents": ["7f23878ac38945a2f1d3ca95f0f601e0c40ecf62"], "commit": "15716a0953e420fd46e09b4fcce155f54f9d9472", "message": "created drafts folder, moved essays, and fixed broken links", "changes": [[16, 0, "404.md"], [52, 0, "drafts/app-idea.md"], [175, 0, "drafts/casual.md"], [77, 0, "drafts/customer-support.md"], [51, 0, "drafts/invented-or-discovered.md"], [59, 0, "drafts/learnable-programming.md"], [38, 0, "drafts/legal-code.md"], [60, 0, "drafts/power.md"], [41, 0, "drafts/regex-for-humans.md"], [116, 0, "drafts/visual.md"], [0, 52, "essays/app-idea.md"], [0, 175, "essays/casual.md"], [0, 77, "essays/customer-support.md"], [0, 51, "essays/invented-or-discovered.md"], [0, 59, "essays/learnable-programming.md"], [0, 38, "essays/legal-code.md"], [0, 60, "essays/power.md"], [0, 41, "essays/regex-for-humans.md"], [2, 0, "essays/sissies.md"], [0, 116, "essays/visual.md"]]}, {"committer": {"date": 1531324765, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1f3392d41a3860507a00623958a15545b9ec7fe6", "parents": ["d8dfad8cce899187936581c790611ce401c960b2"], "commit": "7f23878ac38945a2f1d3ca95f0f601e0c40ecf62", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531324761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2d1b4120e6ca411a7e94f72ef1b9c5de351728d", "parents": ["f1b5b3aa81d1ede791cfac1b21d16bc343d2e9be"], "commit": "d8dfad8cce899187936581c790611ce401c960b2", "message": "refactored 'past research' to 'essays' section", "changes": [[1, 4, "index.html"]]}, {"committer": {"date": 1531151108, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea55d44779b6ac272989aebff4122892ec1f59ae", "parents": ["7ac210c314949b058316b324c3cdf6104f1eda1b"], "commit": "f1b5b3aa81d1ede791cfac1b21d16bc343d2e9be", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1531150988, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "59b9301d8cb7999354ec9ee0df00f7f8c3f32b9d", "parents": ["7bef626190cc356b67729f70ce85415671955a07"], "commit": "7ac210c314949b058316b324c3cdf6104f1eda1b", "message": "## Added Reflection 12\n\nIt's been a while since I reflected on my work here. Part of me things that reflection text should really show up in my log... Maybe I'll add that feature one day, but until then, you have to click on the link above.\n\nAlso, maybe I'll turn this reflection into a short podcast update episode. I could tack it onto the beginning of a podcast interview, like Sam Harris does, but I feel like that's a bit disrespectful to my guest, who doesn't really want that nonesense before their interview, especially if they're going to share it with their audiences.", "changes": [[86, 0, "reflections/12.md"]]}, {"committer": {"date": 1530891821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b00129754bf0b20242717e9520e925e6e484932a", "parents": ["f60c77247796431a0d75b9772de70d7cb67c7f07"], "commit": "7bef626190cc356b67729f70ce85415671955a07", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530891810, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3002adf6a54bb4087f16abe8fa60aa4df50a597b", "parents": ["c624aa70a0ffe154610fd5f520e06ec9ebf2427f"], "commit": "f60c77247796431a0d75b9772de70d7cb67c7f07", "message": "## Yesterday’s Slice-and-Dice Data Ninja Playground\n\n* TOC\n{: toc }\n\nWhile watching fireworks the night before last, I couldn't stop thinking about [Flowsheets](https://tinyletter.com/Flowsheets/archive), my [fuzzyset refactor](http://futureofcoding.org/log#email-to-glen-fuzzyset--fp), my [ideas to improve ObservableHQ](http://futureofcoding.org/log#notes-on-observablehq), and for my own [reactive playground](http://futureofcoding.org/log#project-idea-functional-immutable-strongly-typed-notebook).\n\nHere's how I put it to my girlfriend: \"Glen and I are working on the same problem - code comprehensibility - and with similar approaches - visualizing the live data - but for different types of code. He's working with normal batch code (mostly static input, mostly static output), like data processing, while I'm working with reactive code (which responds to inputs over time), like user interfaces. So my problem is strictly more difficult - possibly even a superset - and is *ever harder*, because I want to allow higher order streams (streams of streams).\n\nSo it occurs to me: why start with the harder problem? We still as an industry haven't solved the easier problem. If I want to do simple data processing, I don't have any satisfactory options. The easiest to use is probably Excel / Google Sheets, but that's a pain and limited. And then there's Jupyter or ObservableHQ, but those are a nightmare in all sorts of errors and slow feedback loops.\n\n### Let's visualize all the FP list operators!\n\nMy first thought was to create metaphoric and live visualizations of all the FP list operators in Figma, such as map, filter, fold, find, some, etc. My thesis here is:\n\nAll list (or stream) operators have highly visible structures that programmers have to simulate in their heads. Why don't we bring those mental visualizations out onto the computer screen as the actual interface? WYSIWYG for list manipulation!\n\nFor example, here's map:\n\n![image](https://user-images.githubusercontent.com/2288939/42383185-84a45440-8104-11e8-930e-c260cc8c6ced.png)\n\nThis is literally how functions are taught in school to children. They are a mapping from a domain to a range. Arrows from one list to another. And you could imagine actually writing the map function on any of the arrows and seeing the data update through the arrows.\n\nFor the fuzzyset problem I’m working on, the visual representation I have in my head is something like:\n\n![image](https://user-images.githubusercontent.com/2288939/42387500-6b5db632-8110-11e8-9c75-2e8222f3f4a1.png)\n\n(It was prettier in my head.)\n\nHowever, I was discouraged when I went to the [lodash documentation](https://lodash.com/docs/4.17.10) to see how many of these I'd have to make. Part of my thesis is that there are only a few key primitives you need to do anything you want with lists. (While this is technically true because all you need is fold, it's likely not true when you consider our mental visualizations of these operators: they are more specific. For example, it'd be difficult to detect that I'm doing a map with `foldr (\\x xs -> x+1:xs) [] [1,2,3]` to get it to expand to the arrows viz above. Ditto with filter, etc.)\n\nHowever, this isn't a showstopper. Just because there are a couple dozen (maybe even ~100) operators doesn't mean I should go home. It's actually a simple-ish project if I want to commit to it. Here are a few questions I have:\n\n1. What about nested combinators? A filter inside a map? A map inside a fold? What about both? Look at this crazy code:\n\n![image](https://user-images.githubusercontent.com/2288939/42384858-28c12ea0-8109-11e8-81b9-78fa6787d0e8.png)\n\n2. How do you visualize the current values of computations within the body of lambda functions? Maybe this isn’t a real problem (as long as you have concrete data to flow through), or maybe it’s the same problem as (1) above.\n\n3. What about user-defined functions? Do they write their own visualizer?\n\n4. Are the FP combinators the essence of list (or data) combinatorics? What about APL? Sometimes nested lists and maps within lists seem cumbersome. What about SQL?\n\n### How about Luna-lang?\n\nI did not have fun with Luna, despite it being squarely centered in all the things I’m into: Haskell, visual coding, live data. For one, Luna only visualize dependencies between values, which are much less rich than I’m thinking in terms of specific metaphoric pictures for each combinator.\n\n![image](https://user-images.githubusercontent.com/2288939/42385339-7be3cf4c-810a-11e8-93a4-d4f605ab0482.png)\n\nSecondly, it’s not nearly as live as I’d want.\n\n### How about a spreadsheet?\n\n![image](https://user-images.githubusercontent.com/2288939/42385591-32d183a2-810b-11e8-8603-7cd785a77aa4.png)\n\nIt was easy to normalize the string (except the regex wasn’t compatible, so that part needs work).\n\nThere’s no `range(10)` function, so I had to create the series by dragging down `+1` of the previous number manually, which won’t scale. I’m not sure how to get around this.\n\nI was surprised to see that there are named ranges now which are similar to variables. The names don’t show up on the sheet (I had to add them manually above as a label) but you can use them in formulas. I did this with `value`, `normalized`, and `gramSize`, but got bored and stopped after a certain point.\n\nSplitting into grams as a mapping was very straight forward (except that there’s no substring and I had to use `LEFT` and `RIGHT` - it’s a bummer there’s no function creation either).\nGrouping and counting was funny - I actually used the `Query` function which is very SQL-like. It worked like a charm, except it didn’t keep the original ordering, which was a bummer. (You can see the query in the bottom of the sheet.\n\nIn order to try to keep the order, I pulled the counts back up into the original grams list. This works, but then there are duplicates of course. I guess I could first remove the duplicates and then join with the counts, but I didn’t do that.\n\nOverall, it’s possible to do stuff in a spreadsheet, but:\n\n* the cell position references are the worst (always breaking things)\n* you need to dynamically creating ranges (not by dragging down)\n* you need user-defined functions\n* you need to see both the data and the formula at the same time\n* you need to be able to visually see the relationships between cells without looking at formulas\n* you need to be able to export your process to code that can run as a library\n\n### What about Flowsheets?\n\nI haven’t had the chance to play with it myself, so I don’t really know, but it looks great. I’d prefer a FP language instead of Python, but doesn’t really matter. I’d be curious how it handles nested data structures.\n\n### What about APL?\n\nI spend ~3 hours yesterday on replicating this code in APL. God it was hard!\n\n![image](https://user-images.githubusercontent.com/2288939/42386185-c44df03a-810c-11e8-836f-da12c5068964.png)\n\n[Here’s a link to it on tryapl.](https://tryapl.org/#?a=%7B%u237A%2C%u2262%u2375%7D%20%u2338%20%7B%27-mississippi-%27%5B%u2375%5D%7D11%203%u2374%u2283%2C/%7B%u2375+%u23733%7D%A8%AF1+%u237311&run)\n\nIt took a very long time, it was very frustrating, I barely understand how the code works, and I am still not quite done. I haven't figured out how to abstract over arbitrary word inputs which would allow me to remove the '-mississippi-' string and hardcoded 11's and 3's.\n\nOne of my biggest complaints about APL is the documentation. It's like it's written in another language! And I wasn't able to find great Stack Overflow support.\n\nI’ve printed out Iverson’s Turing lecture on APL so maybe reading that will help. I’m dying out here!\n\n### The grass is always greener - yet again\n\nI tried to jump ship (again) to a different problem. I thought maybe it would be easier and help with my intended problem, but *surprise* it’s difficult in its own right.\n\n### Todos 7/6/18\n\nI’m not sure where to go from here... I’m feeling as lost as I did in [my last todos](http://futureofcoding.org/log#next-steps-6218).\n\nI guess learning Reflex and building visualizations for it (in Figma to start) is a good next step.\n\n(As an aside, I spent about an hour yesterday learning about PureScript which was fascinating. It compiles to readable JS! It does this by not being lazy. The author has a FRP library called Behaviors that’s just ~100 lines of code. It’s neat but not as firm an abstraction as in Reflex, which I prefer. And so I’m stuck with Reflex. But now I know that maybe I can use ghci to get better type instrumentation this time so maybe it’ll be better.)\n\nIt may be a couple days (or even a week) until I can work here again because I have visa paperwork do to (I may be moving to London) and work for Dark to do. (On the other hand, maybe I’ll procrastinate on those things and be back here sooner.)", "changes": []}, {"committer": {"date": 1530738626, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3002adf6a54bb4087f16abe8fa60aa4df50a597b", "parents": ["adcbb035adb95b81e0f7ba8ed973d7581225445f"], "commit": "c624aa70a0ffe154610fd5f520e06ec9ebf2427f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530738617, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "471df13fe6edc9ec84d40af96cd3e845320f1d87", "parents": ["5a948e13acb9cfe743b89c3c470c53156950531d"], "commit": "adcbb035adb95b81e0f7ba8ed973d7581225445f", "message": "## Lots of blogging on the 4th\n\n* TOC\n{: toc }\n\n### Rant about abstraction haters\n\nI started the day off with a rant about abstraction haters, which was fun. I'm waiting on some notes from a friend before posting it around.\n\n### [A Human-Readable Interactive Representation of a Code Library](http://glench.github.io/fuzzyset.js/ui/)\n\nI needed a break, so I read through Glen's new essay, in part because its topic is excitingly similar to my own. There's a lot he says that now I no longer have to say myself - I can simply quote him. In fact, I think this essay could provide me with the \"intellectual cover\" from which to begin my own essay - which would allow me to do away with contexualizing why code comprensibility is important.\n\nI also had fun converting some of his code to an FP style, which allowed me to make some points about why the model is important, along with shwoing the data. I've included the email I sent to Glen:\n\n#### Email to Glen, Fuzzyset & FP\n\nHey Glen,\n\nI took some time today to dig into your Fuzzyset explanation. It's wonderful! In particular, I love the little details, such as providing links at the very button numbers that show the calculations of the dot product and magnitude in a popup.\n\nThe second interactive section of your essay, \"Turning a string into a vector\", features some code that incredibly difficult to comprehend, even with the explanation and GUI beside it. As an exercise I removed the incidental complexity in the code (in other words, converted it to a functional style) to clear things up:\n\n\n\nNow you can better follow the logical flow of the code - as opposed to the control flow of the computer. This includes eliminating iteration variables, in fact all mutable variables, which eliminates bugs, such as [a 5-line section that doesn't appear to do anything](https://gist.github.com/stevekrouse/e4c6d782144539907fc30400438243f9#file-fuzzyset_gramcounter-original-js-L7-L11). (Please correct me if I'm wrong.) It also is shorter now: the core of the code is 13 very clear lines (excluding comments).\n\nAdditionally, in this form, you don't need your comments on the side (about normalizing the string and adding dashes) because I've added them in context, which makes it even easier for a user to tweak them.\n\nAnd perhaps the best part of the functional style isn't captured by the code: it's quite visualizable in a way that doesn't require console.log. Each line of code is a constant value, mapped from a previous value. In it's current form I can imagine it being directly converted to something like Flowsheets, and you could marry the abstract symbols and concrete values even further. Dream, here we come!\n\nBest,\nSteve\n\n### Continued Casual, comprehensible, visual essay\n\n[Here's the current status of the outline.](https://gist.github.com/stevekrouse/dd90cbee71e0628fc71f3bff1ec708af) It's tough. It's pretty messy. As I said above, I may use Glen's essay as a starting place and just jump into comprehensibility and reactive programs, and not contextualize why those things are important. At the end of the day, my vision of everyone constantly improving and customizing the software they use as the use it for free, while very compelling for me, is less so for others who have less of the picture in their heads.", "changes": []}, {"committer": {"date": 1530718925, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "471df13fe6edc9ec84d40af96cd3e845320f1d87", "parents": ["b04ebf4772e5b818e548eeff72f2c728d9342bf8"], "commit": "5a948e13acb9cfe743b89c3c470c53156950531d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530718922, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e4c165a968ca9780d9d36e6f9897044d5944a573", "parents": ["f1d004146eb9acab2b611836bca7839472d0f803"], "commit": "b04ebf4772e5b818e548eeff72f2c728d9342bf8", "message": "first stab at new rant", "changes": [[66, 0, "essays/sissies.md"]]}, {"committer": {"date": 1530635599, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5bc2eebd15597a86641e0fd7af2764a2864ff235", "parents": ["b028eb6684b3c75f16e9d5b9673099b0670e0df9"], "commit": "f1d004146eb9acab2b611836bca7839472d0f803", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530635527, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "009fdced46853861b50a45578a1e54069a9cce08", "parents": ["67b3d186feabfb206e2bc8d2893b2dfd01d2613b"], "commit": "b028eb6684b3c75f16e9d5b9673099b0670e0df9", "message": "## Added 26, Glen Podcast\n\nIt took me ~1 hour to edit the podcast and ~20 minutes (I timed it) to put it online, including uploading it, writing the description, links, etc. This is one of my favorite conversations so far!", "changes": [[45, 0, "episodes/26.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1530569970, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf8afd8f12040bcfd36e884c758a6aab799f3092", "parents": ["a7ed24322bc932f13894b7d4002715a6943e61d5"], "commit": "67b3d186feabfb206e2bc8d2893b2dfd01d2613b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530569948, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f30291b38b7ca22669b54f5f6031733a4e8c916c", "parents": ["3e85df6c99d07f1cfd8351c329f3116f6c41b15e"], "commit": "a7ed24322bc932f13894b7d4002715a6943e61d5", "message": "## A tad lost in FRP Land\n\n* TOC\n{: toc }\n\nUnfortunately, Thursday was a bit of a bust. I went to the Games for Changes conference but didn't get inspired. I imagine that'll be the case for most conferences - unless they're _nonferences_, which is basically a conference without talks and focuses on peer-to-peer interactions.\n\n### Fall 2018 conferences\n\nSpeaking of nonferences, the tickets for CycleJSConf 2018 go online today and they only have 40 spots so I should decide about that ASAP. It looks like a long an expensive flight, so I'll have to think on it... As an aside, my girlfriend and I are thinking about moving to London in the next few months, in which case it's cheap and a 2 hour flight. But then it'll be harder to get back to the States for Splash in Boston in early Nov.... These conferences are complicated and expensive!\n\n* Sep 26-28 Strangeloop (and elm-conf) St. Louis\n* Oct 17-19 CycleConf Copenhagen\n* Nov 4-9 SPLASH Boston\n\n### A fourth vision-y essay\n\nI spent 2 hours on Friday (before I had to go to Philly for my grandfather's birthday) on yet another vision-y essay. This one is about how the smallest unit of improvement a person can make in technology is an app, and how that's too big, especially when people mostly just want to add on to existing apps with a feature or customization.\n\n### Casual, comprehensible, visual essay\n\nAt this point I have 4 such essays:\n\n1. [Apps are too big as a unit of improvement](/essays/app-idea)\n2. [People will (learn to) improve software if it's not too hard](/essays/power)\n3. [Software needs to be casually improved](/essays/causal)\n4. [In order to be casually improved, it needs to be visual](/essays/visual)\n\nAnd starting on Wednesday, I've been maintaining a Workflowy nested list of the \"outline\" of this massive essay / thought dump. Workflowy felt like the right tool for this because I'm making a linear argument with a lot of tangents and nested points, and I want to be able to zoom in and out on the sub-points as well as collapse arguments to see the broader shape. The Workflowy is not on source control, so I put [the current version of it in this gist](https://gist.github.com/stevekrouse/626422d9c0e99629afda2a227374911c), and [here's a link to the live one](https://workflowy.com/s/BeQ_.L6nCI8NokW).\n\nFor better or for worse, these ideas keep metastasizing and gobbling up other projects into their purview. For example, on Friday I re-read [the final STEPS report](http://www.vpri.org/pdf/tr2012001_steps.pdf) as well as Guido's [Computer Programming for Everybody](https://www.python.org/doc/essays/cp4e/), the second of which I found from watching [@roml's Liberal Software](https://www.youtube.com/watch?v=i3nJR7PNgI4). All three projects were highly related and I copied and pasted lots of their text into the Workflowy for reference.\n\nI also sent an email to @roml, asking for help articulating the vision for \"liberal software.\" It's a fascinating vision. In particular, I want to clarify how it's different from the Smalltalk, Lively Kernal, Morphic, STEPS, Boxer vision of a unified computing environment. Maybe it's not different from those, but it feels different. For one, I'm more concerned with web-based tools, while those are more OS based. For another, I care a lot about the visual polish of the end software, while those almost deliberately seem to not.\n\nI'd love to zoom in on a sub-topic of my outline and write / polish that concept well so I can publish it, get it out there, but I am finding that easier said than done. I'm also becoming cognizant of how long this writing is taking me, and am worried that it's not the best use of my time... Maybe I should go back to the problem as opposed to motivating and contextualizing the problem.\n\nOn the plus side, I've become skilled enough in communicating what I'm working on and why that yesterday I was able to explain it at a party (in conjunction with Nadia's [Independent Researcher article](https://nadiaeghbal.com/independent-research)). Additionally, both Jonathan Edwards and Paul Chiusano sent me a shockingly relevant paper that came out a few days ago, discussed below, which is a great sign that people understand where my head's at.\n\n### Reading & Watching on 6/2/18\n\nI worked from 9:20-2:00 today, had a 45 min break for lunch, and have been working on this write up for the last hour or two. Productive day! (Although it doesn't really feel it because I don't have much tangible to show for it.)\n\n#### [Debugging Data Flows in Reactive Programs](http://pure.tudelft.nl/ws/files/38856517/paper.pdf)\n\nThis is the paper both Paul and Jonathan sent me, which came out a few days ago. I haven't felt this sinking feeling of \"oh shit someone already beat me to it\" in a long time, which is a great sign.\n\nOn note I'll make up front: the reasoning in this paper feels backwards to me. It's saying: people use FRP, it's hard to debug FRP with imperitive debuggers, so let's make visual debuggers. However, I feel that the visualizations are the key to why FRP should be used in the first place, and the fact that we don't already have good visualizations for it crazy.\n\nThey focus on the [rxjs](https://github.com/ReactiveX/rxjs) library in this example. To be honest, I had considered doing something similar myself, so it's great to see this before I did that. This means that they do visualize streams of streams, but not cyclic streams.\n\nThey also focus a lot on the user interviews, which I find silly, like they're pretending to be a different kind of science than they are.\n\nI speak more about their visualizer, rxfiddle, below in the \"FRP Visualizations\" section.\n\nI find it hilarious that they include a reference to [StoryFlow](http://www.ycwu.org/projects/infovis13.html), a tool to visually track the evolution of a character in a fictional story. It's funny to be because I've been using the [metaphor of fiction](http://futureofcoding.org/essays/casual#reading-fiction) as an example of how it's difficult to follow state in imperative languages.\n\nThey also cited a bunch of papers at the end of their paper that extolled the importance of seeing runtime values in order to comprehend programs, which fits into my thesis nicely. Currently you have to instrument your code manually or set debug breakpoints to inspect. I want you to be able to look with your eyes, mostly, and interact only a bit to see what's up in a program.\n\n#### [Functional Reactive Programming, Continued](https://dl.acm.org/citation.cfm?id=581695)\n\nAfter reading the above paper which focuses on rxjs, I felt my understanding of \"true FRP\" shaken a bit. I often find it hard to keep them all straight in my head, so I read this article in part to see if I could figure it out.\n\nThis was an arrowized paper. It helped me get back into the mindset of FRP, but no great insights here.\n\n#### [Monadic Functional Reactive Programming](https://www.researchgate.net/publication/262292005_Monadic_Functional_Reactive_Programming)\n\nI was in the groove, so I continued on. This article was fascinating, but a bit hard to read because I'm slightly allergic to monads. It was interesting to see that he explicitly says he wasn't able to do \"mutually dependent signals.\"\n\n#### [Practical Principled FRP](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.724.7758&rep=rep1&type=pdf)\n_Forget the past, change the future, FRPNow!_\n\nThis paper is apparently the basis for Hareactive/Turbine (discussed more below) and builds upon Monadic FRP. It seems to solve space/time leaks with some clever restrictions about what you can and cannot depend upon. However, as many monadic interfaces do, this feels very imperitive to me. They have a `Now` monad for goodness sake!\n\nAt the end, they make an tantalizing point that \"synchronous dataflow langauges, such as Lustre, Esterel and Lucid Synchrone\" ... never have a issue with leaky abstractions, even for higher-order dataflow, because they are more restrictive than traditional FRP\" - but he doesn't say in which ways they're more restrictive.\n\n#### [Ryan Trinkle - Reflex](https://www.youtube.com/watch?v=dOy7zIk3IUI)\n\nFascinating talk! In particular, I loved the way he explained why FRP is the best:\n\n1. equational reasoning, which I've been calling \"definitional\"\n2. local reasoning, or understanding apart from context, which I've been calling \"being able to rule out parts of the application you don't have to read\"\n\nAnother key point I got from the video is that if you want to use ghci with reflex-dom, you can, but then you need to use the ghc binders, which requires a desktop environment to see stuff with. Or something like that. Maybe it means I can use ghci to do more than I thought I could...\n\nIn the talk, he shows this tutorial on [building a reflex library through building a terminal library](https://github.com/reflex-frp/reflex-platform/blob/develop/examples/host.hs). Looks fascinating!\n\nI also skimmed another video, which had [a great example and quote about declarativity](https://youtu.be/92eXGvHFbzs?t=40m33s). He shows dynamic list, whose dependencies are all explicitly listed inside of it. Only one place to (recursively) look. This epitomizes why reflux is the only library I am still excited about.\n\nI reached out to [Obsidian](https://obsidian.systems), the Haskell dev shop he runs, to see if they're still hiring. I could definitely see spending some time there, which I can't say about almost any other company.\n\n### FRP Visualizations\n\nBefore I found the FRP Debugging articles, I was saying something along the lines of: we need visuals that support casual understanding of large, complex software programs. FRP support this because the metaphors are very visual. Just look at [rxmarbles.com](http://rxmarbles.com/) and [the cyclejs devtools](https://github.com/cyclejs/cyclejs/tree/master/devtool). If you wanted to visualize imperitive programs, the best you could do is [Python Tutor](http://pythontutor.com/), which merely helps you \"play machine in your head.\"\n\nIt turns out, I'm not the only one to want to provide more live visualizations for FRP:\n\n#### [rxfiddle](https://rxfiddle.net)\nMy inital reaction to this tool was \"neat!\" But upon closer inspection, I'm not impressed:\n\n* the high-level graph in the middle of the screen is confusing. It'd be best if you could zoom in and out on the same structure for high and low level views.\n* clicking on data points is confusing\n* the fact that they show opaque green dots instead of raw data is dumb, especially when it's a number\n\nThey try to vertically align data points. This is a reasonable strategy but doesn't scale super well for complex flows (maybe better layout could solve this). One idea I had would be to use color to show the lineage/causality of events.\n\nOne point they make is that more work needs to be done for combinators that modify flows in a less merge-y way, such as filters, folds, etc. Another point is what to do with a high-frequency event. One idea is sparklines, but there are many ways to compress data.\n\nAdditionally, I find it useful to have both representations of streams: a lazy infinite list, and also a single value that changes over time.\n\nOne final note is that they only show acyclic graphs, which is insufficient for my purposes as discussed elsewhere.\n\n#### [rxviz](https://rxviz.com)\n\nThese are fun. I like them a lot more than rxfidle. They do a great job of showing higher-order streams. They don't, however, show how streams combine to make other streams. They just show one output stream or stream of streams.\n\nFor completeness, here are some other links on visualizing FRP programs:\n\n* [rxvision](https://jaredforsyth.com/rxvision/)\n* [Rx Diagrams](https://blog.angularindepth.com/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams-20fce8e6511)\n* [ReScala RP Debugging](https://dl.acm.org/citation.cfm?id=2884815)\n\n### FRP flavors\n\nThis is a problem I've struggled with for a year or so now. There are so many flavors of FRP out there, with different points on the design space, it's hard to keep them straight.\n\nAndre Stalz has some interesting things to say on this topic [here](https://www.reddit.com/r/javascript/comments/3zr6i0/conversation_whats_the_core_differences_between/) and [here](https://staltz.com/unidirectional-user-interface-architectures.html).\n\nJonathan Edwards suggested I make a survey type doc for them. Neat idea. [FRPZoo](https://github.com/gelisam/frp-zoo) already exists but doesn't quite capture what I want. Also, I don't care so much to compare them all. I want to simply find the one model I want and go with it.\n\n#### [Turbine](https://github.com/funkia/turbine)\n\nSeems like the most Conal-based FRP in JavaScript.\n\nHowever, you add stream on-click handlers in UI elements, which isn't for me.\n\n#### CycleJS, Elm, Redux\n\nAll have the same singleton state + reducer architecture I don't like.\n\nHowever, it is possible to do CycleJS without the singleton state as I did in [this Flappy bird](https://codesandbox.io/s/xlrynkqoqp) about a year ago. The question is: 1) can it do cycles? and 2) how do we like the devtools?\n\n#### [Reflex](https://reflex-frp.org)\n\nI haven't done much more with this, despite watching the videos above, but it remains the only library I still like, despite the annoying type quantifiers and ghcjs nonesense.\n\n#### Purescript\n\nPaul Chiusano suggested I see if Purescript has anything I like in FRP land. Maybe it'd be easier than Reflex.\n\n### Next steps 6/2/18\n\nThere are a few social things to figure out:\n\n* fall conferences\n* the next FoC meetup in NYC\n* a possible meetup in Boston with Nicky Case and Glen\n\nA few other next steps:\n\n* update my Workflowy with notes from today's reading & watching\n\n* cyclejs with non-singleton state - can we do cycles? what do the devtools do (particularly as compared to singleton state)?\n\n* look for PureScript FRP library\n\n* continue learning Reflex. I found [this tutorial](https://github.com/hansroland/reflex-dom-inbits/blob/master/tutorial.md)\n\n#### What am I driving towards?\n\n1. An essay about comprehensible programming\n2. A comprehensible & casually editable ToDoMVC\n3. Tufte-inspired (show data, show comparisons, etc) visualizations (and editor) for cyclical, higher-order, GUI streams\n\n#### Anxiety about speed, focus\n\nI wish that it was more obvious what I should work on next or focus on for this week. I am feeling a bit anxious about getting to a polished published piece of work that I can point to and be proud of, similar to my Visual History of Eve in that it is polished and got attention, but more impressive and meaningful, like a Staltz or BV article.\n\nHowever, while today wasn't particularly directed, it was definitely quite productive. It took me ~2 hours just to write up all that I did today. I just have to trust in the messiness and hope that a smaller piece of a project will appear and provide itself for polish and publish at some point.\n\nAs far as tomorrow goes, let's start by re-reading this entry and going from there...", "changes": [[52, 0, "essays/app-idea.md"], [2, 4, "essays/power.md"]]}, {"committer": {"date": 1530114163, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f01dddb17370cffcd8c2833e51aad88f0270264", "parents": ["025899fb2dfb9960deec81617276f57614b306ef"], "commit": "3e85df6c99d07f1cfd8351c329f3116f6c41b15e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530113857, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5ea489ec73fed230722d18839e202fb0a62ed07f", "parents": ["b0afa539a314aaf5365b86b2216b47212cfe024f"], "commit": "025899fb2dfb9960deec81617276f57614b306ef", "message": "## Another vision-y essay\n\nI started another essay today. This isn't a great sign that I keep creating new essays, instead of editing the old ones...\n\nI'd like to find a way to release something, which means I'll have to cut down the scope as much as possible. The essay I worked on today does a good job of that. It's just trying to make the point that live modify-ability is a great thing. It's trying to sell the vision.\n\nThe other two essays: [visual](./essays/visual) and [casual](./essays/casual) and more about why FP and FRP is neccesary, and how we'll make it work. I'm stil not sure how to combine or seperate those essays.\n\nEven worse, I've been collecting a large number of notes to add to these essays, and I don't know where they go...\n\n* include referneces to http://glench.com/LegibleMathematics/ in my visualizable essay and also talk about how visualizations are key. they're already in our heads even if we don't know it.visual metaphors. maybe quote the monad guy. quotes about mathmaticians who see things.\n* also I can clarify that when trying to improve understandability of programming you can either improve the model or the interface, and how I'm working on both dimensions at the same time (paul chiusano leverage, glench is only on UI where I used to be, etc)\n* comprehensibility: model + interface...steps proj, Nile + Bret’s visualizations\n* Haskell note from rattray: compiler knows more than you do\n* declariative langauges stink but they allow for foundation for visual tools such as squarespace and looker", "changes": [[62, 0, "essays/power.md"]]}, {"committer": {"date": 1530029786, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dfdba53a7807bc966f3412280dda1bff780257e0", "parents": ["3c94702b3a8f2f9979e5a9c4467e0704b6764568"], "commit": "b0afa539a314aaf5365b86b2216b47212cfe024f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1530029060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f38128571b88def7dd7b9af54d30f6dedf923e2b", "parents": ["bac4b30b2866284526b18a41715a2d041813f230"], "commit": "3c94702b3a8f2f9979e5a9c4467e0704b6764568", "message": "## Started visual programming essay\n\n* TOC\n{: toc }\n\n### Prisma yesterday\n\nI spent yesterday researching GraphQL for Dark. I combined a few pictures on their website to explain Prisma. It's a little complicated, because it's solving a GraphQL problem with more GraphQL, but I think this photo explains it pretty well:\n\n

    One graphic to explain @prisma, the #GraphQL ORM-like layer pic.twitter.com/8jaq2ayUGK

    — Steven Krouse (@stevekrouse) June 25, 2018
    \n\n\n### The Software Elephant\n\nI was inspired by a wonderful conversation this morning with [James Somers](http://jsomers.net/) (of [The Coming Software Apocalypse](https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/) and many others) to write up my thoughts on how visualizations will save programming. I somewhat-recently read [Fred Brook's No Silver Bullet](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf) where he very eloquently argues that software is \"inherently unvisualizable.\" What makes Brooks so great is that he gives you such a wonderful structure for your arguments, including great metaphors. I actually can't believe my metaphorical luck: in a relevant quote he refers to software as an \"elephant,\" which is perfect because it allows me to reference the story of the blind men and the elephant. I 'm pretty pumped about the rough draft / outline I've come up with in the last 2 hours.\n\nI'm not sure how this essay relates to [Casual Programming](./essays/casual). Maybe it's a replacement? Maybe they're somehow complimentary?\n\n### Next steps 06/26/18\n\nI'm pumped to get this essay polished and published before continuing trying to understand Reflex, etc, etc. I think it's useful to take a break to explain the *why* of what I'm doing before spending more time doing. This post might be similar to [my first (and favorite) Andre Staltz post](https://web.archive.org/web/20180530055638/https://futurice.com/blog/reactive-mvc-and-the-virtual-dom), which is similar in that its a mile-marker on his way to creating CycleJS.", "changes": [[116, 0, "essays/visual.md"]]}, {"committer": {"date": 1529856180, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "defd7702b5762f5017f76691c8ff155f0fb3ce24", "parents": ["22f311851c583fd9477b35a2a76a6ead53a11d0c"], "commit": "bac4b30b2866284526b18a41715a2d041813f230", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529854579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7db077a43e98665fd63f98fbe3d88538546c6481", "parents": ["b5dd2b1ec930596864098d356373c606a0ed1223"], "commit": "22f311851c583fd9477b35a2a76a6ead53a11d0c", "message": "## DOM Recursion Problem Solved by Reflex\n\nAs I wrote in [The Model-View Recursion Problem in FRP](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit#):\n\n> In \"Experience Report: Functional Reactive Programming and the DOM\", authors describe a “recursion between FRP and the DOM” problem: “…the DOM tree in an FRP application can change in response to changes in FRP behaviors and events. However such new elements in the DOM tree may also produce new primitive event streams… which the FRP program needs to be able to react to. In other words, there is a cycle of dependencies…”\n\n> You start with two buttons. The first button doesn’t respond to clicks. But the second button, when clicked, adds two more buttons to the page, where again the first button doesn’t respond to clicks, but the second button can add more pairs of buttons on click.\n\n> ... I believe ... the solution is mutually recursive like the code in AFRP, and looks something like:\n\n> `clicksCount = count $ merge $ map (\\[b1, b2] -> b1.clicks) nestedButtons`\n\n> `nestedButtons = repeat clicksCount [button, button]`\n\n> `buttons = flatten nestedButtons`\n\nTurns out the Reflex library allows me to neatly solve this problem. The core of the code looks like:\n\n```haskell\nrec\n countedClicks <- foldDyn (\\a b -> if evenButton a then b + 2 else b) 2 clicks\n\n clicks <- listListView (ffor countedClicks (\\n -> [1..n])) (\\ _ x -> dynTextButton x)\n```\n\nAnd it only took me ~5 hours to write those two lines. No joke. I use a few helper functions of my own creation. You can see the [full code here](/code/reflex/button_and_text.hs). And the [live version here](/code/reflex/button_and_text.jsexe/index.html).\n\nAnd that ~5 hours is not including the ~3 hours it took to get reflex set up on my chromebook. Cloud9, AWS, Digital Ocean, and Codeanywhere all didn't work for different reasons. Eventually I got Google App Engine to work but I didn't realize the version I used would delete everything I install over night. So I created a more permanent instance on Google Compute which works as well and lets me SSH in using the browser. I just have to remember to turn it off when I'm not using it (which I am pretty sure stops the billing), otherwise it costs $100 per month because I'm using a big box.\n\nI'm getting better at emacs which is fun. I install haskell syntax highlighting and am using the shell from within emacs to compile the code in a different window. And I have `sudo python -m SimpleHTTPSever 80` so I can see the code after I compile it with `ghcjs`. I can't use a lot of the really cool emacs haskell extensions because I'm using `ghcjs` instead of `ghc` and `./try-reflex` instead of `cabal` or `stack`, but I'm doing OK now. It took me a while to get used to all the fucking types in reflex, but I'm getting the hang of it.\n\nNext steps... I'm a little lost in terms of what's next because this problem, along with [Reflex ToDoMVC minus a few features](https://github.com/reflex-frp/reflex-todomvc/blob/develop/src/Reflex/TodoMVC.hs) seems to already be solved. One idea is that I can go through Reflex ToDo MVC, line by line, expression by expression, and type-annotate everything and add a bunch more comments. There are definitely parts of it I don't understand, such as the `def` keyword, `&`, and `.~`.\n\nIn a vague sense, I'm working towards building a \"CycleJS devtools dataflow diagram\" experience for Reflex, so another step would be to draw pictures for each type, or a way that I'd display it on the screen and show the values flowing through. And another good step that comes to mind would be to figure out how to get ahold of Reflex internals so I can get a sense of the network and hook into the different event firings.", "changes": [[52, 0, "code/reflex/button_and_text.hs"], [11, 0, "code/reflex/button_and_text.jsexe/index.html"], [6132, 0, "code/reflex/button_and_text.jsexe/lib.js"], [150666, 0, "code/reflex/button_and_text.jsexe/out.js"], [19964, 0, "code/reflex/button_and_text.jsexe/rts.js"], [2, 0, "code/reflex/button_and_text.jsexe/runmain.js"]]}, {"committer": {"date": 1529608753, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "737961e963eed28c44ea833270fd6dae3ce77ab5", "parents": ["e42e44785b88039304b979a5cbf8aba310503b53"], "commit": "b5dd2b1ec930596864098d356373c606a0ed1223", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529605520, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "31ad03bebd3d4b5df55a382c4f4d26323c51dbcc", "parents": ["4ceddc7cd8db03120cb8a9ea8398dd9940fd6027"], "commit": "e42e44785b88039304b979a5cbf8aba310503b53", "message": "## What am I even working on again?\n\nJonathan Edwards very generously offered to give me some comments on what I'm currently working on if I would take the time to write it up. I spend most of Monday and Tuesday (like 10 hours) on it. My [first attempt](https://docs.google.com/document/d/1JQC7Zp3SqVO2zo5jaj5mADo-uV3qz66mUGuWyg299u4/edit?usp=sharing) spent a lot of time explaining the context for why I found this particular sub-problem (the DOM recursion problem) of the sub-field (FRP) interesting.\n\nBut I did away with all that in [the version I sent over](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#), because that's what researchers do: they explain their problem in its context and attack it. They don't need to sittuate the problem in the broader context so much, because readers of technical papers often already know that context.\n\nThis exercise was challenging, fun, and very worthwhile, even before Jonathan gave me any comments. It's great to be getting some clarity on what I'm doing. I am proud of [the document I sent to Jonathan](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#).\n\nJonathan Edwards made some great comments. He suggested that I polish it up and submit to the [REBL track of SPLASH 2018](https://2018.splashcon.org/track/rebls-2018-papers). I have until Aug 17th to submit. The workshop is Nov 4th. Dominique Devriese, one of the authors of the Experience Report: FRP and the DOM, is on the organizing comittee. Maybe emailing him would be a good next step!\n\n### Casual Programming - first draft\n\nArmed with the newfound clarity around my research, I tried to explain my what I'm working on to two other programmers yesterday. It didn't go well. First of all, I wasn't able to get across the *why* of my research at all. I didn't *motivate the problem* well - neither of them agreed with me that a problem existed there in the first place. Secondly, I didn't do a good job of *defending the uninteresting parts of my solution*. My solution is to use a form of functional reactive programming, so I need to explain why FRP is the right tool for the job.\n\nSo I spent ~4 hours today on a draft of [Casual Programming][./essays/casual] (a phrase [Nikolas Martens used before me](http://blog.rtens.org/why-even-casual-programming-is-hard.html)) to contextualize the problem I'm working on within the vision of the world I'm working towards. It's a rough draft, needs a lot more fleshing out and examples.\nAlso I'm not entirely sure who the audience is, and what it's explaining to them. It's definitely not to be submitted to REBl, because they already get FRP and the problem. So I guess the audience is the programmers who are interested improving programming, but don't know all the academic stuff. The goal, I gues, would be to produce a blog post of similar caliber to Andre Stalz or David Nolan.\n\n### Todos 6/21/18\n\n* Continue working on [Casual Programming][./essays/casual]\n\n* Continue working on the academic version of Casual Programming, which I'm calling [The Model-View Recursion Problem in FRP\n](https://docs.google.com/document/d/1suHgeUvls6MZLHholN6r4KK0G5VaYArjKnALvmmJQhU/edit?ts=5b2be6e1#). In particular, formalize things up, probably by using an existing FRP library, maybe arrowized, to test things in, maybe on the browser.\n\n* Email Dominique Devriese\n\nThat's it! Much [last list of todos](http://futureofcoding.org/log#todos-as-of-61616) has either been completed or no longer feel relevant now.", "changes": [[175, 0, "essays/casual.md"]]}, {"committer": {"date": 1529338719, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2aede5ea195d61f373991130ca8b76b0278b4926", "parents": ["d96c290e63479d3cc6e995c92343dc97d85a5294"], "commit": "4ceddc7cd8db03120cb8a9ea8398dd9940fd6027", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529338710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "987c075ff8178ee18faaff773971fe1c95900373", "parents": ["0dcecbd13a1cf0a83831d9386e54164c18135a4a"], "commit": "d96c290e63479d3cc6e995c92343dc97d85a5294", "message": "## Mon 6/4/18 - Fri 6/15/18\n\n* TOC\n{: toc }\n\nApologies for going dark here the last two weeks. On the bright side, I have been quite productive, but in an analog sort of way...\n\n### Fedex Kinkos to Brother printer\n\nTwo weeks ago, I spent 3ish hours reading [Functional Reactive Animation](http://conal.net/papers/icfp97/) on my phone. I was finally able to make it all the way through, reading every word, and understanding ~80%. I was very proud. But, I didn't love reading on my phone - I wanted to print some papers out. I didn't have a printer at home -- I hate printers, they always break, and cost a bajillion dollars to buy ink for -- so I went to kinkos to print out most of Conal's papers:\n\n![image](https://user-images.githubusercontent.com/2288939/41498690-cb736744-7141-11e8-98b3-634d0b630f9e.png)\n\nBut here's where I felt like a stupid idiot: it cost $75 bucks to print all that! So I learned from my mistake and went on amazon to buy the printer with the cheapest cost per page, and found a [Brother printer](https://www.amazon.com/gp/product/B0763WDSYZ/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1) that fit the bill. It cost $70 itself, and will print ~500 pages before needing more ink. It's a 10x price reduction!\n\n### FRP Reading\n\n#### [Functional Reactive Animation](http://conal.net/papers/icfp97/)\n\nFinally able to make it through -- this was probably the 3rd or 4th time I attempted to read this paper.\n\n##### Bouncing Ball (solved)\n\nAs it turns out, Conal solved [my bouncing ball problem](http://futureofcoding.org/log#a-bouncing-ball-graph) in this paper. And I don't mean that he gave me hints towards the solution. I mean that he actually gave the code to solved the *same exact problem*. And it's beautiful:\n\n![image](https://user-images.githubusercontent.com/2288939/41498825-84ad7036-7144-11e8-95ec-ad2e0b9acc83.png)\n\nIt's very similar in spirit to what I created. Of course, there are no graphs or visualizations in the code, which is where I want to take this. FRP lends itself really well to live values and graphs.\n\n#### [Genuinely Functional User Interfaces](http://conal.net/papers/genuinely-functional-guis.pdf)\n\nAlso great. Also was able to read every word and understand closer to 90% this time.\n\n**Arrowized FRP is when you use signal combinators, not signals as first class.** This is supposed to help with spacetime leaks, as well as modularity. But of course, they are two-sides of the same coin, and it's easy enough to translate from one to the other.\n\n##### Paddle Ball is beautiful\n\nThe hardest parts of this definition are `xvel` and `yvel`, but it all makes sense when you read the paper and look at it for long enough:\n\n![screenshot 2018-06-16 at 9 09 38 am](https://user-images.githubusercontent.com/2288939/41498840-0913ade0-7145-11e8-85f0-d14793df524a.png)\n\n#### [Denotational design with type class morphisms](http://conal.net/papers/type-class-morphisms/)\n\nHarder and slower. I probably got closer to 60% of this one, but I do feel like I have a much, much better grasp of what programmers mean whey they **model programming concepts with mathematical objects**, and what **semantics** means.\n\n#### [A Fifteen Puzzle in Fran ](https://www.microsoft.com/en-us/research/publication/a-fifteen-puzzle-in-fran/)\n\nRead like a tutorial, explaining how to code an example project. Interesting and helped cement the ideas of FRP. Fascinating how he explained the structure of signal combinations in pictures:\n\n![image](https://user-images.githubusercontent.com/2288939/41498780-6b01893e-7143-11e8-9813-b7c5fa2be9f4.png)\n\n#### [Two-handed Image Navigation in Fran](http://conal.net/papers/TwoHanded/)\n\nAnother tutorial. A bit harder to follow.\n\n#### [Push-Pull FRP](http://conal.net/papers/push-pull-frp/)\n\nI've been having trouble with this one, so have been putting this one off for now, but hope to get to it soon. It's a prerequisite for a number of other papers I want to read.\n\n#### [Asynchronous Functional Reactive Programming for GUIs](https://people.seas.harvard.edu/~chong/pubs/pldi13-elm.pdf)\n\nI skimmed through this one. I wasn't terribly impressed with Elm. I can see now how it's Haskell-lite and FRP-lite. It's definitely more synchronous in spirit, taking some interesting ideas without super-solid foundations and running with them.\n#### [Experience Report: Functional Reactive Programming and the DOM](https://2017.programming-conference.org/event/proweb-2017-papers-experience-report-functional-reactive-programming-and-the-dom)\n\nReally wonderful read - very easy for me to assimilate because I'm so familiar with the DOM. It also helped me see how much of the trouble of FRP comes from not properly and completely abstracting over the imperitivity of the DOM.\n\n##### Recursion between FRP and the DOM\n\nThey do a good job of specifying this problem:\n\n> ...the DOM tree in an FRP application can change in response to changes in FRP behaviors and events. However such new elements in the DOM tree may also produce new primitive event streams... which the FRP program needs to be able to react to. In other words, there is a cycle of dependencies...\"\n\nThe easy solution to this is to give elements names, which we can then use to filter the event stream, but that doesn't feel quite right.\n\nUltimately, the problem is referential transparency: I want to be able to create two buttons that look identical but when I put them next to each other, they emit two different event streams. How is this possible if they are identical? They are not identical! When they were put next to each other, the position of one of them was changed in the layout function, and thus they emit different event streams! Of course in order to preserve modularity (so we don't only get event streams at the top level, when everything is being laid out), we need to use a trick I learned from Conal where you translate the event stream going into a \"component\" with the inverse of the translation you used on its position. (I haven't entirely worked out this scheme, but I feel it's promising.)\n\n### Monad Reading\n\n#### [What we talk about when we talk about monads](https://arxiv.org/abs/1803.10195)\n\nFrom Jonathan Edwards. Great recommendation!\n\nBe careful about the \"romance of mathematics\". It's perfect-ness is illusory. Yet despite this, I still feel like math is our best way to reduce incidental complexity.\n\nThis definitely made me even more skeptical of monads! He showed cases where people put the word \"monad\" in the title of their papers when it had no business being there - just to show how cool they were.\n\n#### Monads and input/output (section 7 of [\"being lazy with class\"](http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf))\n\nFascinating to learn about. Moggi introduced monads to structure the denotational semantics of state and exceptions, but \"a denotation semantics can be viewed as an interpreter written in a functional language\" and \"Wadler used monads to *express* the same programming language features that Moggi used monads to *describe*.\n\n#### [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm)\n\nI printed this one out and re-read it for the 7th time. It's so fucking brilliant.\n\n\"Programming is more about the middle than the end, i.e., more about composition than output.\" And quoting Roly, \"What looks like imperative output can be just what you observe at the boundary between two subsystems.\"\nWe need imperativity in our functional code (usually structured with monads) when we haven't properly abstracted that particular API into a functional interface yet. For example, think about `putChar` and `getChar` from the terminal. How fucking imperative is that?! But FRP (even React) shows you that you don't need to put and get characters from the screen imperatively. Instead you can describe the UI input and output declaratively - no monads required! The way to get rid of monads is by abstracting over imperativity (databases, file systems, operating systems, etc), one by one.\n\n### Other Reading\n\n#### [Tangible Functional Programming](http://conal.net/papers/Eros/)\n\nI enjoyed the beginning, but also had trouble sticking with this one, but hope to get back to it soon. It's so up my alley!\n\n#### [Promise of Live Programming](https://2016.ecoop.org/event/live-2016-the-promise-of-live-programming)\n\nThis was a fun one. Live programming provides a rubric through which to rate a programming system, but not to come up with a programming system.\n\n#### [What's Functional Programming All About?](http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html)\n\nThis is one of my favorites! These recipe diagrams are just devine! He really makes the case that functional programming is about explicit data dependencies, and it's gorgeous.\n\n#### [Destroy All Ifs](http://degoes.net/articles/destroy-all-ifs)\n\nReally great. He goes even further than I do when thinking about this topic: instead of inputting booleans (or union types) into functions, we should add lambdas, which are semantic explanations of what we want done.\n\n### Todos as of 6/16/16\n\nI'm continuing from [the last todos in this journal](http://futureofcoding.org/log#todos-as-of-52118) (without the completed or no-longer-relevant ones):\n\n* Follow up with Jonathan Edwards with my research direction, current problem(s), next steps, ask for relevant papers, schedule next chat, and send him Woof code\n\n* Read the papers I've printed out, including\n * [Push-Pull FRP](http://conal.net/papers/push-pull-frp/)\n * [Monadic Functional Reactive Programming](https://www.researchgate.net/publication/262292005_Monadic_Functional_Reactive_Programming)\n * [Practical Principled FRP](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.724.7758&rep=rep1&type=pdf)\n * [Hazelnut](https://arxiv.org/abs/1607.04180)\n * [Back to the Future: Time Travel in FRP](http://www.cs.nott.ac.uk/~psxip1/papers/2017-HaskellSymposium-Perez-BackToTheFuture-TimeTravelInFRP-latest.pdf)\n * [Lambda in Motion: Controlling Robots with Haskell](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.456.1707&rep=rep1&type=pdf)\n * [Fudgets](https://www.researchgate.net/publication/2247556_FUDGETS_-_A_Graphical_User_Interface_in_a_Lazy_Functional_Language)\n * [Tangible Functional Programming](http://conal.net/papers/Eros/)\n\n* Other things to read\n * Simon Friis Vindum, including [Let's reinvent FRP](http://vindum.io/blog/lets-reinvent-frp/), Hareactive, and reach out to chat\n * Re-read [Elm goodbye to FRP](http://elm-lang.org/blog/farewell-to-frp). Maybe I'll understand it now. Or soon.\n\n* Update the plan, possibly stealing stuff from the never published [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)\n\n* Reach out to Sean McDirmid, and maybe read [this paper he referenced](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf)", "changes": []}, {"committer": {"date": 1529326967, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "987c075ff8178ee18faaff773971fe1c95900373", "parents": ["5bd3da59b05370f6a95ce10e4fa88df90471c6d0"], "commit": "0dcecbd13a1cf0a83831d9386e54164c18135a4a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1529326963, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "abea17f74c4dc03d0a04fb26d61ed05b3f72abb2", "parents": ["7b543e40f390cf22e1a5ffcdf755f6ad6b2fc857"], "commit": "5bd3da59b05370f6a95ce10e4fa88df90471c6d0", "message": "redirect notes to github as index (for now)", "changes": [[1, 0, "notes/index.html"]]}, {"committer": {"date": 1528825866, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b93ffddcb3de9e5eaacdee812c516e15c2c6d97", "parents": ["2a2631c57ee33759ee72b012334110ad8dcd090d"], "commit": "7b543e40f390cf22e1a5ffcdf755f6ad6b2fc857", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528825863, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6709bda29f7f850a2a7d22b014d833ec845d6731", "parents": ["24fbff9ce3b8da1489bc7557db633805d9d13929"], "commit": "2a2631c57ee33759ee72b012334110ad8dcd090d", "message": "added episode 25, kevin lynagh", "changes": [[44, 0, "episodes/25.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1528132439, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8b1e13737f4f55e6ed43011d3187dd87945a3c13", "parents": ["1536b59cc7b8b60cc4613bb07d444f85af03df09"], "commit": "24fbff9ce3b8da1489bc7557db633805d9d13929", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1528132329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c5f34acccd3fbdedfec54de1c1032ddece928592", "parents": ["863d92790183ee15c60d0b3a39f549082d357d5c"], "commit": "1536b59cc7b8b60cc4613bb07d444f85af03df09", "message": "## Friday 6/1/18\n\n* TOC\n{: toc }\n\n### The Mythical Man Month\n\nI was a bit exhausted from coding last week, so I let myself relax with The Mythical Man Month. I had started it a few weeks ago, but I finished it on Friday.\n\nFirst of all, it's shocking to see how many key phrases in this field come from this book:\n\n* The Tar Pit (which is used by the famous \"out of the tar pit\" essay)\n\n* No Silver Bullet\n\n* The Mythical Man Month\n\n* Essential vs Accidental complexity\n\nMuch of the book is still relevant today, even though programming has changed a ton since the 60s, and of course many is just hilarious reminders of how much has changed.\n\n#### No Silver Bullet\n\nAs you may expect, the \"No Silver Bullet\" essay was the most relevant to me, and I LOVED it. Very, very thought provoking.\n\nThe premise of the essay is this: there will be no single magical solution that will drastically improve the beast that is programming. Instead there will be a myriad of small incremental improvements that will over time tame the beast.\n\nA wonderful analogy he uses to illustrate the premise: Before germ theory, we held out hope for magical solutions, such as the fountain of youth, to solve all of our problems. Germ theory, however, told us that no magical solution was coming. Instead we have a long term, tedious war, that will have to struggle against for decades and decades, making slow slow progress. Yet, once we accepted that and stopped wasting all our time looking or waiting for magic, we were able to get to work on making the necessary incremental progress, and look where we are now.\n\n##### Inherently Invisible (bullshit!)\n\nThus it's time to change our focus from the accidental complexity (of hardware limitations, etc) to the essential complexity of ameliorating the inherent difficulties of software development, which are its complexity (so much more intricate than other engineering disciplines), changeability (software is changed rapidly as compared with cars, for example), and invisibility (not naturally mapped onto a 2d visual plane).\n\nOk, I'll agree with him the programming is indeed harder than other kinds of engineering for greater complexity and change-ability. While fast changes are hard to deal with, version control in git and GitHub is pretty good, and I and others have a few ideas on how to improve this. Yet if it is indeed also inherently un-visualizable, than we are going to be hard pressed to address all the complexity in code.\n\nBut of course I strongly disagree that software is inherently un-visualizabe. I think if Brooks looked at the work of Bret Victor and Edward Tufte, he'd see that through innovative design work, we can increase the visualizablity of just about anything. While we might not have great visualizations today, have hope! Many visualizations that seem obvious now were not obvious before they were invented -- and it was in no small part data graphics that led the scientific journal revolution.\n\n##### We don't even know what's essential\n\nAdditionally, I deem much of what Brooks refers to as essential difficulties in programming as accidental to how programming is done today, and not at all essential to solving the problems at hand.\n\nThought experiment: how long would it take for you to describe Twitter, the entire application, from the consumer's perspective, down to every interaction and pixel? Maybe a couple dozen hours, maybe a hundred, at the outset. Yet thousands of engineers are working on it every day. Why? 99% incidental complexity.\n\nOf course, you may argue that to simply describe Twitter in English is not a fair test because English is not precise enough. So what language do we have that's 100% essential complexity, 0% incidental? My thought is that math is just such a language. It talks about conceptual objects and relations, not at all about how such things are computed (unless that's what you are talking about in math). And of course this is why I'm currently working on (as you can see in the last few entries below) describing UIs with only pure maths / piecewise functions with dynamic piece breaks.\n\n##### Communication and composibility are key\n\n100% agreed. So much of what stinks about programming today is that folder-and file interface of code. Impossible to navigate and communicate how things are built and run. I think a key way to overcome this is to build a sounder model for computation that lends itself better to communication and understanding (such as definitions only depend on explicit dependencies, and nowhere else).\n\nComposibility is also key, particularly for re-using code and collaboration.\n\n##### Object-oriented programming\n\nI haven't thought alot about OOP in a while. It's always felt lame to be, particularly because I learned it in Java and it was mostly about inheritance.\n\nYet there's one idea about it, encapsulation, which is kinda neat. The idea is restricting the mutation of state to a higher level operation, hiding the implementation details, and also limiting the number of pathways that can change state. Of course, in practice, objects often become dumb data structures and people just mutate their fields willy nilly with no encapsulation.\n\nI think what OOP is missing here is being explicit about who can access those pathways under which conditions. In other words, being clear about what can effect certain pieces of state, what it depends upon, as opposed to the protocol by which it can be ordered about by.\n\n### GoTo Considered Harfmul\n\nI can't believe it's taken be so long to read this. It's just 1.5 pages. It's so great. Makes me think that even more of what we do to program is also harmful in a similar way. As I've been saying recently, everything but mathmatical expressions are harmful. A new thing that I've been against recently is dynamic scope and lexical scope. Names are super dumb. Content hashing is really the only way to go. [I saw a fun Twitter argument on this this morning with Joe Armstrong.](https://twitter.com/joeerl/status/1003532451652734978)\n\n### Tweets with tools_for_thought\n\nI had a lot of fun tweeting with Michael Nielsen on Twitter via his tools_4_thought account: [https://twitter.com/stevekrouse/status/1002604633209131009](https://twitter.com/stevekrouse/status/1002604633209131009)\n\nI also had success tweeting a Fred Brooks quote: [https://twitter.com/stevekrouse/status/1002614810780094469](https://twitter.com/stevekrouse/status/1002614810780094469)\n\nI find it hilarious how great Twitter is for this community!", "changes": []}, {"committer": {"date": 1527806386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c5f34acccd3fbdedfec54de1c1032ddece928592", "parents": ["a2d17c4e2b192407d29bfc0639977d9d60ed24a1"], "commit": "863d92790183ee15c60d0b3a39f549082d357d5c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527802493, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "579d87526bfeca4f11d76a6dc115d6073a751059", "parents": ["209436bb1c93ff248f651374a66eafd842d6ac71"], "commit": "a2d17c4e2b192407d29bfc0639977d9d60ed24a1", "message": "## A Bouncing Ball Graph\n\n* TOC\n{: toc }\n\nAfter banging my head against the ball for an hour or so trying to get Newton's method to work in JavaScript, I bailed for the Wolfram Language which, as you'd expect, has excellent primitives for solving equations, both analytic and computational.\n\nHowever, I did really get fed up with constantly re-evaluating old cells to make their definitions update. This was glitchy some of the time too, making me thing there were bugs when it was that I was looking at older version of expressions.\n\n### Wolfram Bouncing Ball\n\nAnyways, it took me a 3-5 hours, but I finally got a piecewise, pure, mostly-non-recursive function which can be infinitely expanded of a bouncing ball. Let's look at the code:\n\n```\nsim[0] = <|start -> 0, end -> 0, vel -> Function[t, 0], pos -> Function[t, 0] |>\nsim[n_] := sim[n] =\n With[{start1 := sim[n - 1][end]},\n With[{previousV := sim[n - 1][vel][start1]},\n With[{vel1 := Function[t, -previousV*0.9 + -10*(t-start1)]},\n With[{startPos := sim[n - 1][pos][start1]},\n With[{pos1 := Function[t, startPos + ((vel1[t] + vel1[start1])/2)*(t -start1)]},\n With[{end1 := First[t/.Solve[{pos1[t] == -473 && t > start1}], t]},\n <|start -> start1, end -> end1, vel -> vel1, pos -> pos1 |>\n ]\n ]\n ]\n ]\n ]\n ]\n\npiece := Function[n, {sim[n][pos][t], t < sim[n][end]}]\n\nPlot[\n {Piecewise[Map[piece, {1,2,3,4,5, 6, 7, 8}]]},\n {t, 0, 100}\n]\n```\n\nWhich gives us the glorious result:\n\n![screenshot 2018-05-31 at 5 43 05 pm](https://user-images.githubusercontent.com/2288939/40809942-2d49c7fa-64fa-11e8-9662-c3fc1ac54195.png)\n\n#### Top-level explaination\n\nThis code isn't at all read-able, even by me, a few hours after I wrote it.\n\nFirst a top-level explaination: the code is creating a piecewise function. Every time the ball hits the bottom (-473), we need to create a new function to represent it's motion post-bounce.\n\nWhat's tricky is that each piece of the function depends on the previous piece's end values (when the ball bounces, we need it's old position and velocity). So we construct this recursive function `sim` which will generate us parts of bounces.\n\n#### Line-by-line explaination\n\n```\nsim[0] = <|start -> 0, end -> 0, vel -> Function[t, 0], pos -> Function[t, 0] |>\n```\n\n`sim[0]` represents the initial conditions, lasting 0 seconds (as the start and end times are the same).\n\n```\nsim[n_] := sim[n] =\n```\n\nWe define `sim[n]` here and also let Wolfram know to (memorize the results of prior runs to `sim` so it doesn't need to recompute the results)[http://reference.wolfram.com/language/tutorial/FunctionsThatRememberValuesTheyHaveFound.html].\n\n```\n With[{start1 := sim[n - 1][end]},\n```\n\nHere I begin a nested series of `With` statements. They are nested because the computations depend on each other and Wolfram `With` statements aren't smart enough to figure out how to handle that.\n\nSome of the variables defined in the `With` statements, such as `start1` above are eventually placed into the association (it's like a dictionary or object) below. I didn't name this variable `start` (as you would in another langauge), because Wolfram would then then I wanted the *key* to be the value of the start variable, such as `<| 4.34 -> 4.34, ... |>` -- so that's why there's a `1` after certain variable names.\n\nAnd now to the meat of this line: it says that the start of the current piece is the end of the prior piece. Pretty straight forward.\n\n```\n With[{previousV := sim[n - 1][vel][start1]},\n```\n\nHere we calculate the final velocity of the previous piece, which we do by evaluating its velocity function on the starting time of this piece (which as we calculated above is the ending time of the previous piece).\n\n```\n With[{vel1 := Function[t, -previousV*0.9 + -10*(t-start1)]},\n```\n\nHere we calulate the velocity of this piece:\n\n * We reverse the end velocity of the previous piece, because the ball should bounce up with the same speed it hit the ground\n * But not quite the same speed because balls never bounce as high as they did when they were dropped, so we multiply the speed by 0.9\n * And then we changing the speed by -10, which is our acceleration, every second after the starting time of this piece.\n\n```\n With[{startPos := sim[n - 1][pos][start1]},\n```\n\nThe starting position of this piece is the position of the previous piece at the end time of that piece (which is the starting time of this piece). This is the same way we found `previousV`.\n\n```\n With[{pos1 := Function[t, startPos + ((vel1[t] + vel1[start1])/2)*(t -start1)]},\n\n```\n\nThen we calculate position:\n\n * starting at the initial position\n * then taking the average of velocity at the current moment and the velocity at the beginning of this piece\n * and multiplying the average velocity by the time elapsed in the current piece so far\n\n```\n With[{end1 := First[t/.Solve[{pos1[t] == -473 && t > start1}], t]},\n```\n\nAnd here we calcuate the time at which this piece hits the floor which I set here to be -473. The meat of this line `Solve[{pos1[t] == -473 && t > start1}], t]` simply asks to solve for `t` where the position is at the floor and the time is after the starting time of this piece. `First[t/.` is just extracting the computed solution out of the result.\n\n```\n <|start -> start1, end -> end1, vel -> vel1, pos -> pos1 |>\n```\n\nAnd here we boringly compile the results of our hard work into a single data structure.\n\n```\npiece := Function[n, {sim[n][pos][t], t < sim[n][end]}]\n```\n\nThis function turns the nth simulation into an array suitable for the `Piecewise` function. It's first argument it the function to be plotted and the second argument is the domain over which it should be plotted. In this case, the first argument is simply the position and the second argument is that the time shall be less than the ending time of the piece.\n\n```\nPlot[\n {Piecewise[Map[piece, {1,2,3,4,5, 6, 7, 8}]]},\n {t, 0, 100}\n]\n```\n\nAnd here we plot 8 pieces of the simulation, resulting in the beautiful graph you saw above.\n\n### But why?\n\nI've been talking a lot about piecewise functions these last few days, to my mom and my girlfriend, and they both think the idea is kinda neat, but don't understand why I'm doing this. I don't have a great defense. Instead of spending 4ish hours making this graph, I could've done the [same thing in WoofJS in 9 lines of very readable code](http://woofjs.com/create#very-simple-ball) in *under 60 seconds* (I timed it):\n\n```javascript\nvar circle = new Circle({})\ncircle.v = 0\nforever(() => {\n circle.v--\n circle.y += circle.v\n if (circle.y < minY) {\n circle.v = circle.v *-0.9\n }\n})\n```\n\n#### I want definitions to be definitional goddammit!\n\nI want that when you define something it stays defined. I've had enough of these mutable reference cells that you can read to and write to at any time. I've had enough of playing Turing Machine!\n\nRedux isn't all that different than global state we had before. Sure it's easily serialize-able, which gives you undo and redo, and time travel debugging, but that's not all I want.\n\nI want to be able to look at a piece of code and know that the only things that can affect that code are written in it. A piece of code should depend on its dependencies. Nothing else should be able to change it. In this way you could understand a small section of your code without having to understand the whole thing. Without this we are doomed to read all our code if we want to understand what's going on.\n\nI don't know much maths beyond high school, so I wonder if my salvation lies in a more powerful structure than a piecewise function. If any math geeks out there are reading this, please let me know if you have any ideas!\n\n### Mitigating thoughts\n\nPossibly these explicit formula and the Logo/Woof implicit, recursive formula are just two sides of the same coin, and we could allow programmers to write in the more intuitive (change the position by X every Y) and then take the derivitive of that to get the explicit form. (It seems like there are ways to get explicit formula for any implicit or recursive formula, so this seems likely...)\n\nIn the same way, I wonder if we can convert a codebase where any mutable cell can be changed by anyone, and statically parse all the places in the code that *could possibly* have an effect on that value, and bring them all together so you can see you things are tangled. (I am doubtful of this because 1. which values are being modified can change dymaically so we can't really assess well statically, 2. I bet this would be such a gnarled mess that it's not really useful expect to show us all the folly of our entangled ways.)\n\n#### There are just a whole bunch of bad things I know about\n\n1 - Control flow of any kind seems like a terrible idea all around. You should just describe the system and the system shall determine which lines of code to run when. Non-monadic Haskell does a great job of doing away with this.\n\n2 - Mutable variables seem like a terrible idea, as discussed above.\n\n3 - The global state reducer from actions also feels like a terrible idea. I don't want anything to be able to emit an action that can change any part of the system. If you look at a piece of state, how are you to know which actions could affect it? I also feel like it's too much power, allowing the system to change itsellf based on the past value of itself.\n\nBut how are these piecewise functions any better, you ask? Great qusetion! As you noticed, when a new piece of the piecewise function is being created, it depends on the values of the last piece. It has the entire state of the app to do what it wills with. Yeah I didn't like this either, but I wasn't able to thing up a way out of it. We really need to know the final velocity / position of the prior piece to start the next bounce. But I'm not terribly beat up about it: maybe allowing pieces to view prior pieces on piece transitions isn't so bad...?\n\nAs far as the first cricism of Redux from above, that the dependencies of a piece of start aren't listed in the state, I haven't yet dealt with that because I haven't built \"prototype\" to also work with unpredictable input, such as mouse clicks. But the idea is to allow mouse clicks to trigger new pieces to be generate at the time of the mouse click. Only time protoyping will tell if this new framework has any merits at all.\n\nPart of me wonders if I need to build an interface for this prototype because exisiting ones (such as Wolfram and Woof) just don't cut it. And part of the whole point is that I'm just constructing transitions between pure mathmatic functions, so should it be super easy to visualize the state of all my functions as graphs?!\n\nAt the very least, I'm glad I was finally able to articulate above my dislike of the current frameworks: you can't tell what's going on at X by just looking at X and asking for its dependencies.", "changes": []}, {"committer": {"date": 1527738703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "579d87526bfeca4f11d76a6dc115d6073a751059", "parents": ["9426c37530ce44d762795ec0e62cc5e3916d7021"], "commit": "209436bb1c93ff248f651374a66eafd842d6ac71", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736680, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "496fe5d3d778b1ebfffb0bea2a8caf5ce6cb64c4", "parents": ["63dbb314e2f542f82f911a0971798ebc6ff067f0"], "commit": "9426c37530ce44d762795ec0e62cc5e3916d7021", "message": "## Added old /journal entries to /log\n\nThis closes #66, get /journal entries into /log.\n\n### Notes on ObservableHQ\n\nI did it in ObservableHQ [here](https://beta.observablehq.com/@stevekrouse/parse-and-join-journal-to-commits), which was really fun and fustrating, both!\n\n* It took me 5ish to do this task in JS in ObservableHQ, when it wouldn't have taken more than 1 hour to do by hand (as there were only 68 elements).\n* I both hate and also love ImmutableJS. It provides an API like lodash which is great. It's annoying because the values don't [yet](https://talk.observablehq.com/t/custom-representation-for-object-in-the-output-cell/412/3) display well and I needed to add lots of printLine statements below my code `someImmutableValue.toJS()` just to see what was happening. Also I'd sometimes forget about it and use the old syntax and things would silently break: very fustrating! Also a bit annoying when you're doing `a.something(b)` and you want to switch the arguments - lots of typing! Probably lost an hour on ImmutableJS alone, but it was definitely worth it for the API, speed, and not having to worry about mutability ever.\n* I found the way that code was hidden by default (unless you pinned it open) was counter to what I wanted most of the time. I think I'd probably prefer the reverse: to collapse code when I'm done with it.\n* I lost another hour trying to use [simple-markdown](https://github.com/Khan/simple-markdown) which was waaaay more than I needed, given that all I needed was to split the string on a simple regex. Another hour or so gone there.\n* Maybe a half an hour was lost screwing up with momentjs, which would fail silently on me. So annoying! Give me an error goddamn it!\n* But the most fustrating loss of time came from writing functions: you can't see intermediate values and the debugging support is lack-luster. So the main benefits of a reactive tool is lost the second you want to abstract over a list! I was constantly creating a function and testing in on various elements, and then changing the index one at a time to see how it worked: `someFunction(someLIst.get(5))`. What's the point of putting my code in cells a whole function is just one cell?! You loose all the benefits of the cells and intermediate results because functions are just a textbox! Not entirely sure how I'd fix this but I have an intuition that it should be possible within this paradigm.\n* I really wish I could've also hid the output of a computation, for example the text of the journal which was really long.\n* You can't search through the code with ctl-f because it's mostly hidden.\n* You can't see (without reading) which cells depend on which other ones.\n* You can't drag cells into other orders.\n* It's a bit annoying navigating object hierarcy trees - it'd be better if it defaulted to a table or something maybe.\n\nIt's interesting to note how few operations I used:\n\n* A TON of `map`, `filter`, `some`, `max`, `find` and other Immutable list and map operators\n* regex\n* date parsing and diffing (momentjs)\n* importing the file over HTTP\n* downloading the result JSON as a file\n\nFor regex, I used [regexr.com](https://regexr.com) to live show me the output right on the data I was using.\n\nFor date parsing and diffing, I was constantly screwing this up and had to instrument my own code by hand to figure out in which ways. It definitely feels like there should be a regexr-like environment for this too.\n\nDitto for the list operations: no reason that any of these shouldn't show you the results in a more immediate way, and where you can see the intermediate values too of course. As said above, not 100% sure how to do this but I feel like it's not too tough.\n\nAs for importing and exporting data, not difficult once you find the example somewhere. I think those sorts of primitives should be easy at hand.\n\nSpeaking of easy at hand, I spend a TON of time switching tabs (ObservableHQ doesn't work great in half-screen) to look at the Immutable, Moment, simple-markdown, and various other documentations. It was annoying. They really need autocomplete on variable properties -- but also with documentation, preferably with examples!\n\nAnd of course, I think everything would've been beeter with stronger types. I wasted so much time thinking that everything was OK when it wasn't and banging me head against the wall. I want to know when things fail!\n\nAnd if you can do it with no syntax errors, that's pretty amazing too!\n\n#### Project idea: functional, immutable, strongly-typed notebook?\n\nThis all makes me think that there's a neat prototype opportunity here. All my prior protyotype ideas in this space have been very visually-focused, almost like spreadsheets. Very much like Glen's [FlowSheets](https://tinyletter.com/Flowsheets/archive). But what if we don't need the interface to be a spreadsheet (because variables (as opposed to column and row reference) and nested data structres are nice), but just a vertical series of cells (and cells within cells within cells for nested levels of abstraction)? Syntax errors aren't so bad (considering I haven't yet met a projectional editor I prefer, maybe save Scratch), but let's definitely get some strong types, solid primitives (data structure, string, date, HTTP, importing), and inline documentation.", "changes": [[58, 0, "_data/commitToJournalMarkdown.json"], [3, 2, "log.md"]]}, {"committer": {"date": 1527736120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e0d81027e2c25b1e6da49f216ff612010c3d57f7", "parents": ["8de6e73131294c0a98dfd912388c3fe3a7214f39"], "commit": "63dbb314e2f542f82f911a0971798ebc6ff067f0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527736116, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1792cc3328d51b3c9d1f03a6fbd36d6a23a21364", "parents": ["8c9419a407b3c534ad0cd71e7c8db9cfa019bce6"], "commit": "8de6e73131294c0a98dfd912388c3fe3a7214f39", "message": "removed colons from page titles to mollify jekyll a la https://github.com/jekyll/jekyll/issues/549", "changes": [[1, 1, "episodes/21.md"], [1, 1, "episodes/22.md"], [1, 1, "episodes/23.md"], [1, 1, "episodes/24.md"]]}, {"committer": {"date": 1527624807, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77567e9e6a60384b0e78cbb6a341a8c8f3245b8f", "parents": ["86d7634d3486bf2c116133c3d9ab3e2b2e510a13"], "commit": "8c9419a407b3c534ad0cd71e7c8db9cfa019bce6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527624120, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["0ef7c3538cd36ec9b7300dbb5b8892dd84618788"], "commit": "86d7634d3486bf2c116133c3d9ab3e2b2e510a13", "message": "## Math and physics as code\n\nI've had this intuition for a while now: wouldn't it be neat if you could somehow \"copy-and-paste\" your physics equations from your textbook and drop them into your computer and that be the code?\n\nLet's describe a bouncing ball.\n\nWorks great to start:\n\n```javascript\nconst a = (t) => -9.8 /* meters per second sq */ * 10 /* px per meter */\nconst v0 = 0\nconst v1 = (t) => v0 + a(t)*t\nconst p0 = 0\nconst p1 = (t) => p0 + (((v1(t)+v0)/2)*t)\n```\n\nBut what about the bounce? There are two problems:\n\n1) We need to reverse the velocity (multiply it by -1)\n2) We need to know at what time the bounce occurs\n\nHow about a piece-wise defined function? For starters, let's just hardcode the bounce intervals at 3, and 9:\n\n```javascript\nconst t_bottom1 = 3 // p1(t) === 0, solve for t\nconst v2 = (t) => -v1(t_bottom1) + a(t)*(t - t_bottom1)\nconst p2 = (t) => p1(t_bottom1) + ((v2(t) + v2(t_bottom1))/2)*(t - t_bottom1)\n\nconst t_bottom2 = 9 // p2(t) === 0, solve for t\nconst v3 = (t) => -v2(t_bottom2) + a(t)*(t - t_bottom2)\nconst p3 = (t) => p2(t_bottom2) + ((v3(t) + v3(t_bottom2))/2)*(t - t_bottom2)\n\nconst p = (t) => {\n if (t < t_bottom1) {\n return p1(t)\n } else if (t < t_bottom2) {\n return p2(t)\n } else {\n return p3(t)\n }\n}\n```\nOk, let's abstract this so the ball can bounce forever-ish:\n\n```javascript\nconst eq0 = {\n t0: -1,\n v: (t) => 0,\n p: (t) => 0\n}\nvar equations = [eq0]\nconst intervals = [0].concat(range(3,1000, 6)) // [0, 3, 9, 15, ...]\nintervals.forEach((t0, i) => {\n var eq = {}\n\n eq_last = equations[i]\n eq.v_last = eq_last.v(t0)\n eq.p_last = eq_last.p(t0)\n\n eq.t0 = t0\n eq.a = (t) => -9.8 /* meters per second sq */ * 10 /* px per meter */\n eq.v = (t) => -eq.v_last + eq.a(t)*(t - t0) // NEXT: can't decrease by 0.9 because then 6 second hardcoded intervals are fucked up\n // THUS: how do make dynamic\n // MAYBE use something like http://algebra.js.org/ to solve the equations\n // WHICH would eventually lead to allowing mouse click generated invervals\n eq.p = (t) => eq.p_last + (((eq.v(t)+eq.v(t0))/2)*(t - t0))\n\n equations.push(eq)\n})\n\nfunction eqI(t) {\n const eqNext = equations.find(eq => t < eq.t0)\n if (!eqNext) { return equations.length-1 }\n const eqNextIndex = equations.indexOf(eqNext)\n return eqNextIndex - 1\n}\n\nconst p = (t) => {\n const eq = equations[eqI(t)]\n return eq.p(t)\n}\n```\n\nFull code to be found [here](http://woofjs.com/create.html#physics-and-math/6).\n\nAs said in the code, next steps are:\n\n1) make the intervals dynamic (so we can decrease the speed by 10% each bounce), maybe using something like http://algebra.js.org/ to solve the equations\n2) see if we can additionally generate intervals by non-predictable user-input, such as mouse clicks\n3) ...turn into flappy bird?\n\nSome notes:\n\n* It was really annoying to code this, because math can be annoying especially inside JS. I wonder how much better it could be in the right kind of environemnt that supports this kind of maths with rapid feedback. I worry that expressing things in this explicit, closed form, with partial equations will be too awkward for people and the gains of mathmatical purity, expresivity won't be worth it. Regardless, I want to follow down this rabbit hole and see where it goes.\n* To really show why it's neat to do things in this closed form, I should probably add a time travel debugger thing, that also shows the positions and velocities and accelerations at different points in time, and change when you tweak the params. Probably would be a neat demo.", "changes": []}, {"committer": {"date": 1527272599, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1527272599, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09", "1c804a419370b04fafa3cd85279534dbeb51da0c"], "commit": "0ef7c3538cd36ec9b7300dbb5b8892dd84618788", "message": "Merge pull request #80 from tom-bop/master\n\nFix typo", "changes": []}, {"committer": {"date": 1527271549, "timezone": "+0000", "name": "tom-bop", "email": "tom@tinybop.com"}, "author": {"date": 1527271549, "timezone": "+0000", "name": "tom-bop", "email": "tom@tinybop.com"}, "tree": "5f87c991eee80069f1fa77a845eb9d273178e16c", "parents": ["01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09"], "commit": "1c804a419370b04fafa3cd85279534dbeb51da0c", "message": "Fix typo", "changes": [[1, 1, "episodes/23.md"]]}, {"committer": {"date": 1527019804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1076c9844380cc196d49d6a46cb67e6f5e956ed", "parents": ["046fd231d4a9805568bdd2a7a8d3e2d9e6838d08"], "commit": "01bedecbf7c91a56d3f1e1c3fd72fd64c4a97b09", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "149fe398947e50529ff7956c95eccadfd0fd235a", "parents": ["6c80e3f9669ad6934453999c1ddff800dda8b2f6"], "commit": "046fd231d4a9805568bdd2a7a8d3e2d9e6838d08", "message": "removed 'monthly' from NYC meetups", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1527019741, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8493118006f99adf1372c54812ad361e413b70dd", "parents": ["6795eb87e77a85e50753505a52e0a3465822d9df"], "commit": "6c80e3f9669ad6934453999c1ddff800dda8b2f6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019735, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3f70f698de1e9a493e175c54246e152df322fdc", "parents": ["d887811af3d3cd2d13485b1d78e29fa912539cc8"], "commit": "6795eb87e77a85e50753505a52e0a3465822d9df", "message": "zero pad episode numbers for alignment", "changes": [[9, 9, "index.html"]]}, {"committer": {"date": 1527019092, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "569709b79a3b52d16185737e1d2dbd17db71ed8a", "parents": ["66a88d8e978ae1ebb7810080e365aa1a796ceef4"], "commit": "d887811af3d3cd2d13485b1d78e29fa912539cc8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1527019085, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "be17b3666992010d351cea4605103d874df9d528", "parents": ["98b4c22905bc72c969924ae15820a3a269de10f6"], "commit": "66a88d8e978ae1ebb7810080e365aa1a796ceef4", "message": "added episode 24, nick santos, windmill", "changes": [[27, 0, "episodes/24.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1526926599, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "044ba8a986a77885702976b050ff51c08fc1dbbd", "parents": ["c93babd9c63fa35a4f26018c79c2c4422a63c492"], "commit": "98b4c22905bc72c969924ae15820a3a269de10f6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526926406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "616c94027545a010763f2d237e165205dd3f6725", "parents": ["01fa4fc9dfc9b872b4183fd99e3180b2483f2c94"], "commit": "c93babd9c63fa35a4f26018c79c2c4422a63c492", "message": "## The rabbitholes never end!\n\n* TOC\n{: toc }\n\n### Artist-Centric Programming Tools\n\nFriday night, Twitter sent me a notification to look at this tweet:\n\n

    https://t.co/nqIwhoOc39
    Recording of our presentation on Artist-Centric Programming Tools at #chi2018

    — Jennifer Jacobs (@jsquare) May 18, 2018
    \n\n\nFirst of all, I'm amazed and super grateful that Twitter was smart enough to let me know about this.\n\nI only got part-way into [the thesis](http://web.media.mit.edu/~jacobsj/resources/jjacobs_dissertation_final_optimized.pdf), but I'm pumped to finish it. I got distracted by one of her references, InterState...\n\n### [InterState](http://interstate.from.so/)\n\nIn [an earlier entry](http://futureofcoding.org/log#thoughts-for-next-week), I wrote:\n\n> how do Facebook’s Origami, CycleJS devtools, and statecharts somehow fit together?\n\nThis protoype seems to answer that question! I was so excited that I [sent it over to the StateCharts community](https://spectrum.chat/statecharts?thread=535444a5-1743-4124-b767-ed7b490db7ec)!\n\n### Finished re-watching Tangible Functional Programming\n\nReally wonderful! I missed the beauty here in the first watching. Notes [here](/nodes/conal-elliot).\n\n### Some interesting links I found along the way:\n\n* [Concur - a new FRP library](https://github.com/ajnsit/concur) - Found by searching \"Elm Fudgets\" after reading about [Fudgets](http://www.cse.chalmers.se/~hallgren/Thesis/main.html#tutorial) on Conal's reccomendation.\n* [Forms/3](http://web.engr.oregonstate.edu/~burnett/Forms3/forms3.html) - I've heard of this before but checked it out after seeing it referenced by Conal, and it's cooler than I remember.\n* [Links Lang](http://links-lang.org/) - I found this after re-reading [\"What next?\"](https://graydon2.dreamwidth.org/253769.html) by Graydon Hoare. So cool! Unifies all layers of the stack into one language. Excited to check this out soon!\n\n### Open problems as of 5/21/18\n\nAs I was falling alseep last night, I thought about the core problems with existing languages:\n\n1. Redux, Elm, and CycleJS are a pain to code in. Small changes require big refactors. More importantly, emitting actions that can edit state in any way feels similar to the global mutable state we started with, that Andre Staltz argues against in [his arrow post.](https://futurice.com/blog/reactive-mvc-and-the-virtual-dom)\n\n2. IO (and async) in an elegant way. Monads and streams kinda stink and feel imperitive the same way Redux does. ([Conal agrees.](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm))\n\n3. In order to build a solution to these problems, it also needs to be somehow inter-operable with existing web frameworks. Relevant questions include whether its interpreted or compiled, etc, etc.\n\n4. Another open questions is what the backend should look like in order to handle authentication, permissioning, persistance, etc.\n\n5. Another open question: if you want to add phsyics to an object in your code, why not add the equations from your physics class to your program? In other words, how mathmatical and high-level can we get? What's the highest-levle we can get and still have something computable (with good performance) at the end? Additionally, can we make a declarative langauge that's readable and debuggable? (The Seymour Papert's distinction between LOGO's first-person `FORWARD 1, RIGHT 1`, and math's third-person `x^2 + y^2 = z^2`, and how they are really just two sides of the same coin via the derivitive feels relevant here.)\n\n6. Soundness of the type-system from a Scott, Strachey, and Elliot perspective also feels relevant here. I don't want leaky or infinitely-complex abstractions.\n\nI'm not even sure if these problems are truly problems, or just things I don't yet understand. Yet, it feels very relevant to continue down the Conal Elliot, FRP rabbithole. I hope that the more I understand Elliot's and (also Hudak's Arrowized) FRP, the more I'll be able to explain why I dislike Redux, Elm, and CycleJS. (Yet, I am a bit nervous that I won't like *any* implementation of FRP out there. What then?!)\n\n### Todos as of 5/21/18\n\nI still haven't found a better way to manage these than listing them every log entry. Here are the remaining ones:\n\n* Prototype TodoMVC in [InterState](http://interstate.from.so/), and read the paper, and reach out for a conversation\n* Finish reading [Jennifer Jacobs's Dynamic Drawing](http://web.media.mit.edu/~jacobsj/resources/jjacobs_dissertation_final_optimized.pdf), and reach out for a conversation\n* Edit (or throw out) [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)\n* Hareactive\n* Simon Friis Vindum, including [Let's reinvent FRP](http://vindum.io/blog/lets-reinvent-frp/), and possibly reach out for a conversation\n* [Facebook Origami Community](http://futureofcoding.org/log#facebook-origami-community)\n* Stratchey denotational design\n* Conal's Denotational design with typeclass morphisms, Fran, and basically everything he's done\n* [Verlet](https://twitter.com/stevekrouse/status/987339448064053249) and [ConstraintJS](https://twitter.com/coreload/status/989313738539909120)\n* Sean McDirmid (and [these](https://llk.media.mit.edu/papers/archive/ch-phd.pdf) [papers](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf) he referenced)\n* Reach out to Jonathan Edwards\n* make a better system for todos, things-to-research (FoC Research label in Inbox), ideas-to-ponder-on (FoC Thinking label in Inbox), projects/blogs-to-consider-doing", "changes": [[13, 0, "notes/conal-elliot.md"]]}, {"committer": {"date": 1526574583, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ea33d6507ccc8640a1eee0003437e083a68e1ada", "parents": ["0d3827002f1cd5d66e603ee7d81b401e0e1a913b"], "commit": "01fa4fc9dfc9b872b4183fd99e3180b2483f2c94", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526574579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ddfa58ffa24926b814c2b620c6c3947d79ae3b81", "parents": ["ea574a895dc9e8b99a0f307d6707fc29d62be9b3"], "commit": "0d3827002f1cd5d66e603ee7d81b401e0e1a913b", "message": "added episode 23, brent yorgey", "changes": [[35, 0, "episodes/23.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1526507826, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e34e8ebab74a57103bb2269a497c087feab64f5d", "parents": ["df767b81300c4870b576e9c86d35823b84d81f46"], "commit": "ea574a895dc9e8b99a0f307d6707fc29d62be9b3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1526506386, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a68768f2d23a2451387d1400751fcf3f1016e6c", "parents": ["4dfa151938cd29c169085d2c2f86e3547a41c917"], "commit": "df767b81300c4870b576e9c86d35823b84d81f46", "message": "## Back at it, reading and emails\n\n* TOC\n{: toc }\n\nBesides the readings below, I cleaned up my inbox, which I haven't done in about a week, so that feels good to be back in integrity.\n\n### Jonathan-Edwards-inpsired Reading\n\nI meant to reach out to Jonathan Edwards today (but didn't), and found myself on his twitter, where I found some amazing gems:\n\n* [Against functional programming](https://twitter.com/jonathoda/status/976937603709587456)\n* [Near Future of Programming Languages by Stephen Diehl](http://dev.stephendiehl.com/nearfuture.pdf)\n* This comment amazing comment: [\"Imperative programs, on the other hand, always have a ready axis for decomposition: time. You break your program up into tiny time slices, and then work backwards to find procedures that that get you to the first one, then the second one, etc, until you hit the end of your program.\"](https://news.ycombinator.com/item?id=16726917) on this [Gradual Programming](http://willcrichton.net/notes/gradual-programming/)\n* Conal Elliot: [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm) - This article makes me so happy. Monads, and every other approach to IO in a functional language, stinks. We need to keep looking.\n* [Why program with continuous time?](http://conal.net/blog/posts/why-program-with-continuous-time) - good summary of the key points of FRP\n* [\"What next?\"](https://graydon2.dreamwidth.org/253769.html) by Graydon Hoare, creator of Rust. Holy shit this article is amazing. So many gems! I want to read this article again and again. Would love to email him and get his advice on where to apply my efforts towards improving programming.\n\n### Graydon Hoare-inspired reading\n\n* From Graydon, I was sent to learn about algebraic effect handlers in [Eff](http://www.eff-lang.org/), which didn't really impress me to be honest. Their pitch of \"you know how much you like exception handlers? Let's have more of those\" doesn't resonate with me because I never liked exception handlers. Feels to procedural, contextual to me. I much prefer it encoded in the types, such as a Maybe or Failure type.\n* [Koka](https://www.microsoft.com/en-us/research/project/koka/) makes a little more sense to me, labelling functions based on whether it can raise an exception, possibly not terminate, and be non-deterministic... but I only skimmed the beginning.\n* I was VERY EXCITED to see [Frink](https://en.wikipedia.org/wiki/Frink_(programming_language) and [\"units of measure\" in F#](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure). I've both sad and excited that [this exact idea I've had](http://futureofcoding.org/notes/kill-primitives#4-phsyics-units-for-numbers) has already been had. I claim independent invention!\n\n### Todos of 5/16/17 in no particular order\n\n* Finish re-watching Conal's [Tangible Functional Programming](https://youtu.be/faJ8N0giqzw?t=32m49s) and try to read [the paper](http://conal.net/papers/Eros/eros.pdf), Maybe I should print it out to help me focus...?\n* Also, don't forget [the other ToDos of last week](http://futureofcoding.org/log#some-todos-i-scribbled-down-last-week), especially reaching out to Jonathan Edwards and possibly Sean McDirmid\n* Possibly reach out to Graydon Hoare or at least learn more of what he has to say, including re-reading his \"What next?\"\n* Find a better way to manage these notes and todos so things get less lost...?\n* Edit (or throw out) [plan v6](https://github.com/stevekrouse/futureofcoding.org/blob/3821ba9d0ad65a7f6aaea583be8283aba16558e5/plan.md)", "changes": []}, {"committer": {"date": 1525797727, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a68768f2d23a2451387d1400751fcf3f1016e6c", "parents": ["031e9d1b697f170cf604d109c75853c424051528"], "commit": "4dfa151938cd29c169085d2c2f86e3547a41c917", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525797572, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "905e670dc14194df79e92ee50e763097f73b5c56", "parents": ["6e8c88a3a430cac01ba62e463ab93bcc41dc71e7"], "commit": "031e9d1b697f170cf604d109c75853c424051528", "message": "## Notes From Last Week\n\n* TOC\n{: toc }\n\n### Repl.it dev, Mon - Weds\n\nI spent Monday - Wednesday last week working mostly on Repl.it. It was quite fustrating, but in a motivating way: there's so much about programming that needs fixing!\n\nTo give you a taste, I've worked 23 horus at Repl.it. The first 4.5 hours were spent setting up my dev environment, then another 2.25 hours debugging my dev environment, and ~2 hours fixing linting or flow type errors. And I believe most of the productive hours I spent were wasted waiting for webpack to recompile all my code for every little change. Sometimes I'd have to wait 10-20 seconds to see even a small change. Very fustrating and very slow! And, of course, so much of my time was spent understanding complex code, React/Redux abstractions, and funneling scope and state, etc, etc. So much garbage!\n\nFor the 10ish hours I wanted to work there, I clearly was not being productive enough to justify them getting me up to speed on their stack. As of yesterday, we parted ways, so now I'm down to the 1 part-time gig with Dark (and another one in the works, but it's touch-and-go if it'll close). As explained above, this work fustrated me so I'm happy to have it off my plate, but I also got enough fustration to re-spark some motivation in a positive way.\n\n### Thursday 5/3/18\n\nI read from 10am to 3pm. It was interesting but also difficult to stay focused.\n\n* Lucid Synchrone - skimmed\n* Sean McDirmid's Live Programming Video - Awesome! I want to review more of his work.\n* Conal Elliot Haskellcast video - So great. Took notes [here](/notes/conal-elliot).\n* Typeclassopedia - read for a bit, then skimmed.\n* [History of Haskell](http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=2B48E418C19376C73F08B593DCFDCAB7?doi=10.1.1.168.4008&rep=rep1&type=pdf) - read the first half, then skimmed.\n * Haskell was created to solve the \"tower of babel\" problem around all *lazy* langauges sprouting up. Purity and typeclasses came later.\n * I/O was intresting too: streams, contiuations, world-passing, and Monads\n* Can Programming Be Liberated...?\n * No variables or substitution! Just one input functions and function combinators.\n\n### Friday 5/4/18\n\nI wasn't so motivated on Friday, so I mostly read Understanding Comics (reccomended by Conal and BV), and did some part-time work for Dark. I also had a group call with Dennis Heihoff, Shaun Williams, and Ivan Reese, which was fun.\n\n### Devtools, not programming languages\n\nI've realized that \"devtools\" is a better way to describe the field I'm in that \"programming langauges\". Pretty obvious in retrospect, but took me a while to realize this.\n\n### Some ToDos I scribbled down last week\n\n* Stratchey denotational design\n* Conal's Denotational design with typeclass morphisms\n* Conal's Fran\n* Simon Friis Vindum, including http://vindum.io/blog/lets-reinvent-frp/\n* [Verlet](https://twitter.com/stevekrouse/status/987339448064053249) and [ConstraintJS](https://twitter.com/coreload/status/989313738539909120)\n* Sean McDirmid (and [these](https://llk.media.mit.edu/papers/archive/ch-phd.pdf) [papers](https://www.cs.colorado.edu/~ralex/papers/PDF/Conversational_Programming.pdf) he referenced)\n* Reach out to Jonathan Edwards\n\n### Less passion\n\nI haven't been super productive or passionate about stuff in a little while. It's been a bit of a slog getting myself to do research.\n\nPart of the reason is that I've becommed obsessed with The Wheel of Time series on audibook and am making my way through. Almost to the end!\n\n### Foundations\n\nI find myself increasingly curious about foundations, mathmatics, precision, abstraction, etc. I've always been on the fringes of the strong types community, and proving program correctness. These things were what the professors were up to a Penn while I was there. But I've never seen the need to dive in before. I think it was Conal's comments in the Haskellcast video that got me:\n\n1) Those that don't understand FRP are doomed to re-create inferior versions of it\n2) All the FRP implementations out there are more complex than their creators realize because they broke abstractions\n3) You don't truly understand how good or complex a design is until you describe it mathmatically, precisely\n\nMusic to Paul Chiusano's ears, I'm sure.\n\n### Vision: semantic and cannonical\n\nWhy am I so insistent that programming can be better? It's hard to put into words. As I was falling asleep a few nights ago, I was struck by how a two words kept coming to mind: \"semantic\" and \"canonical\". But what does that even mean? I have a fuzzy image of mathmatical expressions in the sky, with a white background behind them, and you can select different parts of the expression and get interesting information about the node, because it's a living object that can be manipulated...", "changes": [[31, 0, "notes/conal-elliot.md"], [33, 0, "notes/simon-friis-vindum.md"]]}, {"committer": {"date": 1525301982, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c6c30f064fea79c30702c45321c5d9237978b6d", "parents": ["2aa0ae3d492cab633ab48f0e4880abf1448d2df7"], "commit": "6e8c88a3a430cac01ba62e463ab93bcc41dc71e7", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d295d4d6073dba921bbe7831dd07cdd3d0b20134", "parents": ["ca2b25b44ef93e32588f786f8966f92089bd9a57"], "commit": "2aa0ae3d492cab633ab48f0e4880abf1448d2df7", "message": "add link to talk about", "changes": [[1, 1, "_data/git-log.json"], [1, 2, "episodes/22.md"]]}, {"committer": {"date": 1525301433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5e26fc78111619ff3e06d0ceb181e54ab3812c61", "parents": ["08a5b5f06b357f13e5e786e370da24d271bb2c97"], "commit": "ca2b25b44ef93e32588f786f8966f92089bd9a57", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301431, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "48403bb37ee5cf437fe1381ae08b8a750fb5c979", "parents": ["583cf7c28dab8c3ed63f106a52940435af0a467a"], "commit": "08a5b5f06b357f13e5e786e370da24d271bb2c97", "message": "linkify python tutor", "changes": [[1, 1, "episodes/22.md"]]}, {"committer": {"date": 1525301391, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "45954131917524d72c141e1ad3111b7da9adb284", "parents": ["cae6f341f16ce20849db361ec73c858513297321"], "commit": "583cf7c28dab8c3ed63f106a52940435af0a467a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b45b0981a11fdcdc82c34fbe0e701ab0890e19cc", "parents": ["a8b31d604dc9967eb974010f5242a7bafe01c1a1"], "commit": "cae6f341f16ce20849db361ec73c858513297321", "message": "removed typo", "changes": [[1, 1, "episodes/22.md"]]}, {"committer": {"date": 1525301185, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d43d0a248ca371ec6dd81dead82b45f5db8325dd", "parents": ["1ed27318e99c79ef606007403463ce3d09251355"], "commit": "a8b31d604dc9967eb974010f5242a7bafe01c1a1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525301182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a061de1c7a1ca6e9102ffe3b2670fc9106839bad", "parents": ["43b446e7e810fa1dbe162b814c718054fade586c"], "commit": "1ed27318e99c79ef606007403463ce3d09251355", "message": "added episode 22: philip guo", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "episodes/21.md"], [38, 0, "episodes/22.md"], [2, 1, "index.html"]]}, {"committer": {"date": 1525300409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d0c5596c68d082d0848909ae2203a6f129c967d9", "parents": ["2cdbc1b06a1419a6005cccd913f2c5b1c15a1ac6"], "commit": "43b446e7e810fa1dbe162b814c718054fade586c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1525300406, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "353aaa04ae480003435e16a0f09183b92b22c9c8", "parents": ["8f4e61310fb140ff83cc5073a89f2e6bd69f2d1a"], "commit": "2cdbc1b06a1419a6005cccd913f2c5b1c15a1ac6", "message": "updated homepage message, added eve link", "changes": [[2, 1, "index.html"]]}, {"committer": {"date": 1524240466, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e968d384e6be977cf7d2ffd62fe0e4a115228dec", "parents": ["f39077ed57c7d701dbc352b83b320e1ecd63bc19"], "commit": "8f4e61310fb140ff83cc5073a89f2e6bd69f2d1a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524239329, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab1b6c7238944c77d966032f91785e211a66463e", "parents": ["d8987468dd381b00118a875bdfebf0efa8b78a3e"], "commit": "f39077ed57c7d701dbc352b83b320e1ecd63bc19", "message": "## Morning FRP readings, and next steps\n\n* TOC\n{: toc }\n\n### Morning FRP readings\n\n#### Flapjax\n\nI started the morning by reading [the paper on the Flapjax language/library](http://cs.brown.edu/~sk/Publications/Papers/Published/mgbcgbk-flapjax/paper.pdf). It seems to do FRP in much the same way that CycleJS does: stream combinators. It's kinda neat in how it makes things higher level, but just as with CycleJS, I found it quite difficult to parse the code. However, it is crazy to think that this pre-dated CycleJS by a decade... I guess this goes to Bret's point about aiming higher than \"improving programming.\"\n\n#### \"Real FRP\"\n\nI've gotten tired of [Haskell people talking about \"real FRP\"](https://news.ycombinator.com/item?id=7965027), so I spent a few hours re-reading [the Fran tutorial](http://conal.net/fran/tutorial.htm) and re-watching two of Conal's talks on it ([1](https://www.youtube.com/watch?v=j3Q32brCUAI) and [2](https://www.youtube.com/watch?v=teRC_Lf61Gw)). Finally, I feel like I have a clear understanding of what people mean by \"real FRP.\" I don't think I had seen enough of the \"fake FRP\" when I first watched the video to understand the distinction:\n\nReal FRP is (mostly) about continuous time, in the same way that vector graphics are about continous space. In other words, \"resolution independent time\", or \"time as a function from the real numbers\".\n\nReal FRP is also about denotational design, of which I feel slightly closer to groking, but likely still a hundred hours of Haskell away from. One day I'll memorize the Typeclassopedia and everything will make sense.\n\n### Next steps\n\n#### Hareactive\n\nThis is a JS library for \"real FRP\", and I'm excited to play with it a bit.\n\n#### Sean McDirmid\n\nI've been seeing his name pop up a lot recently, so I'm excitd to check out this [Live Programming Experience](https://www.youtube.com/watch?v=YLrdhFEAiqo) video. Maybe I'll reach out too...\n\n#### Callbags\n\nI'm excited to check out Staltz [new article on Callbacks](https://egghead.io/articles/comparing-callbags-to-rxjs-for-reactive-programming).\n\n#### Facebook Origami Community\n\nAnother thing I want to do is continue to investigate how far I can push Facebook's Origami. There are a few interesting threads in the FB Group I want to either look into or reply to, along with posting a question myself about updating complex centralized state.\n\n* [https://www.facebook.com/groups/origami.community/search/?query=createElement](https://www.facebook.com/groups/origami.community/search/?query=createElement)\n* [https://www.facebook.com/groups/origami.community/permalink/1180492722049608/](https://www.facebook.com/groups/origami.community/permalink/1180492722049608/)\n* [https://www.facebook.com/groups/origami.community/1419542018144676/](https://www.facebook.com/groups/origami.community/1419542018144676/)\n* [https://www.facebook.com/groups/origami.community/permalink/1577202409045302/](https://www.facebook.com/groups/origami.community/permalink/1577202409045302/)\n\n#### Jonathan Edwards\n\nHe's also been saying interseting things on Twitter recently, so I've been meaning to reach out...\n\n#### Synchronous programming langauges\n\nApparently, this is a interesting family of languages, including Lucid and Esterel, etc. I wonder where to start... This article on [Lucid Synchrone](http://www.di.ens.fr/~pouzet/bib/chap_lucid_synchrone_english_iste08.pdf) looks good.\n\n#### Prototype a better text-based dataflow langague\n\nAs in re-write the logic for [a game I made yesterday for fun in WoofJS](woofjs.com/create#ballz). Maybe I could re-write it in Hareactive or just prototype it on paper (without a library to back it up).\n\n#### More centralized place for todos\n\nIt's a bit crazy to put them in a log like this... Maybe /now or /todo would make sense...", "changes": []}, {"committer": {"date": 1524158081, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ab1b6c7238944c77d966032f91785e211a66463e", "parents": ["deea5528331b9cc138d0eeb3289804a6062e4646"], "commit": "d8987468dd381b00118a875bdfebf0efa8b78a3e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1524157662, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ba636e2fb12e4920900428af61f911c083652abf", "parents": ["d75cf917fbcebf34ba37f11cc766130b559089a1"], "commit": "deea5528331b9cc138d0eeb3289804a6062e4646", "message": "## Dataflow reading\n\nInspired by my conversation with Brent Yorgey yesterday, I spent ~2 hours reading a 30-page survey paper on data flow programming langauges, with an emphasis on visual data flow langauages, such as LabView. It was fascinating!\n\nA good next step would be to find a similar kind of survey paper but for functional reactive programming. While I could just start with Conal's Fran paper, I expect it'd be more fun and a better use of my time to get a more modern and broad perspective -- if it could include ReactJS and other JS libraries too, even better!\n\n### Booleans are too generic - proofs are better\n\nBrent reccomended [a great article](https://existentialtype.wordpress.com/2011/03/15/boolean-blindness/) in a similar spirit to my \"booleans are too generic\" idea. The main idea here is that truth shouldn't be a data type, but should be a proof, as it is in math.\n\nThat's a bit different from my idea which proposes to create a lot of new, more specific data types to replace True and False, such as Equal and NotEqual, which would be pattern matched against, not branched at like an if-statement.", "changes": [[92, 0, "notes/dataflow/advances-in-dataflow-programming-langauges.md"]]}, {"committer": {"date": 1523892504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "acad817d8be502c73f63de215dc85836554e41fc", "parents": ["5208961beae42e4ebaa2efa14af61780b388516a"], "commit": "d75cf917fbcebf34ba37f11cc766130b559089a1", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523892388, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b6ecd0215b10e3ccde0f87efa4d803d66534af8f", "parents": ["7ace0367b2a7a0d603e3002d93deec745ef361db"], "commit": "5208961beae42e4ebaa2efa14af61780b388516a", "message": "## Notes from Friday 4/13/18\n\n* TOC\n{: toc }\n\nI didn't have time on Friday last week to write up my log entry, so here it is now...\n\n## Dataflow links\n\nOn Friday I ended up opening more links than I had time to actually read.\n\n* I found [this wonderful stack overflow answer that lists a bunch of dataflow programming langauges](https://stackoverflow.com/a/949771)\n* There's [a similar list on Wikipedia](https://en.wikipedia.org/wiki/Dataflow_programming#Languages)\n* I also found [a paper that is doing a good job of explaining the history of dataflow programming languages](http://www.cs.ucf.edu/~dcm/Teaching/COT4810-Spring2011/Literature/DataFlowProgrammingLanguages.pdf)\n\n\n## Other links\n\n* I really need to take the time to read [BV's Climate Change essay](http://worrydream.com/ClimateChange)\n* Mentioned in random passing in that article, BV links to [ActiveSheets](http://hirzels.com/martin/papers/debs16-activesheets.pdf), which seems similar enough to Streamsheets to warrant a reading.\n\n\n## Murukesh\n\nFascinating conversation on Friday of last week. Notes in [this google doc](https://docs.google.com/document/d/12gsgrG-S-7E0osjWIECjeWjAQgHWEq0Zsuxcjru7PTU/edit?usp=sharing). Maybe I'll turn it into a proper article. It's fascinating that there's so much progress in this space in both the past and in industries that we ignore.\n\nHe sent me [two](https://www.youtube.com/watch?v=gveTy4EmNyk&feature=youtu.be&t=1385 ) [amazing](https://www.youtube.com/watch?v=UGhfB-NICzg) videos of the NeXTSTEP development environments that Steve Jobs made. Unbelievable. It's like Smalltalk. Really makes you scratch your head as to why we don't have development environments like this today.\n\n\n## repl.it\n\nI had a great call with Amjad of Repl.it last Friday as well, in part from my Eve article. I'm going to follow up with a few ideas for improving their IDE interface, and then possible begin developing for them part-time. I'm very excited about this! It makes me feel much more secure to have a second part-time gig running, as well as that it's starting to feel like finding these part-time gigs at developer-tools companies are repeatedly find-able. Content marketing - who knew?", "changes": []}, {"committer": {"date": 1523571450, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b6ecd0215b10e3ccde0f87efa4d803d66534af8f", "parents": ["7ea0f76f79c9ece1d6bf8e464f3a21f9a144e2aa"], "commit": "7ace0367b2a7a0d603e3002d93deec745ef361db", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523571252, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac17621961b99b35dc79a8806a0ff77c72ebf971", "parents": ["50654e3938bfcf432524da65d7e2cd4b0516bd40"], "commit": "7ea0f76f79c9ece1d6bf8e464f3a21f9a144e2aa", "message": "## Chores and reading\n\nToday I wasn't really in the mood to do much hard thinking, so I spent a few hours in my inbox catching up on things, doing random chores around the house, and finally brining myself to do some reading relevant to the research topics I've been thinking about lately.\n\nI started with reading [Ian Horrock's UI with Statecharts](http://futureofcoding.org/media/Constructing%20the%20User%20Interface%20with%20Statecharts%20Ian%20Horrocks.pdf), but to a break to go directly to the source ([Harel's Statecharts](http://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf)), and then back to Ian's book. I read parts and skimmed parts of both. They seemed semi-relevant to what I'm trying to do. As far as I could see, neither referenced the management of complex, nested state. They seemed to assume that non-state data (such as the currently displayed value on the calculator screen) was stored somewhere magically.\n\nI then read a series of Andre Staltz posts. It turns out my link to his post on Friday was actually the incorrect post. I meant [this one](https://futurice.com/blog/reactive-mvc-and-the-virtual-dom). He had a lot of other interesting posts, but I found myself not excited about the conclusions he drew. In particular, I didn't like his discussion of [hot vs cold observables](https://staltz.com/cold-and-hot-callbacks.html) because I don't love his conclusions, although I couldn't find any fault with his logic. It'd be a bummer if there wasn't a more elegant way to model this distinction. It really seems like an incidental complexity type of thing. I also came to realize that I find stream-based programming a bit annoying. While it's kinda cool, I wonder if it's overly abstract, the way Haskell can get sometimes.\n\nI then re-read (for the 10th time), [Elm's Farewell to FRP](http://elm-lang.org/blog/farewell-to-frp). Again, an article that feels profound but that I don't like for some reason, mostly because there are a lot of concepts in it that I don't quite understand, but don't like the conclusions reached. It feels similar to when I had to learn AngularJS. I don't really know what the concepts mean, but I can tell somehow that they are less elegant than they could be.\n\nFrom there I found my way to [Lucid Synchrone](http://www.di.ens.fr/~pouzet/bib/chap_lucid_synchrone_english_iste08.pdf), but stopped after a few paragrahs, and just like with statecharts decided I wanted to go to the source, so I started reading [Lucid](http://worrydream.com/refs/Wadge%20-%20Lucid,%20the%20Dataflow%20Programming%20Language.pdf). I'm actually a little shocked that I haven't read this before. There's so much here that I was slowly coming to on my own, but it feels like they've brought it all together for me. And, of course, Bret Victor is a big fan of it I've heard, although I wasn't able to find his thoughts on it anywhere on the internet. My next steps are definitely to read through this, and maybe the Synchrone Experiment.\n\nAnd as much as I want to avoid it, it seems like I may have to get my hands dirty with all this theoretical stuff. Read the Fran paper, other Conal Elliot stuff, maybe read Evan's Elm thesis, as well as other Elm blogs, etc. I imagine all of this stuff could provide interesting conversation topics with Brent next week...", "changes": []}, {"committer": {"date": 1523361534, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ac17621961b99b35dc79a8806a0ff77c72ebf971", "parents": ["ee23b8ba40b8e01e2706f9b0970867b7b0c38c2d"], "commit": "50654e3938bfcf432524da65d7e2cd4b0516bd40", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523360429, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b5c27e4ce0c7fcf76afd73e66659e80e36ff57eb", "parents": ["a4ea6e4cef8b99e4c14eaa445b28ffeeefb71d19"], "commit": "ee23b8ba40b8e01e2706f9b0970867b7b0c38c2d", "message": "## Origami inspired prototyping\n\n* TOC\n{: toc }\n\n### Origami\n\nOver the last week, I've fallen smitten for Facebook's Origami prototyping tool, which was originally built on top of Apple's Quartz Composer, but is now a standalone Mac app. It suprised me because I don't usually expect much from node-and-wire coding environments. I think the main feature that got me is that you can see the live-updating intermediate values of all computations. It's amazing. It makes looking at static code unbearable. Additionally: there's no run button - it's hot-realoading. And they have a great way to add nodes (they call them \"patches\") via the keyboard.\n\n### Node-and-wire prototyping\n\nThis morning, I had the idea of prototyping the Origami UI in Woof. I had a fun few hours doing it: http://woofjs.com/create#origami\n\nI had to come up with techniques for managing lots of things I'd never had to do before in Woof, mostly around nested components and layout. Stuff that HTML and CSS does for you in annoying ways. Turns out it's pretty annoying to calculate widths and paddings manually too...\n\n### Thoughts on a new language...\n\nThe idea in my head is that you have a dependency graph of all the values. The trick, of course, is sequential evaluation and events. Mostly events.\n\n#### Pure expressions\n\nThese are simple. They should always have live-updated values.\n\nThey are normally things you'd want nested internally (which is a common complaint of node-and-wire tools), but when \"proccessing\" a thing, you want vertical or horizontal sequencing, such [as in Elm](http://elm-lang.org/docs/syntax#infix-operators).\n\n#### Sequential evaluation\n\nI think we can do away with it entirely. If you actually need it, you can model it explicitly as [I show in this demo](http://woofjs.com/create.html#animate-via-frames).\n\n#### Events\n\nCan we do without and just have reactive values? Clicks are reactive list of all clicks, and you can get last one and check timestamp a la http://futureofcoding.org/prototypes/streamsheets/.\n\nPotentially, this will be too conceptually difficult, for the same reaons it was to do [CycleJS Flappy Bird without centralized state](https://gist.github.com/stevekrouse/85f350eb82ebbf5b2c244aa9aeffc453) and we'll need a reducer. But maybe nested state via statecharts could save the day.\n\n### Follow up questions\n\n1 - What do I not like about cyclejs and elm (and what's the difference again)?\n\n1a - Is the main reason that it's terrible to code in streams and elm, and thus streamsheets?\n\n1a1 - Idea to make cycle better: swap it: make value be values and have a history function that gets the stream on it?\n\n2 - Is the main difference explicit modeling of time and explictly listing all state?\n\n2a - We don't really need explicitly listing state, just reactively defined\n\n2a1 - What is reactively defined state? wont it eventually bleed into everything depends on everything else and we're back where we started? in other words, the reducer thingy seems stinky for some reason ... it's annoying to use, but making it easier to use just gets rid of the benefits of using it\n\n2a2 - Can we make a calculus for how we want this to work to simplify things? Such as what I was trying to do with [Reactive Woof](http://futureofcoding.org/journal#reactive-woofjs) ... Or is this a cyclejs data structure?\n\n3 - How to statecharts keep track of state...? .. go to Ian's book\n\n3a - Can you do statecharts without events?\n\n4 - Difference between hot and cold streams?\n\n5 - At the end of the day, can we really realize my perception of Anre's vision in [this article](https://staltz.com/unidirectional-user-interface-architectures.html) that all things contain all the ways to modify that thing? Or is it impossible because we want to branch in too many ways in our code, not sequentially, but just with nested cases? Would it at all be possible to define things in one place only? Or would that just hurt our brains even if we could do it?", "changes": []}, {"committer": {"date": 1523027723, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b5c27e4ce0c7fcf76afd73e66659e80e36ff57eb", "parents": ["6dd7f2f2bdace79bb7bcb0f40f5c05544255bdee"], "commit": "a4ea6e4cef8b99e4c14eaa445b28ffeeefb71d19", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1523026633, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["56dd10a5b1db430d3cc9e459ea4007f95cb601e9"], "commit": "6dd7f2f2bdace79bb7bcb0f40f5c05544255bdee", "message": "## Thoughts\n\n### Eve Success\n\nI was a little surprised to see my Eve project stay on the front page for basically a whole day! It got 150 points on HN and up to #6. I got over 10k people on the page, and around 500 on my website homepage. However, I didn't really get anything material out of this experiment.\n\nIt does pass my \"do they spend more time on it then you do test\", because I only spend 10-ish hours here, and even if the average time on the page was 1 minute, that's over 100 hours of time they spent on it.\n\n### Offline morning\n\nThis morning I decided to work with my notebook for 2 hours offline, thinking about other projects to work on. I got a bit excited about a WoofJS refactor plan, but ultimately was most excited about an FRP Scratch tool that is similar to Facebook's Origami (which is based on Apple's Quartz Composer) in that you can see all the intermediate values flowing through, immediate updates, etc.\n\n### Unproductive afternoon\n\nAfter lunch, I was lazy and watched a few hours of TV. Then I got myself on my computer to look at my Cycle and Elm Flappy Birds for inspiration. I was quite fustrated with how awful coding in Cycle and Elm is compared to Facebook Origami, and also a bit inspired by that, too. However, I feel lazy today, so I'll have to pick up on this thread later.\n\n### Thoughts for next week\n\n* Scratch FRP prototyping\n* how do Facebook's Origami, CycleJS devtools, and statecharts somehow fit together?\n* WoofJS refactor plan (start with docs and a build tool)", "changes": []}, {"committer": {"date": 1522767413, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1522767413, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["3b947b24caf12a543390bfc26dc061377f902227", "46271a0cfc47ff407a1e11b920aaad8aeedd4692"], "commit": "56dd10a5b1db430d3cc9e459ea4007f95cb601e9", "message": "Merge pull request #78 from bzg/master\n\nFix typo in link", "changes": []}, {"committer": {"date": 1522714021, "timezone": "+0200", "name": "Bastien", "email": "bzg@gnu.org"}, "author": {"date": 1522714021, "timezone": "+0200", "name": "Bastien", "email": "bzg@gnu.org"}, "tree": "c74014f09a31277f31f1f459ec9ef0cb44fdfdbf", "parents": ["3b947b24caf12a543390bfc26dc061377f902227"], "commit": "46271a0cfc47ff407a1e11b920aaad8aeedd4692", "message": "Fix typo in link", "changes": [[2, 2, "essays/eve/index.html"]]}, {"committer": {"date": 1522711480, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1522711480, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bf0a03963cfc780863ed8ca496c2653598d85eba", "parents": ["491936a80659bf1db7318755e756c81158692f22"], "commit": "3b947b24caf12a543390bfc26dc061377f902227", "message": "added credits, oops!", "changes": [[1, 1, "essays/eve/index.html"]]}, {"committer": {"date": 1522690586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d7f030aca6899ee26ade21256615ade21ae3c6d9", "parents": ["b2b5658d73dfde129e1688f5d6d769e8d403e867"], "commit": "491936a80659bf1db7318755e756c81158692f22", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522690582, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3b3a2b93d4ec04c1fe39f91abb9d47fc2a5a32e6", "parents": ["4670d274ca888eabdcc5b6ba5f79c763e9e88b43"], "commit": "b2b5658d73dfde129e1688f5d6d769e8d403e867", "message": "finished eve tribute", "changes": [["-", "-", "essays/eve/direct-manipulation-editor.png"], ["-", "-", "essays/eve/favicon.png"], ["-", "-", "essays/eve/grid-eve.gif"], [91, 34, "essays/eve/index.html"], ["-", "-", "essays/eve/v0.4-performance.gif"]]}, {"committer": {"date": 1522664927, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3da15b70c5cf7a8e84066597c9ea56ab092ca8ad", "parents": ["b3d990d2d1f8c8214e6ae81ad9713d9a5985106a"], "commit": "4670d274ca888eabdcc5b6ba5f79c763e9e88b43", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522664616, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "763721bb828bdd2da008d2594d26a1ea260b358f", "parents": ["f5af264c454a0c2421dd670fc69e582b0ade72c4"], "commit": "b3d990d2d1f8c8214e6ae81ad9713d9a5985106a", "message": "## Continuing Eve tribute\n\nApparently, shooting for quantity over quality leads to better quality, so I've decided to complete a small project: the tribute to eve I started last month. Today I finished adding all of the images, videos and links to the page.\n\nWhat remains:\n\n* I need to decide if I should include the other links somewhere in the page, including other dev diaries, other Chris blogs, or Chris's other videos.\n* The story to the page. If it's a \"thanks for your hard work\" or more of just an archieve, etc.\n* Better CSS to make it sexy. Potentially, I'll want a better timeline-y format where the dates are given higher visual priority than they are now.\n\nIt'd be neat if I could get this out in the next few days, maybe on HN, Twitter (send a note to the Eve guys), and reddit on the approriate thread.", "changes": [["-", "-", "essays/eve/FiveSquare.png"], ["-", "-", "essays/eve/card-wiki.png"], ["-", "-", "essays/eve/direct-manipulation-editor.png"], ["-", "-", "essays/eve/eve-v-1.gif"], ["-", "-", "essays/eve/eve-v-2.png"], ["-", "-", "essays/eve/excel-eve.png"], ["-", "-", "essays/eve/first-syntax.png"], ["-", "-", "essays/eve/grid-eve.gif"], [73, 10, "essays/eve/index.html"], ["-", "-", "essays/eve/madlibs-notebook.png"], ["-", "-", "essays/eve/markdown-eve.gif"], ["-", "-", "essays/eve/repl-v-1.png"], ["-", "-", "essays/eve/repl-v-2.png"], ["-", "-", "essays/eve/smalltalk-eve.gif"], ["-", "-", "essays/eve/table-eve.png"], ["-", "-", "essays/eve/v0.4-performance.gif"], ["-", "-", "essays/eve/when-do-madlibs.png"], ["-", "-", "essays/eve/wiki-eve.png"], ["-", "-", "essays/eve/wiki-grid.gif"]]}, {"committer": {"date": 1522067083, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1e671a4728199394a6956db7e8e99a502ac6ea4c", "parents": ["54af515f3b34fe7e82280a5c990b74a609cc96cd"], "commit": "f5af264c454a0c2421dd670fc69e582b0ade72c4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "66e4ebfefe98dcd2d57e2c3a02b9baf4d3c3cc9e", "parents": ["3b30c67660a12c36f641750dfadd2bc5d2e908ce"], "commit": "54af515f3b34fe7e82280a5c990b74a609cc96cd", "message": "## Few resources for understanding Nile\n\n\nIn the \"Linked representations\" section of [Bret's Thinking the Unthinkable talk](http://worrydream.com/MediaForThinkingTheUnthinkable/), he has a video of a tool he built to understand Nile. You can find these links:\n\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_beziers.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_points.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_reals.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_shape.html\n* https://cdn.rawgit.com/damelang/nile/master/viz/NileViewer/demo_test.html\n\nI learned a bit about beziers, as well as more about OMeta and Ohm which was useful. Mostly looking through Viewpoints stuff just made me feel overwhelmed, out of my depth, and sad.\n\n### Struggling to settle on work...\n\nMight move on to Dark work this afternoon, or possibly return to my statecharts rabbit hole. Another slightly tempting project is the Eve tribute, in that there's a clear end in sight for it, and people might actually find value in it...", "changes": [[26, 0, "notes/kill-html-css.md"]]}, {"committer": {"date": 1522065903, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "09d7d0c02ee777a70a6d12d2436c933f290e6a73", "parents": ["595e13399ab9fec4e5c5b067c9b3dfb5cc28f433"], "commit": "3b30c67660a12c36f641750dfadd2bc5d2e908ce", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522065900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "122e93512b02f17c04f49b1edc75a85aebe3f3b6", "parents": ["54f98e6dc27c9c4cf779578749c815d647c3b541"], "commit": "595e13399ab9fec4e5c5b067c9b3dfb5cc28f433", "message": "removed old file", "changes": [[0, 231, "essays/eve.html"]]}, {"committer": {"date": 1522063531, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f5388c0e72cc7663b7e62482b2acf644e531892", "parents": ["d8b706f04d195e07a525a6034b99fa06e07fbe54"], "commit": "54f98e6dc27c9c4cf779578749c815d647c3b541", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1522063060, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c60423150974f297e5b3fa205da0ae06b56daefa", "parents": ["9a7a1002ff509d5d188052dfb6ab3fc214800690"], "commit": "d8b706f04d195e07a525a6034b99fa06e07fbe54", "message": "## Next steps\n\n* TOC\n{: toc }\n\nI'm excited to get to work today, but also a bit anxious about picking something interesting and worthwhile to work on. Some thoughts:\n\n### Time-box a project\n\nThe idea here is to pick a well-scoped project, so that I can finish it in the next few weeks and publish something that would hopefully be suitable for Hackernews. An example here would be my [tribute to eve](./essays/eve).\n\n### Continue down the statecharts rabbit hole\n\nI still have [a few more resources remaing from my jump down this rabbit hole last week](http://futureofcoding.org/log#what-remains).\n\n### Zoom out and pick up past research or projects\n\nCycleJS, Fran, Streamsheets, FRP for Scratch/Woof, Morphic etc.\n\nIn re-reading my [plan](./plan), I came upon something I've wanted to do for a while now: struggle to understand STEP's Nile. Let's get that a shot...", "changes": []}, {"committer": {"date": 1521744522, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c60423150974f297e5b3fa205da0ae06b56daefa", "parents": ["99a64cbf526adf3fe56f73bb0863d8f96a810a12"], "commit": "9a7a1002ff509d5d188052dfb6ab3fc214800690", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521744503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "804571d77276783eb0669badd6fbc9158d1cb407", "parents": ["ff4326f5d391ff18cf50fb7c2842fc2e0f2aec28"], "commit": "99a64cbf526adf3fe56f73bb0863d8f96a810a12", "message": "## 3/22/18 scattered notes\n\n* TOC\n{: toc }\n\n### What I read/watched today\n\nI got a reply from Kevin Lyangh which first sent me to [this video on statecharts](https://keminglabs.com/talks/#yow2015)\n\nThen to I stumbled onto a few David Nolan talks, which I thought were interesting mainly because they referenced \"Two Cultures of the Scientific Revolution\" (which I recently read and didn't think much of), as well as Out of the Tarpit (which I also recently re-read and enjoyed).\n\nI then got pulled into [Rich Hickey's Value of Values](https://www.youtube.com/watch?v=-6BsiVyC1kM) which provided some good counter-arguments to my [thoughts about specificity](./notes/kill-primitives). Echoing what I just heard from David Nolan, he mentions that we almost always choose bad abstractions and that they often get too much in the way. This point really stuck with me, because abstractions and math seem so elegant, yet maybe their overapplication, like with class inheritance in Java, is what gets us into trouble. On the other hand, simple primitives are portable and easy to understand.\n\nThen I read almost all of the articles on The world of statecharts, read most of the threads in the chat.\n\nRosmaro (and medium posts)\n\nhttps://sverweij.gitlab.io/state-machine-cat/\n\nI also read the first few chapters of [Ian Horrock's Constructing the User Interface with Statecharts](./media/Constructing the User Interface with Statecharts Ian Horrocks.pdf).\n\nI also took [some silly notes on how I'm beginning to view much of the \"evil\" in programming due to historical accidents that have remained with us long past their usefulness](./notes/historical-accidents). (Side note: I think it's probably fruitless to look for \"the root of all evil\" in programming, be it historical accidents today or primitives yesterday. There are two ways to replace this persuit: 1. Be more explicit about trade-offs, and the contexts under which you'd choose between alternatives, and 2. Look for a positive philosophy of what programming is, almost in the John Dewey sense.)\n\n### What remains\n\n* Finish reading [Ian Horrock's Constructing the User Interface with Statecharts](./media/Constructing the User Interface with Statecharts Ian Horrocks.pdf) after page 49.\n* Read [xstate's docs](http://davidkpiano.github.io/xstate/docs/#/) and maybe bulid something in it\n* Read the final two pieces of The World of Statecharts that I haven't read yet: [one](https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html) and two](https://statecharts.github.io/how-to-use-statecharts.html)\n*\n(read more about rosmaro guy's no if and no boolean, as well as the anti-if campaign)\n* maybe post to [the statecharts chat](https://spectrum.chat/statecharts/general)\n* read [this research paper about statechart UI building](http://phrogz.net/developing-user-interfaces-using-scxml-statecharts)\n\n### Yearning for real-world problems\n\nAfter watching all of these videos, I was left with a sense of blah. What do I do with all of these thoughts? Is this method or that method better? Under which circumstances? My thinking became so divorced from any concrete problems that I felt impossible to compare the trade-offs between alternatives.\n\nAnd so I had an idea: what if I use coding on WoofJS as a way to explore many of these ideas. More specifically, what if I use refactoring WoofJS to explore some of these ideas?\n\nThe tantilizing idea would be to start small, maybe just one boolean flag, or one function, and slowly refactor the app back to some sort of sanity. Of course, we still are left with the problem of determining what is sane and what is insane. I don't want to simply move WoofJS from VueJS to some new platform, like CycleJS or Elm or xstate, and just have similar-ish problems but in a new framework. That's a very expensive way to try out a framework.\n\nYet on the other hand, I fear that re-building simple apps, like a button that counts how many times it's been clicked, or even ToDo MVC will not expose me to the truly intricate and sticky problems that would expose whether an approach is good, and also motivate alternative approaches to solving such real-world problems.\n\nA relevant thought here is to bring in Alan Kay's advice to Samantha John: make a list of a few complex applications you want to be able to create in a framework to test and motivate its generality. This is reasonable advice. Some that come to mind:\n\n* [ToDo MVC](http://todomvc.com/)\n* [RealWorld](https://github.com/gothinkster/realworld)\n* Basic scratch games (http://coding.space/scratch)\n* Basic JS apps (http://coding.space/web)\n* Agar.io\n* Candy Crush (Sam John's idea)", "changes": [[34, 0, "notes/historical-accidents.md"]]}, {"committer": {"date": 1521741643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521741643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "409e6e474b7307c12a343b2c45d14175d0570ccd", "parents": ["3dd4d893d419b5055119801b8c04a031b2d3a7ae", "ae6ab380e50942dc20ab501d1da5ba4ca017d575"], "commit": "ff4326f5d391ff18cf50fb7c2842fc2e0f2aec28", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1521735090, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1521735090, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0e5ff3e152699d629fbb7f47d914064d2082bfaf", "parents": ["a4e9b56b22b5de360361418d306653f35dcb98af"], "commit": "ae6ab380e50942dc20ab501d1da5ba4ca017d575", "message": "added Constructing UI With Statecharts by Horrocks", "changes": []}, {"committer": {"date": 1521661896, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "409e6e474b7307c12a343b2c45d14175d0570ccd", "parents": ["cbc906cec5051c366a2fcacef25ac5195c0440a2"], "commit": "3dd4d893d419b5055119801b8c04a031b2d3a7ae", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521661664, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2fb68e2df41f6c0af5c716ad93e80e84565be1b2", "parents": ["a4e9b56b22b5de360361418d306653f35dcb98af"], "commit": "cbc906cec5051c366a2fcacef25ac5195c0440a2", "message": "## Fun, fustrating, little progress on killing primitives\n\nPart of the problem doing work on the computer is that I'm too plugged in. Whenever I get stuck in my thinking, it's almost too easy to google around for related work. There are many benefits for struggling through the problem myself, not least of which is that it's quite fun -- I did it last week via pencil and paper and it was a blast.\n\nToday was 6 hours of FoC work. 0 hours of Dark work. Very productive! Tomorrow maybe I'll do 1.5-3.5 hours of Dark work, and then 3ish hours of work here. In particular, I'm excited to explore xstate, statecharts, David Piano, and maybe email him to invite to chat on the podcast.", "changes": [[115, 0, "notes/kill-primitives.md"]]}, {"committer": {"date": 1521656831, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0e5ff3e152699d629fbb7f47d914064d2082bfaf", "parents": ["6a788946d8483fdb93c2fc923bc442274368fbaa"], "commit": "a4e9b56b22b5de360361418d306653f35dcb98af", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521656590, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c140c6a5131dd55958171e3f75a3b3faf835bc65", "parents": ["e6fbb5d630d20b246bcaf713af23fe86a0794f98"], "commit": "6a788946d8483fdb93c2fc923bc442274368fbaa", "message": "## 6th plan\n\nSpent a few hours this afternoon thinking about this project from a meta level. Wasn't so much fun, nor particularly productive, but I did get some things off my chest I think.\n\nOn the one hand, I want to spend less time thinking about the work I'm doing, and just do the work. On the other hand, if I just let myself get pulled in interesting directions, I end up falling into internet holes, like I did this morning, and then feel unproductive. Hard to find a balance here. One thought is to set up time-boxes for free-flowing thought vs thought about a specific topic vs building time, etc. Potentially I could do it without a computer or without wifi to focus.\n\nI am going to spend the next hour or so actually doing the work that I'm curious about: primitives (booleans, ints) too generic and lead to overloading, etc, etc.", "changes": [[62, 49, "plan.md"]]}, {"committer": {"date": 1521634686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "398a135577cb15528c77b6fed0e19e51f364b93a", "parents": ["a7136894329649b83925aff279d636120d1a2336"], "commit": "e6fbb5d630d20b246bcaf713af23fe86a0794f98", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521634358, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5ef70c69cc22b4bbdb3b589f5304326234735158", "parents": ["b0bf24c0cd3e415623667578d94b3c6fc5366261"], "commit": "a7136894329649b83925aff279d636120d1a2336", "message": "## Interface design research\n\n* TOC\n{: toc }\n\n### Pure UI\n\nI picked up today where I left off yesterday, reading about Pure UI and Pure UI control. Excited to continue exploring this way of thinking, and statecharts, David Piano, etc, here: [https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n](https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n)\n\n### Kevin Lynagh\n\nI then clicked on Kevin Lynagh's name in the Pure UI Control essay and fell into a hole about him and Subform, [some notes here](./notes/kevin-lynagh).\n\nExcited to reach out to him for the podcast. Ditto with Adam Solove. Will reach out now...", "changes": [[34, 0, "notes/kevin-lynagh.md"]]}, {"committer": {"date": 1521574326, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "49722e0524bcf027711b85361f059287664c69c2", "parents": ["87eb3e561d02558aa9e657e376eeef3fb99b0de3"], "commit": "b0bf24c0cd3e415623667578d94b3c6fc5366261", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521573817, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["2b6872a0f80afca2e892f2d1f0f6fd83da528d17"], "commit": "87eb3e561d02558aa9e657e376eeef3fb99b0de3", "message": "## Twitter research\n\n* TOC\n{: toc }\n\n### Inviting people to the podcast\n\nI looked at [this list](https://github.com/stevekrouse/futureofcoding.org/issues/18) of potential guests, invited my friend Nicolae Russan as well as his friend Simon last to the podcast, and reached out to Brent Yorgey as well.\n\nI really enjoyed reading [Brent's slides](http://ozark.hendrix.edu/~yorgey/pub/explaining-errors-slides.pdf) on Explaining Type Errors through an interactive interface where you click on a series of questions. However, it did make me recall Bret Victor's \"interaction considered harmful\" point, and I wonder if there are ways to build a context-sensitive graphic for explaining type errors without any interaction nor a block of text. Maybe with colors? Maybe with shapes? Definitely in the context of where the error is occuring, and not in the console.\n\n### xstate\n\nI then took to [my Twitter list](https://twitter.com/stevekrouse/lists/future-of-coding) for more inspiration, where I stumbled upon [xstate](https://github.com/davidkpiano/xstate), which seems quite similar to CycleJS, particularly now that they can generate state diagrams from your code. I'm quite excited to read:\n\n* https://rauchg.com/2015/pure-ui\n* https://medium.com/@asolove/pure-ui-control-ac8d1be97a8d\n* https://statecharts.github.io/use-case-statecharts-in-user-interfaces.html\n\nI also stumbled across this neat tool. \"Dynamic layout meets direct manipulation.\": https://subformapp.com/\n\nGoodness! There are so many people building cool things in this space. It's difficult to find a balance between research and novel work.", "changes": []}, {"committer": {"date": 1521571919, "timezone": "+0000", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1521571919, "timezone": "+0000", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["28ab6280a32c6a13ad58fb83ebbeddc4aa5ef8b4"], "commit": "2b6872a0f80afca2e892f2d1f0f6fd83da528d17", "message": "added paper jonathan edwards recommended", "changes": []}, {"committer": {"date": 1521484921, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0b2960ffa010cb555e4bb06a4a09f113e796961", "parents": ["d43f86280d9f377f05f6c43777d4481cfa0c0e78"], "commit": "28ab6280a32c6a13ad58fb83ebbeddc4aa5ef8b4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521483379, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e103f102d76ec4272c3bd0e47403eb029501671", "parents": ["54072dd320783232c513580bd12cd351042b1600"], "commit": "d43f86280d9f377f05f6c43777d4481cfa0c0e78", "message": "## Newfound excitement\n\n* TOC\n{: toc }\n\n### Direction lost\n\nAfter my visit to Dynamicland at the end of Jan 2018, I [decided to pause this project](http://futureofcoding.org/log#journal-break). I think there are a few reasons I lost direction here:\n\n1. I saw a lot of really smart people that I look up to have a hard time in this space (Bret, Alan, Chris Granger)\n2. I felt that my chances of success were dim\n3. I found it difficult to explain what I was doing to friends, family and strangers at parties\n4. I lost track of who or for what use-case I was doing this work\n\nSo I started looking for full time work as an engineer. Got a job offer. Turned it down. Then found some part-time work...\n\n### Dark (Paul and Ellen's new startup)\n\nPaul Biggar (of CircleCi) has started a new company with Ellen Chisa. They reached out to hire me to do some consulting work for them part time, like 5-10 hours per week. It's actually been amazing, potentially exactly what I needed to get re-invigorated here. I started working with them in early Feb, doing analysis of developer companies, like Eve or Luna. Would love to get some of this work on here in a productive way.\n\nIt's actually been really heartening doing this analysis. I am beginning to see how companies like Eve made mistakes that I could avoid, such as spending years iterating on visual programming interfaces or overly optimizing for beginners right off the bat.\n\n### Fuck the learning curve\n\nIn other words, I am finally beginning to come around to Paul Chuisano's view that learning a new system is a one-time cost. Of course we want to onboard users as fast as possible but it's not the most important thing to get right on day 1, and it's definitely not the thing to optimize for. Instead, let's fuck the learning curve and optimze for the producitivity in the medium-term. (We can always build a better interface later, maybe even a syntax-less one, but text is great for iterating quickly.)\n\n### Working on Woof\n\nHowever, probably the thing that has got me most excited about returning to this project is [the work I did on Woof last week](https://github.com/stevekrouse/WoofJS/commit/04a7ce1e3e371957d4304a049e96dc8a6818bc59). It took me ~6 hours and was mostly super fustrating, but also fun and addicting, like a video game. It reminded me how much I both love and hate programming, and hinted at how amazing it could be with the right abstractions.\n\n### Overloading\n\nA few weeks back, r0ml was kind enough to give me a guided tour of both APL and Squeak Smalltalk. Both were incredibly fascinating and inspiring!\n\nWhile the APL overloading and concise mentality is admirable in some respects, I also wonder if it could be the root cause of much evil. The thought goes something like this: if you use the same concepts for multiple different contexts, you end up artifically boxing yourself in unneccesarily. Instead if you could be more specific about the \"shape\" of your app, and all possible *semantic* states it could get it, you could more purely represent your app as a system of relationships, and then understanding and extending it would be greatly simplified.\n\nThis builds upon my ideas of the past such as \"booleans are too generic,\" to include such ideas as \"integers are too generic.\"\n\n![overloading](https://user-images.githubusercontent.com/2288939/37614064-9828a254-2ba1-11e8-899f-59385ade596d.jpg)\n\n\n### Thoughts about where to spend time\n\nI think I need a new framework for this work. I made a list of the type of activities that I do here:\n\n![time](https://user-images.githubusercontent.com/2288939/37614063-980234f2-2ba1-11e8-9470-196128b4c73c.jpg)\n\nI wonder if it would be better if I structured my work around publishing stuff and trying to get views or upvotes on HN. I like it because of the social proof and it would feel good, but I am worried it's too much click-bait-y and focusing too much getting attention.\n\nAnother thought is to focus my attention on a really small problem that I think I can solve well.\n\nAnother thought is to find a mentor or some structure in the context of other people.\n\nAnother thought that gives me solace is that this stuff is really deep and complicated and the key is optimzing for long term productivity and excitement, so I need to find a structure that lets me have fun here for a while, while staying productive...\n\n#### Throw out HTML, CSS\n\nAnd a final thought is to pick a big ambitious project to spend most of my time on. One idea that I keep returning to is \"throwing out the DOM (HTML, CSS) and starting over on the canvas,\" including building input boxes, etc, from scratch. This project is quite similar to Morphic (more specifically, morphicJS) so I'd start with research there, and try to find other attempts at this vision. Potentially, the canvas is not the right compile target and something more modern or cross-platform would be better, like openGL.\n\nI really admire Elm (and Fran, but need more research here). Also Brent's Diagrams is interesting for inspiration. The dream would be a very mathmatical language, one in which centering stuff, laying it out, would be super simple. Ditto for animation. All maths and relationsihps. All very pure. And cross platform is by default because so abstract. And reactive by default because canvas is immediate mode already. Also, it will be \"turtles all the way down,\" like Smalltalk, in that there's no browser magic elements, like . Everything is hackable. Don't just change the CSS: change the actual thing or whatever.", "changes": []}, {"committer": {"date": 1521481529, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e103f102d76ec4272c3bd0e47403eb029501671", "parents": ["027ff390975786e283d47579757f7e7c67d0cab5"], "commit": "54072dd320783232c513580bd12cd351042b1600", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1521481492, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5422b40475938385b9d29bf78ffb2deb4c922138", "parents": ["357b8c1b62c0fa0a750acfab44ff20d64701d669"], "commit": "027ff390975786e283d47579757f7e7c67d0cab5", "message": "## Started Eve Tribute\n\n(I acutally did this work a few weeks ago and forgot to commit.)", "changes": [[231, 0, "essays/eve.html"], [167, 0, "essays/eve/index.html"], ["-", "-", "essays/eve/media/FiveSquare.png"], ["-", "-", "essays/eve/media/aurora.png"], ["-", "-", "essays/eve/media/card-wiki.png"], ["-", "-", "essays/eve/media/excel-eve.png"], ["-", "-", "essays/eve/media/first-syntax.png"], ["-", "-", "essays/eve/media/first-ui-editor.png"], ["-", "-", "essays/eve/media/grid-eve.gif"], ["-", "-", "essays/eve/media/madlibs-notebook.png"], ["-", "-", "essays/eve/media/markdown-eve.gif"], ["-", "-", "essays/eve/media/table-eve.png"], ["-", "-", "essays/eve/media/when-do-madlibs.png"], ["-", "-", "essays/eve/media/wiki-eve.png"]]}, {"committer": {"date": 1517519283, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fe16d2df067357cbb424ebbf27936c114c4d2e14", "parents": ["3a0300d8930603a7bcf4af1cd07ad4061d872f5a"], "commit": "357b8c1b62c0fa0a750acfab44ff20d64701d669", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1517519280, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0bc8c84a128478472441bf7b5b996497cafc16e2", "parents": ["be36800d08f58cba436654db5fd4da6c02b778b3"], "commit": "3a0300d8930603a7bcf4af1cd07ad4061d872f5a", "message": "added ep 21, aidan cunniffe", "changes": [[27, 0, "episodes/21.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1516728432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "698c1f4b51a9446334c6683260d50792d3bb861b", "parents": ["f5d8ca01b87c68fffe5f33b38448b206ba79eb8b"], "commit": "be36800d08f58cba436654db5fd4da6c02b778b3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516728430, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "951f3b6035ca3c35730daa27f5153b3892e7835a", "parents": ["633a40e0db568087dcd22da8dbae7b0b4757cdc2"], "commit": "f5d8ca01b87c68fffe5f33b38448b206ba79eb8b", "message": "add dynamicland recap", "changes": [[44, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516662048, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "87c20b46bb871043662d7e78fe1fa584f117c62e", "parents": ["8bf6053280b3e0fd3a1f641663dd3e91965f4012"], "commit": "633a40e0db568087dcd22da8dbae7b0b4757cdc2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516661642, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b0fe224cd746d7c1fe06c2befe48b8c785b7bd2", "parents": ["d1e4f714331ca1aaea604f6abc58f35a7ffdb236"], "commit": "8bf6053280b3e0fd3a1f641663dd3e91965f4012", "message": "## Journal break\n\nGiven how Bret Victor is the main inspiration for this project, it was really really fascinating to spend so much time around him last week. One of the biggest things I took away was that \"improving programming\" is a difficult goal to shoot for directly. The biggest improvements to programming happened when someone from a different field were shooting towards a bigger, more abstract goal. They also never came from young people. I'm going to have to think through how these new ideas influence this project. Potentially I will put it on pause for a while.\n\n## Interviews tomorrow\n\nI haven't done any interviews this year, but I hope to rectify this with two interviews tomorrow. I'll release one either late this week or early next week, and the other either late next week or early the following week.", "changes": []}, {"committer": {"date": 1516421982, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b0fe224cd746d7c1fe06c2befe48b8c785b7bd2", "parents": ["500ce8b8e04e9519b013dcac56ec98b04378184b"], "commit": "d1e4f714331ca1aaea604f6abc58f35a7ffdb236", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421980, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "268eaf5c8fd55c0bc58872bea28f8a19618b04e0", "parents": ["d6903da0a7b984da34a02b278d0bcf2d7ecce14d"], "commit": "500ce8b8e04e9519b013dcac56ec98b04378184b", "message": "don't forget to tweet videos", "changes": [[1, 1, "_data/git-log.json"], [1, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516421868, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "58b36eebc6d9ec44d9305fc240d58dbe3b163cf3", "parents": ["6699e07022b5537656ff80db84ad7c0d7ec7ee5c"], "commit": "d6903da0a7b984da34a02b278d0bcf2d7ecce14d", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516421865, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39fade38eb6790621352c24756f63f9b8c563413", "parents": ["07d7248d79178022619509b38f1489f4942c0a72"], "commit": "6699e07022b5537656ff80db84ad7c0d7ec7ee5c", "message": "dynamicland, day 5 recap", "changes": [[1, 1, "_data/git-log.json"], [29, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516391913, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c843c7800df713f3922c90a7af470df1cdbb82b", "parents": ["dfeef5708b29fc88b81ead052f1a8ce25c3a834d"], "commit": "07d7248d79178022619509b38f1489f4942c0a72", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516391911, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b8ad3f588dd30f48dd56de117085403a2243e216", "parents": ["bd09974abe246898ab9a9484dfe2b7f6bde5ab29"], "commit": "dfeef5708b29fc88b81ead052f1a8ce25c3a834d", "message": "dynamicland day 5 prep", "changes": [[1, 1, "_data/git-log.json"], [28, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516335676, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fa65863ffdce719ac8a89cd02ecbdf89c577196c", "parents": ["2625ce53e4f30ea4a5018f40d0b59380d6f9265d"], "commit": "bd09974abe246898ab9a9484dfe2b7f6bde5ab29", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516335673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "98abe6f6a36241445a31fe6c5076be5d8b2f6579", "parents": ["50e41fc33454c06f4b379f2e56ee2cf265f37d0a"], "commit": "2625ce53e4f30ea4a5018f40d0b59380d6f9265d", "message": "dynamicland, day 4", "changes": [[1, 1, "_data/git-log.json"], [39, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516240808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f37bb380995752031f935df550c25c71e0dfe41e", "parents": ["891cd71ae76e36356b7c920830c96646ed8b8b27"], "commit": "50e41fc33454c06f4b379f2e56ee2cf265f37d0a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516240805, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1c9fc2881f901d215dbc4de04885bf513bdffac3", "parents": ["e301304ab8bebc8ca97c0b1d7f03a9215a152f5a"], "commit": "891cd71ae76e36356b7c920830c96646ed8b8b27", "message": "dynamicland, day 3 recap", "changes": [[39, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516213389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c4f42c8cae6e4dc11a7fe58819e27ab39355f309", "parents": ["fece204a7a0dd48d5d71fef9b920d0d10c311b6a"], "commit": "e301304ab8bebc8ca97c0b1d7f03a9215a152f5a", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516213387, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a0a9a8011561566d1d17f338c37c04fdaf9a608c", "parents": ["1abdb2603f25c7a123627f9cc870212bfe95d91b"], "commit": "fece204a7a0dd48d5d71fef9b920d0d10c311b6a", "message": "day 2 recap; day 3 prep", "changes": [[27, 2, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516134296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9dd8bcafb2be2f88776ce3b930667b8cf8558161", "parents": ["cfc21446f90b736af7c0d2fd3212d888ac536040"], "commit": "1abdb2603f25c7a123627f9cc870212bfe95d91b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516134193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cd4ad8fbf4d20596c98da3d373c1a93629ccaf58", "parents": ["c982f944da30ef9562d53727da5719d89ac7f260"], "commit": "cfc21446f90b736af7c0d2fd3212d888ac536040", "message": "## reflection 11\n\nBoom - started and finished in an hour. If I reflect often enough, and don't try to be comprehensive about it, I think I can put up with this.", "changes": [[88, 0, "reflections/11.md"]]}, {"committer": {"date": 1516130705, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fd7b157c9cf521b71dba39bdf824b5e19ffb3d0c", "parents": ["70deb443f87cc4d2129667c0bc5cc3bf9136abbc"], "commit": "c982f944da30ef9562d53727da5719d89ac7f260", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130703, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "370b6a95f0d9b889f037262e8061e86240916700", "parents": ["a734c9db4f23c503bfbb31f54f3eb17df09faf00"], "commit": "70deb443f87cc4d2129667c0bc5cc3bf9136abbc", "message": "add link to live page", "changes": [[5, 3, "log.md"]]}, {"committer": {"date": 1516130688, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bdbcb1d38242fe75bf7b2adbf031bb40f605dd1c", "parents": ["da0821d9a2dbea650caf7b4aa6efcd8c16636652"], "commit": "a734c9db4f23c503bfbb31f54f3eb17df09faf00", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516130686, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8394e2539369ea112e2f70a019223aa508b0054e", "parents": ["e0e6dd87aa3e4a74715f105960f3effb365e1027"], "commit": "da0821d9a2dbea650caf7b4aa6efcd8c16636652", "message": "removed title jekyll typo", "changes": [[1, 1, "episodes/20.md"]]}, {"committer": {"date": 1516123175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9c9d764bec377635f07fa4e2a16b6eaa71b04086", "parents": ["3c6a9e7f9dd8beac4ecd6d54d1810e017c3c2ad7"], "commit": "e0e6dd87aa3e4a74715f105960f3effb365e1027", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516123173, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a6fc2aa64d8b5e1331ed7793514eb99a5055170", "parents": ["cc25cd723d449a29c6227c9408e63a81f700d0a8"], "commit": "3c6a9e7f9dd8beac4ecd6d54d1810e017c3c2ad7", "message": "prep for dynamicland, day 2", "changes": [[1, 1, "_data/git-log.json"], [69, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1516078274, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cb5d5056f2f9b4a85d58bbb8d05a78408d95469e", "parents": ["311452ac76363a63b81bc9ed798f4543d8aac547"], "commit": "cc25cd723d449a29c6227c9408e63a81f700d0a8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1516078271, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3ba72c147a36a300c79e7303d1aa49b2ff5444d4", "parents": ["1275618ef04ff41d5bf7e758f0d0b56a79f87643"], "commit": "311452ac76363a63b81bc9ed798f4543d8aac547", "message": "Dyanmicland visit, day 1", "changes": [[1, 1, "_data/git-log.json"], [47, 0, "notes/bret-victor/dynamicland.md"]]}, {"committer": {"date": 1515801319, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fedb4fdb66eabfd616911e314e74e716843682fd", "parents": ["cdb26d0592f615ae760416bb451233568b7d11a9"], "commit": "1275618ef04ff41d5bf7e758f0d0b56a79f87643", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515801311, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "46b48d59343ec50bd54f55c0349406c6f7030c82", "parents": ["94febe1a8150c6ec54cb18909a26d60db9b4867e"], "commit": "cdb26d0592f615ae760416bb451233568b7d11a9", "message": "## Rushed BV deep dive\n\n### Quick progress\n\nQuick & dirty progress with little to no note taking was made today on a number of BV things:\n\n* Media for Thinking the Unthinkable\n* The Future of Programming\n* Seeing Spaces\n* RESEARCH AGENDA AND FORMER FLOOR PLAN\n* The Humane Representation of Thought\n\nAs well as a few selected references that he linked to from those (or the notes for those), but you'll have to see my notes in this commit for all that jazz.\n\n### Remaining things\n\nThought I didn't get to them today, I think it would be useful to me to read both Bret's _2013 links_ and _What a technologist can do about climate change_ before I show up at Dynamicland. I have plenty of time for both of these things before Monday at 1pm PST, but it's also not a tragedy if I don't get to them.\n\nAs far as my BV deep dive goes, I'd say that it's as done, if not more done, than the deep dive I did into Alan Kay. There's more to be looked at for both men, for Alan there are many videos, and for Bret, there are past websites, projects, and journal entries. But I suspect that after next week, I will feel content in my knowledge of Bret Victor for now, and would be more happy spending time with his sources, than with him directly. And of course, re-reading and re-watching is always useful so I can always comes back to this if I need to.\n\n### Self-directed masters program\n\nOn a trip to the bathroom, I picked up Richard Rorty's _Philosophy and Social Hope_ and was blown away by the first few pages. He alluded to being able to dissolve [my current paradoxical thoughts on the distinction between inventtion vs discovery](/essays/invented-or-discovered). It feels like Rorty might do for Dewey what Deutch does for Popper.\n\nAnyways, I have a stack of books in front of me ranging from Piaget to McLuhan to Raskin to Vygotsky to Brooks to Rheingold to Minsky to Hofstader. And I have at least another dozen such books elsewhere that feel like essential reading for me to live a fufilled life. Thus had the thought to structure all of this reading and reflecting into an organized structure of some sort, which I am currently referring to as a \"self-directed masters program.\" Here are some of the tasks (unordered) that represent my current thinking of the next steps here if I choose to continue planning in this direction...\n\n* look into how other masters' programs, PhD programs, or other programs of study are organized, such as [Open Masters](https://www.openmasters.org/) and [Steph Jang's post](http://stephjang.com/blog/free-masters-program/)\n\n* think about the topics / questions / goals (in other words, why do this over getting a job or starting a company, or any other possible thing?)\n\n* will there be a thesis or end product, one or many?\n\n* mentorship?\n\n* physical location?\n\n* time\n\n* budgeting", "changes": [[1, 1, "_data/git-log.json"], [130, 4, "notes/bret-victor/index.md"], [2, 0, "notes/bret-victor/questions.md"]]}, {"committer": {"date": 1515780096, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "07406860a20a72557192780b0a6ac840fd9b9f26", "parents": ["88383172d451cc20d6df5751352e63a4fad8c175"], "commit": "94febe1a8150c6ec54cb18909a26d60db9b4867e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515779539, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eaab0b653df713af1adbde0c8eadcd878e1921b7", "parents": ["02c397d7d358656d3ffb1daa7336ba766b0b7ffe"], "commit": "88383172d451cc20d6df5751352e63a4fad8c175", "message": "## Plan for 01/12/18\n\n### _Media for Thinking the Unthinkable_\n\nI spent the morning watching _Media for Thinking the Unthinkable_, again without taking notes, but still making an effort to read sources, which in this case included [The Unreasonable Effectiveness of Mathematics](http://www.jstor.org/stable/2321982) and [An Ill-Advised Personal Note about \"Media for Thinking the Unthinkable\"](http://worrydream.com/MediaForThinkingTheUnthinkable/note.html), the ladder of which had a few wonderful gems, including:\n\n> Any concept, technique, or tool that is specific to software engineering is guaranteed to have a short shelf life, at least on any time scale that I personally care about. (Which is totally fine if you're into that, but this is my ill-advised personal note, not yours, and I personally care about mattering 100 years from now.)\n\nWow, that's fascinating. Makes me wonder about where this desire to attain a lasting legacy comes from.\n\n### Rest of today\n\nI'm going to take an the next hour for lunch and mayge get a haircut, so that puts me at 2pm, and then I have to leave for dinner at 7pm, so I have 5 hours for work. Given that this is my last real work day before visitng Dynamicland, I'd like to get through the following things:\n\n* finish the last ten pages of _Visual Display_\n* finish reading _No Silver Bullet_\n* finish my [BV deep dive](/notes/bret-victor), which includes:\n * The Future of Programming\n * RESEARCH AGENDA AND FORMER FLOOR PLAN\n * Humane Representation of Thought\n * What a technologist can do about climate change\n\nWill probably have to go much faster than usual to make it through. No problem.", "changes": []}, {"committer": {"date": 1515708602, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eaab0b653df713af1adbde0c8eadcd878e1921b7", "parents": ["69ec3c567fb38e04feaad7209cd76d36ab43890b"], "commit": "02c397d7d358656d3ffb1daa7336ba766b0b7ffe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515707262, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a90b26ed014021e2026e8985350d601d56eb144b", "parents": ["13e2f0088dc30f5e9033aa970a887bfa7a5d5683"], "commit": "69ec3c567fb38e04feaad7209cd76d36ab43890b", "message": "## Reading Tufte\n\n### _The Visual Display of Quantitative Information_\n\nToday I read 178 out of the 190 pages of Tufte's _Visual Display_. It was While I have recently been writing copious notes while I read, today I simply read without taking any notes, despite of course, this adorable note:\n\n

    My girlfriend's cat hates it when graphics get order but not magnitude right. He's a big @EdwardTufte fan pic.twitter.com/aSGoFp9CPk

    — Steven Krouse (@stevekrouse) January 11, 2018
    \n\n\nIt was interesting reading. When I turned the page and found the beginning of the next chapter, I would intend to take a break, but figured I might as well read first read the first few lines of the next chapter just out of curiosity. But then my curiosity would be so piqued that I'd find myself going chapters at a time without breaks. It was a good 4 hours of Tufte today.\n\nGiven that I don't have any immediate concrete, practical use for these skills, I'm not sure how useful it felt. As a study in where ideas come from, it was interesting to see many Bret Victor ideas I'm familiar with in their original context. For example, I recognized sparklines, a Tufte invention, from BV's work (although in a quick web search, I am unable to find an example of this...) This speaks to the question of pre-loading vs just-in-time learning. I feel like most of the value in my reading today will be in knowing where the answers to questions about data visualization will likely be found -- and that there are answers here at all -- rather than the actual rules or techniques that I read given that I am likely soon to forget them in the absence of applying them anytime soon.\n\n### Steve's Search for Meaning\n\nRecently I've been talking a lot about meaning, asking questions about the value of earning money, status anxiety, and company mission statements. Given that this is not the first time my brain has wadded its way into this territory, I am suspect that these concerns are \"real\" concerns, in that I don't actually care about the answers to these questions. I feel that it's much more likely that I am feeling unsettled for some external reasons (such as having less contact with people given all the reading I'm doing, or having less structure in my life), and am then looking for logical questions to focus my and others' attention on to explain away my unsettled internal state.\n\nWhen I shift my attention away from these questions, and back to my current plan of pickling myself in ideas, I feel much less anxiety: as long as I read a lot, and reflect on my reading, I'm following the plan. Another thing that abates my worries: the books and essays on my to-do list are first-class. In fact, it's difficult to find any to remove, and sometimes feels impossible to prioritize. My disquiet disappers entirely if I simply focus on enjoying the pinacle of pleasure that I have the luxury to enjoy by simply being allotted the time to dive into books that are interesting and potentially useful to me. That is, if I stop justifying, and simply enjoy.", "changes": []}, {"committer": {"date": 1515627432, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a90b26ed014021e2026e8985350d601d56eb144b", "parents": ["9d19d8baba86170ad8b8ddf98197f70afe25ad7e"], "commit": "13e2f0088dc30f5e9033aa970a887bfa7a5d5683", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515627317, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f1796306fe60f18d360331c57fa4d4bf63a0fa20", "parents": ["ced126d1bdc35bf85d932e6f345f86d210070e86"], "commit": "9d19d8baba86170ad8b8ddf98197f70afe25ad7e", "message": "## Good meetings and reading\n\n### Questioning the idea of crusade\n\nI've been doing a lot of questioning these days. Today I did my questioning with Omar Rizwan and my cofounder Eli. Maybe Bret's importing of the idea of \"cause\" from social activism into engineering isn't such a great idea? Maybe it's more fun and useful to solve problems for real people on their own terms - without having a bait-and-switch reason why.\n\n### Finishing Learnable Programming\n\nTechnically not 100% finished, given that I need to read all references, and I'm [not entirely done](/notes/no-silver-bullet) with No Silver Bullet.", "changes": [[1, 1, "_data/git-log.json"], [38, 1, "notes/bret-victor/learnable-programming.md"], [73, 0, "notes/no-silver-bullet.md"]]}, {"committer": {"date": 1515536900, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "af7da7f7997092b628542eee48192591fbe3da5b", "parents": ["54ac548ddf5f2ed1376fbd2ddfd2b7e53605b63d"], "commit": "ced126d1bdc35bf85d932e6f345f86d210070e86", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515536782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bc9bf2a48ef3065d3c765a6623169a2452ff34e0", "parents": ["017b67483cddfcc656c1b7ba3ae99beb26be04c4"], "commit": "54ac548ddf5f2ed1376fbd2ddfd2b7e53605b63d", "message": "## Big long day of BV deep dive\n\nStill making my way through Learnable Programming, making sure to read all of the footnotes and refernces, as well as fully articulate all of the relevant other thoughts I have while I read. This is probably too much writing, I'm beginning to realizing, but I am indeed almost done! With this one essay. Then there is much to do read and re-watch before heading out to Dynamicland.\n\nI also got my first Tufte book, the Visual Display, and would love to get partway into that at least as well.", "changes": [[1, 1, "_data/git-log.json"], [24, 3, "essays/customer-support.md"], [41, 0, "essays/regex-for-humans.md"], [127, 1, "notes/bret-victor/learnable-programming.md"], [23, 0, "notes/bret-victor/questions.md"]]}, {"committer": {"date": 1515276246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "807a3e45ddfa7367f1faf8cb26d2f460421a24dd", "parents": ["16f57287efc9e17bfa21ee829b6e98dec047d7e0"], "commit": "017b67483cddfcc656c1b7ba3ae99beb26be04c4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515276244, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6a95d45c7aeac43dd00853ca9ea8fefa02d294a9", "parents": ["8dfe71285e19a40034cf28aacbfce0cb65b52d06"], "commit": "16f57287efc9e17bfa21ee829b6e98dec047d7e0", "message": "more LP notes", "changes": [[28, 0, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1515256579, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "624db7c2cdbb1af65b7d91797078be947ba1c518", "parents": ["f235d11a785b542ce249936ce1e88eb055ac3906"], "commit": "8dfe71285e19a40034cf28aacbfce0cb65b52d06", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256577, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "50ef1c3e268bb41902fabcd028bb5fd434082954", "parents": ["56f0734828adb8e35849d317a2d6a88ac967a855"], "commit": "f235d11a785b542ce249936ce1e88eb055ac3906", "message": "add section about chat bots", "changes": [[1, 1, "_data/git-log.json"], [5, 1, "essays/customer-support.md"]]}, {"committer": {"date": 1515256315, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6d34aa14cce6bf119c53e6b85f40890ab39df828", "parents": ["ff27e1e0032dd75749716cfe820add9eb313d213"], "commit": "56f0734828adb8e35849d317a2d6a88ac967a855", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515256257, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3db6ac40b03f1c51c05f5f79db553b759274f5e2", "parents": ["d2a995d7fadb9046a3b136d917f5323dd01e4452"], "commit": "ff27e1e0032dd75749716cfe820add9eb313d213", "message": "## BV deep dive: learnable programming\n\nDid some good reading and writing this morning! As ususal, I wrote much more than I read. Fun fun!", "changes": [[1, 1, "_data/git-log.json"], [52, 0, "essays/customer-support.md"], [59, 0, "essays/learnable-programming.md"], [93, 33, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1515190081, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a0bc72a5bdae58bb8a73dfd1acb70fb8c7d20249", "parents": ["12946987bf830b95557f1ef7efdf646da20e1f49"], "commit": "d2a995d7fadb9046a3b136d917f5323dd01e4452", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515190079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "46d11b3e8f483e12fabaf6011b16b2d5aa13156d", "parents": ["ea747bdc5c805b70ff84461b3ed5ca3adf8d6c03"], "commit": "12946987bf830b95557f1ef7efdf646da20e1f49", "message": "finished reflection 10 (finally)!", "changes": [[31, 92, "reflections/10.md"]]}, {"committer": {"date": 1515189463, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "76c583c4b2d5f9ac49d27e6860bd43f8a208acd0", "parents": ["fb84c847a489c52bc8269b274ec0f7d4b1533443"], "commit": "ea747bdc5c805b70ff84461b3ed5ca3adf8d6c03", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515189354, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34b58e1a2d2143030e0a7b811db269a71173159e", "parents": ["4f29cd260f0fc7be802a606d3e80d04712b0d36f"], "commit": "fb84c847a489c52bc8269b274ec0f7d4b1533443", "message": "## Shortcut to github issues\n\n* TOC\n{: toc }\n\nNow [futureofcoding.org/issues](./issues) will link to https://github.com/stevekrouse/futureofcoding.org/issues\n\nAnd [futureofcoding.org/issues/3](./issues/3) will link to https://github.com/stevekrouse/futureofcoding.org/issues/3\n\nThis works for arbitrary issues because I wrote the code in the 404 page for this repo, which here acts as a router.", "changes": [[16, 0, "404.md"]]}, {"committer": {"date": 1515187169, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f0c9358dc93d8c97ec6b91979fa7c10b5c4d3b89", "parents": ["795c14e50e03c323c0db054f2231dd2b0140caf3"], "commit": "4f29cd260f0fc7be802a606d3e80d04712b0d36f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1515186595, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "99e9799b88588cc45d34f125a76a17738bed2d42", "parents": ["5c391ad1e039666e4c35e774f63b2fc38bf5520f"], "commit": "795c14e50e03c323c0db054f2231dd2b0140caf3", "message": "## Update for this week\n\n* TOC\n{: toc }\n\n\n### Plans to visit Dynamicland!!\n\nI'm very excited to be visiting Dynamicland in two weeks! I'll be there Jan 15-19 2018. I've heard, read, and seen so many amazing things from there, and I'm pumped to see it all firsthand and play with it all. Hopefully I'll have some fun videos, writings, and/or podcasts for y'all from there soon!\n\n### Where have I been this week?\n\nI have not committed to this project/log/journal at all this week, which is directly contradicting my policy of contributing every day, except when otherwise specified. Part of the problem may be that it's unclear *where* I specify which days I have *on* vs *off*. Food for thought.\n\nAnyways, I've really taken this past week for vacation. I took my girlfriend to waterski on Monday, spent the day with my grandparents on Tuesday (six hours of grandparent technology help was fun!), and spend what was supposed to be my last day in FL with my mom and brother on Wednesday.\n\nWe were supposed to leave Thursday morning, but our flight was cancelled because of the snow. I spent the day packing and then unpacking my things and on the computer and then phone with Spirit airlines. Very fustrating.\n\nHowever today I have been working! I spent the morning on email, then had a fun chat with Paul Chiusano about education, and now am here. I plan to spend the next 90ish min here, then workout, then have dinner.\n\nGiven how unproductive we've been this past week, my girlfriend and I are considering spending this weekend (tomorrow and the next day) working too, so stay tuned on that front. No promies.\n\n### Reflecting on reflection 10\n\nI am overwhelmed by the size and scope of reflection 10. It's both too much to think about and also not fun to think about.\n\nAnd it's just plain embaressing, really indefensible to not get any work done because you're blocked on a reflection time. Apparently there was wisdom in the setup that I had before: Monday's are reflection days. You can only spend as much time as you have on a Monday. This is good because it forces me to not include all sorts of tangents.\n\nSo my current idea is to spend the next 90 minutes finishing reflection 10, of which the goal is to come up with a plan for the next two weeks before leaving to visit Dynamicland.\n\n#### Cleaning up reflection 10\n\nMake the BV deep dive section short. No re-reading of notes.\n\nRemove the Alan Kay / possiblitiy and income sections.\n\nKeep misc updates.\n\nThink about priorities.\n\nLet's do it!", "changes": []}, {"committer": {"date": 1514590238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590238, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "99e9799b88588cc45d34f125a76a17738bed2d42", "parents": ["4825676c47d70de77de6af4f556ae0fe25517d77", "602ba1680383e18cc902685ad78aaed205ae9081"], "commit": "5c391ad1e039666e4c35e774f63b2fc38bf5520f", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1514590228, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79eccc421307c9e4e20271b4b8e486a98d6655d5", "parents": ["d1443cbc78bef5fb96506bf3171f050674d61462"], "commit": "4825676c47d70de77de6af4f556ae0fe25517d77", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514590225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "61922b29ca9a5f67bad6b9eb0dd6ee2dac03cd5a", "parents": ["38b262e91d83963956e21581fc79103fd9c1c39c"], "commit": "d1443cbc78bef5fb96506bf3171f050674d61462", "message": "glen call notes", "changes": [[1, 1, "_data/git-log.json"], [4, 0, "notes/bret-victor/index.md"], [24, 0, "notes/glen-chiacchieri-12-29-17.md"]]}, {"committer": {"date": 1514588570, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1514588570, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ff49f994bb6b02634b5cbf1b52ce47eaf72be7f8", "parents": ["38b262e91d83963956e21581fc79103fd9c1c39c"], "commit": "602ba1680383e18cc902685ad78aaed205ae9081", "message": "add beach link to notes", "changes": [[2, 1, "episodes/20.md"]]}, {"committer": {"date": 1514570064, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1ad148eb452d6c295c95d1e85cb8803d85b16cc9", "parents": ["70943c7668e5e1e14bfac3457c49be7b49fe22e9"], "commit": "38b262e91d83963956e21581fc79103fd9c1c39c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514570062, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7fc111b95d13bf3a8a16fd1635b4b01b07d33262", "parents": ["2e62bd2632f774a9bb5d0fec774b7bd37fa9d0d8"], "commit": "70943c7668e5e1e14bfac3457c49be7b49fe22e9", "message": "glen call prep", "changes": [[63, 0, "notes/glen-chiacchieri-12-29-17.md"]]}, {"committer": {"date": 1514569394, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2de889e9fdb104f8896fa6450ba2d3aa135accb3", "parents": ["6711faceefd673092487c81a787a5fbe986ab02b"], "commit": "2e62bd2632f774a9bb5d0fec774b7bd37fa9d0d8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514569393, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aeea5802c82336fa26ed0dbe36e96b6ef2988980", "parents": ["62d4aa8f55cf9fde45e009cac26770e28b1bddbf"], "commit": "6711faceefd673092487c81a787a5fbe986ab02b", "message": "continued working on reflection 10", "changes": [[53, 30, "reflections/10.md"]]}, {"committer": {"date": 1514567455, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9145ae3647f642fb3bed409b354ac3aa67779ea2", "parents": ["50b312677133e85c3bfa9f06f394df1ec5fa1bbf"], "commit": "62d4aa8f55cf9fde45e009cac26770e28b1bddbf", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514567453, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f91c5388b367bd6cc221f6fd46c300f54341de08", "parents": ["968eab4c42a65b95b092e5026a49a0a37a6202b5"], "commit": "50b312677133e85c3bfa9f06f394df1ec5fa1bbf", "message": "moved hash to link to fix anchor tag", "changes": [[2, 3, "log.md"]]}, {"committer": {"date": 1514560748, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7f193c941e7d02ac7494fb2fe3dde284185ab495", "parents": ["c519f7faf8a52073d621d68f0a595dae2c3720b3"], "commit": "968eab4c42a65b95b092e5026a49a0a37a6202b5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "64671b2710cad0ee2736f8b351e05effa578e274", "parents": ["fc5c1d1119543c9b7b35f916c9910e4c00c571b4"], "commit": "c519f7faf8a52073d621d68f0a595dae2c3720b3", "message": "removed subscribe button nobody used", "changes": [[1, 1, "_data/git-log.json"], [0, 1, "index.html"]]}, {"committer": {"date": 1514560675, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e6ebb74ed44f7035d462dc072fe1f314123cfc7b", "parents": ["8f6345eacc39d9fcf95210a58a09cba7c1fb03f9"], "commit": "fc5c1d1119543c9b7b35f916c9910e4c00c571b4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514560673, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "756003adb2a9c5031f6ea87b37048319e39924ef", "parents": ["546ba9a392f17100bd7ee13ec0381d8d1cc3bb8b"], "commit": "8f6345eacc39d9fcf95210a58a09cba7c1fb03f9", "message": "updated homepage text", "changes": [[1, 1, "_data/git-log.json"], [1, 2, "index.html"]]}, {"committer": {"date": 1514559901, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "13f5cead9e603df7d7082ce88d75fa5ccf42f2a4", "parents": ["0db04274d2c842939aef3e9b8f2d866d951e3e56"], "commit": "546ba9a392f17100bd7ee13ec0381d8d1cc3bb8b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559899, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "040cb5504c935fa781c2aec02181c60847b5f69a", "parents": ["12f207420c8e6e547a16886b7bc5fa7cbcf98735"], "commit": "0db04274d2c842939aef3e9b8f2d866d951e3e56", "message": "changed 404 page to markdown", "changes": [[0, 2, "404.html"], [20, 0, "404.md"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559764, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "28b0f6d88df4d2b51b0b9fbdcbfcf590160bc6a1", "parents": ["27733981c295c9ea68601162977b9a7d9deab9e0"], "commit": "12f207420c8e6e547a16886b7bc5fa7cbcf98735", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1514559761, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8d83a64d169046023dc8d97775a81fbf1a1014c7", "parents": ["1a14234aff676a680c6f51b0d8664a09fcf9feb2"], "commit": "27733981c295c9ea68601162977b9a7d9deab9e0", "message": "add episode 20 jason brennan", "changes": [[1, 1, "_data/git-log.json"], [32, 0, "episodes/20.md"], [1, 0, "index.html"]]}, {"committer": {"date": 1513958954, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fdec4cd2a71c352e65ddcc816a892418e58c1346", "parents": ["3f0bed05b0a506f3a4c8b17fb598bd77d19c4f12"], "commit": "1a14234aff676a680c6f51b0d8664a09fcf9feb2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513958632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4c87bfae037de1243ca2d22f63bbe0a53335c2a7", "parents": ["a992123967ec9eaade9b059f88262a10bd6df1ad"], "commit": "3f0bed05b0a506f3a4c8b17fb598bd77d19c4f12", "message": "## Started Reflection 10 yesterday\n\nAt first I tried to write the reflection entirely in a commit message. There were a few problems with that:\n\n1) I was scared of losing the data because it's not really saved or commited anywhere.\n\n2) I wasn't able to commit my work halfway done. Or if I did then I'd have to copy-and-paste it again into the next commit which would be annoying for readers.\n\nThus I came up with the brilliant idea of creating a file in a new folder for it: [/reflections/10.md](/reflections/10.md)\n\nEven though I finished my 10-day course of 3x antibiotics every day, I am still not feeling 100% better. I've been very tired, so I've been sleeping a lot, which makes me feel better, but also doesn't leave much time for work, particularly because I'm with family and want to spend time with them as well. Hopefully I feel better soon so I can finish this reflection, finish my Work Plan (if the time is right, which it feels like), and finish my BV deep dive before visiting Dynamicland sometime in Janurary (still don't have dates yet).", "changes": [[1, 1, "_data/git-log.json"], [124, 0, "reflections/10.md"]]}, {"committer": {"date": 1513635742, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513635742, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "241990ad21149f655e661c2e4f88c9c3b4530908", "parents": ["647cf9586ca63f5ef28d9522d4ecb9556378e887"], "commit": "a992123967ec9eaade9b059f88262a10bd6df1ad", "message": "add jason brennan quote", "changes": [[4, 0, "notes/quotes.md"]]}, {"committer": {"date": 1513574289, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0c58ec382a52d8311fdb771e0e1045188dac7cd3", "parents": ["2ee46e93ddbfc16f49be83ee305dd759a27dbeb8"], "commit": "647cf9586ca63f5ef28d9522d4ecb9556378e887", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513574288, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d09a4125365403dbcf425938f6e2710783cebb02", "parents": ["4c7b6ee545a27a9ee2069430e0e5c0315eeb121b"], "commit": "2ee46e93ddbfc16f49be83ee305dd759a27dbeb8", "message": "add additions & deletions to log", "changes": [[1, 1, "_data/git-log.json"], [11, 2, "log.md"]]}, {"committer": {"date": 1513573609, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "80d4cd6657c8fece69c65eec241840caf8270955", "parents": ["6f8a27ab2eee0f692b2e5254720b3ad1bf740a39"], "commit": "4c7b6ee545a27a9ee2069430e0e5c0315eeb121b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513573607, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "98a182e3c85e7249bf3076ff22373aa61570ba72", "parents": ["ee0780f1f87c1266f5b06725a9942360912f6ef6"], "commit": "6f8a27ab2eee0f692b2e5254720b3ad1bf740a39", "message": "removed li commit format bug", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "log.md"]]}, {"committer": {"date": 1513572034, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ee4e3fb11a1547066a2210c5ba68d84da85c0f9d", "parents": ["9b7fbe6e38dc84da816f8f8b91930d37b5e653d3"], "commit": "ee0780f1f87c1266f5b06725a9942360912f6ef6", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513572032, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "707bf1c592ff7874dd76791c0831ae7d90bc8a83", "parents": ["9374cb8567c187a0f4c289e60de13e39d3059e66"], "commit": "9b7fbe6e38dc84da816f8f8b91930d37b5e653d3", "message": "set jekyll timezone", "changes": [[1, 0, "_config.yml"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513571712, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "774c88a873b903aa404bfe6b31814637ac8a140c", "parents": ["34cb250bded6dfcb58efc71cafc94339d081a101"], "commit": "9374cb8567c187a0f4c289e60de13e39d3059e66", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513571709, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c060a47042d58a083abe35d2e89fe4468f902c7a", "parents": ["6109ee53ec6c1de6670505690836e3e993e83849"], "commit": "34cb250bded6dfcb58efc71cafc94339d081a101", "message": "log add date; change intro text", "changes": [[1, 1, "_data/git-log.json"], [3, 6, "log.md"]]}, {"committer": {"date": 1513569910, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4c7562bbcaa132d0520f3c97c056702a23c2e3e0", "parents": ["3cd51c1415fd1aadabaef5071e74503fb6925436"], "commit": "6109ee53ec6c1de6670505690836e3e993e83849", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569909, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e316297b5ba482404111f77a44a81c2108a0c93f", "parents": ["4cb39f832bb323f432d5cd7cf98b039eb1715a8e"], "commit": "3cd51c1415fd1aadabaef5071e74503fb6925436", "message": "log style changes", "changes": [[1, 1, "_data/git-log.json"], [2, 1, "log.md"]]}, {"committer": {"date": 1513569670, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8f42399d84aaadb6e3e644c790891b9452c41fb3", "parents": ["66ec6a623dbb55ae79fc4481dd9ce1a2eec9d706"], "commit": "4cb39f832bb323f432d5cd7cf98b039eb1715a8e", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513569668, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9dec0545dc75217ce78864eb67c4efd377b418d3", "parents": ["4d3ebde7ab3d9fdff57d4019bb4b1c535190f03c"], "commit": "66ec6a623dbb55ae79fc4481dd9ce1a2eec9d706", "message": "added files changed to log", "changes": [[2, 1, ".gitignore"], [1, 0, "404.html"], [1, 1, "_data/git-log.json"], [37, 12, "log.md"]]}, {"committer": {"date": 1513565318, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f21910ab78015f678ed9c31eaca80eb9f56d92d3", "parents": ["2f6d64ad2e0c3ee79725f84f713206e58f2ef1ff"], "commit": "4d3ebde7ab3d9fdff57d4019bb4b1c535190f03c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513565316, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "86b6f2b4b231e317637cda1e2997ea5757d5ba78", "parents": ["b4f82068b1473a4a2941a4beb3e3faed0941a153"], "commit": "2f6d64ad2e0c3ee79725f84f713206e58f2ef1ff", "message": "added tips to readme", "changes": [[70, 3, "README.md"]]}, {"committer": {"date": 1513564079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513564079, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6ffec928d6f7c9f38254d8d33465d629502fd02", "parents": ["0d5da678af2a688887b528773640c746cde75dd2"], "commit": "b4f82068b1473a4a2941a4beb3e3faed0941a153", "message": "## Reflection on reflections\n\n* TOC\n{: toc }\n\n### Running out of space\n\nI just spent almost an hour freeing up space on my Cloud9 instance. I had over 20GB on this machine - and the max size is 10BG! First I deleted all the large directories that I no longer use. Then I tried to figure out how to shrink this directory down.\n\nFirst I installed [Git-LFS](https://git-lfs.github.com/) and tested it out on a single file. However, that file wasn't easily reachable in github pages, so that solution was out. And besides I think that was solving a different problem than the one I have.\n\nThen [this article](https://www.atlassian.com/blog/git/handle-big-repositories-git) helped me delete unneccesary files with git sparse-checkout. I still have a 350MB `.git` directory because they are probably storing those large files.\n\nHowever now I have 7GB of space on this machine and that should last a while if I just add text here from now on. Potentially I'm going to want to `git clone --shallow` this repo from scratch. The problem there is that I have to remember to bring over my config files in the `.git` directory. (It is a bummer that those files aren't more portable!)\n\n### Brief rant on \"overthinking\"\n\nOne of my least favorite words is \"overthinking.\" I firmly believe that whatever someone's problem is, thinking too much can never be the problem.\n\nWe all know people, maybe even ourselves, who have thought themselves into circles about relatively simple decisions. Clearly this person has a thinking problem, but the problem isn't that they are thinking too much: it's that they aren't thinking *well*.\n\nLet me prove it to you by contradiction. Say you are worried that you are overthinking an issue in your life. How in the world are you supposed to be able to evaluate this claim? The only way is meta-cognition: thinking about your thinking process. Through meta-cognition you may come to the conclusion that you have been doing too much *unproductive thinking*. But it would be impossible to say that you were doing too much thinking because the only way you were able to determine that you were thinking too much was more thinking!\n\nThis word \"overthinking\" feels appropriate when someone is doing too much of unhelpful kinds of thinking. Thus I propose we replace it with a new word. Let's say, you're \"thinking poorly.\" Ok, that's a bit harsh. Maybe \"thinking in circles\" is a better metaphor.\n\n### Cons and pros of my current schedule\n\nNow that I've gotten that off my chest, let's do some reflections on my process of reflecting.\n\nI set up this research schedule for myself 4ish months ago. I've learned a lot about how I work in that time. For the most part, I've liked this schedule. Let's reflect on what I don't like:\n\n* non-informative logistics around post production and publication for podcast episodes\n* feeling pressured to reflect, record, edit and publish reflections all in the morning on mondays\n\nThe pros of my current process:\n\n* re-reading my last reflection and journal entries from then until now is really useful\n\n### One question\n\n**What value does recording, editing, and publishing my research recap podcasts provide for me? (Not counting the reflecting I do to prepare to record.)**\n\nNone, save when others listen to it and then contact me to be friends.\n\nIn other words, I gain all of the value from simply doing the reflection in text, minus the people that listen to the podcast that wouldn't read my bi-weekly textual updates. Recording it on audio is simply for audio-only people.\n\nI wonder how many of those there are. I get about 100 downloads on most episodes. I'm not sure how many people actually listen to them after downloading. I used to have listeners contact me, but that has stopped. And I suspsect that many would've contacted me from the conversation episodes alone.\n\nHere's where podcasts shine: two-person conversations. A two person conversation requires little prep time and I usually learn a lot from the conversation. And the person I interview has an audience to spread me around to. (Although that hasn't really ever lead to much yet.)\n\nI'm thinking it makes sense to go to a 1 episode every other week as an interview plus Sam-Harris-style \"housekeeping\" section in the beginning if I have other things to say. For example, I can start my interview with Jason next week with housekeeping notes that I won't be doing research recaps any longer.\n\nWhat about people who want to read my bi-weekly reflections / status update?\n\nA few options.\n\nA) They can read them in the `reflections/` or `updates/` folder.\nB) I can create a TinyLetter bi-weekly newletter like Glen Chiacchieri.\n\nLet's start with (A) for now and see if anyone asks for a newsletter.\n\nOne final question: what's the plan for tomorrow's reflection?\n\nFirst of all, I won't be starting tomorrow's reflection until I finish my personal life reflection (which is private). I estimate that taking 1-4 hours tomorrow so I may not have time to do a reflection here until Tues or Weds.\n\nI definitely want to re-read the last two weeks of journal updates.\n\nI also want to read the prior reflection.\n\nI also want to re-read my plan.\n\nI feel finally ready to finish my work plan. It's basically [what it is now](./plan) plus [this section of my journal](http://futureofcoding.org/log#pickling-my-brain-is-a-lot-of-work).\n\nLet's try and finish my reflection first and publish it. Then I can decide what to do next: continue to BV deep dive, do \"deep thinking\", other \"FoC research\", or write the plan.", "changes": []}, {"committer": {"date": 1513561790, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6ffec928d6f7c9f38254d8d33465d629502fd02", "parents": ["d517082525598fffa80bb7610ceaa54e9c02c54b"], "commit": "0d5da678af2a688887b528773640c746cde75dd2", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561788, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc05c9bcd6ed6a1681a7eb7e0e6f9d2a76794690", "parents": ["0ce99a21b228edac88cf9fa990a539fa1883ade3"], "commit": "d517082525598fffa80bb7610ceaa54e9c02c54b", "message": "removed git lfs; doesn't work with github pages", "changes": [[0, 1, ".gitattributes"], [1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561643, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3c1b2b3ae2a102b53695e84b36822102f0367c54", "parents": ["22efc9ec67987a35d1d87ed6981abf43258e7e7b"], "commit": "0ce99a21b228edac88cf9fa990a539fa1883ade3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513561639, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fa487eea384d014c9c61b43009ca9e5c71bf78aa", "parents": ["c4a9410ebfa88a6a0adcece6ade1edf8457c4bbe"], "commit": "22efc9ec67987a35d1d87ed6981abf43258e7e7b", "message": "test git lfs", "changes": [[1, 0, ".gitattributes"]]}, {"committer": {"date": 1513281798, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7621012f20caa44825a4a74651990505db9c2bd1", "parents": ["54c85ce7d678d67a52366eda8d1e8ab8a2d132cc"], "commit": "c4a9410ebfa88a6a0adcece6ade1edf8457c4bbe", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513281794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ed79f8d97176730d40255224455fb6c25a70e313", "parents": ["9dabb09366b2303d5abf19d3d40b51bf5d7ba28b"], "commit": "54c85ce7d678d67a52366eda8d1e8ab8a2d132cc", "message": "add bezos lightbulb socket quote", "changes": [[1, 1, "_data/git-log.json"], [26, 0, "notes/quotes.md"]]}, {"committer": {"date": 1513276512, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "60dd12d761e7d2bd8d0b302291e1b665453d61d6", "parents": ["6c4b3fe119468993d4b88aae70b8740e4dc03d90"], "commit": "9dabb09366b2303d5abf19d3d40b51bf5d7ba28b", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513276510, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "71917d9c1a8aa8e62062b7f69cd82ce5aa3dacf1", "parents": ["fc686e9205631f5ddfc14f9b95771087adabc11f"], "commit": "6c4b3fe119468993d4b88aae70b8740e4dc03d90", "message": "added climate control outline photo", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513276480, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "01938578320e7c72393da0a83e201169de73bdc2", "parents": ["71efd348012c248cf1d81eff3306417eaea06049"], "commit": "fc686e9205631f5ddfc14f9b95771087adabc11f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513274059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8434a3e6a8aa67fe3b2c46a688082b6badedb2d1", "parents": ["04438324bbcfd28d5b57b0fcefee43a7a8e22dbd"], "commit": "71efd348012c248cf1d81eff3306417eaea06049", "message": "## Learnable Programming & video games\n\n* TOC\n{: toc }\n\n### Productive morning\n\nReally excited to be back in the swing of things! Woke up at 7am, snoozed the alarm for 20 mintes, then set up my workspace for 20 minutes (adjusting the chair and computer heights), and got into it!\n\nThis morning I reviewed Evan Miller's _Don't Kill Math_ which was fun.\n\n#### Shower outline of \"climate change for conservatives\"\n\nThis outline shows how much I've internanlized both Nicky Case's know your audience and Scott Adam's persuation techniques. In short, as someone who's been skeptical of the left's portrayal of climate science, I communicated to people like me about ways to assimilate climate science into their existing mental models.\n\n![](/media/2017-12-14 10.17.30.jpg)\n\n\n### Learnable programming\n\nAfter the shower, I pushed myself to re-read Learable Programming. I was at first resistant because I've read it 2 or 3 times now, and the last time was only a few months ago. Almost immediately I realized that I definitely need to read this article again!\n\nThe things about it that surprised me this read:\n\n1. Video games as a vector for powerful mental models. Aligns incentives well in for-profit: people pay for games. Will Wright is a boss. Need to research Minecraft. Maybe go work for Will Wright or some amazing game maker. Or team up with Nicky on a game.\n2. I want to re-write Learnable Programming. I've already put down some thoughts about the re-write. It's mostly a more coherent and justifying able framing, as opposed to explaining the importance of a seemingly random assortment of virtues Bret specifies at the top of the article.\n\n\n### Reading vs writing polished work\n\nGiven that I'm producing outlines for two pieces this morning, in addition to all of the other content that I've been meaning to produce in a polished way, not to mention the backlog of blog ideas I have stuck in a Trello, I am beginning to wonder how I will balance my time as a reader and writer. Right now I'm in reading mode. I think the balance of writing as a form of note-taking is great during this mode. It will help in writing mode for sure. I wonder when I will feel the impetus to switch to writing mode. At the current moment it feels like there's so much for me to get into my head, including:\n\n* Alan Kays videos\n* re-reading Seymour Papert\n* Mountessouri\n* Marshall McLuhan\n* Piaget\n* Chris Granger\n* Nicky Case (again and more thoroughly)\n* John Dewey (I'm becomming obsessed with this guy)\n* F.M. Alexander (feels relevant to this project too)\n\nAnd then I have a dozen books in my apartment that are begging to be read, such as:\n\n* The Mythical Man Month\n* Two culture of the scientific revolution\n* Show your work\n* Society of Mind (minsky)\n* Theory of Fun for video game design\n\nGiven my current pace (assuming I'm not sick and continue to mostly read and not protoype), I feel like this reading will take more than a month but less than a year, which is very reasonable. The only worry is that the more I read, the more I will want to read because I'll want to continue walking the tree up to influence of influences of influences, eventually getting up to Plato or even the Torah.\n\n#### [Pickling my brain](http://futureofcoding.org/plan#1-pickle-myself) is a lot of work!\n\nAs Feynman says, [there are no miracle people](https://www.youtube.com/watch?v=IIDLcaQVMqw.) If you want to be smart you merely have to do what smart people did to become smart. It seems like smart people do a lot of reading. What they're actually doing is assimilating models into their heads. Then when they're not reading they are playing with those models.\n\nIt's a blessing and a curse that there are so many amazing models out there today. It's a blessing because we can be so much smarter than any person in history. It's a curse because if we want to be one of the smartest people of today, there's a lot of pickling to be done!\n\nThe next time someone implies that I was born this smart, I will need to give them a piece of my mind: \"Do you know how much work it takes to be this smart?! Day in and day out I read and write and read and write. Just like an athlete trains the body, I train my mind every day, all day.\"\n\nJoesph Campbell:\n\n> I would get in nine hours of sheet reading done a day. And this went on for five years straight... Reading what you want, and having one book lead to the next, is the way I found my discipline. I've suggested this to many of my students: When you find a writer who really is saying something to you, read everything that writer has written and you will get more education and depth of understanding out of that than reading a scrap here and a scrap there and elsewhere. Then go to people who influenced that writer, or those who were related to him, and your world builds in an organic way that is really marvelous.\n\n(Wow, reading more of this snipet is amazing stuff! Now I'm excited to read this whole book where I found this quote!)\n\nIt's interesting to note here I was already following this strategy before knowing about his advice. It's quite vindicating to know that this strategy worked for someone else. And if it takes me 5 years, that's ok too. I'll just have to find some way to make it financially sustainable...", "changes": [[1, 1, "_data/git-log.json"], [0, 51, "essays/invented-or-discoved.md"], [51, 0, "essays/invented-or-discovered.md"], [0, 111, "notes/bret-victor/bret-victor.md"], [128, 0, "notes/bret-victor/index.md"], [142, 0, "notes/bret-victor/learnable-programming.md"]]}, {"committer": {"date": 1513261232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261232, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1349043665e08bc6f2c9a1db335fad0b6810ba14", "parents": ["5843127b9c400cf210fff5507a99b43fd9ff2afd", "292d84e759eb2b3745ccdd5744ea6e8d4a1e951b"], "commit": "04438324bbcfd28d5b57b0fcefee43a7a8e22dbd", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1513261225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5b6544d828f7b371f55ee6c867e4565077f7cb65", "parents": ["3759984a26f0cf045e03397984080aa51500cb74"], "commit": "5843127b9c400cf210fff5507a99b43fd9ff2afd", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513261222, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "25f9cd31d1738fd932af46c6e3fcba847d520643", "parents": ["6becf6f43ae604af3f09050514c3ae7f5d49eacb"], "commit": "3759984a26f0cf045e03397984080aa51500cb74", "message": "continuing BV deep dive", "changes": [[1, 1, "_data/git-log.json"], [13, 2, "notes/bret-victor/bret-victor.md"], [23, 0, "notes/bret-victor/kill-math.md"], [30, 0, "notes/halfway-there-cis-240.md"]]}, {"committer": {"date": 1513211429, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513211429, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "353a6f7efeebe612c34509e044469426c8eb8b40", "parents": ["5809a18fc8ad022f5d14c685bb44abfaa6e6540d"], "commit": "292d84e759eb2b3745ccdd5744ea6e8d4a1e951b", "message": "fix joseph typo", "changes": [[1, 1, "episodes/19-building-universe-joe-cohen.html"]]}, {"committer": {"date": 1513202861, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202861, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7b0b491a65234368af1dc35e0827bf14ed6a348b", "parents": ["20cb2736c5e78530107a45e981531c9365c554f3"], "commit": "5809a18fc8ad022f5d14c685bb44abfaa6e6540d", "message": "added omnystudio embed 19 joe cohen", "changes": [[2, 0, "episodes/19-building-universe-joe-cohen.html"]]}, {"committer": {"date": 1513202798, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202798, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "457c1c28cdc70061b9fea19f90893ba9d07fefb5", "parents": ["26542afb156a84c9a93d95445d089fa45248b6cb"], "commit": "20cb2736c5e78530107a45e981531c9365c554f3", "message": "added Building Universe: Joe Cohen to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1513202629, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513202629, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b1b2a5c2ea10d83b0c9e34d02bc68c8490d827e5", "parents": ["6becf6f43ae604af3f09050514c3ae7f5d49eacb"], "commit": "26542afb156a84c9a93d95445d089fa45248b6cb", "message": "rename & publish 19 - Building Universe: Joe Cohen", "changes": [[131, 0, "episodes/19-building-universe-joe-cohen.html"], [0, 127, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1513194223, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "42b627dc21ba1be84488693440b0f41e055f3862", "parents": ["76e76c54be59c64ab8c5020b5cfb2e7c65dc40c6"], "commit": "6becf6f43ae604af3f09050514c3ae7f5d49eacb", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513194221, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "034bc0e82e5290be69c3c4ba21e1d95bcb1444c7", "parents": ["7b43b21e28a83f3d4028e213f06fab59308e26e8"], "commit": "76e76c54be59c64ab8c5020b5cfb2e7c65dc40c6", "message": "added shower notes photo", "changes": []}, {"committer": {"date": 1513194008, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "034bc0e82e5290be69c3c4ba21e1d95bcb1444c7", "parents": ["90b12576ce5b32958c784aebf9722e2ac70d9c5d"], "commit": "7b43b21e28a83f3d4028e213f06fab59308e26e8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513189783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97abd660e45bb0aff19fad3126fb0f69dd2e8f53", "parents": ["1a9a78ca409345b23fbbe0a8fbd13389fa3d2473"], "commit": "90b12576ce5b32958c784aebf9722e2ac70d9c5d", "message": "## Back (again)\n\n* TOC\n{: toc }\n\n^ I wonder if the above generates a table of contents in the markdown.\n\n### Sick (again)\n\nIt's deja-vu all over again. I fell back off the horse again for the same reason. It looks like I've had strep throat, on an off for the past 2 months. We're not 100% sure but our prevailing theory is that my girlfriend and I keep passing it back and forth to each other, which is how I still have it even after taking 10 days of antibotics. Now we're both on antibiotics so I feel confident that we're kicking this sickness for good this time.\n\n### Getting back into things (again)\n\nIt's definitely tricky going from sick-mode (which is similar to relax-mode) to work mode, or vice-versa. Once in a mode, it's easy to maintain it, but the transitions are tricky, particularly when they are un-expected. Usually the transition goes smoother when you admit that you're transitioning.\n\nFor example, last night I stayed up to midnight, watched too much TV, had too much to eat for dinner, and had too much snack food after dinner. I woke up this morning feeling almost hung over. I was tired and everything hurt. Contrast this with how I go to bed when I'm in work mode: asleep before 11pm, eat a reasonable meal, none or a small dessert, 1 or 2 episodes of TV, maybe reading, definitely not a movie.\n\n### Scattered thoughts\n\nAs happened last time I got sick, my thoughts seem to have scattered and I feel quite directionless. I feel like I've forgotten why I'm doing a Bret Victor deep dive, as compared with all of the other branches of the tree I could go down.\n\n\n#### Chat with Stefan\n\nIt was really helpful to chat with Stefan Lesser this morning for a few reasons:\n\n1. He was very bright and optimistic, almost cheery. I got a very warm feeling from him. I wonder if it's related to him listening to my podcast because I get a similar feeling from Aidan.\n\n2. We think in very similar ways. Talking to my girlfriend about these ideas is like pulling teeth because we don't speak the same languages. She speaks the artist langauge and I speak the programmer langauge. But Stefan and I can communicate very fluidly. More than that we agree on so many points. It's very validating. I imagine that's part of why working in a research lab, like PARC or Dyanmicland, is so inspiring. Shared vision. Fast communication.\n\n#### Shower Note Session\n\nI was overflowing with thoughts to such a degree, and I was cold to such a degree, that I decided to do one of my famous shower brainstorm sessions. This was definitely one of my more scattered ones:\n\n![](/media/2017-12-13 12.45.20 (1).jpg)\n\nThere's almost too many thoughts and directions in all of those notes. While it was fun and energizing to write them, I am now intimidated by their quantity and scope and don't feel like engaging or proccessing them now. Content overflow is definitley one of my main themes of this project.\n\n### Looking ahead\n\n#### Things on the horizon:\n\n* I have ~3 hours today, ~8 hours tomorrow, and ~3 hours Friday\n* On Friday I go home to Florida for 3 weeks\n* Jan 8 - 12 I will hopefully (just applied) be at [the 1-week Recurse Center program](https://www.recurse.com/blog/121-come-to-rc-for-a-one-week-retreat)\n* Jan 19 - 26 I plan to visit Dynamicland in Oakland\n* I have 2 years of runway before I need to get a job (living in NYC)\n\n#### Thoughts on /plan v5\n\nI felt much more centered after re-reading [my most recent plan](/plan) this\nmorning. My thoughts are:\n\n##### 1. Justify cause/crusade framing\n\nThe cause/crusade framing feels so obvious to me, but definitely not to many others. I want to dig into these feelings a bit more. Think about why prinicpled, conscious, purposeful creation is \"better\" than simply doing stuff for money or more whimsical reasons.\n\n##### 2. Still blocked on philosophy\n\nHow do I know that I'm still blocked here? Because I can't make decisions. I had a great call with Jaime Brandon yesterday. It was very easy for him to diagnose this problem in me because he's faced it himself, as well as seeing it at Eve. When you're too broad, when you don't have good priorities or boundaries, you agonize over each decision, and constantly want to walk up and down the tree. A good project can easily see what it is and what it is not, and doesn't spend much time thinking about paths it didn't take in the tree because *that is not what it is*. A thing in the world defines itself by the path it takes. What it is and what it is not. Staying up in prototype/research land is refusing to do that. Even within prototype/research land, I feel constant agony about what is the priority to research or prototype or communicate or build.\n\nI feel my brain wanting to escape this proccess. I feel it looking for the easy out. Looking for a quick answer it can sub in here so we can get back to more structure, a more easily optimizable game. On the one hand, I applaud my brain for this strategy, because the less unknowns you're working with at one time, the better. Yet on the other hand, I feel like if I took an easy route such as getting a job at a company, I would immediately wish I was back here, working on my own philosophy, as opposed to actualizing someone else's, which I would constanatly be picking apart.\n\nThus, the appeal of the ultimate escape hatch on this procecss: go work for someone who's vision is so clearly better than anything I could come up with at the moment. The candidates for this position are few and far between: Alan Kay, Bret Victor, maybe someone at Bret's lab, maybe Paul Chiusano. We shall see what happens here when I visit Dnyamicland soon.\n\n###### Constructing Meaning\n\nI went deep into this rabbit hole in my shower brainstorm. I have defined a crusade as the most meaningful thing I can do. This is explicitly not the most good I can do from the Juan Benet / Elon Musk / Peter Singer perspective. Yet if this is the case, and it's truly subjective. Then I better be damn sure I know what is meaningful to me. That's why I started making a list of all of my positive memories that held meaning in my life. (It reminded me that my fustration with Looker was that I can't remember a single decision any one made because of a Looker report. In my experience, the tool was analytics for analytis sake.)\n\nThen I got into a hole where I realized that the difficult thing with children as customer is that their incentives are so perverse given the structure we place them in. For example part of why I hate tutoring is that either students are un-motivated or motivated for the wrong reasons (grades), or motivated to just get the end product to show off and thus just want me to program it. It's rare (but happens sometimes) to find a student in the right context: working because they enjoy making something and getting better at making things.\n\nI'm also thinking about the condescending nature of this whole project, particularly the bait-and-switch part, where you sell a product that does X, but only because you have an ulterior motive Y. Sell electric sports cars to accelerate the transition to sustainable energy. Part of me wants to just give it up and go wherever there's the most money. Stop trying to be so normative. Just let people tell you what it is they want and then deliver it. That's not to say that you should blindly listen to customers. It's that you should iterate with customers towards something they will pay a lot for because it solves a big problem for them. Put another way, Looker clearly is solving a massive problem for tens of thousands of people at thousands of companeis. It's truly software through empathy, as Lloyd talks about. Who am I to tell the world what's best for it? In other words, I better have a strong and well-thought-out philosophy for how to make thw world better if I am going to try my hand at shaping it through technology. Otherwise, I might as well just go where the market is because that's garunteed to make people better off (if you assume markets do that).\n\n#### Priorities for Dec and Jan\n\n##### 1) Life priorities\n\nMy main focus for my own health is the Alexander Technique.\n\nFor my family, particularly in the context of the 3-weeks in Florida, the focus is making the most of the time, in the context of others. This means that I want to * strategize ahead of time* to set myself up for success, but *be content in the moment*, even if it feels like a waste of time. In other words, 1) don't see people just because they asked to see you, 2) go to bed early and wake up early, 3) phsyically seperate from others when trying to focus, 4) calendar sculpt. The main priority here is \"peace in the home\", which is a Jewish saying. This is not the time for arguments and figuring things out. It's a powder keg. This is the time for making nice. Reflect later. Figure things out later.\n\n##### 2) Work priorities (12/13/17 - 1/8/18)\n\nCalm, coherent, patient, doing less. The opposite of frenetic. That's my goal. Re-reading my /plan embued me with calm and happiness. Meditating, coming back to my journal to reflect. These are the things that add the structure I need in this purposefully unstructured time.\n\nI can't see any reason to stop my Bret Victor deep dive given that I still have at least half a dozen links to go. I feel like I've lost steam on it, but that might just be a momentum thing. Could return when I get back into it.\n\nI don't want to start doing priority-calculus, seeing if there are other things to read that are slightly more efficient uses of my time.\n\nHowever, I wonder if I should budget more time in my calendar for \"deep thinking.\" I set aside a place in my Inbox (Google Inbox) for notes that I should proccess later. It's the \"deep thinking\" label. I feel like my time for thinking those thoughts has been crowded out by an urgency to finish the Bret deep dive.\n\nNow that I mention it... while this next thought does go against my intention not to play priority-calculus... I have a lot of links in various places that could use some attention, including /links as well as the \"foc research\" label in my Inbox. At the very least I could clean this up a bit and figure out a home for them.\n\nFinally, there clearly are top-of-mind topics that I could keep in a prioritized list somewhere. Basically, the next version of /ideas. These are Blockly++, FRP Scratch/WoofJS, StreamSheets, CycleJS devtools, FRP research incl Reflex & Conol Elliot, essay about essays, better wiki tool, etc.\n\nOk, I need to go eat lunch now. With the remaining 2 hours in the day (given that I spent an hour on this journal entry), I will:\n\n1. Get to inbox zero\n2. Publish Joe Cohen interview\n\nThe plan for tomorrow is:\n\n1. Deep thinking notes procecssing\n2. Calendar sculpting for vacation time\n3. Bret Victor deep dive (unless I come up with anything better)\n4. Plan friday", "changes": []}, {"committer": {"date": 1513188230, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "97abd660e45bb0aff19fad3126fb0f69dd2e8f53", "parents": ["6fc2a5d07df03fe9b8434b7c6cc422091e4eb6a3"], "commit": "1a9a78ca409345b23fbbe0a8fbd13389fa3d2473", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513188226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7e61f62a9ecdf847dc446c0196be68373feee7db", "parents": ["dcfc89a16d0735c0fc229198ba03ea5517d381e3"], "commit": "6fc2a5d07df03fe9b8434b7c6cc422091e4eb6a3", "message": "stellar 2-hour Stefan Lesser convo", "changes": [[1, 1, "_data/git-log.json"], [120, 0, "notes/stefan-lesser-12-13-17.md"]]}, {"committer": {"date": 1513172018, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7a5e7d59872ddeead78e86e9d2f02345a2417dd7", "parents": ["8fedb67e480c09374482f67f625145f86a577d7c"], "commit": "dcfc89a16d0735c0fc229198ba03ea5517d381e3", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1513172015, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3b13902582d4c897a40da8813ef48b1a094c362b", "parents": ["caae7a01f2d488a669f1b71d3b366e3cca18a5d3"], "commit": "8fedb67e480c09374482f67f625145f86a577d7c", "message": "call with jaime brandon", "changes": [[64, 0, "notes/jaime-brandon-call-12-12-17.md"]]}, {"committer": {"date": 1513171856, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171856, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "a559dc52d8ac9919064abb894e23306337775d08", "parents": ["33f5f13d4b6b48c9acdfeb8a4dd13a0da64109ab"], "commit": "caae7a01f2d488a669f1b71d3b366e3cca18a5d3", "message": "prep for call w stefan\n\nThinking about ways to collaborate on this project...", "changes": [[37, 0, "notes/stefan-lesser-12-13-17.md"]]}, {"committer": {"date": 1513171472, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171472, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "053f49fcc5b9637c98c9dc0e36e92ec0fbc59ce8", "parents": ["6abdba4fb713a2faefc2888ae1e5bb1e057d6499", "f04dbba35685d1236d3212681b4f8b3adc4779a9"], "commit": "33f5f13d4b6b48c9acdfeb8a4dd13a0da64109ab", "message": "Merge branch 'master' of git@github.com:stevekrouse/futureofcoding.org.git", "changes": []}, {"committer": {"date": 1513171372, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1513171372, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "37fba8a4553c71a6c879e7e0e139384c5ca8cb1a", "parents": ["c4b770e4983ee0cf65c493f366c2ddc34342f729"], "commit": "6abdba4fb713a2faefc2888ae1e5bb1e057d6499", "message": "Chat with Samuel Loncar\n\nWhy am I talking to a religion scholar? Good question! Sam is a\nbrilliant scholar,. Every time we talk it feels like there's so much\nto learn from him. In particular, I love his focus on deeply\nunderstanding historical context -- he reminds me of Alan and Bret in\nthat way. He was excited to meet me and learn about those guys,\nbecause he's interested in the history of technology, particularly the\nreligiousity of Silicon Valley, epitomized by the Singularity and\nanti-deathers.\n\nIn the course of preparing for this chat, I made the following\noutline, which I didn't actually reference in the chat, but looking at\nit now, I see that it's a good model for where my head is currently\nat.\n\n* my career plan\n* crusade / cause\n* inventing on principle\n* We are our tools\n* including ideas, patterns of thought, notation\n* augmenting human intellect\n* copy and paste\n* Dynamicland - ergonomics\n* democratizing tool generation\n* paths\n* build\n* profit\n* Looker, Bubble, Excel\n* non profit\n* Scratch, Wikipedia\n* research\n* Victor, Kay, Papert, Engelbart\n* Patreon?\n* constructing cause\n* now: read Bret, and influences\n* Jan: visit dynamicland\n\n\n* areas of interest\n* comprehensible programming model\n* CycleJS devtool write\n* FRP Scratch/WoofJS\n* workflow and version control\n* underlying interface library\n* LogicHub\n* Ten Brighter Ideas?\n* All assumptions, including reasoning principles, visible and\ntweakable, all the way down to “primary sources”\n* wiki-like (massively collaborative, structured, inter-connected)\nplatform for science\n* A tool for surfacing and ameliorating inconsistencies\n* Allows for multiple contrasting axiomatic views (but possible\nnot any mutually inconsistent ones concurrently)\n* Popper vs Kuhn\n\n* presenting old vs researching new?\n* work at TCS\n* work on Woof (and off-boarding)\n* work on old programming languages\n\n* Doing a podcast?", "changes": [[84, 0, "notes/samuel-loncar.md"]]}, {"committer": {"date": 1513012704, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1513012704, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ed772a5c8e4d5e2b98a9f0c1386768bdd943aa12", "parents": ["c4b770e4983ee0cf65c493f366c2ddc34342f729"], "commit": "f04dbba35685d1236d3212681b4f8b3adc4779a9", "message": "Sick again. Reading/watching BV\n\nUnlike usual where I read and watch little and write much, today I'm not feeling great so I'm watching much and writing little. Hopefully I remember much so I can resume writing when I'm better.\n\nIn case anyone is wondering why I'm sick so much, join the club. My best guess is that my girlfriend and I keep passing strep throat back and forth. Hopefully we figure it out soon...", "changes": [[16, 2, "notes/bret-victor/bret-victor.md"]]}, {"committer": {"date": 1512751755, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "95669f12c3c6987e61a8d982832844e8f124bdb6", "parents": ["87e444ab1d808032714a8ea954b67aa43fa1f98f"], "commit": "c4b770e4983ee0cf65c493f366c2ddc34342f729", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512751752, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "77bd761bc4f2ccc10687f006a4b1b16aa0fe90b7", "parents": ["df7593416317e3c7bdb24f78060626c568fddc95"], "commit": "87e444ab1d808032714a8ea954b67aa43fa1f98f", "message": "read BV's Dynamical System and Scientific Communication", "changes": [[1, 1, "_data/git-log.json"], [24, 2, "notes/bret-victor/bret-victor.md"]]}, {"committer": {"date": 1512747762, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e9edc5d9a3fd7c4f077bfd41946b31b49007349a", "parents": ["924d4ef53b969aaa17f7c0ffd09a4925e9ee6ab5"], "commit": "df7593416317e3c7bdb24f78060626c568fddc95", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747760, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ae507ca5e7b1a366c734a7de1c04566ba4e5819d", "parents": ["2a155e3f1aa5b81d50299e70be50ef0c72e2b1d8"], "commit": "924d4ef53b969aaa17f7c0ffd09a4925e9ee6ab5", "message": "fixed typo in media", "changes": [[1, 1, "_data/git-log.json"], [1, 1, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1512747681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e33f3624cd8c222674465c0e199a227c4dde28a8", "parents": ["7a74e69dc235401a9ece467457bda58049846d73"], "commit": "2a155e3f1aa5b81d50299e70be50ef0c72e2b1d8", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512747678, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "aeca2f6df2f3fc0ac2bee46e3f644e4699fcbe7f", "parents": ["918002a46b4ebfed4f59a8548811d3c180317d4c"], "commit": "7a74e69dc235401a9ece467457bda58049846d73", "message": "added inital files for Joe Cohen Universe interview", "changes": [[1, 1, "_data/git-log.json"], [127, 0, "episodes/19-universe-joe-cohen.html"]]}, {"committer": {"date": 1512674855, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "652ebc02f8421150e77e072bb577109cb325c0ae", "parents": ["a46cbc793334fff3288167406beadf6f4c95121d"], "commit": "918002a46b4ebfed4f59a8548811d3c180317d4c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512674852, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4399bc50761da90ce9dded704c3237620aaf5a78", "parents": ["d6afc3e7dcadba7b00a3cb5fa00517b5438ca89f"], "commit": "a46cbc793334fff3288167406beadf6f4c95121d", "message": "added michael nielsen links", "changes": [[53, 0, "notes/michael-nielsen.md"]]}, {"committer": {"date": 1512670622, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6cc1ba1a4025a222fc1fa85f2ebaef7ccd1ddc47", "parents": ["d3d4f601da3cc3ab0c8e3f331995d3bd98e1c93c"], "commit": "d6afc3e7dcadba7b00a3cb5fa00517b5438ca89f", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512670618, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "50338eae2ff97c9d11fd0bcb10e0cd356251b5be", "parents": ["a95de28ea53ba362a818fce73aa49db9f4e41a9c"], "commit": "d3d4f601da3cc3ab0c8e3f331995d3bd98e1c93c", "message": "tired & unproductive today", "changes": [[20, 1, "notes/bret-victor/kill-math.md"]]}, {"committer": {"date": 1512668182, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "65ae2c230599e71dff9c8eafb6b6ca79d674a571", "parents": ["b5911160e8c1e3e9fa116b1a68e7e33664c153d0"], "commit": "a95de28ea53ba362a818fce73aa49db9f4e41a9c", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512668179, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d032be312e3ac7525c5bba5ff359b8910bc04052", "parents": ["48d867bb9704d5e9c06db02b42abf0b752703442"], "commit": "b5911160e8c1e3e9fa116b1a68e7e33664c153d0", "message": "updated homepage organization a bit", "changes": [[1, 1, "_data/git-log.json"], [4, 10, "index.html"]]}, {"committer": {"date": 1512599333, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3d9227c88699fd88acb90325844a25af377de16c", "parents": ["123be98e078ee806a3ac318929c2c615e632a4bb"], "commit": "48d867bb9704d5e9c06db02b42abf0b752703442", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512598821, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5f4db6f7baf2210f1f7feae3327379edaca22f5e", "parents": ["ddd3d52fe01910109df4b953fa453cdbe5706826"], "commit": "123be98e078ee806a3ac318929c2c615e632a4bb", "message": "Writing about, more than reading, Kill Math\n\nToday I wrote ~3000 words about the ~1500 words I read of Bret Victor's Kill Math essay. Clearly it was thought-provoking. This is slightly misleading because I also re-read Chris Granger's Coding is Not the New Literacy as well as an article about Kill Math. Yet, the fact remains that I had a lot to say about these thoughts!\n\nGiven that I was still feeling under the weather today, I didn't workout which gave me lots more time today to do things like make a doctor appointments, as well as do a few clearerthinking.org quizes, and a few emails. I'm in a positive, we-can-solve-it-with-science mood now, which is definitely responsible for, or was caused by, all my discursive writing this morning.\n\nI got in about 4 hours of reading/writing here and 4 hours of miscellaneous tasks, which was less reading/writing than I planned for today but the other tasks were useful so I am happy with it. Tomorrow I only have 3 hours for reading/writing here, and also the aforementioned dentist, as well as a podcast interview, and two meetings.", "changes": [[1, 1, "_data/git-log.json"], [98, 0, "notes/bret-victor/kill-math.md"]]}, {"committer": {"date": 1512578110, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "69300686e323da506b71fdb0669900700ab04052", "parents": ["eb1f76f1b646452854e599fef5902eed502e9b27"], "commit": "ddd3d52fe01910109df4b953fa453cdbe5706826", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512578107, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "65729d4ad260126f66d6c8c7eabca9921db179fd", "parents": ["ef702fe1a35cc55793233df8f8a434fd4fda0802"], "commit": "eb1f76f1b646452854e599fef5902eed502e9b27", "message": "added outline of legal code essay", "changes": [[1, 1, "_data/git-log.json"], [38, 0, "essays/legal-code.md"]]}, {"committer": {"date": 1512521198, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c07b290c016fe482824302d22c4ccfda3cbad3", "parents": ["3815caa539319d042e1dc1560a605320a3d79193"], "commit": "ef702fe1a35cc55793233df8f8a434fd4fda0802", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512521196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0d0351ba6861071e5b2b595c87363d47ce535d28", "parents": ["27727398bc5ff15ce62a9448c99910b30a68dbd0"], "commit": "3815caa539319d042e1dc1560a605320a3d79193", "message": "added link to github commit in log", "changes": [[1, 1, "_data/git-log.json"], [5, 2, "log.md"]]}, {"committer": {"date": 1512520310, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3e2109dda52eaca0dbe8f7c5f8da81e12196434d", "parents": ["110a0bbcd0d88c97eef4fc099af25cda70b271bd"], "commit": "27727398bc5ff15ce62a9448c99910b30a68dbd0", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512520307, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c82ab2fc0df94e41257b41b5f80f3f7ba2160263", "parents": ["de367ce3279f1f1eedb69a9ef9f18fbb4e47b948"], "commit": "110a0bbcd0d88c97eef4fc099af25cda70b271bd", "message": "custom log file is looking prettier!", "changes": [[1, 1, "_data/git-log.json"], [26, 8, "log.md"]]}, {"committer": {"date": 1512513479, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "860345f42e74608e09098472a7e155ae94c29164", "parents": ["659de09c5ae5f89cbc9515826599607dcc6a0f24"], "commit": "de367ce3279f1f1eedb69a9ef9f18fbb4e47b948", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512710, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "81ff3e639fe280ac4c2d590f3208b8c243506d6b", "parents": ["7026816e859807fa1feedc13b3e90526d7bceba4"], "commit": "659de09c5ae5f89cbc9515826599607dcc6a0f24", "message": "# Bret Victor Deep Dive!\n\n## Bret Victor Folder\n\nI created an entire folder inside my notes directory. I took so many notes on just Magic Ink](/notes/magic-ink) that it seemed like a good idea to have a seperate file for each piece of his work.\n\n## Tired, and maybe sick\n\nThis was a long day! I worked for most of the last 10 hours, and most, at least 7 hours, was reading and writing about Bret's projects. I am exhausted, partially because my throat is hurting :( I've really been sick with this thing for a while now! Let me schedule a doctor's appointment now for tomorrow... Ok, I got an appointment for 4pm tomorrow.\n\n### Trust & doctors\n\nI wish I had a doctor that I trusted, from a philosophical perspective, as much as I trust my Alexander Technique teacher Rebecca. I have trouble understanding the way doctors think, diagnose and cure things -- partially because they go through so much formal training that I didn't have, whereas Alexander Technique was something that a non-medical person created simply from personal analysis.\n\n## So many of my ideas\n\nIn particular I was shocked by how many of my favorite ideas *Bret also wrote about*, including a better medium for mathmatics, including for school children, LogicHub, a wiki-like platform for understanding and argumentation with nested sources.\n\n# Custom Log\n\nI'm really really excited about the work I did on my custom log file yesterday. That was pure fun. Later in the night, I opened it up just to admire it. Hope to work on that again soon!\n\n# Tomorrow (12/6/17)\n\nShould have 5 hours to continue here with the deep dive as long as I am not feeling too sick.", "changes": [[1, 1, "_data/git-log.json"], [33, 0, "notes/bret-victor/SimulationAsAPracticalTool.md"], [64, 0, "notes/bret-victor/bret-victor.md"], [45, 0, "notes/bret-victor/explorable-explanations.md"], [25, 0, "notes/bret-victor/kill-math.md"], [185, 0, "notes/bret-victor/magic-ink.md"], [33, 0, "notes/bret-victor/substroke.md"], [23, 0, "notes/jcr-licklider.md"], [60, 0, "notes/recurse-center/applications/recurse-center-application-06-09-17.txt"], [61, 0, "notes/recurse-center/applications/recurse-center-application-12-05-17.txt"]]}, {"committer": {"date": 1512512241, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e0f892f837668fd1ff5179f867734a9dd4efcf28", "parents": ["cabbba7541685e8ff7456842b2df4ec4259e86f9"], "commit": "7026816e859807fa1feedc13b3e90526d7bceba4", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512239, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a730dfd38f35ea0a7474054c438165fd607a660e", "parents": ["f1b5c1ade1bbc33d3eb02502bebc826660a745b5"], "commit": "cabbba7541685e8ff7456842b2df4ec4259e86f9", "message": "removed .gitmodules", "changes": [[0, 3, ".gitmodules"]]}, {"committer": {"date": 1512512017, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5d009e5feef4b4deed948741f8681887c99c4c9e", "parents": ["eb376545ef1a2e4689e8585ab2687bc6c8618427"], "commit": "f1b5c1ade1bbc33d3eb02502bebc826660a745b5", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512512014, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "6e547cff82c4948acd99b93af512a9a5d6ea0f1a", "parents": ["8100b1964ad04405693d2a11e489a61888d03980"], "commit": "eb376545ef1a2e4689e8585ab2687bc6c8618427", "message": "removed _site from repo", "changes": [[1, 0, ".gitignore"]]}, {"committer": {"date": 1512425248, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b3a14247d8f1f5fae0d58af8d7df33588175f3bc", "parents": ["16ff6ccd6912767bf4508ee851caa99c5d7f33ba"], "commit": "8100b1964ad04405693d2a11e489a61888d03980", "message": "updated git log", "changes": [[1, 1, "_data/git-log.json"]]}, {"committer": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512425246, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "79f3582e32adbe42b07b2cadc15d8b4df71b16c5", "parents": ["6c2a8d48c32f5ce875dcba15f521edb9b23a2081"], "commit": "16ff6ccd6912767bf4508ee851caa99c5d7f33ba", "message": "jekll serve; log.html -> log.md", "changes": [[1, 1, "_data/git-log.json"], [0, 11, "log.html"], [31, 0, "log.md"]]}, {"committer": {"date": 1512423794, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2b844c65de8bb48b7d6fcf6e60299fe33873ccae", "parents": ["34b79f3e1a0afb1710dc6105d7cbd638eca98480"], "commit": "6c2a8d48c32f5ce875dcba15f521edb9b23a2081", "message": "updated git log", "changes": [[1, 0, "_data/git-log.json"]]}, {"committer": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512423793, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a5394e99df31213eae7baa1f3650cf297eb6f600", "parents": ["4ff652bcea901c68a76a4ef84d5aac320e78eacf"], "commit": "34b79f3e1a0afb1710dc6105d7cbd638eca98480", "message": "test _data/git-log.json", "changes": [[1, 0, "log.html"]]}, {"committer": {"date": 1512411508, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512411508, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c9a7984632468a50a52995698e98660a7199c2b5", "parents": ["67ee11f4766022056c35451eaf8fbb86dcb2845c", "3c8b6ebffccadb1c7990e1aabfe04a0d76b313ec"], "commit": "4ff652bcea901c68a76a4ef84d5aac320e78eacf", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1512411503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512411503, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "da4736490e1c2c794ae816a127f20cd464ad7d7c", "parents": ["269c66f1ac3eed42552f45530a5a74fec6c520a1"], "commit": "67ee11f4766022056c35451eaf8fbb86dcb2845c", "message": "added 18 research recap nine to homepage", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1512411170, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1512411170, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0f9d6eb7eb64f756ed662d46481980026a01448e", "parents": ["269c66f1ac3eed42552f45530a5a74fec6c520a1"], "commit": "3c8b6ebffccadb1c7990e1aabfe04a0d76b313ec", "message": "Added omnystudio podcast embed", "changes": [[2, 2, "episodes/18-research-recap-nine.html"]]}, {"committer": {"date": 1512408127, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512408127, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "df525ad47d49bf8a2a0d868249cbbb435f43b799", "parents": ["f5712faa898393bcbbeed4741860e1d037099306"], "commit": "269c66f1ac3eed42552f45530a5a74fec6c520a1", "message": "episode 18, research recap nine notes; also joyjs notes", "changes": [[194, 0, "episodes/18-research-recap-nine.html"], [1, 1, "log.html"], [1, 1, "notes/future-authoring.md"], [70, 0, "notes/joy-js-review.md"]]}, {"committer": {"date": 1512257354, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "author": {"date": 1512257354, "timezone": "-0500", "name": "Steve Krouse", "email": "stevekrouse@users.noreply.github.com"}, "tree": "4a8d55199df4ccd2495d92190ee1a522b53ba3e0", "parents": ["e8cd329e2030da0486aa4f863f93c8eba339c0f2"], "commit": "f5712faa898393bcbbeed4741860e1d037099306", "message": "Almost finished with future authoring\n\nUseful and somewhat fun but also basic stuff for me given how much\nreflection I already do. I really think this course would be great for\nthose who aren’t crazy journal people like me. All the same, I’m glad\nI did it for the structure and clarity. Still have 30ish minutes to go\nso will do that Monday morning :)", "changes": [[241, 107, "notes/future-authoring.md"]]}, {"committer": {"date": 1512168846, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512168846, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fd68313a0739ef14cd74c235532cae41f7aeb795", "parents": ["167d7e891e0b86242502b7582523bfb3c6e6c185"], "commit": "e8cd329e2030da0486aa4f863f93c8eba339c0f2", "message": "# Plan v5 is off to a great start\n\nI'm pumped that the table of contents Jekyll thing worked. That's really beautiful and super elegant.\n\nI think my changes in the diff for this commit speak for themselves. Really excited to come back to this next week.\n\n## Plan for next week\n\nMonday is full with the bi-weekly research summary, working out and two meeings. Calendar sculpting is included in the bi-weekly research summary time.\n\nTuesday and Weds are total open and will remain so, and until 2pm on Thursday and Friday are open as well.\n\nI guess it's mostly Bret Victor deep dive. Fun!\n\nMy first step will probably creating a list of all of his content that I want to get to and then prioritizing it. I don't want to make the mistake of starting from the first post he ever made in his oldest blog. While good for empathy, I want more of the fully-baked stuff.", "changes": [[34, 4, "plan.md"]]}, {"committer": {"date": 1512167658, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512167658, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b29cf12e878b287bedee4f40513e25b6148740b3", "parents": ["82a41954bdbdd869869bdeae4a610f5e49298aa3"], "commit": "167d7e891e0b86242502b7582523bfb3c6e6c185", "message": "# Fith version of plan\n\nVery rambly so far. Had to even siphon of a thousand words into [its own essay](/essays/invented-or-discovered). I found myself unable to figure out where my next header should go or be so I googled around for [how to auto-generate a table of contents](http://www.seanbuscay.com/blog/jekyll-toc-markdown/). The downside to this method I am trying now is that it only works after committing and pushing to Github pages, which I why I am committing this plan in mid-working session. Let's see what happens!", "changes": [[51, 0, "essays/invented-or-discoved.md"], [47, 101, "plan.md"]]}, {"committer": {"date": 1512142893, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512142893, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1d962fef0c9e68ff07ea913a86db986fd1b72f05", "parents": ["b3661b82bdfd27b57597fe3cfc8e44e3383eb8ff"], "commit": "82a41954bdbdd869869bdeae4a610f5e49298aa3", "message": "# Future Authoring, part 1\n\nI recently have fallen into a Jordan Peterson love affair, and stumbled upon [this course he created](https://selfauthoring.com/future-authoring.html), which seems quite relevant to me articulating my goals for this project. I found [a free version](https://pastebin.com/BiFE2fUX) and have [answered the first part of it in not-bold here](/notes/future-authoring) and am taking his advice to wait until a night or two of sleep before doing the second part. Let me put time on my calendar tomorrow afternoon to tackle it.\n\nIt went really well! A lot of it was personal stuff about my life, but readers of my stream-of-consciousness style in this journal are not strangers to that. It feels relevant at times to talk about my life in this journal and this is one of those times. I am a bit worried it may bite me in the butt at some point down the line but that's just fear talking. I don't have any concrete worries here.\n\n## Crusade Discovery\n\n### Well and thoroughly pickled\n\nIn particular I think I made a shockingly large amount of progress on articulating my crusade this morning. And the way I came to it is really a function of a week well sculpted. (I love this phrase, by the way, calendar sculpting. A quick google search makes it seem like I have indeed inventing this phrase. I wonder if it'll catch on.)\n\nFor example, starting my week of thinking about how communication works for my \"essay about essays\" with Nicky Case lead me to Douglas Hofstader's \"Analogy as the Core of Cognition\" which was *exactly* what I needed to read right now, as well as re-reading Seymour Papert's \"Gears of my Childhood\", also exactly what I need to read right now. (Watching Bret Victor's Inventing on Principle last week also played a big part on my thinking this week.)\n\nThen Wednesday diving even deeper into how the brain works, how people learn, why they'd want to learn to code, etc with my coggle brain mapping was amazing. Really helped me spread out my thoughts in space and get clearer about them and how they relate and build upon each other.\n\nThursday my brain was on fire reading through the Dynamicland zine the first way through. I've only made it 4 pages in the second way through and have written ~3.5k words already. I was able yesterday to really *live* in the future and imagine what it would be like, without hating or \"making wrong\" the present. I was able to bask in the possibility while also being grateful for reality. The thing about truly living in the future, while accepting the present, is that you can do it all the time, and it's only when you live with things as core components of your life that you are able to imagine the next step, how to build on top of them, how they interact together, the 3rd, 4th, and 5th level causes. I was even ambitious enough to explain to both my grandma and then my mom about my vision for the future and how it relates to tools and humans and augmentation, etc. They both got it to some degree and were excited that I was excited and I learned more for explaining these thoughts to lay people.\n\nI also had a great conversation with my buddy Jonathan Leung yesterday where he was excited for me for \"not making the present wrong\" because he noticed it was something for me to work on when we did our podcast many months ago. We thought about Elon as a crusader and what his crusade is (averting existential threats) and how that compares with Juan Benets crusade (decentralization).\n\nAdditionally, yesterday was largely inspired by *How to Measure Anything*, my new favorite book which is really going to make a scientist out of me and helped me understand the distinction of mesaurement and how it is truly what science is: reduction in uncertainty.\n\nAs the zine says (quoting someone), the idea is to immerse myself if brilliant thoughts get pickled by all these ideas, which will in turn lead me to having my own ideas.\n\n### Ariculating Crusade\n\nI think here's what's profound about the ideas I had yesterday and today:\n\n0) Tools, or technology, includes ideas, ananlogies, physical machines, virtual software. Anything that allows someone to do or think things, either at all or easier, than without the tool.\n\n1) Humans subsume our tools into ourselves, becoming what we were before plus our new tool. The result is a cohesive whole. Removing the tool reduces the human to what they were before the tool, akin to removing a person's arms.\n\n2) We know a great deal about how the mind works, how our bodies work, how emotions and happiness works, as well as what doesn't work. We can take all of this knowledge and bring it to bear on the problem of desigining proper tools for humans.\n\n*Pause!* How does this relate to programming language tools? Well programming langauges are *tools for designing tools*. Wow. Has there ever been such a tool? Ok, well writing is a tool for desigining tools. The notion of tool is a tool. Ok, so there are plenty. Programming is a tool for desigining tools *that can also desigin itself*. That's pretty neat: you can't make a pencil with a pencil. You can't make a typewritter with a typewritter. But you can make software tools with software tools.\n\nHowever it doesn't feel like *the bootstrapibility of programming languages* is why I'm so passionate about improving programming tools. Let's flip the question on its head: am I more passionate about building better tools for programming than, say, science? Or better dinner table conversations? Or more logical thinking? Nope. I'm really excited about each of those problems. Maybe the dinner table one a bit less emotionally but not that much less. The only reason I was so excited about programming tools was that 1) they were problems I had, 2) they were problems my students had, 3) I knew how to code and would have fun solving them. I'm really excited about all tools for thought and how to really embed them inside of people so that people can *be* augmented, not just be augmented.\n\nWait is that my crusade? *Be* augmented. The metaphor is that we are already the bionic man. We already have technology in our brains. We might as well optimize this software as best we can. And make the technology outside our brains optimal as well because that technology *exists inside our brains too*, just not phsyically. The metaphor for that is 1) my arm isn't \"inside my body\", but it's clearly me and 2) same goes for my clothes.\n\n## Rest of today\n\nI'm going to go workout with Sarah at a barre class now and then grab lunch. The idea this afternoon is to try my hand at another draft of my plan. I think I've got a good head on my shoulders about it this time.\n\nHowever, I think I'll probably want to come back to it after I finish the future authoring and get through my Bret Victor deep dive. Really, my plan seems like it might be done in time for the new year.", "changes": [[428, 0, "notes/future-authoring.md"]]}, {"committer": {"date": 1512075918, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512075918, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39153cce7edf3a334d0d459986625f70adcdfa97", "parents": ["9c32a183002aa904e18181a02a9c896de2eb8f65", "4e71599f55a539ff09645b3dc9220bdf5af81ee2"], "commit": "b3661b82bdfd27b57597fe3cfc8e44e3383eb8ff", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1512074943, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512074943, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "39153cce7edf3a334d0d459986625f70adcdfa97", "parents": ["edc39b1e2e14641a281790e25a5833d7c3ce5cac"], "commit": "9c32a183002aa904e18181a02a9c896de2eb8f65", "message": "# Read Dynamicland Zine (& merge commit)\n\nAs you can tell by [reading my notes](/notes/dynamicland-zine.md), I was blown away by the Dynamicland zine.\n\n## Things on my mind\n\n### Markdown headers in commit messages\n\nThis is important so that I can link to content via its anchor tag. (Yes this currently doesn't work because this content is currently not rendered as in the github commits page for this repo. I will need to do that at some point soon-ish.)\n\nThis was bothering me so much that I solved it right now. It's as simple as `git commit --cleanup=verbatim` and then just deleting everything but the message. Closing https://github.com/stevekrouse/futureofcoding.org/issues/62.\n\n### Next steps\n\nIt's becomming clearer that my next steps revolve around Bret Victor and Dynamicland. At the very least I need to spend a few hours there, but I could see it being weeks, months or even a year or two.\n\nThis week I worked on:\n\n1) brainstorm \"essay about essays\"\n2) brainstorm \"learn to code\" essay\n3) read and reflect on zine\n4) reflect on goals and work on long-term plan (tomorrow)\n\nThis was a really great week. However, I'm now seeing my work on the \"learn to code\" essay as potentially premature. Or not premature, but not quite as urgent as I thought. It's not like I'm going to forget my hardwon insights from The Coding Space. While I could write something now, I am only going to learn more about these topics as time goes on. And I can always come back to teaching if I need to remember things for the essay.\n\nThe \"essay about essays\" project is also a bit random. However, if Nicky Case would collaborate with me on it, I would drop all my other projects and jump at that chance.\n\nHowever, if left to my own devices, it feels like its time for a Bret Victor deep dive, much like the Alan Kay deep dive that I did a few months back. (You can read about it in [my old journal.](/journal)) Like my Alan Kay deep dive, this one will likely also take approximately two weeks (12/04/17-12/15/17). Then I go home for three weeks (12/18/17-1/4/18) for the holidays. I might do some (no more than 20 hours) work the week of 12/18/17.\n\nThen it's time for a visit to Dynamicland! https://twitter.com/mandy3284/status/936284579333156864\n\nI'll probably go in early Jan, but it depends on when they want me I guess. I'd love to stay for a week or two and work out of the space every day, but I'd be happy to go for even a single afternoon.\n\nAll this said, while I have set aside all day tomorrow to work on my goals and my plan, I may cut that short if it doesn't feel productive to get a head start on my new priority: the Bret Victor deep dive!", "changes": [[1, 0, "index.html"], [134, 0, "notes/dynamicland-zine.md"]]}, {"committer": {"date": 1512047045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1512047045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1771dd4b16f7f94958e73997b9331cd0a78c9619", "parents": ["7c025150fdfefde29750a9772080d32f4ec885b1"], "commit": "edc39b1e2e14641a281790e25a5833d7c3ce5cac", "message": "notes with aidan", "changes": [[33, 0, "notes/aidan-cunniffe-call-11-29-17.md"]]}, {"committer": {"date": 1511974112, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1511974112, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4816b9bca6941e28d7e22acba787f74d97bee118", "parents": ["7c025150fdfefde29750a9772080d32f4ec885b1"], "commit": "4e71599f55a539ff09645b3dc9220bdf5af81ee2", "message": "brainstormed essay about learning to code\n\nI continued my theme of brainstorming/mind-mapping this morning, but with a different essay and also a different medium. The essay topic is learning to code and the medium is a neat platform called coggle. In addition to being easy to use, it also is markdown-based, you can see a history of all previous edits, and it's real-time collaborative. Basically everything I'd want. You can see [my mind map here](https://coggle.it/diagram/Wh6pe8X_9wABwTVA). And here's a picture of it just in case that link doesn't work:\n\n![screenshot 2017-11-29 at 11 36 58 am](https://user-images.githubusercontent.com/2288939/33386902-082b31ba-d4fa-11e7-8aec-730f05df0e0f.png)\n\nVery productive. Really love the medium. One thing I noticed is that part of why mind-mapping software is difficult is that you have to go from abstract to concrete as opposed to being able to list arbitrary nodes and connect them later. I am currently side-stepping this problem by creating a \"TODO\" toplevel node that I can connect random stuff to until I can tell where they are going to best fit in the map.\n\nSpent 3ish hours on it this morning. It also worked great on my iPad, which was really nice. The downside is that I forgot my ergonomic iPad keyboard so I typed on it too much and now my hands hurt a bit.\n\nI am realizing that unlike Prezi, there's no notion of \"path\" to this tool, but I bet I can approximate it by creating a few different duplicates of the base map, and then in the copies, laying out the nodes in various orders. (You can put the nodes wherever you want and the relationships between then will just follow, staying connected.)\n\nI'm going to go get a workout in now, then I have a meeting with someone who wants advice on coding curriculum design with is quite relevant given what I did this morning, and then I chat with Aidan, founder of DropSource.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1511909201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511909201, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b7ab86f7586b66231ded454456959a4a7cb943b5", "parents": ["10f357d435e6b65d02a599a8382dae3ed400b7b0", "901de4946ac4b58e8d32594e9f818d5674ab98df"], "commit": "7c025150fdfefde29750a9772080d32f4ec885b1", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1511909196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511909196, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4816b9bca6941e28d7e22acba787f74d97bee118", "parents": ["c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2"], "commit": "10f357d435e6b65d02a599a8382dae3ed400b7b0", "message": "added episdeo 17 bubble.is emmanuel", "changes": [[87, 0, "episodes/17-bootstrapping-bubble-is-emmanuel-straschnov.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1511903074, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1511903074, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "498f6b732502c13f25e38922f9292b3b5a2e2b3d", "parents": ["c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2"], "commit": "901de4946ac4b58e8d32594e9f818d5674ab98df", "message": "essay about essay brainstorm\n\nGiven that I don't have a title for this essay, I thought it would make more sense to create a github issue for it because those are referenced via unique ids as opposed to their changeable names. (Aside: in writing that last sentence, I realized that I could simply create a `/drafts/` directory and name each of its children elements the same way github issues does: `/drafts/001`, `/drafts/002`. When I settle on a title, I could move the content into the `/essays/` directory and reference it via its name, not its id.) However, I want this log to consist of all work I do on this project, even if it's work outside of a set of changes to files in this directory, so this messages links to my work this afternoon on the \"essay about essays\": https://github.com/stevekrouse/futureofcoding.org/issues/63#issue-277535475", "changes": [[0, 1, "index.html"]]}, {"committer": {"date": 1511884759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1511884759, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4e579e49d84487d32cd674eaf05766ed0405f1c", "parents": ["ddc8cd46aa2f84aa6032eb181dd091b620efa066"], "commit": "c8afd63dbd0c37c8d0ede5f01ed9a3209a8461a2", "message": "Back from sickness and vacation\n\nThe past two weeks didn't go as planned. If you're following this journal, you'll notice that I haven't made any entires or commits for two weeks. This was mostly because I was still(!) feeling sick. Finally I was diagnosed with strep throat, and am feeling a lot better today. Tomorrow is my last dose of antibiotics so hopefully I'll get back to running tomorrow or the day after.\n\nNote: [the entry prior to this one](https://github.com/stevekrouse/futureofcoding.org/commit/8274ccb120bb3781402aed0a9e1d99242b95a479) is fairly defeated in tone. This is because (1) I was unexpectedly starting to feel sick (again) and didn't want to believe it, and (2) I was trying to get too much done in the time allotted. A recipe for defeatedness. I'm feeling much better about things now. Plenty of things to do but one step at a time. Plenty of time to address them all. Most important ones first.\n\nDespite what it says in my plan at the moment, my next step will not be creating a Patreon. This is because (1) the value accrued from having a Patreon up before creating my content probably isn't that high (look at how Vi Hart raised $6k in just a few days on her reputation), (2) it takes a while to get a strong following on a Patreon so the money wouldn't mean much, (3) it's a distraction from focusing on the work the will actually help move me forward at this juncture (planning, reading, writing).\n\nI'm very excited about a potential upcomming collaboration with Nicky Case. On our phone call a few weeks back, I asked him for advice on writing essays and he outline his thoughts in what will hopefully be an essay he and I collab on. That sounds like a lot of fun! It would be great to have a small win under my belt. Despite it likely not being the absolute highest priority right now, it's in the right direction. In other words, even though my Work Plan isn't quite done, I still have a pretty strong feeling that this small detour would move me closer to accomplishing it. As I told Nicky, I have ~20 hours this week to work on the essay. But really there's no rush. I can work on other things this week and come back to that next week.\n\nAnother thing on my mind is the unbreakable-links project. This project has taken much longer than expected. Just another opportunity for me to improve my currently highly inaccurate planning skills. The short-term solution is quite reasonable: whenever I want to move or delete a file in this directory, I simply have to think through what will happen to all prior links to that page. I do this well with the now deprecated /journal page.\n\nOk, so now let me think about my priorities:\n\n* Write 3 different outlines for the \"essay about essays\" to send to Nicky Case\n* Publish the now-very-late podcast with Emmanuel from bubble\n* Spend time writing about my goals for this project\n* Deep dive on Bret, read the Zine, send him an email\n* Write 3 outlines about learning/teaching to code (and learning in general)\n* Continue writing FoC plan\n* Schedule meetings with key people (Aidan, Stefan, Samuel)\n* Migrate other blogs from Trello (including AT essay outline)\n* Reach out to guest or two for next week on the podcast\n\nOk, these are all top priorities that need to happen in the next week or so. The order I do them in doesn't matter much. Let's go ahead and put them on my calendar in blocks, so I can visualize what I can get done and move them around as needed.\n\nThis is what it looks like now:\n\n![screenshot 2017-11-28 at 10 52 36 am](https://user-images.githubusercontent.com/2288939/33329341-51f477f0-d42a-11e7-9091-4d6d3a72a3ff.png)\n\nI'm feeling happy and aligned with this. I am now noticing that this would be in contradiction with what I told Casey, that I have ~20 hours for this project. Depending on how our conversation goes, I can always bump one of these blocks to next week no problem and manufacture 20 hours here. However this is the plan if he doesn't want to work on this this week.\n\nYou may have noticed that I'm more structured today than usual. This is (1) because I have not been regular about my entries the past few weeks and am feeling a bit adrift, and (2) I fell into a Jordan Peterson YouTube hole last night and he says some pretty straightforward things about happiness, including that you need structure. The first question he asks someone who's depressed is, \"do you have a job?\" If the answer is no, then his answer is get one, even if it's not perfect. It will set you up for success. So while I don't want to follow the letter of his advice, I do want to add a little more structure to my life to stave off any kind of emotional turmoil from working alone and jobless.", "changes": [[1, 1, "plan.md"], [2, 0, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510614499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "71db4d50bad3abfeb7f75b057f16106a90e2dccb", "parents": ["4bc7bc623ab7a36942aaba224a906eacf5aaa49c"], "commit": "ddc8cd46aa2f84aa6032eb181dd091b620efa066", "message": "Why is my plan so ugly?\n\nI was hoping to publish my work plan by the end of day today but I don't like it. My thoughts are all over the place. I don't like the summary of steps at the end. It needs more work than I can do right now. Let's not rush.\n\nAs crazy as it sounds, I think I want to create a new work plan from scratch yet again. Hopefully it will be the last time. In particular I want to think through the steps of the plan and the timeline.\n\nI'll also be working on the content for my Patreon in the next few days. I expect that to launch in the next few weeks.\n\nFinally, I am starting to rethink the homepage design. Maybe I'll add some photos. Maybe I'll feature certain content. I could think about the \"user flow\" as opposed to simply listing all content by date.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1510614433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614433, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ad171474165c0672a33bb4046836c72ca12055a1", "parents": ["f01ac82f0d9a4b1f4737a4898e9d52f9af155e26"], "commit": "4bc7bc623ab7a36942aaba224a906eacf5aaa49c", "message": "simplified plan a bit, workshopped steps in summary", "changes": [[9, 11, "plan.md"]]}, {"committer": {"date": 1510614400, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510614400, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c47663b5453b6152010f6f8dad1b3a33666d671", "parents": ["e7b1554e7fb445ecc59ce0763425ba6c45ef5c80"], "commit": "f01ac82f0d9a4b1f4737a4898e9d52f9af155e26", "message": "updated homepage text", "changes": [[3, 3, "index.html"]]}, {"committer": {"date": 1510612584, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510612584, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "81f053101a1aedcc144c0dc3d71c6bd50f77aa67", "parents": ["fd033c0fa0046e7840435199538f728a0abf9dc1"], "commit": "e7b1554e7fb445ecc59ce0763425ba6c45ef5c80", "message": "edited plan, refactored out principles to own file", "changes": [[33, 117, "plan.md"], [63, 1, "principles.md"]]}, {"committer": {"date": 1510362157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510362157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "be0bc3e48825268c45f09f1cca7013fc57ea2422", "parents": ["d5492388bcd2139280dfd1d6feb13acef64b2b96"], "commit": "fd033c0fa0046e7840435199538f728a0abf9dc1", "message": "rest of nicky case notes", "changes": [[26, 2, "notes/nicky-case-call-11-1-17.md"]]}, {"committer": {"date": 1510360672, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510360672, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d1da8849e8cf094e008bbf8132f5c75af6e214b9", "parents": ["b07bd388f11e87e2fa8309b982501167edabb72b"], "commit": "d5492388bcd2139280dfd1d6feb13acef64b2b96", "message": "added notes nicky", "changes": [[91, 0, "notes/nicky-case-call-11-1-17.md"]]}, {"committer": {"date": 1510350681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350681, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "23942bb57adbacc8c14b140df306e3b30b06e4db", "parents": ["450731af5170267fe7cd19718809a04ba17b527a"], "commit": "b07bd388f11e87e2fa8309b982501167edabb72b", "message": "fixed heading names and levels", "changes": [[2, 2, "plan.md"]]}, {"committer": {"date": 1510350578, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350578, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ca9cc6e749bb654c2aebf72295c3d137e86b7b5f", "parents": ["a0c8787fd9c798bf8e6e6a331df569ca8a6da491"], "commit": "450731af5170267fe7cd19718809a04ba17b527a", "message": "fixes formatting with elon plan", "changes": [[3, 0, "plan.md"]]}, {"committer": {"date": 1510350435, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350435, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1b50713e8ffefcd578f6da13f1536758a5a0820d", "parents": ["156ccaebf2b0c456f32bd921d515e8346b927509", "1db7c38a542b241e95453d4164795bb3eea82939"], "commit": "a0c8787fd9c798bf8e6e6a331df569ca8a6da491", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1510350059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510350059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "12e199fdac3caacf994a6089c3e3dc455944d9f5", "parents": ["f87424ddb968181c85ff2769038d33604b0a2bca"], "commit": "156ccaebf2b0c456f32bd921d515e8346b927509", "message": "Done (for now) with plan (I think)\n\nI know the title of this commit doesn't inspire confidence but I think this plan is in a good place. Good enough for me to move on to step 1 of it at least. I'm sure I'll be back here, rethinking things soon enough.\n\n* It feels like every time I come back to working on this plan, I delete everything and start over again. That's not neccesarily a bad thing.\n\n* It's such a bummer to me that I have to write these journal thoughts somewhere random and then copy and paste them into the commit message at the end of my work even though I'm now writing them before I get started. Why can't the commit have a home before you finish the commit?! (Brainflash! I should've just commited the above thoughts to the repo without any changes this morning!)\n\n* Version control is definitely a topic I want to think about more. Really \"version control\" isn't the write word for it. It's more \"iterating on software\" or \"the software workflow\". Managing versions of software is a different problem. The elements of change guy is really the only one I know who's really thinking about this in a thoughtful way.\n\n* I'm not sure where my fustration with this plan is coming from: 1) my lack of progress on it the last few weeks because of my sickness and taking too many meetings, or 2) not having enough data to make a good decision here.", "changes": [[187, 201, "plan.md"]]}, {"committer": {"date": 1510265094, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1510265094, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "13e71a2ec706e71b6ba2b3e3d96b19f34788b6ed", "parents": ["f87424ddb968181c85ff2769038d33604b0a2bca"], "commit": "1db7c38a542b241e95453d4164795bb3eea82939", "message": "fixed comment", "changes": [[2, 2, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510236314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510236314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f1e0d54051e18ec20aa6650fbaa0996d24dd75b1", "parents": ["28dce347e9229fa35001a1a8080b12dcdc1f9b70"], "commit": "f87424ddb968181c85ff2769038d33604b0a2bca", "message": "continued working on plan, outline, goals, why", "changes": [[231, 135, "plan.md"]]}, {"committer": {"date": 1510236291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510236291, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f852842e5c3556c17c9cdbe7a2f2ffff9417f6b9", "parents": ["cfd9d3294bd50e528c765c64f0ed1f9647be5ff7"], "commit": "28dce347e9229fa35001a1a8080b12dcdc1f9b70", "message": "added console logs to unbreakable-links", "changes": [[4, 2, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192284, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192284, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2f49ad62c56d2c81b7478157c312042ba7b33ff8", "parents": ["0ed4b75012d6096616f817809f3fd652b81d2e72"], "commit": "cfd9d3294bd50e528c765c64f0ed1f9647be5ff7", "message": "removed extra slash in rawGitLink", "changes": [[1, 1, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192226, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0812f991a3247ff127d16fdcb553a783eb6b20e2", "parents": ["20466a6b954078a6d5f9a022a146f584bb6b29f8"], "commit": "0ed4b75012d6096616f817809f3fd652b81d2e72", "message": "added unbreakable-links as non-repo", "changes": [[43, 0, "unbreakable-links/README.md"], [182, 0, "unbreakable-links/index.js"]]}, {"committer": {"date": 1510192203, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510192203, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "dc2b9252940e907b7f1a69dcce1a2a2cc64491ba", "parents": ["33fb63a15272ba275159f6ea7d5fad73e769d4d4"], "commit": "20466a6b954078a6d5f9a022a146f584bb6b29f8", "message": "removed unbreakable-links repo", "changes": [[0, 1, "unbreakable-links"]]}, {"committer": {"date": 1510191940, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191940, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "02e0602685bb5c71e8f7ddd9db2ebf5aab5efb73", "parents": ["907a770fa718d4a427b004de626b84d7136d2338"], "commit": "33fb63a15272ba275159f6ea7d5fad73e769d4d4", "message": "added unbreakable-links repo inside futureofcoding.org", "changes": [[1, 1, "404.html"], [1, 1, "README.md"], [1, 1, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "ideas.md"], [1, 1, "index.html"], [1, 1, "journal.md"], [1, 1, "links.md"], [1, 1, "log.html"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"], [1, 0, "unbreakable-links"]]}, {"committer": {"date": 1510191647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191647, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4a2ddc613b0d757865dcc063698af054a43b33b2", "parents": ["c8575bdededdfa8c002aaedfb673cda219b6aa69"], "commit": "907a770fa718d4a427b004de626b84d7136d2338", "message": "update unbreakable-links", "changes": [[1, 1, "404.html"], [1, 1, "README.md"], [1, 1, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 1, "episodes/14-research-recap-seven-master-planning.html"], [1, 1, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 1, "ideas.md"], [1, 1, "index.html"], [1, 1, "journal.md"], [1, 1, "links.md"], [1, 1, "log.html"], [1, 1, "notes/aaron-kent-call-9-15-17.md"], [1, 1, "notes/andre-staltz-call-10-9-17.md"], [1, 1, "notes/andre-staltz-call-9-11-17.md"], [1, 1, "notes/dan-scanlon-call-9-5-17.md"], [1, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 1, "plan.md"], [1, 1, "principles.md"], [1, 1, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1510191053, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191053, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a152934795d857eec9035c211775267aee621372", "parents": ["dd3cce6ec160fdb5bed4c5b0277f1b07a6af8470", "396a87c9e52755cf661539af8df7c275bc2887b3"], "commit": "c8575bdededdfa8c002aaedfb673cda219b6aa69", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1510191047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1510191047, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f24af8e67d18de1367e05e31b60e4775631c2a1f", "parents": ["8faf11d570d5d716fba086fb52c7da19abcbd57d"], "commit": "dd3cce6ec160fdb5bed4c5b0277f1b07a6af8470", "message": "added unbreakable-links, simply ?version=", "changes": [[1, 0, "404.html"], [3, 1, "README.md"], [1, 0, "about.md"], [1, 1, "episodes/1-welcome.html"], [1, 1, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"], [1, 1, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 1, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 0, "episodes/14-research-recap-seven-master-planning.html"], [1, 0, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 0, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 1, "episodes/2-research-recap.html"], [1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/4-research-recap-two.html"], [1, 1, "episodes/5-samantha-john.html"], [1, 1, "episodes/6-research-recap-three.html"], [1, 1, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"], [1, 1, "episodes/8-research-recap-four.html"], [1, 1, "episodes/9-research-recap-five.html"], [1, 0, "ideas.md"], [1, 1, "index.html"], [2, 1, "journal.md"], [1, 0, "links.md"], [1, 0, "log.html"], [14, 0, "notes/aaron-kent-call-9-15-17.md"], [14, 1, "notes/andre-staltz-call-10-9-17.md"], [14, 0, "notes/andre-staltz-call-9-11-17.md"], [2, 1, "notes/dan-scanlon-call-9-5-17.md"], [2, 1, "notes/jaime-brandon-call-9-5-17.md"], [1, 1, "notes/niko-autio-microeditor.html"], [1, 0, "plan.md"], [2, 1, "principles.md"], [0, 1, "prototypes/github-embed-footer"], [1, 0, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1510064943, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1510064943, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ee32cc6c376fde14bf2daa83eac972ed5b02ab3c", "parents": ["8faf11d570d5d716fba086fb52c7da19abcbd57d"], "commit": "396a87c9e52755cf661539af8df7c275bc2887b3", "message": "Plan for week 11/7/17\n\nI was planning to spend all of today on my Plan, but I was given a list-minute invitation to a conference that seems like a good opportunity for me so I'm doing that instead.\n\nTomorrow, Wednesday, Nov 8th, I have meetings and other things all day so I won't post here probably.\n\nThursday in the morning I will be here to work on my Plan. In the afternoon I will be meeting with Paul Chuisano of Unison, Lloyd Tabb of Looker, and Emmanuel Straschnov of Bubble.is -- what a lineup!\n\nFriday *all day no matter what* will be reserved for my Plan! I'll also speak with Nicky Case at some point during the day on Friday which will be amazing.\n\nGenerally next week is mostly free for work on my Plan it is my intention to keep it that was as much as possible. NO MORE MEETINGS. NO EXCUSES.", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1509991068, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509991068, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b2cf2a51cee49d6b7e8b365112a6a1ff22ee766c", "parents": ["1fa1f9a1271ed349756895056b4e0f67be397375"], "commit": "8faf11d570d5d716fba086fb52c7da19abcbd57d", "message": "Update episode 16 date", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1509990880, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509990880, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "38e59e7f086ab470f4d180699a230cdeb5903aed", "parents": ["94a8c0eaa3bf68e5585f8e35d9cc170fd12a84d1"], "commit": "1fa1f9a1271ed349756895056b4e0f67be397375", "message": "Added omnycast embed", "changes": [[1, 1, "episodes/16-research-recap-eight-life-and-work-planning.html"]]}, {"committer": {"date": 1509974389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974389, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c3b5ce25f9c6f9352b1161e8156a5aa9435bf361", "parents": ["1767d80bf19dc8e73a8b4fc43b6b49a4b0941420", "c9357da92284c501906eb64ec3e076845542dd4c"], "commit": "94a8c0eaa3bf68e5585f8e35d9cc170fd12a84d1", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1509974384, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974384, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "01a67431a36b3e7d5320c5b7916d32a9803c62c3", "parents": ["4a47728ae82754e62dca5d7e3d522f024e6e3639"], "commit": "1767d80bf19dc8e73a8b4fc43b6b49a4b0941420", "message": "added 16 research recap eight notes", "changes": [[184, 0, "episodes/16-research-recap-eight-life-and-work-planning.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1509974364, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1509974364, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c642b2b9b442f4fa3ff1b0123e51a84ed27aed", "parents": ["4e5f04eaf871dc63c8e1a93634254e3077348fdb"], "commit": "4a47728ae82754e62dca5d7e3d522f024e6e3639", "message": "fixed typo with 14 research recap seven", "changes": [[152, 0, "episodes/14-research-recap-seven-master-planning.html"], [0, 152, "episodes/14-research-recap-six-master-planning.html"], [1, 1, "index.html"]]}, {"committer": {"date": 1509751200, "timezone": "-0400", "name": "steveykrouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1509751200, "timezone": "-0400", "name": "steveykrouse", "email": "steveykrouse@gmail.com"}, "tree": "a90505c06c56b8bcff043f6db70c49277593b5b2", "parents": ["8090ac51b758cce4ecb9393734f77fbb56f5734f"], "commit": "c9357da92284c501906eb64ec3e076845542dd4c", "message": "Created new outline for Future of Coding Plan\n\nDon't have time now to explain. It's a mess in there. It begins with the things I need to do next on this project. Then it's an outline. Hope to clean it up soon!", "changes": [[179, 214, "plan.md"]]}, {"committer": {"date": 1509378954, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509378954, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c24fa648e5af641c77c73a264355b58f04db64f4", "parents": ["e533b31f0b395cfb2f982e05bc3df3c030534b03"], "commit": "8090ac51b758cce4ecb9393734f77fbb56f5734f", "message": "Started new version of the Future of Coding Plan\n\n## Future of Coding Plan progress\n\nI’m really excited about the direction this version of the plan is taking! There are still a lot of thinking and analysis that needs to happen here, as well as organizing my thoughts, combining them with /about.html, and also doing a bit more research on this topic, and getting feedback on this plan from friends and experts. In particular I am really excited to continue reading Doug Engelbart’s Paper on Augmenting Human Intelligence and seeing the demo — I think that will help me with this plan and also my world plan which I had trouble working on last week, partially because I was sick and partially because it’s probably part-three of my planning series, instead of part-two. This future of coding plan is probably part two. I know this because I was stuck on my World Plan at the Future of Coding section, where if I finish this one first, I can just link to it there in my World Plan. As far as the other sections of my plan... we’ll see what I come up with.\n\n## Still Sick\n\nI have been taking a while to kick this cold. I feel bad about missing my first week of the podcast last week. It looks like I’ll also be missing this week’s interview because I didn’t do that last week either. Instead of making myself crazy and trying to rush it all in, while at the same time catching up on the last two weeks, and continuing to get better, I’m going to give myself a pass and take this week off from the podcast as well. If any of my listeners out there are worried or wondering where I am and have a suggestion for a better way for me to communicate that I’m taking weeks off, please let me know. I guess I could release a dummy 2-minute podcast episode just saying that I’m sick and won’t be on this week but that feels strange.\n\n## Newfound patience\n\nA number of factors have conspired together to lend me much more patience towards this project — and others in my life — than I had before. There were two main factors that were causing my impatience:\n\n1) when your self-defined job-description is “creating the future” of something, you have to imagine what the future could hold in store, and then bring it back for all of us in the present. However inherent in this is noticing all of the ways the present is lacking and how much we could all benefit from these future benefits now now NOW!\n\n2) I have all sorts of hangups around being a wunderkind. In fact at my last job, that was a nickname they had for me. Now that I’m noticing this pressure, I’m able to have it affect me less.\n\n3) The ideal perspective on changing the world would be wanting the outcome to happen, and truly not caring who accomplishes it or gets the credit. Not only to I want to hold myself to this standard in practice, but deep in my bones I want to be happy when a friend shows me a “competitors” product, not scared or anxious as I feel now. In fact, I want to see all people as collaborators in our shared project of making the world a better place. This is an important emotional reaction to recognize and try to shift. I think it’s similar to the project of overcoming jealousy that I began to undertake as it relates to romantic relationships after reading “Sex at Dawn” which taught me about how romantic jealousy isn’t as natural or positive as I was lead to believe growing up.\n\nCombined with my new love of Essentialism and focus, this newfound patience is giving me better perspective, particularly around the planning fallacy. Instead of assuming things will happen magically in nights and weekends, I now see that I need to allocate the appropriate amount of time for things that are important to me, such as wrapping up my work at The Coding Space and on WoofJS with a neat bow on top, as well as planning my next steps for this project. Instead of thinking I could squeeze these things in in the next few weeks, I am now content for them to take me months or even the next full year.", "changes": [[233, 0, "plan.md"]]}, {"committer": {"date": 1509031277, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509031277, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "17e7b9d52cb56d82997ddf162bc6e1facd37873f", "parents": ["2b21ab29251d10602e4abea6232b8474235f6240"], "commit": "e533b31f0b395cfb2f982e05bc3df3c030534b03", "message": "add slack group invite", "changes": [[7, 1, "index.html"]]}, {"committer": {"date": 1509030647, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509030647, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ed3d0c57f45fa06a77d5601d73f5c4eff0406332", "parents": ["400dcee5064a95264982615a1222fc0686cd4136"], "commit": "2b21ab29251d10602e4abea6232b8474235f6240", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1509030219, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509030219, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b20460c9aebe67fbc538b447b8d013aa843848c6", "parents": ["79518c546497bcb565fb72e92bf531a9c474e9d6"], "commit": "400dcee5064a95264982615a1222fc0686cd4136", "message": "more links from glench", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1509029297, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509029297, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1a9c109352e4b83a5a92f0d6c3aa93b38e442ab8", "parents": ["b882bf061a360082134b3b53f24dee4cffb3c3f3"], "commit": "79518c546497bcb565fb72e92bf531a9c474e9d6", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1509028473, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1509028473, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d3071cbae933ba4f8e4ed90ddff27c7e8e6466e8", "parents": ["1612a59ec5b026b0a39442a27302981ae39a49c8"], "commit": "b882bf061a360082134b3b53f24dee4cffb3c3f3", "message": "links from emmanuel schnazer", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1508953160, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508953160, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e13e1de47e0ecdb948d40e191b8e99ffdd753a32", "parents": ["32007660a94ba778b36115df3e559fac170f9a80"], "commit": "1612a59ec5b026b0a39442a27302981ae39a49c8", "message": "links from omar rizwan", "changes": [[13, 0, "links.md"]]}, {"committer": {"date": 1508863470, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508863470, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c2dfc126b5586f1cdf84b8515c3af17f0e642e49", "parents": ["b5b01b56685c127991f0db40997d12b139f0c716"], "commit": "32007660a94ba778b36115df3e559fac170f9a80", "message": "recovering from a sore throat\n\nI came down with a sore throat this weekend, which was pretty bad yesterday and mostly better today. Yesterday I was planning to do my research recap, meet with Yair from Lamdu and record an episode with him, and go to the Future of Programming meeting. Unfortunately, I was able to do none of that, but I did find the energy to work on https://github.com/stevekrouse/unbreakable-links which is both important to work on and a very fun project for me.\n\nToday I'm feeling a lot better, but I still don't want to push myself, especially because I want to conserve my energy for the MoMath fundraiser that I was invited to by Pete Muller when I bumped into him at Springsteen on Broadway and he heard that I'm a Mitch Resnick fan, and that he'll be there tonight! I'll have to make sure to finish his book in the next few hours...\n\nAs far as my main focus, my #1 priority these days is my Planning Series, which starts with \"Life Plan\", then \"World Plan\", and finally \"Future of Coding Plan\". The first two will live on stevekrouse.com and the third will live here, probably on futureofocoding.org/about or futureofcoding.org/plan.\n\n### Just Plans\n\nAs you may notice, I have decided to stop referring to these plans as \"master plans\" for a few reasons: 1) \"master\" is a word with strange slavery connotations (it also makes me uncomfortable to have \"master\" branches in git but one problem at a time), and 2) it makes me feel less egotistical to have \"plans\" as opposed to \"master plans.\"", "changes": [[0, 1, "log.html"]]}, {"committer": {"date": 1508425262, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425262, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "89668065cd30dc68262f9078821c1ccb3424435f", "parents": ["8ab8877ec56965901c690932cc214f9756af6755"], "commit": "b5b01b56685c127991f0db40997d12b139f0c716", "message": "where I've been\n\nOver the last few days, I haven't been pushing nearly as much to this as I used to for two reasons:\n\n1. I am working on unbreakable-links which will allow me to more freely edit the structure of the site, which is key because I need to change it.\n\n2. I am master planning. You can read my life master plan here https://docs.google.com/document/d/1tycCeK3FbOVqiz6xcePqr1iE0QTfsqpEgn4XUsXfuRM/edit", "changes": [[1, 0, "log.html"]]}, {"committer": {"date": 1508425164, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425164, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c2dfc126b5586f1cdf84b8515c3af17f0e642e49", "parents": ["d6f8951ec824b3c2835f35c5b9e661d9a628155b"], "commit": "8ab8877ec56965901c690932cc214f9756af6755", "message": "Create log.html", "changes": [[9, 0, "log.html"]]}, {"committer": {"date": 1508425063, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508425063, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e8a668dc762bef223c51f029866fca2959f8ffe4", "parents": ["3d17f10c8b4a0cc457be40f0462cfb57593e5038"], "commit": "d6f8951ec824b3c2835f35c5b9e661d9a628155b", "message": "this journal is officially deprecated -> /log", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1508421096, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508421096, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f76442aaae01fdcaa668ea09c9a0693cc2e8518f", "parents": ["4e5f04eaf871dc63c8e1a93634254e3077348fdb"], "commit": "3d17f10c8b4a0cc457be40f0462cfb57593e5038", "message": "Update links.md", "changes": [[19, 1, "links.md"]]}, {"committer": {"date": 1508274114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1508274114, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1c41d937996106403073a9d4bd1669d340a48c53", "parents": ["ed3c55f65bc94654499ffd33c3650722cba6d58e", "793fef9f1fe23c820c98c6ed9af4195764448f40"], "commit": "4e5f04eaf871dc63c8e1a93634254e3077348fdb", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1508274090, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1508274090, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "74b50e49285e7f879aaee0a04f36615a09c67e67", "parents": ["1a9b47ce0b6dfaafa993870f343d8f43df417bed"], "commit": "ed3c55f65bc94654499ffd33c3650722cba6d58e", "message": "added 15 interview with scott mueller", "changes": [[90, 0, "episodes/15-raising-genius-with-scott-mueller.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1508255997, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508255997, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d41f732391bb57eba285014bd4b3fd3227db606c", "parents": ["4335744ea1022870a7b391845410a1929bfb03be"], "commit": "793fef9f1fe23c820c98c6ed9af4195764448f40", "message": "Update links.md", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1508251854, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508251854, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "53612b078c76fffe8bc1f2a9c6d1a44baaa65a0b", "parents": ["b8026c26bc95651e3cb625cc9c7a0783dd589f9d"], "commit": "4335744ea1022870a7b391845410a1929bfb03be", "message": "Working on my life master plan...\n\nI feel bad for neglecting this site for the past few days. I've been working hard on my master plan for my life and I'll be back here shortly to continue working on my master plan for this project!", "changes": [[2, 1, "about.md"]]}, {"committer": {"date": 1508251162, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508251162, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ccd292b742ba246f551cdd508c6c9a09a14e9e40", "parents": ["343e9703c7b009ce7beb0ae57d4b827e45a298e8"], "commit": "b8026c26bc95651e3cb625cc9c7a0783dd589f9d", "message": "Update links.md", "changes": [[7, 0, "links.md"]]}, {"committer": {"date": 1508248862, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1508248862, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1cf43afb879a4f08521a869a7c66f0b8dfada65f", "parents": ["1a9b47ce0b6dfaafa993870f343d8f43df417bed"], "commit": "343e9703c7b009ce7beb0ae57d4b827e45a298e8", "message": "links from glen chiacchieri", "changes": [[9, 2, "links.md"]]}, {"committer": {"date": 1507574614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507574614, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2456bc8bdb13503301429cc7c2ded8a825df6b80", "parents": ["6d57e56f4a7c6eceba6ba109122fd203afc4fe74"], "commit": "1a9b47ce0b6dfaafa993870f343d8f43df417bed", "message": "added link to embed podcast for episode 14 research recap seven", "changes": [[1, 1, "episodes/14-research-recap-six-master-planning.html"]]}, {"committer": {"date": 1507561834, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507561834, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d08fae6283dace3047af828fa1fcc6130c3d9455", "parents": ["1c18aa8db46efb74679c80c23886d890baa7ed3b"], "commit": "6d57e56f4a7c6eceba6ba109122fd203afc4fe74", "message": "added to index.html and switched id to name attribute to make anchor tags work", "changes": [[19, 18, "episodes/14-research-recap-six-master-planning.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1507561360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507561360, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "84e47cee8913e8094eb828af6f74b1e3b7bec73a", "parents": ["2e39f9a323775dbe08b9702866a2ace6db8a1451"], "commit": "1c18aa8db46efb74679c80c23886d890baa7ed3b", "message": "added episode 14 research recap seven without omnycast link", "changes": [[151, 0, "episodes/14-research-recap-six-master-planning.html"]]}, {"committer": {"date": 1507558423, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507558423, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c460ee5d4924e672735eeb8a3217d2f422fc67bf", "parents": ["16321d65a0381b78a1aa049d4666aadac9db8319"], "commit": "2e39f9a323775dbe08b9702866a2ace6db8a1451", "message": "added andre staltz call 10-9-17", "changes": [[232, 0, "notes/andre-staltz-call-10-9-17.md"]]}, {"committer": {"date": 1507307045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507307045, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "08c170b14192d864020593446dae6a9ac2717e18", "parents": ["915b40a2d6de7337f6f9a224118d60c042dbe804"], "commit": "16321d65a0381b78a1aa049d4666aadac9db8319", "message": "Continued developing master plan\n\nI've been making a lot of progress in the past few days, thinking about this project at a high level. I made a lot of progress in the shower this morning:\n\n![image](https://user-images.githubusercontent.com/2288939/31288236-13809c5e-aa92-11e7-8ba7-7dadee620891.png)\n\nThere are a few next steps:\n\n1. Articulate my prototype ideas for StreamSheets, Scratch or WoofJS FRP (and come up with a name for this), generic GUI for langauges, and more if I have them.\n\nhttps://github.com/stevekrouse/futureofcoding.org/issues/54\nhttps://github.com/stevekrouse/futureofcoding.org/issues/55\n\n2. Spell out my design principles.\n\nhttps://github.com/stevekrouse/futureofcoding.org/issues/9\n\n3. Send my master plan around to friends.\n\n4. Consider the future organization of the website and if now's a good time to go for it. https://github.com/stevekrouse/futureofcoding.org/issues/53", "changes": [[75, 40, "about.md"], [1, 1, "ideas.md"], [19, 0, "principles.md"], [0, 19, "thesis.md"]]}, {"committer": {"date": 1507292452, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507292452, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "446069bac45860fdeb2dbf71f874b4a1f4a7e9cc", "parents": ["b6e0e47ac0fb3b1bb0555270438ca0235eff4bb3"], "commit": "915b40a2d6de7337f6f9a224118d60c042dbe804", "message": "testing to see what long commit messages look like\n\nCan you see this message?\n\nHow about [this link](http://futureofcoding.org)?\n\n# How about this header?", "changes": []}, {"committer": {"date": 1507209851, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507209851, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "446069bac45860fdeb2dbf71f874b4a1f4a7e9cc", "parents": ["b5cf6d2d524a94e0e08f5dd9b6e7c37f0c4a4369"], "commit": "b6e0e47ac0fb3b1bb0555270438ca0235eff4bb3", "message": "journal death knoll and streamsheets write up", "changes": [[14, 0, "journal.md"]]}, {"committer": {"date": 1507207405, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507207405, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d81876d33a73c9f4e6df6488ad5b7c0f005bcea3", "parents": ["51f4a7a85eba79d9b31ec0281db9dc792e9f581e"], "commit": "b5cf6d2d524a94e0e08f5dd9b6e7c37f0c4a4369", "message": "added petri nets", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1507134430, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507134430, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1d5c3de320240927bf73edf6d420a47f7dfb2544", "parents": ["cc0f4b85157657f02e8da17ba9c3c19bb3333d80"], "commit": "51f4a7a85eba79d9b31ec0281db9dc792e9f581e", "message": "added children programming languages paper", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1507053916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507053916, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "cc98c9e8e78a0d11b104ebcda198828b07d4bf9c", "parents": ["babbf695b718c41eb7aba3bd2f33708dcf0938fd"], "commit": "cc0f4b85157657f02e8da17ba9c3c19bb3333d80", "message": "lowered header predecede of structural editor subheadings", "changes": [[6, 6, "journal.md"]]}, {"committer": {"date": 1507053844, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1507053844, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4fbcdf25acc88e1e39be7cf259d33a74a51d4961", "parents": ["f25ab2fbd97b8da93495d0700aeed53497f7da36"], "commit": "babbf695b718c41eb7aba3bd2f33708dcf0938fd", "message": "structured editing write up", "changes": [[74, 2, "journal.md"], [1, 0, "links.md"], [1126, 0, "notes/niko-autio-microeditor.html"]]}, {"committer": {"date": 1507037911, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507037911, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bb4dfb44103198cd448b8430cc221c3fda554ea1", "parents": ["33b5a65c408c871c930846ddcfafd4cdf9baf70f", "008d0c2d880ec5ef23068db76f9738ec8fcc8e94"], "commit": "f25ab2fbd97b8da93495d0700aeed53497f7da36", "message": "Merge pull request #48 from stevekrouse/episode-13\n\nadded episode 13, waiting for lauch date", "changes": []}, {"committer": {"date": 1507037902, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1507037902, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "73ca0e1da3b72872b3de3d1983ae9da63f57406c", "parents": ["453f2bd02372e5d0a83a1305503dead2bdb2cea4"], "commit": "008d0c2d880ec5ef23068db76f9738ec8fcc8e94", "message": "added omnyfocus embed link", "changes": [[1, 1, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"]]}, {"committer": {"date": 1506986472, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506986472, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "382c89f259e4dfb1c3c69669c81a7eed94f668ff", "parents": ["06113ec98d94d6da98761e4220a7bb8310f672dd"], "commit": "33b5a65c408c871c930846ddcfafd4cdf9baf70f", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506961454, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506961454, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6bbf79229025277f227b4419c4bc7bbb11e44567", "parents": ["d14b429066043a59c3939956d672389dbf6fcf1e"], "commit": "06113ec98d94d6da98761e4220a7bb8310f672dd", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506952183, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506952183, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b917ae14d4a36bc013ad0493b367c3f3ddbb59f6", "parents": ["8663e9c14ef014b58aabb65a886f60b7fad82c45"], "commit": "d14b429066043a59c3939956d672389dbf6fcf1e", "message": "elm flappy, andre and nick, juan benet master plan", "changes": [[60, 1, "journal.md"]]}, {"committer": {"date": 1506942662, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506942662, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d97e1d79f71a5a920d3292ef105db9498f24573c", "parents": ["d23405ab51b4e01478a5d52913143be1c4eddcb4"], "commit": "8663e9c14ef014b58aabb65a886f60b7fad82c45", "message": "For -> 4 typo", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1506787197, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506787197, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8bbda671d4075a2340d76ca7ed1db3a1a2f53c46", "parents": ["5bafc3c6095dadcc9acfa8b0dd76f28988d6671a"], "commit": "d23405ab51b4e01478a5d52913143be1c4eddcb4", "message": "started about and thesis", "changes": [[151, 0, "about.md"], [2, 1, "index.html"], [19, 0, "thesis.md"]]}, {"committer": {"date": 1506779504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506779504, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9a38a2e7907bad203a5c4c9cddd9a321a1849a52", "parents": ["5b4673ab621cc3bd485e3a9e53d67aa2090aecb1", "098a7f66a1066f25149342630fbb0bc0f6ec4151"], "commit": "5bafc3c6095dadcc9acfa8b0dd76f28988d6671a", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1506779499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506779499, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f9b2cb7cc6531b44e9aa62437978fb500b088528", "parents": ["ffa8b9769aa090b0e248a3f868699a75350110fc"], "commit": "5b4673ab621cc3bd485e3a9e53d67aa2090aecb1", "message": "addedl linq", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506711945, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506711945, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "09365822356a81eabbad90b4b685f3a40ac70577", "parents": ["9e788a4a54112430c714e091ed0fdcd838013914"], "commit": "098a7f66a1066f25149342630fbb0bc0f6ec4151", "message": "links from @curious_reader", "changes": [[12, 0, "links.md"]]}, {"committer": {"date": 1506701600, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506701600, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "de13e05389881d2ada5014d62c107cc99bfaed40", "parents": ["ffa8b9769aa090b0e248a3f868699a75350110fc"], "commit": "9e788a4a54112430c714e091ed0fdcd838013914", "message": "fun conversations and elm flappy started", "changes": [[20, 0, "journal.md"]]}, {"committer": {"date": 1506692783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506692783, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7f835fbdcd6a146d3e14972e6ab3b6ecdb520623", "parents": ["6aadd6d78159bf6438b9037b95793c07a07814a6"], "commit": "ffa8b9769aa090b0e248a3f868699a75350110fc", "message": "prioritize sideways recipie article", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1506691951, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506691951, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0803adf5c5833fcab2a1c63e34efb38d8a3fc6f2", "parents": ["6aadd6d78159bf6438b9037b95793c07a07814a6"], "commit": "453f2bd02372e5d0a83a1305503dead2bdb2cea4", "message": "added episode 13, waiting for lauch date", "changes": [[102, 0, "episodes/13-teaching-elm-to-4th-graders-christopher-anand.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1506602406, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506602406, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "029df50d2cc31f0dd7cf787334bce1bc7de48c6e", "parents": ["ab9901937fbaf6b0710fc36825ca244b6d42dae2"], "commit": "6aadd6d78159bf6438b9037b95793c07a07814a6", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1506541743, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506541743, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a47ac91df7bb8d2c5b36f7d52e477a3793ed4b00", "parents": ["981a4004ace5afdc5685954b8dbacde3badc878d"], "commit": "ab9901937fbaf6b0710fc36825ca244b6d42dae2", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506538172, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506538172, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "eb5702623785e07a703d0c09b306b27576c257c0", "parents": ["47466607290c0e3647995281735a90d2fdf150e3"], "commit": "981a4004ace5afdc5685954b8dbacde3badc878d", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506531697, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506531697, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4459c1a67ccaa696b8f71422f41c730a6f17ae6d", "parents": ["197aa63952c34ad7fe0ca57bc47e811338af3d1a"], "commit": "47466607290c0e3647995281735a90d2fdf150e3", "message": "finished cyclejs flappy bird", "changes": [[26, 0, "journal.md"]]}, {"committer": {"date": 1506443673, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506443673, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "36d1788d0f71c679b60867d740e7e8b4f0ed2c9c", "parents": ["ed87c919be2eb7160bb9ed115280e7a5cab1d212"], "commit": "197aa63952c34ad7fe0ca57bc47e811338af3d1a", "message": "Update links.md", "changes": [[6, 2, "links.md"]]}, {"committer": {"date": 1506443502, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506443502, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "03e0e1a753c50a7572a22946238597df8dbe32a2", "parents": ["6a64c41a01f998fd57fcccc44f92b39e166ff23b"], "commit": "ed87c919be2eb7160bb9ed115280e7a5cab1d212", "message": "add links from nicolae rusan", "changes": [[6, 0, "links.md"]]}, {"committer": {"date": 1506441573, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506441573, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7f78207fe71e4ffd14ba900373576bcefcfa100f", "parents": ["19d478945d86279da2f7c6eab86273fd72f6f51e"], "commit": "6a64c41a01f998fd57fcccc44f92b39e166ff23b", "message": "Update journal.md", "changes": [[5, 0, "journal.md"]]}, {"committer": {"date": 1506352193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506352193, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7efbde25c25b1b51879f606440fce0db7c24288e", "parents": ["cb152e6c4105cdcbbf26c069d1da1069577308bd"], "commit": "19d478945d86279da2f7c6eab86273fd72f6f51e", "message": "added episdoe 12, research recap six: cyclejs deep dive", "changes": [[86, 0, "episodes/12-research-recap-six-cycle-js-deep-dive.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1506351892, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506351892, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "66be71ecd978e01cb138e1fd1cee4f5d86153dd2", "parents": ["a87ad52062c1ebc591b38b28da5f507aaaaa7ca5"], "commit": "cb152e6c4105cdcbbf26c069d1da1069577308bd", "message": "fix onionify link", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1506346145, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506346145, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c6d51b7622524d355ee364e2e9b634c719428c9e", "parents": ["b90daea3548277613fd882bf911ce5c606e9770e"], "commit": "a87ad52062c1ebc591b38b28da5f507aaaaa7ca5", "message": "research recap 6", "changes": [[48, 1, "journal.md"]]}, {"committer": {"date": 1506116368, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506116368, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7fb7cfb6dc1e6a0ad81263b96160c09d88d0bdf5", "parents": ["cf7b4fc072fa73a47ad989496a21351026c5875a"], "commit": "b90daea3548277613fd882bf911ce5c606e9770e", "message": "Update journal.md", "changes": [[2, 0, "journal.md"]]}, {"committer": {"date": 1506116142, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506116142, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0457a9df66c55dfac378765c7357d0d22cd678c", "parents": ["6c2e63534ab7f2ecd92c7e5c508a5fbb87e3b9d3"], "commit": "cf7b4fc072fa73a47ad989496a21351026c5875a", "message": "Update journal.md", "changes": [[8, 0, "journal.md"]]}, {"committer": {"date": 1506089144, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1506089144, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ba1a6436945d4310dd283ef5f12755299c78fe01", "parents": ["581753a6db254e516301d0c1563e233f6e70ea13"], "commit": "6c2e63534ab7f2ecd92c7e5c508a5fbb87e3b9d3", "message": "to recurse or not to recurse", "changes": [[26, 0, "journal.md"]]}, {"committer": {"date": 1506024610, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506024610, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3c619aca47c07bfe2a44e1e14ac8466c578cdbaf", "parents": ["578124f23089e7a4ca842ab8501ae837e4ca8a74"], "commit": "581753a6db254e516301d0c1563e233f6e70ea13", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1506023134, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506023134, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "554b60b4e14e6093c7b262477625b75c8705d1c2", "parents": ["914e8301e7b9545e1e655a0cef9c6c9ace91b252"], "commit": "578124f23089e7a4ca842ab8501ae837e4ca8a74", "message": "Update index.html", "changes": [[2, 2, "index.html"]]}, {"committer": {"date": 1506023076, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506023076, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "93e2c0796a83718b6710796db9965ba3a5e4373e", "parents": ["ffc282294d72a15b37008e78634716d4a9f7a6e9"], "commit": "914e8301e7b9545e1e655a0cef9c6c9ace91b252", "message": "Update index.html", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1506021281, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506021281, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1fc5e38ca1bf75637cc29bd245abc28fd2505e92", "parents": ["599f367771f45a75400f952e33bb1fb9f185d758"], "commit": "ffc282294d72a15b37008e78634716d4a9f7a6e9", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1506019627, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1506019627, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ef58f17118d2fac3d514b9fefc3162a07990945e", "parents": ["b095cca040ae70c0f3b5290474c4d7a4b8674e71"], "commit": "599f367771f45a75400f952e33bb1fb9f185d758", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505913111, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505913111, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1b364dcc00c752faa58cc6705bca3a01331733c3", "parents": ["3e4c48b6006a11f8ebc059efb738b7f74a37ad33"], "commit": "b095cca040ae70c0f3b5290474c4d7a4b8674e71", "message": "Update journal.md", "changes": [[3, 0, "journal.md"]]}, {"committer": {"date": 1505911811, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505911811, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9e51b88654e147c7d393c0a187ac05be506213f6", "parents": ["ce65837e2716efffcad1fbe84a27a8bc6a80dd4a"], "commit": "3e4c48b6006a11f8ebc059efb738b7f74a37ad33", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1505843561, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505843561, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "05fdd2479253a293c68784bed6393a5d3ce35e21", "parents": ["de134be22d95007c2bfa7eb0567de97b930b5d91"], "commit": "ce65837e2716efffcad1fbe84a27a8bc6a80dd4a", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1505834631, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505834631, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "34e717977d5cf78faf6e86cf24eb33f3035c5c7c", "parents": ["a1a0f723e34db654811a009dcbadea6ba2568d71"], "commit": "de134be22d95007c2bfa7eb0567de97b930b5d91", "message": "added pete hunt episode", "changes": [[89, 0, "episodes/11-how-reactjs-was-created-with-pete-hunt.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1505831458, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505831458, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f139f0d58b68e861f5e3b1ea2c044d324431a62a", "parents": ["3e3f2b81f1cf9dd809bae2357983754b4b897cce"], "commit": "a1a0f723e34db654811a009dcbadea6ba2568d71", "message": "played with cycle, create github-embed-footer", "changes": [[3, 0, ".gitmodules"], [17, 0, "journal.md"], [1, 0, "prototypes/github-embed-footer"]]}, {"committer": {"date": 1505751306, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505751306, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d34875392cce56c005890e7ba944942929246a89", "parents": ["80bd8cddfea62940667194d1b9f06d448a7cb049"], "commit": "3e3f2b81f1cf9dd809bae2357983754b4b897cce", "message": "reorganize to research links by topic", "changes": [[46, 43, "links.md"]]}, {"committer": {"date": 1505748783, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505748783, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "92f8b5aaaebac5b90cdcc6c01eff6217ce612826", "parents": ["f987a210e92c54ebeda8daa166872443014e3f00"], "commit": "80bd8cddfea62940667194d1b9f06d448a7cb049", "message": "Update journal.md", "changes": [[18, 0, "journal.md"]]}, {"committer": {"date": 1505748294, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505748294, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "45887bd5e059568ea6ec62071e50557598876d8a", "parents": ["66f5549361e2562841447bc1d19956046ba120e3"], "commit": "f987a210e92c54ebeda8daa166872443014e3f00", "message": "Update links.md", "changes": [[29, 9, "links.md"]]}, {"committer": {"date": 1505508846, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505508846, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2168b992bd2bbe6ab09f2dbd6fab10400159b65", "parents": ["336815f64b5b0b4f0aeeb7be35b50824acd43653"], "commit": "66f5549361e2562841447bc1d19956046ba120e3", "message": "Update journal.md", "changes": [[9, 0, "journal.md"]]}, {"committer": {"date": 1505508833, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505508833, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ab4ec768b29b1c010609a55dded7622332d2ce73", "parents": ["27ecc929931c792e17e3b590adfd2f09d45e9944"], "commit": "336815f64b5b0b4f0aeeb7be35b50824acd43653", "message": "Update links.md", "changes": [[36, 6, "links.md"]]}, {"committer": {"date": 1505496885, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505496885, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a4d609b11e5251db9fd2e10b9a9bd9b8b0879f69", "parents": ["d2a8c8f6d599ef0717dada1479a38ac4275460ac"], "commit": "27ecc929931c792e17e3b590adfd2f09d45e9944", "message": "Update links.md", "changes": [[10, 5, "links.md"]]}, {"committer": {"date": 1505496877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505496877, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "f155058884fe4d64c732343b37f47f3dc4a10b7b", "parents": ["a7a6d5708dd6d1837e78d043d5e2c54fc2df5b22", "7b2e4f5d2164c753e40ee27c05dc8610eb19f3d3"], "commit": "d2a8c8f6d599ef0717dada1479a38ac4275460ac", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1505496871, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505496871, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9ae1a451b5ae06ffe12121b69d74cacc6fdbf7b6", "parents": ["1edb7c948c876ae562dedc76d566899fa9b056c2"], "commit": "a7a6d5708dd6d1837e78d043d5e2c54fc2df5b22", "message": "added aaron kent call", "changes": [[27, 0, "notes/aaron-kent-call-9-15-17.md"]]}, {"committer": {"date": 1505316748, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316748, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "646b776e4727ee9a48a330415d4967ccfae4af8e", "parents": ["9083f5051da2af3702fe6ea1755ee0a4ba6f4054"], "commit": "7b2e4f5d2164c753e40ee27c05dc8610eb19f3d3", "message": "Update journal.md", "changes": [[23, 0, "journal.md"]]}, {"committer": {"date": 1505316484, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316484, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7d9288d7f7a07b6bfb83e7583545fd845ab5b7ce", "parents": ["27ce85bfc298c11c1bb4a22104630b5db2975389"], "commit": "9083f5051da2af3702fe6ea1755ee0a4ba6f4054", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1505316387, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505316387, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a15f6fbf10a7cd4ec53498d0263c35c42ddd75ef", "parents": ["78c146bc2411f5159b04769e584349ea8d251496"], "commit": "27ce85bfc298c11c1bb4a22104630b5db2975389", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1505313069, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505313069, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8ef3c92c6999c913467504db8906f55557767b5e", "parents": ["e0094fce667761206d87e322a5c4875257c3ad5f"], "commit": "78c146bc2411f5159b04769e584349ea8d251496", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1505312891, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505312891, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f4b15059b9ed018982f91ade031ae94d1d127f60", "parents": ["a3b5290a0917e34b321eb614760560ee5a1e4fd1"], "commit": "e0094fce667761206d87e322a5c4875257c3ad5f", "message": "Create 10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html", "changes": [[89, 0, "episodes/10-unisons-paul-chiusano-on-how-abstraction-will-save-distributed-computing.html"]]}, {"committer": {"date": 1505225730, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505225730, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "dbb57d9cbfc7ae96278de7889f8fbd550f4b99a5", "parents": ["b2360fcc457cb6d6a936e68f73e045dd6ffd53b9"], "commit": "a3b5290a0917e34b321eb614760560ee5a1e4fd1", "message": "fix podcast dates", "changes": [[6, 6, "index.html"]]}, {"committer": {"date": 1505225558, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505225558, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3abf2e24b83aab492347229c34b9b1de5ca0d13c", "parents": ["b358b7ae0e0eb99a325ab4317522086ab1384fbd"], "commit": "b2360fcc457cb6d6a936e68f73e045dd6ffd53b9", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1505223682, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505223682, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "eb88c79c85d1f433bdc08f5ab2a1824781470689", "parents": ["9bb940ef8155266aa62b586c546d91923927e413"], "commit": "b358b7ae0e0eb99a325ab4317522086ab1384fbd", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505219671, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505219671, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7bca4b835690ee9ed78e8ad668d75c6c0bdc8d01", "parents": ["680be36767a6f55703869e882a291f7a797c42ae"], "commit": "9bb940ef8155266aa62b586c546d91923927e413", "message": "added links from jaime and andre calls", "changes": [[8, 4, "links.md"]]}, {"committer": {"date": 1505219592, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505219592, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2ff34f9c2f9f83da8f6a74d43bd0a08747883d8", "parents": ["25dabceeb6b549ddd623deab23ca8483f437990c"], "commit": "680be36767a6f55703869e882a291f7a797c42ae", "message": "fix andre call notes links", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1505216260, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1505216260, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bf0b38b0d676956da86ee0868e9b0b1d91a9d463", "parents": ["1edb7c948c876ae562dedc76d566899fa9b056c2"], "commit": "25dabceeb6b549ddd623deab23ca8483f437990c", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1505163409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163409, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "8079d5f18550e388d4ebd094e7b9d1c1d6ae330b", "parents": ["08da893bb261b158b291282d3fc0038453e871e5"], "commit": "1edb7c948c876ae562dedc76d566899fa9b056c2", "message": "update research recap five description and add to homepage", "changes": [[1, 1, "episodes/9-research-recap-five.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1505163167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163167, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5c3138c67c1dc3d95c3028c5c2806f314fbffeb4", "parents": ["ce73581ab1b200248c579630ff295e548186c7f5", "ee8cbb23b6f8faecffcd1c1f4f86e192213024e2"], "commit": "08da893bb261b158b291282d3fc0038453e871e5", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1505163159, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163159, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "bf6a2496f4fdfcf8d4b7fb61117d707db7e5b279", "parents": ["2585cc7b065637f213d3733ba9f26e65bfa00fc5"], "commit": "ce73581ab1b200248c579630ff295e548186c7f5", "message": "research recap 5", "changes": [[106, 0, "episodes/9-research-recap-five.html"], [56, 0, "journal.md"], [4, 0, "links.md"]]}, {"committer": {"date": 1505163149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1505163149, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a7bbd4363513ad3688a7a88bc2a8cc9355da8bbd", "parents": ["095393203920ac6a43f857e32117037b6564b91a"], "commit": "2585cc7b065637f213d3733ba9f26e65bfa00fc5", "message": "add andre staltz 9-11-17 call", "changes": [[118, 0, "notes/andre-staltz-call-9-11-17.md"]]}, {"committer": {"date": 1504902724, "timezone": "-0500", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504902724, "timezone": "-0500", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6a4dbd3cbe4008bfe3f66fe951cb2b454cd5c742", "parents": ["095393203920ac6a43f857e32117037b6564b91a"], "commit": "ee8cbb23b6f8faecffcd1c1f4f86e192213024e2", "message": "Update links.md", "changes": [[4, 2, "links.md"]]}, {"committer": {"date": 1504881181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504881181, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "315c769413167c1097aa5f28d9d93558c6536171", "parents": ["1cf92bf9347818a44971e4246423e206134cff1c"], "commit": "095393203920ac6a43f857e32117037b6564b91a", "message": "bret victor deep dive day #1", "changes": [[9, 0, "journal.md"], [15, 1, "links.md"]]}, {"committer": {"date": 1504799746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504799746, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "84147c6a49636a67043a6c18a94de12d4317a65d", "parents": ["3c61d3a143f71c72400a3f23ce086ef904fbaa06"], "commit": "1cf92bf9347818a44971e4246423e206134cff1c", "message": "alan kay day #5 journal and recap", "changes": [[18, 0, "journal.md"]]}, {"committer": {"date": 1504798819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504798819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b9e5bf6cf7ec1456598bf62512f944e532b40cca", "parents": ["4be18b07ee81247cad4bc031da09f81e29273f43"], "commit": "3c61d3a143f71c72400a3f23ce086ef904fbaa06", "message": "alan kay deep dive day #5 links", "changes": [[3, 0, "ideas.md"], [38, 5, "links.md"]]}, {"committer": {"date": 1504710551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504710551, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "32b48067cb548a9e499cc74b3389122c0dd3f477", "parents": ["31cb36531e9fa145dfb65832af0cdfb90c39258f"], "commit": "4be18b07ee81247cad4bc031da09f81e29273f43", "message": "alan kay deep dive #4, journal", "changes": [[21, 0, "journal.md"]]}, {"committer": {"date": 1504709804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504709804, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "131bb205491e43f2b7f16461d20f15fc5c87f5ce", "parents": ["8fdc3420b50bef161e0324bd964b3cb343540dc4"], "commit": "31cb36531e9fa145dfb65832af0cdfb90c39258f", "message": "alan kay deep dive day #4 links", "changes": [[40, 9, "links.md"]]}, {"committer": {"date": 1504699778, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504699778, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "60cbdc125e992e54e1617ca03524e45fe8094da1", "parents": ["31bccc1f12bef4f2f86fe20d75d2cb4f174a3be9"], "commit": "8fdc3420b50bef161e0324bd964b3cb343540dc4", "message": "added research recap four", "changes": [[86, 0, "episodes/8-research-recap-four.html"], [1, 0, "index.html"]]}, {"committer": {"date": 1504646268, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504646268, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "534aa02511f7420dc31f17634f0479ae0fb76b9f", "parents": ["dce6d46e520dfcedd8638a9cfa090bb060209e38"], "commit": "31bccc1f12bef4f2f86fe20d75d2cb4f174a3be9", "message": "adding lloyd's episode to homepage", "changes": [[7, 6, "index.html"]]}, {"committer": {"date": 1504646082, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504646082, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3dcf4cb21f128692a262f4ee0944219c785a529", "parents": ["9c23199978c05ac8c9795f0a40925db8f812a10b"], "commit": "dce6d46e520dfcedd8638a9cfa090bb060209e38", "message": "added lloyd episode", "changes": [[86, 0, "episodes/7-lookers-lloyd-tab-on-growing-languages-through-deprecation.html"]]}, {"committer": {"date": 1504638064, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504638064, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7960f73fd853389aed4ad1509c50c7beb4c2b670", "parents": ["723e92578386fb3d7afd5200c5a7855c8172cbdd"], "commit": "9c23199978c05ac8c9795f0a40925db8f812a10b", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504637264, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504637264, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "30e885296b52bebebd24c343544652bdbcc9cf0a", "parents": ["04b4251a07635e4e170df62e3e2fb7eade439817"], "commit": "723e92578386fb3d7afd5200c5a7855c8172cbdd", "message": "Update links.md", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1504633019, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504633019, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "e366cfc37111f22ac9cce5ee3d50860f5ff71a78", "parents": ["355bb048a4eb34bf5b276230bdd7f4455beaeeda"], "commit": "04b4251a07635e4e170df62e3e2fb7eade439817", "message": "added notes with dan and jaime", "changes": [[95, 0, "notes/dan-scanlon-call-9-5-17.md"], [74, 0, "notes/jaime-brandon-call-9-5-17.md"]]}, {"committer": {"date": 1504617771, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504617771, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b9fd8e1823745f434be8914576eff9c6cf92beb2", "parents": ["c43a1fe747c5608eb5da91c0d629a7a86a20244c"], "commit": "355bb048a4eb34bf5b276230bdd7f4455beaeeda", "message": "journal for alan kay day #3, and logichub #1", "changes": [[10, 0, "journal.md"]]}, {"committer": {"date": 1504617157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504617157, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d3d04224730ee412e6ef2ad5f184529972092901", "parents": ["aead6827eb4410e45e41e410f91a510acc8b137e"], "commit": "c43a1fe747c5608eb5da91c0d629a7a86a20244c", "message": "alan kay deep dive day #3", "changes": [[9, 1, "links.md"]]}, {"committer": {"date": 1504610254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504610254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "058d4470820568f1dd6368cf3dd0e66c31a84c1e", "parents": ["6d7c3e8ec4ab7101f2eb766786049f41528c370d"], "commit": "aead6827eb4410e45e41e410f91a510acc8b137e", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504553635, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504553635, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8506aed16b27523e563abe4f3dcb4a614600209a", "parents": ["b1222a617914376d290fc00ca4f0dbeb16670767"], "commit": "6d7c3e8ec4ab7101f2eb766786049f41528c370d", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504553081, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504553081, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a28d2baf4a8e6705bfc76a918b6bdb7e054b7106", "parents": ["bf7b99bcbd22cf0a258ab679f00afff059ac96d4"], "commit": "b1222a617914376d290fc00ca4f0dbeb16670767", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504551586, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504551586, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8baa20e152ba25d36d118ba9bcadb307da2e9de7", "parents": ["7f4a1c348f168190d764f5e0629a97d0cdc434fc"], "commit": "bf7b99bcbd22cf0a258ab679f00afff059ac96d4", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504547313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504547313, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "67248be4f975ba61253f0d3101924f180dcd9515", "parents": ["8e4ccfe4ec2908031fd3c6d0ef4a18dee9193d0a"], "commit": "7f4a1c348f168190d764f5e0629a97d0cdc434fc", "message": "alan kay deep dive #2, part 2", "changes": [[11, 6, "links.md"]]}, {"committer": {"date": 1504536819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536819, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "45b0aa0295de357676d9d2c084707809d4adfad2", "parents": ["9976e7c46d85a09c1c5c4776e3673b8aac44152a"], "commit": "8e4ccfe4ec2908031fd3c6d0ef4a18dee9193d0a", "message": "alan deep dive part #2, journal", "changes": [[3, 0, "ideas.md"], [12, 0, "journal.md"]]}, {"committer": {"date": 1504536693, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536693, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "3a6b5f4c6fe813417e8cb67fc97f5b88d723f397", "parents": ["d391cf4dd862a0e26c7133a580fd5dc911134296"], "commit": "9976e7c46d85a09c1c5c4776e3673b8aac44152a", "message": "still Alan Deep Dive #2, part 1 (forgot to save before last commit)", "changes": [[20, 5, "links.md"]]}, {"committer": {"date": 1504536612, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504536612, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c83bba5a9ddb4d3736e65f3a4358707e69e29bdc", "parents": ["29d76b2bf84e75b84a6fd0f9f7528a7976979b58"], "commit": "d391cf4dd862a0e26c7133a580fd5dc911134296", "message": "Alan Deep dive #2, part 1", "changes": [[19, 3, "links.md"]]}, {"committer": {"date": 1504470359, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504470359, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "453c87383bc4899da1fad599a0755833df1fb648", "parents": ["470b347d08f5333b6ee20e841f26b6dd0ebfbac3"], "commit": "29d76b2bf84e75b84a6fd0f9f7528a7976979b58", "message": "reflections on schedule 9/3/17", "changes": [[16, 0, "journal.md"]]}, {"committer": {"date": 1504367606, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504367606, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "35d2c685b9c2d1e6250596a6385c106e362c1063", "parents": ["e40d8cb415e5777deaddfdbf5f9f396ac9b7e471"], "commit": "470b347d08f5333b6ee20e841f26b6dd0ebfbac3", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1504366305, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504366305, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "107a5f66e29813249181249cdc7080743c2a55e7", "parents": ["884b050e790f0f268d02440d80b19437754c2d99"], "commit": "e40d8cb415e5777deaddfdbf5f9f396ac9b7e471", "message": "add isomorf.io", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1504307808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504307808, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a2dedcd9c1adff50958f1d201514402c170800de", "parents": ["3851f3f22bb2fe32c849a91a6f369c3f0e19c456"], "commit": "884b050e790f0f268d02440d80b19437754c2d99", "message": "alan kay reading recap 1", "changes": [[16, 1, "journal.md"]]}, {"committer": {"date": 1504307155, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504307155, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d2838bc302ee7b1af161a95a78dc03a46e56c7ff", "parents": ["3be38c7ad81d3a54a508c833c5ff7a5ce5f0c409"], "commit": "3851f3f22bb2fe32c849a91a6f369c3f0e19c456", "message": "alan kay deep dive #1", "changes": [[40, 1, "links.md"]]}, {"committer": {"date": 1504298645, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504298645, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "38d73430379b008e7f50556e806eeeb57ae322bb", "parents": ["6152b897d20b9f2863bd253e3a45ae43e2bf6cbf"], "commit": "3be38c7ad81d3a54a508c833c5ff7a5ce5f0c409", "message": "Update journal.md", "changes": [[35, 0, "journal.md"]]}, {"committer": {"date": 1504280267, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504280267, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bc23d8753509f3d0a0f68860d834c474f5ffde2f", "parents": ["0ed7e467a44de032c4b971218f3a9391b78288ca"], "commit": "6152b897d20b9f2863bd253e3a45ae43e2bf6cbf", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1504126254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504126254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5be86c4272519f71555e09f14d25ceb8215980ed", "parents": ["bbde3535f021ec52629f2cf7981a49d02291aea2"], "commit": "0ed7e467a44de032c4b971218f3a9391b78288ca", "message": "Update links.md", "changes": [[2, 1, "links.md"]]}, {"committer": {"date": 1504115225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504115225, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ec22196e273a0dae72d51330e92abf16a699b889", "parents": ["58d8f09f103f135051d81169848d7999621871b9", "5182f4e985a6b476431e58342f95fdd7dbdf76e0"], "commit": "bbde3535f021ec52629f2cf7981a49d02291aea2", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1504115219, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504115219, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "91225e6cd090473f6c28e47201f0a8d7eba88d33", "parents": ["0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e"], "commit": "58d8f09f103f135051d81169848d7999621871b9", "message": "fixed year on episdoes, thanks to irvin for the notice", "changes": [["-", "-", "favicon.ico"], [5, 5, "index.html"], [4, 2, "journal.md"]]}, {"committer": {"date": 1504105479, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1504105479, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "648b6ec81c273b23a75e7b7c5572359722157e69", "parents": ["0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e"], "commit": "5182f4e985a6b476431e58342f95fdd7dbdf76e0", "message": "Update journal.md", "changes": [[25, 0, "journal.md"]]}, {"committer": {"date": 1504019188, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504019188, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "964423aaf0dbd798f7469c5c608348d1638992de", "parents": ["dd170c41b5b2561d2be979343aa0a2b2c04432bf"], "commit": "0092877b43d4ed9cf2fc2fcc0082d6dfcc4b7b0e", "message": "added favicon to all html pages", "changes": [[1, 0, "episodes/1-welcome.html"], [1, 0, "episodes/2-research-recap.html"], [1, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 0, "episodes/4-research-recap-two.html"], [2, 1, "episodes/5-samantha-john.html"], [2, 1, "episodes/6-research-recap-three.html"], [0, 3, "ideas.md"], [2, 0, "index.html"]]}, {"committer": {"date": 1504019052, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504019052, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c14137e49ed75fbd7143a0d464b8bec573485679", "parents": ["dbfe291fe2cf65b7ac07b315bd2c530e67511bda"], "commit": "dd170c41b5b2561d2be979343aa0a2b2c04432bf", "message": "test adding favicon 2", "changes": [[10, 12, "ideas.md"]]}, {"committer": {"date": 1504018920, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504018920, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "05f62c9fbf2cb67174eaaaf1b92a862ecc5049ca", "parents": ["35f5f8d51fba23ca11a49039cfbcd187a8591548"], "commit": "dbfe291fe2cf65b7ac07b315bd2c530e67511bda", "message": "test adding favicon 1", "changes": [[5, 2, "ideas.md"]]}, {"committer": {"date": 1504018586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504018586, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a7d073e24e5bf97651acb9dc26692512332b94e3", "parents": ["1a8ab5923b5d1047e3f13107b29bcf51c0561e28"], "commit": "35f5f8d51fba23ca11a49039cfbcd187a8591548", "message": "test adding favicon", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1504016175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504016175, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "d4878aefbbac8af4ca55c0d7ab82dda0ac99b2ee", "parents": ["0bcc59effc1290e0c94c268a7f3948893d41a446"], "commit": "1a8ab5923b5d1047e3f13107b29bcf51c0561e28", "message": "max width on welcome text", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1504016059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504016059, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7b5996ec5eeaa79722888485ca3bb7d121eb2e67", "parents": ["777fbfabbf2d995560a1480183f2131b94a2f3f6"], "commit": "0bcc59effc1290e0c94c268a7f3948893d41a446", "message": "made homepage more welcoming and intuative; closes #16; closes #15", "changes": [[14, 5, "index.html"]]}, {"committer": {"date": 1504015401, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504015401, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "9f84ce4e85413435ae82ac6512e7a659530e46ad", "parents": ["d3c025919d75a69a736e5ea916cec08e677f4070", "9c891a476b6078ff99dd03d9f6c565ec951f4601"], "commit": "777fbfabbf2d995560a1480183f2131b94a2f3f6", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1504015296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1504015296, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "7838d2297336b169334818bb05a1eed0faebead9", "parents": ["76c39e8aa68d1909251304c8ee926801fa0826ee"], "commit": "d3c025919d75a69a736e5ea916cec08e677f4070", "message": "made readme more welcoming; closes #5", "changes": [[9, 1, "README.md"]]}, {"committer": {"date": 1503950384, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503950384, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e84301305f577c5042408876342cc5433f451475", "parents": ["76c39e8aa68d1909251304c8ee926801fa0826ee"], "commit": "9c891a476b6078ff99dd03d9f6c565ec951f4601", "message": "Update ideas.md", "changes": [[3, 0, "ideas.md"]]}, {"committer": {"date": 1503949885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503949885, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2842192301ab33b21ee96860294054a6f6452a42", "parents": ["5485c6b3dd6f3fab8d0a255fb1b636748aeb2a42"], "commit": "76c39e8aa68d1909251304c8ee926801fa0826ee", "message": "research recap 4", "changes": [[27, 0, "journal.md"]]}, {"committer": {"date": 1503945782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503945782, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "340b9fc8ee07bf4e25dcdd90bf33a95763e7e517", "parents": ["d44e9b61d5b044c3daa3ae8b4b0690a09e1fa55d"], "commit": "5485c6b3dd6f3fab8d0a255fb1b636748aeb2a42", "message": "updated journal", "changes": [[22, 0, "journal.md"]]}, {"committer": {"date": 1503944976, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503944976, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "2d41a197922fe007480e8a5b1be7af2738007686", "parents": ["6cdb093fd0b8c300b708d85f5ab77a0b838d8d7e"], "commit": "d44e9b61d5b044c3daa3ae8b4b0690a09e1fa55d", "message": "inital work on streamsheets", "changes": [[88, 0, "prototypes/streamsheets/index.html"]]}, {"committer": {"date": 1503706632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503706632, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ad34a6f1147b9c95f240b04a1b4fd7f259587a86", "parents": ["c1b7e0677a6a2ccbd456e3b260b54a07eda3df0a"], "commit": "6cdb093fd0b8c300b708d85f5ab77a0b838d8d7e", "message": "updated journal and links with streamsheet research", "changes": [[39, 0, "journal.md"], [16, 5, "links.md"]]}, {"committer": {"date": 1503677827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503677827, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "1498bfd655e55d6f9c440ca71b4d822d4ccf3804", "parents": ["bfa6019d2d676de7a6b05307baea90c6667bfd15"], "commit": "c1b7e0677a6a2ccbd456e3b260b54a07eda3df0a", "message": "deep dive into imp", "changes": [[25, 3, "links.md"]]}, {"committer": {"date": 1503590944, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503590944, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a932f32c4f02538b4394b69e6673eb93ec614003", "parents": ["938087fbbe751dde1eefbcf9a5a2d08ce7c6a54a"], "commit": "bfa6019d2d676de7a6b05307baea90c6667bfd15", "message": "Update links.md", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1503590891, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503590891, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "457b7b41031a2073eee630931300160257ef354f", "parents": ["a110abe4149e58ff89639ddf08fe0639b213bd5a"], "commit": "938087fbbe751dde1eefbcf9a5a2d08ce7c6a54a", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1503580707, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580707, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ce86a60b0d04ec222e7c7ab1c60044648a38c8f0", "parents": ["3a8cf8f6ac0c45ab4fdf332e4c006a886e4a112b"], "commit": "a110abe4149e58ff89639ddf08fe0639b213bd5a", "message": "Update journal.md", "changes": [[8, 6, "journal.md"]]}, {"committer": {"date": 1503580489, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580489, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3ea98ea97a4a3bf8655ba4a67fbe04ff137bfe37", "parents": ["5b01f2c511b0b6ba3343202fb04f3be1345d02f0"], "commit": "3a8cf8f6ac0c45ab4fdf332e4c006a886e4a112b", "message": "Update 6-research-recap-three.html", "changes": [[1, 1, "episodes/6-research-recap-three.html"]]}, {"committer": {"date": 1503580412, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580412, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5901219943fe631cf3b71e73992bd6c6bc052a31", "parents": ["ef3d6c379b3c16c2a0573edeb94fcf846e560063"], "commit": "5b01f2c511b0b6ba3343202fb04f3be1345d02f0", "message": "Create 6-research-recap-three.html", "changes": [[86, 0, "episodes/6-research-recap-three.html"]]}, {"committer": {"date": 1503580169, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503580169, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f5bbfdc55c1e1e5b80d55085060b888ca6c8ee27", "parents": ["89846d82cde6db5d89b3ac723f2ecdff39ef07dc"], "commit": "ef3d6c379b3c16c2a0573edeb94fcf846e560063", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1503528378, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503528378, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "c4554b59091f3d32e214aa4b87d07ac009aad1ab", "parents": ["2852e1b42b2a8d0de4dc0da36d26e7875e7ddb1d"], "commit": "89846d82cde6db5d89b3ac723f2ecdff39ef07dc", "message": "updated journal", "changes": [[48, 0, "journal.md"]]}, {"committer": {"date": 1503496605, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503496605, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6b06d609611d405ba9ba9b538c5001fded7970d4", "parents": ["b88d3faa985127a8a56b7e907aecdf1d53c8e781"], "commit": "2852e1b42b2a8d0de4dc0da36d26e7875e7ddb1d", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1503353989, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503353989, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8e6f9db3a905595f215f7ae3346128c93ec1b8da", "parents": ["40591cd3eed6f4d018d94bd03a7be03f3968071b"], "commit": "b88d3faa985127a8a56b7e907aecdf1d53c8e781", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1503353687, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503353687, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6416bda1dcbe0782e0d08f6612ea67d8ef28296c", "parents": ["88e6f5d6daa4b552cedfe5b0378feab08a079bb8"], "commit": "40591cd3eed6f4d018d94bd03a7be03f3968071b", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1503345324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1503345324, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "a05bf783645c934c9d4427e4a96c97e1cd3d163e", "parents": ["9521c213fb40afe91ecc6a3771b04777d820ee16"], "commit": "88e6f5d6daa4b552cedfe5b0378feab08a079bb8", "message": "removed footer from all pages but homepage; added ability to subscribe which closes #17", "changes": [[1, 11, "episodes/1-welcome.html"], [1, 12, "episodes/2-research-recap.html"], [1, 11, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 11, "episodes/4-research-recap-two.html"], [1, 11, "episodes/5-samantha-john.html"], [33, 11, "index.html"]]}, {"committer": {"date": 1503326297, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503326297, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c0b64020a372676ceb963c1e1a12e9f793582665", "parents": ["214e49144722cda20d56ab89f3f8e522af5349e8"], "commit": "9521c213fb40afe91ecc6a3771b04777d820ee16", "message": "Update links.md", "changes": [[3, 1, "links.md"]]}, {"committer": {"date": 1503070131, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1503070131, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1f7219008896a6038ccd250241fd82433ad170d3", "parents": ["884b2f035caeecf8b21e2025b056090d44faf776"], "commit": "214e49144722cda20d56ab89f3f8e522af5349e8", "message": "Update links.md", "changes": [[2, 0, "links.md"]]}, {"committer": {"date": 1502998067, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502998067, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "401bd9471918b433bf4a4c8e1f8fa8455cebcfab", "parents": ["da8a7778217acaddaeeece886f2751077c4d56b4"], "commit": "884b2f035caeecf8b21e2025b056090d44faf776", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1502918997, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502918997, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e0f6bffd6670f9a49e2e0326aef7adf1524e376c", "parents": ["da94d713c61e6f5263354412af9a1b55c3e63341"], "commit": "da8a7778217acaddaeeece886f2751077c4d56b4", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502918042, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502918042, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6f9e2af8f23b1493efeb314fb28942bd7738a363", "parents": ["cd83671ac0a4d68818c40815c9f5202ec078aafc"], "commit": "da94d713c61e6f5263354412af9a1b55c3e63341", "message": "Update links.md", "changes": [[14, 1, "links.md"]]}, {"committer": {"date": 1502906524, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502906524, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "161d4f96fcaaa06d13a40e6c838f9a3888c10849", "parents": ["afc8cd46383832f03e922923ba448fdbaeb75f33"], "commit": "cd83671ac0a4d68818c40815c9f5202ec078aafc", "message": "Update links.md", "changes": [[11, 3, "links.md"]]}, {"committer": {"date": 1502902105, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502902105, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7e73ba1e3a0daf8b500396d2d64cf3f06d642e45", "parents": ["5978088441fe5420eb078617bbad14b637d45761"], "commit": "afc8cd46383832f03e922923ba448fdbaeb75f33", "message": "Update journal.md", "changes": [[12, 0, "journal.md"]]}, {"committer": {"date": 1502748184, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502748184, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9d4e0a2ffd0659336ebd499ced42883991ecfaf", "parents": ["52a0d72bc49f2d56eebcfcdaae440467008f1cd2"], "commit": "5978088441fe5420eb078617bbad14b637d45761", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502747974, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502747974, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "71a95c831017808d6f445828bd2699b57f638012", "parents": ["2e210ab2afde0c57265fb28bebaa62b99eaabc0b"], "commit": "52a0d72bc49f2d56eebcfcdaae440467008f1cd2", "message": "Update links.md", "changes": [[58, 8, "links.md"]]}, {"committer": {"date": 1502724885, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502724885, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fe22f3d96f808f37bb93d2db0c185d05ca9120c9", "parents": ["767ee0e066dae59918dedb7cef8d98c489c6c72d"], "commit": "2e210ab2afde0c57265fb28bebaa62b99eaabc0b", "message": "research recap #3", "changes": [[39, 0, "journal.md"]]}, {"committer": {"date": 1502464548, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502464548, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9023e61265a4ca1c7433c562629d6c25c7cf77e", "parents": ["1d905db3186ec9ecbad0f5984446de831dacecf2"], "commit": "767ee0e066dae59918dedb7cef8d98c489c6c72d", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1502464511, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502464511, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "083c3492f7ef8b02d154185cee92327a2efb432b", "parents": ["cb4a5bb0fe9ce709a5028ff02a12cf178eb1c34a"], "commit": "1d905db3186ec9ecbad0f5984446de831dacecf2", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1502462066, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502462066, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "143ec6f754fdea65bd2cb41e01562e268be95358", "parents": ["c6a05412159003f0ab89b608e185e024168a5599"], "commit": "cb4a5bb0fe9ce709a5028ff02a12cf178eb1c34a", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1502379986, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502379986, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "846b7e66441031ba4cda434cef344d77515c1edb", "parents": ["03c2dd7450bd2fc41bf1b83fa5a4e6147f387138"], "commit": "c6a05412159003f0ab89b608e185e024168a5599", "message": "add links from Paul Chiusano", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1502376844, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376844, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "bff02edef1726cc2b48e5c27af2a8cc9a84d41ef", "parents": ["538bba305ffd7b4843a8e5a86fa59c51974ea394"], "commit": "03c2dd7450bd2fc41bf1b83fa5a4e6147f387138", "message": "Rename 4-research-recap-2.html to 4-research-recap-two.html", "changes": [[0, 95, "episodes/4-research-recap-2.html"], [95, 0, "episodes/4-research-recap-two.html"]]}, {"committer": {"date": 1502376788, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376788, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a066abe8d14acb0f302178ba02b42464bdd44e12", "parents": ["e46eaa381d71019626793a896891a857fa64fd58"], "commit": "538bba305ffd7b4843a8e5a86fa59c51974ea394", "message": "Update index.html", "changes": [[5, 3, "index.html"]]}, {"committer": {"date": 1502376673, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376673, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7a813c9373733c1d8151b67de61e3b6633ba2c35", "parents": ["862cb573f7d196927e0e241bce24b874f31a414d"], "commit": "e46eaa381d71019626793a896891a857fa64fd58", "message": "Rename welcome.html to 1-welcome.html", "changes": [[93, 0, "episodes/1-welcome.html"], [0, 93, "episodes/welcome.html"]]}, {"committer": {"date": 1502376661, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376661, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7df421633264d81aa064026c23bb25f5d38b3b95", "parents": ["e642a7489092633cebc9c64865b320dc28d3bbfc"], "commit": "862cb573f7d196927e0e241bce24b874f31a414d", "message": "Rename research-recap.html to 2-research-recap.html", "changes": [[164, 0, "episodes/2-research-recap.html"], [0, 164, "episodes/research-recap.html"]]}, {"committer": {"date": 1502376643, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502376643, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "33cae8f5a78d90c4bd04300e8e84acde2e39116e", "parents": ["75a15e5afd4647eb89760a29c19585552eb93a8a"], "commit": "e642a7489092633cebc9c64865b320dc28d3bbfc", "message": "Create 5-samantha-john.html", "changes": [[96, 0, "episodes/5-samantha-john.html"]]}, {"committer": {"date": 1502314198, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502314198, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "3fdb7ee81f0201396f60c07548b7db1028239ca2", "parents": ["fb2143eab317b7bcfa772920044767c556036a91"], "commit": "75a15e5afd4647eb89760a29c19585552eb93a8a", "message": "Update journal.md", "changes": [[20, 0, "journal.md"]]}, {"committer": {"date": 1502313055, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502313055, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cc8646c861d60d040010df24d6b7b88615c6fb16", "parents": ["205cdbcde350d24a410ca1bed3d7d528f3b313b2"], "commit": "fb2143eab317b7bcfa772920044767c556036a91", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1502312989, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502312989, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9eca22a19d745287dce065d429075b1f9cf1d7fb", "parents": ["e7cc2f2e88d2776ff7fb39d5ec9d81b99744d5d4"], "commit": "205cdbcde350d24a410ca1bed3d7d528f3b313b2", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1502312371, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1502312371, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "de4f3c8f115c2b5793ca1bafdd2d0de34c988ace", "parents": ["d54315a0c0538a1db8ff280006da5e1679850ef1"], "commit": "e7cc2f2e88d2776ff7fb39d5ec9d81b99744d5d4", "message": "fixed titles", "changes": [[1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"], [1, 1, "episodes/research-recap.html"], [1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1502312283, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502312283, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d12332cb2a7f2f33f9f1c5e17c5d7f991a1ff6cc", "parents": ["3da6bb30628a7579850b012f314cfb696f4913c7"], "commit": "d54315a0c0538a1db8ff280006da5e1679850ef1", "message": "Create 4-research-recap-2.html", "changes": [[95, 0, "episodes/4-research-recap-2.html"]]}, {"committer": {"date": 1502306462, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306462, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d7ddcf32611281da6c29e8894da4a955f01c820c", "parents": ["d0a57405625bb1abbcc4e6850eb5b07898d61b0e"], "commit": "3da6bb30628a7579850b012f314cfb696f4913c7", "message": "Update ideas.md", "changes": [[2, 0, "ideas.md"]]}, {"committer": {"date": 1502306424, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306424, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "8b03755a76604504a84006547a4be95eeb693c4a", "parents": ["47c59e1457c1e8a72aa782730820b5eb7d7e9d50"], "commit": "d0a57405625bb1abbcc4e6850eb5b07898d61b0e", "message": "Update links.md", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1502306080, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1502306080, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fc60b6ceea128ffa5289b8b386a6225d1091e1a6", "parents": ["32df2b40de64f6fbe6f9d03b735be84131f10c31"], "commit": "47c59e1457c1e8a72aa782730820b5eb7d7e9d50", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[2, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501885105, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501885105, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "82dcdc2fffad3912e9a041510b0c02c0e2b956e8", "parents": ["26f4b8c09974d8ff4f26b7a803e503f412193a16"], "commit": "32df2b40de64f6fbe6f9d03b735be84131f10c31", "message": "Update journal.md", "changes": [[31, 0, "journal.md"]]}, {"committer": {"date": 1501714956, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501714956, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5746307e3dc24cdad0f35396728de798bd195df9", "parents": ["638d103988118d00d7f8c31feba1dd76463e6629"], "commit": "26f4b8c09974d8ff4f26b7a803e503f412193a16", "message": "Update journal.md", "changes": [[77, 0, "journal.md"]]}, {"committer": {"date": 1501531351, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531351, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "05f8a5f452819daa654f88fa53e3a312d7fd0656", "parents": ["9217dca06d06e84af2b91c64bb96f9b894afac5f"], "commit": "638d103988118d00d7f8c31feba1dd76463e6629", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[1, 1, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501531315, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531315, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "5feef29f707c463753591fd91e9d65a8ebaa69ba", "parents": ["d735647475da480d8e2abc7a408a73120ed44a00"], "commit": "9217dca06d06e84af2b91c64bb96f9b894afac5f", "message": "Update 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[5, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501531109, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501531109, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "c0c7c2b73165fdb1b4c97c473936e5c23dfd8fff", "parents": ["388e22a2c5492e530dfa0fd3c9471f021878ddd5"], "commit": "d735647475da480d8e2abc7a408a73120ed44a00", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501530655, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501530655, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "945c23be3a9d68ce8115f94e1a5d7140a5c610b9", "parents": ["35aa796a98cd47fc0efb255910a9c9115e1a07a2"], "commit": "388e22a2c5492e530dfa0fd3c9471f021878ddd5", "message": "trying to fix over linkifying", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1501525079, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501525079, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "81fd40c85681feae6f84f34c4eec3b22c49945f5", "parents": ["bc9289ed25417b1cf99a9328195d962c342d0415"], "commit": "35aa796a98cd47fc0efb255910a9c9115e1a07a2", "message": "linkify links in
  • elements", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1501524784, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524784, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0b51a71acc444fb78aa7bac74df4a0cc92a0f3da", "parents": ["35f7998ab3000c864031a3a519ffd6b7534c94ed"], "commit": "bc9289ed25417b1cf99a9328195d962c342d0415", "message": "Update journal.md", "changes": [[9, 1, "journal.md"]]}, {"committer": {"date": 1501524631, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524631, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cfcbe3a992f5026f1a3ee39d1066927c39932100", "parents": ["5c0e281537b3276d8465e746946c9f34a6d06fdd"], "commit": "35f7998ab3000c864031a3a519ffd6b7534c94ed", "message": "Update journal.md", "changes": [[39, 1, "journal.md"]]}, {"committer": {"date": 1501524513, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501524513, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f0df9e68a2f72329ba90deaeae88de8c8b079dbc", "parents": ["47c33c57f8fabbe2e1448e2e21b678aa75ef00be"], "commit": "5c0e281537b3276d8465e746946c9f34a6d06fdd", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501515165, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501515165, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "28c451aff492bf2321dbed811473d6fc894789d2", "parents": ["07077d4b96b4f8fbfb38efae875e85009fa9fdea"], "commit": "47c33c57f8fabbe2e1448e2e21b678aa75ef00be", "message": "research recap", "changes": [[37, 0, "journal.md"]]}, {"committer": {"date": 1501367316, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367316, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1c0ec1d1dd824b43db7313e98e3db6189766dc26", "parents": ["d9b59aeb3354c35a78cf3cde7b0f4de3f2c24573"], "commit": "07077d4b96b4f8fbfb38efae875e85009fa9fdea", "message": "Update index.html", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1501367251, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367251, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "2d084fc9977dc08faa8c70901012e85fd04a124c", "parents": ["8d1d7f437ac7681a3aeb32b27697eab4d29fab84"], "commit": "d9b59aeb3354c35a78cf3cde7b0f4de3f2c24573", "message": "Create 3-jonathan-leung-on-inventing-on-principle.html", "changes": [[93, 0, "episodes/3-jonathan-leung-on-inventing-on-principle.html"]]}, {"committer": {"date": 1501367155, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367155, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "96bbd9f53b5e4ca35eddd431ed1e4078c7c2b8bd", "parents": ["374b007644205216b076abd99e313802e278f7be"], "commit": "8d1d7f437ac7681a3aeb32b27697eab4d29fab84", "message": "Update welcome.html", "changes": [[1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1501367134, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367134, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6c1c22249140c1eb9f954f55fd149eb3428a8a89", "parents": ["d9793143d5e1af28b91c9017b44ad82a42ec13a6"], "commit": "374b007644205216b076abd99e313802e278f7be", "message": "Update research-recap.html", "changes": [[1, 1, "episodes/research-recap.html"]]}, {"committer": {"date": 1501367092, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501367092, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d48626bee48760cdea6f6f6644893651b695ef28", "parents": ["4a98fdc1f4c2ce109b319b257394ce859bad37e6"], "commit": "d9793143d5e1af28b91c9017b44ad82a42ec13a6", "message": "change to omnystudio", "changes": [[1, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1501364285, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501364285, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "667eb6804332e032efd2c1c1be9b9906cc7a5e93", "parents": ["e9da71dafdcf3d0950b86a3d06c5a06ffa783d07"], "commit": "4a98fdc1f4c2ce109b319b257394ce859bad37e6", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501281469, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1501281469, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "ce51bfa8af66694bd55f948863cd8fa94e28f55e", "parents": ["b302a9c22c7955292073d4d9a36219893f752e7f"], "commit": "e9da71dafdcf3d0950b86a3d06c5a06ffa783d07", "message": "fix links", "changes": [[4, 4, "ideas.md"]]}, {"committer": {"date": 1501281321, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1501281321, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "5498a19d71f696e62ac3a0331d16f7438e84924e", "parents": ["273eaa324fdebdb6893a4b8b4a68b7cba6e1ca33"], "commit": "b302a9c22c7955292073d4d9a36219893f752e7f", "message": "shower thoughts", "changes": [[7, 0, "ideas.md"], [72, 0, "journal.md"]]}, {"committer": {"date": 1501266054, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501266054, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f92c83494724df368a6274059ddd3dd7e62902d7", "parents": ["9431c568308bd82a38e32b67b294fd9f7b64e295"], "commit": "273eaa324fdebdb6893a4b8b4a68b7cba6e1ca33", "message": "Update journal.md", "changes": [[3, 2, "journal.md"]]}, {"committer": {"date": 1501266014, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501266014, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e955d3c6718839341ceb8409681f3b9a3babe98b", "parents": ["fd320fea0d25d04fabd49dce2b71f6d0c4cb2e12"], "commit": "9431c568308bd82a38e32b67b294fd9f7b64e295", "message": "Update ideas.md", "changes": [[7, 3, "ideas.md"]]}, {"committer": {"date": 1501265951, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501265951, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1aa4caeb70d0f47b6966ceb69dbdf67378294942", "parents": ["4b758ec5c3f50f86d89ea1aba0863cb87c39eba3"], "commit": "fd320fea0d25d04fabd49dce2b71f6d0c4cb2e12", "message": "Update journal.md", "changes": [[54, 0, "journal.md"]]}, {"committer": {"date": 1501016380, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501016380, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "34a43d697da56782ed49f80eb67c2c99aa77bf1b", "parents": ["3441a136ce43472ea8aded086d592df617635ed2"], "commit": "4b758ec5c3f50f86d89ea1aba0863cb87c39eba3", "message": "Update journal.md", "changes": [[8, 0, "journal.md"]]}, {"committer": {"date": 1501015316, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501015316, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9bca6256cec62fad96359b9677cbdcce1e5b0395", "parents": ["432e2658f263dfa9963bfc3ff878ad13129a5ee3"], "commit": "3441a136ce43472ea8aded086d592df617635ed2", "message": "Update ideas.md", "changes": [[23, 7, "ideas.md"]]}, {"committer": {"date": 1501014507, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501014507, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "cf52d57bdbc2eb2730c2d2f73c580d3f0d5bb7fa", "parents": ["a220d282c518d49d9234bf1c7e7d3753dc268610"], "commit": "432e2658f263dfa9963bfc3ff878ad13129a5ee3", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501012956, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012956, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f14205a41ccbb5dbbb93376310f111a324a7942f", "parents": ["17d11eabe1a617d8e3b2664be88140f22eee7fa0"], "commit": "a220d282c518d49d9234bf1c7e7d3753dc268610", "message": "fix footer links", "changes": [[3, 3, "episodes/research-recap.html"]]}, {"committer": {"date": 1501012933, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012933, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4d20e7216089342c1676ec0de11a52d169a0e37c", "parents": ["2e71960e97e64c1c4c78c17787cc665d8706582e"], "commit": "17d11eabe1a617d8e3b2664be88140f22eee7fa0", "message": "fix footer links", "changes": [[3, 3, "episodes/welcome.html"]]}, {"committer": {"date": 1501012779, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012779, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1b7455a811253876ef160182929a4334ef9d9eb7", "parents": ["cf74ca68d9c9f16761a47442443067ce20ba77cf"], "commit": "2e71960e97e64c1c4c78c17787cc665d8706582e", "message": "add lamdu notes", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1501012697, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1501012697, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ccefd532437d8c5614412ed2991d86e4e7375ecf", "parents": ["b9624982e0dd3a6d5ed788306895ff490bef2edd"], "commit": "cf74ca68d9c9f16761a47442443067ce20ba77cf", "message": "lamdu writeup", "changes": [[56, 0, "journal.md"]]}, {"committer": {"date": 1500992793, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992793, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7590f74d61d345c0ad1e19ffd739907de4e2389d", "parents": ["3f4021414d722a8bb0f375e845481512101b512a"], "commit": "b9624982e0dd3a6d5ed788306895ff490bef2edd", "message": "Update index.html", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500992727, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992727, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "fbadaeb88d258772f2eda2a6c1ca7a3e78e0ab8c", "parents": ["9cfae7beb5f0ba8a968a71017d7c5f82e50f04e2"], "commit": "3f4021414d722a8bb0f375e845481512101b512a", "message": "add link to prototype ideas", "changes": [[1, 0, "index.html"]]}, {"committer": {"date": 1500992689, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992689, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "a8ccd5de2a97602f65b4c98693ba3d2249d19705", "parents": ["69b23b211eebbb2d3756fc187f4257aa33783d57"], "commit": "9cfae7beb5f0ba8a968a71017d7c5f82e50f04e2", "message": "Create ideas.md", "changes": [[32, 0, "ideas.md"]]}, {"committer": {"date": 1500992290, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500992290, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0db3a958a08b2b5f8da2a8796d0d389bec752d75", "parents": ["801fa2609ce42a0e76505d54855ed76b313aaa68"], "commit": "69b23b211eebbb2d3756fc187f4257aa33783d57", "message": "Update links.md", "changes": [[1, 1, "links.md"]]}, {"committer": {"date": 1500991303, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991303, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "196e03d81c25d47a9300d7f4859f45c92f2c2c15", "parents": ["c02f1acd2252793de7f6ddeeb65855ef5ba9d0bd"], "commit": "801fa2609ce42a0e76505d54855ed76b313aaa68", "message": "add google analytics", "changes": [[12, 0, "links.md"]]}, {"committer": {"date": 1500991225, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991225, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "de127e86a8a3a3cd74ad4faacd2a108a4bb72585", "parents": ["f7a822bb94027da0c3ba8c9ae15b41cb10e656fa"], "commit": "c02f1acd2252793de7f6ddeeb65855ef5ba9d0bd", "message": "add google analytics", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1500991100, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991100, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d2adf789f70a7f47bcb0d08d99c6bac76c3a9e86", "parents": ["c3f3bf67b23961f7c414914a544465888cd06258"], "commit": "f7a822bb94027da0c3ba8c9ae15b41cb10e656fa", "message": "add google analytics", "changes": [[11, 1, "episodes/research-recap.html"]]}, {"committer": {"date": 1500991079, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500991079, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e469ad64acea9c3f0a6ab05cb345ce366968c394", "parents": ["d0707711f4ab90f363b8e3359c53166b3c6dfd64"], "commit": "c3f3bf67b23961f7c414914a544465888cd06258", "message": "add google analytics", "changes": [[10, 1, "episodes/welcome.html"]]}, {"committer": {"date": 1500990921, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500990921, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9efdfe8f844aa20fb92414a033dcbf509625d34c", "parents": ["e788ce53bd5cb6f86e32c3864de386aeea4a8f40"], "commit": "d0707711f4ab90f363b8e3359c53166b3c6dfd64", "message": "add google analytics", "changes": [[10, 1, "index.html"]]}, {"committer": {"date": 1500990731, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500990731, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1ecae1e8d3956530d0a5aafdd95e924ed4918222", "parents": ["ee339ba4a20421afc3d681bd69afbf368f08c1dc"], "commit": "e788ce53bd5cb6f86e32c3864de386aeea4a8f40", "message": "fix bottom links", "changes": [[3, 3, "index.html"]]}, {"committer": {"date": 1500928015, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500928015, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ab4adf8636be19a546266c12dd45432b7d1df4d9", "parents": ["0e1ea56104172c7262ac0bf20585dcfa40bd64ca"], "commit": "ee339ba4a20421afc3d681bd69afbf368f08c1dc", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1500921884, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500921884, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f2e0385ada392a34213f0e3a927668e2cf67e77a", "parents": ["eca07dda28af54f5eabaf646651e160c5dd26300"], "commit": "0e1ea56104172c7262ac0bf20585dcfa40bd64ca", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1500920964, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920964, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "b6a5b82bc158ae6aaea8d3e8d5bdcd7538019a13", "parents": ["eb23b3040d464f966e3005979ab7e71b0cd62048"], "commit": "eca07dda28af54f5eabaf646651e160c5dd26300", "message": "Update links.md", "changes": [[4, 0, "links.md"]]}, {"committer": {"date": 1500920806, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920806, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "6eb08cedbc1efc01af1b67e92c805a81f7cddad5", "parents": ["e9f8ec1cc820995c13c59b9e8380bfb374c3805f"], "commit": "eb23b3040d464f966e3005979ab7e71b0cd62048", "message": "Update links.md", "changes": [[18, 1, "links.md"]]}, {"committer": {"date": 1500920707, "timezone": "-0700", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500920707, "timezone": "-0700", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "265572da017cf35e961cb8fa6204f954045ce862", "parents": ["abf75bb298072a6f4303224156769989704f65e2"], "commit": "e9f8ec1cc820995c13c59b9e8380bfb374c3805f", "message": "Update journal.md", "changes": [[24, 0, "journal.md"]]}, {"committer": {"date": 1500649855, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500649855, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7aecf0422dc9471ab7c06c1d6391ec30b0abae32", "parents": ["f2e3cbdd8624b94f254fd1823adacc020393b501"], "commit": "abf75bb298072a6f4303224156769989704f65e2", "message": "Update links.md", "changes": [[1, 0, "links.md"]]}, {"committer": {"date": 1500649676, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500649676, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "54dc03eb8865744c14b14b4e42d1d57c73c31e32", "parents": ["06579420bb0fd8fae5ef222e9e5a0e611a81ccce"], "commit": "f2e3cbdd8624b94f254fd1823adacc020393b501", "message": "Update links.md", "changes": [[5, 0, "links.md"]]}, {"committer": {"date": 1500558085, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558085, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "28b8a20092ccf85cc43b700eaffdcc5a828eebea", "parents": ["33196f53a035199f39b952e8d82a599f3f21afe1"], "commit": "06579420bb0fd8fae5ef222e9e5a0e611a81ccce", "message": "Update journal.md", "changes": [[1, 1, "journal.md"]]}, {"committer": {"date": 1500558068, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558068, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "576e0637d43a9b4aa24e2b7f94334ef91d630e38", "parents": ["e22fffb110ce5c5917ef89b6ac1b59525c70a1f0"], "commit": "33196f53a035199f39b952e8d82a599f3f21afe1", "message": "yesterday's updates (7/19/17)", "changes": [[11, 0, "journal.md"]]}, {"committer": {"date": 1500558042, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500558042, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "7961911a5b53ef0d3084f933d83a1df1984d364e", "parents": ["4670a33f503a621f606de0338df1c21d161967fe"], "commit": "e22fffb110ce5c5917ef89b6ac1b59525c70a1f0", "message": "fix links link", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500500477, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500500477, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "15c2c3f8c012a742b115370a6a2bf3a634862edc", "parents": ["207f76e0041efaa099d0fb60864f5528559c3ed9"], "commit": "4670a33f503a621f606de0338df1c21d161967fe", "message": "Update links.md", "changes": [[34, 3, "links.md"]]}, {"committer": {"date": 1500408202, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500408202, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e99b2e341be12d5c7368f4a9184114d7075f0ee6", "parents": ["2495a9c8adc24235ccec7d7a7f825ec9e907afcc"], "commit": "207f76e0041efaa099d0fb60864f5528559c3ed9", "message": "Update journal.md", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1500407981, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1500407981, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "fef628a1477b5f8290e9395d9964582d124a2597", "parents": ["a10dd1f1d37c50f22ac503dec9f1ab89719f2c7c", "709e90be612c2939ea36291db08b813a98c9be23"], "commit": "2495a9c8adc24235ccec7d7a7f825ec9e907afcc", "message": "Merge branch 'master' of https://github.com/stevekrouse/futureofcoding.org", "changes": []}, {"committer": {"date": 1500407979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1500407979, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "b09f215e4f6d78a329d57578ca0b4ff64896a445", "parents": ["91c9fa028171f74a80606df03c1b834e1e45dad2"], "commit": "a10dd1f1d37c50f22ac503dec9f1ab89719f2c7c", "message": "added episode pages and references", "changes": [[154, 0, "episodes/research-recap.html"], [84, 0, "episodes/welcome.html"], [2, 2, "index.html"], [1, 1, "links.md"]]}, {"committer": {"date": 1500407247, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500407247, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "502d475b149ae4ba2e73bcddf123d8f5889ef2f8", "parents": ["91c9fa028171f74a80606df03c1b834e1e45dad2"], "commit": "709e90be612c2939ea36291db08b813a98c9be23", "message": "Update links.md", "changes": [[16, 5, "links.md"]]}, {"committer": {"date": 1500400718, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500400718, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "465b9020edf955d9cac950dc8b6d15301cacf1ba", "parents": ["7f79dbdbee403def60d22f1acda6557f8eb8e340"], "commit": "91c9fa028171f74a80606df03c1b834e1e45dad2", "message": "Update journal.md", "changes": [[9, 0, "journal.md"]]}, {"committer": {"date": 1500399184, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500399184, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "d9ecad0707c37795d4d0dc6009cec4a218dcd7aa", "parents": ["1dba9bf3ef06f670f3267642ee7af541b9a50976"], "commit": "7f79dbdbee403def60d22f1acda6557f8eb8e340", "message": "added links to research", "changes": [[3, 0, "links.md"]]}, {"committer": {"date": 1500399100, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500399100, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "f341c24af6ac15e6702c1432ece4d06f020932ed", "parents": ["faefba95285f1ba67c0c63cfea9c3030df8c4910"], "commit": "1dba9bf3ef06f670f3267642ee7af541b9a50976", "message": "Update index.html", "changes": [[16, 8, "index.html"]]}, {"committer": {"date": 1500314350, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500314350, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "529a57626ee608be86e02ffcc28871fa2c0b988f", "parents": ["53ececf46a95b881d193f6656f09160602350bd7"], "commit": "faefba95285f1ba67c0c63cfea9c3030df8c4910", "message": "Update links.md", "changes": [[8, 4, "links.md"]]}, {"committer": {"date": 1500313724, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500313724, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1768e45b63413583e945649ca3e207454c3b0226", "parents": ["487c053f8e70c4bb9f40be655a930b3f6f8f320b"], "commit": "53ececf46a95b881d193f6656f09160602350bd7", "message": "Update links.md", "changes": [[1, 2, "links.md"]]}, {"committer": {"date": 1500313254, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500313254, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "82536187df2a137eaf4a8679b2b426ff6099c217", "parents": ["aed3ac3e9cf4ee5fc0f04f8fba03acabeca44de4"], "commit": "487c053f8e70c4bb9f40be655a930b3f6f8f320b", "message": "Update links.md", "changes": [[31, 11, "links.md"]]}, {"committer": {"date": 1500311128, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500311128, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "e9e08099d8255aa29634e4a79d0bd512de978409", "parents": ["8dc0bb21d4d6dacdc94340976a0e237bde05e4c5"], "commit": "aed3ac3e9cf4ee5fc0f04f8fba03acabeca44de4", "message": "Create links.md", "changes": [[73, 0, "links.md"]]}, {"committer": {"date": 1500310271, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500310271, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "ded5098cb93feb78faba5ec986a974db164307e9", "parents": ["3753932e3e5349ede5cfbba89759687956cba50d"], "commit": "8dc0bb21d4d6dacdc94340976a0e237bde05e4c5", "message": "Update journal.md", "changes": [[6, 0, "journal.md"]]}, {"committer": {"date": 1500310031, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500310031, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1e58377bf4489116ad2ba40604e99f4c22b96112", "parents": ["38c4027ca83dd393edc92cffa79c89eab9aae9bb"], "commit": "3753932e3e5349ede5cfbba89759687956cba50d", "message": "Update journal.md", "changes": [[12, 0, "journal.md"]]}, {"committer": {"date": 1500229080, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500229080, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "9855d6946d1f49c99d9e780d4f7ea08aa192032a", "parents": ["5747144f8de14ac4c16342ffc311c96e00048da0"], "commit": "38c4027ca83dd393edc92cffa79c89eab9aae9bb", "message": "added research recap podcast", "changes": [[2, 1, "index.html"]]}, {"committer": {"date": 1500066903, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500066903, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "4031a09ebf6ea4b8ab60c864a3e5a34c7f7fab65", "parents": ["aff080ee465da567bffe93d385ec68287e38dd5c"], "commit": "5747144f8de14ac4c16342ffc311c96e00048da0", "message": "add journal entry", "changes": [[13, 0, "journal.md"]]}, {"committer": {"date": 1500060145, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500060145, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "1eef697a387fdaab4d29a063c5b9904cffbd9e73", "parents": ["a92e1c440993fc3bb39c139becaefe0d02437303"], "commit": "aff080ee465da567bffe93d385ec68287e38dd5c", "message": "update title", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1500060097, "timezone": "-0400", "name": "GitHub", "email": "noreply@github.com"}, "author": {"date": 1500060097, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "db3f3e6e51d3c1df0d2d84f17627408d0cdb1d82", "parents": ["ace634aa12e6650123d998a2094539c1929fb638"], "commit": "a92e1c440993fc3bb39c139becaefe0d02437303", "message": "added new entry", "changes": [[58, 1, "journal.md"]]}, {"committer": {"date": 1499970734, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970734, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "0f9c29970b46629947d72a22ef4915597e015261", "parents": ["4720d6c8e0090e5f2f4d25ff6e256f4c24f8168a"], "commit": "ace634aa12e6650123d998a2094539c1929fb638", "message": "update link to journal", "changes": [[1, 1, "index.html"]]}, {"committer": {"date": 1499970620, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970620, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "4b1d77bfc69fb0e70ebd246b2436f86b99c7a275", "parents": ["1ead311874b6f342a3b40a1b5373e854a3bc5f2f"], "commit": "4720d6c8e0090e5f2f4d25ff6e256f4c24f8168a", "message": "trying to convince jekyll to render markdown journal", "changes": [[4, 0, "journal.md"]]}, {"committer": {"date": 1499970314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "author": {"date": 1499970314, "timezone": "+0000", "name": "Steve Krouse", "email": "skrouse@seas.upenn.edu"}, "tree": "eb2b7a9ed0b3a37ac1ea758e64f86584ce241fef", "parents": ["370adad619d4aab37f6a1138c478df062c7b316f"], "commit": "1ead311874b6f342a3b40a1b5373e854a3bc5f2f", "message": "made index and journal", "changes": [[109, 0, "index.html"], [29, 0, "journal.md"]]}, {"committer": {"date": 1499966878, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1499966878, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "dd51fbfc57a6a827408fa8f488ef8b53e9bbcfac", "parents": ["6db953a511fcbb3cc295ea37be2e83e897b50a91"], "commit": "370adad619d4aab37f6a1138c478df062c7b316f", "message": "Create CNAME", "changes": [[1, 0, "CNAME"]]}, {"committer": {"date": 1499966362, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "author": {"date": 1499966362, "timezone": "-0400", "name": "Steve Krouse", "email": "steveykrouse@gmail.com"}, "tree": "0de3abfcba6e54ad703f1f813d093a5d6bb41e57", "parents": [], "commit": "6db953a511fcbb3cc295ea37be2e83e897b50a91", "message": "Initial commit", "changes": [[1, 0, "README.md"]]}]