55 |
56 |
57 | In which we greet the world.
58 |
59 |
Hello, world.
60 |
I'm here.
61 |
And I'm going to take you head-on...
62 |
66 |
67 |
68 |
69 |
Wtf, world?!
70 |
71 |
72 | In which we marvel at the various insanties of life and the living.
73 |
74 |
Wtf, world.
75 |
I'm here.
76 |
And I'm just... How do you even work?
77 |
81 |
82 |
83 |
84 |
Goodybe, world.
85 |
86 |
87 | In which we bid adieu to the world.
88 |
89 |
Goodbye, world.
90 |
It was nice being here.
91 |
I hope we meet again...
92 |
96 |
97 |
98 |
99 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/morpheus-red-blue-pill.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/morpheus-red-blue-pill.jpg
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/plain-static-website-cthulahoops-view-source.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/plain-static-website-cthulahoops-view-source.png
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/plain-static-website-cthulahoops.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/plain-static-website-cthulahoops.png
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-1.png
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-about.png
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-index.png
--------------------------------------------------------------------------------
/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-resume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/shite-the-static-sites-from-shell-part-1/shite-demo-2-resume.png
--------------------------------------------------------------------------------
/sources/posts/software-debt/STELLAReportFinalFinal_Coping_With_Complexity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/software-debt/STELLAReportFinalFinal_Coping_With_Complexity.png
--------------------------------------------------------------------------------
/sources/posts/software-debt/clojure-codebase-introduction-retention-code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/posts/software-debt/clojure-codebase-introduction-retention-code.png
--------------------------------------------------------------------------------
/sources/posts/software-demos/index.org:
--------------------------------------------------------------------------------
1 | # SHITE_META
2 | #+title: Software demos as deliberate acts of serious play
3 | #+summary: Making a software demo is a form of deliberate, serious play. An act that feeds our curiosity, inventiveness, and drive. It enlivens. It enriches. It entertains. And as we asymptotically approach the A.G.I. that's just around the corner, the capacity for deliberate, serious play will remain distinctively, deeply, deliciously human. Career software people like yours truly may please take note!
4 | #+author: Adi
5 | #+date: 2023-06-04
6 | #+updated: 2023-06-04
7 | #+tags: programming culture whyto software_design meta
8 | #+include_toc: yes
9 | # SHITE_META
10 |
11 | * Best Software Demo!
12 | To me, the best kind of /software demo/ is any program created in the inventive,
13 | artistic, seriously playful, playfully serious sense of /demoscene/ [fn:1],
14 | /and/ the freely shareable sense of /demoware/ [fn:2].
15 |
16 | Dylan Beattie's brilliant talk, /[[https://dylanbeattie.net/talks/the-art-of-code.html][The Art of Code]]/, is my all time favourite
17 | example of this sense of /demo/.
18 |
19 | #+begin_export html
20 |
21 |
The Art of Code — Dylan Beattie
22 |
23 |
24 |
25 | Software and technology have changed every aspect of the world we live in.
26 | At one extreme are the ‘mission critical’ applications - the code that
27 | runs our banks, our hospitals, our airports and phone networks. Then
28 | there’s the code we all use every day to browse the web, watch movies,
29 | create spreadsheets… not quite so critical, but still code that solves
30 | problems and delivers services.
31 |
32 |
33 | But what about the code that only exists because somebody wanted to write
34 | it? Code created just to make people smile, laugh, maybe even dance? Maybe
35 | even code that does nothing at all? Code that was created just to see if
36 | it was possible?
37 |
38 |
39 |
40 | #+end_export
41 |
42 | Many venues exist featuring such software demos. My favourite public examples
43 | include [[https://bangbangcon.com/][!!Con]], [[https://handmade-seattle.com/][Handmade Seattle]], [[https://sigbovik.org/][Sigbovik]], the [[https://joy.recurse.com/][Recurse Center]].
44 | Your local meetup is a great place to make a little demoscene of your own.
45 |
46 | * Y U NO DEMO????
47 | Like you and I, so many of us career software people first turned to computers
48 | for the sheer creativity of the medium. Endless tinkering. Instant feedback
49 | (gratifying or annoying). Serendipitous side quests. Deep wabbit holes of
50 | bugs-hunting. All the time learning, sharing, staying up all night arguing with
51 | strangers on the Internet. Sometimes even taking their advice. We were /playing/.
52 |
53 | Then, at some point, we went to work on other peoples' software. And after some
54 | more points we perhaps set out to make our own software or, heaven forefend, our
55 | own software business. And then one fine day, dramatically, we caught ourselves
56 | past yet another point, whizzing down the thermocline of drudgery into the cold
57 | depths of despair, intoning...
58 |
59 | #+begin_quote
60 | "WTF; where did the fun go?!"
61 |
62 | --- You, asking the mirror.
63 | #+end_quote
64 |
65 | Yours truly is with you, having managed to brown-out of a software job or two,
66 | and burnout of a software company I tried to help start. The latter fact is even
67 | chronicled in a book which shall remain safely ensconced in nameless obscurity
68 | because nobody needs to re-visit two years of anxiety, insomnia, and the insanity
69 | of 100 hour work weeks, character-building though that life was.
70 |
71 | But wait! Lest the invisible hand that feeds feels embittened...
72 |
73 | * You make. I make.
74 |
75 | I hereby proclaim that I /love/ the rush of making, shipping, scaling product
76 | (and production)!
77 |
78 | Truly, I do.
79 |
80 | All I am saying is, I /also/ know something of the sharp edges that cut. The
81 | dark places one goes to when it all gets too much. Ben Horowitz's line is
82 | hilarious and relatable.
83 | #+begin_quote
84 | “As a startup CEO, I slept like a baby. I woke up every 2 hours and cried.”
85 |
86 | --- Ben Horowitz
87 | #+end_quote
88 |
89 | Except...
90 |
91 | As celebrated as the mythic /Great Man/ might be, the gauntlet of weathering
92 | /The Struggle/ isn't thrown only to /His/ Lonesome Greatness, is it? I believe
93 | anyone who chooses /The Struggle/ of trying to make /something/ from nothing is
94 | playing the high stakes game in their own ways. /They/ too shoulder their share
95 | of the burden of navigating unknown unknowns, existential risks, and the
96 | ever-present specter of abject failure.
97 |
98 | And all this time they though all they did was wade through subtly broken and
99 | misleadingly stale software manuals, fix yet another broken dependency, make
100 | tickets, move tickets, say yes to way too many meetings (for why?), mock A.I.,
101 | fear A.I., use A.I., fear A.I... uh, and other work things.
102 |
103 | And they're not certainly wrong. But they're also not certainly right. For as
104 | much as it is a /"No, but"/ world, intent on smacking your head every time you
105 | think /"hey, what if I just..."/, it is also a /"Yes, and"/ world capable of
106 | saying /"sure, why not?"/.
107 |
108 | All they need to do is inject themselves with a self-prompt. A little red pill.
109 |
110 | #+begin_quote
111 | Aren't I a maker in my own right?
112 | #+end_quote
113 |
114 | Yes, I are.
115 |
116 | And, demos are how I own it [fn:3].
117 |
118 | Hence I demo.
119 |
120 | Hence. You. Demo! [fn:4]
121 |
122 | * To: Serious Business. Cc: All.
123 |
124 | /*Sub: Out with the CTO's Office, in with the CTO's Demoscene!*/
125 |
126 | Seriously.
127 |
128 | Yes the prospect of demo-derived joy will please many, but it's not just
129 | personal, it's business too. Here are some Important Business Reasons for, shall
130 | we say, demo driven business development...
131 |
132 | - /Demos cause progress/ by turning abstractions into tangibles. Shipping
133 | output is a powerful catalyst.
134 | - /Demos rally stakeholders/ around vision and goals. A sharp demo can speak
135 | louder than a thousand meetings.
136 | - /Demos foster psychological safety/ to experiment, transcend set mindsets,
137 | and remove creative blocks.
138 | - /Demos reduce risk/ of sunk costs locking us into bad choices, by virtue
139 | of being intentionally impermanent.
140 | - /Demos educate entertainingly./ We are not machines. Fun and joy are at least
141 | as essential to making creative connections, as the struggle of surmounting the
142 | energy gradient of forming new knowledge.
143 | - /Demos fuel camaraderie/ through shared experiences of making, failing,
144 | showing (and showing off!) little and big cool /warez/.
145 | - /Demos sell product/ by making our product relatable to customers in their
146 | unique contexts.
147 |
148 | And last but not least...
149 |
150 | - /A truly great demo is indistinguishable from magic./ After it occurs, the
151 | impossible becomes possible. A clear boundary separates past and future. Life
152 | changes forever. This is the realm of genius and wizardry.
153 |
154 | /"Ah, 20% time! Culture hack!"/, you say.
155 |
156 | I say /"psych!"/.
157 |
158 | In theory, culture hacks work in practice. What works is the intangible /that/.
159 | That which fosters a pervasive culture of serious play. That which makes those
160 | of us in the business of software—indies, teams, companies—get very good indeed
161 | at what we do.
162 |
163 | You see you can't /make/ your /demos/ love The Demo.
164 |
165 | But you can certainly show the way.
166 |
167 | One way is to walk the way.
168 |
169 | * So demo that demo already
170 | Maybe you want to lead by example. Or maybe you want to rethink your [[https://www.evalapply.org/now][own]]
171 | entire life as a software maker (among other things). /The Way of the Demo/ may
172 | be just what the doctor ordered.
173 |
174 | [[./index.html#best-software-demo][Beattie]] brilliantly illuminates for us career software people that it is not
175 | strange to experience respite and recovery from the business of serious software,
176 | in the guise of even more software; seriously playful software.
177 |
178 | So venture thither! Make fun-for-you software demos, while you await the day
179 | when your hip new LLM friends finally learn how to alliterate wryly, cleverly,
180 | spontaneously while they demoscene their cool demos while also running your
181 | company or your life to runaway success.
182 |
183 | That'll be the day.
184 |
185 | ;)
186 |
187 | * Footnotes
188 |
189 | [fn:1] https://en.wikipedia.org/wiki/Demoscene
190 | #+begin_quote
191 | The demoscene is an international computer art subculture focused on producing
192 | demos: self-contained, sometimes extremely small, computer programs that produce
193 | audiovisual presentations. The purpose of a demo is to show off programming,
194 | visual art, and musical skills. Demos and other demoscene productions (graphics,
195 | music, videos, games) are shared at festivals known as demoparties, voted on by
196 | those who attend and released online.
197 | #+end_quote
198 |
199 | [fn:2] However, the other notion of demoware as /intentionally crippled/ software
200 | is... yuck.
201 | #+begin_quote
202 | *Demoware*: Software that is used to demonstrate a product's features, but has limitations.
203 | It will either expire at a set time, or it is limited in functionality. See
204 | trialware, crippleware, lite version, shareware and wares.
205 |
206 | --- [[https://www.pcmag.com/encyclopedia/term/demoware][pcmag.com]]
207 | #+end_quote
208 | Deliberate crippling is very different from making it deliberately small (e.g.
209 | Unix tools), which is a forward-looking creative constraint. I will argue that
210 | even WordPress, because of its pluggable architecture, is "deliberately small".
211 | The permutations of WP + pluggable code, in the WP universe, absolutely dwarf the
212 | core CMS. That kind of a design choice liberates creativity, which crippleware
213 | forefends /by design/. Ick. For similar reasons, /lite version/ (even open core)
214 | is an ethical minefield. One could start off well-intentioned, but when the
215 | quartely earnings come a-callin' it gets very hard to remain generous about
216 | foundational promises like "free forever" or "10,000 messages searchable".
217 | Trialware is also OK in my book, provided one gets to use the whole thing for a
218 | reasonable period, with no data lock-in, enough to make up one's mind about
219 | burdening the exchequer.
220 |
221 | [fn:3] I'm /that guy/ who insists on making all his [[https://github.com/adityaathalye/slideware][conference talks]]
222 | live demos. Dangerous? Who's that?
223 |
224 | [fn:4] Hey, maybe get the A.I. do the meeting instead of you? And the
225 | meeting notes. And schedule the follow up meeting? And... Well, I don't know
226 | what will make you nerd out. I get kicked about things like this...
227 | - How far can I go only with Bash?
228 | - Suppose I implemented in $Language?
229 | - This technique / trick / pattern is amazing! Here's why and how to use it!
230 | - /"Ooooh, what does this button do?"/ (a thought that emerges when inside the
231 | guts of some library or database manual or profiler feature set).
232 | - What if we were forbidden the use of a database for X?
233 |
--------------------------------------------------------------------------------
/sources/posts/tools-for-thought/index.org:
--------------------------------------------------------------------------------
1 | # SHITE_META
2 | #+title: Riff: Classifying Tools for Thought
3 | #+summary: Trying out a classification for "Tools for Thought" as a means of augmenting the human intellect, hot on the heels of recent community conversations about ChatGPT, CoPilot, Stable Diffusion etc...
4 | #+author: Adi
5 | #+date: 2023-01-19
6 | #+updated: 2023-01-19
7 | #+tags: meta riff intelligence_augmentation tools_for_thought
8 | #+include_toc: no
9 | # SHITE_META
10 |
11 | At the risk of badly mangling things smarter people have probably already worked
12 | out [fn:1] over seven plus decades and counting of the ongoing computer revolution [fn:2],
13 | here goes.
14 |
15 | * Category One: Memory Assistant
16 |
17 | I'd box all the note taking tools in here---as persistent store and/or organiser
18 | and/or search tools. As a user of such a tool, all meaning-making is the job of my
19 | brain. I must work out the known unknowns, deal with the unknown unknowns when
20 | they happen etc.
21 |
22 | The tool functions like a mechanical memory + ontology + topology assist, which
23 | helps me do a lot of thinking + learning /over long periods of time/ (like days,
24 | weeks, years). Things like Ken Iverson's concept of /Notation as a Tool of Thought/ [fn:3]
25 | would also fall into this category (filed under "methods to compress information
26 | into symbols and mnemonics and transmit them").
27 |
28 | Hell, why be so fancy? I dump it all into my haphazardly organised org files and
29 | ~rgrep~ and its going... fine?
30 |
31 | 🤷♂️
32 |
33 | * Category Two: Co-processor
34 |
35 | Two intellects working together to arrive at a common model / picture / frame of
36 | understanding. People on the Internet and in my familiar circle of gentlenerds
37 | seem to be excited about CoPilot / ChatGPT etc. in this sense.
38 |
39 | I can't help but see those as just more of /Category One/ type tools. Why?
40 | Because co-processors must be capable of communicating understanding of abstract
41 | models with each other (a kind of "Communicating with Aliens" [fn:4] problem).
42 | AFAIK, none of these tools are capable of explaining /why/ they're doing what
43 | they're doing.
44 |
45 | The one exception I could concede to is machines that are excellent at /finite
46 | games/. That too because odds are higher of being able to independently verify
47 | the machine's meta descriptions, and the outcomes would be reasonably reproducible
48 | (viz. "I did X, because of heuristic Y, and rules P, Q, R.").
49 |
50 | * Category Three: Teacher
51 |
52 | One intelligence absorbing greater truths discovered by (or previously absorbed
53 | by) another intelligence. Where the other intelligence has the metacognition to
54 | know what they know, and to direct the other intelligence to that level of
55 | understanding. The magic of beings capable of transferring culture, stories,
56 | Laplace transforms, rate reaction equations, rules of grammar, interpretation of
57 | law etc. across minds, and generations.
58 |
59 | I'm thinking tribes, coaches, mathematics circles, therapists, the Vulcan Science
60 | Academy and so forth... the ability to conjure up and communicate /about/ concepts
61 | like communicating with aliens.
62 |
63 | AFAIK, only biology is capable of producing this category of tools of thought.
64 |
65 | In this context, I'm fascinated by the work being done on Bioelectric Networks
66 | by Michael Levin's group [fn:5]. Almost prosaically, in their work/world the
67 | definition of intelligence is a /mechanical/ one. So much so that they are able
68 | to model and then produce (though not control or guarantee) biological structures
69 | capable of progressively more sophisticated kinds of intelligence in the mechanical
70 | terms they describe.
71 |
72 | Which makes me wonder...
73 |
74 | Is there something like the Kardashev Scale [fn:6], but for levels/depths/spans
75 | of Intelligence?
76 | * Footnotes
77 |
78 | [fn:1] These two links capture the overarching context, discovered thanks to
79 | that fine Gentleman and Scholar, [[http://fogus.me/me/][fogus]].
80 |
81 | [[https://www.iosrjen.org/Papers/Conf.19021-2019/Volume-5/6.%2030-33.pdf][Overview of Intelligence Amplification]].
82 | /Intelligence amplification/ (IA) refers to the effective use of Information
83 | technology in augmenting human intelligence.
84 |
85 | /[[http://www.rheingold.com/texts/tft/][Tools for Thought]]/;
86 | an "an exercise in retrospective futurism" by Howard Rheingold, who introduced
87 | the idea as follows.
88 | #+begin_quote
89 | *Tools for Thought* is an exercise in retrospective futurism; that is, I wrote it
90 | in the early 1980s, attempting to look at what the mid 1990s would be like. My
91 | odyssey started when I discovered Xerox PARC and Doug Engelbart and realized that
92 | all the journalists who had descended upon Silicon Valley were missing the real
93 | story. Yes, the tales of teenagers inventing new industries in their garages were
94 | good stories. But the idea of the personal computer did not spring full-blown
95 | from the mind of Steve Jobs. Indeed, the idea that people could use computers to
96 | amplify thought and communication, as tools for intellectual work and social
97 | activity, was not an invention of the mainstream computer industry nor orthodox
98 | computer science, nor even homebrew computerists. If it wasn't for people like
99 | J.C.R. Licklider, Doug Engelbart, Bob Taylor, Alan Kay, it wouldn't have happened.
100 | But their work was rooted in older, equally eccentric, equally visionary, work,
101 | so I went back to piece together how Boole and Babbage and Turing and von Neumann
102 | — especially von Neumann — created the foundations that the later toolbuilders
103 | stood upon to create the future we live in today. You can't understand where
104 | mind-amplifying technology is going unless you understand where it came from.
105 | #+end_quote
106 |
107 | [fn:2] [[http://www.vpri.org/pdf/m2007007a_revolution.pdf][The Real Computer Revolution Hasn't Happened Yet]] — Alan Kay,
108 | Viewpoints Research Institute. See also, [[https://www.youtube.com/watch?v=oKg1hTOQXoY][video]] of
109 | the talk he delivered at OOPSLA, in 1997.
110 |
111 | [fn:3] [[https://www.jsoftware.com/papers/tot.htm][Notation as a Tool of Thought]], by Ken Iverson.
112 | #+begin_quote
113 | The thesis of the present paper is that the advantages of executability and
114 | universality found in programming languages can be effectively combined, in a
115 | single coherent language, with the advantages offered by mathematical notation.
116 | #+end_quote
117 |
118 | [fn:4] The notion that fell out of JCR Licklider's thinking on how might we make
119 | an "[[https://en.wikipedia.org/wiki/Intergalactic_Computer_Network][Intergalactic Computer Network]]".
120 |
121 | #+begin_quote
122 | Consider the situation in which several different centers are netted together,
123 | each center being highly individualistic and having its own special language and
124 | its own special way of doing things. Is it not desirable, or even necessary for
125 | all the centers to agree upon some language or, at least, upon some conventions
126 | for asking such questions as “What language do you speak?” At this extreme, the
127 | problem is essentially the one discussed by science fiction writers: “how do you
128 | get communications started among totally uncorrelated “sapient” beings?”
129 | #+end_quote
130 |
131 | [fn:5] Check out /[[https://as.tufts.edu/biology/levin-lab][The Levin Lab]]/ at Tufts University, for some brain-melting science.
132 | #+begin_quote
133 | We work at the intersection of developmental biology, computer science, and cognitive
134 | science. Our goal is to understand degrees of intelligence at multiple scales of
135 | biological, artificial, and hybrid systems; we use these insights to develop
136 | interventions in regenerative medicine.
137 | #+end_quote
138 |
139 | [fn:6] The [[https://en.wikipedia.org/wiki/Kardashev_scale][Kardashev Scale]] /"is a method of measuring a civilization's level of
140 | technological advancement based on the amount of energy it is able to use. The/
141 | /measure was proposed by Soviet astronomer Nikolai Kardashev in 1964."/
142 |
143 | Michael Levin's group proposes this tantalizing [[https://aeon.co/essays/how-evolution-hacked-its-way-to-intelligence-from-the-bottom-up][modular model of cognition]].
144 | #+begin_quote
145 | Intelligence is not something that happened at the tail end of evolution, but
146 | was discovered towards the beginning, long before brains came on the scene.
147 | #+end_quote
148 |
--------------------------------------------------------------------------------
/sources/posts/what-have-you-been-curious-about/index.org:
--------------------------------------------------------------------------------
1 | # SHITE_META
2 | #+title: What have you been curious about?
3 | #+summary: Arguably a more interesting, revealing, and kinder question than "What are you curious about?"
4 | #+author: Adi
5 | #+date: 2023-06-21
6 | #+updated: 2023-06-21
7 | #+tags: meta riff
8 | #+include_toc: no
9 | # SHITE_META
10 |
11 | If you are anything like me, you will have about five answers at any given point
12 | in time for "What /are/ you curious about?". And that set will change depending
13 | on the day of the week. Or, also like me, you may be having that sort of week
14 | where you (mistakenly) "know for sure, beyond a shadow of doubt" that you have
15 | lost the curiosity directive. Basically, you might immediately (and once again,
16 | mistakenly) feel like a flake or a failure or some horrid in-between. I sure do.
17 |
18 | Luckily, arguably, a more interesting, revealing, and kinder question is;
19 | "What /have you been/ curious about?".
20 |
21 | You see as it happens, days glom into weeks, weeks into months and maybe even
22 | years. Only in hindsight do I discover that I /have been/ non-casually curious
23 | about "X". That my mind kept returning to that "X". That it drove me to action
24 | in some way; a blog post written, a book read, a long discussion had, a life
25 | experiment attempted, a tutorial followed, a behaviour tried, an experience opted
26 | into etc.
27 |
28 | For me the last year-plus became about examining the contents of my mind,
29 | identifying observing and acknowledging personal traits and oddities, making the
30 | self do things that past-me would scoff at or shy away from or fear, articulating
31 | what I want my professional life to be, and so forth.
32 |
33 | I can tell that this has been the "curiosity drive" that I was so convinced I had
34 | lost permanently, because I recently created a [[https://www.evalapply.org/now]["now" page]] that
35 | publicly reflects some of that, and ended up writing [[https://www.evalapply.org/posts/software-demos/][this blog post]] about what I
36 | want to do for fun and money(!) and ended up applying for a second batch at the
37 | [[https://www.recurse.com/][Recurse Center]] (starting soon!).
38 |
39 | That sounded like heavy work, but I have honest-to-goodness been /playing/ in the
40 | sense of /serious play/. Among other things, I have re-framed /"adult"/ as /"still
41 | an impish, wide-eyed, curious thirteen year old underneath sediments and crusty/
42 | /layers of accreted life experiences and beliefs and rules and... just *stuff*"/.
43 |
44 | And I feel a looking-back-to-curiosity exercise has power to shed light on where
45 | to look ahead (and why to do it). More so, I feel it has power to grant permission
46 | to that "insatiably curious thirteen year old self" to step out and /play/.
47 | Because it probably already has been up to something, while your attention was
48 | elsewhere.
49 |
50 | So, here is a prompt (see what I just did there? ;-)) ...
51 |
52 | */What /have you been/ curious about?/*
53 |
54 | LLAP _\\//
55 |
56 | (NB: This is a lightly edited version of my newsletter that went out today.)
57 |
--------------------------------------------------------------------------------
/sources/posts/what-makes-functional-programming-systems-functional/index.org:
--------------------------------------------------------------------------------
1 | # SHITE_META
2 | #+title: What makes Functional Programs and Systems "Functional"?
3 | #+summary: In which we ponder the Functional Nature of Life, The Universe, and Everything. Please feel free to follow through the weeds, or jump straight to the bottom for my 2 nano BTC on the matter. (Or my current state of mind, at any rate.)
4 | #+author: Adi
5 | #+date: 2022-02-22
6 | #+updated: 2022-02-22
7 | #+tags: meta functional_programming architecture systems
8 | #+include_toc: yes
9 | # SHITE_META
10 |
11 | Disclaimer: I live in the Land of Lisp, meditate in the Church of Alonzo, and am ever-wary of The State. Only converts /might/ find some entertainment value.
12 |
13 | #+begin_quote
14 | /"For the love of State is the root of all evil: which while some coveted after,/
15 | /they have erred from Lambda the Ultimate, and pierced themselves through with/
16 | /many sorrows."/
17 |
18 | --- self.
19 | #+end_quote
20 |
21 | * Is it already suffusing your very being?
22 | Because so-called "Functional Programming" started becoming pretty sexy over
23 | the 2010s. By the 2020s, it started infiltrating all the things, small and big
24 | and hyperscaled.
25 |
26 | Now you can't get people to shut up about their declarative infrastructure-as-code
27 | as-YAML microservices-first infinitely elastic shared-nothing event-sourced
28 | map-reducing lambda architecture marvels.
29 |
30 | Now your VCs and your board nod sagely when these words flash past in your slick
31 | OKR plan vision strategy slide decks. Now they further /"Hey, quick question"/
32 | you to same-page on your strategy for blockchain and smart contracts. And
33 | general web3 readiness. So does every novice hire it seems, no matter their role.
34 |
35 | Now---and be honest, OK?---don't you feel like everybody should just mentally
36 | lie down for a few minutes in their metaverse, pass around the meta-ayahuasca,
37 | and after the purge just ask simple meta-questions about FP and life for a
38 | change? Because, for the love of lambda, we haven't even gotten a breather
39 | from the fast-nearing AI supremacy?
40 |
41 | No? OK, consider the following incomplete list of traits commonly attributed
42 | to the "Functional" paradigm of programming languages and of systems. Alongside,
43 | consider:
44 |
45 | - Which traits does your pet programming language (or system) provide by default?
46 | - Which traits do you create yourself in your programs (and systems)?
47 | - Which traits draw the hard line between "Functional" and other kinds of
48 | programs (and systems)?
49 | - Which traits /really/ matter?
50 | - Why would you even want any of it in the first place?
51 |
52 | And will we really achieve world domination with FP? (Yes, we will.)
53 | * Is it Mathematics?
54 | Is it about writing "pure" functions?
55 |
56 | This is a bit of a tautology. A function is "pure" by definition. It specifies
57 | a fixed mapping of an input domain to an output domain. When invoked, it
58 | changes nothing about the state of the world. Which begs the question, how can
59 | a thing that /does/ nothing be computationally useful? (Spoiler: it isn't in
60 | isolation, unless of course, you figure out a way to use the computational
61 | uselessness to turn staggeringly larger amounts of electricity into progressively
62 | smaller fragments of your imagination, on a blockchain somewhere). But I digress...
63 |
64 | Must we further also have "first-class" functions?
65 |
66 | Ones that we can pass around as values? This lets us describe all manner of
67 | deferred computations, including un-computable absurdities like infinite sequences,
68 | and partial applications that will sit around forever if we don't complete them.
69 |
70 | And do we absolutely /need/ the solid ground of Lambda Calculus or Category
71 | Theory to /pre-exist/?
72 |
73 | That's an easy one to refute, but these things have become rather holy grail-y
74 | now. If you don't know your monad laws, I'm sorry you're not permitted near
75 | functions any more. Oh, and what about proofs? These are in the process of
76 | holy-grailing too...
77 | * Is it being "declarative"?
78 | Reduce/ravel/plan/derive/goal-seek?
79 |
80 | To be "declarative" is to want to write down a set of constraints or rules
81 | or input-output relationships, and leave it to the system to figure out not
82 | only /what operations/ to perform, but also /how/ and /when/ to perform them.
83 |
84 | The declarative world is thrice-removed from the "procedural" world, where we
85 | have to tell the computer the what, how, and when in excruciating detail.
86 |
87 | SQL, Prolog, APL are seen as "highly declarative" languages. CSS is also a
88 | highly declarative language (which, I feel, is why people have a really hard
89 | time with it---CSS is a /constraint mechanism/ but our minds are strongly
90 | conditioned for procedural thinking).
91 |
92 | And maybe AI is the currently-ultimate expression of being "declarative". We
93 | declare that we don't even know what to declare, and write a meta-declaration
94 | and hope to Lambda that it will figure out the declaration that we should have
95 | fed to the computer in the first place.
96 | * Is it being "data-oriented"?
97 | viz., choosing to work in terms of inert "literal" entities like JSON or EDN
98 | or XML or some structured binary encoding, instead of "live" objects with
99 | internal state? Asynchronous message-passing instead of synchronous remote
100 | procedure calls (whether through object graphs, or across computer networks)?
101 |
102 | Is it about adhering to the principle of referential transparency; i.e. the
103 | equivalence of evaluated functions and literal data?
104 | * Is it about "Statelessness"?
105 | No machine registers? No place-oriented "mutable" state? No pointers? No
106 | shared references? No side effects? Yes laziness? Yes append-only storage?
107 | Yes event sourcing?
108 | * Is it about "managed" environments?
109 | Language mechanisms that relieve us of the burden and perils of malloc/free?
110 |
111 | Garbage collection? Immutable persistent data structures? Type-directed
112 | compile-time memory access/use control? Multi-Version Concurrency Control?
113 |
114 | Kubernetes?
115 | * Is it about following some discipline, and maybe automating it?
116 | viz. a /system/ or a design philosophy of doing things, such as:
117 |
118 | - An accountant-like state management practice.
119 | - Carefully manipulating state only when absolutely necessary.
120 | - Hard-wiring FP traits into a programming language / system.
121 | - Choosing a strict single-process, non-branching, forward-looping-only
122 | method of flow control.
123 | - Having standard, highly general purpose compositional interfaces oriented
124 | around streaming data flow?
125 | - Eiffel-like Design-By-Contract? (Which is surprisingly "functional".)
126 | - Continuation-passing style?
127 | - ... etc?
128 | * My 2 nano BTC on the matter
129 | I think all of our popular programming systems are object-oriented /and/
130 | imperative by default, whether explicitly or implicitly. Now they all seem
131 | to be adding "functional" looking features too. But to me, the functional-ness
132 | of a language (or a system) is not about the feature set, but fundamentally
133 | about its default (automatic) relationship with The State (of the world).
134 | ** *The "Object-Oriented" way* inexorably pushes us to clone reality.
135 | We ingest and manage as much state and behaviour as possible, in order to
136 | emulate the world. This, by construction, requires us to operate based on
137 | theories and assumptions (internal state) doomed to always lag and diverge
138 | from reality. In other words, it's a synchronization problem mixed with the
139 | impossible ideal of wanting to make the actual run-time look like the apparent
140 | run-time. Concurrency quickly reveals the difficulties of trying this.
141 | ** *The "Imperative" way* is more like doing open heart surgery.
142 | We have to get in there and manually orchestrate control flow, interrupt things,
143 | and get the whole of it to mutate in-place /while it is running/. The race
144 | condition is always imminent---will we close first, or will it stop first?
145 | We never /really/ know if the seemingly routine procedure will cause something
146 | totally unrelated to blow up in our faces this time around. Meanwhile we have
147 | very sharp instruments in hand, and have to do a lot of it by /fingerspitzengefühl/
148 | because half the time we literally can't see where to cut or clamp or suture.
149 | I didn't train for this but I hope you have. For at least 10 years. You have,
150 | right? ... Right?
151 | ** *The "Functional" way* wants to completely invert these models.
152 | It tries to expel all system state from inside to the outside. In so doing, it
153 | immerses itself in world-state and tries to be a new conduit for different
154 | parts of outside reality to communicate, hoping to make it behave to our liking.
155 | This, by construction, forces us to think explicitly in terms of events
156 | (discrete sensing and sequencing of world updates, i.e. facts), messaging
157 | (encoding and transmitting facts as data), and time (asynchronicity, consistency,
158 | consensus).
159 |
160 | The functional way is also totally different from how we experience the world.
161 | The world is a concurrent, recurrent, parallel, fractal distributed system of
162 | systems. And it is also stochastic and full of discontinuities. We have evolved
163 | to form just-about-good-enough models of reality in our heads, in very bounded
164 | contexts, to the extent necessary for survival. These internal models smooth
165 | over all sorts of discontinuities, resist change while survival odds feel good,
166 | and determine how we behave regardless of what might actually be out there.
167 | We learn imperatively by poking and prodding the world around us while it hums
168 | along. I think this is why it takes serious effort to learn the "functional"
169 | way. We have to upend our entire mental model of how to do things in the world.
170 | ** *Maybe pure data at rest* is the only truly "functional" thing?
171 | Maybe not. Like a pure function, pure data at rest does nothing and so is
172 | useless to us when dormant. Besides, it is "pure" /only/ for the duration
173 | entropy permits its complete un-corrupted recovery. Ultimately, the laws of
174 | Physics will always win. To muddy the waters a bit more, even the purest of
175 | pure functional systems contain state; signals in flight or some in-progress
176 | computation.
177 |
178 | The only saving grace is that in a highly functional system, any run-time
179 | state is entirely recoverable, reproducible, discrete, and isolated.
180 | ** *All said, everything mutates sooner or later.*
181 |
182 | I don't know how to navigate this, except to remind myself about The Thing
183 | That Actually Matters... to always remember that The State is the frenemy.
184 |
185 | So while it pleases me that so many wish to eagerly embrace the Functional Way,
186 | it is good to be soberly mindful of scopes, lifetimes, margins, error budgets,
187 | and bounds of reality (state) and of data (information about reality). Good
188 | situational awareness will lead us to build highly functional systems that
189 | keep The State where it belongs, and still do useful things with it.
190 | ** And all /that/ said, I leave you with this prayer:
191 | #+begin_quote
192 | O Lambda the Ultimate, \\
193 | bless the reader of these words.
194 |
195 | That their core be functional, \\
196 | and their functions be pure.
197 |
198 | That their data be immutable, \\
199 | so they may know the value of values.
200 |
201 | That their systems be composable, \\
202 | so they may grow and scale with grace.
203 |
204 | That their States only mutate \\
205 | in pleasantly surprising ways.
206 |
207 | For otherwise nothing lives. \\
208 | Nothing evolves.
209 |
210 | In the name of the alpha, \\
211 | the beta, and the eta...
212 |
213 | (λx.x x) (λx.x x)
214 | #+end_quote
215 |
--------------------------------------------------------------------------------
/sources/posts/which-clojure-codebases-to-read-how-and-why/index.org:
--------------------------------------------------------------------------------
1 | # SHITE_META
2 | #+title: Which Clojure codebases should I read? How and why?
3 | #+summary: Newcomers to Clojure so frequently ask this question that an FAQ/Guide is being discussed, to add to the Clojure website. I struggled a lot with the question too, when starting off in Clojureland. Here are my notes and opinions.
4 | #+author: Adi
5 | #+date: 2022-04-29
6 | #+updated: 2022-04-29
7 | #+tags: clojure howto whyto
8 | #+include_toc: yes
9 | # SHITE_META
10 |
11 | Newcomers to Clojure so frequently ask this question that an FAQ/Guide is
12 | being discussed, to add to the Clojure website. See Issue #586:
13 | [[https://github.com/clojure/clojure-site/issues/586][Add FAQ or guide for example projects]].
14 | Please add your thoughts to that ticket!
15 |
16 | This post is my (opinionated) take on it. I struggled a lot with this too.
17 | I still do from time to time, in unfamiliar territory, and these days I feel
18 | like I'm in unfamiliar territory a lot. Various Clojurians --- individuals and
19 | groups --- have been producing so much creative, diverse work over these last
20 | few years that keeping up quickly became impossible!
21 |
22 | No doubt this surfeit of creativity intimidates newcomers. The strange ideas,
23 | lingo, thinking, and writing espoused by Clojurians can seem so very alien.
24 | But despair not, for Clojureland also has a surfeit of friendly, helpful people.
25 | And very many of our codebases are small! You will be able to read them! And
26 | get help if you get stuck!
27 |
28 | This post explains what I believe I've done subconsciously over the years. It
29 | is as much an answer for somewhat experienced me as it is for the relative
30 | newcomer you!
31 |
32 | * A quick motivating example
33 | I haven't done much focused code reading recently, but semi-recently, I went
34 | down the rabbit hole of comparing "System" libraries. The details are for a
35 | separate blog post. I've placed it here as reference material to illustrate
36 | some of this post.
37 |
38 | [[https://github.com/adityaathalye/slideware/raw/master/Grokking%20Libraries%20in%20Clojureland.pdf][Grokking Libraries in Clojureland]] (PDF, slides).
39 | * Heuristics to choose a project to read
40 | This kind of code reading is best viewed as applied, directed reading designed
41 | to deeply understand creative (and destructive) ways to use an instrument,
42 | in this case, Clojure the language, its standard library, idioms, patterns,
43 | and style.
44 |
45 | The key problem here is "you don't know what you don't know". Coming up with
46 | a set of heuristics can help discover good choices. In fact, one can make a
47 | decision-making matrix of #{libraries} X #{heuristics}, like so:
48 |
49 | | Heuristic / Library | Lib A | Lib B | Lib C |
50 | |--------------------------------+-------+-------+-------|
51 | | Code size (LoC) | | | |
52 | | Code complexity (high/mid/low) | | | |
53 | | Utility | | | |
54 | | Stability (high, mid, low) | | | |
55 | | Docs | | | |
56 | | Talks | | | |
57 | | Tutorials | | | |
58 | | ... | | | |
59 |
60 | It also helps to decide a domain or area of knowledge (web/HTML, web/HTTP,
61 | algorave, databases etc.), before drawing up the decision-making matrix.
62 |
63 | Here is a set of opinions and heuristics to steal and/or riff off.
64 | ** Choosing an area of domain knowledge
65 | Knowledge about a domain or problem space is a source of massive cognitive
66 | overhead. It helps a lot to pick an area of knowledge you feel you are most
67 | comfortable with, and narrow your code search and reading to that area.
68 |
69 | For example, web programmers may want to read an HTTP library. Musicians may
70 | want to find a music synthesis codebase. Frontend people many like to read
71 | HTML / CSS parsers or generators. Database nerds may want to know how we do
72 | stuff without fancy ORMs etc.
73 | ** Project type
74 | Choose single-purpose libraries. The Clojure world is full of libraries of
75 | various sizes and responsibilities. Most of these tend to focus very sharply
76 | on one single problem, which makes it easier to build and retain complete
77 | context in one's head. These tend to be good place to start.
78 |
79 | Application code, by contrast, tends to be a complex (or complected) mix
80 | of domains, patterns, libraries. This makes it easy to get lost.
81 |
82 | Further, there is no one true way to organise Clojure apps. Often, apps
83 | don't even mirror standard conventions seen elsewhere (e.g. MVC/MVCC etc.).
84 | Clojure apps are assemblies of libraries, where each library choice comes
85 | with some technical and/or design tradeoff. Further, build tools vary. App
86 | configuration systems vary. etc. etc. many tens of moving parts.
87 |
88 | One eventually develops a sense for it all, but most of it is completely not
89 | obvious when one is just starting off. It makes way-finding really hard.
90 | You will spend lots of time just to figure out how some app is wired together.
91 |
92 | So it's better to subtract everything until you are left with a singular
93 | idea and its expression. That is, often, a single-purpose library!
94 | ** Code size
95 | Prefer libraries with as few lines of code as possible. The good news is
96 | that Clojure libraries tend to focus on a single well-defined problem,
97 | which tends to result in small /and complete/ solutions to problems. Many
98 | excellent Clojure libraries weigh in at under 1,000 LoC.
99 |
100 | With some effort, you can hope to hold the entire codebase in your head.
101 | Once that happens, your brain will discover things in diffuse mode in your
102 | shower or on a walk or something. And then you know you've struck gold!
103 | ** Code complexity
104 | Even if a library is small, it may be complex, because it address a hard
105 | problem. This is tricky to infer up-front, and that's fine. Getting stuck is
106 | part of the process. One mitigation is to skim-read the source first. If you
107 | see very deeply indented code, or lots of large functions, or lots of macros,
108 | maybe park it for later. Definitely prefer libraries without advanced macrology
109 | (unless your purpose is to understand advanced macrology :).
110 | ** Utility
111 | How much is the library used? A well-used library may be widely used, or it
112 | may be niche but heavily used. Either way, odds are good that the source has
113 | been vetted. Also it improves your chances of finding help if you get stuck.
114 |
115 | Some proxy measures like github stars, a dedicated channel in Slack or Zulip,
116 | or references in mailing list history can help judge this. If you are still
117 | uncertain, just drop a message in one of the community forums. Helpful people
118 | will help!
119 | ** Talks, docs, tutorials
120 | Are talks, docs, and tutorials available for the library, or at least the space
121 | the library addresses? The code often does not tell the full story of the
122 | "why?" of the library, the roads not taken or choices unmade. Code also tends
123 | not to convey the author's mental process. This is the highest value learning
124 | that comes from reading; viz. learning a new way to think. So knowing what
125 | knowledgeable people have been saying about the space/code is very useful.
126 | ** Beware the falsehood of "dead" repos
127 | Many in-use Clojure libraries don't see frequent (or large) updates. This is
128 | a virtue in our circles. It indicates finished-ness and stability. In fact, if
129 | you find a repo with no commits for months or years, and a "liveness advisory"
130 | on it, you /definitely/ want to read that code. That code has proven itself
131 | handsomely!
132 | * Effective way(s) to read a project
133 | This is basically a set of ways to /engage/ with the material. The programmer
134 | equivalent of textbook underlining, marginalia, scribbling notes and diagrams.
135 | ** Read the README and API docs
136 | And keep them handy. Ideally figure out the /why/ of the project before getting
137 | into the weeds, because weeds there will be.
138 | ** Use the REPL
139 | I habitually use ~clojure.repl/source~, to pull up source code for functions
140 | that are new to me.
141 | ** Learn to navigate the code
142 | Find editor functions that let you see an overview of a namespace, jump to
143 | and fro from definitions.
144 | ** /Experiment/
145 | IMHO it is critical to /experiment/ with the code. Passive reading gets us
146 | only so far. To truly grok code one must modify and play with it! This is
147 | where one thanks oneself for choosing a focused, concise project :)
148 | ** "Comparitive Literature" approach
149 | Preferably find a space where multiple libraries exist. As long as one well
150 | used library is present, it is fine if unused ones exist too. Frequently
151 | contemporary libraries aim to overcome walls their classic brethren hit, or
152 | are novel approaches to the same problem that offer a different set of
153 | tradeoffs v/s the classics.
154 |
155 | There is much to learn from bygone classics, but only after one works through
156 | the contemporary stuff, and has several "Wait, but why?" moments.
157 | ** Alt-implementation
158 | The Black Belt move is to combine experimentation and comparative lit. and
159 | try to hack up your own alternate implementation, by purposely taking a
160 | completely different approach to representing the problem space, as compared
161 | to the library under study.
162 | * Suggested projects with short reasons why to read
163 | This is a first-cut top-of-mind list, from the top of /my/ chaotic mind.
164 | Take with a pinch of salt!
165 |
166 | Cross-reference with [[https://github.com/clojure/clojure-site/issues/586][this discussion]]
167 | where folks are trying to figure out what projects to suggest, how, and why,
168 | as part of an FAQ or a Guide at the official Clojure website.
169 | ** web/HTML/CSS
170 | - *[[https://github.com/weavejester/hiccup][weavejester/hiccup]]* to understand
171 | a natural translation of one domain (HTML) to Clojure data. Writing HTML as
172 | Clojure data is what we mean when we say "well, it's just data" or "data DSL".
173 | - *[[https://github.com/noprompt/garden][noprompt/garden]]*
174 | which does unto CSS what Hiccup does unto HTML.
175 | ** web/HTTP
176 | - *[[https://github.com/ring-clojure/ring][Ring]]*, to understand one of the
177 | most popular HTTP server abstractions in the Clojureverse.
178 | ** Clojure itself
179 | - *[[https://github.com/clojure/clojure/blob/master/src/clj/clojure/test.clj][Clojure.test]]*
180 | which is the built-in testing framework, in a surprisingly small amount of
181 | code. Also, incidentally, to start feeling OK diving into Clojure's own source.
182 | ** Database queries
183 | - *[[https://github.com/seancorfield/honeysql][honeysql]]*
184 | to grok a way to represent the Domain of SQL queries as Clojure data.
185 | ** Music maker
186 | There's lots out there that I don't know of, but...
187 | - [[https://github.com/overtone/overtone][overtone/overtone]], but it is a big project
188 | - [[https://github.com/ssrihari/ragavardhini][ssrihari/ragavardhini]] is smaller
189 | ** "System" start/stop thingy
190 | - *[[https://github.com/stuartsierra/component][stuartsierra/component]]*
191 | "Managed lifecycle of stateful objects in Clojure".
192 | ** App configuration thingy
193 | - *[[https://github.com/juxt/aero][juxt/aero]]*
194 | "A small library for explicit, intentful configuration."
195 | ** Applications designed for "copy-and-hack"
196 | As [[https://github.com/puredanger][@puredanger]] and [[https://github.com/plexus][@plexus]] have [[https://github.com/clojure/clojure-site/issues/586][written here]]:
197 | If you're wondering "what's something similar I can copy and hack on" or
198 | "what does a real project look like"?
199 | - [[https://github.com/seancorfield/usermanager-example][seancorfield/usermanager-example]]
200 | - [[https://github.com/clojureverse/clojurians-log-app][clojureverse/clojurians-log-app]]
201 | ** Large-scale repos
202 | - [[https://github.com/nasa/Common-Metadata-Repository][NASA's Common Metadata Repository]]
203 | project, just to have one's mind blown :D
204 | * Library maintainers: Would HOWTOREADMEs make sense?
205 | Hi! First, thank you for your library work! I'm just thinking aloud here...
206 |
207 | Suppose Clojure library authors write little reading guides for their projects;
208 | *"How to read me"s*? Maybe a paragraph or two that provides context like:
209 | - Suggested entry point and Meta-dot pathway
210 | - The most important namespace(s)
211 | - Interesting functions
212 | - Tests or Rich comments to try out on priority
213 | - Any known hairy-scary bits or gotchas
214 | - Perhaps a line or two suggesting "compare with Alternate Libs A, B, C"
215 | - etc.
216 |
217 | A reader may fruitfully combine this guidance with information about project
218 | purpose, rationale, and any open issues marked "beginner" etc.
219 |
--------------------------------------------------------------------------------
/sources/static/css/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/css/.gitkeep
--------------------------------------------------------------------------------
/sources/static/img/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/.gitkeep
--------------------------------------------------------------------------------
/sources/static/img/220px-Lisplogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/220px-Lisplogo.png
--------------------------------------------------------------------------------
/sources/static/img/Feed-icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
--------------------------------------------------------------------------------
/sources/static/img/Lisp_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/Lisp_logo.png
--------------------------------------------------------------------------------
/sources/static/img/Lisp_logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/sources/static/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/favicon.ico
--------------------------------------------------------------------------------
/sources/static/img/pages/index/mugshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/pages/index/mugshot.jpg
--------------------------------------------------------------------------------
/sources/static/img/pages/index/scaling-stasis-death.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/img/pages/index/scaling-stasis-death.png
--------------------------------------------------------------------------------
/sources/static/js/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adityaathalye/shite/6d30eb1df29d65945e445287798ca1ce4c987a51/sources/static/js/.gitkeep
--------------------------------------------------------------------------------