I have often argued that "being realist" is a failure in and of itself. If people said "well, there's a king and that's what it is", we'd never have got to where we are now.
Ideologies (and ideas) are, in my view, stronger than facts, which often only represent the past, while ideas shape the future.
(these days the word "fact" is a bit of a trigger, but I thought about that well before all that jazz, and the current phenomenom seemed to prove my point to many of my friends)
I think a person can be both, and indeed, must be both if they wish to change the world. I find that I have less and less patience for people with high-minded, admirable ideals, who refuse to do anything other than take the uncompromising, principled high-road. I've begun to realise these sorts of people are just self-indulgent narcissists, who fundamentally don't care about [the environment | racism | gender equality | defeating the lizard-people]. What they really care about is feeling good about themselves, having others think well of them and retaining a sense of moral superiority over others.
If one actually wants to achieve their ideals, I truly think the 'uncompromising high-road' approach is a footgun. I've seen it play out a number of times. The Australian Greens party, for example, voted down a carbon emissions trading scheme about 5 years ago because it didn't conform to their exact ideals. The result? They were eventually forced to accept a less stringent 'carbon tax', that was ultimately repealed about a year after it was enacted. And not once did I see any introspection, nor any comprehension that their 'principled stand' resulted in the worst possible environmental outcome. I can just imagine the self-congratulatory "we stuck to our principles, we can hold our heads up high" BS in their party room. Pity about the environment, but I guess that's beside the point.
I think that we're more likely to achieve the 'just' or ideal outcome when we address the 'is', not the 'ought'. We have to work with the situation that is in front of us; not the utopia in our heads. Don't get me wrong, having ideals is important: without a destination in mind you will find yourself on a road to nowhere. I consider myself an idealist. But I personally find that 'results' are much more satisfying than abstract ideals and lofty thoughts.
If you are a high-minded idealist, that's great. It's the first step towards a better world. But you should also honestly ask yourself: What is my true aim? Do I want to feel good, or do I want to do good?
Fun fact: that's the original definition of the term Realpolitik, as coined by Ludwig von Rochau, a German writer and politician in the 19th century.
He said that the great achievement of the Enlightenment had been to show that might is not necessarily right. The mistake liberals made was to assume that the law of the strong had suddenly evaporated simply because it had been shown to be unjust. Rochau wrote that "to bring down the walls of Jericho, the Realpolitiker knows the simple pickaxe is more useful than the mightiest trumpet."
I've been reading "Realpolitik: A History" and I think there are some useful lessons for today.
I think one has to be realist about their tools and idealist about their goals. And the drive is the most important factor. If they're just going through the motions without intent, without ideal, it won't lead anywhere.
The will to preserve (imo absurd[0]) or the will to change.
Of course, there isn't any one true model of thought. So I'm surely wrong.
[0]: I don't think anything can last, civil rights included, but things can come and go
Where I walk and what I do on the street is private even though it's in a public space (exceptions apply). Similarly what I do and where I go on the internet is private even though it is a public space (exceptions apply).
If someone follows me in the street for hours (days, weeks, life) and note everything that I do, I'd be right to call that a violation of my privacy ?
Disposable email addresses exists precisely because we don't plan on returning. Some websites tried to block disposable addresses already, I just went somewhere else.
No, you're right. I kept thinking of the 20th century. They couldn't aspire to the scale of say, Stalin. But the whole thing with the crosses, yeah. yeah they're pretty brutal.
I am student and I like C, I've tested Rust/Go, I like the feeling of C. Maybe that sentiment will change later, but for now, I like C. It's simple and sharp and there's lots of doc/books.
C seems relatively simple, but it's also incredibly easy to do the wrong thing usually without realising it. That's the problem. I suggest you read up about 'undefined behaviour'.
Not OP, but I actually think string manipulation in C is really elegant. Many people who complain about it have too many allocations in their code and are trying to port the allocation-heavy non-C way of thinking to C. The C way I know focuses mainly on character at a time iteration with emphasis on not copying the source string.
I'm reminded of a time a colleague needed something like string.split, and working in c++ he filled a std::vector<std::string> with the result. Using a more C way he'd really only have needed a couple of pointers on the stack.
It's a little naïve to think it works on English without the coöperation of the users. (Also, less glibly, things like emoji seem to be becoming more and more popular.)
You can, and then you get a 4-byte long character 1-byte before the end of your data, you skip over the null-terminator and into the stack, and bang.
Yes, you can avoid this if you're careful and you understand the intricacies of utf-8 (or some other multi-byte encoding), but it very quickly stops being elegant.
What do you mean by "character"? If you mean code point or "unicode scalar value", sure, but if you mean user-visible character (grapheme), it's much more complicated: even something "simple" like ö could be one or two code points.
This is not true. A zero-byte in a utf-8 string is the null-terminator and utf-8 strings can be treated exactly like C strings in terms of where the string ends.
What you do need to look out for is malformed utf-8, for example, 1 byte before the null terminator you get a lead byte saying the next character is 4-bytes long.
If you're not checking each byte for null and just skipping based on the length indicated by the lead byte then you're in for a crash.
Where utf-8 strings differ from C strings is slicing. You can't just slice the string at some random point without doing extra validation to make sure you only slice on codepoint boundaries.
> A zero-byte in a utf-8 string is the null-terminator and utf-8 strings can be treated exactly like C strings in terms of where the string ends.
No, the parent was correct: UTF-8 encodes NUL (i.e. \0) as a single zero byte (e.g. in contrast, Modified UTF-8[1] uses an overlong for NUL, so there's never any possibility of an internal zero). Of course, an application/library can choose to restrict itself to only handling UTF-8 that doesn't contain internal NULs, but the spec itself allows for zero bytes in a string.
The point is, if you handle strings the C way, you're not in conformance with UTF-8.
If someone passes you a text file that is verified to be valid UTF-8 and contains, say, access permissions, then you better not stop parsing it at the first '\0' character.
None of this is a huge problem, but it's something to be aware of. C string handling is incompatible with UTF-8.
File processing and string processing are not the same. If you have a file that has a specific data format outside of the encoding, and that format includes NUL bytes as part of the data, then obviously process the file based on that format.
That's separate from string handling.
UTF-8 was originally designed to be compatible with NUL terminated strings and keep NULs out of well formed text.
In fact it was the first point in the 'Criteria for the Transformation Format', mentioned in the initial proposal for utf8.
>File processing and string processing are not the same
The UTF-8 spec doesn't make that distinction as far as I know. There's a simple fact: A valid UTF-8 byte sequence can contain nul characters. So you can't naively use C string handling functions on it. And as someone else has correctly pointed out, the same is true for ASCII.
I'm just pointing out a potential pitfall and a source of security issues. Some might assume that after validating UTF-8 text input, you could just dump it in a C string and process it using C's string functions. But that's not the case.
Unless you have U+0000 there isn't any other sequence of code points that has an 0x00 byte in UTF-8. I don't see this as a huge problem.
If you really do need it there are some C language libraries that use "pascal-ish" structs to do strings. UNICODE_STRING in Windows comes to mind. Doing strings in C doesn't force you to use C strings, it's just the most common thing to do.
So it's somehow C's fault that Unicode uses variable-length encoding, which is automatically going to be harder to process correctly at a byte-by-byte level than a fixed-length method, and also included known-C-incompatible null bytes?
> So it's somehow C's fault that Unicode uses variable-length encoding
Parent said string handling in C was elegant. My point is that it becomes fraught with (even more) issues once you throw non-English language at it.
It is C's decision to handle strings in this way, and the decision of many C programmers to treat all strings as if they are just iterable character pointers.
I am the parent you are talking about. I've made this argument many times with people: Unicode is crazy complicated in any programming language. People think that widening the char width will help - well you seem to be somebody who knows Unicode so you probably know the horrors of surrogates, combining characters vs. pre-composed diacritics, zero-width joiners, Han unification, variation selectors, BiDi... This is in no way just a C thing to deal with all that nonsense. I've not seen any language or library that I'd say does it "well" and saves individual programmers from considering the above. They all punt the issue to the programmer.
I've heard (mostly here) that Swift does something different and treats glyphs as the basic unit. I haven't had a chance to look at precisely what that does. Given all the issues I've seen elsewhere I'm skeptical that someone, anyone can pull that off correctly.
UTF-8 at least has one elegance (there's that word again) in the design in that you can do some "dumb" ASCII things and if your code does not know what to do with fancy unicode, you can check the high bit of any given octet and "safely" skip over it and any adjacent nonascii sequence if you don't know what it means. This may or may not be applicable to a task at hand.
> This is in no way just a C thing to deal with all that nonsense. I've not seen any language or library that I'd say does it "well" and saves individual programmers from considering the above.
This is true, however even something as simple as storing the (byte) length as part of the string reduces the complexity and the likelihood for bugs.
Other languages also prevent accidental buffer overruns so while they still need to deal with all the same Unicode problems you mentioned, the program likely won't crash if the programmer gets things wrong. The same is not necessarily true of C.
FWIW in Rust you also tend to avoid allocations, since all string manipulation is done via slices -- safe (ptr, len) pairs. It's pretty neat.
IIRC C++ is getting slices too, so it might be able to get better APIs around string manip. But I've seen decent string manip code that avoided allocations.
> Using a more C way he'd really only have needed a couple of pointers on the stack.
This is pretty much how it's done in Rust too via slices. For example, the standard way to split a string is to create an iterator and it won't do any allocations.
USA "proles" fell for populism and elected the worst neocapitalist team possible, against their own interests, that's what we're talking about when we talk about "populism".
By and large people (demographically) who voted for the democrats won't be much affected by the GOP gov, but the people who voted for the GOP will be badly affected.
If a mod comes here, I vote for closing this post, I feel it is very very prone to political flame wars.
I agree this post is prone to a flame war, but it's also a really important conversation for people to have. Many people don't understand why the election went the way that it did. How can we discuss this important topic correctly?
Ben studebaker called the rise of Trump in his article which had a really broad overview of what neoliberalism is, and he basically postulated that it's on the way out and we can EITHER have Nationalism (Trump) or Egalitarianism (Bernie Sanders)... sadly for America, he was ABSOLUTELY right, but nationalism won out... But that might not hold true, as we can easily flip flop back and forth till one side shows true progress at fixing the shit wrong with America.
That was written last February back when people actually thought it insane that Hillary Clinton could lose to Donald Trump -- doesn't sound so crazy now though.
How about your stop shitting on immigrants and blaming them for everything?
It only fosters irrational hate and causes unnecessary violence.
It's not like those immigrants are occupying good paying low skill jobs that could otherwise be done by Americans. They do fruit picking in California for below minimum wage.
Immigration is used as a scapegoat.
Look at Germany. They have the same policies. They have immigration. They have open borders and they have free trade policies and they fully embrace globalism.
Yet Germany retained its high paying relatively low skill jobs and the US didn't. The reason is simply that the various CEOs in the respective countries decided on different business strategies. In the US it seems they decided to go with low cost manufacturing in China/Mexico.
Immigration increases the supply of low-skilled labour, thus lowering wages. And since a good deal of the US economy is based on exporting, the increase in the demand for labour due to the presence of immigrants is smaller (i.e., they don't have to be in the US to buy iPhones and Snickers bars).
Finally, people are naturally tribalistic - you can blame evolution for that one. Until we fix that, immigration will increase ethnic tensions, which serve as a distraction for corporations to use while they rob you.
It does seem a little bit irrational to state that immigration is being used by corps to distract us, while ignoring the positive aspects of it.
Also, saying that people are naturally tribalistic, because of evolution, fails to take into account that we're not slaves to our impulses, and that evolution blatantly favours cooperation over competition.
Tribalism is as much about cooperation as about competition - help the virtuous Us to drive out the villainous Them.
It makes it no less easy to abuse however, e.g. "Look at those no-good black welfare queens with their 12 kids paid for by good honest white people! Cut social spending!"
Some credit should be given to the war cry of the current (still pretty much current) regime : let's help the favored classes (I would say the weak, but lots of weak classes find themselves excluded) and everything will get better for everyone !
And then, for about 16 years, since the crisis of 2000 ... it didn't get better for everyone. Real income has been dropping since the 1980s, but it was almost steady until 1999. And then healthcare, fuel/energy and education really exploded. Of course this is the result of the crisis in 2008, which was of course not caused in 2008, but before then.
Obama got elected on the same platform as Trump, really. He was going to change things. Hope and change. The famous blue and red posters, his own characteristic style, all very memorable and well executed. An abundance of hope, but I must say the change was found somewhat lacking. Despite a nobel peace prize, Guantanamo was not closed, and there was a massive 2008 crisis, rather than a recovery (yes Obama promised an economic recovery from the situation BEFORE the 2008 crisis, remember ? The Bush tax cuts were the big bogeyman at the time).
Then the experience of the crisis came. Even if you weren't one of the people who kept the debt but lost their home, very few people did well during the crisis. Then there was the initial pullback, but aside from the 1% with lots of stocks nobody was really made whole.
Then the FED "fixed" this. They came up with what's commonly known as the "PCE deflator" because of oil. You see, because of the huge fuel/energy price rise people were using much less energy, and as a result it shouldn't be counted in inflation (or else inflation would have been close to 10%). Likewise, people use less housing, same reasoning.
That's great, but ... people still had less fuel/energy as a result, the banks just refused to count that as inflation. There's a famous Y Combinator article titled "There's a remarkable correlation between the quality of life and energy use". Likewise people have enjoyed less housing, all of which is not counted ...
Despite this massive adjustment to favor economic indicators under Obama, his policies have not improved the situation of the average American. All together I would say that, on a large average, and without counting inflation, Americans have gotten back about half of what they lost in the 2008 crisis. Counting CPI inflation sadly I'd say it's more like 20%.
And now they elect the other party.
The response "They must be evil racists !" (because let's be honest, "tribalism" is no more than a euphemism) seems like it might be missing the point a bit, aside from being entirely unhelpful.
In Europe the situation is very different. We simply have political parties that are job plans for their administrators. Doing what the rich want means they also get to divide up jobs on corporate boards and that makes all of them ... also parties for the rich.
It's, in my view, more akin to trying to ban mathematics in a world in which mathematics exist. Tools and weapons don't exist indenpently from us, mathematics do.
Ideologies (and ideas) are, in my view, stronger than facts, which often only represent the past, while ideas shape the future.
(these days the word "fact" is a bit of a trigger, but I thought about that well before all that jazz, and the current phenomenom seemed to prove my point to many of my friends)