Study of 160k men finds no all-cause mortality benefit from prostate screening - <AUTHOR> http://www.nejm.org/doi/full/10.1056/NEJMoa1113135

<comment><USER2> To clarify the Hacker News title, the article is talking specifically about prostate-specific antigen (PSA) screening, which is already known to be of uncertain medical value except in some very specific situations. As the discoverer of PSA said, "I never dreamed that my discovery four decades ago would lead to such a profit-driven public health disaster. The medical community must confront reality and stop the inappropriate use of P.S.A. screening. Doing so would save billions of dollars and rescue millions of men from unnecessary, debilitating treatments." <http://www.nytimes.com/2010/03/10/opinion/10Ablin.html>

There are other more promising methods of prostate cancer screening in development that will hopefully be able to do better in the future.

<comment><USER3> From the link you posted:

"last month, the American Cancer Society urged more caution in using the test"

It's a very sad state of affairs when a test that unambiguously offers some statistical utility (speaking as a Bayesian, _any_ test is useful if we do the right things with the results, this is quite literally a provable theorem of decision theory) is potentially problematic because we aren't properly evaluating what to do when we get the results. I can't blame patients here, they're not the experts; it's doctors (and perhaps more fairly, the entire medical research industry) that need to wise the fuck up and realize that they're acting as statistical dilettantes in a field where they're putting patients lives at risk because they don't understand math very well.

Yes, even a test that only detects ~3% of cancers should be useful; but this requires that doctors completely understand what it means both to see a positive and a negative result, and don't overreact when they see either one.

If this was a matter of just weighing the costs of having tests done versus the benefits of getting the results, it would be one thing. But it's not. People actually end up suffering and spending great amounts of money just because they did "the right thing" and had tests run, and then listened to the doctors' advice afterwards.

Once more with feeling: after discounting for the cost of the test, there is no test that should be of negative value for a rational agent to take. The results should _always_ be used in a way that, in general, increases the welfare of the people taking the test.

If this is not the case in medicine, then they're doing something seriously wrong mathematically speaking, and this is a very bad thing that should be a high priority to fix.

<comment><USER4> Unless taking the test has a cost in and of itself -- such as if it requires surgery, so that the risk of something going wrong during testing might outweigh the information gained if the condition being tested for is rare.

<comment><USER3> Yup, definitely, I should have made that more clear than it was (I did mention "after discounting for the cost of the test", but it wasn't as obvious as it should have been). Test costs have to be weighed against benefits, but that whole process involves a lot more statistical sophistication than is typically applied in practiced medicine. Researchers are slightly better, though it's fairly common even for them to make hideous statistical mistakes, which is a real problem in the field.

IMO, if pre-med requirements included a bit more statistics and a bit less biology, we'd all be better off...

<comment><USER4> Ah, I missed that you included that.

</comment></comment></comment></comment></comment><comment><USER5> It looks like this is the 2 year follow up to a previous study.

"Analyses after 2 additional years of follow-up consolidated our previous finding that PSA-based screening significantly reduced mortality from prostate cancer but did not affect all-cause mortality. "

So, if I follow this correctly, your odds of dying from prostate cancer are still definitely lowered by screening, but your odds of dying overall are not. Perhaps this indicates that people who would have gotten prostate cancer are the sort of people (via lifestyle, genetics, diet, etc) who would die of something else anyway.

<comment><USER6> Somebody correct me if I'm wrong, but here's the way I understand it. One of the major problems with PSA-based screening is false-positives. Getting a false-positive result for cancer could certainly increase your risk of an early death. Cancer treatments put a lot of stress on you physically, and the diagnoses could also cause a lot of mental/emotional stress. Stress of either kind reduces life expectancy.

<comment><USER3> False positive rates should be understood by the doctors that recommend treatments, though. A doctor _should_ be able to accurately tell a patient what the chance is that they suffer from a disease based on a positive result from a test.

Unfortunately, doctors tend to be terribly bad at this - they are generally quite inept at incorporating prior probabilities into the estimates, and assume that (for instance) if a test has only a 1% false positive rate, then that means a positive result means it's 99% certain that you have whatever it's testing for.

If it's not immediately obvious why that's an idiotically dangerous assessment, then you need to think a bit about a rare disease that only shows up in 1 out of a million people, and then consider the 10,000 people that will test positive for it at a false positive rate of 1%. Don't worry, most doctors don't get this right at first, either, and they will happily suggest to all 10,000 of those people that they seek aggressive, even life-threatening treatment...the difference, of course, is that they're goddamn doctors, entrusted with keeping people alive, and they really ought to know better, whereas you're just some person on the Internet.

<comment><AUTHOR> A classic systems problem. If something is this important, you don't leave it up to the decision of thousands of inhomogenous physicians. You create a system that ensures they don't even get to choose to get it wrong.

</comment></comment></comment></comment><comment><USER7> If you're interested in how our ability to detect cancers (and other diseases like diabetes and osteoporosis) has surged ahead of our ability to know when treatment is effective, I highly recommend Overdiagnosed by Welch, Schwartz, and Woloshin.

Right now medical science seems to be at an uncomfortable phase with certain diseases where we can't be sure our treatments will have a greater benefit than the cost of the treatments— and not just in terms of price, but at the expense of our health itself.

[http://www.amazon.com/Overdiagnosed-Making-People-Pursuit- He...](http://www.amazon.com/Overdiagnosed-Making-People-Pursuit- Health/dp/0807022004)

</comment><comment><USER8> Actually there _was_ a reduction in all-cause mortality. It's just that the study's design was such that the reduction could possibly have been due to chance. This is _not_ at all the same thing as "finding no ... benefit".

This lack of statistical significance is probably mainly due to the small size of the study (160 men).

Note that the reduction in death rates from prostate cancer was large in practical terms and (statistically) significant.

Prostate cancer kills a minority of men. Take this fact, add in the fact the study was small, and then throw in all other causes of death (which vary randomly) then it is not at all surprising that the result was not _statistically_ significant. This is mainly due to a small study and noise from other causes of death.

I for one am going to keep having my PSA tests.

<comment><USER8> Having said that, the state of Prostate Cancer treatment and the lack of research into Prostate Cancer is a disgrace.

Prostate cancer kills similar numbers to breast cancer yet gets half the research funding. Thank goodness we live in a patriarchal society or the ratio would be even more in women's favor.

I have watched two male relatives die of Prostate Cancer and it is not a good way to go.

</comment></comment><comment><USER9> For those unfamiliar with the term "all-cause mortality":

[http://answers.yahoo.com/question/index?qid=20090813211127AA...](http://answers.yahoo.com/question/index?qid=20090813211127AATsc0e)

</comment><comment><USER10> Thank you for phrasing this in terms of all-cause mortality. If only every academic study (and submission) used this as a metric, the world would be a vastly better place.

<comment><USER11> I doubt it. If you relied on all-cause mortality for every study, you'd never get out of phase I trials.

<comment><USER12> Majority of "drugs" do not improve outcome. They "improve" condition.

</comment></comment></comment><comment><USER12> Put another way, prostate screening does not improve outcome at all. In fact, given the horrible treatment involved, it degrades life quality while not improving outcome.

</comment><comment><USER13> "Modern medicine" is in the stone ages due to the profit motive. Cure stops all income while "treatment" keeps the money coming in.

</comment><comment><USER14> Seems like these results could be unfortunately easily misrepresented or misunderstood by people.</comment>


Icon UK 2017 Conference cancelled - <AUTHOR> https://iconuk.org <comment><AUTHOR> Icon UK, the UK IBM Notes User Group conference has been cancelled for 2017. Is this another sign for the future of IBM Notes?</comment>


Stupid RCU Tricks: Enlisting the Aid of a Debugger - <AUTHOR> https://paulmck.livejournal.com/58616.html <comment><USER2> For tips on using gdb with the Linux kernel: [https://nickdesaulniers.github.io/blog/2018/10/24/booting-a-...](https://nickdesaulniers.github.io/blog/2018/10/24/booting- a-custom-linux-kernel-in-qemu-and-debugging-it-with-gdb/)

I extended our Qemu boot smoke tests to auto enable gdb with one additional flag, and I know use this all the time: [https://github.com/ClangBuiltLinux/boot- utils/commit/6c8c52d...](https://github.com/ClangBuiltLinux/boot- utils/commit/6c8c52dbfc2693ebb262407d11040bafc339de28)</comment>


JavaScript zip code to state conversion - <AUTHOR> http://www.zacharyburt.com/2010/02/javascript-zip-code-to-state-conversion/ <comment><USER2> This is going to be wrong for some of your users, because some ZIP codes cross state boundaries. So you'd need to let them correct the guess in that case. It is unusual for one zip code to be in two states, but it does happen. [1]

It's also going to be wrong for military addresses, as I understand it. [2]

[1]: <http://en.wikipedia.org/wiki/ZIP_code#By_geography>

[2]: <http://www.usps.com/supportingourtroops/addressingtips.htm>

<comment><AUTHOR> Which zip codes span multiple states?

<comment><USER3> <http://en.wikipedia.org/wiki/ZIP_code#By_geography> check the unordered list at the bottom of that section

</comment></comment></comment><comment><USER4> Be warned. The code relies on a list published in 2004. But the list of zip codes changes regularly. For instance 4 new zip codes were added in Dec, 2009: <http://maps.huge.info/blog/2009/12/new_zipcodes_200912.html>

Unless you're going to keep your list up to date, this code will break from time to time.

<comment><USER5> Then it would be better run as a service like Google Ajax API.

</comment></comment><comment><USER6> Here's a ruby version, smaller more compact and easier to update (probably more correct too):

      def state?(zip)
       case zip[0]
        when 0 then states = ['CT','MA','ME','NH','NJ','PR','RI','VT','VI','AE']
        when 1 then states = ['DE','NY','PA']
        when 2 then states = ['DC','MD','NC','SC','VA','WV']
        when 3 then states = ['AL','FL','GA','MS','TN','AA']
        when 4 then states = ['IN','KY','MI','OH']
        when 5 then states = ['IA','HN','MT','ND','SD','WI']
        when 6 then states = ['IL','KS','MO','NE']
        when 7 then states = ['AR','LA','OK','TX']
        when 8 then states = ['AZ','CO','ID','NM','NV','UT','WY']
        when 9 then states = ['AK','AS','CA','GU','HI','MH','FM','MP','OR','PW','WA','AP']
        else return null
       end
       return states
      end

<comment><USER7> That will be useful for narrowing down the states, but it doesn't actually convert zip code to state.

It just converts first digit of zip code to list of states to which it could apply.

<comment><USER6> There is no exact way to pump it out. No part of the Zip code actually comes down to a city.

      [#][##][##]
      [State][County/Parish][Area]

Instead you should be giving your users a choice made on exact facts instead of probabilities.

</comment></comment></comment><comment><USER3> I used to work for a company that had a large number of constantly-AB tested web forms that required an address, and we tried auto-filling the state (and state/city) from ZIP, as well as only asking for ZIP and it actually dropped our conversion rates, in every case.

Our data could have been inaccurate in some cases (but I seem to remember testing a few hundred addresses vs google's geocoder and getting correct results).

The demographic wasn't very tech focused, so it could be that they were either weirded out, or (in surprisingly many cases) just didn't know their zip code.

Anyway, just make sure to test this before blindly assuming that it increases usability in your case.

<comment><USER8> Addresses are mainly important for store checkout. A good way to grab the zip code first is to ask when calculating tax and shipping in the cart. When they check out, just default to the zip and state, then ask them to verify on the last step.

A good way for the server to detect user error would be to use IP2location. Unless they're using a proxy or VPN, you could add something that would ask the user to double check if their IP location was more than 100 miles from their zip code. But the user could always override that warning.

<comment><USER8> How accurate is this?

<http://www.geoiptool.com/>

</comment></comment></comment><comment><USER9> Seems so simple. Why isn't this used more?

<comment><USER10> I've often thought about this. In the US, addresses are traditionally written in the format:

[City], [State] [Zip]

The state (and often even the city; there are free datasets for this though they're not perfectly reliable and more expensive) can be inferred from the zipcode, so it seems logical that we ought to prompt first for the zip and then help users along by filling the state on their behalf. I suspect his is not done because people are so used to the City -> State -> Zip pattern, asking them to fill the zip first just breaks their expected flow; a "surprise" that makes them think.

I used to work on a case management system for legal aid attorneys that did these lookups and we had to explicitly train them to enter the zip code first (changing field order or tab order didn't help) -- otherwise, they'd never have used it; and some of them still refused to use it, but those who did appreciated the time savings.

<comment><USER9> When I think about it, I'm thrown off by this pattern whenever I see it, too.

It's also interesting to think about text input versus dropdown select if you decide to go for manual state entry. I prefer just typing in the abbreviation, but I'm not sure that's suitable for a wide audience.

</comment></comment></comment><comment><USER11> This is even easier for Canada, since the first letter in a Canadian postal code identifies the region (usually a province or territory, but sometimes smaller areas, and in the case of X, two territories).

[http://en.wikipedia.org/wiki/Postal_codes_in_Canada#Componen...](http://en.wikipedia.org/wiki/Postal_codes_in_Canada#Components_of_a_postal_code)

</comment><comment><USER6> I just found this: <http://www.census.gov/tiger/tms/gazetteer/zips.txt>

So here's my solution:

      def state?(zip)
        zip_code_list = File.open('zips.txt')
        suggested_list = zip_code_list.grep(/(.*"#{zip}\d+".*)/)
      end

</comment><comment><USER12> For a few apps, I've used census data to derive city and state from zip code.

It seemed like a disruptive flow to me too, until I asked for zip without showing any other address fields. On change, the address and prepopulated city and state fields slid down above it and address got focus.

</comment><comment><USER13> Approach I have used for U.S. with some success...

Objective: Deliver complete address with minimal keystrokes.

Constraint: User can type whatever they want.

Approach: One text box for address. Reevaluate with each new key entered. Use lots of indexed tables (zip codes, cities, states) for verification. Reformat when they leave the box. Provide help, autofill, undo, dropdowns, and error message feedback.

Some of the logic:

\- 5 consecutive integers: verify zip code. Autofill city and state. If multiple cities, dropdown for choice.

\- 2 alphas and a space: verify state.

\- 3+ alphas: verify city. Dropdown for State.

You kinda get the idea. There's probably a lot more optimization that could be done. It's worth it because it's used in so many places.

<comment><USER5> Do you have a demo running anywhere?

</comment></comment><comment><USER14> This is hardly used in the US because a lot of things depend on the city and county of a property. And sometimes one zip code overlaps several counties or cities. Besides, everybody insists on using the city/state/zip entry pattern.

</comment><comment><USER15> Unless you only want to get a users home location make sure to allow them to search by city/state since most people don't know zipcodes for places they're researching for travel/work.</comment>


iOS 13.5 Makes It Easier to Unlock an iPhone with Passcode When Wearing a Mask - <AUTHOR> https://www.macrumors.com/2020/04/29/apple-ios-13-5-passcode-unlock-faster/ <comment><USER2> Great to see this. It has been really annoying while wearing a mask!

I'm surprised it took this long after seeing how common masks have been in Asia over the years.</comment>


Famous websites UX evolution across the years - <AUTHOR> http://uxtimeline.com/ <comment><USER2> Nope - "Famous websites UI evolution across the years" - site explains nothing about the UX thinking behind these changes.

:)

<comment><AUTHOR> I couldn't more agree !</comment></comment>


2018 Deloitte Millennial Survey [pdf] - <AUTHOR> https://www2.deloitte.com/content/dam/Deloitte/global/Documents/About-Deloitte/gx-2018-millennial-survey-report.pdf <comment><USER2> I find it very strange that, according to this study, Millennials and Gen-Z have more faith in business leaders than in politicians. Maybe if they collectively went out to vote instead of staying at home (2016 US presidential election only had a <50% turnout for these groups), they could actually make a difference instead of continuously complaining about how politicians are allegedly ruining their lives.

I also fail to see how business leaders that neither have legislating power (besides influencing politicians, which I assume again counts against politicians) nor are interested in anybody not giving them money, could make the world a better place. E.g. Elon Musk, who is regarded by many as a visionary for a better world, is notoriously anti-union. He doesn't want a democratic entity in his businesses.

The gig economy (which both groups are apparently liking so much) is an absolute scam. Traditional businesses are getting "disrupted" by the deep pockets of SV VC money to push all (existing and working) competitors out of the market to establish a monopoly or duopoly. See Uber, Airbnb, various food delivery services, etc. which are continuously creating problems for their "workers" (that they insist they don't employ) or others around them (worsening the affordable housing problems like in Berlin and Amsterdam). People put themselves into these markets and lose everything their ancestors fought for, including 40h weeks, paid vacation, health insurance, paid sick leave etc. In the EU it's even worse where all those things and more are guaranteed to employees by the state to a much larger extend.

<comment><USER3> Practices that work during a growth phase rarely work effectively when an organization (business, country, etc) has reached the latter states of its lifecycle.

One example is unions: they organized and protected workers in a period when companies were maturing.

The growth phase is over. Now that such protections have been augmented by retirement funds and pensions, businesses have little room to maneuver when an economic downturn hits. Unions prevent those businesses from being able to maintain competitive pricing in global markets due to labor costs, so those obligations eventually put the company out of business or force it to move operations - normally out of sheer survival since other companies in the space will be doing the same.

The end result is that, in a mature market, unions can strangle a business until both that business and the retirements of employees are lost.

Many other points exist that may seem counterintuitive without understanding the perspective of both the employer and employee as well as international capital flows and cycles.

<comment><USER4> How do unions work so well in Germany? I've heard the whole system is different from American unions and less adversarial but I don't know the details.

<comment><USER5> Part of it is just politics/culture, I imagine. Unions are mainstream in Germany, so German unions' positions on various issues are also mainstream. From what I hear unions' in the US have more fringe positions.

<comment><USER6> Unions aren't fringe.The US populace is more fringe right-wing relative to Europe.

</comment></comment></comment></comment></comment><comment><USER7> I wonder how many of millenials' problems are due to baby boomers reaching their peak wealth/earning capabilities, likely continuing for another ~15 years. Certainly this would be a huge impediment to career advancement in industries outside of tech, as well as making buying a house very difficult

I'm also tired of all of this inexact labeling of "generations" rather than explicitly identifying these groups by age. I think creating a split between "millenials" and "Gen X" and "Boomers" fosters an us vs them mentality that does more harm than good. My parents are "boomers" and I've started hearing them talking about how Millenials are X Y and Z (mostly bad things). I doubt they would be as willing to say the same of "young people" or "young adults". Most age-related issues aren't due to intrinsic cultural differences but the combination of economics and demographics

<comment><USER8> >likely continuing for another ~15 years

It's not that simple, I doubt the boomers working at Google now are the one creating problems and preventing the company from moving forward.

When you see how much stuff they did for ahead of their time ( Big Table , Piper etc...) and now the same tech is being ported to the cloud.

My point here is to say that it's a mentality issue rather than an age issue. If the companies you are working did not invest to transform you and to make you adequate toward current society , you are going to slow down your company otherwise you'll be just fine.

>I'm also tired of all of this inexact labeling of "generations"

The age group are identified page 3.

I personally consider this labelling accurate , but as you mentioned it "boomers" are okay to label others but not to be labelled themselves.

<comment><USER7> Tech is a bit of an exceptional situation since it's extremely dynamic and growing, plus there are a lot of youngish people in the upper echelons. I'm thinking more of older, more established industries, which are what the vast majority of people work in.

That's not what I meant regarding the age. I mean that the same labels are often applied to different age groups; there are multiple definitions. And also, the labels convey a kind of cultural significance that I think distracts from the more important differences. It's easy to say that "Millenials deserve everything they get because they're lazy and entitled", not so easy to say "Young people deserve everything they get because they're lazy and entitled."

<comment><USER6> Old people and young people disrespecting each other is a popular pastime since the dawn of history.

</comment></comment></comment></comment><comment><USER9> Was anyone else annoyed that the color for Millennial vs Gen Z kept swapping back and forth in the doc?

</comment><comment><USER10> Interesting, any idea if they release the full (individual response level) data?

</comment><comment><USER11> I really can't wait until we're finally old enough that we don't need these asinine "how to understand millenials" style articles and reports.</comment>


Ask HN: Best solution to manage early startup tasks? - <AUTHOR> We are currently a small team (around 5 people) and we use mostly GitHub issues and emails to keep track of our work. We like GitHub issues a lot, but we end up using it also for not-coding related work. Any ideas to improve on that? <comment><USER2> Why do you think using ticket system for non-programming tasks is a problem?</comment>


MS washes its hands of the UEFI/Linux mess - <AUTHOR> http://www.itworld.com/it-managementstrategy/207277/microsoft-washes-its-hands-uefilinux-mess

<comment><USER2> RMS made this prediction in 2003. Most people called him crazy and fringe at the time, but he was 100% right. Here's a quote:

"Some versions of treacherous computing would require the operating system to be specifically authorized by a particular company. Free operating systems could not be installed."

Source URL: <http://www.gnu.org/philosophy/can-you-trust.html>

<comment><USER3> Apple proved him right long before this. But there was no outrage against Apple, since they make shiny things that everyone likes. And people actually liked the security that this gave them. The battle was lost then.

<comment><USER4> I don't remember a time I couldn't put linux on an apple. Maybe I'm wrong or forgetting something.

<comment><USER5> iPhone, iPod Touch, iPad

<comment><USER6> If those are the examples, can't we go further back and blame other cell phone manufacturers? Or get mad that Nintendo didn't make it easy for us to put our own OS on the NES?

</comment></comment></comment></comment></comment><comment><USER7> Wouldn't this entire situation be solved by simply including an option in the UEFI firmware to disable secure boot by the user? That would allow a power user that wants to install an alternate OS to disable the feature and install anything they'd like.

I understand that this may affect dual-booting. In those cases, we already know that Windows 8 will boot in non-secure scenarios (like on existing computers, including those with UEFI firmware). So wouldn't it be possible to simply turn off the feature and still be able to dual-boot Windows 8 and another OS?

<comment><USER8> Wouldn't that completely undermine the benefits of UEFI? An attacker could just enable BIOS and there'd be no benefit from UEFI at all.

<comment><USER7> You are presuming physical access to the box in order to make the change in the firmware. If they have physical access, secure boot is meaningless. Secure Boot is to make it impossible for software to manipulate the boot process and install malware.

</comment></comment></comment><comment><USER9> From the actual source:

<http://mjg59.livejournal.com/138973.html>

<http://mjg59.livejournal.com/139232.html>

<http://mjg59.livejournal.com/139356.html>

This article is overly hyping the situation.

<comment><USER10> The article is a little breathy, but it's a serious problem. If we don't get some kind of industry consensus on this, we're looking at a future where those of us who want to use a Linux desktop[1] are going to have to do it on jailbroken hardware. While the enthusiast motherboard community might be OK with some extra firmware settings and UIs, laptop vendors are simply never going to install and test extra junk that someone doesn't force them to. This is very scary.

[1] You can tell us apart by the fact that we're taking this issue seriously. People who code on Macs and deploy to Linux servers (probably 70% of the user base on news.yc) obviously won't see a personal impact.

<comment><USER9> I agree that it should be fought. Running around panicking about how evil MS is will just waste time.

Talking to hardware vendors to ask them what is needed to get Linux to run on their systems is the most productive course of action at the moment, I believe.

<comment><USER10> No offense, but Linux people have been trying to engage hardware vendors for decades now. If the hardware happens to be a rack server or Android phone, they tend to have decent success. If it's a laptop, the answer (if one comes back) is generally "You want to run what now?"

No one cares. Margins are too thin to "engage the community" or any other such nonsense. Does it run Windows? Ship it.

<comment><USER9> No offense, but Linux people have been screaming at Microsoft for decades now. It hasn't made a single difference. However, at this point, nearly all hardware out there has some degree of Linux support, often with the help of the vendor directly.

There are two choices that might accomplish anything: Work with the vendors and try to work out a solution, or lawyer up.

</comment></comment></comment></comment></comment><comment><USER11> "Microsoft will argue--in fact, has argued in a rebuttal on this matter on Sept. 22--that this is a security matter for Microsoft Windows deployments, and they are in no way influencing what the hardware vendors are doing with their keys"

That "no way" is the big legal question. I can see this go both ways. If most hardware manufacturers decide to only ship with MS keys, I think a judge could rule that Microsoft still has too much market power to let a free market optimize things for the good of the consumer. I do not see a judge decree that before there are any indications that it will become true, though.

(totally unrelated questions that I am curious about: how will this signing stuff work when running Windows in a VM? Would MS dare charge companies that want to include a MS key in their hardware? What if that company is called Apple?)

<comment><USER12> >I think a judge could rule that Microsoft still has too much market power to let a free market optimize things for the good of the consumer

How is the good of the consumer going to be served by allowing rootkits to load even before the antivirus can?

>(totally unrelated questions that I am curious about: how will this signing stuff work when running Windows in a VM? Would MS dare charge companies that want to include a MS key in their hardware? What if that company is called Apple?)

You have got it backwards. Windows 8 will boot on any machine or VM regardless of secure boot, UEFI, BIOS or what have you.

<comment><USER11> 1\. One man's root kit is another man's Linux kernel.

2\. Windows 8 may boot on untrusted hardware, but will it play rented movies, work with Office 365, run apps from Microsoft's store, etc? If Windows on untrusted hardware will not be a second-class citizen, why would Microsoft bother with secure boot?

<comment><USER13> Guh, one of the few times I do so on my phone, and I fat fingered the upvote attempt. Wasn't there discussion about separating the arrows? Sorry.

</comment></comment></comment></comment><comment><USER14> While I do understand the security argument, surely the manufacturers of hardware wouldn't do this only to be allowed to use the Windows 8 logo? I have never heard of a person who cares if there's a Windows-logo on their laptop or not. In fact, the people I asked earlier today (both nerds and "normals") consider it an ugly annoyance.

<comment><USER15> Being part of the Windows logo program means getting access to some Microsoft marketing budget. The incentive is the financial benefit, not the sticker itself.

<comment><USER14> I see, thanks for explaining. I suppose, as a large computer manufacturer, actively/proudly refusing the Windows logo wouldn't please Microsoft either.

</comment></comment></comment><comment><USER16> What is interesting to me in terms of how this story is pitched is that Microsoft's approach to operating systems is shifting to be similar to Apple's, because one cannot run OSX on commodity hardware either.

<comment><USER17> OSX isn't prevented from running on commodity hardware though a secure boot process though. Non-secure UEFI motherboards can boot and install retail OSX mediums (in fact, most hackintoshes are made possible through UEFI emulation boot discs). The biggest hurdle is driver support for peripheral devices: graphics, network, sound, wifi.

<comment><USER12> >OSX isn't prevented from running on commodity hardware though a secure boot process though.

Windows 8 will run on any BIOS and UEFI, regardless of secure boot, there is nothing in secure boot preventing you from running it anywhere.

</comment></comment></comment><comment><USER18> The crazy thing about this is that one proposed solution, that MS require OEMs to supply keys for Linux, could potentially be an antitrust violation, as MS makes money from Linux too (thereby using their Windows monopoly to strengthen their other business of patent licensing).

I don't think there's much of a case here. The UEFI hardening is clearly a good thing for consumers, and having it as a logo requirement just makes sense. And if MS is not using any influence to block other OSes, that seems like the best you can ask for. And recall, OEMs can always ship without Win8 logo and not use hardening (or even UEFI at all).

<comment><USER19> > And recall, OEMs can always ship with Win8 logo and not use hardening (or > even UEFI at all).

Sorry? I'm confused on this one.

* From the MS slides ( [http://video.ch9.ms/build/2011/slides/HW-457T_van_der_Hoeven...](http://video.ch9.ms/build/2011/slides/HW-457T_van_der_Hoeven.pptx) ): "UEFI and secure boot harden the boot process [...] Required for Windows 8 client"

* From the Garrett post ( <http://mjg59.livejournal.com/138973.html> ): "Microsoft requires that machines conforming to the Windows 8 logo program and running a client version of Windows 8 ship with secure boot enabled"

* From the IT World post linked up here: "And not just any old UEFI layer, either, but secure UEFI. Meaning a hardened boot process"

What am I mis-reading or missing? I'm not being testy, I just think you must have spotted something I missed. Thanks

<comment><USER18> Actually, I mistyped. I meant to type, "OEMs can always ship withOUT Win8 logo and not use ...". I've changed the post to now reflect that. Meaning that OEMs needn't ship certified Windows 8 boxes and can still use BIOS if they want.

<comment><USER19> +1 for clarifying and fixing mate. Thanks.

</comment></comment></comment></comment><comment><USER20> I think the flip side to this discussion is that there are ALSO Linux logo programs (for at least RedHat) that will encourage the hardware manufacturers to allow major Linux providers to use their keys.

That said, while Ubuntu, RedHat, Suse and other larger Linuxes might be able to swing this for server equipment, someone trying to run a less popular Linux on commodity desktop equipment could be well and proper screwed.

It's definitely a sticky situation, and while I don't know that you can infer Microsoft's activities as anti-competitive because it should genuinely increase the security of their bootloading process, which is great for consumers using Microsoft operating systems.

That said, I am definitely terrified of the notion of not being able to purchase an affordable Linux-compatible laptop.

<comment><USER21> I'm even more so terrified at the idea that the vendor of my hardware may decide what operating system I should and should not boot on it.

        Linux logo programs (for at least RedHat)

From mjg's posts I had the feeling that RedHat is afraid of what is going to happen if UEFI really takes of in the form it currently is intended to and that not a lot of manufacturers are keen of going through the trouble of using even more keys than absolutely required to sell. Do you have any sources to back that up?

I believe that it would be a bad step for one of the major Linux vendors to bow to the whole idea of signed booting for all the smaller distributions.

<comment><USER20> I would be very surprised if any of the major Linux vendors even attempted to get a 'universal' Linux key. From the perspective of the major Linux providers, getting logo certified is a competitive advantage against their peers, and it would take a significant amount of altruism to obtain those keys on behalf of others if it is even possible, which is anyone's guess.

As far as the OEM providers, no, I don't have any sources to back that up, but I don't know how you could logically argue against the idea that RH logo certification will increase sales to RH customers.

<comment><USER21> Possibly I'm overly optimistic in regard to the altruism of the Linux vendors. The old 'the whole ecosystem is going to suffer' argument is still pretty strong with the OSS community but you certainly could be right.

</comment></comment></comment></comment><comment><USER22> I don't understand from all these uefi-gate articles what exactly prevents "secure UEFI" from being just a boot option.

<comment><USER18> Nothing. Some do this. It's up to the OEM. That's Microsoft's point. MS isn't requiring that OEMs can't do this. If OEMs want to, they're completely within their right to do so. It's up to them.

<comment><USER23> " _Some_ do this."

Well that is the problem isn't it?

<comment><USER18> Take it up with the individual OEMs who don't build machines the way you like them. Or better yet, buy those that build the ones you do like. This seems downright silly to sue about.

<comment><USER23> I'm not suing over it.. I'm just upset over the entire situation.

 _"buy those that build the ones you do like."_

There are two very large problems with this:

1) Now I have to do _yet another_ piece of needless research whenever I buy a piece of hardware. That is a pain in the ass, pure and simple. 2) Everyone else I know _won't_ be doing that research. So when my dad says to me again, _"Hey, your mother is getting viruses again, stick her back on Ubuntu"_ , I have _yet another_ thing to worry about.

Yeah yeah, I get it. They have a right to do it, the market will sort it out, blah blah blah. Fact is, I also have a right to bitch about it, regardless of their rights.

<comment><USER18> The Linux community should incentive it. RedHat should say to HP, Dell, and Acer -- "for each UEFI Win8 logo machine you ship, where you enable the ability to disable secure booting we give you five dollars". Or letting them keep a larger percentage of RH license revenue, or whatever.

<comment><USER23> The only thing that would incentive in OEMs pulling more shit like this in the future.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> I was sympathetic to the Red Hat guy until this:

>The final irony? If the user has no control over the installed keys, the user has no way to indicate that they don't trust Microsoft products. They can prevent their system booting malware. They can prevent their system booting Red Hat, Ubuntu, FreeBSD, OS X or any other operating system. But they can't prevent their system from running Windows 8.

Err what? This boggles the mind. If you don't trust MS, DO NOT INSTALL WINDOWS. See, it's that easy.

>If Microsoft were serious about giving the end user control, they'd be mandating that systems ship without any keys installed. The user would then have the ability to make an informed and conscious decision to limit the flexibility of their system and install the keys. The user would be told what they'd be gaining and what they'd be giving up.

Huh what? You want my mom to make an informed and conscious decision about certificate chaining? I can see with going very well with 95% of PC users. This is typical behavior from geeks, putting the decision of about the choice of modules.conf vs. conf.modules which the user doesn't care about and just wants the software to work.

<comment><USER24>
         If you don't trust MS, DO NOT INSTALL WINDOWS

If Windows is the only thing that a computer will allow, then that really isn't an option. It's like saying that when owning an iPhone you have the option of not installing iOS.

         You want my mom to make an informed and
         conscious decision

Dude, "mom" arguments are really retarded, IMHO in the same category as "think of the children".

I agree with security-by-default arguments, but let the user have the choice of overriding those settings -- it doesn't have to be convenient for power- users, it just has to be doable.

Otherwise the hardware ain't yours anymore, you just payed for an overpriced license to use it as an appliance.

<comment><USER12> >but let the user have the choice of overriding those settings

How is MS restricting that? They even let the user do it on their own tablets that they got Samsung to make for them!</comment></comment></comment>


Evil? - <AUTHOR> http://www.slate.com/id/2262952/

<comment><USER2> Google's behavior has been pretty consistent over the years. They may not live up to "don't be evil" but they've stuck to "be less evil" pretty well. What's interesting about the Verizon story is all this reporting that they're about to take a sharp turn in an evil direction, contradicting what they've claimed to stand for for a long time. I bet this turns out not to be the case, if not because of virtue, then homeostasis.

Edit: of course that raises the question of where this wave of false stories (if that's what they are) is coming from.

</comment><comment><USER3> Both Google and Verizon has denied these claims: <http://twitter.com/googlepubpolicy/status/20393606477> and [http://www.prnewswire.com/news-releases/verizon-statement- on...](http://www.prnewswire.com/news-releases/verizon-statement-on-new-york- times-article-100048489.html)</comment>


Netflix will now interrupt series binges with video ads for its other series - <AUTHOR> https://arstechnica.com/gaming/2018/08/netflix-begins-testing-ads-for-its-own-series-between-binge-season-episodes/ <comment><USER2> I'm not a Netflix user, but IMO a proper binge includes muscle memory for the shortcuts to exclude openings, endings, teasers and _in previous episodes_ intros...

</comment><comment><USER3> Hah. I already mostly use Hulu now because of Netflix's intrusive auto-playing trailers on the home screen. With this, maybe I'll cancel altogether.</comment>


OOP practiced backwards is "POO" - <AUTHOR> http://github.com/raganwald/homoiconic/blob/master/2010/12/oop.md#readme <comment><USER3> Skillful practictioners of OOP, even in languages like Java, know this stuff already. It's just that the language leads newbies astray by making inheritance such a prominent concept.

To a first approximation, inheritance is always wrong. The Design Patterns book advocates composition -- building up an object out of smaller ones -- over inheritance. Yeah there's more work to delegate messages around, but if you didn't like typing you shouldn't have picked Java (or, use an editor that makes this easier).

Also, when trapped in languages like Java, define behaviour in terms of interfaces rather than inheritance. Interfaces are exactly what raganwald is talking about -- they define the ability of something to respond to methods, but are decoupled from any parent-child relations.

<comment><USER4> Dynamic languages like JS, Ruby and Python could greatly benefit from explicit support for interfaces as well. I'm enjoying the fact that Clojure brings this powerful abstraction to a dynamically typed language.

<comment><USER5> This might make sense for Clojure (I haven't used it) but in my years of Ruby programming (after 10 years in Java and C#) I have _never_ thought to myself, man I'd love to have an interface here. Ruby's lack of class-level contracts is essential to its idiomatic nature, a strength not a weakness, imo.

<comment><USER6> Generally speaking I like interfaces, but Ruby is so dynamic that you couldn't use them for compile-time guarantees. Interfaces could only get you a slightly nicer way of dynamic duck typing. I wouldn't really call all of the dynamism a strength though - one of the limiting factors of compile time evaluation here is that a method can later become undefined- when is the last time you needed that?

<comment><USER7> Actually, undefining methods on an object because such an idiom that Ruby 1.9 introduced a new base class into the hierarchy: BasicObject. [1] This is now the new root class, above Object.

1: <http://www.ruby-doc.org/core-1.9/classes/BasicObject.html>

<comment><USER6> Yeah, that is the 1 case, and ActiveSupport has had a BasicObject for a while now. This is another case where proponents would say it is great that you can undefine a method, but I would say that is a hack for lack of any namespace management. Now that there is a BasicObject I am not sure that there is any practical use for undefining a method- probably only for dealing with namespace collisions, which again seems to point out a language flaw, not a feature of dynamism.

</comment></comment></comment></comment></comment></comment><comment><USER8> >the abstract ontology is derived from the behaviour of the individual specimens, the ontology does not define the behaviour of the individual specimens.

In other words... Do you like Plato, or do you think Aristotle had it right?

There are lot of cool isomorphisms between philosophy (particularly metaphysics) and software design.

<comment><USER9> Any chance you could expand upon this? I'd be interested to read more about this (and other) parallel/s.

<comment><USER10> I think this is a reference to Plato's Theory of Forms, in which every object we see partakes of some idealized (static, eternal, and real) form (ie, is an instantiation of a class). Except... in Plato's theory, everything is a somewhat corrupted or imperfect image of its form. The theory has a lot of problems (the third man problem, for example).

See: <http://en.wikipedia.org/wiki/Theory_of_Forms>

<comment><USER8> Well, yes. There's various interpretations of what kind of existence Plato thought the Forms actually had - whether he believed in a literal "realm of the Forms" or not. And while you'd be hard pressed to find someone who actually subscribes to the theory of Forms these days, there are a lot of things in, for example, the philosophy of Mathematics that smell a lot like it.

I think the idea of Forms is still quite valuable

Aristotle takes kind of the opposite tack - he is also very focused on building ontologies and taxonomies, but he views them as constructions of the intellect imposed upon their subjects, rather than being the most fundamental reality of the subject prior to its actual being. It's pretty much the same distinction ragenwald talks about in the OP.

As for the general isomorphism between metaphysics and philosophy, you can find it almost everywhere, depending how hard you want to look (and how far you want to stretch your metaphors...). But metaphysics is largely concerned with the types of things and entities in the world, and how they can possibly interact. If you think of the "software space" as its own universe, it's pretty easy to draw parallels. Forms and Categories are low hanging fruits, obviously, but a few other parallels spring to mind:

\- Kant's seperation between Phenomena and Noumena relates to the difference between interface and implementation, as well as to the concept of abstractions in general.

\- How a software component's "epistemology" (how it "knows" about other components in the system) works can be compared to different philosophers - <USER2> they operate on a consistently readable shared state (an empirical world?) or do they request information from a central broker service (God brokers sense impressions, ala Berkeley?)

\- Berkeley's idea of direct impressions only in the mind has some relationship to the concept of laziness.

\- etc.

I'll try to think up some more and post them later. It's less that you can write a paper on the startling isomorphism between theories, and more that it's really easy to use software metaphors to describe philosophy and vice versa (though software tends to be much more concrete, obviously).

<comment><USER5> "Aristotle takes kind of the opposite tack - he is also very focused on building ontologies and taxonomies, but he views them as constructions of the intellect imposed upon their subjects, rather than being the most fundamental reality of the subject prior to its actual being."

Well, not exactly, and in fact this would turn Aristotle into his metaphysical opposite: a nominalist in the mold of Occam.

For Aristotle the formal cause of a substance is in fact absolute, every bit as real and 'prior' as with Plato, the big difference between the two being the question of epistemology, or how we become acquainted with the form to begin with. Yes, Aristotle argues that we know the form of a thing from experience, but the form of that thing, and the abstractions we produce from many experiences from similar things, are as real as with Plato and, as in Plato, point to higher, more organized spiritual structures that comprise ultimate reality.

Call me when somebody comes up with a Whitehead-ean programming paradigm.

</comment></comment></comment></comment></comment><comment><USER11> It is an interesting observation that the brittleness of inheritance hierarchies stems from the fact that they have a semantic meaning in the program and are not just logical classifications. A simpler (and well- accepted) explanation for inheritance's problems is that it is a code-reuse implementation technique that people mistakenly use for software design. I suspect these explanations are related.

I'm not sure I completely followed your ideas about hierarchical classification being more useful for testing... perhaps because using animal categorization as an example was difficult to follow since people don't write tests for animals. What does it mean to have hierarchies for tests and what benefits does it provide?

</comment><comment><USER12> I think this problem may be while I enjoy functional programming so much. I believe that the functional programming tends to build from the data up, from the actual instances it then adds definitions of behavior, instead of trying to group behaviors and fit the various arrangements of data in that hierarchy.

Usually you start with some data. It might be some loose tuple in a dynamic language like erlang, or an algebraic data type in a language like Haskell (not that there are many like it). It's like saying, I have a Cat or I have a Bat. You haven't said anything about the two yet other than that they are different. You could then add more information, such as the number of legs or color. You add behavior by defining functions that can act on that data and create changes from them. For example, two cats can reproduce, so you define a function that takes two Cats and makes a kitten (new Cat). Bats might also reproduce, so you can write the function more generally to take any two data objects that have the minimum prerequisites (such as identical internal representations) and produces a new one that's a combination.

When a new data type is needed, you simply add it and it automatically gains all this functionality based on its form.

Essentially, OOP seems to want to start from the behaviors and have that define the data. When writing functionally I tend to define the data, then build behavior on top of it which is driven more by the form of the data than any idealized class hierarchy.

I'm not sure I'm explaining this terribly lucidly, but hopefully this can start a discussion among the more articulate posters.

<comment><USER13> Most developers that I know of that have been using OO languages for some time, including myself, also usually start with the data items being dealt with and proceed from there. In fact, it's not particularly natural to do it any other way. If you've got a window, then it's a Window class, with all of the relevant behaviors (methods) added afterwards. If you're dealing with a file, then it's a File class, and so on.

</comment></comment><comment><USER14> Another interesting facet of the "natural ontologies" argument is that the history of Zoology is a series of "bug fixes" where we got the ontology _wrong_.

Leaving out changing requirements and DNA mutations for a second, there have been massive changes to the "official" ontology as we discover new species or examine DNA and have to say "oops, turns out, the platypus doesn't derive from birds at all".

</comment><comment><USER5> "What if objects exist as encapsulations, and the communicate via messages? What if code re-use has nothing to do with inheritance, but uses composition, delegation, even old-fashioned helper objects or any technique the programmer deems fit? The ontology does not go away, but it is decoupled from the implementation. Here's how."

This is standard OOP 101 advice. 'Prefer encapsulation to inheritance' has been axiomatic in OO literature for over a decade. GOF and all the GOF-derived texts emphasize this.

OOP <> Inheritance

Inheritance is only one tool in the OOP toolbox, and probably one of the least important. OOP itself is only one conceptual tool in the programmer's toolbox, alongside procedural and functional tools. Learn them all, learn their strengths and weaknesses, and learn how to apply the right tool to the right problem.

</comment><comment><USER15> _Design-by-Contract is protected by various business restrictions so it has nobody but itself to blame for its unpopularity_

What's this about? Some patent or something?

I'd guess this is a reference to Bertrand Meyer's company. Since I learned DbC from Liskov & Guttag's excellent book, which came out before Meyer's, I never had much reason to look into Meyer or Eiffel even though they became practically identified with DbC.

</comment><comment><USER16> I like the way the C++ FAQ explains the problems of "is a" inheritance, especially the examples of Circle-is-an-Ellipse.

[http://www.parashift.com/c++-faq-lite/proper- inheritance.htm...](http://www.parashift.com/c++-faq-lite/proper- inheritance.html)

<comment><USER17> That's a particularly accurate, bash-you-over-the-head-until-you-get-it explanation of the problems of inheritance. Nice link. I should really read through that whole FAQ/FQA some time, it's full of good stuff.

I, personally, think of inheritance as it implies near the end: if A derives from B, A _must_ effectively _be_ B in all B-exposed methods. It can optimize, but it cannot change; A must pass _any_ test B would pass, or it's not actually a B.

But _lots_ of code violates this. I think it's because a lot of people learn inheritance with the real-world connections in mind, and it's frequently taught to beginning programmers as a golden bullet. It can do a lot, but it has subtle surprises until you get better at programming.

</comment></comment><comment><USER18> I couldn't agree more. To me, encapsulation is the most powerful part of OOP. I learned this from Allen Holub, and it has been part of my mantra about OOP for years. It is what makes WebObjects such a powerful web framework, and why I am happily using Grails today. This reminds me that I really need to do a screen cast on why encapsulation is such an important feature of a web framework.

<comment><USER19> The essays at the beginning of Holub on Patterns completely changed my understanding of OOP.

Implementation inheritance violates encapsulation. So do getters and setters. They let code outside your object rely on your implementation and make your system brittle.

</comment></comment><comment><USER20> OOP in my country is poo.

Programación Orientada a Objetos.

<comment><USER21> Out of curiosity whats poo? or more explicitly what (if there is one) is the common, non vulgar, childish version of mierda?

<comment><USER22> The answer to your second question is poop.

</comment></comment></comment><comment><USER23> Fun thing is that "object oriented programming", in French, is "programmation orientée par objets", which is usually shortened to "POO" (pronounced Pay-Oh- Oh).

</comment><comment><USER24> The observations are an interesting expansion on the idea of Duck typing.

<comment><USER25> Indeed, duck typing and structural typing are what immediately came to mind as a solution for the brittleness of inheritance hierarchies that the OP describes.

</comment></comment><comment><USER26> I think you've hit on something very important, essential, in the problem with OO-as-taught. This is something that is known in many quarters of skillful practictioners, but missed by most schools or beginners. I think the first part of this article is misleading, in that it waxes philosophical about the drawbacks of defining things in an ontology. But then it then proceeds to figure out a better way to model things as an ontology! The issue isn't with ontologies -- yes, slapping a hierarchy or meronymy on something isn't perfect, but it's pretty useful when organizing concepts.

The fundamental problem with OO inheritance, is that it is _not_ ontological or mathematical inheritance! OO inheritance has almost no relationship to thousands of years of what "is-a" means -- i.e. subset. It's backwards - subclasses are extensions, or _supersets_ of their parents.

The way to implement inheritance correctly is "specialization by constraint", i.e. you define a subclass by the constraints it has on its superclass. This is what's happening in the latter part of the article, with design-by-contract and test cases for your various classes. This is also, by the way, how ontology languages like OWL work, and in part why they're so hard to learn/use -- their notion of inheritance and "subclassing" is the mathematical notion (i.e. more like subset), and the opposite of OO programming languages, so we have 25+ years of history to unlearn.

I suspect the reason OO inheritance took the path it did was for simple expediency on the part of compiler writers & language designers. Specialization by constraint ain't easy to implement declaratively.

<comment><USER27> I don't get how subclasses are _super_ sets of their parents. The set of instances of a subclass is a (usually proper) subset of the set of instances of its superclass (in any mainstream class-OO language).

Also, writing a subclass definition _can_ be seen as adding constraints (of the form "must also have a bla() method returning an int").

</comment></comment><comment><USER28> Is this an argument for prototype-based programming? I don't understand all this stuff well enough to provide a real opinion, but it seems to me that is a solution to the issues he brings up.

<comment><USER29> Yeah, it seems that prototype-based programming fits his needs better. With prototypal inheritance you make no assumption that what you inherit from is a strict superset of the class. It's more like saying "This object is _like_ so- and-so, except..." every time you create a link in the inheritance chain, and that fits the way people classify things a little better. Steve Yegge put it best: "The most specific event can serve as a general example of a class of events."

[http://steve-yegge.blogspot.com/2008/10/universal-design- pat...](http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html)

<comment><USER28>
        Steve Yegge put it best.

He often does.

</comment></comment></comment><comment><USER30> Not sure what abstract ontologies have to do with expressing instructions for my computer to execute. I use inheritance as a tool to share behavior across objects. It works nicely for that.

</comment><comment><USER31> Object Oriented Programming Systems are (abbreviated) mistakes.

<comment><USER31> I wonder, did the people downvoting this not see the joke, or did they see the joke and decide it wasn't funny?

</comment></comment><comment><USER32> This is roughly how I program using OCaml's module system. Does anyone else prefer higher-order modules as the basic unit of program structure?

</comment><comment><USER33> thinking OOP as a solution may lead to an article like this whereas it merely is a vehicle. you may or may not use it.

problems of OOP is explained in Go Language video by Rob Pike*, however very intellectually stated arguments in this article are mainly false.

<http://www.youtube.com/watch?v=rKnDgT73v8s>

</comment><comment><USER34> Many of the languages I use already in an object oriented style use message passing/signatures not compiled in mandatory type hierarchies.

Python, Objective-C, Smalltalk and even C++ in some ways all do this.

I suggest if you feel like the OP does, you use one of them instead of java or C# or whatever that dude is using.

</comment><comment><USER35> And "Functional Programming" is an anagram for "Malfunctioning Program". Yay for rants.

</comment><comment><USER36> It's actually called POO in Spanish: Programación Orientado a Objetos

</comment><comment><USER37> The obvious solution is to stop getting OOP backwards, then.

</comment><comment><USER38> Perl object-oriented programming = POOP.</comment>


Ask HN: Side project ideas - <AUTHOR> I have a couple ideas for side projects and would love to get feedback.
The ideas are:
1. A poor-man's cloud storage. The idea is that instead paying monthly for cloud storage you buy this small IoT device and connect usb drives on IT and your files are available to you over the internet. If you want redundancy you can choose to backup you drives to the drives of other users(encrypted of course).
2. A back to basics email service. Text only, whitelist only, with unlimited random one time email addresses. Emails will not reach the user's inbox unless the sender's email is explicitly whitelisted(or the user has emailed them first). For online registrations user's will be able to request one time emails. Nothing fancy really. <comment><USER2> Both intriguing concepts. #2 is my interesting IMO as it can possibly be used for signing up for services that one doesn't want to display their primary email address. It also has a 'Snapchat' quality to it where email is a 'one off' and the account can easily be deleted, etc.

Also a way to manage accounts online (testing services, etc). It may be able to better manage issue of spam that many experience as all accounts are linked to one email for many users. Email communication becomes unnecessary for many accounts, plus authenticator apps and twilio make email less important.

Let's connect. I have a side project I'm currently creating. Contact details in my profile :)

</comment><comment><USER3> I like the poor man's cloud storage if, and only if, it scratches one of your itches.

The email idea is still managing email. There was one of the old online services that had a similar feature. A few years ago I dealt with someone who had it. It required a phone call to get whitelisted. I guess a phone call plus manually adding my email address to the white list seemed like less work to that person. It seemed like an artifact from the Fax machine days when business was not done by email. The market today probably smaller...anyone who needs email has it and is making it work.

These days the common solution to the problems of email is to use something else. Messaging platforms have mostly replaced email among teens and replaced big chunks of email among adults. Nobody emails photos of the grandkids anymore. They go on Facebook/Instagram etc. instead.

Good luck.

<comment><AUTHOR> Thanks for the feedback. The whitelist email idea is basically something that I need. I use fastmail and getting sick and tired of marketing email. They always find the way to my inbox. But yeah, I see what you mean. Hardly anybody uses emails these days.

<comment><USER4> > Hardly anybody uses emails these days.

 _What?_

</comment></comment></comment><comment><USER5> I like 1, however you risk to have the same problem than Freenet : nobody wants to host potentially highly illegal content even encrypted.

2\. needs to have a lot of users to be useful.

<comment><AUTHOR> > nobody wants to host potentially highly illegal content even encrypted.

Good point, I didn't think about that. Thanks!

</comment></comment><comment><USER6> #2 - Neat idea, don't think it would be widely accepted though.

</comment><comment><USER7> I have a similar idea to #2 - let's get in touch.</comment>


Miagakure: A puzzle-platformer in four dimensions - <AUTHOR> http://marctenbosch.com/miegakure/

<comment><USER2> This has been referenced in XKCD:

<http://xkcd.com/721/>

There is nothing much on the page though. The game has not yet been released, and there isn't any video preview.</comment>


Econometrics In R - <AUTHOR> http://cran.r-project.org/doc/contrib/Farnsworth-EconometricsInR.pdf

<comment><USER2> I really like the idea of doing Econometric work with R. Currently, I've been looking for a more hands on way to run some regressions and test data, this guide looks to prove immensely useful.

<comment><USER3> Out of curiosity, why not something like Mathematica?

<comment><USER4> Because Mathematica costs at least $2000+ and R is free software. That makes R more suitable for teaching purpose.

<comment><USER5> Almost the only reason you'd need to use R. I cringe when professors ask their students to use non-free software when equivalent or better free alternative exist.

</comment></comment></comment></comment><comment><USER6> In a mostly irrelevant personal note Grant and I graduated in Numerical Mathematics from BYU the same year; there were only a handful of us so we spent a lot of time together in the top floor of the Math/CS Building. He was working on this during a big chunk of our undergrad and I think some after as well. I'm embarrassed to say I haven't taken the R plunge yet (SAS and STATA right now) but when I do I'm sure this will be my starting point.

<comment><USER5> This paper covers a lot of the basics in addition to the complex stuff I don't understand yet. I'll definitely be keeping it saved as a general R reference as I do more work in R.

</comment></comment><comment><USER7> Futurama?</comment>


The Illusion of Wealth - <AUTHOR> http://miscellanyofjules.blogspot.co.uk/2013/01/the-illusion-of-wealth.html

<comment><USER2> Most people spend to their level of income, and sometimes beyond, which often makes them nervous and miserable. Even the rich feel this, especially with big items like the Lear Jet repayments - it's golden handcuffs and it sucks... or so I'm told.</comment>


Virginia university begins use of students' Wi-Fi to track attendance - <AUTHOR> https://www.muckrock.com/news/archives/2019/nov/26/skipping-class-dont-let-your-wi-fi-know/ <comment><USER2> >Degree Analytics enables schools to track its students movements, ostensibly to increase retention

while most students have a phone in their pocket, this may not always be the case. They're not just measuring a student's attendance, but also their wealth, which by its self if a huge predictor of student success.</comment>


A century ago, Americans witnessed an aviation marvel - <AUTHOR> http://www.usatoday.com/news/nation/2008-07-04-first-public-flight_N.htm

<comment><USER2> It's amazing that Glenn Curtiss (the aviator mentioned in the article) set the land speed record in 1907 by riding a hand-built motorcycle at a sustained speed of 136.5mph. I'd be terrified to go that fast today, even with modern safety gear and a modern bike that's designed to be handled at high speeds. But 100 years ago?!

[http://www.glennhcurtissmuseum.org/educational/glenn_curtiss...](http://www.glennhcurtissmuseum.org/educational/glenn_curtiss.htm)</comment>


Knowing how to code is a trap - <AUTHOR> https://bramkanstein.com/codertrap/ <comment><AUTHOR> I revived my blog with the goal to write more in 2020 and share unfiltered thoughts and findings on startups and business.

Here's my first article that I've been wanting to write for a while. What do you think?

<comment><USER2> Always nice to read a new instance of «the law of the instrument» ([https://en.m.wikipedia.org/wiki/Law_of_the_instrument](https://en.m.wikipedia.org/wiki/Law_of_the_instrument)). Fortunaly not all programmers suffer from the same cognitive bias.</comment></comment>


Ask HN: In which modern language/environment/framework is programming a joy? - <AUTHOR>

When I was a boy, I learned BASIC on the Apple II+. It was a joy, because I could turn on the computer and instantly find myself in a programming environment that was easy to learn and fun. Granted, I had to plot sprites on graphing paper and then convert them to hex digits. Still images were created much like an etch-a-sketch, but using cursor movement keys instead of dials.
Later, I purchased an Amiga and was full of excitement and joy when I learned how to use AMOS BASIC. It was more powerful than Apple BASIC, and I could use a mouse and graphics utilities such as Digi Paint to create bitmaps for sprites.
In recent years there have been few programming experiences that rival those early days. Ruby on Rails was a joy to discover after Perl and PHP. But as it evolves, I find keeping up with new features and best practices tiresome.
Yesterday I downloaded the Android SDK and followed the "hello world" tutorial. After completing it I had almost no desire to continue developing on that platform. The emulator took several minutes to load and many of the instructions on the developer site were confusing or plain wrong.
Are there any modern programming environments that are simple, fun, and a joy to use? It seems strange to me that as computer hardware has grown increasingly powerful and software tools more sophisticated, making programs that take advantage of these advances has not become easier or more enjoyable. On the contrary, programming seems to become more frustrating as it advances, like always trying to keep up with a frantically moving target. Am I missing something that can bring back my early joy or discovery, or am I just being nostalgic? <comment><USER3> Python. Easy to learn, easy to use, easy to maintain.

I'm also trying Pygame and Pyglet and for a hobbyist game programmer it's very enjoyable not having to deal with C/C++ memory management crap.

PS: I think most programmer still have a fondness for their first coding environment because when your young everything is awesome, especially computers :) I have good memories of writing an adventure game using QBasic.

<comment><USER4> Python has iPython going for it, which is drop dead awesome to tinker with. I'm back to Perl, but the time I spent with Python was definitely made even more fun by iPython.

<comment><USER5> IPython is fantastic. I'm working through project Euler with Python, IPython and notepad++. I work with C#, asp.net during my day job. While C# is a great language and the .net framework is the most sane API I've ever used, I was able to do some of the Euler problems in one, easy to understand line.

</comment></comment></comment><comment><USER6> Ruby + Heroku + Git + Sinatra + Markaby

That combo makes it crazy easy to maintain a bunch of web apps and explore/publish different ideas.

Long-term, I want to drop Ruby and go to Factor (<http://factorcode.org/>). You can do some amazing cool stuff in Factor that is next-to-impossible in Ruby/Python/Java/etc. It's hard to find a blog post or a screencast that shows you stuff like parsing functions and macros that let you mold the language to your needs. (The documentation on them is pretty straightforward after you learn the basics.)

Then there's the postfix notation. Most people think that's Satan's love child. It takes some time to get used to.

In Ruby:

       loop { print( eval( read ) ) }

In Factor:

       [ read eval print ] loop

<comment><USER7> Just learned about Factor from the HN story a couple of days ago, I've enjoyed playing with it quite a bit. But then, Forth was my main programming language for a few years back in the 80s.

</comment></comment><comment><USER8> > In which modern language/environment/framework is programming a joy?

None of them.

<http://www.loper-os.org/?p=16>

[http://www.reddit.com/r/programming/comments/64g7p/old_basic...](http://www.reddit.com/r/programming/comments/64g7p/old_basic_used_to_be_on_every_computer_a_child/c02t3ky)

The disease is systemic. It pervades all modern computing systems. The name of the disease is ratcheting accidental complexity. The only cure is a from-bare- silicon reboot of all of computing.

> On the contrary, programming seems to become more frustrating as it advances

This is because it is not actually advancing. Incompetently and half-heartedly cribbing feature after feature from Common Lisp is not advancement.

> Am I missing something that can bring back my early joy or discovery

What you are missing is (was?) very real. There once was a time when computer technology was actually advancing in meaningful, _qualitative_ ways. And when the future seemed alive with infinite possibilities. Don't let anyone convince you that all of it never existed.

<comment><USER9> _The only cure is a from-bare-silicon reboot of all of computing._

I don't think that can practically happen. If you're using some not-too- powerful language to do it, it will take too long and you'll never catch up. If you're using a language powerful enough to actually accomplish it, you'll never develop a community or a culture of libraries, because the number of people who feel they can just build what they need faster than learning and using someone else's library will be high enough that libraries never get enough attention, and you'll end up with an archipelago instead of a continent of libraries. That's pretty much what happened to the lisps.

<comment><USER10> have you seen Alan Kay and company's "STEPS Toward The Reinvention of Programming" ? They're doing almost exactly that -- making small, powerful programming languages that make it easier to re-describe the fundamentals of computing. There's a pdf: <http://www.vpri.org/pdf/tr2007008_steps.pdf>

</comment></comment></comment><comment><USER11> I've recently started using Clojure. Writing Clojure in Emacs (using Slime) is a joy. The integration is just fantastic; write code, send it to the repl, then occasionally switch over directly to run commands.

(Writing SBCL instead of clojure was also nice, but ultimately the cruft of common lisp made it difficult to continue.)

Paredit mode makes it even prettier. Paredit mode makes sure that a) the buffer contents are always a balanced sexp and b) you can mostly use the same keystrokes as normal editing.

<comment><USER12> Clojure is pretty joyous, but I hated the error messages the last time I was using it. They were rarely useful. Has anything changed recently?

<comment><USER13> Seconded the error messages. I am used to restarts, M-., 'v', and other stuff that has been jumping between backtrace and source code.

Clojure's error messages reminded of Microsoft C: "syntax error".

</comment></comment></comment><comment><USER14> I've always found the joy comes from what I was building and not too much the tools I was using. Perhaps if you found a new, exciting project that you really wanted to build, you could use one of the languages you once enjoyed and the joy would return?

</comment><comment><USER15> Lisp + Emacs + Slime felt like a total joy to me. Python with its REPL and a "batteries included" approach was a distant second, with Perl (with emacs' cperl-mode integrated with perl's debugger as well as the extensive and easy to use CPAN library) being a closed third.

I might also get branded heretic for saying this on HN, but lately I've been also able to enjoy Java development: with git for revision control, maven for project lifecycle management/pulling dependencies in an almost CPAN-esque manner, IntelliJ for an IDE (which, I've been told comes close to the capabilities that the Lisp machines had as far being an IDE goes) and jetty (invoked through maven) for a servlet container (a breath of fresh air compared to Apache as well as tomcat).

<comment><USER16> I'm enjoying my time with maven/jetty too. It was a steep learning curve but once it works its very smooth. I also recently substituted Java for Scala and can recommend that highly if you're doing the coding for the fun of it.

</comment></comment><comment><USER17> I'm going to take what is probably an extremely unpopular position here and bring up .net (C# in paticular). I say this for two reasons...

1\. Visual Studio is still one of the if not the most powerful programming enviornment out there. It's ability to predict what you are about to type and fill in the blanks for you makes a lot of programming tasks fly by. I know there are a lot of places where I could get by with less code if I was using a language like Python but autocomplete more than makes up for it.

2\. If you're building a serious, business application that will have to serve thousands of users than a technology like ASP.NET probably isn't for you. But if you're building a smaller app the abstraction that ASP.NET Webforms provide is a real time saver. You can literally just draw your interface and then fill in the events. Again, it comes with a performance penalty for sure, but if you're looking for joy there's nothing cooler than being able to whip up an app in under an hour.

<comment><USER18> I've never programmed in C# with Visual Studio but I have no trouble believing that what you are saying is absolutely true.

For the last two years I've been programming exclusively in Java inside Eclipse and the experience is far better than any other language/tool combination I've worked with before.

Auto-completion and inline documentation is great, but the IDE features that really have me sold are powerful navigation, painless refactoring, incremental compilation, and adding imports with a single keystroke.

I don't have nearly as many complaints about Java as the rest of the world, but I do admit that I've been getting pretty excited about Scala lately.

</comment></comment><comment><USER19> JavaScript.

What to develop for the clientside and serverside? What about Firefox? maybe a desktop application? I have recently become obsessed with learning this wonderful language that has so much potential.

<comment><USER20> I think Javascript is great but the tooling needs some work for development to be a joy. I haven't found a decent Emacs mode for it yet and while I enjoy the repl that Chrome and Firebug offer, it can be a pain to jump back and forth. Here's hoping the future offers a little more integration.

<comment><USER21> you don't like js2-mode? With mozrepl integration? I really like them... (although at the moment I'm using vim mostly for javascript just for the raw vim comfort)

</comment></comment></comment><comment><USER22> haskell.

the type system is divine, its hard at first put 'real world haskell' can really help with that.

others that i've had great joy with recently...

smalltalk - now using everyday and loving it ( might not meet the modern criteria ) clojure - <USER2>

if you are looking to do web dev, give the smalltalk framework seaside a look.

</comment><comment><USER23> Might not be a popular suggestion, but I have been playing with Flash 10, Action Script 3 and really enjoying it.

The beauty of JavaScript with a nice graphics library and a few other little bonus.

Much improved over the early days of Flash.

</comment><comment><USER13> As an environment, I loved CMUCL, PC-FORTH, Self, and VGA programming with Turbo C; none of them are "easy" for most beginners.

For the "woah" factor: Mozart/OZ, Prolog, Scheme and J. The first two days you discover prolog I don't think you will be able to function socially; you might need to miss a few phones calls. J will have you asking "WTF?" a lot.

Most _enjoyable_? if I said Perl I am afraid I will be chased out of this place :-P

<comment><USER4> _if I said Perl I am afraid I will be chased out of this place_

I would hope not, but one never knows. There does seem to be some bigotry against Perl in some circles.

But, one can't argue with statistics, right?

[http://blog.doloreslabs.com/2009/05/the-programming- language...](http://blog.doloreslabs.com/2009/05/the-programming-language- with-the-happiest-users/)

Anyway, I also find Perl a _lot_ of fun to work with. I write fewer bugs in Ruby (shockingly few, actually, despite never having spent much time with the language), but Perl has the CPAN which makes almost any project like playing with a really nice Lego set: You just plug lots of cool looking colorful pieces together and at the end you've got a spaceship.

I've used Python heavily in the past, and enjoyed it, but I certainly haven't experienced any pain going back to Perl. If I were starting a project from scratch today, odds are at least even that it'd be in Perl (though new-fangled stuff like Haskell has some appeal, just by virtue of being all new all the time). JavaScript is probably also a strong contender for pretty much anything...I'm pretty confident that JavaScript is going to be the worlds most popular language both client and server side, and it's a language that I enjoy working with.

</comment></comment><comment><USER24> I <3 AS3

Really! Flash got me hooked on programming. In school everyone else was bored making loops in Java and I was making a Ball bounce around the screen. Draw, code, play, repeat. Plus it runs everywhere! Personally, I suggest skipping the IDE and compile it directly from classes for free.

<http://www.senocular.com/flash/tutorials/as3withmxmlc/>

</comment><comment><USER25> PLT Scheme is hands down the most powerful programming environment in existence. It's sort of like the McLaren F1...those who know, know. And those who don't mistake it for a Mazda Miata.

<comment><USER26> I'm getting into scheme for a project I'm working on. Sometimes I'm really impressed by how much can be done with some tight coding. I've done some Arc coding as well, and I think that it could have the edge if it matures and gets some library support.

</comment></comment><comment><USER27> Processing! <http://processing.org/>

(Not general purpose, admittedly, but very very satisfying.)

</comment><comment><USER28> Take a look at the Appcelerator/Titanium platform <http://appcelerator.org/> it's like Adobe AIR but you can build using Javascript, C, Ruby, and/or Python, UIs in HTML/CSS on top of Webkit. So you can use your existing knowledge, know you have a capable rendering engine by default and build desktop apps that can deploy to Windows, Mac and Linux. And it's Open Source (another difference vs. AIR). It's still in development, beta coming out in a couple of weeks, but certainly looks very promising.

Alternatively, if you'd like to try doing some games, there's LÖVE, a 2D game engine in Lua: <http://love2d.org/>

Who knows, either may provide the new air of excitement you're looking for.

</comment><comment><USER29> I haven't used it, but _why's "Shoes" is supposed to recapture some of that early programming magic.

<http://shoooes.net/>

</comment><comment><USER30> smalltalk. specifically, Digitalk's Smalltalk/V (DOS, Windows, OS/2, Mac) and their final version Visual Smalltalk Enterprise. I have never been more productive than with that environment. Squeak doesn't do it for me.

[EDIT] earlier today I cleaned out several bookshelves. I tossed about 100 old tech manuals...I kept all the Smalltalk/V books ;)

<comment><USER31> This was one of the most fun ones. Need to try squeak.

<comment><USER32> If you are on Windows, you _need to try_ Dolphin first.

<comment><USER31> I don't do any windows anymore, but Dolphin looks like quite the thing.

<comment><USER32> Me too. Squeak/Pharo are nice (and I use them), but if someone is new to Smalltalk, Dolphin does a much better job of converting them. Very clean and compact libraries, excellent UI framework and nice UI.

</comment></comment></comment></comment></comment><comment><USER33> Joy? <http://en.wikipedia.org/wiki/Joy_(programming_language)>

<comment><USER33> In all seriousness, I'd say Ruby. Whether you use Rails or not, Ruby really is a beautiful language.

</comment></comment><comment><USER34> I find Scheme + C to be the most satisfying combination. I love the abstractions that Scheme provides and good C bindings means I don't have to worry about what libraries may or may not be available.

</comment><comment><USER35> the problem is, modern tools are too complex. they are trying to be smarter than the user

i like dumb, old power tools that don't get in my way -> unix+vim+lisp

</comment><comment><USER36> One of the most enjoyable experiences I've had recently was with Arduino. It's amazingly easy to build cool shit with it. It's both rewarding and fun.

An example (since I haven't recorded any of my projects yet; also sorry it's in Portuguese): [http://blog.bsoares.com.br/processing/controlling-rgb-led- wi...](http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino- and-processing)

</comment><comment><USER37> Ruby. It almost feels like I'm not programming, the syntax is simple and beautiful, and you can do a hell of a lot without much code (especially if you include the thousands of gems!)

For web frameworks, Rails for me is still awesome. Merb is also nice (even though I've used it less since the news it's being merged into rails), as is sinatra.

</comment><comment><USER38> I bet that the changes in technology are a smaller factor than the changes in you. Most things are more exciting when done for the first (or nearly first) time.

To measure this properly, perhaps we could look at the eagerness with which children learn programming now as compared to fifteen or twenty years ago.

</comment><comment><USER39> I find Ruby + C combination the most enjoyable for non-web things.

But for web I prefer Python/Django.

</comment><comment><USER40> Lua and Python.

For real projects, Lua will expect you to know C, but in exchange, it avoids duplicating a bunch of functionality that you already have on hand. (Calling C from Lua is trivial.) The designers have done an excellent job of keeping the language simple and clean without detracting from its expressiveness. (Lua is to Scheme as Python is to Common Lisp.)

Python is bigger, and has more design quirks for backward compatibility, though Python 3 attempts to fix this. OTOH, it also has far more off-the-shelf libraries, and a significantly larger community.

(Forth is also fun. I'd be lying if I said I've ever done anything useful with it, but it really captures the wonder of being a kid and playing with Basic.)

</comment><comment><USER41> Ruby + Merb. Spend the entire time with both my code and Merb framework code open. It's well written and easy to understand, so there's no blockers.

</comment><comment><USER42> This isn't a programming language, and I'm very young, and obviously you're past this ...

but I'm taking my first baby steps in Vim, and damn but it's bringing me joy! (I like it so much, this post comes to you courtesy of vimperator firefox plugin).

</comment><comment><USER43> Ruby. The language was designed _specifically_ for this.

<comment><USER44> Ruby is SO much more than rails, which I think people need to be reminded of from time to time.

</comment></comment><comment><USER45> JavaScript is the new BASIC. It runs in any browser. Or you can also run your scripts with a dedicated interpreter.

</comment><comment><USER41> If Palm Pre takes off, I can imagine the development environment for that being a joy to code. Since its all webkit based, with html+css+javascript, it should be easy to work with.

I haven't dived in yet, as I'm waiting for them to establish some hold on the market, but as a web developer anticipating doing mobile apps, I'm hoping for some success.

Would be cool if Android 3.0 would take up this idea of using web technologies to interface with mobile apps. If anyone had a vested interest in web technologies, its Google.

</comment><comment><USER46> Lua. Minimalistic elegance.

</comment><comment><USER47> I have a similar background, apple II and then amiga programming when I was young. There are few (no?) programming environments as simple and "fun". That said, I really enjoy iPhone programming. If only because the hardware, UI and "form factor" let you do fun things that simply aren't possible on a desktop or laptop computer. Software like the Smule Ocarina is only possible with a device like the iphone. The simulator leaves much to be desired but am having a lot of tun testing on the phone.

</comment><comment><USER48> For making web sites/apps, CodeIgniter (PHP framework) made the server-side fun again. Same for jQuery on the front-end. Especially with CI, I feel like I can get into a good groove and get lots done.

Of course, I'm probably biased: at my day job they've chosen Java for web develoment. (The "approved" libraries/frameworks are not only years behind, but onerous.) So, in my spare time, almost anything that's not-Java is fun.

</comment><comment><USER49> I'd definetively say that the Unix environment are fun to have around as a platform for programming almost any modern programming language.

Eclipse with its basic features for java development are fun. When you have learnt how to exploit the features and learnt to live with it's limitations, it's at least not getting in your way. But I guess you can say that about most Ide's when you have learnt it well and grasped an understanding of what you can and can not do with it. So now I fire up an Ide for the project and management off and do the hardcore editing in Vim, leveraging the best of the two worlds. And are having fun too.

The day's for the "one size fits" all may be gone.

I think they days for small beautiful fun to use languages are finally gone with the end of Moore's Law. Everything will become more complex to deal with. Thinks the trick to leverage the fun for a project is to use different environment for different contexts of the project, and create tools for dealing with your specific needs.

</comment><comment><USER50> I think there are many high-level languages that are fun to use -- various Lisps, Python, Ruby, even JavaScript.But if you are finding RoR tiresome to keep up with, I suspect it is more a question of the pace of change than the language itself.

In an ideal world, what kind of programming would you want to do? That might point you in a direction.

</comment><comment><USER51> Does nobody else like like straight up C++? When I was young I enjoyed BASIC languages, but ever since graduating middle school I've been a C++ guy. I love the intricacies of the language and crazy things you can do with it, and still get a huge amount of satisfaction out of being able to write really simple code that does really complex stuff.

</comment><comment><USER52> Ruby + Rails + MySQL + nginx + mod_rails

</comment><comment><USER53> Until now I have done Lisp programming only for academic purposes ,but it was still a lot of fun.

</comment><comment><USER54> Django! <http://www.djangoproject.com/>

Developing on this Python web framework is really a joy.

You can instantly start coding and testing by reading the official tutorial.

</comment><comment><USER55> I'm sure there are those who would disagree with me on this, but I've found Adobe Flex an absolute joy to work with. It certainly has it's limitations, but it's so easy to make your application just plain 'look great'. It only took me a few months before I really felt like I understood everything about the underlying architecture. I love programming in it now.

Of course, once a person feels comfortable with virtually any LISP dialect, they usually LOVE it.

</comment><comment><USER56> I'm getting surprising amounts of joy from Qt (via c++). It's well thought though, has proved to be fairly painless to use, and is getting very comprehensive in it's current version. Also, I love the performance.

Interestingly, I haven't got the same feeling for XAML, which I thought I would before starting to use it as there are conceptually nice things about this framework.

</comment><comment><USER57> Yes, in my personal opinion NOLOH (<http://www.noloh.com>) is quite a joy to develop with.

</comment><comment><USER58> I find Python a real joy generally.

JavaScript is fun in the sense that you can do some very cool and interesting stuff fairly easily.

</comment><comment><USER59> I'm a big fan for XNA for messing around. It lets you draw with minimal BS. And the tutorials actually work.

<comment><USER60> I thought XNA was more a gaming library than a language...

</comment></comment><comment><USER61> haven't tried it yet, but hacking around with arduino looks pretty fun and is on my list of things to try

</comment><comment><USER62> Coding something that excites you overcomes the annoyances of the language/environment doesn't it?

<comment><AUTHOR> Depends on the environment. I've never been able to finish something in Visual C++ using the Windows API.

</comment></comment><comment><USER63> OCaml :)

<comment><USER40> Just be warned that until you understand how OCaml "thinks", it'll seem like _the language that whacks you on the wrist with a ruler whenever you try to do anything_. Awesome language, kind of a quirky implementation though.

Of the books I've read, _The Little MLer_ conveys the mindset the best. (It's in the same style as _The Little Schemer_, but is about ML, type systems, and type inference in general.) For learning OCaml and its toolchain, the French OReilly book (free English translation: <http://caml.inria.fr/pub/docs/oreilly-book/>) is a good text.

</comment></comment><comment><USER64> I like Python on Google App Engine + Prototype.js

</comment><comment><USER65> www.linuxfromscratch.org

I took a p4 2.4ghz w/ 1gb ram out of the closet and have been partitioning, compiling, bootstrapping, to my heart's content. To be honest, working with a super minimal system at the cli is a lot like coding in all caps on my old Apple II+.

</comment><comment><USER66> Why pick one or two? All of them are a joy. I get paid to play with software and computers.

</comment><comment><USER67> Ruby/Rails.

</comment><comment><USER68> Scheeeeme!

</comment><comment><USER69> Joy is a your own product, at least for a half. It comes from combination of state of the mind, which you can cultivate, along with your current mood which is based on what you think.

For example, if you can think about vi editor not the way that it is a mess of one-letter commands and beeps, but that it is very rare almost 40 years old masterpiece of smart design, efficiency and minimalism this approach might work. Think that it was created for text-typing pros, who types very fast without even looking on keyboard, and so on. If you prepare yourself for the way of discovering its wonders and ideas, and do realize that it is the best tools for storming throught dozens of files in /etc, and the sequences like '/^debug[Enter]I#[Esc]ZZ' are beautiful you will probably feel a joy.

Same thing, if you will think about emacs (in console mode, without gtk gui) that it was designed to work via hardware terminals, like this lovely DEC's vt-i-didn't-remember-the-numbers boxes, with green letters and that wonderful hardware scrolling, you will probably understand, why there are so many of those Ctrl-x Crtl-x commands in it, and how smartly these commands was arranged.

The power and beauty of 'screen' utility is a common knowledge.

As for programming languages, just think about ideas behind them. Think that C is a great engineering masterpeice, that Perl is a most beautiful way to create a completely mess that works, that Ruby was developed by truly eastern mind, and lisp.. you know.

I can't tell something about PHP except that it is an swiss-knife stuffed with low quality blades, and Java is the biggest buzzword ever (anyone can run some once-written spring-hibernate-jsf-with-all-depencies mess everywhere? on ARM?

We are what we think. =)

</comment><comment><USER70> Shell script keeps me happy, you've not lived until you've used join(1) in production. <http://man.cat-v.org/plan_9/1/join>

Assembler is good especially on something clean like a microcontroller. I like the AVR instruction set. [http://www.maht0x0r.net/library/computing/avr/docs/8bit_avr_...](http://www.maht0x0r.net/library/computing/avr/docs/8bit_avr_instruction_set.pdf)

Hook up an AVR to a GSM module and a SIM and you've got you're own programmable cell phone, like this one [http://www.sparkfun.com/commerce/product_info.php?products_i...](http://www.sparkfun.com/commerce/product_info.php?products_id=8700)

</comment><comment><USER71> I love LAMP.

It sounds like you might like Smalltalk or even XCode and Cocoa (Interface Builder, etc.).

Erlang/OTP and Erlang web stacks (Mnesia/CouchDB, Yaws/MochiWeb) are a lot of fun.

<comment><AUTHOR> I do love Smalltalk (I'm reading SICP). Can it do graphics/UI stuff? One measure of joy in programming for me is to be able to easily build a simple side-scroller. I'll have to get a Mac to try Cocoa I suppose.

<comment><USER71> Side scroller...PyGame?</comment></comment></comment>