Why boredom is anything but boring - <AUTHOR> http://www.nature.com/news/why-boredom-is-anything-but-boring-1.19140 <comment><USER2> I haven't had a work task at my job for 6 months, sans a week of QA testing, and a few days in SQL. I come to work, and have to be left to my own devices, and I never connected my personal laptop to the internet there. I tried to study text books and work on projects, and that worked most of the time, but not all the time. Its absolutely exhausting finding something to do that looks like work, for at least 4 hours every day, for 6 months, with very limited options.

That tendency for boredom has leaked into other parts of my life and I am actively trying to fight it, and that is difficult. I hope this research continues and turns up decent conclusions.

For the record, I gave my two-weeks this past week. 6 months is long enough.

<comment><USER3> My last job was a little similar, and only towards the end did I realize how other people dealt with this. Here is what they did (I never did it):

Get to work kind of early, put your stuff on your desk, fill coffee mug, etc. Make it look like you're there. Re direct your office phone to your cell.

Take your laptop or books you want to study to the nearby coffee shop, and do whatever you want there - side projects, learning, teaching yourself programming languages, etc. etc. Be sure to answer your cell and respond to work emails.

Come back into the office around lunch time and sit in the lunch room to eat, then head out again for the afternoon. It's easy to cover your tracks by saying you were in a meeting, or working with so-and-so, or whatever.

It took me a long time to understand it was better to do the above, than it was to sit at your desk and be seen to not be working hard (i.e. reading a programming book, or reading HN)

<comment><USER4> That's a pretty sloppily run place if nobody notices structural behavior like that. And even if nobody notices, that's pretty bad behavior. I've worked in a place once long ago where people did everything they could to avoid actually working and I left simply because of that. Being told to 'slow down because you're making us look bad' is extremely de-motivating.

<comment><USER5> I've been told that at just about every job I've been at in the past, and you're right.. It's incredibly de-motivating.

Most recently, I quit my job after 4 months because I tried to make too many improvements. Every time the topic of an improvement came up, I was told "You're the new guy. You can't expect to know the nuance of our infrastructure/application/code." It's the biggest cop-out, especially considering it began with, "You're the new guy with a fresh pair of eyes and great experience. If you see any problems, let us know!". It's a silly state of affairs when folk think of good intentions entirely in the lens of a threat model.

In fairness, I suppose I was a bit too critical. Maybe it comes from reading too much HN. :)

<comment><USER4> Hang in there, not all employers are equal in this respect. Try to find a company with a high hiring bar, that will improve your chances of finding a team without that mentality.

<comment><USER5> You'd be surprised. Most places I've been to initially say that they aren't, but as soon as anything goes mildly south, that mentality changes in a heartbeat. I'm generally "the young rockstar", so a lot of it is an aspect of a lack of trust, I think.

I stopped hanging in there, rented out an office and started working on my own thing. ;)

<comment><USER4> Hehe, even better.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Boredom is extremely important to me, although potentially there is something else at play.

Some of the biggest life decisions I make come at the end of a spell of boredom. Either as a result of too long doing monotonous work, or purposely self-induced, perhaps in order to let my subconscious do all the work and let a solution float to the surface.

</comment><comment><USER7> I think any treatment of boredom, scientific or not, is woefully incomplete without reference to the man who understood it better than anyone, Soren Kierkegaard. He uses it as a vehicle for discussion and engages in it at a level I haven't seen since. This particularly funny and biting essay should be required reading for anyone interested in understanding it from a philosophical or psychological context:

[http://www.sorenkierkegaard.nl/artikelen/Engels/145.%20THE%2...](http://www.sorenkierkegaard.nl/artikelen/Engels/145.%20THE%20ROTATION%20OF%20CROPS.pdf)

</comment><comment><USER8> I can't stand those kinds of questionnaires where you have to choose between two extreme answers to an ill-posed question. ( _The thought of watching someone else 's vacation pictures bores you_\-- agree/disagree: It depends on the person! duh!)

For what it's worth, I got a 4/28.

<comment><USER9> Forced-choice is deliberate because it maximizes the information of the question. If you put in intermediate options, that can mask real differences by letting peoples' differing preferences for certainty influence whether their responses are informative or not. (People have information or preferences they don't even realize they have, like in some perceptual tasks, and you can't detect this without something like a forced-choice because if you give subjects any other options, they'll just say they don't know.)

<comment><USER8> Interesting. Forced-choice is ok if the question is completely clear. In many cases you have to assume information that makes the difference in which choice you pick, I find. Unless that in itself is what is being tested (do you implicitly supply optimistic or pessimistic information? for example). The problem with these questionnaires is that they get a lot of information from people who don't take it seriously so they don't learn anything either. In other words, it's my preference for _clarity_ that is making my responses uninformative for the survey-giver.

</comment></comment></comment><comment><USER10> Because that feeling of boredom has been evolved to avoid getting stuck into reatricted, repetitive behavior patterns - behavioral infinite loops (increased feeling of boredom should act as a breaking threshold).

Mield forms of autism, by the way, is when you have too many of such behavioral loops.

<comment><USER11> > Mield forms of autism, by the way, is when you have too many of such > behavioral loops.

Attribution please.

<comment><USER10> Even the wikipedia page tells us that repetitiveness is one of hallmarks of Asperger.

The question why, still unanswered, is much more tricky. It seems that, like it is with a language and many other traits, there is a genetic predisposition and environmental conditioning (training). It seems that autistic people has some genetically transmitted factors, which, if behavior patterns in early childhood is not corrected, would result in behavioral deviations, such as extreme shyness, inability to maintain an eye contact, sociophobia etc.

The famous "mind blindness", it seems, is an effect, a symptom, not the cause. Those children just didn't train themselves enough to recognize facial expression patterns properly because, perhaps, some inherited changes in the "social areas" of the brain which, for example, perform facial expression recognition.

Why are such areas supposedly exist? Because even newborns could distinguish calm and friendly face from angry, etc. Facial expressions is the most efficient way to read other people's emotions, along with other non-verbal bodily ques, such as posture and jerky movements. No one taught them to do it, so it is somehow hard-wired. Animal, of course, also read body-language, much better than we are.

Inability to read (or rather interpret) other people result in excessive anxiety, almost physical discomfort, and repetitiveness, as an effect, is probably an acquired habituation to deal with that anxiety.

<comment><USER12> I think "too many behavioral loops" is an elegant way of succinctly explaining a lot of the symptoms of autism, but there's more to it, and moreover, "too many behavioral loops" can describe other forms of cognitive dysfunction. Anxiety disorders like OCD come to mind.

Anyway "Mield [sic?] forms of autism, by the way, is when you have too many of such behavioral loops" is incorrect. I don't think that simply exhibiting the "behavioral loop" symptoms would be sufficient for a diagnosis at least.</comment></comment></comment></comment>


YouTube: 10 years - <AUTHOR> https://www.youtube.com/watch?v=WwoKkq685Hk

<comment><AUTHOR> and check out: [https://www.youtube.com/channel/UCF0_xbLYbu3fn58RZmNkaOQ/pla...](https://www.youtube.com/channel/UCF0_xbLYbu3fn58RZmNkaOQ/playlists?shelf_id=1&sort=dd&view=50) for the rest of the A - Z.</comment>


PyTorch 1.0 Tracing JIT and LibTorch C++ API to Integrate PyTorch into Node.js - <AUTHOR> http://blog.christianperone.com/2018/10/pytorch-1-0-tracing-jit-and-libtorch-c-api-to-integrate-pytorch-into-nodejs/ <comment><USER2> Wow, this is great. Yes, we need a "tensorflowjs" (with TypeScript types) for Torch, and this seems to be a great start to show the way.</comment>


MakerLisp Machine - <AUTHOR> https://cpmaker.com <comment><USER2> A Lisp machine isn't just some hardware with Lisp on top. You can do that today with x86. A Lisp machine is supposed to have support for lisp primitives at a hardware level.

<comment><USER3> What about microcode? I thought the point of this whole computing thing was that we could abstract away the fine details and solve problems on the level they're posed at. Who gives a damn if there's a single atom representing a cons or not?

Lisp is good as a language for humans, and it used to be used in hardware because that was necessary to run lisp code fast. That hasn't been the case for ages.

<comment><USER4> _Who gives a damn if there 's a single atom representing a cons or not?_

Hipsters?

</comment></comment></comment><comment><USER5> I watched his recent meetup presentation on YouTube last week - really a fun looking project. If I were into hardware, at all, I would probably buy one.

Not too unrelated: I have an unused HP Stream 11 and I have had good intentions of having Mezzano boot directly in it. So far, I just have run Mezzano (Common Lisp directly on hardware) with VirtualBox.

<comment><USER6> I was curious about this, so I went looking.

Here's a HN thread from 2016: [https://news.ycombinator.com/item?id=12358177](https://news.ycombinator.com/item?id=12358177)

I want to give Mezzano a shot once I (finally) get through SICP.

</comment></comment><comment><USER7> It'd be really cool to have lisp machines again, but with some more powerful processors.

<comment><USER8> I've been thinking lately about an introductory programming environment (similar to computers of the 1980s) that uses lisp or scheme instead of basic[0]:

1\. Boots directly into the REPL.

2\. Built-in drawing commands, but no GUI.

3\. Memory mapped screen / sprites (with multiple graphics modes). With peek and poke like functions.

4\. Has an enclosure / keyboard similar to a C64. A simple all-in-one look may make the device more approachable.

5\. Simple/constant CPU to provide a path to learning assembly. The reason I'd want to avoid an FPGA is that it'll eventually lead to fragmentation, which means that peer-based learning becomes more difficult.

6\. Socketted COTS chips that are well documented and will likely be available for a long time.

7\. Open source, with all code available on the machine. I'd like to encourage curiosity as much as possible (and not being able to read the source is an instant blocker).

8\. HDMI output.

9\. Included joystick with a potentially non-standard port (x2). This is to permit the sharing of games with minimal fuss. Alternatively, use the port from the first xbox.

10\. A similar environment / emulator on regular computers, to help the student transition to regular programming.

11\. A good manual that explains how the machine works, gives examples, and provides possible avenues of exploration for the curious.

[0] Like many on this forum, basic was my first programming language. But I recognize it is only a matter of time until a programmer needs to abandon it. Any argument to use it as a teaching language has two factors: how simple is it to learn, and how much can be carried with the student. I think lisp would be slightly more difficult to learn, but I think it offers more long term value.

<comment><USER9> Thinking back, there was a noticable difference between the computers I "played" with and those I treated more carefully: whether they had persistent storage (HD) containing reasonably important data.

Without persistent storage, it was quite liberating to know that I couldn't really "break" things, since the default state would be restored by a reboot.

Maybe it's an advantage for a learning machine to have the system/OS be read- only (maybe with a physical switch to allow writes) and have data saved to removable media (e.g. microSD)? There's no way to mess up someone's data if it's kept outside the machine.

<comment><USER4> _Thinking back, there was a noticable difference between the computers I "played" with and those I treated more carefully_

Smalltalk environments try to capture some of this spirit. If you do something really bad, you just re-start the image and replay the change log, leaving off the last entry.

</comment></comment></comment></comment><comment><USER10> Methinks Lisp-machine is just a memory, which is CONS-structured and infinite and has garbage collector built-in. The processor sees only CAR- and CDR-ports and also a command port, where the memory hardware can be ordered to do LAST and ASSOC and other memory-intensive operation. The processor(s) are regular and do what processors do best, like adding and multiplying numbers. Every processor has its own access ports to the Lisp-machine, which is challenging but interesting.

</comment><comment><USER11> I want one! I am dreaming for a while building exactly this on top of an FPGA. Maybe this piece will be my inspiration to actually start :)

</comment><comment><USER12> WANT!!!

This gave me a crazy idea, cross-compiling one of the Lisps using CUDA to run accelerated directly on the GPU... Hmmm...

<comment><USER13> You can certainly call CUDA from Common Lisp. [http://quickdocs.org/cl- cuda/](http://quickdocs.org/cl-cuda/)

<comment><USER12> That's kind-of-sort-of what I had in mind... rather I'd like to run the entire Lisp language on the GPU(s) directly instead of a generic central processing unit.</comment></comment></comment>


IOS Users are the New Windows Users - <AUTHOR> http://testdriven.ghost.io/ios-users-are-the-new-windows-users/

<comment><USER2> I very strongly disagree with this, from the article:

" _When telling, showing and proving that Android 4.x smartphones are lightyears beyond iPhones in terms of hard-, software and design iOS_ "

iOS is simple on the surface, but the developer frameworks are far more consistent, well designed, and powerful than what Android offers. From video editing, typography, persistent storage, animation, UI, audio processing, iOS seems well ahead of Android. Much of the Android SDK feels cobbled together.

<comment><AUTHOR> I strongly disagree with you. How many Android apps did you develop? Do you know the newer Android tool chains?

Just the non-resolution-independent framework on iOS is a big pain and iOS biggest bottleneck and this is where Apple struggles right now (to make the next bigger iPhones happen).

But your post shows very well again the general attitude of iOS folks and it's your pure fear which speaks out load -- your fear that your dev experience and skills in iOS will be less worth very soon and you have to start at zero again, on Android.

Edited: btw downvoting != disagreeing

<comment><USER2> I didn't down vote anything, so I'm unsure what you're referring to there.

I haven't touched Android development for a few months so I might be out of date. In particular I very much disliked their scroll view and list view implementations. I found Android to be a mess in general, API wise. Things seemed much more ad-hoc and less thought out than on iOS. And I have some very specific disagreements with their API design choices (or lack of them). As I mentioned in my original post, Android seems to lack the built-in high-level rendering, audio, typography, language and other frameworks of iOS.

I've never found the screen density stuff to be an issue on iOS — I always design and render my UI elements directly as vector graphics (PDF). This is almost impossible to do efficiently on Android (no native PDF rendering API).

I really have no idea what you're talking about when you mention my "fear." I am more than happy to develop on any platform. I just find Android much worse than iOS at the moment. If it gets better I'll happily switch.

</comment></comment></comment><comment><USER3> > no, it's the specs—the specs of an iPhone and its software, iOS is lacking > more than two years behind Android

The 5S scored 2500 in Geekbench, which is a dual core system. To get to the same performance, you have to buy a 4 core Android device.

I rest my case.

</comment><comment><USER4> I look this post and the only thing I see is a fanboy rant like the ones that I see from the other side.

<comment><AUTHOR> It's socially acceptable to outline Windows weaknesses since decades and if this happens with Apple or iOS it's fanboyism?

iOS feels very similar to Windows in its worst days, even worse because Windows was much more open.

So, again the question: tell us why is this fanboyism, why do you think it's not appropriate to compare two operating systems? Because of your fear that your favorite will loose? Why should we not talk about the 18% share and the decline of Apple and iOS happening for years?

<comment><USER4> It is fanboyism because that rant is just bullshit, Android is not years ahead of iOS, Android has some advantages over iOS and iOS have other over Android.

And someone that can say with straight face that Android hardware specs are far ahead iPhone 5s is just someone that doesn't know what is talking about.

And by the way, you can try the "Because of your fear that your favorite will loose?" with others. I use Android and I don't have any iOS device.

<comment><AUTHOR> > Android has some advantages over iOS and iOS have other over Android.

You do not have any iOS device but claim that iOS have advantages over Android? This sounds a bit weird but ok, try to find one single reason why iOS should be better. But you won't because it's easier for you to bail out from the discussion and go to the meta level by telling that this is a rant, bullshit and fanboyism instead of giving some valid reasons (but how? you do not have an iOS device anyway).

Again, this is not a rant, this is reality, it's just that in the last two years Android developed much faster than iOS did, in every regard. And it seems that it's not allowed to address iOS' fall.

<comment><USER5> It's better because usability is 10000x better on the iOS. Android constantly asks how to complete simple actions. "oh, you want to view a website? what app should I use". Over. and. Over. and. Over. nonstop. all the time.

That's poor usability, plain and simple, and the same thing happens in hundreds of places in the Android UI

How about their permissions system? To get any level of control in android, you literally HAVE to root. No stock android gives you control over permissions. Either you accept ALL the permissions of an app, or you don't install the app.

I can control every aspect of that, as a user, on my iphone. I can say "hey, you can't read my contacts, but you can access network, just don't use push".

Android lost to iOS. it's not user friendly. Who gives a sh*t if it's "more customizable"? It does so at the expense of simple, intuitive UI design.

and just to be clear here, I have apps for both iOS and Android, I have an iPhone, and I have a galaxy note tablet. I've had several android phones over the years, and I've had multiple Apple devices.

Let me make it even more clear: The barrier to entrance for developing for an OS doesn't make it any better/worse than any other OS. If you're a developer and whining about the API's of your chosen OS, change careers. It's part of your job, if you don't like it, well, then your days must suck.

<comment><USER4> > Android constantly asks how to complete simple actions. "oh, you want to > view a website? what app should I use". Over. and. Over. and. Over. nonstop. > all the time.

Wrong

> I can control every aspect of that, as a user, on my iphone. I can say "hey, > you can't read my contacts, but you can access network, just don't use > push".

Wrong, you just can control what Apple let's you control

> Android lost to iOS. it's not user friendly.

Wrong

Funny, you're just the mirror of the one that posted the link

<comment><USER5> I'm sorry, were you sitting next to me during every use of Android I've had? If not, then don't tell me what happened, because you can't. Period.

And where's the proof for your second claim? Show me how you can reject individual permissions, without root, on a stock android phone, such as the HTC One, Galaxy S4, or anything, really?

I can take screenshots this instant that illustrate that you can't do that on a stock device.

I'm not a fanboy, I have devices on both sides of the fence. You however are rejecting my claims with ZERO proof. I believed that is called willful ignorance.

So, for all of your "wrong" statements, provide some proof, or STFU

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Damn. That's 2 minutes of my life I'll never get back.</comment>


Aadhaar: India's Flawed Biometric Database - <AUTHOR> https://thediplomat.com/2018/03/aadhaar-indias-flawed-biometric-database/ <comment><AUTHOR> > In January 2018, a journalist working with The Tribune in India did an > exposé about how anyone with WhatsApp and an online wallet could buy > unlimited verifications for a paltry 500 Indian rupees ($8). Instead of > launching an investigation inside its own ranks, the UIDAI filed a police > report against the journalist and her editor.

Does this entity have any accountability at all?</comment>


Why Israel Targets Sports in Gaza - <AUTHOR> http://www.thenation.com/blog/171344/killing-hope-why-israel-targets-sports-gaza#

<comment><USER2> I couldn't tell by the article whether or not the stadium was occupied at the time. The stadium may have provided a target that would help to lower support for the war without actually killing people. Obviously any move designed to crush morale isn't going to be "nice", but at least it's better than choosing targets for maximum loss of life.

</comment><comment><USER3> First of all, this is not remotely technology-related, and does not belong on HN.

Second, according to the IDF, this soccer field has been used to fire long- range rockets towards Israel, and served as a weapons cache.</comment>


Tangent: Source-To-Source Autodiff for Python - <AUTHOR> https://research.googleblog.com/2017/11/tangent-source-to-source-debuggable.html <comment><USER2> No nested differentiation:

      >>> import tangent
      >>> import numpy as np
      >>> tangent.grad(tangent.grad(np.sin))
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "/usr/local/lib/python3.6/site-packages/tangent/grad_util.py", line 178, in grad
          node, namespace = grad_tree(func, wrt, motion, mode, preserve_result, verbose)
        File "/usr/local/lib/python3.6/site-packages/tangent/grad_util.py", line 97, in grad_tree
          namespace.update(six.get_function_globals(func))
      AttributeError: 'numpy.ufunc' object has no attribute '__globals__'

<comment><USER3> ^I get that error with just `tangent.grad(np.sin)`.

So, it's not a nested differentiation problem, so much as a problem with "ufuncs". If you wrap np.sin in your own function then it takes the gradient just fine.

def sin(x): return np.sin(x)

negative_sin = tangent.grad(tangent.grad(sin))

<comment><USER2> Ah, good point, thanks!</comment></comment></comment>


"Good to Great" Circuit City finally dead, could be managed with Quickbooks. - <AUTHOR> http://www.google.com/hostednews/ap/article/ALeqM5jcl8rcgf4NoaPu6hVXAlaMFJXuygD96Q4LK80

<comment><AUTHOR> From the article:

 _"I wish there was one kind of fatal blow that we could all pick out," said Stephen Baker, vice president of industry analysis at market researching firm, The NPD Group Inc. "Every time there was a crossroad ... in hindsight they almost always did the wrong thing."_

In one of the most famous business books of all times, Jim Collins singled out Circuit City as one of the best managed companies in the world, distilling lessons on how to run a succesful company from its story. Yeah, Best Buy depantsed them, but why would a "Good to Great" management team allow that to happen?

<comment><USER2> The main thesis I remember from _Good to Great_ was that in each of its cases, the turnaround from good to great had come from a change in leadership at the top. The new leaders (the book claimed) had all fit a certain profile and shared a similar leadership style. I liked the book quite a bit because the character of these leaders that Collins was describing seemed admirable.

It isn't obvious whether the demise of Circuit City refutes the thesis. Perhaps the leader Collins wrote about retired and was replaced with someone who didn't share the same values? In that case GtG would actually predict a decline. Alternatively, if the company failed under the same leader that Collins wrote about, that would refute GtG pretty well. One can also imagine scenarios between these two poles where it might not be so clear.

By the way, your point reminds me of a similar one people made about _In Search of Excellence_ (the GtG of its day), the "excellent" companies of which didn't seem so excellent a few years later.

<comment><AUTHOR> Yeah, I guess I'm not saying this refutes the book so much as I'm asking whether the principles in the book (like "the hedgehog concept") illustrate what went wrong with Circuit City.

You could level similar critiques against other GtG companies, like Abbott Labs or, hello? Fannie Mae.

<comment><USER2> I forgot that Fannie Mae was in there. Yikes. The analogy with In Search of Excellence is starting to look pretty convincing.

These are really just story books anyway.</comment></comment></comment></comment>


A Kingdom from Dust - <AUTHOR> https://story.californiasunday.com/resnick-a-kingdom-from-dust <comment><USER2> That was an epic read. Thank you for posting it. I looked at the scroll bar on the right side of my browser and it barely budged in 15 minutes of reading.

This is the documentary "Finding Lost Hills" mentioned during the story.

[https://vimeo.com/176388063](https://vimeo.com/176388063)

If you would like to read an article about the intertwining of the mudslides and wildfires of the California wilderness that is increasingly encroached upon by residential development from 1988 that is similar in breadth, depth, and scope:

[https://www.newyorker.com/magazine/1988/09/26/los-angeles- ag...](https://www.newyorker.com/magazine/1988/09/26/los-angeles-against-the- mountains-i)

<comment><USER3> I agree. I love when stories get all the viewpoints and follow threads raised during conversations. I didn't even realize I spent about an hour reading it!

</comment></comment><comment><USER4> From a literary standpoint, I loved this article. It seemed like the sequel to Chinatown. The writing reminded me of a Michael Lewis story. Really enjoyed this.

</comment><comment><USER5> > The extraction of water beneath the lake bottom won't last forever. The > state of California has adopted a new law that finally regulates the > pumping. When it goes into full effect, in a decade or two, more than a > million acres of cropland across the valley will have to be retired.

Every time I read something like this, it just baffles me. Not only are we technologically capable of producing the water we need for aggreculture via desalination, but we also have a delivery system already in place. Instead of funneling water from northern rivers, those same systems can be filled with water sourced from the ocean.

Power can be sourced sustainably as well, as it doesn't matter what time of day the water flows or if there are fluctuations, so long as it averages out and can be balanced in the overall system.

A project like this could not only fuel CA economy for years to come, but also make farming something that not only mega-business can sustain. As is, the finances are fairly precarious and you need serious cash flows to be able to withstand the bad years. However, we can avoid these bad years all together.

<comment><USER6> Desalination is not economical for agriculture. Crops like pomegranates, grapes, etc requires large amounts of cheap water.

<comment><USER5> It's not economical because we have not reached the scale needed to make it economical.

At the other end of the spectrum, current prices are artificially deflated by aquifer use that's unsustainable.

<comment><USER7> Costs, ultimately, relate to the resources (and opportunity costs) required to provide or provision something.

Desalinisation costs energy, and even with advances in technology, reverse- osmosis processes require moving water across membranes that it doesn't want to move across.

And that's on _top_ of everything else, so that you have to deal with pre- filtering and straining (probably through gradations of rock, gravel, and sand filters), _and_ the flushing of those periodically, and other effects.

Technology is not some majickal bottomless bag of tricks from which you can extract endless efficiencies. There are limits, constraints within those, risks, and side-effects.

And the volumes of water required for crops is _large_. The more so for tree crops, as mentioned in the article, as they must be watered _for their entire lives_. (There are orange orchards _still producing_ in Southern California which date from Mission times -- over 200 years ago. Though most orchards have an effective life of about 15 - 40 years or so, if I recall my research on this a few years back.)

Contrast alfalfa, another high-water crop, in which, in a predicted dry year, a farmer can simply forgo planting the crop (or allow it to die), _without_ incurring a long-term liability, as the next year's crop would have to be planted afresh anyway.

<comment><USER5> Article states their entire operation uses 400,000 acre-feet of water a year. That's 645,332,372 cubic-yards. Israel today produces 785 million cubic yards of water per year, using it for agriculture, among other things. [1]

From the same article: "Desalination used to be an expensive energy hog, but the kind of advanced technologies being employed at Sorek have been a game changer. Water produced by desalination costs just a third of what it did in the 1990s. Sorek can produce a thousand liters of drinking water for 58 cents. Israeli households pay about US$30 a month for their water — similar to households in most U.S. cities, and far less than Las Vegas (US$47) or Los Angeles (US$58)."

At the $0.58 per 1000 liters, that farming operation would require $286 million to pay for the water needed. The article quoted profitability scratching a billion, so it seems that it is both within technological means and economically viable. For sure not as profitable as free water, but still viable.

No magic required either.

[1][https://www.scientificamerican.com/article/israel-proves- the...](https://www.scientificamerican.com/article/israel-proves-the- desalination-era-is-here/)

<comment><USER7> "...farmers in the Central California Irrigation District near Los Banos (Merced County) paid $17 per acre-foot of water used..."

[http://www.sfchronicle.com/opinion/article/California- drough...](http://www.sfchronicle.com/opinion/article/California-drought- Charge-true-cost-of-water-6319943.php)

Via GNU units:

        You have: 17/(acrefoot)
        You want: /litre
                * 1.3782124e-05
                / 72557.755

Your Israeli desal source is 42,083.499 times more expensive.

<comment><USER5> The acre-foot in the desal prices would be $715. All you are proving is that $17 is an unsustainable price and not what non-ag consumers pay at all. California as a landmass has sunk measurably during the few years because of these unsustainable practices.

If you were to buy water at real unsubsidized prices in any metro area, you would not be able to find $17/acre-foot.

<comment><USER7> I'm not arguing that the price is sustainable.

I _am_ noting that present levels of ag activity are in fact predicated on that price. And that (as is prominently noted in the article) water is _the_ limiting factor for virtually all California ag.

And that any significant increase (other contemporary news articles are talking of "only" 10x increases in water costs) would be devastating to existing operations.

I'm finding your views charmingly optimistic. But highly unrealistic.

<comment><USER5> The price isn't the only limiting factor. Right now there isn't water at any price that you can buy in unlimited quantities through the current watering system.

As the result, new land development of more sustainable ag is effectively blocked by more senior water rights.

We even legislate into our consumer laws that you cannot use water for your landscaping at any price beyond a certain amount or risk being completely cut off.

I find this absolute limit situation highly questionable, because as we have a physical ability to not have these limits in a much more sustainable sense.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> A nice read on the hubris of unsustainable development. Having grown up in area with fights (legal and physical) over water, the tragedy of the commons is all too frequent.

</comment><comment><USER7> Chiming in with others to say what a fantastic read this was. So much detail and insight.

I prefer more substantive endorsements, but there's just so much to chew over: farming, water, drought, wealth, poverty, business, health, and more. I'll be revisiting this for examples and insights in numerous areas.

</comment><comment><USER8> I lived in Fresno for over 2 years. While there, I read a couple of books about the history of water rights and water development in California. One is called _Salt Dreams_ and is mostly about Southern California. The other was a local history about irrigation canals and water rights in Fresno County.

That area was initially desert. The only greenery was along river banks. One canal was built with essentially no money. Individuals would be assigned a section to dig and, in exchange, gain water rights. They sometimes had to take a break from digging it to get a job for a time. When financial drama and legal drama came along later, this canal was fine because money had never been a large part of the equation.

A later canal had money from the start. When financial and legal drama reared its ugly head, this canal really suffered. The fact that money was central to its development turned out to be an Achilles heel.

There were a number of important court cases in Fresno that helped shape water rights in California. California water law is influenced by two conflicting sets of rules. There is an old English principle that you can't take so much water from the river that you are depriving people downstream. This is one expectation of California water law. The other is _first come, first served._

As the canals got dug, the once barren landscape grew lush. The book had interesting before and after photos of old farm houses in a barren landscape, then the same house surrounded by trees and greenery.

A number of canal building tools were developed in Fresno and patented. Fresno County played something of a keystone role in water development and water rights development.

They also developed ground water recharge systems. The success of the canals led to the emergence of ponds in low lying areas due to a rising water table. They worked to direct this into the aquifer and help support local wells.

Fresno probably has better water security than the rest of California. It has gone through periods where it was successfully improving the status of its aquifer, probably while most other aquifers in the US were being inexorably drawn down, leading to subsidence.

I am somewhat skeptical of the doomsday pronouncements of articles like this. I suspect there is a lot of room for improvement in terms of using drip irrigation and other conservation farming methods.

Having lived in Fresno, which is absolutely not a barren desert these days, and read about it's water history, I find myself a bit bemused by the fact that it gets so little attention for how it was transformed. People harp on the farmland in the desert. They fail to recognize that Fresno is something of a modern Hanging Gardens of Babylon scenario in part because it's current lushness goes back more than a hundred years, so we don't really recognize that it's current state is a case of widespread, persistent terraforming. However it only gets about 11 inches of rain a year. Without constant tending, the current greenery there would not survive. It would revert to desert.

Anyone interested in water issues in California should read _Salt Dreams_ and also read about the history of water development in Fresno County.

<comment><USER7> Is the donated labour / financed canals story in _Salt Dreams_?

Sounds interesting.

<comment><USER8> No. It was in a book about the history of the Fresno canal system /irrigation district. I think it had the name of the canal system or district in the title and was written by a local. It was an extremely interesting book.

You might need to get a librarian to help you ID it. Searching online is failing to readily find anything.

<comment><USER7> Does _The Alta Empire_ ring a bell?

[https://www.worldcat.org/title/alta-empire-the-story-of- conq...](https://www.worldcat.org/title/alta-empire-the-story-of-conquest-and- development-in-the-san-joaquin-valley/oclc/19093455&referer=brief_results)

Otherwise, I'm trying some keywords:

[https://www.worldcat.org/search?q=kw%3A+fresno+water+canal+h...](https://www.worldcat.org/search?q=kw%3A+fresno+water+canal+history&qt=results_page)

Author or date would help a lot.

<comment><USER8> No, that doesn't ring a bell. I can't tell you the author or the date.

I read it in the Sunnyside branch of the Fresno County library system. Sunnyside is an unincorporated community on the edge of the city of Fresno. The Fresno County library system could probably help you find the book. It had a light blue cover.

I remember the name as being something very boring and straight forward but open to misinterpretation, like "The history of the normal canal" where _normal_ sounds like a description but was really the name of the canal (but _normal_ is probably not the actual word in question and it may have been _irrigation district_ or similar instead of canal).

 _Consolidated district_ is a vague possibility, where it sounds descriptive but is actually the name of the thing in question.

I am seriously bad with names and titles. My mind is a sieve for such.

Edit:

[https://www.worldcat.org/title/kings-river-and-irrigating- di...](https://www.worldcat.org/title/kings-river-and-irrigating-ditches- fresno-california/oclc/52601961&referer=brief_results)

 _King 's river and irrigating ditches_ is not the book, but it is some of the same subject matter.

<comment><USER7> This looks suspiciously close:

[https://sjvls.ent.sirsi.net/client/en_US/fhq/search/detailno...](https://sjvls.ent.sirsi.net/client/en_US/fhq/search/detailnonmodal/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:1148475/one?qu=canal+history&qu=-panama&qu=-erie&qf=FORMAT%09Format%09BOOK%09Books&qf=LIBRARY%09Library%091%3ASUN%09Sunnyside+Branch+Library+%28Fresno+Co.%29)

<comment><USER8> Our replies crossed in the ether:

[https://news.ycombinator.com/item?id=16306447](https://news.ycombinator.com/item?id=16306447)

I think that is it, though yours has a grey cover.</comment></comment></comment></comment></comment></comment></comment>


Key insights from analyzing data breaches and cyber-attacks of 2018 - <AUTHOR> https://www.templarbit.com/blog/2019/01/10/we-analyzed-data-breaches-and-cyber-attacks-of-2018-here-are-the-key-insights/ <comment><USER2> I don't think these kinds of surveys are (1) accurate or (2) particularly useful, but the gold standard for this kind of stuff is the Verizon DBIR:

[https://enterprise.verizon.com/resources/reports/dbir/](https://enterprise.verizon.com/resources/reports/dbir/)

<comment><USER3> For CISOs wanting to learn from past attacks, is there anything you would recommend as either accurate or useful (or both)?

</comment></comment><comment><USER4> [https://www.reddit.com/r/securitybreach/](https://www.reddit.com/r/securitybreach/)

Sub-reddit for cataloging breaches with detail relevant to defenders.

</comment><comment><USER5> The article notes that the number of "AI/ML hacking tools" has grown -- is there documented use of malicious actors using AI as part of campaigns? I've seen researchers publish tools that would likely fall into this space, but I'm curious if there's any known usage of these or other tools for malicious ends.</comment>


Fast Randomized SVD (2014) - <AUTHOR> https://research.facebook.com/blog/294071574113354/fast-randomized-svd

<comment><AUTHOR> Posted six months ago on [https://news.ycombinator.com/item?id=8525237](https://news.ycombinator.com/item?id=8525237).

> We will soon release the implementations for these algorithms described.

I would like to see them now.

<comment><USER2> See [https://github.com/facebook/fbpca](https://github.com/facebook/fbpca)

<comment><AUTHOR> Thanks!

</comment></comment></comment><comment><USER3> If you're interested in lower bounds or tighter upper bounds, you can find the latest here:

[http://link.springer.com/article/10.1007%2Fs00453-014-9891-7...](http://link.springer.com/article/10.1007%2Fs00453-014-9891-7#page-1) [http://statweb.stanford.edu/~candes/papers/RandomizedNLA.pdf](http://statweb.stanford.edu/~candes/papers/RandomizedNLA.pdf)

</comment><comment><USER4> Why aren't they just using compressed sensing instead of PCA in the first place? PCA is good because it guarantees perfect recovery wen the set of examples is contained in an n dimentional subspace. Compressed sensing guarantees recovery whenever the set of examples is sparse in _some basis_ \- it sounds like a much better fit.

Not to mention random projections which are even faster (even proved by the Johnson-Lindenstrauss lemma) usually do well,

<comment><USER5> How does compressed sensing work if you don't know the base in which the signal is sparse beforehand?

<comment><USER4> Start at slide 44 [http://www.cs.huji.ac.il/~shais/Lectures2014/lecture11.pdf](http://www.cs.huji.ac.il/~shais/Lectures2014/lecture11.pdf)</comment></comment></comment>


A single-nucleotide exon found in Arabidopsis - <AUTHOR> http://www.nature.com/articles/srep18087 <comment><USER2> What is the purpose of exons?

<comment><USER3> The introduction says "Most eukaryotic genes carry protein-coding exons that are separated by non-coding introns" so I think it's safe to assume that at least one purpose is to code for proteins.

Beyond that, you may need to spend some time learning molecular biology to understand what even a summary like [https://en.wikipedia.org/wiki/Exon#Function](https://en.wikipedia.org/wiki/Exon#Function) means.

I personally don't have that understanding enough to provide advice, but there are many freely available teaching materials, including videos like [http://freevideolectures.com/Course/2304/Introduction-to- Bio...](http://freevideolectures.com/Course/2304/Introduction-to-Biology) , to help you reach your goal of understanding what an exon does, to whatever level you want to take it.</comment></comment>


I got my Pebble, now let's play - <AUTHOR> https://gergely.imreh.net/blog/2013/06/i-got-my-pebble-now-lets-play/

<comment><USER2> It's very big for a wristwatch. It's also ugly in my eyes

<comment><AUTHOR> Not a beauty indeed. When I was choosing the color, I asked my girlfriend, working in the fashion industry, which colour should I choose. She looked at me with horror, her eyes saying "all of them are butt ugly".

For the size, it's not too bad from comfort's point of view, and my friends' watches (Casios and others) are often bigger, so it is personal preference, I guess.

</comment></comment><comment><USER3> Can't wait to start programming mine! Now to just move out of state and start my new job first...

</comment><comment><USER4> I've heard that if you use a second-hand, requiring frequent display updates, it kills the battery pretty quickly... is this true?

It would seem a pretty big flaw for a wristwatch...</comment>


Sliding airline seats speed up boarding and departing planes - <AUTHOR> http://uk.businessinsider.com/middle-seats-airline-sliding-design-video-2016-12 <comment><USER2> Goodbye seat cushions?</comment>


Ask HN:  What do you use for a daily todo list? - <AUTHOR>

I recently moved from Workflowy to Trello, both excellent products, just experimenting (I have no connection to either)<p>What, HN readers, do you use to keep up with day to day task lists? <comment><USER2> I use www.Astrid.com. Started with their excellent free Open Source app for Android... I always have my phone so a good app for it was important. It's both well designed and feature rich. It syncs with Google tasks and producteev so I have sometimes used those on the web, but their website has gotten good enough that I generally just use it when I'm at computer.

</comment><comment><USER3> I use PomodoroApp: <http://www.pomodoroapp.com/>

It's in active development, integrates with the pomodoro technique, and has the right balance of features/ease of use that I need from a task list tool.

</comment><comment><USER4> I have been around the block using these! Springpad, remember the milk, wunderlust, evernote, onenote, outlook tasks, I could go on and on.

i. I carry around a real notepad for quick notes. I fill up about 1 every 6 months, sometimes I take quick notes on iOS Notes app. ii. Short term TODO's I email to myself and flag important. iii. Daily stuff goes in Notepad or Sticky notes on my desktop, open all day, synced in dropbox. iv. Long term stuff goes in Google Tasks under different categories, and relevant web links to those goes in it's corresponding folder in chrome, synced across browsers.

</comment><comment><USER5> At work I use Outlook Tasks, because we use Outlook, Office and Sharepoint and it's easier to work within all that instead of fighting it.

Tasks are basically a customized Outlook message, so you can dump all manner of Office artifacts in a task to keep track of stuff. Copy anything from an Office or Outlook doc, or embed an entire document in a Task.

So the existence of the Task is part of my ToDo list, and what's in the Task object is stuff i've been keeping track of on a long running task. Simple tasks are just a Task with a title and a due date.

</comment><comment><USER6> At work, I just use email. Whenever I check my inbox, I delete all emails that I no longer need or are irrelevant and I trim my inbox aggressively. All emails left there are things that I have to do. I recently switched to this method after having an overflowing inbox with 30 folders and all kinds of filters, etc, and I'm already seeing a huge productivity increase. Still, I fully appreciate this won't work for everyone, especially those who are getting 100s of emails per hour.

</comment><comment><USER7> A piece of paper and a pen.

</comment><comment><USER8> OmniFocus: I love the way I can assign a todo to location context and have it pop up automatically when I next visit that place.

In the end, the app or site doesn't matter, it just matters that you have _one_ list that is _always_ available. I'm still looking for a waterproof for the only exception to the single list.

</comment><comment><USER9> I used Review19 -- <http://review19.com> (Disclaimer: this is my app) for collaborative project tracking and that covers my consulting work and personal projects.

I've used Trello and Google Docs in the past and they work great as well.

</comment><comment><USER10> Remember the milk. The great mobile app keeps everything in sync. I use a vim text file with outline style folding for my project list and notes, GTD style. I sync that with git on github so that I have history without clutter and read access everywhere if needed.

</comment><comment><USER11> I used long time <http://www.wunderlist.com/>. But I consider to switch over to <https://app.organisedminds.com/>. They have a very nice UI.

</comment><comment><USER12> Cant go past Asana IMHO.

</comment><comment><USER13> todo.txt

</comment><comment><USER14> I've recently started using Asana. Highly recommend it.

</comment><comment><USER15> <http://weekplan.net> inspired by the 7 habits of highly effective people.

</comment><comment><USER16> I built my own app for that. Plan on releasing it during the month on May as an open source project.

</comment><comment><USER17> daily: whiteboard/small legal notepad

weekly and monthly: weekly goal list/different whiteboard

longterm: omnifocus and basecamp

<comment><AUTHOR> Interesting, what makes you go from tangible to digital > post monthly?

</comment></comment><comment><USER18> I use the calendar on my Blackberry.

</comment><comment><USER19> any.do on my mobile devices and evernote on my desktop</comment>


Ask HN: How do we grow our career as a Developer Evangelist? - <AUTHOR> Hi,<p>I'm really interested in starting off my career as a Developer Evangelist. However, I'm not really sure how to grow it after? Will I be seen as "less of a programmer". Any Evangelists want to share their experience and growth? <comment><USER2> The most effective evangelists are those who have actually used the tools they're speaking of. And I mean more than for "hello word".

Let me say this: I went to a meetup several months ago for an Angular event. The speaker was horribly unimpressive; quite literally copy and pasted code from the Angular Demo site in-front of us for the "demo", and couldn't answer in-depth questions. No one liked this "evangelist".

In short; have a conviction for what your evangelizing, and dig deep into it.

<comment><AUTHOR> Ah got it. Just know your stuff</comment></comment>


Why Underscore is awesome - <AUTHOR> http://www.codereadability.com/why-underscore-is-awesome/

<comment><USER2> While underscore is indeed widespread, don't let libraries keep you from thoroughly understanding JavaScript:

[https://www.youtube.com/watch?v=4anAwXYqLG8](https://www.youtube.com/watch?v=4anAwXYqLG8)</comment>


Rockstar Jacks Up GTA Price for Steam Summer Sale - <AUTHOR> http://armedgamer.com/2015/06/steam-summer-sale/

<comment><USER2> It amuses me that the article states that it's only available in bundles, not on-own - then has a screenshot showing it being available.</comment>


Music streaming may be falling because of coronavirus - <AUTHOR> https://qz.com/1820896/music-streaming-may-actually-be-falling-because-of-coronavirus/ <comment><USER2> Being old and working from home now means having my own stereo and CD player handy, and my 30-year stash of cds.</comment>


Show HN: Rust's Result(T) in Go with Go Generics - <AUTHOR> https://github.com/reconquest/goava#resultt <comment><USER2> I'm not entirely familiar with the Rust type or the latest Go proposal but is there a way to do this without possibility of cleanly compiled source panicking at run time?

Something like if Result didn't include those possibly panicking functions and wider types ResultOk and ResultErr had the corresponding functions guaranteed not to panic. These types would only be accessible from Result upon checking.

<comment><USER3> No, it isn't possible. FTA:

 _"Unfortunately, it can 't be ported completely due to lack of pattern matching in Go.

The only possible way was to use channels and select {}, but it would be too complicated and it would be just an imitation."_

I don't understand how the solution using channels would work.</comment></comment>


$10/month to purge your information from data brokers - <AUTHOR> Would you pay $10 a month for a service that removes your information from over 50 data brokers?<p>It would also routinely monitor if your information pops up on these websites <comment><USER2> No, mostly because I don't want to provide the personal information that would be required to yet another third party.

</comment><comment><USER3> If you've actually removed it all, why would ongoing service be needed?</comment>


The Strict Aliasing Situation Is Pretty Bad - <AUTHOR> http://blog.regehr.org/archives/1307 <comment><USER2> _Although I have no evidence that it is being miscompiled, OpenSSL's AES implementation uses chunking and is undefined._

Oh, that's nice. :/

<comment><USER3> It's nonsense. The function is external, called from a separately compiled file. The pointer comes in as a char *. The code checks its alignment before assuming it can be cast to a block. There is no way in it could be "miscompiled".

The ivec argument could in fact have come from an object that is of type aes_block_t. The only thing which might reveal that it didn't is wrong alignment. In other regards, there is no way to tell.

Lastly, any cross-compilation-unit optimization which could break code of this type is forbidden, because ISO C says that semantic analysis ends in translation phase 7.

I'm looking at C99, not the latest, but I think it's the same.

In translation phase 7 (second last), "The resulting tokens are syntactically and semantically analyzed and translated as a translation unit." Note the "semantically analyzed": semantic analysis is where the compiler tries to break your code due to strict aliasing.

In translation phase 8 "All external object and function references are resolved. Library components are linked to satisfy external references to functions and objects not defined in the current translation. All such translator output is collected into a program image which contains information needed for execution in its execution environment."

No mention of any more semantic analysis! So unless somehow the mere resolution of external symbols can somehow break OpenSSL's AES, I don't see how anything can go wrong.

One thing I woudl do in that code, though is to make sure that it doesn't use the original ivec pointer. In the case where "chunking" goes on, it should just cast it to the block type, and put the result of that cast in a local variable. All the ememcpy's, load/store macros would be gone, and the increments by AES_BLOCK_SIZE would just be + 1.

<comment><USER4> Citing the translation phases in the standard as evidence that undefined behavior is ok, as long as it's divided between two translation units, strikes me as wishful thinking.

<comment><USER3> Undefined behavior is the absence of requirements: there not being any requirements for some situation.

Suppose a document tells you that for some special situation X, there is an absence of requirements. However, suppose that some other general rules elsewhere in that document in fact imply a requirement for that situation.

That just means that the claim that situation X has no requirements is incorrect.

For instance, ISO C says that two struct types appearing in separate translation unit are only compatible of they have the same typed members in the same order ... _with the same names_.

This says that if you do aliasing with otherwise identical structures that don't have the same names, the behavior is undefined: i.e. that there is no requirement that it work.

But, we can infer that it must work by the logical fact that during the semantic processing of one translation unit, the translator has no clue what the names of struct members are in another translation unit. They disappear at translation time and turn into offsets.

I mean, we can fwrite a struct to a file, right? We can send that file over a network. According to ISO C, every program (or at least every C program) will have to use a structure with the correct names to fread that area of the file! Ridiculous!

Suppose we take ISO C and add a statement to it like, "the consequences are undefined if one of the operands of the + operator is the integer 42". The rest of the document would still be exactly what it is, and if we strike out that sentence with a black marker, nothing has changed. The rest of the document continues to inform us that adding 42 to something is well-defined (in the absence of overflow, or overflow-like issues with pointer displacement and so on).

Basically, it's a contradiction: the document gives a description which adds up to some requirements, but then some sentence tries to take them away.

In such a situation, we can just proceed as if the requirements apply. That is to say, when a requirement conflicts with the claim that there is no requirement, just let the requirement prevail.

(In a situation where conflicting requirements are asserted, it's a different story, of course.)

<comment><USER5> You can't infer shit, because of the way current compiler writers are interpreting the standard today. At one point in the 90's it was obvious for the entire planet including compiler authors that some undefined behaviors did not apply for a given target architecture, so obviously obvious that nobody would even require to have it specified in the compiler doc (still nice to have, but you would not be too much angry if it does not appear)

Now they just add their "optimizations" at the highest levels so of course even for targets where it should makes no sense, and without asking for your permission, and even by default, and even some they consider "aggressive". So either you have provisions to avoid all that shit, like having a guy disabling all the new ones each time you upgrade you compiler, and you better have some defenses in depth, and I agree with you that using TU as boundaries is also a good idea, if your compiler+build-sys have an option to NOT do WPO.

But it is just not in any way guaranteed by the ISO standard, and still just an implementation detail from its pov. And honestly that's a problem. Because compiler writers will takes more drugs and come up with new imaginative way to break your code more, in the name of their "strictly-conformance and nothing more" crazy ideal.

</comment></comment></comment></comment></comment><comment><USER6> See also this older post [http://blog.regehr.org/archives/959](http://blog.regehr.org/archives/959)

</comment><comment><USER7> This was an eye opener for me. Bell Labs tech is as usual a mountain of hidden complexity hiding under a "simple" facade.

No more excuses for me. Time to learn Rust.

<comment><USER8> C is actually quite simple, even the aliasing rules (I think the aliasing rules all fit on about a quarter page). Programming in C though is anything but.

The tension between weakly typed pointers and the desire to generate efficient code is where there is a problem. More or less anywhere you violate the aliasing rules you are doing something that Fortran doesn't allow at all, and by disallowing it semantically the hope was that C programmers could have their cake and eat it too. The reality is that all systems code should probably be compiled with alias analysis disabled.

<comment><USER5> I completely agree.

A spec of a quarter page can already be incredibly convoluted and with very hard to anticipate consequences -- even more so when crazy people are interpreting it without caring about the consequence of their acts in the real world. And C is not just about aliasing rules; the current situation is that ANY undefined behavior is a landmine waiting to kill you, regardless of whether is seems to makes sens for your target architecture. And that is mostly because compiler writer have an insane interpretation of the standard: the definition of "undefined behavior" is "behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements"

A key word here is "nonportable" and it is clearly not considered often enough by some compiler writers, who generally prefer to see all undefined behaviors as a licence to "optimize" your code without carrying too much about warning you about potential bad side effects because it's "hard" according to them.

This does not make even the beginning of any sense. If it is not what many programmers are expecting (a majority ? -- most coworkers I know including my direct boss are not even aware of all that mess), is costly during the translation phase, has unclear/unquantified runtime performance benefits, is dangerous in the real world and is hard to detect when bugs are activated by those "optimizations", then WHY they are doing them in the first place? From an engineering point of view this is just plain insane. Correct executions and in depth safety are extremely valuable, and only becoming more so year after year, and when they pretend that it's not their fault that programs are breaking they are being even more ridiculous; a compiler does not exist in a vacuum, and neither just to reproduce itself and satisfy the curiosity of geeks for mathematical logic.

Obviously some amount of alias analysis can be useful, and this is clearly one of the topic really intended from scratch in the standard to address some performance issues, but maybe it would be enough to explicitly identify what you want to not alias. Seeing the bug when they discuss about allowing uint8_t to not behave in _general_ as an unsigned char in regard with aliasing is just plain disgusting and makes me lose yet again a portion of the tiny remaining trust I had in them.

It will soon get to the point that C/C++ will not be realistic languages to consider if you want any kind of reliability. Maybe I'm even deluded in thinking this is not already the case.

<comment><USER8> I get a bit fed up when software developers complain about C compilers and blame the developers, as though compiler developers are somehow a different breed or something. It's all software, and compilers are actually one of the easier things to write.

Somehow, the developers of gcc, clang, and various commercial compilers are all crazy, while people who work on any other project in C are sane? Why haven't the sane software developers forked an open-source compiler and implemented sane semantics?

Blaming the state of compilers on compiler developers without understanding their motivations for making engineering choices is intellectually lazy, particularly for other software developers.

<comment><USER5> What you write is all very meta, so maybe enlighten us on their motivations and why they should continue in that way? And on how using a language is the same as implementing it and how it seems that the application space has magically folded into a single point last night?

I know already too much for my taste about the reasons they gave to come with such horribly risky designs. Example: "it's difficult to properly warn where we are doing dangerous optims". I'm not buying it. Don't do them in the first place or use more heuristics. Publish your data about your risk / benefit analysis. I think they made strategic mistakes. "Everybody" in the academia and security / safety related business is saying that. And no, that won't be solved with dynamic checkers. They should concentrate on optimizations minimizing the risk of new behaviors concretely appearing, and heuristics maximizing the detection of the intent of the programmer. That sounds informal as hell, because this is, but in the real world solving a problem does not always mean finding the perfect solution to an equation, and good enough approx are often the best thing to seek. Compiler writers know that. They are just not seeking the good thing. The "smartness" they think they are creating though their imaginative use of undefined behavior is as smart as my ass, because on real projects those kind of sufficiently smart compilers are indistinguishable from an adversary.

I have recently implemented some kind of compiler, though not C to machine code. In the real world it's not easy. It's messy. It's made of blood and tears. You have to care about all kind of little details for your users. You have to make the junction between two domains that sometimes have quite different semantics -- there is never a perfect solution to that. And all of this, with the minimal risk to be misused. If you don't care for your users, their is no point. I've the greatest respect for the authors of CLang, which I used for the front end. It's not perfect, but it is quite good and it does the work. But sometimes, when you feel that somebody effort really is misplaced, you better tell him (or the community, my voice is not particularly original), and explain your reasoning. Otherwise, you effectively won't be entitled to complain latter, if you wait too long.

So now what do we have: two domains, C and various target architectures, that used to be with quite some low impedance mismatch, by design, are considered radically different. The expectations of most users have nothing to do anymore with the expectation of how the compiler writers thinks the users should write their code (or have written it in the past, for less maintained software). That won't ends well. Actually, we are already in the mess, while we don't especially needed more than we had already.

So go on and please explain your POV. But anyway, no, I won't fork and write a "friendly C" compiler overnight. Neither will maintainers of cryptography softwares, probably. I'm just yet another datapoint that will loose some time in adding all the -fdisable-insanity of the day anywhere he passes. Because somebody else somewhere else in the world thought that would be a good idea to infer proofs using rules written for the least common denominator of all computers to detect if you read the n1570 over and over again enough times to obtain the privilege to get a sane translation of your code that actually will anyway only ever run on x64_86, thank you very much.

The same debacle somehow happened about memory models (see how they have been received for kernel work). If you only ever care about the abstract, concrete real prospective users won't greet you as you might have expected. Rightly so. Especially when your formalism has been proven unimplementable _and_ unsound.

<comment><USER9> I don't think it's going to be a fruitful exercise to demand that implementers of ISO C/C++ change their implementation to guarantee certain properties of programs that ISO C/C++ consider to be invalid, and thereby weaken their competitive position vs. other implementations.

The root cause is the ISO C standard itself, so if you want any change in that direction, the best approach would be to join the ISO C working group and make proposals to replace various undesirable _undefined_ behaviors with, at the minimum, _implementation-defined_ behaviors (starting with signed integer overflow, perhaps). Probably there aren't any vendors of one's complement machines and the like left to veto your proposals.

The C11/C++11 memory models for the most part don't solve a problem that kernel developers have, because all kernels already contain tested solutions to the same problem, so one would not expect kernels to quickly exchange all their tested and highly performant concurrency primitives. The only benefit for them is that the memory model effectively prohibits implementations from doing some optimizations that would be valid only under the assumption that there is only one thread of execution, and this benefit is _implicit_ , i.e. you don't need to use any of the new language features or standard library headers to benefit.

</comment></comment></comment></comment></comment></comment><comment><USER4> I thought this article was unnecessarily dire.

One section claims "Physical Subtyping is Broken", where "physical subtyping" is defined as "the struct-based implementation of inheritance in C." I assume this means the typical pattern of:

        typedef struct {
           int base_member_1;
           int base_member_2;
        } Base;

        typedef struct {
           Base base;

           int derived_member 1;
        } Derived;

The article claims physical subtyping is broken because casting between pointer types results in undefined behavior. The article gives this example:

        #include <stdio.h>

        typedef struct { int i1; } s1;
        typedef struct { int i2; } s2;

        void f(s1 *s1p, s2 *s2p) {
          s1p->i1 = 2;
          s2p->i2 = 3;
          printf("%i\n", s1p->i1);
        }

        int main() {
          s1 s = {.i1 = 1};
          f(&s, (s2 *)&s);
        }

I agree this example is broken, but casting between pointer types in this way is totally unnecessary for C-based inheritance. You can do upcasts and downcasts that are totally legal:

        Derived d;

        // Legal upcast:
        Base* base = &d->base;

        // Legal downcast:
        Derived* derived = (Derived*)base;

So I don't think the article has proved that "Physical Subtyping is Broken."

The next section says that "Chunking Optimizations Are Broken," because code like this is illegal:

        void copy_8_bytes(char *dst, const char *src) {
          *(uint64_t*)dst = *(uint64_t*)src;
        }

While this is true, such optimizations are generally unnecessary. For example, write this instead as:

        void copy_8_bytes(char *dst, const char *src) {
          memcpy(dst, src, 8);
        }

If you compile this on an architecture like x86 that truly allows unaligned reads, you'll see that modern compilers do the "chunking optimization" for you:

        0000000000000000 <copy_8_bytes>:
           0:   48 8b 06                mov    rax,QWORD PTR [rsi]
           3:   48 89 07                mov    QWORD PTR [rdi],rax
           6:   c3                      ret

It says next that "int8_t and uint8_t Are Not Necessarily Character Types." That is indeed a good point and probably not well-known. So I agree this is something people should keep in mind. But most of this article is warning against practices that are generally unnecessary and known to be bad C in 2016.

It's true that a lot of legacy code-bases still break these rules. But many are cleaning up their act, fixing practices that were never correct but used to work. For example, here is an example of Python fixing its API to comply with strict aliasing, and this is from almost 10 years ago: [https://www.python.org/dev/peps/pep-3123/](https://www.python.org/dev/peps/pep-3123/)

<comment><USER10> Josh, what's your opinion about this situation?

[https://goo.gl/3hz0em](https://goo.gl/3hz0em)

<comment><USER4> It's undefined. But the same thing would be undefined in C++, a language that has inheritance built-in: [https://goo.gl/shOJi1](https://goo.gl/shOJi1)

You can't downcast to a derived type if the object isn't actually an instance of the derived type. That seems straightforward, no?

<comment><USER10> It doesn't seem straightforward to me: you're using words like base and derived that aren't in the C standard.

<comment><USER4> If we talk in terms of concepts that exist in the C standard, we would say that you can't cast an object to pointer-to-X unless your pointer actually points to an X.

The reason your example is illegal is that you are casting to pointer- to-"struct derived", but the thing being pointed to is not actually a "struct derived."

The "physical subtyping" pattern works because the C standard says that a pointer to a struct, suitably converted, also points to its first member. So a pointer-to-Derived, converted to a pointer-to-Base, points at Derived's first member. But a pointer-to-Base doesn't point at a Derived unless that object actually _is_ a Derived. So the downcast is only legal if the object actually is a Derived.

<comment><USER10> Looks like your other comment hit the max reply depth so this will need to finish up, but in any case I don't agree with your reading of the vice versa.

<comment><USER10> Replying to myself because depth limit.

Let me try to think of a good way to update the post to capture this better...

<comment><USER4> There isn't actually a depth limit (or if there is we haven't hit it yet :). HackerNews just hides the "reply" link for 5 minutes or so to cool down flamewars.

You can work around this by clicking on the link for the post itself (ie. "3 minutes ago") which allows you to reply immediately.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> ... I am so happy I don't code in C right now. That's icky.

<comment><USER12> C++ is just as bad :)</comment></comment>


Fvck school (2012) - <AUTHOR> http://byfat.xxx/ben-shahn <comment><USER2> It comes down to this: if you're wondering whether going to/staying in college is a good idea, you need to first examine the quality of your alternatives. Are you an 18 year old programmer with solid skills and a job offer in hand? College might not be worth the time or money, fair enough. Are you an 18 year old with no transferrable skills and a weak network? Do yourself a favor and go to college.

Bill Gates had a good alternative, so he dropped out and pursued it. Mark Zuckerberg had a good alternative, so he dropped out and pursued it. My friend from high school who dropped out his sophomore year and now works part-time at Best Buy did not have a good alternative, and now he's kicking himself.

People who say "college is good" or "college is bad" as blanket statements are oversimplifying the issue. Yes, college is still a decent way to get a good job and it can be intellectually enriching, but it takes years out of your life to finish and is (at least in the US) insanely expensive. Yes, college is insanely expensive and it takes years to finish, but it may end up being a good investment, and you may be personally better off for it in the long run. Individuals need to decide, based on their current position, which would be the wiser choice.

<comment><USER3> This is a well balanced and fair summary. Of course if you want to go to college for the wrong reason you won't be happy, and of course if you drop out and get a job for the wrong reason, you still won't be happy. It's the [expectation vs. endeavor] that needs to be considered.

</comment></comment><comment><USER4> Do your time, get your degree it will open doors for you. It might not be the best system, but it's the one most employers recognise. I fear arguments like the one in this post could sabotage young careers needlessly. A friend of mine decided he'd learn more about the real world getting a job than getting a degree, he now works a min wage retail job in his mid 30s.

<comment><USER5> This. This. This. So many people also lack fundamental skills that you learn formally, with structure, in a formal education system. I would also argue that the learning process in school helps you develop your process for learning later on, which you need to be good at to survive.

<comment><USER6> >I would also argue that the learning process in school helps you develop your process for learning later on, which you need to be good at to survive.

I couldn't disagree more with this. The way school taught me to learn was one of the most egregious things I've ever had to unlearn. You are taught to remember facts instead of exploring concepts.

<comment><USER5> "If you really can't see the value in a scientific degree, I think you either didn't work hard enough, pay attention, or go to the right institution." from another comment would apply here. I am learning so much better than I ever could from hacking together solutions from tutorials, reference docs, and examples. At least for me, this is how I learn.

</comment></comment></comment></comment><comment><USER3> I agree with the comments from fny and xupybd here. I'd also like to say that I think his categorical dismissal of a CS degree is pushing it:

> more over I don't think these successes owe their brilliance to the > institution which awarded them their document.

Yeah, their professional brilliance can be attributed a lot to things other than school--programming knowledge itself is more frequently learned on the job or a programming school, but this isn't the point of a CS degree. But anyone who's been to enough theoretic/scientific classes at a University to study something really interesting, or to meet a truly amazing professor will say that they owe a lot to the institution for adding to their mind new ways to think, see things, and learn things. If you really can't see the value in a scientific degree, I think you either didn't work hard enough, pay attention, or go to the right institution.

It's not all about your job. If all you're concerned about is a job and programming knowledge, by all means, self-teach yourself or go to dev bootcamp. University is about intellectual stimulation (for lack of less pretentious terminology). This is the reason we've been going to universities for hundreds of years now, and maybe they're not perfect, but if you go for the right reason you definitely won't regret it.

</comment><comment><USER7> For "softer" subjects, I couldn't agree more, but good luck playing with rockets, brains, buildings, and quanta without school. For the "hard" subjects, a student gains a certain expertise and rigor in an academic environment needed before she can create her works of art.

<comment><USER8> There used to be a not-quite joke that the UK's art colleges produced the UK's top pop talent.

It was a not-quite joke because it was true. Art schools were much better at producing creative musicians than the music colleges, because they taught creativity and experimentation, not just mechanical technique.

>a student gains a certain expertise and rigor in an academic environment needed before she can create her works of art.

It's more usual for students to learn a stock set of academic techniques and philosophies, which are really just there as a form of social signalling that qualifies them for tenure or adjunct track professorships making academic art.

Unfortunately academic art values theory, technique, and philosophy over direct expression, so it's rare for academic art to have much of an audience outside academia.

CS has a similar problem. I think it would be incredibly valuable for everyone doing a CS degree to combine with it a non-technical creative minor, preferably working on a collaborative project with someone with an arts background. It would highlight how brittle code is, and how attempting to model an open problem domain with relatively trivial code constructs can miss a lot of important detail and subtlety.

</comment></comment><comment><USER9> I dropped out after two years of college and don't regret it even for a second. These days, I'm:

-Doing data analysis with pandas on parking tickets just because it's fun and it helps people.

-Freelancing for HFT firms and doing low level performance tuning.

-Playing the drums.

-Suing Chicago's mayor.

-In the running for an amazing security engineer job.

-In the works to start algorithmic trading.

-Helping setup a giant LAN party as one of four cofounders.

A huge part of me thinks that if I'd continued college, I wouldn't have had a chance to do even a single one of these. My mental model would have just been too hyper focused towards Getting Paid to allow the mental flexibility to say "I can do/learn that!" in most scenarios. I seriously don't consider myself particularly smart/intelligent - most of what I know these days is just learned through hard work and genuine curiosity, which college hugely inhibited.

One of the other comments mentioned that degrees open the door for you. Yes they do, but the places I've seen and worked at where that matters are incidentally the worst I've worked at. Self education goes a long way as long as you teach yourself how to learn before you start learning. Employers are often very impressed by that quality, so it's still definitely possible.

That said, many folk don't like the fact that I didn't to go college. There's often a lot of animosity with mentions of student loans and knowledge depth over width. "Jealousy" comes close, but it's more seething and exclusionary than that.

College is useful if you want to learn things, but often a quicker and more holistic way to learn is to skip college altogether and teach yourself and save your future self from asinine student loans. This goes for folks who're able to get their student loans paid, too. Maybe especially, since you have the money to get an apartment to learn your desired subjects, but also about life. :)

(edit: if this sounds arrogant, please let me know. I'm trying to better myself and humility's a strong one I need to work on.)

<comment><USER5> Anecdotal evidence doesn't work though. The majority of "good" software jobs don't just want anyone. The average person can't do all the things you just listed. The average person can't market his/herself without a degree effectively.

I feel like we all know success stories, but I would say I have worked with a lot more phds than I have people without a degree. Does that mean that everyone needs to get a phd? No. You can be successful with any level of education, but it's unwise to advise any student to go for this without being exceptional.

EDIT: I have worked/am working at 3 companies, a non-profit, Tableau, and Intentional Software. I'm 21. I'm a student. Across the ~100-200 engineers I've met, I've been the least educated.

<comment><USER9> Replying to your edit -

It sounds like you're an exception and a smart person, then. No sarcasm there.

The problem with being exceptional is that you tend to think of everybody else as exceptional, so the ones who'll naturally fail don't really have a fallback. One fallback can be self learning, but the crazy culture of "College dropouts only work at Best Buy"[0] prevents them from being able to get back on their feet.

(Of the 1,500 or so engineers I've worked with, I've only known one other person with less education. He dropped out of high school and started worked directly for Wolfram ;).)

[0] It's funny how earlier I was accused of using myself as anecdata earlier, but that same user emphatically agreed with someone who used their friend's dropout failure story as evidence that college dropouts will fail. It's so one sided... Editedit: oh, it was you. Yeah, check it out. It's kinda funny.

<comment><USER5> I just meant that despite the exceptions like you that are doing awesome, the typical high school educated person makes less than a college educated person.

Hahah sorry, I'm not crazy smart or exceptional! I work really hard, and that's it. I mean to say that for most people, they aren't like you. They can't succeed like you. I got incensed over the article and wanted to tear it down because I'm so disenfranchised with European "dream education" and see anything against conventional us education similar. Anyway, I think you made the right choice presented with what I have. You seem to have had the skills to make it without a degree, and that's amazing. I'm not sure I would have made it without having UW get me noticed by companies and tell me what I need to know. I feel like most students are more like me. Anyway, I don't want to tear you down in a fit of passion. You seem like a cool, successful, guy, and best luck with your court case and even more with drumming (I'm in marching band at my uni hahah).

</comment></comment></comment></comment><comment><USER10> "Here English should be understood as a stand-in for any field which could be held in dialectical opposition to Computer Science: anthropology, criminal forensics, art history… Pursuing knowledge in this way, much like learning a new language, not only introduces you to, but installs you within, new diverse cycles of thought and promotes a creativity which I think is essential to excelling, dominating, or "winning" at Software Development."

I think I agree with him. In my university, most of the staff was kind of dilettants - I always reasoned that it's because a good teacher should master his subject and once you master it, you probably won't want to settle for 1/5th of the regular wage...

<comment><USER11> diametrical (FTFY) #GN

</comment></comment><comment><USER12> I really liked learning in school. Many of my intellectual interests today would not be so if I didn't learn, for example, a bunch of stuff about linguistics. I don't know if a college education is worth its cost these days, but I think there is a lot of value in it.

There will always be time to work, and to be good at your job. School can be more than that. Pretty much everyone shits on college these days, and I certainly understand why, but this shouldn't be looked at as anything other than conventional wisdom at this point. It's not a cutting-edge take or anything of the sort.

</comment><comment><USER13> If you drop out you'll probably learn more but life will get harder.

School is a wonderful soap bubble and the trouble is not so much "drop out or don't" as much as it is "do we have a place for aspies in our English programs?"

Computer Science departments are _not_ a safe compromise. The conflict @fat is trying to articulate is between those with a place in the school system and those without.

</comment><comment><USER14> As a (former) non-U.S. CS student (although I still haven't officially dropped out) from a European country (but _not_ a part of the EU), college was a huge waste of time in my case.

There were a couple of hints all over my two years in college, but the biggest one was when I managed to convince my professor that our college FTP server is not secure by showing her a Wireshark packet in which I have submitted the password to the FTP server and convincing her that the server replied to my connection with a password (which, of course, doesn't make any sense what so ever).

Plus I was not able to convince the college staff that a self-signed certificate in our online learning platform is not a good solution. And I found one security exploit in the custom CMS they were using (privilege escalation just by tweaking the URL).

When I got to the point where I had a server administration course taught with the Windows server explicitly, I've decided to freeze my education.

I got into a good tech internship and now I finally have the chance of actually learning something useful (Python / Linux administration / a bit of front end programming / whatever is necessary since it's not a tech organization, but a journalistic organization with a highly skilled tech team) by actually doing some interesting things.

<comment><USER15> College is a huge waste of time. But then again so are a lot of jobs.

If you don't care about college because of all the bullshit and dumb people, just wait until you enter the workforce!

Probably best to go ahead and go for most ambitious people. Besides, those years are a lot of fun if you do them right. It's not a great system and certainly not the best way to learn, but for the foreseeable future it is the most sure path toward increased financial success. But I do understand your frustration... I barely got out myself because of similar experiences (in a different field but same type of nonsense).

</comment></comment><comment><USER16> Before I went to university I did a lot of UI and web design with very light programming here and there.

In school I studied computer science because I knew I liked computers and I didn't know what else to do.

Being around a bunch of intellectually serious people (not in my program so much, more the musicians and literature and biology students), I pushed myself to develop a perspective as a scholar and an intellectual. I ended up studying opera for a year and doing a minor in psychology. Both of those experiences, plus the experience of being pushed hard in some key computer science contexts (particularly programming language theory) were immensely formative for me. I can't imagine doing what I'm doing now (designing platforms for software development) without all of those experiences.

I could've easily skipped school and just gone straight into industry. I was already earning $15/hr doing web design in high school (~1998).

I'm not sure where that would've led. If I have to guess, I would've probably ended up a web dev in Boston and I would be a very wealthy WASPy family man in the suburbs now at 34.

As it is I am an artist and an intellectual in California. I am actually "in the world" in a way I don't think I would've been if I hadn't been pushed through the intellectual ringer for so long. But it turns out the world is a bleak place compared to the relative safety of where I started. I think I've gone much further towards making something of myself but I am much less happy than I would've been. The Tree of Knowledge allegory is much weightier and more frightening to me now that I'm older. As a child knowledge seemed like a silly thing to villify.

It's so hard to say what would've been though.

</comment><comment><USER17> Frankly, school is going to be such a small drop in the bucket of what your career will look like, that it shouldn't much matter whether you go or not. Your success will be determined by a continued habit of learning forever thereafter. This overemphasis on the importance of choices made in school devalues that.

<comment><USER18> Yup. I find it strange that this comment is at the very bottom currently.

Anyways, I've been a freelancer right after a somewhat prestigious CS school, and I've never needed to show my degree.

That being said, I did learn some concepts that I doubt I'd have gotten too far into had I not been forced (OS, compilers, AI), which give me the edge when I need to learn more in those subjects in my gigs.

Also, I feel it gave me some confidence in what I do – an ego boost, if you will. Some may not need it, but I always have that degree to fall back on, if need be.

Overall, I don't regret it.

</comment></comment><comment><USER5> I am a junior at a target CS school in the US. I'm currently studying in Europe at Sweden's KTH, reputed as one of the top engineering schools in Europe/Scand. I loathe all the "EUROPE IS SO MUCH BETTER!111!!!!!" posts everyone makes because I always feel like it's out of touch and hip to say to. The culture here in Sweden is way more relaxed. This is definitely NOT a catchall, but a catch-some, sort of statement, even if I do interact with mostly Masters students from across Europe, probably >50% of my classmates. It's not as rigorous here, and it's not as if the students are still "killin' it!" because I have been in exclusively project classes, and the projects presented have been pretty mediocre. Most students aim to pass. Few students in my MASTERS LEVEL classes (bear in mind it's 4/5 year students unlike in the US) have NEARLY the chops of any kid in my undergrad CSE program, and I've been in 4 groups now with around 30 students and obviously talk to many more. I'm frustrated because everyone hates on this system, but it's allowed me to perform so much better technically than any of my classmates here that I've interacted with. Also, His comment that "you may need to reinvent the wheel sometimes" applies to so few. I am going to be designing REST APIs or similar for years, I bet. I am going to need to know reasonable HCI for years, I bet. So many people don't learn the right idioms. The right design patterns. Every internship I've had has "man, sucks that we taught ourselves this technology instead of learned formally" or "man, this stack was built by non-engineers and is an un-maintainable monolith." I can't take these statements seriously. You can learn programming by yourself. You can be way better than I'll ever be through self teaching, but I feel like this is similar (but to a much less extent) logic to, "Bill Gates dropped out of college!!!11!!!!", and it's just NOT true for MOST people. The comments before me are SO right that it's career jeopardizing.

</comment><comment><USER10> I find that relevant: [https://www.youtube.com/watch?v=8xe6nLVXEC0](https://www.youtube.com/watch?v=8xe6nLVXEC0)

<comment><USER19> That brings up a pretty good point. Are there any schools currently teaching these types of curriculum?

<comment><USER10> I think that the singer said in some other video that he made some influence - not directly this kind of curriculum, but an improvement towards that.</comment></comment></comment>


How do I draw a pair of buttocks? - <AUTHOR> http://mathematica.stackexchange.com/questions/66538/how-do-i-draw-a-pair-of-buttocks <comment><USER2> This is amusing and then impressive (and still safe for work).

<comment><USER3> I dunno. mikuszefski's answer is kind of borderline, especially with that shading!</comment></comment>


Change your mental perspective - <AUTHOR> http://www.lanceramoth.com/blog/2011/07/change-your-mental-perspective

<comment><USER2> Absolutely, and the deeper you go the greater the impact. Change an axiom in your mind and watch your world change. :)

</comment><comment><USER3> Thank you Lance. I needed to read that.</comment>