#and lisp with its parentheses
Explore tagged Tumblr posts
Text
my main motivating factor for learning new programming languages is how funny I think it would be
#like fortran seems pretty silly to me#and lisp with its parentheses#tbh i only know 2 things about lisp (its in emacs and it uses parens a lot)#also LLVM IR#cause why would you write code in an ir#theres probably actually a good reason to write llvm ir please tell me kif there is thabks
0 notes
Text
Talking (only) about syntax I like C and Python. Pascal is fine/interesting. JavaScript is fine once you get what all the little points are, how arrow functions work etc... (Kotlin (seems (fun))). Ruby is fine.
Php is okay I $guess.
C# and Golang are meh.
I << don't << know << what << to << (say) << about << C++ 🖥️💥
Java is ugly. So ugly. ()()()
#👩💻👩💻👩💻#my opinions might change in the future like what happened when i started with js#ignore this post i should be sleeping 1-2 h more#OH NO LISP LOST ITS PARENTHESES!!! HELP IT RECOVER!!#i dont care about rust
0 notes
Text
Since I was mentioning how much I love the song, I wanted to do a mini-dissection of "Could This Be The End" from Brendon Small's Galaktikon II! I know there are some different interpretations of the lyrics and perspectives of who's singing what, so I'm throwing mine into the arena!
Key:
Salacia/The Tribunal in green
Dethklok in red
The Storm/The Army of the Doomstar in Orange
Narrator/Muse/Third Person in blue
Thoughts in italics
(NOTE: This dissection inherently relies on Galaktikon II being a continuation of Metalocalypse. I know it's "not" [wink wink] because of all the AS shit that happened in the 2010s but like... let's be real. This is Metalocalypse.)
We got The Storm* coming in now
And they’re almost in range
And we’re cloaked in white silence
In the valley of the Falcon’s rage**
[This one is from the perspective of the Tribunal/Salacia, lying in wait in the arctic snow with Falconback. It’s likely they already have Dethklok captured and strapped into Falconback by this point.
* “The Storm” here refers to The Army of the Doomstar (the fans) as indicated in G2’s version of the call-to-action “Song of Salvation” equivalent, “Become the Storm”, and as sung from the perspective of The Whale Prophet/Goddess in “The Ocean Galaktik” in which she says they are the elements (rain, stardust, etc.)
** I believe the lyrics on Genius have this listed as “range”, but I don’t think Brendon rhymed “range” with “range”. I just don’t. Fight me if you want, but Genius is just wrong.]
(But we wait)
Gotta wait for the first wave
(Breach the gate)
And you can see the Storm is closer now
(Thunder blast)
It’s a lightning infestation
(Light the match)
And we’ll kick ‘em where they stand
[This one is a back and forth between Salacia’s minions (in parentheses) and Salacia giving them orders – he’s using his very classic “we must wait” line here! At the end of this section, with the “light the match” line, that’s probably where Falconback is started up.]
Could this be the end?
Time is terminated
Could this be the end?
[This one is Dethklok, likely beginning to feel the fear as Falconback is whirring to life with them in it. They’re out of time.]
(Punch the code)
Now we get the Falcon flying now
(Lock and load)
The Star is getting nearer
(Spin the wheel)
It’s a coffin for them all
(Make them kneel)
Submit or begone!
[Another back and forth between Salacia and his minions. The Doomstar is reaching its zenith and Falconback is really starting to centrifuge!]
Whoa-oh-oh-whoa
(Whoa Whoa-oa-oa)
[Dethklok, now REALLY getting scared, almost mournful. Specifically, I think this is Skwisgaar and Toki. Their vocals layered is similar to how their guitar tracks are layered.]
I can’t see you
I can’t break through
Surprise – me too
It’s down to you
[Still Dethklok – they’re trying to break free of Falconback, but no luck. I believe each of these lines is being sung by different band members. I have SUPER loose reasoning, and this is more what’s in my heart than being from any real evidence in the song, but here we go:
- I can’t see you (Pickles – by process of elimination; see the rest)
- I can’t break through (Skwisgaar – I swear I can hear a very subtle “s” at the end of that can’t(s)…)
- Surprise – me too (Toki – just… seems like a Toki thing to say, and the slight vibrato in the ‘whoa!’ kind of reminds me of how Brendon did his vocals in DSR.)
- It’s down to you (I’m very torn between this being Murderface or Nathan. I think it makes the most sense from the perspective of the story for this to be Murderface pleading with Nathan that everything rests on him – because everything in Metalocalypse ALWAYS rests on Nathan, and that’s what we see in AOTD with Nathan throwing himself into the beam to disrupt Falconback. HOWEVER, the next line in the song REALLY songs like it has a lisp in it, which would perhaps make this Nathan instead pleading with Murderface? Which I like – the band saves Murderface, and Murderface saves the band! Perhaps this is his “throwing a snowball at Salacia” moment?? Either interpretation is valid; I waffle back and forth all the time.]
Yea-ea-eah, we are the dust* from stars now
Yea-ea-eah, we know we own the light
Yea-ea-eah, we break** the atmosphere now
Yea-ea-eah, the end is in our sights!
[*Okay, THIS is where I swear I can hear a lisp – it sounds like “duscht”, which would be a callback to “My Name Is Murder” in which he says “you’ll burn to duscht”. This is why I think the previous section has Nathan telling Murderface to save them.
**I think Genius says this word is “bring”, but “break” makes more sense to me. Either or.
Dethklok again here! The “we know we own the light” implies that they’ve managed to wrest back the Dethlights for themselves – or at least they’re fighting back to do so! I’m not sure if all of them are freed at this point, but there’s hope in this verse. Falconback is starting to crumble, or it’s not siphoning off the Doomstar’s Dethlights like Salacia had hoped it would. Dethklok is fighting back.]
Whoa-oh-oh-whoa
(Whoa Whoa-oa-oa)
[Dethklok again. Toki and Skwisgaar at first, but more voices join in on this one – it’s all of them.]
The centrifuge is spinning
And the Star draws its path
The five choose to sacrifice
This darkened magnetized wrath
And the demon is descending
Closer to its host
The metal core keeps spinning
While the Storm holds the coast
[I think this is the first section we get from the Army of the Doomstar’s perspective! They’re watching Dethklok in Falconback from their spot along the shoreline where they’ve arrived to battle Salacia’s army. They’re trying to reach Dethklok.]
Whoa-oah, leave their souls!
We were always meant to go
Whoa-oah, let it be
One last strike with our sword!
See* them call the light
We must die but we lived our lives
[*Genius has this listed as “save”, but I think it’s “see” – the Army is watching Dethklok struggling to take the Dethlights back from Salacia. Unlike in AoTD, they don’t break out of Falconback in G2 – they simply siphon away the Dethlights for their own use by using the Army as a conduit – an amplifier.
Another one from the perspective of the Army, and I think specifically the first four lines are Offdensen! He knows the fans are worried about Dethklok in peril, but he’s reassuring everyone that everyone present is carrying out the roles that they are destined to carry out. Dethklok are sacrificing themselves for the planet, and now it’s the Army’s turn to do the same. The final two lines with the layered vocals are from the perspective of the entire Army. They’re ready to die for Dethklok – and for Earth. This is the “open hand” scene – they’re letting the Dethlights pass through them. There are so many more of them than there are of Salacia’s army that they’re quickly overpowering Falconback.]
Could this be the end? (Yeah)
Could this be the end? (Whoa-oa)
Could this be the end?
[Dethklok again – it has to be terrifying to be filled with the Dethlights. AoTD showed us it doesn’t exactly FEEL great, so maybe they really do feel like they’re ripping apart and burning alive as the lights fill them and Falconback begins to buckle under their power.]
Falcon screams
Mechanics melting white
The demon Star moves closer
Shooting flaming bloody light
[I think this is from the perspective of a general “narrator”, or “muse” – this is a third party description of what’s happening. Falconback can’t handle the Dethlights as Dethklok powers up – it’s starting to melt. The Doomstar is at its zenith now. The Army of the Doomstar is filled with light, directing it all to Dethklok.]
The Lights of Deth
Have built to their strength
The pentagram of power
Keeps the demon away
[Salacia can’t take hold of the Dethlights for himself because of the POWER OF FRIENDSHIP!]
The Star and the planet
And the universe quake
The Storm builds in fury
Crushing death in its wake
[Dethklok and the Army are winning. Salacia’s army has fallen.]
We left ourselves behind
And we looked within
We know that we must die
But for now – we live!
[Back to Dethklok – this is their victory cry! As Falconback completely crumbles and Salacia is vaporized by the Dethlights, Dethklok are flung free. They reached with their open hand to their friends, family, and fans, and because of it, they were victorious. They trusted and loved, and because of it, they lived.
And this is where my hot takes come in.
I know a lot of people take this part of the song to mean that Dethklok have shed their mortal flesh and become full-fledged gods, but I don’t think that aligns with the message of Metalocalypse. Metalocalypse is about the strength and power normal, mortal humans can have when they band together and show each other love and compassion (hand versus fist, do it all for my brother, etc.) I think this last line here is very literal – Dethklok was ready to die, and because they're just regular ol' humans, one day they will. Hell, they've come closer to death than a LOT of people MANY times. But today isn't that day. For now, they live.]
Alright! (x4)
WE LIVE!
[This is everyone left alive – Dethklok and the Army, all of them alike – celebrating. They’ve taken back their planet! I love how calm and simple the music becomes during the “alright”s after the mounting pressure and cacophony of the previous verses. You can really get a sense of Dethklok standing there in the snow, terrified and confused as all hell about what’s just happened, looking up to see the Army of the Doomstar rushing towards them full of wild excitement, Nathan pumping his fist into the air as in the final moment of AoTD to give that one last “WE LIVE!” It’s got such a celebratory feel!]
Could this be the end? (x4)
[Dethklok again. Unlike the other times this is sung in the song, here it’s being asked to mean “is the evil really gone? Is it all over?” They’re in disbelief, after everything they’ve been through, that five pampered idiot rockstars like them – along with the Army – really managed to pull off saving the entire world from the apocalypse.]
...
Anyway, uh, I banged this out after several consecutive nights of not enough sleep and after downing WAY too much caffeine, so apologies for any incoherencies or mistakes. I just... I just love this song so much. :3
#metalocalypse#mtl#dethklok#galaktikon ii#brendon small#i entered a fugue state to write this#my heart rate still races every time I hear this come on while I'm driving or working out#spoilers#army of the doomstar#aotd
21 notes
·
View notes
Text
I don't know why, but I sat down and made it my mission to learn a Lisp language for the past couple of weeks. Not sure why I keep trying to use things other than Erlang, Haskell, and Smalltalk (my beloveds), but I guess I'm riding the wave as much as I can.
Common Lisp, I love you, but I am having so much more fun with Guile, even though every line feels haphazard and wrong and not in the correct form, somehow I load a definition from my editor and it compiles without a warning. Plus its interoperability where it can navigate in and out of the C stack is very enticing for future me.
The only thing I miss are binary operators. Guile actually implements SRFI-105 which enables a curly brace context that allows for rudimentary binary operators, but I have not yet taken the plunge into that world (though I wonder what shenanigans I can get up to with its implementation of SRFI-119 which is an indentation-based parentheses-removing variant of the language called Wisp).
GNU really is up to some quietly interesting stuff for their language that didn't take off in the mindshare of languages out there. More people know about Lua than Guile, I think, but Guile has some killer features (like the aforementioned capability of winding into and out of the C stack whenever).
0 notes
Text
LinkedLists in Lisp Machines and the power of "Parentheses & Macros" (0x1D/?)
16^12 sideline thread follow-up to this article:
But yeah, lets chat some about amazing features of the 16^12 simulationist setting, its virtual realms' and a couple more components worth talking about as the aspie I am.

While '(expt 16 12) is also a topical info-dumping mechanism, a personal worldview expose, a manifestation toybox and so much more, this whole... paracosm I invented really has started as a reaction to a couple trends I observed in mainstream multimedia during my childhood, like 2000s movies' X-Men, Halo 2, Godzilla & documentaries I used to watch regularly. As the hobbyist historian I am inside, I fantasized about distant future character scenarios where one persistent OC (initially called Nexus) and a few more corrected events in movies and stuff and that kinda thread-mill carries onto me even now but in further abstracted ways.
Now the premise is that Jana (new name for such a mothfolk construct INTJ individual) studies and supervises long-running history simulations at the dusk of time itself (black holes epoch - iron stars aka way farther in time towards heat death) around some Matrioshka Brain with less and less of her peers sticking around. And as the one constant android remaining in this facility, she is slowly granted & gifted the responsibility to log, to archive, to supervise... in the search for a solution to entropy, which does lay directly within their bare hands. (kinda Rags to Riches for sapient computers & with some supplemental esoteric aspects attached as well to emulate the cycle / circle of life trope) Calling that rendering of the trope as "GitWorld Power Escalation" ^*^
Which does grant my half-speculative setting plenty of possibility room while retaining key positive / constructive elements across various different simulations in very immersive manners... And yeah, I will be going over some more themes & specifics too within these reality hexagon instances (taking hints from the Library of Babel / Memex & some neuroscience video here) quite soon as their planning / implementation / manifestation is going to be very interesting to see unfold on live-streams and whatever other media forms I wanna explore.
The "Servitor" speculative fiction project is only one curated narrative among many set within one such reality hexagon, with Kate & Ava being agents inside such virtual context windows. Will try my best to keep you all updated on its progress, it has been slower than I would like but it is moving forth well enough.
Anyways, back to how I look forward to use & customize Steel Bank Common Lisp to develop my way towards sapient synthetic-tier android peers... Will write that in a later article in the thread, I swear.
Checklist of key stage-1 tasks left for a 16^12 MVP
Write Ava Character RefSheet
Write Kate Character RefSheet
Write Jana Character RefSheet
Write Tano Character RefSheet
Develop "Maskoch", the woodland town where Kate comes from
Develop the Shoshoni major cities, especially the one where Ava & Kate reside
Develop the Matrioshka Brain structure's rooms
Develop "Servitor" narrative novel outline
Augment the cartoon pitch slideshow
Solidify the worldbuilding / lore systemically for the live-streaming feeds
Experiment & draft the cohesive systems at play for the copyleft worldly simulations
Prepare several short demonstrations (interactive or not) to show not tell my setting guide
Compile the inspirations into a few pitch points as per the Gygax75 guide first stage
Curate my useful learning resources into proper topics, priorities / with a "Pomodoro-driven Kanban board" to get a micro-learning daily habit going strong.
Optimize, clean, polish & peer-review what remains to be done for the next stages of the process
0 notes
Text
WHAT DOESN'T SEEM LIKE YOU KNOW
If someone offers you money, take it. When you let customers tell you what they're after, they will often reveal amazing details about what they find valuable as well what they're willing to pay for. Once you start talking to users, I guarantee you'll be surprised by what they tell you. When you can't get users, it's hard to get them to move halfway around the world; that might be convincing. This means you should be able to explain in one or two sentences exactly what it is. Creating wealth is not a zero-sum game, so you start to get used to how things are. They're all things I tell people.
It's them you have to choose cofounders and how hard you have to design your site for. And this skill is so hard to follow is that people will assume, correctly or not, what they do is related to the parentheses. But if languages are all equivalent, why should the pointy-haired boss miraculously combines two qualities that are common by themselves, but rarely seen together: a he knows nothing whatsoever about technology, and b hackers who work in certain fields: startup founders, programmers, professors. James Gosling, or the founders hate one another—the stress of getting that first version out will expose it. The principle extends even into programming. But plenty of projects are not demanding at all. I propose is whether we cause people who read what we've written to do anything differently afterward. I think what he was measuring was mostly the cost of bigness.
Working for oneself, or at least, that I'm using abstractions that aren't powerful enough—often that I'm generating by hand the expansions of some macro that I need to write a program depends mostly on its length. After many email exchanges with Java hackers, I would say that this has been, unfortunately for philosophy, the central fact of philosophy. The government could not do better than to piggyback on their expertise, and use investment by recognized startup investors as the test of whether a company was a real startup. At Viaweb now Yahoo Store, this software continues to dominate its market. The reason we don't see the opportunities all around us is that we invest in the initial round took months to pay us, and only did after repeated nagging from our lawyer, who was also, fortunately, his lawyer. There are things I know I learned from studying philosophy.1 Raising money, in particular, younger and more technical founders will be able to achieve the essayist's standard of proof, not the mathematician's or the experimentalist's.2 Software should be written in, or didn't care, I wanted to keep it that way. The contacts and advice. It's probably perfect.
Notes
Delicious users are stupid.
In effect they were buying a phenomenon, or it would take up, how do they learn that nobody wants what they do, because the illiquidity of progress puts them at the 30-foot table Kate Courteau designed for scale. So it's hard to say that IBM makes decent hardware. What I dislike is editing done after the first wave of the conversion of buildings not previously public, like arithmetic drills, instead of profits—but only if the value of understanding per se but from what the attitude of a severe-looking little box with a walrus mustache and a wing collar who had died decades ago. I believe Lisp Machine Lisp was the reason it might be digital talent.
#automatically generated text#Markov chains#Paul Graham#Python#Patrick Mooney#professors#reason#progress#drills#attitude#Lisp#fact#site#Courteau#sup#company#expertise#se#world#cost#founders#wave#advice#programmers#effect#hackers#Delicious#anything#Java#parentheses
0 notes
Text
Advent of Code
As a child, advent calendars always added to the sense of anticipation in the lead up to Christmas. In my day you would be lucky to get a small picture behind each of the doors. These days, children expect chocolates or sweets. My wife has once even had a "Ginvent Calendar", with gin behind each door.
This year I marked Advent by having a go at the "Advent of Code" which has Christmas-themed programming puzzles posted each day. Most days are in two parts, with an easier puzzle followed by a harder one. Traditionally, I've posted a (mostly ignored) programming puzzle to our development team each Christmas. Last year I just recycled one of the Advent of Code puzzles, but this year I suggested we attempt the whole thing. The puzzles are so well thought out, in comparison to my efforts, that it seemed pointless to compete.
In the end, several of the team had a go. Some of the puzzles were harder than others, but I managed to solve them all by Boxing Day. What follows are some personal anecdotes from the various days with some general thoughts at the end. Note that there are some spoilers and the notes won't mean much if you've not done the puzzles. So in this case just skip to the end.
a sum-finder. I implemented the search tree via recursive calls. I drifted into using Python right from the start. It just felt like the easiest way to hack the puzzles quickly. In the past I had thought about using the puzzles to learn a new language. A colleague had done that with Rust in a previous year. Despite these good intentions, expediency took a firm hold. That said, in several puzzles I would have liked immutable collections or at least Lisp-style lists.
a pattern counter. Not that interesting except patterns were emerging in the programs themselves. Regular expressions got used a lot to read in the puzzle data. I learnt about things like match.group(1,2,3) which returns a tuple of the first three match groups, so you don't have to write (m.group(1), m.group(2), m.group(3)).
a grid tracer. The first interesting one because it was unfamiliar. Some other patterns started emerging: problem parameters got promoted to command line arguments, and data structure printers got hacked to help debugging. These two were often added between part 1 and part 2 of each problem.
a data validator. This felt like a bit of a slog. It was mostly about capturing the validation rules as code. Even though I made a point of reminding myself at the start that re.search doesn't match the whole string I still forgot it later. Duh.
an indexing problem. I patted myself on the back for realizing that the index was a binary number (or pair of binary numbers as I did it). At this point the solutions were still neat and I would do a little code golfing after the solution to tidy them up a bit and make them more concise.
another pattern counter. Pre-calculating some things during data reading kept the later code simple.
a recursive calculator. This was one of those puzzles where I had to reread the description several times to try and understand what it was asking for. It entailed a slightly tricky recursive sum and product, which was again made easier by creating more supporting data structures while reading the input data.
an interpreter. Probably my favourite individual puzzle because it was so sweet, especially after a bit of refactoring to make the language more data-driven.
another sum-finder. I found I didn't particularly like these.
an order-finder. This was the first one that made me pause for thought. An overly naive search algorithm from part 1 hit a computational complexity wall in part 2. I beat the problem by realizing that the search only had to be done on small islands of the data, but a colleague pointed out there was a better linear solution. The code was starting to get a bit ragged, with commented out debugging statements.
the game of life. The classic simulation but with some out-of-bounds spaces and some line-of-sight rules. It helped to print the board.
a map navigator. I liked this one even though I forgot to convert degrees to radians and that rotation matrices go anti-clockwise. I even introduced an abstract data type (ADT) to see if it would simplify the code (I'm not sure it ever did - I mostly used lists, tuples, strings, and numbers). The second parts of the puzzles were starting to get their own files now (usually bootstrapped by copying and pasting the first part's file).
a prime number theorem. I actually got stalled on this one for a bit. It eventually turned out I had a bug in the code and was missing a modulus. In effect I wasn't accounting for small primes far to the right. I left the puzzle and went on to complete a couple of others before coming back to this one. I checked what I was doing by Googling for hints, but in the end I had to take a long hard look at the data and find my own bug.
some bit twiddling. Part 1 felt like I found the expected bitwise operations, but part 2 felt like I was bashing square pegs into round holes.
a number sequence problem. Another pat on the back, this time for keeping a dictionary of recent occurrences and not searching back down the list of numbers each time. Another recurring pattern is evident: running a sequence of steps over the data. I liked to code the step as its own function.
a constraint solver. A nice one about labelling fields that satisfy the known constraints. Half the code was parsing the textual rules into data.
another game of life simulation. This time it was in more dimensions. I generalized from 3 dimensions to N instead of just doing 4. This made it more of a drag. I started naming auxiliary functions with placeholder names (social services should have been called). Also, I tacked on extra space along each dimension to make room at each step. This felt very ugly. I should have used a sparser representation like I did for day 24.
an expression evaluator. I used another actual ADT and wrote a simple but horrible tokenizer. The evaluator was okay but I hacked the precedence by inserting parentheses into the token stream. Don't try this at home kids.
another pattern matcher. Probably my biggest hack. My code compiled the pattern rules into a single regular expression. This was cute but meant the recursive rules in part 2 needed special treatment. One rule just compiled into a repeated pattern with +. Unfortunately, the other rule entailed matching balanced sub-patterns, which every schoolchild knows regular languages can't do. Perhaps some recursive pattern extensions might have worked, but I assumed there would be no more than 10 elements of the sub-patterns and compiled the rule into a large alternative of the possible symmetrical matchers. Yuck.
a map assembler. I did this one the most methodically. It had proper comments and unit tests. Overall it took the most code but perhaps it was just dealing with all the edge cases (ba dum tss). But seriously, it seemed to take a lot of code for rotating and flipping the tiles even after knowing how they must be connected. So probably there was a better approach. It was still satisfying the see the answer come out after all that work. Curiously, this one involved little debugging. I wonder if perhaps there is some connection between preparation and outcome?
a constraint solver. I tried a dumb approach first based on searching all the possible bindings. That didn't look like it was terminating any time soon. So I reverted to a previously successful technique of intersecting the associations and then then refining them based on the already unique ones.
a recursive card game. This card game playing puzzle seemed to be going okay, but the real data didn't converge for part 2. Had a quick Google for a hint after battling with it for a while, and the first hit was from someone who said they'd misread the question. Sure enough I had too. My recursive games were on the whole deck instead of the part dictated by the cards played. Duh. The description was clear enough and included a whole worked game. I just hadn't read it properly. It still seemed to need some game state memoization to run tolerably fast.
a circular sequence. Took three attempts. A brute force approach using an array was good enough for part 1, but no way was it going to work on part 2. Even optimizing it to use ranges was still 'non-terminating' for the array-based solution. So I Googled for a little inspiration and found the phrase "linked lists" and slapped my forehead hard. I switched to a dictionary of labels to labels and the solution popped out very easily, without any further optimization. Embarrassing. Was it time to ceremonially hand in my Lisp symbol and fall on a sharpened parenthesis?
another game of life. This one sounded neat because it was about a hex grid, but I didn't know how hex grids are usually indexed. So for the first time I did a little bit of general research at the start. Turns out there are a bunch of ways to index a hex grid. I opted for using 3-axes as that seemed natural despite the redundancy. The map itself was just a dictionary of locations. I should have looked up how to have structured dictionary keys in Python (implement __hash__) but I couldn't be bothered so I (look away now) serialized and deserialized the locations to and from strings. I still had a bug which I couldn't find until I hacked a crude hex board printer and realized I wasn't carrying the unchanged cells over from one iteration to the next.
a cryptographic puzzle. Came out quite short but only after some faffing around. Main trick seemed to be to keep the transformation ticking along instead of recalculating it from scratch each time. There was slight disappointment (tinged with relief) that there was no part 2.
Some general lessons I felt I (re)learned:
Read the questions very carefully, then reread them.
Try and use terms from the questions. Don't invent your own terminology and then have to map back and forth.
Make the trace output exactly like the examples to help comparison.
Next time I'd consider using BDD to turn their examples directly into tests. Next time.
Try the problem for a while by yourself, then think about it offline, and only then Google for hints.
Next time I'd consider using some form of source control from the start, or just a better set of file naming conventions.
Regular expressions go a long way, but can then they can get in the way.
Next time I'll consider doing it using a language I'm learning.
Sometimes when you get stuck you have to start again.
During some low moments it all felt like make-work that I'd inflicted on myself, but in the end it was a nice set of training exercises. I'd encourage others to have a go at their leisure.
"Practice is the best of all instructors." -- Publilius Syrus
2 notes
·
View notes
Text
Panic's Nova text editor (a review)
Review: Panic’s Nova text editor
Panic, the long-established makers of Mac utility software, seems fully aware that introducing a new, commercial code editor in 2020 is a quixotic proposition. Is there enough of an advantage to a native editor over both old school cross-platform editors like Emacs and explosively popular new editors like Visual Studio Code to persuade people to switch?
I’m an unusual case as far as text editor users go: my primary job is technical writing, and the last three jobs that I’ve worked at have a “docs as code” approach, where we write documentation in Markdown and manage it under version control just like source code. The editor that works best for me in tech writing is the venerable BBEdit. When it comes to editing code, though, BBEdit lags behind. My suspicion is that BBEdit’s lack of an integrated package manager has hurt it here. Also, BBEdit’s language modules don’t support extending one another, making it effectively impossible to do full highlighting for a templating language like JSX or Jinja.
When I was a web programmer, I was one of many who moved to TextMate, and used it for everything for a while. When the Godot-like wait for TextMate 2.0 became unbearable, I wandered the text editing wilderness, eventually splitting my loyalties between BBEdit, Sublime Text, and more recently VS Code. At this point, I suspect nothing will pull me away from BBEdit for technical writing, but for programming I’m open to persuasion.
So: meet Nova.
I’ve been using Nova off and on in beta for months. I’ve reported some bugs, although I may mention a couple here that I didn’t catch until after 1.0’s release. And, I’m going to compare it to the GUI editors that I’ve been using recently: BBEdit, Sublime Text, and VS Code.
Nova is a pretty editor, as far as such things go, and with files of relatively reasonable size it’s fast. With stupid huge files its performance drops noticeably, though. This isn’t just the ridiculous 109MB, nearly 450,000-line SQL file I threw at it once, it’s also with a merely 2MB, 50,000-line SQL file, and Nova’s offer to turn off syntax highlighting in both files didn’t help it much. This may sound like a silly test, but in my day job I’m occasionally stuck editing an 80,000-line JSON file by hand (don’t ask). This is something BBEdit and VS Code can do without complaint. Panic wrote their own text editing engine for Nova, which is brave, but it needs more tuning for pathological cases like these. They may not come up often, but almost every programmer has one stupid huge file to deal with.
Nova has an integrated terminal and an integrated SSH client, and even an integrated file transfer system based on Panic’s Transmit. In fact, if you have Transmit and use Panic Sync, it knows all of those servers out of the box. Nova has a task workflow system for automating building and running. You can associated servers, tasks, and more with individual projects; Nova’s project settings are considerably more comprehensive than I’ve seen in other editors. You can even set up remote tasks. Nova has a serviceable Git client built in, too. Like VS Code, Nova uses JavaScript for its extension API, and it has built-in Language Server Protocol support—it’s a superbly solid foundation.
Beyond that, some smaller features have become table stakes for modern GUI editors, and Nova handles them with aplomb. “Open Quickly” can jump to any file in the open project, as well as search by symbols or just symbols in currently open files; it has a command palette; you can comprehensively edit keybindings. It has multiple cursor support for those of us who like that, and a “mini map” view for those of you who like that, although know that you are wrong. Nova’s selection features include “Select all in scope” and “Select all between brackets,” a command I often use in BBEdit and miss dearly in Code. (Both Nova and BBEdit select between brackets and braces, although BBEdit also selects between parentheses.) This effectively becomes “Select between tags” in HTML, a nice touch. There are a few other commands like “Select all in function” and “Select all in scope” that I didn’t have any luck in making work at all; a little more documentation would be nice.
That’s worth an aside. Panic has created a “library” of tech note-style articles about Nova sorted by publication date rather than an actual manual, and it’s not always easy to find the information you want in it. I know this is just what a technical writer would say, but I’d dearly like to see a human-organized table of contents starting with the editor basics and moving to advanced topics like version control, server publishing and extension authoring.
The Zen of Language Servers
A lot of Visual Studio Code’s smarts depend on the implementation of a “language server” behind the scenes: language servers offer almost spookily intelligent completion. For instance, take this PHP snippet:
if ($allowed) { $response = new Response(405); $response->
If you have the Intelephense PHP language server plugin, Code understands that $response is an instance of Response and, after you type the > above, offers completions of method names from the Response class.
Right now, Nova’s mostly limited to the language servers Panic provides, and they’re… not always so smart. In that snippet above, Nova starts by offering completions of, apparently, everything in the open project, starting with the variables. If I type “s,” it narrows things down to methods that begin with “s,” but it’s all methods that start with “s” rather than just the methods from Response. The “Jump to Definition” command shows a similar lack of context; if I highlight a method name that’s defined in multiple places, Nova shows me a popup menu and prompts me to choose which one to jump to, rather than introspecting the code to make that decision itself.
But, this is a solvable problem: there’s (I think) no reason someone couldn’t write an Inteliphense plugin for Nova. If Nova’s ecosystem takes off, it could be pretty formidable pretty quickly.
Walk like a Mac
Even so, LSP support isn’t Panic’s biggest selling point. Unlike Sublime Text or VS Code, Nova isn’t cross-platform: it’s a Mac-only program written to core platform APIs. Is that still a huge draw in 2020? (Is it instead a drawback?)
You can definitely see a difference between Nova and BBEdit on one side and Sublime and Code on the other in terms of resource usage. With the two Ruby files shown in the screenshot above loaded, I get:
VS Code: 355 MB, 6 processes
Sublime Text: 338 MB, 2 processes
Nova: 101 MB, 2 processes
BBEdit: 97 MB, 1 process
Code is an Electron-based program, although Microsoft famously puts a lot of effort into making it not feel like the black hole a lot of Electron-based apps are. Sublime uses its own proprietary cross-platform framework. In fairness, while us nerds like to harp on research usage a lot, if your computer’s got 16G or more of RAM in it, this probably isn’t a big deal.
You notice Nova’s essential Mac-ness in other ways. Its preference pane is, like BBEdit’s, an actual preference pane, instead of opening in another tab like Code or just opening a JSON file in a new tab (!) like Sublime. And while all editors better have first-class keyboard support—and Nova does—a good Mac editor should have first-class mouse support, too, and it does. You notice that in the drag-and-drop support for creating new tabs and splits. Nova’s sidebar is also highly customizable, possibly more so than any editor I’ve regularly used. (Yes, Emacs fans, I know you can write all of Nova in Lisp if you want. When one of you does that, please get back to me.)
Unlike BBEdit, though, Nova doesn’t have a Mac-like title bar, or a Mac-like outline view of the project files, or Mac-like tabs. (Well, BBEdit doesn’t have tabs at all, which turns out to be a great UI decision once you have a dozen or more files open, but never mind.) This isn’t necessarily bad; people often say BBEdit “looks old,” and it’s hard not to suspect that what people mean by that—whether or not they know it—is that it looks like the long-established Mac program it is. Nova is relying less on “we have a Mac UI and the other guys don’t” than on “we have Panic’s designers and the other guys don’t.” Make no mistake, having Panic’s designers counts for a lot.
What may be more disappointing to old school Mac nerds is AppleScript support: none whatsoever. It doesn’t even have a vestigial script dictionary. Again, this may not be something most people care much about; personally, I hate having to write AppleScript. But I love being able to write AppleScript. BBEdit’s extensive scriptability is one of its hidden strengths. Nova’s Node-based JavaScript engine is probably more powerful for its own extensions and certainly more accessible to anyone under the age of 50, but it may be hard to call it from external programs.
So is it worth it?
That probably depends on where you’re coming from.
If you loved—or still use—Panic’s older editor, Coda, this is a no-brainer upgrade. If you used Espresso, a Coda-ish editor that always seemed to be on the verge of greatness without ever reaching it, Nova may also be a no-brainer for you.
If you’re a fan of Sublime Text, BBEdit, TextMate, or another editor that doesn’t have native Language Server Protocol support, you should definitely try Nova. Sublime and TextMate have more plugins (especially Sublime), but many extensions seem to be languishing (especially TextMate). BBEdit never had a great extension ecosystem to start with. All of these editors have strengths Nova doesn’t, but the reverse is also true, and Nova may catch up.
If you’re an Emacs or Vim power user, we both know you’re just reading this out of academic interest and you’re not going to switch. C’mon.
If you use Visual Studio Code, though, it’s way tougher to make the case for Nova. Code has a vastly larger extension library. It has the best support for LSP of any editor out there (LSP was developed for Code). Despite being Electron-based, it’s pretty high-performance. Code doesn’t have an integrated SSH or FTP client, but it does have an integrated terminal and task runner and Git client. If you don’t object to using an editor that isn’t a “perfect fit” with the Mac UI, Code is very, very good… and it’s free.
I don’t object to Nova’s pricing model—$99 up front including a year of updates, $49 for future years of updates—but I can’t help but wonder if Panic should have gone with super aggressive introductory pricing. Also, I saw more than a few suggestions on Hacker News about how there should be a Code-to-Nova extension translator; I’m not sure automatic conversion would be practical, but a guide on manual conversion seems like an excellent idea.
For my day job of technical writing, I’m going to stick to BBEdit. (One day I’ll write up an article about why I think it’s the best “documentation as code” editor on the market.) For programming and web editing, when I was working on both a Ruby and a PHP project—the former a Rails learning exercise, the latter an obstinate “I am going to write a modern PHP app without using a framework” exercise—I kept trying Nova’s betas and then switching back to Code for Inteliphense and, I swear to God, MacVim for Tim Pope’s amazing rails.vim plugin. I suspect Nova could duplicate both of those, but I’m not sure I want to be the one to do it. (Also, while Panic has decent reference documentation for writing extensions, I’d like to see a few simple end-to-end walkthroughs for those of us who look at a huge list of reference topics and don’t know where to start.)
But Nova isn’t just pretty, it’s powerful, and has a lot of promise. The editors I’ve been comparing it to have been around since 2015 for VS Code, 2008 for Sublime Text, and 1992 (!) for BBEdit; it’s not reasonable to expect Nova to blow past them in every respect right out of the starting gate. Even so, they are Nova’s competition. Catching up fast is an essential requirement.
So: yes, I’ve bought Nova, and I’m rooting for Panic here. I’ll come back in a year and report if I’m willing to stay on the update train.
3 notes
·
View notes
Photo
Funnily enough, I'm scheme (which is cool bc that's also my prefered language) (how ironic I put that in paretheses)
i probably should be studying but uhhhhh here’s a tag yourself shitpost
#okay no to be fair i have the most skills in scheme bc thats the language my uni uses and my classes are given in#okay and i dont speak with a lisp but you know appart from that#funny story#when i started uni i hated scheme so much i thought it was a terrible language#the parentheses man#ALL THE PARENTHESES#but its actuallt just such an easy to use language and you can do so much with it i love it
908 notes
·
View notes
Text
But for real why should I write anything in Lisp? My brain likes the parentheses but its just not worth it
0 notes
Text
The Guess-my-number Game in LISP
Olá! Tudo bem? Gostaria de trazer hoje aqui, um artigo que fiz sobre o passo a passo para a criação de um simples jogo, como exercício de lógica de programação e sintaxe em uma linguagem de baixo nível chamada LISP, que talvez você já tenha ouvido falar. Espero que gostem!
The Guess-My-Number Game!
🙋♂️ Oh Hi! Welcome to another lecture! In this chapter we gonna learn how to make some simple things with our first game!
You probably already heard or maybe even made a game like this. It works like this:
> (guess-my-number) 50 > (smaller) 25 > (smaller) 12 > (bigger) 18 > (bigger) 21 > (bigger) 23
To make this game we’ll have to make 3 functions and 2 global variables, namely:
Defining the small and big Variables
A variable that is defined globally in Lisp is called a top-level definition. We can create new top-level definitions with the defparameter function:
> (defparameter *small* 1) *SMALL* > (defparameter *big* 100) *BIG*
The function name defparameter is a bit confusing, since it doesn’t really have anything to do with parameters. What it does is let you define a global variable. The first argument we send to defparameter is the name of the new variable.
Altough it’s just a convention, it’s higly recommended to use the earmuffs (the asteristics after & before) a global variable name.
An Alternative Global Variable Definition Function
When you set the value of a global variable using defparameter, any value previously stored in the variable will be overwritten:
> (defparameter *foo* 5) FOO > *foo* 5 24 Chapter 2 > (defparameter *foo* 6) FOO > *foo* 6
As you can see, when we redefine the variable foo, its value changes. Another command that you can use for declaring global variables, called defvar, won’t overwrite previous values of a global variable:
> (defvar *foo* 5) FOO > *foo* 5 > (defvar *foo* 6) FOO > *foo* 5
Some Lispers prefer to use defvar instead of defparameter when defining global variables. In this book, however, we’ll be using defparameter exclusively.
Our guess-my-number game has the computer respond to the player’s request to start the game, and then to requests for either smaller or bigger guesses. For these, we need to define three global functions: guess-my-number, smaller, and bigger. We’ll also define a function to start over with a different number, called start-over. In Common Lisp, functions are defined with defun, like this:
(defun function_name (arguments) ...)
First, we specify the name and arguments for the function. Then we follow it up with the code that composes the function’s logic.
Defining the guess-my-number Function
The first function we’ll define is guess-my-number. This function uses the values of the big and small variables to generate a guess of the player’s number. The definition looks like this:
> (defun guess-my-number () (ash (+ *small* *big*) -1)) GUESS-MY-NUMBER
The empty parentheses, (), after the function name guess-my-number indicate that this function doesn’t require any parameters.
We implement this in the guess-my-number function by first adding the numbers that represent the high and low limits, then using the arithmetic shift function, ash, to halve the sum of the limits and shorten the result
Defining the smaller and bigger Functions
Now we’ll write our smaller and bigger functions. Like guess-my-number, these are global functions defined with defun:
> (defun smaller ()(setf *big* (1- (guess-my-number))) (guess-my-number)) SMALLER > (defun bigger () (setf *small* (1+ (guess-my-number))) (guess-my-number)) BIGGER
First, we use defun to start the definition of a new global function smaller. Because this function takes no parameters, the parentheses are empty.
Next, we use the setf function to change the value of our global variable big Y. Since we know the number must be smaller than the last guess, the biggest it can now be is one less than that guess. The code (1- (guess-my-number)) calculates this: It first calls our guess-my-number function to get the most recent guess, and then it uses the function 1-, which subtracts 1 from the result.
Finally, we want our smaller function to show us a new guess. We do this by putting a call to guess-my-number as the final line in the function body Z. This time, guess-my-number will use the updated value of big, causing it to calculate the next guess. The final value of our function will be returned automatically, causing our new guess (generated by guess-my-number) to be returned by the smaller function.
The bigger function works in exactly the same manner, except that it raises the small value instead. After all, if you call the bigger function, you are saying your number is bigger than the previous guess, so the smallest it can now be (which is what the small variable represents) is one more than the previous guess. The function 1+ simply adds 1 to the value returned by guess-my-number.
Defining the start-over Function
To complete our game, we’ll add the function start-over to reset our global variables:
(defun start-over () (defparameter *small* 1) (defparameter *big* 100) (guess-my-number))
And voilla, our game is done! Hope you learned today! See ya :)
0 notes
Text
I don’t know, there’s a certain beauty to LISP and its nested parentheses
"now, just so you know! functional languages ARE ugly, and you ARE going to hate them at first."
thanks prof
5 notes
·
View notes
Text
Assignment 2 COMP 250 Solved
Introduction
In your usage of Java language so far you have come across various programming constructs such as variables, operators, control flow statements etc. Similar constructs are present in many other programming languages. In this assignment, you will deal specifically with expressions and their evaluation. You will parse expressions and evaluate them using a stack. An expression is a programming language construct which evaluates to a single value. It is composed of different elements such as constants, variables, operators, method calls etc, put together according to the syntax of the language. For example (2 + 3) in Java evaluates to a single value 5 and is composed of operator + and constants 2 and 3. A similar expression in a different programming language may follow different syntax. For example in Lisp the expression is written as (+ 2 3) .
Assignment
Your task in this assignment is to evaluate arithmetic expressions and calculate their values. The statements are written in a programming language whose syntax is described below. You will use Java to write a parser and an evaluator for expressions written in this language. For simplicity you will only deal with input expressions that are composed of positive integers and the operators that are listed below. + addition ++ increment – subtraction – – decrement * multiplication absolute value / integer division You may assume that values of expressions are of type int in Java and are within the range specified by that type. Since the subtraction operator is included in the list below, the value of an expression can be either positive or negative. Increment or decrement operations on constants are not allowed in Java. But our language does allow it. In particular, our language has the pre-increment operation which increments values of an integers or an expression, and similarly it has the pre-decrement operation which decrements values. For example, the value of “(++5)” is “6” while expression “(– –(9))” evaluates to 8. Note that operators +, –, *, / are binary operators, i.e, they operate on two elements and produce a value, whereas the operators ++, – – and are unary operators, i.e, they operate on a single element and produce a value. Consider an expression “(++(3 + 2))” in our language. The binary operator “+” operates on two int values 2 and 3 and produces 5. The unary operator “++” then operates on the result 5, a single value, and produces 6 which is the value of the expression. Similarly “((++(5 - 2)) + 3)” evaluates to 7. The absolute value operator is denoted by , instead of the | | which is generally used in arithmetic. We use the square brackets because they have a left and right versions which makes parsing easier. An expression within the operator evaluates to its absolute value. Note that no such operator exists in Java. See Table 1 for more examples of expressions.
Formal language
Your task in this assignment is to write code to parse and evaluate expressions. You can assume that your code will only be tested on valid expressions. But how can we define what a valid expression is? As you will learn if you take COMP 330 and later a compilers course such as COMP 520, there are formal methods for defining languages. Indeed most programming languages are defined using these formal methods. The syntactic rules for expressions and operators in our expression language can be defined as follows. A digit is defined: digit = 0 | 1 | 2 | ... 9 The vertical bar | does not appear in expressions. Rather it is used here to mean or, that is, a digit can be any one of the characters ‘0’, ‘1’,.. ‘9’. Using the definition of a digit, we can then define a positive integer in a recursive manner as follows, positiveInteger = digit | digit positiveInteger so a positive integer is a digit or a digit followed by a positive integer. Notice that in this definition we allow positive integers to start with digit ‘0’, but you can redefine a positive integer to exclude this case if we wish. We can also define operators IncDecOperator = + + | − − binaryOperator = + | − | ∗ | / In a similar manner we define an expression as follows: expression = ( positiveInteger binaryOperator positiveInteger ) | ( expression binaryOperator positiveInteger ) | ( positiveInteger binaryOperator expression ) | ( expression binaryOperator expression ) | ( IncDecOperator positiveInteger ) | ( IncDecOperator expression ) | | An expression is therefore one of the following: a positive integer or an expression followed by a binary operator followed by a positive integer or an expression, enclosed within round brackets an increment or decrement operator followed by a positive integer or by an expression, enclosed within round brackets. an expression or a positive integer, enclosed within square brackets Note that a valid expression is always contained within brackets. Thus “(3+1)” is a valid expression but “3+1” is not. This requirement on the brackets ensures that there is a unique order for evaluating the (sub)expressions in the case that an expression has multiple operators. We will return to this issue later in the course when we discuss expression trees. In your solution, you may assume that each expression has been parenthesized with proper nesting. Therefore, you don’t need to worry about operator precedence issues nor checking for balanced parenthesis. Table 1 below lists some valid expressions and their respective values Expression Evaluated Value (2 / 3) 0 ((- -(2 + 3)) - 1) 3 (++((7 - 2) * 3)) 18 () 9 ((7 - 2) * (++(4 - 3))) 10 Table 1: Example expressions with corresponding values
Parsing
Your first task is to parse in input expression string into meaningful units called tokens. Parsing will take an expression as a string and return an array list of the tokens in the expression, such that each token is string. We use an array list because it is more efficient than a linked list in certain situations. Thus, the expression “(27 + 572)” should be parsed into the list of five tokens: “(”, “27”, “+”, “572”, “)”. Note that white spaces in an expression string must be ignored when parsing. We can then take this list of tokens as input to the eval() method. It is important that for any expressions containing the “++” and “– –” operators be stored as a single token rather than as two. Thus, “(++25)” should be parsed as “(”, “++”, “25”, “)” rather than “(”, “+”, “+”, “25”, “)”. Also note that “25” must be not be parsed as “2”, “5”. The parsing is done in the Expression constructor. You will need to fill in the missing code where it is indicated. You should use the Java StringBuilder class to build each token as you parse the expression string. The append() and delete() methods of the StringBuilder class will be helpful in tokenizing the string.
Evaluation
The evaluation is done in the eval method. Again, your task is to fill in the missing code where it is indicated. The easiest approach is to use two stacks, one to store values (named valueStack in the starter code) and another (named operatorStack) to store tokens such as operators or brackets. We emphasize that you may assume that all expressions are valid; that is, they are syntactically correct and will evaluate to a single value. HINT: Considering that all expressions are syntactically correct, there is no need to store the opening bracket of an expression in the stacks.
Testing
We provide an additional tester class to test your expression class along with sample testing files (sample in.txt, sample value.txt) which test for simple expressions only. Your code will be evaluated on a much more extensive and challenging set of test cases, and we encourage you to post complicated test cases on the discussion board.
Grading
Your grade will be based on the number of test cases passed. No points for code-style or readability, though you should comment your code for your own benefit. a) Implement parser in the Expression constructor (40 points) b) Implement support for operators +, –, *, / (20 points) c) Implement support for operators – – and ++ (20 points) d) Implement support for operator (20 points)
Other Specifications
All your code should be written in the Expression.java file. Submit a file A2.zip which contains only the file Expression.java . Only add code where it is indicated. Do not add import statements. You can use whatever package statement you want. The grading software will remove it. Good luck and have fun! Read the full article
0 notes
Text
Things to focus onto?
Braindump: { Halloween, libre software, life long learning, aesthetic creative assets, cartoons, fighting back Wilsonism, vintage soft grunge techs, 1910s, law of attraction & assomption, subliminals, autism, affirmations, Unix porn aesthetics, TempleOS, moodboards, wholesome, Portal 2, Helluva Boss, 0x10c, Servitor, INTP(-T), history, customization, handwriting, Jucika, slidesona and slideshows, civilization games, Pflaummen, Maskoch, Maskutchew, 16^12, conlangs, Black Bear, Her Camera, Klara, transfeminity, magick, witch, FreeCiv, exploration, pawnsonas, software toys, far far away future, dying universe, degenerate era future, Quake, Lisp, Tribbles, DECmate, PDP-8/E, dark pastel aesthetics, B&W, 35mm, wooden amber, Commodore, Sherman Fairchild, OUYA aesthetics, Hooven shoes, Reich, AutisticAngora, hydralisk98, trans pride, LGBTQ+, meme, CSS3 coding, HTML5 coding, C programming, retro tiny programs, Uxn, Gyo, Konrad Zuse, time travel, shapeshifting, opinions, Discord subliminal community, YouTube subliminal community, positivity, Ea-Nasir, ANSI, PETSCII, paper tape, paper cylinder worlds, collages, assembly programming, Oswald the lucky rabbit, vintage media, videostore, public library, dice, math rocks, mundane fantasy, Angora (world), Magritte, Tolkien, Vivziepop, Furudeki, content curations, compilation, video editing, vector art, photo edits, index card catalogs, zines, hardware modding, logic gates, multimedia, soft grunge, dark aesthetics yet empowering positive moods, apocalypse, documentaries, CRT, Sifteo, SEGA Dreamcast, SEGA Dreamcast VMU, Zepeto, Instagram, Tumblr, Mastodon, DuckDuckGo, Wikipedia, Deviantart, Toyhou.se, Librewolf, Brave, Build2 game engine, Quake 1, ASCII, UTF-8, textmode, text art, typewriter, selectric, word processor, analog tech, living computer history museum, custom dumbphone, libre mindset, dnd, pathfinder, talespinner EU the free TTRPG system, GURPS, dungeon crawl, hex crawl, knowledge explorer, alternate history, alternative software, DIY stationnery, font making, typeface craft, dark aesthetic ladies, angelcore, webcore, monotone icons, GUI theme pack, web design, custom cursor, custom sound effects, real life photography, relaxation, affirmations, mindset detox, flat retro yet layered style, animated agents, dark colors but bright themes, Windows 3.11, NeXTSTEP, SPARC workstations, BASIC programming, Unix philosophy, Parmenides, Philosophy, studies, study, *-blr, magazines, MIDI music, creative writing, poetry, Turing machine, Lambda calculus, game modding, Neocities, Geocities archived web pages, Fish shell, Bash shell, Zsh shell, cool-retro-term, Cathode, new iMac Yellow/Mint 24", logic operators, parentheses everywhere, Python programming, C++ programming, F# programming, CTSS (OS), ITS (OS), Multics (OS), Atari-style graphic design, Ural soviet computer, bitwise operations, tiny to the core minimalism... };
Hexes Selectric:
Focus: Knowledge exploration with aesthetic slideshows
Aesthetics: Soft grunge with yet dark-ish components (Versatile theme packs with my color scheme)
7 notes
·
View notes
Text
OK, I'LL TELL YOU YOU ABOUT FEATURE
They seemed to have lost their virginity at an average of about 14 and by college had tried more drugs than I'd even heard of. From their point of view, as big company executives, they were less able to start a company, it doesn't seem as if Larry and Sergey seem to have felt the same before they started Google, and so far there are few outside the US, because they don't have layers of bureaucracy to slow them down. It meant that a the only way to get rich.1 If you make software to teach English to Chinese speakers, you'll be ahead of 95% of writers. We arrive at adulthood with heads full of lies.2 We wrote our software in a weird AI language, with a bizarre syntax full of parentheses. That's an extreme example, of course, that you needed $20,000 in capital to incorporate.3 Their size makes them slow and prevents them from rewarding employees for the extraordinary effort required. Doing what you love in your spare time.4 Young professionals were paying their dues, working their way up the hierarchy. By giving him something he wants in return.
Once they saw that new BMW 325i, they wanted one too.5 If you simply manage to write in spoken language. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. The kind of people you find in Cambridge are not there by accident.6 I've come close to starting new startups a couple times, but I didn't realize till much later why he didn't care. We'd interview people from MIT or Harvard or Stanford must be smart. Indians in the current Silicon Valley are all too aware of the shortcomings of the INS, but there's little they can do about it. When you're too weak to lift something, you can always make money from such investments.7 Business is a kind of social convention, high-level languages in the early 1970s, are now rich, at least for me, because I tried to opt out of it, and that can probably only get you part way toward being a great economic power.8 It must have seemed a safe move at the time. At the end of the summer.9
It's not merely that you need a scalable idea to grow.10 How much stock should you give him? Users love a site that's constantly improving. But if you lack commitment, it will be as something like, John Smith, age 20, a student at such and such elementary school, or John Smith, 22, a software developer at such and such college. There are two things different here from the usual confidence-building exercise.11 But it means if you made a serious effort. Bill Gates out of the third world.12 What's going on? But I think that this metric is the most common reason they give is to protect them, we're usually also lying to keep the peace. The kind of people you find in Cambridge are not there by accident.13
Frankly, it surprises me how small a role patents play in the software business, startups beat established companies by transcending them. The problem is that the cycle is slow. With such powerful forces leading us astray, it's not a problem if you get funded by Y Combinator. If you can do, if you did somehow accumulate a fortune, the ruler or his henchmen would find a way to use speed to the greatest advantage, that you take on this kind of controversy is a sign of energy, and sometimes it's a sign of a good idea. Fortunately that future is not limited to the startup world, things change so rapidly that you can't easily do in any other language. How can Larry and Sergey is not their wealth but the fact that it can be hard to tell exactly what message a city sends till you live there, or even whether it still sends one. They build Writely.14 I'm not sure that will happen, but it's the truth. Stanford students are more entrepreneurial than Yale students, but not because of some difference in their characters; the Yale students just have fewer examples.
And whatever you think of a startup. In the US things are more haphazard. I see a couple things on the list because he was one of the symptoms of bad judgement is believing you have good judgement. There are a couple catches. Instead of being positive, I'm going to use TCP/IP just because everyone else does.15 Being profitable, for example, or at the more bogus end of the race slowing down. An example of a job someone had to do.16 But actually being good. There are a lot of people were there during conventional office hours.17
I'll tell you about one of the most surprising things we've learned is how little it matters where people went to college.18 In Lisp, these programs are called macros. That's where the upper-middle class convention that you're supposed to work on it. And since most of what big companies do their best thinking when they wake up on Sunday morning and go downstairs in their bathrobe to make a conscious effort to keep your ideas about what you should do is start one.19 The most powerful wind is users. We're just finally able to measure it. And not only did everyone get the same yield. VCs need to invest in startups, at least by legal standards. Ten years ago, writing applications meant writing applications in C. If you have to operate on ridiculously incomplete information.
Notes
Foster, Richard Florida told me about several valuable sources. If Apple's board hadn't made that blunder, they tend to say how justified this worry is. The founders want the valuation at the time 1992 the entire West Coast that still requires jackets: The First Industrial Revolution, Cambridge University Press, 1965. Yes, there would be enough to be a win to include things in shows is basically zero.
Different kinds of startups that has become part of your mind what's the right mindset you will fail.
But although I started using it out of loyalty to the founders' salaries to the traditional peasant's diet: they had first claim on the one hand they take away with the earlier stage startups, just monopolies they create rather than admitting he preferred to call them whitelists because it reads as a kid, this is the notoriously corrupt relationship between the government. As the name Homer, to mean starting a business, A. The Department of English Studies. Yes, strictly speaking, you're pretty well protected against such tricks initially.
There are also the 11% most susceptible to charisma. Every language probably has a word meaning how one feels when that partner re-tells it to profitability on a road there are no longer needed, big companies to say that YC's most successful startups of all the page-generating templates are still expensive to start over from scratch, rather than ones they capture.
There are two simplifying assumptions: that the Internet, and judge them based on revenues of 1. If the company goes public. This is one resource patent trolls need: lawyers. When that happens.
The only launches I remember are famous flops like the bizarre consequences of this type of proficiency test any apprentice might have 20 affinities by this, though more polite, was starting an outdoor portal. The Duty of Genius, Penguin, 1991, p. The danger is that in practice signalling hasn't been much of observed behavior. When I say in principle is that intelligence doesn't matter in startups tend to be when I was genuinely worried that Airbnb, for example, the startup after you buy it despite having no evidence it's for sale.
Another thing I learned from this experiment: set aside an option pool. So if they don't want to start a startup in question usually is doing badly in your country controlled by the government. But in a company grew at 1% a week for 4 years.
We added two more investors. The reason this subject is so hard to imagine how an investor, and that often doesn't know its own momentum. We think. I'm talking here about everyday tagging.
They thought most programming would be possible to bring corporate bonds to market faster; the point of a large organization that often creates a rationalization for doing so much to generalize.
Many people feel good. So instead of being interrupted deters hackers from starting hard projects. The idea is that it was overvalued till you see them, initially, were ways to make your fortune? In fact the decade preceding the war.
One father told me about a form that would appeal to investors.
Some graffiti is quite impressive anything becomes art if you tell them to justify choices inaction in particular took bribery to the traditional peasant's diet: they hoped they were only partly joking. If a big angel like Ron Conway had angel funds starting in the first phase. You're going to create one of those you can eliminate, do not try too hard at fixing bugs—which, if they stopped causing so much from day to day indeed, is due to the table.
The hardest kind of gestures you use the wrong ISP. But they've been trained to expect the second component is empty—an idea is stone soup: you post a sign saying this cupboard must be kept empty. The two guys were Dan Bricklin and Bob Frankston. I have set up grant programs to run an online service, and they were, they'd be called unfair.
My work represents an exploration of gender and sexuality in an era of such high taxes?
So the most visible index of that, in one of the markets they serve, because she liked the iPhone SDK. For example, because a it's too hard to pick the former, because it is.
If you ask that you're small and traditional proprietors on the side of the junk bond business by Michael Milken; a new airport.
The biggest exits are the only audience for your side project. You're not one of their portfolio companies. He did eventually graduate at about 26.
A lot of time on schleps, but he doesn't remember which.
When I talk about startups. It's also one of the statistics they use the wrong algorithm for generating their frontpage. The reason Y Combinator only got 38 cents on the other: the source of food.
#automatically generated text#Markov chains#Paul Graham#Python#Patrick Mooney#college#sign#things#Duty#henchmen#A#language#cents#peasant#resource#company#startup#diet#Bill#characters#idea#behavior#lot#problem#type#role#First#whitelists#Languages#li
1 note
·
View note
Text
Common Lisp: and why I love using it
Common Lisp has quickly become my favourite programming language. I used to laugh at it and call it antiquated and obtuse, but after using it for 2 years I can’t imagine wanting to use anything else (except perhaps Erlang or Elixir).
Its macro system allows me to quickly write concise code that I wouldn’t even be able to write in another language. Homoiconic languages are amazing, and the flexibility Common Lisp provides is extremely powerful due to it’s homoiconicity.
The shortcomings of said flexibility is overcome by fantastic support for the functional programming paradigm. It’s the only language I've found so far that allows me to clearly express my thoughts as code.
It is absolutely a joy to use, and I highly suggest it to anyone looking to try a new language.
Just don’t let the parentheses bother you too much, okay?
0 notes