somat
And yes I know it's not really a linux specific thing, but that gets the point across. It is very common on linux. I could twirl my os/desktop hipster mustache and say "my obsd/spectrwm desktop handles no window chrome really well" but then I feel really pretentious instead of only slightly.
They are so close that people can and often do build rand() as "internal state s = hash(s) return s" (or similar). then other people, wanting that deterministic hash() behavior thus accidentally exposed, build entire worlds(literally) out of rand().
Another problem with this is that the rand() internals are opaque and unknown and can change without violating the spec. hash(), because it is supposed to be deterministic, usually has an exposed stable algorithm.
A specific example. At one job I found they were storing long term customer order archives encrypted where the key was a hash of the date, this in itself is a little suspicious but the archives were offline and physically locked up on site, so not too bad. The real wtf was that the encryption was done on a win98 machine with a perl script that was basically "seed(date); key = rand(); encrypt(data, key)". expecting to regenerate the key if they ever wanted to look at the data. When I saw that I went "I don't know much about perl, but that does not feel stable" and did a few checks. Sure enough the behavior of rand() could change depending on the operating system or even version. making the keys highly dependent on that exact win98 machine with that exact version of perl, I think they ended up using that machine to generate and store all used keys in a database so other machines could decrypt the archives.
Another pet peeve is when people use the rand() when they want hash() but I will leave that rant for another day.
And on the subject of the useless use of cat, I like the form because it makes input a normal command(replaceable by any other command), rather than a shell special form. I sort of wish that "tee" would not default to emitting on stdout to better act as cat's compliment.
"As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs."
Maurice Wilkes 1949
Note, that I never mapped much, but my standard approach was generally to cut a few large rooms out in the general shape of the map(because despite the clever opening if you got too ambitious too quick unreal absolutely would leak like a sieve) then use a mix of add and subtract brushes to make the fine geometry, which was exactly the same as quake maps, large simple rooms to avoid leaks(this time needing to be assembled) filled with fine geometry via adds/subtracts.
This is sort of the early id, Epic engines in a nutshell, id better technically, Epic better tooling and ergonomics.
And a footnote on brushes, because I did not understand this until long after I stopped mapping, A "brush" is a 3d primitive unique from the point,face one commonly used in 3d modeling software. A brush is defined as the convex shape made from intersecting planes. So where for a point,face model you define where the points are and which points form a face, for a brush you define where the face is(point, normal) and what faces are in the brush, the shape comes out of how they intersect. I assume this was because for large simple geometry that you are going to be doing csg operations on the plane model is more attractive than the point model.
If I remember correctly, it had better csg and a neat method to link planes so they would texture as one surface.
"There are the live video compositors everyone complains about and there are the ones nobody uses."
But really, it is great to see a piece of open source software as the default choice in a field where they tend to suffer, desktop applications.
I mean, that is why they exist, to replace names, or perhaps more accurately act as a surrogate key for names. The government specifically said don't use the SSN as a secret, and businesses did so anyway.
First thing I found out was the GDP pocket has no bios clear function(header or equivalent). I found one comment in a forum where somebody also had hard bios problems and was able to reflash it with an external programmer. Worth a try, So I bought a cheap programmer, level shifter, soic clip kit off amazon. and.... nothing was working, at this point not knowing if I was doing it wrong or if the process was even possible I sort of abandoned it. And the carcass sat on the healing bench for a year.
Prompted by the bag of parts on the bench and stumbling on another comment on how miserable shitty cheap soic clips are, I bought a good clip, carefully wired it up, and it flashed first try. plugged the battery back in and the infernal thing booted right up, it still had a charge.
So it is possible to reflash a pc firmware(bios) with an external programmer, probably best to remove the chip, but that is not always necessary. and if it is a soic package, get a good clip, I am happy to name drop Pomona electronics for making a quality product that actually worked and saved my little laptop. https://www.pomonaelectronics.com/products/test-clips/ic-tes...
"good opsec will save you from bad crypto. but the converse is not true, good crypto will not save you from bad opsec"
Are the two elevators a code requirement as well?
See also: The Newby–McMahon Building https://en.wikipedia.org/wiki/World's_littlest_skyscraper Where they sort of want to use the upper floors. but it can barely fit one staircase, two would take up the entire floor, a building code quandary.
You trust the magic black box far more than I do.
My big fear about HSM is that they are inscrutable by design. There is no way to verify they are working as advertised. Plus side, all sorts of fancy hardware to protect your keys. Down side, all sorts of fancy hardware that obscures flaws in the implementation.
I don't know how many users of luna88k there are, I don't frequent anywhere near the same ecosystem they would, but have never seen one, So from my point of view it is one person making releases for himself and I love that dedication. I don't have, nor do I want a luna88k, but it great that it exists.
So as far as I can tell that is all it takes to have a published obsd port, one person willing to put the work in.
I did just re do the heatsink compound, so hopefully it has many years left, but I worry about the fan.
I have not really formalized my thoughts on the matter, but it boils down to. It feels great to get the machine to generate a thing for you but it feels terrible to receive a thing from somebody that is machine generated.
The worse part is the paranoia, Now I am seeing "tells" of machine generated content, and it may or may not be. But I have already lost interest.
The real irony would be that it is a hand drawn image carefully animated to feel machine generated.
It is why I consider excessive use of cutscenes a tell of poor game design, They stop the machine and pull the player out of the environment. They have their place, but generally should be avoided.
book: tell a story
movie: show, don't tell (big sin opening lore dump)
game: do, don't show (big sin cutscene)
I consider as a sort of modern equivalent to the coyote stories. or Paul Bunyan, Finn McCool, Gilgamesh, Or really, any legendary heroic epic passed along by oral storytelling.
So it is fun to try to fit it into some sort of unified timeline. But I don't think it is, that is not how they were actually written and we would loose most of the interesting storytelling flexibility if that is how they write them in the future.
def example_sum():
def sum_empty():
return 0
def sum_unit(value):
return value
def sum_combine(agg_a, agg_b):
return agg_a + agg_b
def sum_finalize(agg):
return agg
sum_agg = two_stack_agg(sum_empty, sum_unit, sum_combine, sum_finalize)
w_size = 4
entry_values = list(range(1, 11) )
trim_flag = False
i = 0
print(agg_sum.eval(), agg_sum.cum_aggs, agg_sum.values)
agg_sum.push(entry_values[i])
i += 1
while agg_sum.len() > 0:
if i < len(entry_values):
agg_sum.push(entry_values[i])
i += 1
if trim_flag:
agg_sum.pop()
elif agg_sum.len() >= w_size:
trim_flag = True
print(agg_sum.eval(), agg_sum.cum_aggs, agg_sum.values)
result: 0 [] []
3 [] [1, 2]
6 [] [1, 2, 3]
10 [] [1, 2, 3, 4]
14 [5, 9, 12, 14] []
18 [5, 9, 12] [6]
22 [5, 9] [6, 7]
26 [5] [6, 7, 8]
30 [] [6, 7, 8, 9]
34 [10, 19, 27, 34] []
27 [10, 19, 27] []
19 [10, 19] []
10 [10] []
0 [] []
So a four window aggregate you push values and pop it when greater than the window size. I used the length(being the len of values + len cum_agg ) to measure the window size, but you could just count.Most of the clunk was to get the same full fill/drain behavior as the example, probably unneeded on real data. The rest of the clunk is because I tend to write simple clunky python. and I stored the provided agg functions in the agg class.
Surprisingly enough, despite nobody using it like this, it works well, except for cars, where the singular form would be frame(car case just does not work), which does not share the same root and as such is a bit disappointing.
And what is also disapointing, despite the word already being plural(a french spelling of latin pluralization rules for case, use the latin soft c for case and add an i to pluralize, under french rules "is", the s is silent), When there are several chassis, we use the english pluralization rules and add an s. And because there is already an s we just add an s sound.