tslug
Joined 12 years ago
Joined 12 years ago
In a gig last year, I needed to improve the build turnaround times on a Jenkins system. After learning everything I could about Jenkins, I realized the correct answer was to delete it and rewrite my own version that ran on the local system, which was way, way faster and much easier to debug and maintain.
Not having to commit/upload your code to a build server and then wait to get an executable/package back is an enormous time-saver just in that overhead alone, but even the build itself was faster, even though it was written entirely in bashscript.
Go figure.
I concur with others. Elbereth was useless w/o a wand of fire in 3.6.0. Taught me to learn new survival habits, like staying much closer to my pet and making sure I can always go from burdened to unburdened by dropping only a sack.
Ascending is mostly luck and discipline, and the discipline comes from practice and focus. I find playing nethack calming, and it's a good way to measure how well I'm able to stay in the moment. If I die stupid, it's usually because I'm not all there.
If I'm doing something new, and I am uncertain about what my odds are, I'll read the source code.
I've only modified the source in 3.6.0 to create a general random number generator using a more robust (and more consistent) algorithm than is likely used in most libc variants. My interest there was mainly in perfect cross-platform state reproducability given the same key sequence.
I usually tear off the sheets before I'm done, so that if I go multiple rounds, my TP is prepped. Usually, that means I tear off 3-4 strips of 2 squares each if it's thick paper, or strips of 3 squares if thin. After going gluten-free, I rarely end up using all the strips, and I'd say about a third the time, I'm done after using my first two squares of it, so the rest is wasted.
For cooking, I understand olive oil is unhealthy (I think you create carcinogens as a side-effect), as are many other oils, but that coconut oil doesn't do this because of its different melting temperature.
We're also unable to create emergent materials right now, because we don't right now (and may never) have the horsepower to do molecular-level simulation to find out how light interacts with the surface. For similar reasons, breaking something open like an egg, a log, or slicing open flesh is never going to yield truly emergent results. To some degree, they'll always have to be artistically approximated on a case-by-case basis. Those approximations may have increasingly sophisticated interactions as time goes on, but I am reasonably confident they'll never truly simulate things at the molecular level.
As a result, I did as much as I could using only bash internals, and very rarely did I use pipes, because they always fork()'d a bash subshell in addition to whatever the process was.
In about 7k lines of bash script written to completely automate the iterative development of two games with a shared game engine featuring dockerized server containers, I was able to avoid using sed in almost all of it. When I did use it (pretty sure only two places), it was basically for mass substitution of variables inside of text files, and the multi-line syntax worked very nicely for this, as I could form the sed line with a loop over all the variables I wanted to replace.
It turns out for most bash scripts, you can do the most common sed substitutions using bash's rich variable substitution expressions. For instance, you see in a lot of bash scripts calling commands like "dirname" and "basename" to get the directory and filename of paths. There's a much faster way to do this in bash:
path=/tmp/my/path/to/stuff.txt
dir="${path%/*}"
file="${path##*/}"
other="${path/stuff/other}"
That dir line means "delete the shortest string that matches /* from the end of the string". That file line means "delete the longest string matching */ from the start of the string." That other line means "replace the word stuff with the word other in this string".The key to the exploit is at the heart of the core gameplay mechanic, which is that every transaction in capitalism is a codec that decimates the complex history and state of the values and liabilities of a good or service down to a single number- the price.
So hiding the abuses of others is one of the many exploits you can hide in the compression artifacts of this global codec. The key workarounds for the exploits in scalar money commerce come in the form of laws, regulations, and investigative journalism. These are all extremely high-latency, low-reliability workarounds.
Scalar money commerce was invented as a low-tech, distributed hack to solve the complex barter chain problem. It worked, but it always had issues, and it didn't scale well.
We need to evolve beyond this primitive system of commerce that decimates everything to a single number at each transaction to one that journals state with long vectors of information tracking millions of dimensions of value and liability, and that uses more sophisticated game design and graph algorithms to solve complex barter chain problems.
Whether young or old, I think it's important that the person start by asking themselves what they would like a computer to do for them. From there, you can start to bite off small pieces of the challenge, slowly making progress towards something they actually care about.
One of my main go-to databases has become nutritiondata.com, which gives overviews of the nutrition information in pretty impressive detail on just about any dish or ingredient you can imagine.
Wait, what kind of flu was this, Ebola Zaire? Since when does influenza destroy organs?
Taking the flu seriously is definitely advisable, but something sounds amiss here.