AboutEverything electronic enthusiast, professional web developer
Skillsphp, python, js, java
Joined devRant on 1/2/2019
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple APILearn More
So in Seahorse (the Gnome secret manager) deleting the OpenSSH key doesn't just remove an identity from agent, it actually deletes the keyfile.
I should've treated that scary confirmation message more seriously.
Also, my obsessive full disk backups every Monday are totally worth the time.2
I was setting up a CI build machine. Builds were supposed to be ran in disposable containers, but I needed a way to trigger a task on the host from inside the container. I didn't want to give containers shell access to host - kinda misses the point.
Solution: a server running on the host and listening for predefined commands on a named pipe. The pipe was bound into containers which would simply echo commands into it. Very simple and effective.
The hacky part? The server was an 8-line bash script.1
I've finally read "Reflections on trusting trust". I'd probably do it earlier if I knew it's this short. It's also terrifying. 10/10.
devRant, you've missed the opportunity to swap desk ducks for little humans. Still awesome idea though.6
Oh hey, I missed my devRant cake day. And I don't know when it actually was because it displays as 1/2/2019, so it could be January 2nd or February 1st. Can we have a proper date format?6
The built-in array is also an hashmap. Actually, it's always a hashmap, but you can append to it without specifying indexes and PHP will use consecutive integers. Its performance characteristics? Who knows. Oh, and only strings, ints and null are valid keys.
What's the iteration order for arrays if you use them as hashmaps (string keys)? Well, they have their internal order. So it's actually an ordered hashmap that's being called an array. And you can produce an array which has only integer keys starting with 0, but with non-sequential internal (iteration) order.
This array weirdness has some non-trivial implications. `json_encode` (serializes argument to JSON) assumes an array corresponds to a JSON array if its keys are consecutive integers in increasing order starting with 0, otherwise the array becomes a JSON object. `array_filter` (filters arrays/hashmaps using callback predicate) preserves keys, so it will punch holes in the int key sequence if non-last items are removed, thus turning arrays into hashmaps and changing your JSON structure if you forget to discard keys before serialization.
You may wonder how JSON deserialization works, then? There's a special class for deserialized JSON objects, `stdClass`. It's basically a hashmap too, but it's an object, not an array, and all functions that would normally accept arrays won't work with it. So basically its only use is JSON (de)serialization. You can even cast arrays to objects, producing `stdClass`.
Bonus PHP trivia:
Many functions return nonsensical values. `preg_match`, the regex matching function, returns 1 for success, 0 for no matches and false for malformed regular expression. PHP supports exceptions, so it could just throw one on errors. It would even make more sense to return true, false and null for these three cases. But no, 1, 0 and false. And actual matches are returned by output arg.
`array_walk_recursive`, a function supposed to recursively apply callback to each element of an array. That's what docs say. It actually applies it to leafs only. It will also silently accept object instead of array and "walk" it, but without recursing into deeper objects.
Runtime type enforcing is supported for function arguments and returned values. You can use scalar types, classes, array, null and a few special keywords. There's also a `mixed` keyword, which is used in docs and means "anything". It's syntactically valid, the parser will accept it, but it matches no values in runtime. Calling such function will always cause a runtime error.
Strings can be indexed with negative integers. Arrays can't.
ReflectionClass::newInstanceWithoutConstructor: "Creates a new class instance without invoking the constructor". This one needs no commentary.
`array_map` is pretty self-explanatory if you call it with a callback and an array. Or if you provide more arrays of equal length via varargs, callback will be called with more arguments, one from each array. Makes sense so far. Now, you can also call `array_map` with null instead of callback. In that case it treats provided arrays as rows of a matrix and returns that matrix, transposed.5
"Java uninstalling itself Windows 7"
The garbage collector is working! :D3
Q: I'm using make as a simple task runner. `make build` instead of a longer build command etc. It sucks that I can't simply pass some params like `make build dev`, instead I have to pass them as variables: `make build tag=dev`.
Can you recommend a standard, cross-platform (Linux, OS X) tool for this?9
Test studying tool. Load your questions and answers in a human-readable format. Take a test. Get summary of results. My pet project at the university, 98% of code is mine. http://gronostajo.github.io/drill2/3
Wasted 8 hours today trying to convince Windows to boot.
Yesterday I deleted two unused partitions. Today no OS booted up. Guess what, diskpart (think parted for Windows) reindexes GPT partitions on any modification. So when I deleted partition #1, my EFI System Partition, previously #2, became #1. But UEFI was still trying to boot from partition #2.
Linux booted after recreating UEFI boot entry. 1 minute job, no tools required. Windows, though... Bootrec /rebuildbcd failed, bcdedit failed, recreating ESP from scratch failed spectacularly. Finally I made a clean install just to get proper ESP and restored OS from backup.
Dammit, Windows. Why do you have to make things that hard.4