> I see this on almost a weekly basis. It is really disheartening and almost infuriating.
I think it's part of the broader anti-intellectualism movement. For whatever reason, people who strive to exceed in life offend those who don't. As if we are passing judgment on them. But they're only reaching that conclusion through their own self-reflection: I certainly don't think of myself as better than others; I am in fact quite envious of them. Being able to believe in a deity would mean freeing myself over the fear of death. Being able to tolerate crowds, sports and pop-culture would mean I'd have a network of local friends to hang out and have fun with.
My dedication has extreme sacrifices: I work 40-50 hours a week, only to get home and spend another 6-8 hours a day working on my pet projects. The intense frustration it causes is hardly made up for by the moments of joy when I accomplish a difficult task. I'd love to go and grab a beer and talk "approaches and tradeoffs to supporting polymorphism in shared pointers" with a group of friends. But to find anyone who understands any of that requires such vast distance that we can only communicate online. Hell, my interests are becoming so niche that it's becoming difficult for me to maintain a network of people to converse with even online. I've been struggling to write software to create a list of deltas between two binary files (think Xdelta or bsdiff) in less than O(n^2) time for years now, and can find no one who shares an interest to discuss that with.
I may be an intellectual, but if I had my way, I'd much rather be a creative artist. I wish that I could play an instrument, compose a song, write a story, draw artwork, cook great food, learn a foreign language, and so on. All I can do is string together raw, digital logic. And then bash at it until it does mostly what I want. Nothing I ever write ever feels complete, nor completable. There's always something to refactor, bugs to be fixed, features to be added, mutually exclusive tradeoffs to be made. I look at all of my past work and instead of being proud of it, go, "wow, I was really quite awful back then.", knowing I'll feel the same a few years from now even.
But it's what I'm good at; it's what I relate to. So it is what it is. I'm not going to lie and pretend I'm just your average guy (tall poppy syndrome), but I'm also not so vain as to think raw critical thinking is the only important metric of worth in this world, nor even a particularly key metric.
Happiness is much more important: which is why disparaging others seems so anathema to me.
> It also seems like it might be a relatively new phenomenon?
It probably has analogies to the past; but the computing movement really is a very recent development. In my childhood, it was very rare for a middle-income family to have a single computer. Nowadays, they are almost ubiquitous.
> Maybe in the future the masses will be more accepting of different approaches to social interaction (or lack thereof) and living life in general.
I think so, yet I'm not sure if it'll all be for the better. All I see at restaurants anymore is people looking at their smart phones, to see what was posted on their Facebook wall. It's almost disturbing anymore when someone you don't know and haven't engaged speaks to you in public, eg at a line in a store.
I also see the internet as enabling new cliques of people over broader distances. Take for instance, fetish communities such as furries. I had certainly never heard of anything like this pre-internet. Although this can be great for personal acceptance, it can also lead to more stratification, and thus isolation, of groups.
For instance, the culture of Hacker News is pretty much the polar opposite of 4chan. And that just leads to the kind of derision we were abhorring above.
But maybe it's not all bad. Obviously people were just as unique and individual before, they just kept it all bottled up inside. The internet is letting people come out more and be themselves. Unfortunately, a lot of those people, deep down, are secretly raging assholes.
> I've been struggling to write software to create a list of deltas between two binary files (think Xdelta or bsdiff) in less than O(n^2) time for years now, and can find no one who shares an interest to discuss that with.
Have you come up with a solution (I'm interested to know how, if you succeeded)?
> I wish that I could play an instrument, [...]
Why don't you take lessons in your favourite instrument, then? I see no shame in being short of money, but getting money is a different problem to solve than finding a good teacher.
> learn a foreign language, and so on.
Take a look at duolingo.com. Probably you'll like it.
> Have you come up with a solution (I'm interested to know how, if you succeeded)?
Nope. Naive approach is: for every byte of the modified file, compare against every position in the source file and find the longest match. If less than the cost of encoding the pointer+length pair, then add it to a queue of raw bytes to write. Flush the queue whenever you find a long enough match. That is of course O(n×m), which is easier to just say O(n^2).
Tried exploring string-search algorithms like Knuth-Morris-Pratt and Boyer-Moore; tried keeping a tree list of 16-bit matches (which in fully randomized data reduces search overhead to O(n×m/{between log2(65536) and 65536}) ... but in a file of nothing but null bytes slightly hurts performance), tried skipping by S bytes per compare and then backtracking when long enough matches are found (hurts patch size efficiency as N goes up, but reduces overhead by O(n×m/S), and so on.
I can get up to around a 64MB diff, before memory constraints and the inevitability of quadratic growth start to ruin me. Have tried to analyze what Xdelta/VCDIFF were doing, but the code is just too difficult to follow at my skill level.
> Why don't you take lessons in your favourite instrument, then?
I've tried, I just don't have the raw talent for it. Have no rhythm, have very poor note deduction ability, my mind trips all over itself when trying to use each hand to play a different part of a piano song, etc.
Not a huge deal, just something I'd like to do. But even if I could do all these things; a jack of all trades is a master of none.
> Nope. Naive approach is: for every byte of the modified file, compare against every position in the source file and find the longest match. If less than the cost of encoding the pointer+length pair, then add it to a queue of raw bytes to write. Flush the queue whenever you find a long enough match. That is of course O(n×m), which is easier to just say O(n^2).
>
> Tried exploring string-search algorithms like Knuth-Morris-Pratt and Boyer-Moore; tried keeping a tree list of 16-bit matches (which in fully randomized data reduces search overhead to O(n×m/{between log2(65536) and 65536}) ... but in a file of nothing but null bytes slightly hurts performance), tried skipping by S bytes per compare and then backtracking when long enough matches are found (hurts patch size efficiency as N goes up, but reduces overhead by O(n×m/S), and so on.
A helpful idea is first to consider what you consider as the "correct" alignment. Often the Levenshtein distance (https://en.wikipedia.org/wiki/Levenshtein_distance) is used and an alignment is considered as proper if the number of necessary steps (insertion/deletion/replacement of 1 character) equals to the Levenshtein distance. Obviously this does not necessary define a unique alignment (consider "a" - "aa" or "ab" - "ba").
An idea that I find interesting to consider is whether you could construct a o(m * n) (i. e. asymptotically faster than O(m * n)) algorithm that computes k elementary operations (insertion/deletion/replacement of 1 character) that convert the first string s into the second string s' such that there exists a fixed constant 1 < C with
k <= C * d(s, s'),
where d(s, s') is the Levenshtein distance between s and s'. How small can you get C? I really don't know the answer (I haven't even thought much about it), but perhaps this idea is helpful to you?
I think it's part of the broader anti-intellectualism movement. For whatever reason, people who strive to exceed in life offend those who don't. As if we are passing judgment on them. But they're only reaching that conclusion through their own self-reflection: I certainly don't think of myself as better than others; I am in fact quite envious of them. Being able to believe in a deity would mean freeing myself over the fear of death. Being able to tolerate crowds, sports and pop-culture would mean I'd have a network of local friends to hang out and have fun with.
My dedication has extreme sacrifices: I work 40-50 hours a week, only to get home and spend another 6-8 hours a day working on my pet projects. The intense frustration it causes is hardly made up for by the moments of joy when I accomplish a difficult task. I'd love to go and grab a beer and talk "approaches and tradeoffs to supporting polymorphism in shared pointers" with a group of friends. But to find anyone who understands any of that requires such vast distance that we can only communicate online. Hell, my interests are becoming so niche that it's becoming difficult for me to maintain a network of people to converse with even online. I've been struggling to write software to create a list of deltas between two binary files (think Xdelta or bsdiff) in less than O(n^2) time for years now, and can find no one who shares an interest to discuss that with.
I may be an intellectual, but if I had my way, I'd much rather be a creative artist. I wish that I could play an instrument, compose a song, write a story, draw artwork, cook great food, learn a foreign language, and so on. All I can do is string together raw, digital logic. And then bash at it until it does mostly what I want. Nothing I ever write ever feels complete, nor completable. There's always something to refactor, bugs to be fixed, features to be added, mutually exclusive tradeoffs to be made. I look at all of my past work and instead of being proud of it, go, "wow, I was really quite awful back then.", knowing I'll feel the same a few years from now even.
But it's what I'm good at; it's what I relate to. So it is what it is. I'm not going to lie and pretend I'm just your average guy (tall poppy syndrome), but I'm also not so vain as to think raw critical thinking is the only important metric of worth in this world, nor even a particularly key metric.
Happiness is much more important: which is why disparaging others seems so anathema to me.
> It also seems like it might be a relatively new phenomenon?
It probably has analogies to the past; but the computing movement really is a very recent development. In my childhood, it was very rare for a middle-income family to have a single computer. Nowadays, they are almost ubiquitous.
> Maybe in the future the masses will be more accepting of different approaches to social interaction (or lack thereof) and living life in general.
I think so, yet I'm not sure if it'll all be for the better. All I see at restaurants anymore is people looking at their smart phones, to see what was posted on their Facebook wall. It's almost disturbing anymore when someone you don't know and haven't engaged speaks to you in public, eg at a line in a store.
I also see the internet as enabling new cliques of people over broader distances. Take for instance, fetish communities such as furries. I had certainly never heard of anything like this pre-internet. Although this can be great for personal acceptance, it can also lead to more stratification, and thus isolation, of groups.
For instance, the culture of Hacker News is pretty much the polar opposite of 4chan. And that just leads to the kind of derision we were abhorring above.
But maybe it's not all bad. Obviously people were just as unique and individual before, they just kept it all bottled up inside. The internet is letting people come out more and be themselves. Unfortunately, a lot of those people, deep down, are secretly raging assholes.