...and I'm surprised there's a whole section on using recursion in Python, considering Python guards against recursion depth. (tail recursion is especially applicable here). The author seems to have a solid understanding of Python, so I'm a little confused.
In general, if you use recursion in python, you're gonna have a bad time. Better to use an iterator (which is usually more memory efficient anyway because you're not slurping up the whole thing...).
Here's an experiment: Get a random set of pie charts without labels on them. Get a large group of people. Now get those people to go through the pie charts and add what % of the pie chart they think each slice represents.
Now, get a set of bar charts and do the same thing.
In both experiments time the participants. You'll need two groups, a group that knows they're being timed and one that doesn't know.
What group was more accurate? What group was able to complete the exercise faster?
The reason that using pie charts is, in and of itself, a dark pattern is because the results of this experiment support bar charts as a more concise, more easily understood way of communicating information. In other words, the only real reason you'd use a pie chart is to obfuscate information. Or, well... to lie. If you're just using it because you don't know better, then you're negligent and misleading people without even knowing it.
As a computer scientist, it's a joy to discover when you're wrong about things. So I'm enjoying being on the wrong side of the discussion for once, because I'm learning lots.
Thank you for your replies tptacek, I've learned much from this discussion. If I could edit my top comment, I would.
I want to call particular attention to the author's point about Apple's pie chart.
Not only is Apple's pie chart used for telling lies here, I would argue that all pie charts are used for telling lies.
The only thing a pie chart gives you is it tells you that everything in a category adds up to 100%. It doesn't tell you what 100% is, or why 100% is good, or bad, or let you compare across charts, or set goals.
You can accomplish this same thing with a bullet graph, developed by Stephen Few. You make a bar chart, then put a line through it to represent your goal (or 100%). Then, it's simple to compare multiple categories and model very complex information in a simple to understand way.
So remember this: The next time you see a pie chart, know that someone is lying or trying to appear more impressive than they actually are.
The worst part about this particular way of graphing information is that it's so ingrained in our culture (it's taught in Kindergarden), that people don't even understand that they're lying, even when they are.
Apologies. Perhaps I'm being a master of the obvious here, so I'll restate more simply:
When people try to implement security without actually thinking about what the system is doing, it creates weaknesses in the security, not due to algorithmic weaknesses, but because the organization and the engineering discipline for the future is compromised. Thus, while "just use bcrypt" or "just use HMAC-MD5" might work today, the organization doesn't have the mind to update it when it finally does break.
This is exactly what happened (and is still happening) today after MD5 was broken.
On the contrary, "It has not been broken" is exactly what I would expect a programmer to say.
If the security of an algorithm is weakened, then it's important to evaluate the use of the algorithm and make efforts to implement stronger security now. You should feel fortunate that you even get the time to move to something better before all hell breaks loose.
This is the same kind of thinking I hear daily when people say things like, "Just use bcrypt" without thinking about the consequences.
The tendency for programmers to think of security in a nihilistic way continues to boggle my mind. I don't think the article suffers from an alarmist tone. I think it's correct to look at something shitty and call it shit.
Experienced Twitch streamer here. I've been streaming for almost 2 years now to Twitch.
On Profitability: In the gaming space, it's all about the sponsorships. Yes, Twitch ads are going to be nice cash for them, but I would ultimately expect their business to ride on helping promote company's gaming events.
Stream partner payouts are trash, pure and simple. Pull in 100,000 uniques over a month? You're not even eligible for partner status. On YouTube, you can get ~$300.00 for the same viewership. Somehow I don't think that partnerships are costing them much money at all.
Own3D.tv was only a "competitor" in the sense that they promised to pay out more to stream partners. They were full of lies. Several times Own3D.tv had big pushes to gobble up popular streamers from Twitch. I was contacted several times. Overall the Own3D.tv site was trash compared to Twitch's features, and the second you ask them the hard questions, "How often do you pay / When do I see my first paycheck", they couldn't answer you.
TLDR; Twitch will be profitable by keeping their costs down, building partnerships, and building brand recognition. Advertising isn't the end game for Twitch.
Some people will skim and get the information. Some people will read and get entertainment. Some people want the details, because they need a deeper understanding. Some people want a high level overview, because they already understand things and just want the information.
The huge problem with this suggestion is that society is built around the idea that you have a "High School Diploma" and a "College Diploma", so just up and quitting school isn't a good solution.
I think the best solution for someone trapped in the school system is to basically do a few things:
Middle School
1. Survive.
2. Get ahead. You're not old enough (in society's eyes) to out maneuver the adults yet. Prepare yourself.
3. Develop a love and interest in another foreign culture.
High School
1. Take every "legal" chance to get out of normal classes. Do joint-enrollment, AP, and technical classes.
2. If you must take "normal" classes, sleep in them, or do tomorrow's homework (the rest of the year's homework if you can) in class. Test well. Then study more interesting stuff with the extra time you have at night. Remember: Homework is largely graded on completion and is typically the largest part of your grade, so do the easy thing.
3. Apply for scholarships like hell. Every dollar you can get now is worth 1,000 times itself in the future.
4. Learn a language and culture of a (very) foreign country. Don't take Spanish or French. Do German, Chinese, Russian, Japanese, Korean, etc. Learning a language doesn't just allow you to interact with others from that country, it gives you perspective on your own situation. This is vital to your education.
University
1. Buy the best education you can for the value. An online degree is cheap, but not valuable. An Ivy League degree is expensive, but the value may not add up to the expense. Try Georgia Tech, not MIT. Try University of Washington, not Harvard. Use your own judgement here.
2. Don't go into debt if you can.
3. Do an exchange program. Spend a year in a country you care about. See also: High School #4. Don't stay in the "international housing" if you can. Try to stay in the dorms with other normal students.
4. While in University, do paid work in the field you are going into. The more recognizable the name of the company you work for, the better. If you're doing work at the University, don't do retail, food staff, etc. Do technical support, tutoring, or administrative. Not only are these jobs easier and pay more, but they look way better on a future resume.
5. Take an advanced finance class and an advanced programming class, even if you have to "sit in" on the class (larger universities don't take roll and you can sneak in these classes sometimes). These are the two human systems that make our world work today. If you don't get this, you're going to get swindled as a professional.
6. Join clubs. If they don't exist, make your own club. Get on the club's officer list. Put it on your resume if it looks good. You'll make lifelong friends from these people. You might even start your own business with these people.
7. Don't really bother with Frats / Sororities / Bars. The real fun and parties are with deep friendships you make and that allow you build a better lifestyle. See #6.
RE #3: They could also already have the data and simply be querying Facebook to establish a "backwards chain of evidence".
Hilariously, I'm reading Cryptonomicon right now and that's exactly what Sergent Shafto and crew do by pretending they're finding German submarine secrets.
What all of this fails to mention is that Jannard was essentially forced to sell Oakley to Luxottica (https://en.wikipedia.org/wiki/Luxottica). Luxottica has a gigantic monopoly on the eyewear industry and one day refused to sell Oakley brands in their stores unless they sold out. The high price tag with the sale is to keep Jannard quiet.
I think Jannard has developed a kind of healthy-paranoia here, because the work he's doing is flying in the face of titans. His persona makes him want to stand up against the big boys and say, "Told you so!"
In my opinion, he's right to be super paranoid and fall into the background. He doesn't want RED to become another Oakley.
This this this. And what is the turnaround time on getting new servers provisioned for development? Are they using Docker, or are they stuck in Windows land where there's no open source private PaaS solution that makes any sense? How many of those servers have virtual machines provisioned and then those virtual machines sit idle? How long until the cruft virtual machines are so populous that they take up an ever increasing amount of your internal infrastucture and it's a nightmare to manage?
In general, if you use recursion in python, you're gonna have a bad time. Better to use an iterator (which is usually more memory efficient anyway because you're not slurping up the whole thing...).
Of course, you can always hack it and sys.setrecursionlimit, but WHY WOULD YOU DO THIS. https://docs.python.org/2/library/sys.html#sys.setrecursionl...