Today is just the sort of day that you find yourself re-reading the great writing of the late Pieter Hintjens.
On "not being" a programmer.
On biculturalism. The associated Lobste.rs thread and linked Daring Fireball article are also worth a read.
On coming full circle with regards to navigating within the terminal. I like the "marks" idea (reminds me of Vim) but I'm perfectly fine with cd/ls and some pushd/popd here and there (protip:
pushd +1 to rotate the directory stack).
Dua Lipa's "Don't Start Now" is, IMHO, missing just a little push in the funk direction. I can't find a good cover though. (Literally every one I've listened to has been missing the point.) Perhaps that's where I can fill in a void, someday.
Edit: This is pretty much better than anything I had in mind, and has, like, ten times the personality of the bassline that was in the original.
On CollegeHumor. I remember being somewhat of a fan back in 2014 or so; seems like things have gone downhill since.
On the fascinating dilemma of anti-cheating measures.
Valorant's particular scheme, while seemingly draconian, is also somewhat warranted if they want to ensure fair play.
Yet nothing can prevent all cheating entirely; some next-level thing would be to manipulate the RAM physically outside of the OS running the game itself. Sure, that's not prevalent right now, but that's pretty much how console cheating works (or at least it has until now).
My gut feeling is that there is no real solution. People just are going to be jerks, and no amount of technological measures will stop them, only perhaps slow them down. The best that can be done is to implement community systems to attempt to fix the status quo, though I'm doubtful that scales too well either.
Websites are starting to look more similar, empirically.
Microsoft is releasing some DirectX on WSL. So it's Windows (kind of) atop Linux (kind of) atop Windows? Meta.
On why AES-GCM sucks. For some reason this particular author just emanates wholesomeness. Perhaps it's to do with the personable illustrations. :)
Deno has reached 1.0! Very happy for them.
This new use of GPT-2 I find so hilarious that I'm in tears right now.
Also read what the folks at HN discovered, as well as try your own. I literally cannot go over more than three definitions before finding something fun.
On ERP, the multi-billion-dollar software discipline that most engineers have probably never heard of.
Though I'm a fan of the Unix philosophy at large, I also agree that it's like a bunch of sharp tools. Also see the associated discussion.
Second-guessing the modern web.
On Xanadu. Alas note that this article might contain some inaccuracies. (That latter rebuttal is quite indicative.)
A fascinating four part post series on coming about to making a deployment pacer.
On the usability of editable software.
On WinSxS and why is it so large.
Chromium Developers' Fast Intro to Git Internals. A really good read if you're curious.
On Overcast's Voice Boost 2. Just love this kind of deep dive into any topic, especially audio processing.
Today is just that ACNH 3pm vibe kind of day.
On Twitch's (then Justin.tv) livestreaming architecture in 2010.
Also worth reading this recent HN thread on the same.
On coding for fun.
Feels like I needed to read this.
On the engineering culture differences between Etsy and Netflix in 2013. It's old but fascinating regardless.
On experimental WebGPU in Firefox.
Though I'm of the opinion that perhaps the web has expanded a bit too much, I am also prone to falling for the new shiny, especially when it aligns with something I'm personally excited about.
I'm excited about general purpose (non-graphics) usage of GPUs, and WebGPU does allow for that, hence why it falls on my radar. :)
John Gruber on the iPhone SE (2020).
On Lee Holloway, one of the cofounders of Cloudflare.
It's scary to think about diseases of the brain and the way that they disrupt the things what makes you you, at least in the scientific sense of observability. Having observed a relative going through a form of dementia really shakes one up, especially knowing that it might affect you or someone you dearly love someday in the future.
It's wishful thinking to hope that it won't happen, though hope is all that one can currently have.
Alas Lee didn't live to see the technology to immortalize your selfness before starting to "lose" it, and perhaps I won't too, and certainly many people I love won't, though I wish that CGP Grey is right on this one.
Sure, this raises the question of what even is self in that context, as relayed in the Wired article as well. But perhaps that's a topic for a different time or medium.
On the decline of usability.
On missing the point.
On open worlds.
Tom Scott on APIs, Web 2.0, and building stuff. Though this definitely isn't what I expected this week, I find it particularly poignant it's Tom who's raising this issue.
And I agree wholeheartedly. Wow does this strike true.
On decoding MP3.
This recent SMBC is quite good.
The Glitch Gallery.
(Via Joy of Computing)
On what books programmers should read. Alternatively, which ones they don't read.
Ogg objections, and a rebuttal by the creator of Ogg.
On chat as a communication tool at companies.
Of course it's biased—it's even on Basecamp's domain—but it still has plenty of truth in there. It's a subtle advertisement :)
On choosing boring technology.
On whether one should use Vim full-time. (Spoiler alert: it depends.)
I use Vim for nearly all of my coding these days (my setup is actually pretty vanilla) and it works great for me, but I can totally understand that it wouldn't for just everyone.
On uninterruptible sleep and, relatedly, on TASK_KILLABLE.
Via this HN thread, whose target is no less fascinating.
On zig cc.
The work that Andrew Kelley puts into Zig is just incredible.
On aliasing, particularly in computer graphics.
My current study program doesn't include any signal processing theory (or so I believe) which is a real shame because there's a lot to be explored there. The explainer on Fourier transforms within this article is one of the most accessible I've seen yet.
Cshell is punk rock.
On the history of the x86 register names.
On the scope of the web, particularly web browsers.
While I don't agree completely, the points are valid, especially on the ever-expanding scope. Even implementing a complete HTML/CSS rendering engine, not even mentioning interactivity via ECMAScript and DOM, is a herculean task; when you couple that with a JS engine, it becomes near-impossible.1
On the other hand, web browsers might as well be the most generic and application-level-developer-customizable software conceived until now, with a solid security model and compatibility. When you take any single application in isolation, few can be proud to be as flexible as web browsers.
Though Drew tends to paint this in a more of a negative light, though I'm not claiming this is the entirety of his opinion, I vouch for the flipside. I'm not particularly proud of being primarily a web developer, if such a title even exists, but I can attest that I can do a lot with the tools that the web provides, at least within certain contexts and sets of limitations.
Also, it will never cease to amuse me that a significant complaint people had about this article was that the word counts were off. Of course some people need to have everything be factually precise, regardless the intended sentiment.
1 Though how this came to be is also an artifact of the system web browsers exist within; there has always been a pressure to add features to web engines, and the standard essentially is just a description of what engines do currently. Implementing a new engine essentially requires effort that is equivalent to what has been cumulatively put into the existing engines since 1995 (!). No wonder nobody else tries—because without engineering resources that only a few companies in the world even posess you'll be stuck playing catch-up with a 25 year gap, and which will probably not grow smaller by the day, quite the opposite.
On transitioning from Python to Go. Really good points that I've thought about as well—Go indeed makes concurrency seamless, and doesn't place any obstacles for parallelism.
I suppose the point is that concurrency must be supported natively by the language, and parallelism should be a runtime feature from the start. Both of these do seem like truisms if you think about it—any other model than M:N multiplexing has a bottleneck at one point or another.
I've been toying around the idea of trying to make a programming language again (and I'll probably find an excuse to do so as part of my uni curriculum at some point), hopefully a proper one this time, not some one-letter-Brainfuck-level-technically-Turing-complete-but-not-really-useful thing, so perhaps this could be a fair design cue to take.
(Via Chris Hodapp via Lobste.rs)
Though it's probably not the best general advice, on doing whatever you can't stop thinking about.
(Sidenote: the typography on that page is pretty bad.)
On being a generalist. I consider myself to be one, for better or for worse.
Edit: This quote also seems to hit true:
A specialist will tend to underestimate a generalist's ability to specialize, when they choose to focus on one thing; A generalist will tend to underestimate how deep any given specialty actually extends.
For nostalgia's sake, here's a ca-2008 meme.
On why the Brave Browser is brilliant, though not necessarily in a positive way.
Why you shouldn't use Material Design text fields. They are a bit of a pet peeve for me, especially with Material becoming the new Bootstrap on the web. It just feels clunky.
The whole fact that the labels slide around seems like animation for animation's sake, without a lot of regard for usability. I know that it feels nice to cook up new paradigms—I've done it myself back in the day—, but from my current point of view I would be against it. If most field labels you see are beside the field and don't change position, then go with the flow instead of inventing your own way.
The app I'm working on will take inspiration from Material, especially regarding the spatiality of the layout and interaction design, but not the visuals per se.
Google themselves seem to have been striving away from pure Material in their recent app updates. Apart from using the card metaphor, I don't think Google Maps on Android is really that Material-esque, for instance.
Another worthwhile link from the same article on the same topic.
(On this topic, another phenomenon I'm not a fan of, though perhaps it is happening for the greater good: replacing the navigation drawer with a bottom tab bar.)
On integer division via multiplication.
When bloom filters don't bloom.
After taking a Computer Architecture course at my uni, the results make quite a lot of sense.
On the deficiencies of Go's simplicity-oriented approach.
This is officially the best tweet. Pack it up people, we're done here.
Related to a recent post, here is Joe Armstrong's favourite Erlang program.
If only the servers of today were that simple. Erlang/OTP, in certain categories, is the ideal programming environment; this post provides one of the proofs.
This intuitive guide to Linear Algebra is incredibly good. As the author mentions, I wish I had this when I was taking it.
Joe Armstrong on why programming is difficult.
While digging through the bugs linked from the Zig documentation (which is actually really great), I accidentally stumbled upon Fomu.
Looks like those RAM sticks I've been wanting for my tower PC will have to wait. This seems like such a fun technology to play with!
I believe that I have a side project brewing, and I find it likely that I'll use Zig for it. Here's an intro if you haven't heard of it before, and here's something absolutely amazing to me as a particular kind of language purist.
I mean, there's nothing wrong with hygienic macros (see Rust or Lisp) which can accomplish pretty much the same thing, but they explicitly exist in a different universe than the program they're working on. Sure, that makes them more powerful, but Zig's
comptime seems to be much more in-line with the rest of the language; it works exactly as you'd expect—what you wrote gets evaluated at compile time as far as is possible.
The only other language I've heard does something like this is Jai, which shares some of its goals with Zig, but it fills a different niche and is not yet widely available whereas Zig is.
Open Location Codes or even Geohash are viable alternatives.
There's also WhatFreeWords. If I were to use a system, I'd pick the latter if I were to spite W3W. (Though in practice I'd stick to one of the aforementioned ones instead.)
On the Ambiguous (
This thread blows my mind.
What happens after you get cancelled.
Jon Ronson's book on the same topic shows a different picture for some, but in abstract this part really stuck with me:
Taylor Lorenz, a staff writer at the New York Times told The Stranger: “In internet culture, being canceled is only good for your career. It usually results in going viral, which is default good in today’s broken world.”
I suppose it seems this way because you only see the people who survived it, who stayed in the public mind or their jobs. The rest of us, we cease, unpersoned and exiled. We are not in the observational data set, we are never spoken of when people talk about this mode of human life.
Homebrew has removed Python 2 from their repositories.
Hopefully others will find time to follow suit.
There's a misconception that EOL was on January 1, and while that is true in one of the technical ways, the actual final 2.7 branch release will be in April. But who cares about that :)
On the Nokia N9. I love to wonder as well what would have been were it not for Windows Phone.
(Via Joy of Computing)
On home-cooked apps.
Right now I'm working on a project that feels like it might stay in this category. And it's not a bad thing.
Casey Newton on the fight for encryption.
It was inevitable, but India's case in particular might turn out bleak.
Wireguard has been mainlined. Exciting!
A classic post in PL theory, if it can even be called that.
It's in the same category as Eevee's eternally young post on PHP. (I continue to work in PHP and this post is still valid.)
The perspective of an Apple Aperture QA engineer.
Apple occasionally seems such a fun place to work at, and stories such as this are really inspiring. Though the story of Aperture has an end much like with any other software, though some continue to swear by it and put in the effort to try and delay the possibly inevitable, if one decides to keep up.
Возможно, что Всероссийская перепись оказывается под угрозой.
The Evolution of Trust.
An implementation of Git in (almost) POSIX shell.
Git's internal concepts are indeed beautiful in their simplicity, but its externals are messy, to say the least. :)
On what Lua doesn't have that could make it competitive with Python. Lua is indeed a beautiful language and has the potential to have more power in the dynamic language space, but it doesn't because it wasn't intended for that.
Which is too bad, really. Lua is one of my favourite languages.
This tickles my inner engineer in all the right ways. Also it's by Bartosz Ciechanowski, his interactive posts are literally the best there are.
Finally fixed the fonts on this site. Whew, the mistake was quite dumb, and now you can enjoy these posts in a nice IBM Plex Sans.
Unrelatedly, some more posts are coming. I've been stashing some links for a while and hence will dump them quite soon.
While I agree to the premise that messaging needs to become decentralized, I (as an XMPP fan of sorts) disagree with the approach outlined therein.
Though let us not fall victim to infighting when there's a greater enemy to be slain.
Tapis nominēts gada vārds un nevārds.
Šogad maķenīt mazāk polarizējoši nekā iepriekš. Kandidātu atlase ir ievērojami interesantāka—sevišķi patīk
rīsulis, kaut gan otro nekādi nevaru pieņemt suši vietā, tāpat kā nekad neesmu spējis pieņemt
haika vienskaitlī (uzskatu par pareizu gan vienskaitlī, gan daudzskaitlī paturēt haiku.) Laikam gan manī vēl joprojām mājo vēlme apgūt 日本語 :)
Responsive Pixel Art. Really impressive stuff.
On bugs in emulation and hardware.
Byte is here! Back in the days of Vine I was a fan of Tragic Tofu and the author is back for more under the same username on Byte so I recommend following them there.
I wrote a short post about why Byte is fine the way it is.
The tragic story of Phil Katz.
Capital valdes locekļa viedoklis par likumdošanas izmaiņām un ieskats valdības nozares un vispārējās IT tendencēs.
Where are our simulators?
On being glue.
One of the new podcasts I've taken up and have been really enjoying recently is On The Metal.
This particular episode on homebrew network infrastructure (!?) is very much a favourite, though there have ever only been a few episodes thus far.
Highly recommended if you like such low-level stuff! Still recommended, but maybe a bit less, if you don't. :)
On why static typing might be better even in the scenarios dynamic typing usually is touted as the more useful tool.
Can't say I disagree.
On contempt culture.
Gives you stuff to think about.
A great write-up on event sourcing. Loved the xkcd cameo and the approachability of the text.
The idea itself seems useful and is partially embodied in other practices such as message queueing (job deferral, see RabbitMQ/beanstalkd) in webdev so it's not entirely foreign but taking it to an extreme seems to have its benefits as well.
Too bad nothing I'm currently working on could make much use of splitting into such tiny microservices, not least due to resource constraints (yay indie life).
Some of my shortform content will hereon be posted on my Mastodon.
Sorry about that, but it feels like some of it doesn't belong here.
So I've semi-accidentally jumped from web development into mobile app development and thus far it's been very fun and a nice change of pace.
Am I turning into a Marco Arment?
qpdf is the best.
Opinion: Writing unit tests feels like eating your vegetables.
You don't look forward to it, it's menial while it happens, but you feel (and are) better afterwards.
Not that I don't like vegetables. But I can't say I'm excited for writing unit tests.
Right now I'm procrastinating from doing that, even.
Steve Klabnik on CLOSURE. (CLOSURE itself.)
Soon the posts on this site will be available via Micro.blog.
Though I'm not an active user of this service, it has its place within the wider Internet and I respect the work that Manton is doing.
On non-sighted software development.
On message passing paradigm in practice.
Famously Alan Kay, who coined the term "object-oriented programming" and who created Smalltalk, claims that OOP is all about message passing instead of how it's implemented in the descendants of Simula. Though that doesn't mesh with the say many programmers interpret it (particularly because of C++ and its overwhelming effect on programming languages), the OOP purists tend towards this model; particularly in Ruby and to a larger extent in Erlang. This taxonomy is worth considering; I tend to support it.
This last post got kinda long so I thought of implementing asterisms as a nice alternative to horizontal rules for breaking it up into sections.
Though I admit it was off form for this place. Perhaps I shouldn't post long treatises on multiple topics stemming from a single one on here?
But where else?
Edit: Technically the
* * * isn't an asterism, but a dinkus. Ah well, too bad that the CSS class I made is named
asterism. Hopefully I won't forget to fix it eventually, but in the case I'm not in a hurry: for posterity's sake for the typography nerds reading this, let me outline once again, I do know that there exists a difference, just that I don't care enough to implement a change at this moment.
I never managed to jump onto the Protobuf hypewagon, and this detailed criticism of them will be good ammunition in future considerations, though it's predicated a bit unsubtly in type theory and uses Haskellisms to describe things. (Perhaps Haskell is a Holy Grail language for type systems?)
I prefer JSON for my APIs instead. If you can't deal with the lack of typing, I am sorry but you don't get to interfere with a no-nonsense good-enough format just to get some fancy Java-like features and binary parsing added.
* * *
It would be interesting to have a similar analysis performed on Telegram's TL which seems to be its own can of worms, made in a typical Durov NIH-syndrome fashion. Unfortunately I lack the experience to do that, for in the alternative case I'd love to, what with my growing hatred of Tg as of recent.
* * *
Related to the first article, someone within the HN comment thread mentioned that Protobuf was originally written by Jeff Dean and Sanjay Ghemawat, which reminded me of this excellent NYT profile of their duo.
* * *
Still related to the first article, this partial debunking by Kenton Varga who's somewhat of a big name in this space is worth reading.
* * *
Reading through the 2018 comment thread of the same article, I came across this nugget:
The utter awkwardness of Protobuf-generated code is particularly problematic. I've had pretty good results with the TypeScript code generator, but the Go generator is just egregiously bad.
While I do admit that there are valid use cases for code generation, I've thus far tended away from it rather than towards it;1 perhaps codegen itself is incompatible with human programmers working on the same codebase and there's reason to hurry along the monkeys-at-keyboards out of it? I can't say that's the conclusion I want to come to but it's a valid one.
1 It is not because I vainly believe that programming is secure from automation, for it is most certainly not; rather because it doesn't mesh with, and even goes against, my personal philosophy that code is a work of craftsmanship and represents the qualities of its author. I don't have a use case for generated code within my own projects, and the code generated would be out of place in the context of mine. This is a privileged position to take since my projects are comparatively tiny to where, e.g., Protobufs get used.
Within an attention-deficit society I find campaigns such as this highly admirable. Only if something like that were to happen somewhere closer to where I spend my days.
Merry Christmas, if you celebrate that sort of thing.
As I'm working on a sort-of-SaaS project of my own right now, this postmortem of a failed SaaS hits home hard.
Nozare.lv intervija ar Tet valdes priekšsēdētāju. Sevišķi interesanti, ka tiek plānots ieviest "agile" darba metodes; vismaz beidzot kāds lielmēroga uzņēmums Latvijā sāk kustēties līdzi laikam.
Būtu jauki, ja to pašu izdotos ieviest e-veselības izstrādātājiem :)
The Verge has an article on how the alt-right is using Mastodon as their social network of majority.
On a related note, I've migrated my own account to a different instance for partially unrelated reasons. If your follow hasn't been transferred automatically because you're on an outdated instance, please, re-follow manually.
Not like I'm planning on posting there that much. But, y'know, just in case. Don't want to be screaming into a void. :)
Ars Technica has this quite accessible post on deepfakes.
Conclusion: not there yet. But probably not too far off either.
Related: Tom Scott's video on the same subject, coming to the same conclusion, except with much weaker hardware and hence much less training.
The Ars Technica promoted comment also makes a good point: entities with much more massive budgets than $500 over two weeks, and hence more powerful hardware, could probably use the technology even as it is now, perhaps with some tweaks, to perform faceswapping at a much more convincing level. The scale available to them is unimaginable to us, and nearly nothing prevents them from using it for whatever purpose they might want.
I'm sure Twitter's Bluesky initiative has been debated to death, but I wanted to highlight a couple of external commentary.
Bluesky, while potentially ambitious and overdue, still seems to be half-baked in the current state. I can only hope that Jack isn't serious about blockchain, and I wish for either ActivityPub or (perhaps, one can dream) Atom/RSS to form the basis upon which this is built, but I can't hold out high hopes.
The problem-at-large seems to be with the paradigm of social networking in general. Though it has its upsides, I personally apparently can't coexist with them in a healthy way so for me the only route to success is to refrain. Which is what I've been doing, apart from this write-only medium I have here.
Still, it'd be nice to see Twitter going somewhere with this. I've dumped enough hate on them and I hope the technologist within Jack prevails and effects the power that 2006 Twitter had but took away from the developers at first chance.
On the changing Japanese language:
Language is political, as Mizumura demonstrates. By projecting their domestic identities to a global audience for the first time, the Japanese are engaging in a symbolic act of self-assertion and seeking to put such complexes behind them.
Perhaps I should make good on that promise to myself and eventually get the original Blue Book. Seems like it could be worth it.
For calm technology.
This is something I've been thinking about on-and-off for a while as well, and this just puts it better than I could.
I'm not a gamedev but stuff like this makes me wish I were.
Just that I don't have any ideas.
Jeff Atwood on why programmers are typists first.
I can personally squeeze out around 80-100 WPM according to different metrics, and indeed I must note that the ability to type quickly makes it much easier to code, as you don't lose your train of thought too often.
The SCoBHUa hearing on Privacy Rights and Data Collection in a Digital Economy raises quite a lot of important questions in this age of privacy dilation. Maciej Ceglowski's testimony in particular is worth hearing (beginning from 42 minutes in the video), but the Q/A that follows is arguably much more worthwhile.
(If you want to watch the whole video, the hearing actually starts only at minute 18.)
SEO spam site, you wot?
On ZIP quines.
Recommendation: Just read everything that Russ Cox writes. His pieces are brimming with technical insight and details. I've not gotten through even 1% of it, but he's probably the one tech writer of modern times that should probably be on every self-respecting software engineer's reading list (or, hopefully, already-read list).
On Lobste.rs today I found Return True to Win, but somewhere nearby I found a much more fun XSS game in the same vein.
I can't stop!
Edit: Should probably redo the Matasano crypto challenges (or at least try to finish them this time) sometime soon.
Don't learn to code—learn to automate. (Fixed that em dash spacing for you.)
Paul Graham on how the current education system is broken. Being an university student at the moment I do somewhat feel this on my own skin and it does indeed chafe, though it seems that the problem is much more acute in the US whence Graham is (presumably) writing.
I love the aesthetic this kind of loading spinner oozes. :)
Controversial: PHP is basically just an odd Perl. Or at least it was until around mid-version 5 or so.
I've probably already posted about machine-generated death metal, but I just re-stumbled upon it and it's still pretty good.
I witnessed some of this. It was fun.
To fight the nascent negativity on my feed, here's some comedic relief.
(Via The Interface)
On framework configuration patterns. Just in case I ever need to implement my own framework and can't choose.
I hate to be a downer, but alas.
I've heard of Away through their podcast ads, and a recent Verge piece provides insight into the churnhouse that's at work making it all happen.
Reality distortion is a powerful thing.
Pondering Advent of Code after having done three-and-a-half1 days' worth of exercises:
I really miss Erlang. F# is nice and all, but feels like Erlang set a bar for functional thinking.
Erlang, by many measures, is not a perfectly functional language, but I nonetheless tend to write my F# code as I would do in Erlang and it doesn't feel idiomatic.
Perhaps it's just impostor syndrome.
1 I haven't gotten day 3 right yet. It's in progress and requires a full night's worth of sleep, which I haven't gotten the past few days. :)
I can present no comment, except to mention that this is what earns the web its reputation.
On nexuses. I like the term.
Brent Simmons sometimes seems like the wisest person around within the internet circles I tend to frequent.
His post on why he listens to podcasts at 1x speed (which I don't, by the way) somewhat unexpectedly goes into quite deep life advice that I'll probably be consider until the end of the night.
It wouldn't even have occurred to me to look at everything that way, but it's so true.
As always, Microsoft excels at providing intuitive, cruft-free software experiences.
If you can't give users the option to delete their account without contacting support, I suspect much more is wrong than just the technical side of things.
Especially if you require users to contact you by phone. Why?
Some fairly good advice on technology choices from DHH.
I don't keep up with him in particular or Basecamp in general, but often times their (and his) philosophy rings true. This is definitely one of those times.
My own personal projects focus on nano-scalability, and that's the reason I choose PHP: it scales down to zero when there are no users and can scale up for some time before you run into limits. The former part is really important to me who doesn't have an audience to speak of which would use anything I make. Hence it's important that stuff doesn't take up resources when it doesn't need to.
It's quite hard to find good recordings of particular pieces when you have an opinion on how they should be played.
Today I discovered that one of my favourite cello pieces is composed by Bach, and a near-perfect recording already exists.
I've heard mentioned numerous times (probably by Merlin, also in Jon Ronson's "So You've Been Publicly Shamed") that Twitter is the epitome of internet mobs.
This pair of tweets reflects it best. (Edit: cont.)
Note that I'm not taking a stance in either direction. It's a personal matter to agree or disagree with this approach, though I can see the downsides.
But the whole fact that two diametrically opposite opinions can be located within a subtweet's distance is somewhat boggling my mind. This means that there are no barriers between both sides and hence it's easier for the anger of either side to turn onto the other.
I guess Jon Ronson has spoiled Twitter for me. Suppose I'll remain here, in my quiet corner of the internet whence nobody cares.
Perhaps it's better that way.
Writeup from Twitch engineers on the technique of memory ballast to help regulating GC invocations within heavily-loaded applications.
Lobste.rs just seems overrun with GC posts today. Wonder why. :)
Kaboom is a really interesting take on the classic Minesweeper. It really forces you to be attentive and not just make random guesses.
Minesweeper Kaboom pro, but perhaps that's exactly why clearing a 10x10<-10 board feels so good and at the same time the process so intense.
Oh gosh, there are apparently tons of advent calendars ongoing.
Edit: Had forgotten about the Bekk Christmas calendar constellation.
I don't directly buy SOLID either. But perhaps indeed it's just enough practice that opens your eyes.
Fun thing: programming opinions people believe are controversial.
This rings surprisingly true, as partially does this and this. Though, of course, it's hard to deal in absolutes, as even the aforementioned necessarily have exceptions.
Just today Twitter gave me a recommendation to follow Joe Armstrong.
I know that they don't know that he's deceased, but simultaneously their impeding policy on clearing out old accounts will hit the same problem, and I'm not entirely sure that they'll be up for it and whether they'll do a good enough job. Sure, the one-tweet-years-ago accounts can go, yet Twitter is in a peculiar position if they want to free up username real-estate.
YouTube deals with this by removing channels whose account hasn't been logged into for four years, I believe. (That's how we (I?) lost ReverseMan. [The channel, not some weird video.])
The Advent of Code is officially on!
I intend to publish my solutions as well to anyone curious. No particular promises on languages or anything just yet though.
For fluent interfaces.
Against fluent interfaces.
Sure, they might be nice to use (with some exceptions and constraints), but they wreak havoc on the internals you're calling into.
I've tried implementing a fluent interface for a SQL query builder back in the day. It was fun to use but tedious-at-best to write.
Use more idiomatic OOP approaches instead. Or just don't use OOP at all.
Still related to the Ubuntu 19.10 post, the post on how Gnome Shell's performance was improved so drastically (by some accounts) is actually a really interesting read.
Particularly thought-provoking is the point on needing to use other environments to compare against your own. It makes sense, after all—if you only use X then you'll get used to its problems and stop noticing them, until you switch to Y which doesn't have them and have a sudden moment of realization—but I don't think enough people keep this in their minds when rolling through life. Sometimes a little perspective is needed, and the best way to get that is to step outside of your comfort zone in all the possible senses.
While pondering setting up ZFS on my next Linux reinstall (long story), I came upon this very detailed treatise on exactly why CDDL and GPLv2 are considered incompatible, which on a theoretical level prevents from anyone legally shipping a Linux kernel with Sun's ZFS code within it.
Note that Canonical didn't abide by this ruling and insists otherwise. I'll hold off on this because this seems like a topic where only lawyers would be qualified to judge, yet I would love for ZFS to gain wider adoption.
Edit: Interestingly, this has some parallels with Minecraft server modding, in particular, the approach used by Spigot ever since 1.8. The history of why this came to be is long and complicated and I can't say I recall it in its entirety either, but the essence is that Mojang holds the copyright over the server code, and while Spigot might sort-of patch parts of Mojang's server code, such a modified server executable would still fall under Mojang's copyright and so it can't be legally redistributed. The way they circumvent this roadblock is by never distributing the complete executable but instead providing the tools for anyone to build it on their own machine.
ZFS on Linux (usually) works the same way—the baked kernel executable or, indeed, any sort of module is not provided (at least officially by any vendors apart from Canonical) by the Linux vendor, instead providing for the option to build a bespoke version on a machine for "personal" use, but not distribute such a build any further. This is fine-and-dandy according to most interpretations and not-detectably-illegal by the most pessimistic ones.
Edit Ⅱ: Although it seemingly got nowhere, there was even an attempt to clean-room implement ZFS in Python without reading the original source code, which would entirely bypass the license troubles. Unfortunately ZFS is so large and complex (just like any other substantial piece of software) than such an effort couldn't probably yield a complete piece of software, not even considering how reliable it would be, as opposed to what the mainline ZFS implementation offers, what with its battle-tested code.
Of course, for Linuxes there's always btrfs which, though having its own set of troubles while it's not mature enough, seems promising. But I've been burned by it before and I don't think I'd trust it before its disk-nearly-full and logs-grow-unboundedly-by-default behaviours become more sane.
Ubuntu 19.10 is out.
Yay, another chapter of my favourite ongoing project is online!
This report of the first GitHub Open Source Advisory Board meeting, written up by the author of Fossil, is thought-provoking on the issue of Github's role in open source these days.
I'm personally not a fan of Github and the monoculture it seems to tend towards (with Github being the de facto default destination of open source projects) so I host quite a bit of my code on my own server instead,1 so I tend to agree with many of the points Richard makes in his analysis. Though at the same time Github has its advantages, especially considering that it provides all of its resources for free without any real limits due to being subsidized by its enterprise offerings.
1 Right now I'm using Gitea for this but I feel like it's quite bloated and resource-intensive, especially for a small VPS. The perfect alternative would be to write a solution of my own but that will be quite resource-intensive and something I don't think I could extract a lot of value out of.
Until recently I was a fan of Wire as the primary choice for a security-oriented messaging app.
Recently they've begun a push towards B2B and expunged any mention of their free version from their website so I guess the days are counted for non-business Wire.
Back to XMPP we go?
Sometimes I'm just stupified by how creative some people can be. Even though this seems silly, I wouldn't be surprised if somebody built an emulator of this within some sort of 3D environment.
Ruby is a damn beautiful language that I really enjoy working in, but boy, the builtin HTTP client is really clunky. As is WEBrick.
This is a serious downer for otherwise such a great language.
Though I wouldn't call myself a new developer, I occasionally read Letters to a New Developer because it keeps my mindset from going too egotistical.
Learn Two Languages seems like a really apt piece of advice, not the least because it encourages to expand one's horizons of thought. It's something that many of us forget to do (I myself can attest that I do quite often) and it's nice to have such a reminder.
An interesting and underused (underimplemented?) idea in debugging: time travel. I personally first heard it back when trying Redux, but just now discovered rr which applies a similar idea to any C/C++ program, which seems quite powerful indeed.
Stumbled upon this within a discussion of Firefox's new Web Replay feature that's coming soon and bringing the same thing to webapps.
I really wish all languages and environments had something of this calibre to offer. It would make programming so much easier as compared to the state-of-the-art we have now with most languages where it's not much better than just sprinkling print statements all over the place. Manipulating the flow of time seems so much more innovative and offers better insight about how the state had changed up until a certain point, not just seeing the state at that point in time.
Doesn't seem like it got a lot of coverage, but the new "Listen like you used to" Spotify ad campaign seems quite fresh.
Šeit ir raksts latviski par to pašu.
Merlin Mann, back in 2009 or so, on Marco Arment. The piece itself is showing its age, but this part caught my eye:
I’m still mulling over the longer term consequences of a post-RSS, post-API culture that destroys any reasonable barrier to putting all the data that matters to you any place you want any time it suits you.
Alas, the opposite of that happened instead.
Also, gosh, 2009 was 10 years ago. Merlin was cranking out quite a bit of writing back in those days.
I love Maciej's occasional technology shitpost tweet.
On finding characters within a string in an optimized way.
Due to the fact how current CPUs work, sometimes the best optimization appears counterintuitive. I still haven't internalized the fact that either manual vectorization or using SIMD intrinsics is better for performance than naive loops, especially on languages that have some interface with low-level stuff. (Unfortunately, more often than not I get to spend the time thinking about this while working within PHP which has plenty of barriers preventing such optimizations from being of any use.)
Figma's detailed description on how they implemented what they call "multiplayer" (which is actually a bloody great term!) for their web application is a quite nice read. Realtime collaboration is something I want to eventually research, and this seems useful.
The short note on fractional indexing as opposed to OTs for establishing an absolute ordering for sequences is worthwhile as well.
Tonight I read a two-part saga on the lives of Facebook content moderators.
It's a sobering read.
I can only hope that Newton will report once again after the measures are instituted. Even though there will always be vile content that will have to be moderated by someone (even in the case AI takes over, in which case the AI's decisions will have to be checked at least sporadically) as inherently there will be some humans who take perverse pleasure in hurting others, be they human or not, and enjoy sharing such acts, I cannot put into words the state the current moderators are subjected to.
Not even talking about the vile content itself. I feel like I have slightly too vivid of an imagination to even pay attention to the paragraphs where they talk about what kind of content is even being seen by the moderators. I can't even begin to imagine what being one must be like.
I like Speagle's idea of needing to shut down Facebook (admittedly I agree for the wrong reasons) yet that wouldn't fix the problem, just move it elsewhere. Perhaps the policies were slightly incorrectly skewed which made this entire system even possible in the first place, but the kinds of people that wish to share this content at all will not go away just because you take away their place of expression; they'll just move elsewhere, and that "elsewhere" will have to deal with much the same problems.
I guess the grim conclusion of this supposedly short-form post is that this is how I lose evermore hope in humanity.
👏 Delfi 👏 "podkāsti" 👏 nav 👏 īstas 👏 aplādes 👏
👏 tā 👏 nav 👏 aplāde (podraide) 👏 iekams 👏 tai 👏 nav 👏 RSS 👏 barotnes 👏
Fossil's new smartwatch seems like it was made just for me.
I've been having an affair with an Android Wear smartwatch (incidentally, from Misfit, who seem to be a subsidiary of Fossil now and were probably involved in making the Hybrid HR) and thus far I am a bit torn. I was a fan of Pebble and the customizability it afforded but these days I'm an old curmudgeon who just wants the bare minimum, no apps, just notifications and a simple analog watchface is perfectly enough.
The fact that Hybrid HR is limited in what it can do and at that can provide excellent battery life is a giant plus for me. The limitations are what makes it great, as opposed to the ones who need all the flashiness of Galaxy Gear/Apple Watch.
Even though I abhor Twitter threads as a medium of long-form communication (sorry, Foone) this one on Sunray and, interestingly, Google Stadia makes a fair point.
The 88x31 GIF archive is a fascinating nostalgia trip to go on. Too bad that nobody seems to have done a similar thing for 80x15 badges though.
On why your money might not be yours. I agree as a technology cynic yet fail to follow the advice outlined as a lover of convenience, unfortunately.
The Cybertruck seems like a joke yet I love it.
I might be a bit late, but this piece on Google's quantum supremacy is quite a good read.
Related to a recent post, this consideration of the role of OOP in modern programming is just too good to not be mentioned here.
Also never forget one of the excellent Eevee's treatises along a similar theme.
After fighting with my PC motherboard's buggy implementation of UEFI, I want to say this:
I'm not sure I want to ever own a non-Apple PC again.
Unless the UEFI implementation is at least passable. (Most of them are not. Apple's is outstanding.)
It's been just over a year since this fun read on the Oracle Database was posted.
I have a bit of an odd tradition wherein I sometimes read and re-read articles on bad code hoping that something sticks and hence strive to write code that is not bad, so this HN comment falls within the aegis of that "tradition." Not sure whether it has any effect though :)
The other two top comments are also somewhat fun. Perhaps there's not a lot of truth to them, or perhaps they highlight how hopeless the field of software engineering is, but I won't pass judgement on that.
On thinking in a (programming) language. This rings true often enough for me as a mostly-OOP programmer with a light functional background, for some languages put obstacles in the way of effecting your solutions in the way you want, as opposed to what the language is made for (looking at you, Java.)
Šī grāmata izskatās esam interesanta. Man allaž ir paticis dzelzceļš, un tā šķietamā neveiksme Latvijā noteikti piedāvā interesantu stāstu, ko šī grāmata arī sola.
While culling my long-overdue reading-list-stored-as-open-tabs, I found the Four Cool URLs article that I really loved.
Tangentially related: it's a shame Reddit went closed source.
Joe Armstrong, the creator of Erlang and one of, in my opinion, forefront minds of modern computing, on what should be considered the Minimum Viable Program. This is a concept I feel like is seldom considered these days.
CV Dazzle. Delightful.
GerdaOS looks really promising. I've always felt some disdain towards KaiOS for taking B2G and continuing its development and promotion as a closed-source fork with a heavily walled-off ecosystem, but GerdaOS seems to be the liberating force to help overcome the tyranny of the limits artificially imposed upon an open OS by the hand of capitalism. (Also, I love the name and the mythos behind it.)
Though apparently ADB access can be enabled within vanilla KaiOS as well, by entering
*#*#debug#*#*), via which it's also possible to gain root access or at least some privilege escalation. At least Kai didn't take everything out.
Now this site has a JSON Feed for those of you who want to subscribe, as well as permalinks to individual posts, accessible via clicking upon their timestamps.
Superliminal has finally come out after (apparently) 6 years of development. I've been following Pillow Castle ever since 2016 or so when I saw their demo of what would become this game.
The game is not particularly long—I beat it within two hours—but still packs quite a bit within that time. The pace is mainly dictated by your ability to solve puzzles, most of which aren't particularly tough once you grasp the basic concept.
A really strong suit of this game is the atmosphere. The art and visuals are amazing, the music is spot on, and the plot fits in perfectly. Most of this is achieved via setting constraints and then working within them, but nevertheless it turned out really well.
Even though most of the puzzles seemed quite easy after grasping the initial concept of forced perspective, some of them are quite obtuse (looking at you, Whitespace.) In general it's not puzzle-heavy like Portal, even though in places they share the same vibe.
Also unfortunately it doesn't seem that it has a lot of replay value, considering it's mostly aesthetic, but perhaps that's what games are moving towards these days.
I can't say this is a game for everyone, but if the mechanics intrigue you, or you want to experience the visuals first-hand, do check it out, especially while it's still on sale.
I'm particularly interested in numbers stations, and this 2006 segment on BBC R4 is fascinating to listen to. The part about the gongs is particularly fun.
I recently read Gretchen McCulloch's Because Internet and even though it wasn't anything particularly eye-opening, it was a good read and gave me a couple of things to think about with regards to how the internet has changed over the years before I came to be a user of it.
In a similar vibe, Kate Wagner's essay 404 Page Not Found ponders upon the web of the days bygone, the web that I missed and the one that seems like it would be better.
Many things ring true within 404, and the non-apparent message it contains actually aligns quite well with my own beliefs.
Here's an indirect Brexit joke:
Today is Aaron Swartz day.
I am a Postgres advocate (as opposed to MySQL/MariaDB for contemporary use), but this article about using Postgres as a job queue (with near-realtime job claiming, no less!) really highlights why I hold this philosophy. MySQL and its derivatives might work well as a raw data store if you're willing to put in the effort to guard against accidental data corruption or tweak the compatibility settings just right, but Postgres, even though sometimes a bit feature-creeped at times,1 provides for any data storage use case, and most are accounted for out of the box.
1 Indeed I don't think that pub/sub would be an integral part of an RDBMS and it's a bit inexplicable that Postgres has it, but it nonetheless can be convenient in use cases such as presented within that article.
Today is just that kind of Splatoon meme kind of day.
Andy Baio on how machine learning now enables quite good separation of vocals and music.
On the lost key of QWERTY.
Russ Cox's three-parter on Implementing Regular Expressions is worth a read if you've got a thing for deep theory and implementation details on finite-state automata.
On learning piano and instead learning about life.
Grace Hopper's segment on 60 Minutes is fascinating in multiple regards. Her seminal lecture is interesting as well, even though the remaining recordings are a bit low quality.
"Programming Languages," mostly about Zig.
Zig is yet another of the languages I'm keeping an eye out for. C is good and all, but Zig is one of the few languages that seem like the fairest compromise and which could take on being a C replacement, and this article alludes to that idea as well.
Unrelated tangent: LLVM seems to be the best thing to happen to compiled language creators since transpilation to C.
Tedium recently posted an interesting reflection upon historic digital places.
Presented without comment: Try Coding Dear Boy.
Inspect This Snake.
In a similar vein: untitledgame.xyz.
Drew DeVault has hacked together a line printer to a Linux TTY interface. The link is worth for the video alone, but the technical discussion is quite interesting as well.
Now this site implements a dark mode, if that's what your system preferences prefer and if your browser supports it.
As an occasional user of both languages, and one who likes them at that, Go is the new Ruby reflects my own opinions as well.
Related to the last post, JONESFORTH is a literate assembly implementation of Forth.
Fennel is a Lisp that compiles down to Lua with nearly zero overhead. It's pretty neat and something that I want to play around with someday.
80x25: a story about a default that many terminal users must have wondered about.
Writing a sort-of ray tracer for a class assignment. Right now it's extremely unoptimized (and also written in Java) and actually doesn't work, but it's a lot of fun trying to figure out all the maths behind it.
While checking my server logs, noticed that seemingly someone sat down on their F5 key.
My server gets scanner traffic often, but usually not with the rate of exactly 100 requests within one second, and then never again.
Saw Parasite. While I'm no expert in film, my immediate thought after leaving the theatre was that it's “bloody good.” So it's probably worth a watch.
I've made a new post on my longer-form blog. It was partially inspired by the creation of this particular system and the thoughts it put me through afterwards.
I hope it is an enjoyable read at least in the slightest.
I suppose it might be better for me to move my link sharing to a medium such as this so I can at least hopefully provide some commentary on the content, à la Plurrrr or Trivium, but somewhat more.
This platform itself has room for growth, such as implementing fancy quotes and proper archiving, neither of which is present now. But it's a start, and perhaps the start is all that's needed.
The design is basically borrowed piecemeal from Standard Definition Notes. It's a tasteful minimalism I find quite appealing.
Apparently I can't stop building places where I can potentially express myself, then keep abandoning those places because I apparently don't have anything to express.
Well never mind that, this is a new place for my, shall we say, short-form expression.