Amazon Cracks Down on Scams, Fires Employees Over Data Leak - <AUTHOR> https://www.wsj.com/articles/amazon-amid-crackdown-on-seller-scams-fires-employees-over-data-leak-1544437800 <comment><USER2> _Amazon.com Inc. AMZN -4.12% is fighting a barrage of seller scams on its website, including firing several employees suspected of having helped supply independent merchants with inside information, according to people familiar with the company's effort._

 _Amazon was investigating suspected data leaks and bribes of its employees, The Wall Street Journal reported in September. Since then, the company has dismissed several workers in the U.S. and India for allegedly inappropriately accessing internal data that was being misused by disreputable merchants, these people said._

 _Amazon in recent weeks also has deleted thousands of suspect reviews, restricted sellers' access to customer data on its website and stifled some techniques that trick the site into surfacing products higher in search results, according to the people._

 _...Sellers also are buying Amazon wholesaler accounts on the black market to gain access to volumes of product listings, people familiar with the practice said. These accounts on Amazon's Vendor Central system are designed to enable wholesalers to edit product listings to ensure they are marketed accurately. But some sellers misuse these accounts to alter rivals' product pages, such as by changing photos to unrelated items, these people said._

 _...Some Chinese firms are selling wholesale vendor accounts for roughly $15,000, or renting them for up to $1,500 a month, the people familiar with the matter said._

 _...Amazon has increased efforts to scrub the site of potentially suspicious reviews, according to sellers. In recent months, some product listings lost thousands of reviews in a day, a number that can take years to build. Some of the reviews were legitimate and erased inadvertently, according to the sellers and a person familiar with the matter._</comment>


Chipotle to test burrito delivery by drone - <AUTHOR> https://techcrunch.com/2016/09/08/chipotle-to-test-burrito-delivery-by-drone-with-project-wing-at-virginia-tech/?ncid=rss&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Techcrunch+%28TechCrunch%29 <comment><USER2> Now e-coli is raining from the sky! :D Seriously though, I really hope drone delivery takes off. If I could get random things that I need delivered to my house in under 30 minutes by a little flying robot, that would just be so neat and convenient. At least, until it gets stuck in the neighbor's tree on the way to my house.

</comment><comment><USER3> Perhaps they should test delivery by truck?</comment>


Show HN: Flashcards for Frontend Developers - <AUTHOR> https://nlaz.github.io/flashcards-for-developers <comment><AUTHOR> Hi HN, I've been collecting flashcard decks around some of the harder topics in frontend development and recently built a site around it. The site is built with `create-react-app` and uses Airtable's API so the app itself is actually pretty small. Hope you enjoy it. Let me know which topics you would like to see in the future. Thanks!

<comment><AUTHOR> I'm also happy to answer any questions you might have or answer any issues you might have with it :)

</comment></comment><comment><USER2> I'm looking at your repo as well, can you provide a high level overview of the _src_ folder?

I'm learning react at the moment, about halfway done through a 40hr course. Am interested in how you organized things and what each file does if you don't mind providing an overview

And where the API airtable calls are at (which file is it?)

<comment><AUTHOR> Glad you are taking a peek at the repo. The `src` folder holds the app pages, common components, a scheduling utility and various other setup files. The API calls come from a file called `apiActions`. You might be interested in the `create-react-app` project to learn more about how the overall project is structured: [https://github.com/facebook/create-react- app/blob/master/pac...](https://github.com/facebook/create-react- app/blob/master/packages/react-scripts/template/README.md#folder-structure)

</comment></comment><comment><USER2> it loads kind of slow

by the way someone who is reviewing flashcards should both have the options of using

\- 1. only the keyboard

\- 2. only the mouse

Keyboard input has delay but you should really consider a mouse only approach the way anki works

This sounds really interesting though, do you have screenshots of what your airtable table looks like. I want to see the API calls as well to it, can you link and share the airtable view here?

how does report a card issue work? [https://airtable.com/shrUv34My1n7HQSwd](https://airtable.com/shrUv34My1n7HQSwd)

have you also looked into sirupsen's airtable anki integrator?

[https://github.com/sirupsen/anki-airtable](https://github.com/sirupsen/anki- airtable)

<comment><AUTHOR> Sorry if you are still experiencing load times. It might be worth it to build a cache layer for the API so that the responses are quicker. Will look into how to improve that :/

It should already support both mouse and keyboard options for reviewing flashcards. Is one of those methods not working for you?

The Airtable sheet is pretty simple. It is simply a Card table with Front, Back, and Deck columns and the Deck table contains all the other information you might see on the site. I also have a table for reporting issues through that report form you included.

That's really cool. I hadn't seen that before. I've bookmarked it for future ideas :D

<comment><USER2> mousing over things with the way you setup your flashcard site seems inefficient

Picking "I got it" or "No I didn't answer correctly" should be right next to the "show answer" button

Because your constantly reviewing cards constantly it gets super tedious

Is the reporting feature just an airtable form?

<comment><AUTHOR> I would love to know how to improve that experience. I don't think I'm understanding the exact issue though. The buttons should be right next to each other already. Are you suggesting the buttons should replace each other when toggling the answer so the mouse has to move less distance?

Happy to work out this issue individually if you would like and address other questions/feedback you might have. My email is email@example.com. Thanks!

You are right. The reporting feature is just an Airtable form.

<comment><USER2> example, bottom of my anki app

[https://i.imgur.com/zv2lEY7.gif](https://i.imgur.com/zv2lEY7.gif)

my email btw is in my username if you click it

</comment></comment></comment></comment></comment><comment><USER3> I like that it works well on mobile. I would use this to pass time while on public transit etc.

Can I make my own deck?

<comment><AUTHOR> You cannot create your own deck at the moment. Hoping to add more features soon :)</comment></comment>


Wishbox: Google+ Like Feedback Tool with Annotated Screenshots - <AUTHOR> http://www.jotform.com/wishbox

<comment><AUTHOR> When Google+ came out with the screenshot feedback tool, there was a lot of interest for such a tool. We made Wishbox so all websites can have a similar way to get feedback. Plus we added a screenshot editor to draw arrows, circles and jot down notes on the screenshots without ever leaving your page.

Wishbox is useful for all sites, but I think it is especially useful for other web apps. In our web app (JotForm) we get over 100 support queries every day, and having screenshots of the problem makes a big difference on the time it takes to resolve an issue.

Since this is Hacker News let me share how we made wishbox.

I wish I could say we used canvas to take screenshots. We really wanted to do it that way. We gave it a big shot. We spent a month to do it in canvas. Unfortunately, taking screenshots with canvas is a dead end. Especially when you need to get it work on any web site, and on any browser.

But, it worked really well for the drawing tool. We built the tool on top of Fabric.js. Fabric.js is a great library with a lot of potential. We will to contribute our bug fixes and additions to the project soon.

So, how do we take the screenshot? In a nutshell, we get the current DOM of the page, send it to the server, run it on wkhtml2png and return the screenshot to the drawing tool.</comment>


Coronavirus Fears Drive Stocks Down for 6th Day and into Correction - <AUTHOR> https://www.nytimes.com/2020/02/27/business/stock-market-coronavirus.html <comment><USER2> Yep. From the looks of it some brokerage firms are getting slammed.

[https://twitter.com/Vanguard_Group/status/123203630516237926...](https://twitter.com/Vanguard_Group/status/1232036305162379264)

<comment><AUTHOR> I always wonder, is this the time to start buying stocks?

<comment><USER3> It is always time to buy stocks when the numbers are down. Especially if they offer dividends. They will eventually go up again, unless the company goes completely out of business. There are companies you pretty much know will stick it out through the bad times. Eg: Even if Coca Cola stocks suffer because of an artificial sugar shortage, they'll eventually get back on track. They're not going anywhere, or if they do, they'll be one of the last ones to bail.

As long as you don't panic and sell beforehand, you will most likely profit. Warren Buffet repeatedly states that you should look at the long term - and he got a little bit rich sticking to that advice.</comment></comment></comment>


The paragon of inefficiency - wells-riley http://blog.wells.ee/the-paragon-of-inefficiency

<comment><AUTHOR> If you can't take an hour out of each day to do an intensive physical activity (as in actually raising your heart rate, not just building up arbitrary points by moving around more), you're doing it wrong.

Taking regular time out for physical activity gives you fitness (real fitness) and focus (which helps you do your job more efficiently). These "fuel bands" are basically expensive ways to fool yourself.

<comment><USER2> > If you can't take an hour out of each day... you're doing it wrong.

So if you work a nine-hour day, take 3-hour evening classes to advance your career, get the required 8 hours of sleep a night, commute for 2 hours, spend 1 hour with your family, and then another hour for showering, dressing, breakfast, etc., you're doing it wrong?

I think a lot of people don't have an extra hour every day to spare. Your attitude is awfully condescending.

<comment><AUTHOR> You may think I'm being condescending but I'm not. This is not my judgment of you or anyone else; these are the cold, hard facts of life.

If you don't keep your body in shape, it WILL fall apart on you. An investment in your body is an investment in your future. You can either be the 70 year old who runs marathons, or the 70 year old with a walker. The choice is yours.

There are a million reasons why it can't be done, but the funny thing is, when someone wants something bad enough, he tends to find ways to make it work.

I'm sure you can keep heaping more and more things on our fictional family straw man until it's impossible for him to do anything at all. That's fine. There's always one more reason why it can't be done or shouldn't even be attempted. But life is quite indifferent to our reasons, and plods on just the same whether we're in control or not.

It's really no skin off my nose how other people live their lives. I'm just pointing out the creeping dangers that lie ahead.

</comment></comment></comment><comment><USER3> ... Right up until you work out the most efficient way to reach your desired level of inefficiency ...

<comment> wells-riley We have to go deeper...

</comment></comment><comment><USER4> Gotta love the cognitive effects of measuring simple data. Even if fuel points are arbitrary, the behavior change is a welcome one.

<comment><USER5> The fact that the points are arbitrary I think prevents someone from finding ways to hack or optimize it. If it counted calories, then you would look online for the best ways to burn calories. If it measured heart bpm, then you would find ways to cheat that.

</comment></comment><comment><USER6> Sold. So is the Nike the one to get? I thought I had read that people didn't like that one?

<comment> wells-riley I chose the fuelband because I know people who already have one. The social element is minor, but still somewhat helpful. The iOS app is really useful, and the device itself is really 'cool'. People swear by Fitbit or jawbone Up too. There are also some iOS apps that track a couple of those metrics on a budget. For my money, nike was the way to go.

</comment></comment><comment><USER7> Could you wire it directly to the limbic system so you only get hungry after you have moved around enough?</comment>


Ask HN: Any CLI or GUI tool for getting relative paths between 2 folders? - <AUTHOR> There must be a tool that makes it easier to get a deep relative path between 2 far away folders with ease! Any suggestions? <comment><USER2> realpath

[https://www.gnu.org/software/coreutils/manual/html_node/Real...](https://www.gnu.org/software/coreutils/manual/html_node/Realpath- usage-examples.html)

</comment><comment><USER3> You could write it in one line of Python or so, using os.path.relpath</comment>


ClojureScript Compiler Compiled with ClojureScript - <AUTHOR> https://github.com/kanaka/clojurescript

<comment><USER2> I never ran ClojureScript, but I am curious about the procedure to call functions from other java script libraries. Is it as seamless as the call of a java function from the JVM Clojure?

<comment><USER3> Yes, it is. You can just do (js/$ ".something") and you'll get jQuery object back.

<comment><USER4> And if you are lucky enough to be dealing with a _functional_ javascript library like d3, you can even use cljs functions as arguments to your js library. This leads to very succinct and powerful interop.

For example:

      (.timer js/d3 (fn []
            (-> root (.selectAll "g") (.data curClockData)
                (.select "path")
                (.attr "class" #(str (:key %) (:which %))))
            ; return false to keep running
            false))))

This snippet does this twice to provide a longish function to the d3.timer call and a small inline one to attr to set a class based on the data in the selection. More context available: <http://bl.ocks.org/4326896>

ObTopic: cljs in cljs does sound dreamy. Would this also enable <script type="text/clojurescript">?

<comment><USER5> Nice D3 example!

I predict we will see an "official" CLJS-in-CLJS around the time of the next Clojure/conj ;)

<comment><USER6> And hopefully "unofficial" CLJS-in-CLJS by Clojure West. :-)

I just pushed type/record/protocol/reify support. Next big thing is to fix runtime namespace creation. Then file I/O. Then all the bugs discovered while try to compile the compiler using the compiled compiler (i.e. self-hosting).</comment></comment></comment></comment></comment>


Mattress Firm files for bankruptcy - <AUTHOR> https://www.washingtonpost.com/business/2018/10/05/wake-up-call-traditional-mattress-chains-mattress-firm-files-bankruptcy/ <comment><USER2> I wonder how much money they wasted on the rebranding from the Sleep Train brand to Mattress Firm.

<comment><USER3> Changing the name from the Sleep Train was a bargain at any cost.</comment></comment>


Ask HN: What has made you a better problem solver in software engineering? - <AUTHOR> Are there any resources you recommend? Or do personal projects give you enough problems? And how do you map solving these problems to patterns you can use in a future problem you'll face? <comment><USER2> Practice. A lot. Learn the whole stack (down to the hardware, understand failures modes and limitations of each layer).

Solve many different problems, make experiments and throw away code. Make connections between sub disciplines.

You have to have the attitude that if somebody understood this, then I can too, if nobody did, there's no good reason why I can't be the first one.

Fail a lot and learn. Think about every failure you had, but as a problem to solve not a comment on your value as a person/engineer. What could you have done differently? What were the signs that got you in that situation?

For tricky problems, what works for me is the obsess-and-let-go strategy. Work intensely on some problem for some time, if you make no progress, just let go of it, forget about it, do something else and perhaps your brain will connect the dots. Talk about the problem with other people. Explaining it and different points of view usually change your perspective enough that you are no longer stuck.

Also note that reading about something is not the same than doing it. You need to read and attempt to replicate, even if a toy version of the thing to better understand. Some things just take time an effort to seep in.

<comment><USER3> That's exactly the same advice I would give. Practice a lot and practice difficult things.

</comment></comment><comment><USER4> Things got a lot better for me when I realized almost nobody gets to the best solution on the first try.

Cobble together an ugly and hacky solution that you can confirm solves the problem, then iterate and iterate until you clean it up well enough to ship it.

<comment><USER5> I think Kent Beck said it best: Make it work. Make it right. Make it fast.

<comment><USER6> I will add one precursor for those stuck in analysis paralysis....

Make it.

You can't make it work if you haven't made anything.

</comment></comment></comment><comment><USER7> 1\. Be thorough. Be sure you fully understand the issue, instead of jumping to conclusions.

2\. Keep asking 'why'. Make sure you understand what _the_ problem (or rather the requested feature) is, instead of being able to parrot what someone else _says_ the problem is. (Even if the conclusion ends up being the same, you need the gained comprehension to determine the right solution.)

3\. Separation of concerns. Keep practicing on separating orthogonal concerns that are all seemingly relevant to a problem. Evaluate each concern separately. Drop any of the concerns that are irrelevant in solving the solution. This can save you huge amounts of time, enough to make a deadline you would otherwise never make. (This will also help you to reduce the amount of added complexity.)

</comment><comment><USER6> Start at the bottom, make your bottom layers solid first.

You can't reliably deduced anything about what your current problem is, if the things it depends on are flaky.

Design by Contract. Understand it. Used it. Turn your asserts on always.

Turn on all warnings that don't give false positives that your compiler / tools provide.

Fix them don't mute them.

Run around your code base and find every damn place where some damn fool has discarded an error code and check and report all failures.

You'd be flabberghasted by how many "it's impossible" bugs I have found and fixed by that one simple action alone!

<comment><USER8> My coworker is a fan of:

      try:
        something() # that throws nonfatal errors frequently
      except:
        pass

"it saves time in development" they say. Good luck if something in that (non trivial) function call breaks.

Ugh.

Don't be like that.

If you don't know the precise error, heres the solution (in python):

      except Exception as exc:
        log("{}: {}".format(type(exc).__name__, exc))

Bingo, you now know what to catch. Catch that error, move your broad exception down (or remove if you can)

<comment><USER9> How can his code pass code review?

</comment></comment></comment><comment><USER10> There are a ton of stuff to write about this but so little time so I'll try to just give one thing that helped a lot (small effort, large payoff)

Be explicit with what phase of your "thinking" you're in. When faced with a problem, focus on giving lateral/divergent ideas and come up with a multitude of different solutions. Don't spend time thinking why/why not a solution is good, just note the solution itself and move on to finding another one.

Once this is done, start the next phase which is the convergent thinking. Sit down with all the different solutions and start compare the tradeofs between them. Eventually you'll reach either some middle ground of some solutions, or just one solution.

Doing this when collaborating with other engineers is also super helpful, as people won't feel like their ideas are being shut down as soon as they utter them, so more people can part of the whole process (if needed)

<comment><USER11> The "double diamond" is very helpful getting to a good solution. It's my preferred way to structure idea/solution generation.

[https://www.hallaminternet.com/how-to-think-creatively- using...](https://www.hallaminternet.com/how-to-think-creatively-using-the- double-diamond-framework/)

</comment></comment><comment><USER12> Always asking "why".

No one will ever successfully transfer the problem in their head to your head first try. You will need to ask a lot of questions to try and bring your understanding near their understanding.

Equally you need to actually understand why the problem you're solving is a problem. If someone wants the header on their website to be bigger, that's a very easy thing to do but there's always a reason why they want it bigger and knowing that will help you do it properly.

Also, always ask why whatever solution you came up with works. There are very few situations where the actual answer is "Invoke these magic runes in the right order and pray". Spending the time to find out what the magic runes are and what they do will help you make sure that a) The problem won't come back b) Your solution is actually a good one c) You can solve similar problems in the future.

</comment><comment><USER13> Empathy, taking with people, iterating often with the clients inputs.

Realizing that technology and architecture ultimately doesn't matter that much for 99% of the use cases and sticking to proven technology to deliver value (postgres, rabbitmq, ansible, redis and django)

</comment><comment><USER14> Scientific method. I'm not being presumptuous.

When coming across a problem, I type out all hypotheses on a notepad.

Microphone doesn't work on app? Is it this device specifically? Is it the file system? Faulty recording code? Null pointer somewhere?

Then I find the simplest, hackiest way to (dis)prove the hypothesis. Be sure to narrow down the test as far as possible.

What a lot of people do is just bash random things, often the simplest hypothesis, repeat that same thing for half an hour, do something else, then repeat what they tried earlier. Or in somewhat tougher problems like pathfinding, where each hypothesis takes an hour to test, a lot of people get intimidated and procrastinate.

</comment><comment><USER15> Getting away from the computer.

Ask and agree on the "why" behind requirements, then the what or how to realize it becomes more easily negotiable.

</comment><comment><USER16> Throwing away assumptions and trusting nothing, where it makes sense to do so. I've been burnt too many times by library bugs, framework issues and the other layers between me and what I'm actually doing. When I first started out I used to think that browsers such as Chrome were infallible and any problems _had_ to be with my code.

As a result of being burnt, I'm happy to give up on logging and trawling through code in favour of just taking a PCAP and finding out what's _actually_ going on over the wire. Or stracing my app written in a high-level language which runs in a VM. Sometimes you just want to see the syscalls.

I'm also happy to go digging in the browser's source code. I think my favourite bug to diagnose manifested as a visual issue with menus in a frontend framework. The menus were styled with some CSS, nested inside a media query:

        @media (hover: hover) {

These styles were only supposed to apply on desktop devices with a mouse pointer capable of hovering over HTML elements. The rules seemed to apply on some OnePlus devices though, with just a touch screen as an input device.

Getting to the bottom of this involved creating a test page to reproduce the problem, reproducing it in multiple browsers, digging into Firefox for Android's source code (yay FOSS) to find out how _it_ implemented the media query, writing an Android app to reproduce the underlying data problem and eventually working out that it was a problem in the phone's operating system.

<comment><USER12> To be honest, for me the point where you discover "this media query does not behave correctly on this device that I need to support" is where you stop digging and find a different solution for detecting pointing devices.

It's very clever that you managed to discover a bug in OnePlus's version of Android but then what?

<comment><USER16> > To be honest, for me the point where you discover "this media query does not > behave correctly on this device that I need to support" is where you stop > digging and find a different solution for detecting pointing devices.

It enabled me to go back to the customer and explain the problem and make the informed decision to not continue work on the problem. The fact is that the broken OnePlus devices (not all of them, and not all the time) represent a very small proportion of the devices we need to support.

</comment></comment></comment><comment><USER17> use proper logging with log levels.. just being able to switch on debug level and get a wealth of info is a big step in the right direction.. my debug lines have method names and line numbers.. I take this so seriously that I have my custom logging method for bash and python (I script a lot in both).. I drop a lot of info lines as I code and switch them debug once I'm finishing up..

confirming fundamentals is another tried and tested method..

other than logging and methodology, having the right tools is important.. I use pudb for my debugger in python.. and bash -xv for shell..

error reporting is also important.. I use 'trap' and set -E in bash to capture all errors, provide a lot of info and even email it to me..

in python I have exception hook.. I even monkey patched threading to report its uncatched errors to the main threads exception hook (I use python2.7 for work.. this is fixed in latest python3)

during my dev phase I always give more time to coming up with a solution vs with running with an idea.. this allows you to engineer a solution..

and lastly.. in my down time I think about the problems I couldn't solve at the desk.. this could be when I'm about to sleep.. when I'm playing pool.. etc.. I find that solutions come easier at these moments..

</comment><comment><USER11> Somebody once told me "the arrows are more important than the boxes".

It made me realize that focusing on the flows of data between systems resulted in better overall designs. You can always swap out the contents of a box later on.

</comment><comment><USER18> Age. Without question, age has improved my problem solving abilities. I no longer expect to come up with an instant solution; instead I get to know the problem as best I can, then go and do something else. My subconscious will eventually deliver the optimal solution.

Interestingly, "eventually" usually means in the shower the next morning. From that I assume that I'm more receptive to flashes of inspiration while I'm relatively relaxed in the shower, and also that the real work of finding a solution happens while I'm asleep.

<comment><USER19> Couldn't agree more to this. Even having a small tea break or watching a youtube video for distraction helps a lot. I think its something about perspectives, we cannot focus fully on a given task and also look at it from a wider perspective or different angles at the same time, so taking a break and coming back gets focus on these angles which were earlier ignored. Kind of like "boxed thinking" which self help articles always talk about.

</comment></comment><comment><USER20> Talking through the problem out loud. Ideally with someone else who knows what you're on about, but anyone willing to listen will do.

If you can't find a listener just find a place where you can talk to yourself quietly.

Basically offer up a detailed commentary of the problem and what you have tried so far. The slow, methodical pacing of actually speaking out loud, as opposed to mile-a-minute thinking in my head seems to help my brain spot problems and come up with solutions.

</comment><comment><USER21> Working on real world problems without seeking help from Google/StackOverflow, even if it means reinventing the wheel to make it fit for your particular problem, or even going through pages of documentation/code to find the purpose of a single function. It may sound like a waste of useful time, but it slowly makes you self-sufficient to deal with any kind of issues later on.

</comment><comment><USER22> For me I would say it's fault finding. Releasing software is easy but finding the sometimes very obscure issues that crop up once released is always a challenge, especially when bug reports are not always the most detailed.

When dealing with some of these it's often necessary to delve deep into the internals of how something is working. I once spent 4-6 months working on a fix which turned out to be a stack corruption on a RTOS but was hard to pin down as the system usually took over 2 weeks to crash.

I now mostly deal with embedded software so it can often be with conflicts of hardware which have never been tested together and with unpredictable results. I've also dealt with finding faults in software I had to maintain across several platforms/databases/etc written in a few languages.

For the most part it's been fun or rewarding with some difficult times. Delving into the depths of a system does take some time but gives a wealth of knowledge that can usually be applied to another problem

</comment><comment><USER23> Learn a little bayesian decision theory. Not because you need it for the solution of your problem, but because of what it tells you about the process of doing so.

I've got a tongue-in-cheek presentation entitled 'How to seem a Genius at Debugging with this 1 Weird Trick' based on decision theory. One day I must write it up properly as a blog post.

<comment><USER9> So what is this 1 weird trick?

<comment><USER23> Oops, forgot this thread. The short answer is:

\- In bayesian search theory a good (sometimes optimal) approach is to maximise information gathered _per unit effort_

\- In debugging, a step can vary by several orders of magnitude in amount of effort required to check a theory (eg, from 'type ls' to 'spend several hours implementing a theorised fix/tracking framework/etc)

\- Consequently, the probability of a hypothesis can be quite low and still be the optimal thing to check first, if the effort to test it is also low.

So, the 'one weird trick' is to look at all the evidence you can look at very quickly, even if the connection to the problem is tenuous. 95% of the time the tenuous ones don't pay off, but when it does, you're colleagues are like 'WTF? how did you think of that?' and as advertised, you look like a genius.

</comment></comment></comment><comment><USER24> Big picture: experience is the main way to get better at this. That, plus watching what more experienced folks are doing.

In terms of smaller strategies:

I think stepping back and asking "What is the real problem that needs to get solved here?" is very often the best thing to keep in mind when I'm stuck. Along with "How important is this, really?" These kinds of questions help you to evaluate whether a particular technical roadblock is actually worth solving, or whether perhaps it is not worth the time investment because some other solution (or just walking away) would be a better choice.

Also, I don't know if you need to hear the clichés, but context switching is a huge and important strategy for problem solving — whether rubber duck debugging, talking to colleagues, switching to another medium for thinking (like a white board), or just going for a walk around the block — these are often good ways to get unblocked.

</comment><comment><USER25> My workload has changed from writing new systems and features to making surgical strikes on existing codebases for performance & reliability gains. Building up an empirical practice around something I don't yet understand or control has been great for exercising new and different problem solving muscles.

</comment><comment><USER26> I'll tell you what absolutely didn't help: worthless whiteboard interview questions or brain teaser coding puzzles.

</comment><comment><USER27> Here's what is working for me:

\- Never stop learning! Luckily, nowadays we have plenty of resources(HN, technical books, podcasts, etc...) we can use to improve Domain Knowledge on a subject, this is extremely important because it will create the hypothesis set we can query to solve problems later.

\- Being resources constrained. Working with too many degrees of freedom is not only a common UX antipattern but also a way to kill creativity. If it's possible in your company, I strongly recommend doing technical customer support twice per month. Imho, this is a great setup to improve your problem- solving skills.

</comment><comment><USER28> I ask lots of questions and even stupid ones.

I do the job with person, to workout what needs changing rather than them telling me. This saves hours of back and forth and people rarely do it.

</comment><comment><USER29> Reading HN

The wealth of knowledge, experience and advice here is pretty unique. I always learn some new way to think about a problem or new actionable things to try every time I come here.

</comment><comment><USER30> A very short read called "Are your lights on?" which is about the art of "problem identification."

That and just reading. Honestly. Read anything.

[https://www.amazon.com/Are-Your-Lights-Gerald-Weinberg- ebook...](https://www.amazon.com/Are-Your-Lights-Gerald-Weinberg- ebook/dp/B004WOXYV2/ref=sr_1_2?keywords=are+your+lights+on&qid=1574970279&sr=8-2)

</comment><comment><USER31> "simple made easy"

</comment><comment><USER32> Teaching beginners, correcting their mistakes and seeing all the weird, out of the box ways how they attempt to solve common problems, sometimes successfully, sometimes not.

Also, working on legacy systems, and seeing why and how the theoretical drawbacks of some approaches manifest in practice, and other theoretically discussed risks really don't.

</comment><comment><USER33> Focusing on minimizing risk without sacrificing value. This is about balancing engineering costs to both build and maintain and ideal business outcomes. The hardest problem is not so much the how to build something but what is the least amount of work you can put forward to get the job done (with quality and maintainability).

</comment><comment><USER34> I like to deconstruct problems into parts with mind maps.

[https://wiki.nikitavoloboev.xyz/research/solving- problems](https://wiki.nikitavoloboev.xyz/research/solving-problems)

</comment><comment><USER35> Fixing bicycles.

all the normal pain points are there: proprietary standards, 16 standards, major tooling fights, bandaid fixes that "we'll refactor later", tech debt, etc.

But the architecture is really really visible. And when you're done you have a bike!

</comment><comment><USER36> I usually read other's code a lot. I personally believe, reading other's code (at your workplace, open-source, etc.) is better than practicing. I am not sure if it's true but it worked for me.

</comment><comment><USER37> Unpopular answer alert:

Doing leetcode like problems on a semi-regular basis helps me a lot.

<comment><USER38> Just curious, in what way? Does your job require you solving problems like leetcode every some time?

<comment><USER39> It helped me a lot. I can write hundreds of non-trivial but well tested lines of code which passes all tests on the first try and is fit for code review in a couple of hours. I wouldn't be able to do that if I hadn't practiced competitive programming a lot.

This skill wont solve all of your problems, but if you have a lot of theories you want to test then your ability to implement them quickly is invaluable, and testing a lot of your theories is how you learn most of the other important skills related to software engineering.

</comment></comment></comment><comment><USER40> I always like the quote that people in the photography community use - I think it applies just as well to software. "The best camera is the one that you actually use"

</comment><comment><USER41> a few principles I've found helpful:

There are no coincidences, unless proven otherwise.

If something smells wrong, it probably is. Trust your gut.

Make sure you're building the right thing, before you build the thing right.

Don't be clever. Elegant one-liners that make you feel like a genius when writing it are probably not very maintainable.

The second best piece of code is the one you just deleted. The best one is the one you didn't write in the first place.

Plan to fail, and gracefully degrade.

</comment><comment><USER42> Failing and redoing. On what doesn't really matter, I've found, just pick any area and don't be afraid to redo whatever you were doing.

</comment><comment><USER43> Some things that have helped me:

1\. Look at prior art. Many problems have been solved before. It can be more fun to dive in and create your own solution, but looking for previous solutions first often saves time, results in a better solution, or may show you that you don't need to write the code in the first place.

2\. Write down the problem you are trying to solve before solving it.

3\. Solve the problem multiple times before committing to a final solution (if you have time). Unless the problem is familiar, your first solution will not be the best one.

4\. Learn when to ask for help. This depends on the scale of the problem, but in general if you aren't making progress within half a day, consider asking someone else for their help and ideas.

5\. Do rubber duck debugging. People who talk through problems aloud are better problem solvers and learners. [https://www.teachervision.com/problem- solving/think-aloud-st...](https://www.teachervision.com/problem- solving/think-aloud-strategy)

6\. Make documentation easily accessible. Some recommend spaced repetition like Anki ([https://sivers.org/srs](https://sivers.org/srs)) to recall library functions and patterns. I've found that just having locally cached documentation in an app like Dash ([https://kapeli.com/dash](https://kapeli.com/dash)), Zeal ([https://zealdocs.org/](https://zealdocs.org/)) or Velocity ([https://velocity.silverlakesoftware.com/](https://velocity.silverlakesoftware.com/)) to be a big help, especially if you don't just work with one language every day.

7\. Do programming puzzles. I've found it helps a lot with software maintenance and other problem solving at the micro level. (It doesn't generally help with big systems design because puzzles tend to be smaller in scope than that, but a lot of our work is maintaining existing code.) I find [https://exercism.io/](https://exercism.io/) the best for this because you usually complete puzzles in the same environment you'll use for daily work (your text editor/IDE of choice), rather than in a web-based environment with limitations.

8\. Consider courses like HtDP ([https://htdp.org/2018-01-06/Book/](https://htdp.org/2018-01-06/Book/) ) and the Clean Code series (Clean Code, The Clean Coder, Clean Architecture) for basic advice on structuring systems. Find others at [https://mustread.tech/books](https://mustread.tech/books)

9\. Make things. Keep them small in scope to begin with so that you finish some of them.

10\. Surround yourself with brilliant people. Feeling like the dumbest person in the room is intimidating but you learn more.

11\. Read and learn outside of the field of software. In the words of Feynman, "everything is interesting if you go into it deeply enough." I like In Our Time ([https://www.bbc.co.uk/programmes/b006qykl](https://www.bbc.co.uk/programmes/b006qykl)) and [https://www.thegreatcoursesplus.com/](https://www.thegreatcoursesplus.com/) and [https://www.masterclass.com/](https://www.masterclass.com/).

12\. Look after yourself. Eat well, sleep well and exercise.

<comment><USER38> >It doesn't generally help with big systems design

What do you think helps specifically with that?

<comment><USER43> Read a lot of code. Pick one of the most popular libraries in a language you like and commit to reading it, understanding how it was architected, and tweaking it.

Talk to other people who build "big systems", whatever you decide that definition means. Ask them lots of questions. (Not the "Emacs or Vim?" kind. Instead: "When you wrote x, where did you start? How did you arrive at the solution you found? What would you change if you started again today?")

Build systems, big and small, on your own and with others.

If you're not sure what to build, I like "Exercises for Programmers" by Brian Hogan:

[https://pragprog.com/book/bhwb/exercises-for- programmers](https://pragprog.com/book/bhwb/exercises-for-programmers)

The problems are still pretty trivial but a little larger in scope than most from [https://exercism.io](https://exercism.io).

Beyond that, I try to find videos or tutorials of people solving real-world problems. For example:

Go: [https://gophercises.com/](https://gophercises.com/), [https://gowebexamples.com/](https://gowebexamples.com/), [https://www.usegolang.com/](https://www.usegolang.com/), [https://lets- go.alexedwards.net/](https://lets-go.alexedwards.net/), [https://testwithgo.com/](https://testwithgo.com/)

C/C++: [https://handmadehero.org/](https://handmadehero.org/)

Haskell: [https://typeclasses.com/](https://typeclasses.com/)

Mixed: [https://howistart.org/](https://howistart.org/)

Pair programming and live coding videos on YouTube can be worthwhile too.

"Hacking with Andrew and Brad" is an example for Go: [https://www.youtube.com/watch?v=yG- UaBJXZ80](https://www.youtube.com/watch?v=yG-UaBJXZ80)

"Pair Programming with Jon Skeet" is another example: [https://www.youtube.com/watch?v=zvz2omT9fzk](https://www.youtube.com/watch?v=zvz2omT9fzk)

You get to hear people talking through their thought process and learn how other people solve problems and structure solutions.

The Twitch Science and Technology section is another place to find similar stuff:

[https://www.twitch.tv/directory/game/Programming](https://www.twitch.tv/directory/game/Programming)

I like Tsoding for functional programming:

[https://www.twitch.tv/tsoding](https://www.twitch.tv/tsoding)

And SerpentAI for Python/AI:

[https://www.twitch.tv/serpent_ai](https://www.twitch.tv/serpent_ai)

Watching people code can be dull or exciting depending on your mindset. I try to dip into these channels occasionally and soak up ideas from them, then go away and make things. I don't generally learn much without writing code too, and look for technical books and courses with exercises and problems.

We need more of this, though. I wish there was a programming puzzle site full of problem statements of the type, "build an application that does x", where solutions are ranked by the community and sorted by language. It would be such a helpful resource.

</comment></comment></comment><comment><USER44> Not a popular opinion: Debugging and solving all sorts of horrible bugs in poorly written apps. No pain no gain.

</comment><comment><USER45> Premature abstraction is root of all evil.

<comment><USER46> I like how prematurely abstract you went.

</comment></comment><comment><USER47> Compiling gentoo when I was a kid put me on the right path to learn to solve problems

</comment><comment><USER48> Writing a parser where you create the BNF first.

</comment><comment><USER49> The book "Stop Guessing".

</comment><comment><USER50> Listening</comment>


How cloud computing changes IT economics - <AUTHOR> http://www.economist.com/specialreports/displaystory.cfm?story_id=12411838

<comment><USER2> When Larry Ellison says he has no idea what the cloud is, he is faking it, he is shaking in his boots in terms of the IT industry as it is today (including the decision makers).

Cloud computing takes power from hosting, it management, it infrastructure and gives this gift to programmers/engineers and architects. This is a really good time to be a programmer and aware of the power of this paradigm change.

<comment><USER3> I disagree, or agree only superficially. IT departments start off as innocuous places where the guy who knows how to fix the copier hides, but as things grow they're responsible for maintaining the security and availability of the company's information assets. So long as the data is not of strategic value it won't rouse the attention of the executive level management, but as awareness of the value of the data grows (read: data loss, security issue, or regulatory violation) you can bet CIOs will create policies prohibiting use of external systems, and crack down on violators.

So, I think cloud computing will afford a small window of flexibility for companies, but will ultimately get rolled in to the larger IT picture. If so, however, it will probably increase flexibility in IT department policies, which is good news for everyone -- IT executives look good if they're flexible, leaf nodes don't get any joy from telling people no, and the IT department customers get more of what they need with less red tape.</comment></comment>


The Farther You Go, The Tougher It Gets  - <AUTHOR> http://chrisyeh.blogspot.com/2012/05/farther-you-go-tougher-it-gets.html

<comment><USER2> Being in my 5th year at a startup that has been kicking and clawing our way to profitability, I can relate very much to this post. Thanks for sharing.</comment>


Adobe Creative suite CS2 (including photoshop $ illustrator) is free now - <AUTHOR> http://helpx.adobe.com/en/x-productkb/policy-pricing/creative-suite-2-activation-end-life.html

<comment><USER2> This may not be the value it seems to be. These are pretty antique as far as applications go, and might be okay to learn the basics with before getting a "real version," but you're going to have trouble working with industry folk using them. They were originally released in _2005_. If you run OS X Lion or later, you'll probably have better luck booting into a Windows VM or using WINE or CrossOver than getting the Mac versions going:

Mac OS X v.10.2.8–v.10.3.8. PowerPC® G4 or G5 processor

Microsoft® Windows® 2000/Windows XP. Intel® Pentium® III or 4 processor

They're also not eligible for upgrade pricing to Creative Cloud (CS3+). Most professionals I work with upgrade every couple of versions; I don't know anyone still using even CS4, for example.

</comment><comment><USER3> Wow: <http://en.wikipedia.org/wiki/Adobe_Photoshop#CS2>

The Standard Edition included:

        Adobe Bridge (Since CS2)
        Adobe Illustrator
        Adobe InDesign
        Adobe Photoshop
        Adobe Version Cue
        Design guide and training resources

The Premium Edition also included:

        Adobe Acrobat Professional (Version 8 in CS2.3)
        Adobe Dreamweaver (Since CS2.3)
        Adobe GoLive

</comment><comment><USER4> Uhm, it requires registration and a known serial number. Were you advocating any particular actions to extrapolate that into "free"?

<comment><AUTHOR> It gives you a serial if you download.

</comment></comment><comment><USER5> Site seems down now.

</comment><comment><AUTHOR> you need to register a adobe account to download.</comment>


You should be using Google Analytics to log your startup's client-side errors - <AUTHOR> http://www.thetaboard.com/blog/client-side-error-logging-with-google-analytics?r=378

<comment><USER2> I did something similar on our site a couple years ago. One nice thing about tying it into Google Analytics is you can analyze the effect of each type of error on your conversion rate, which helps prioritize your fixes.

</comment><comment><USER3> Google Analytics works for summary-level error reporting (file, line, error message) but not very well if you want to know the details like a stack trace which can change on each occurrence. That's where the other solutions are much better. GA is certainly better than closing your eyes though.

<comment><AUTHOR> Yeah, there are definitely limitations. I'm going to keep playing around with the data that gets sent to Google Analytics. File/Line/Message doesn't do much (especially w/ minified js files) but there is likely a clever way to capture and log more information (navigator.* etc) or use try/catch to capture/log the stack trace. Javascript not my strongest area so slow going...

<comment><USER4> Regardless, thank you very much. Generally there is no 100% perfect solution but a copy&pasteable solution to this issue is the kind of thing I love to come across on HN.

</comment></comment></comment><comment><USER5> After reading yesterdays post about client-side error tracking I started looking into leveraging Google Analytics (because obviously it would be a fast way to get some small level of error reporting up and running). There is one thing I would have to add to this topic: We decided to track these error events in a separate Google Analytics profile, because there is a 500 events per session limit: [http://code.google.com/apis/analytics/docs/tracking/eventTra...](http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html#implementationConsiderations)

</comment><comment><USER6> Thanks you took up on my comment and expanded this to a blog post! Where I work, we use try/catch block but they do have their drawbacks (one of them is less optimization in Chrome).

<comment><AUTHOR> Very clever idea (added a link to your twitter/tumblr). Do you use try/catch in each method or a single wrapper of some sort?

<comment><USER7> It isn't possible to have a single "wrapper" try/catch in JS, because of the event-loop nature of most JS hosts. This is because functions that are scheduled to run on the event loop (say, using a button click, or a ajax call), aren't in the same call-stack as the code that defined it. Since they aren't in the same call-stack, an outer try/catch won't work on the inner callback.

</comment></comment></comment><comment><USER8> You can also use Errbit (<https://github.com/errbit/errbit>) to log your client-side errors.

<comment><USER9> Can you go into this a bit more? errbit looks like it's airbrake compatible, and we're very happy with airbrake, even though it's JS support isn't fantastic. Can I just take errbit's notifier.js and use that? The docs dont say anything about JS...

<comment><USER10> Yes. Errbit is great. Replaced Airbrake for me and saved me some cash.

<comment><USER9> OK, but I don't really care about the $15 per month - I really just want better JS notifications (and am perfectly happy with airbrake running the service for me).

So do they have a better JS notification? How do we use it?

<comment><USER10> It works the same way as Airbrake.

</comment></comment></comment></comment></comment><comment><USER11> window.onerror is unreliable at best. doesn't work in all browsers. doesn't capture stack information. won't give the desired result when using libraries like jquery. doesn't work particularly well with minimized code. in most (all?) versions of IE will just return "unknown error".

Using try/catch to resolve this also doesn't help unless you literally try/catch every function

There are plenty of services out there that tackle this problem properly. Shell out the money and use one.

<comment><USER12> Can you recommend some of those services you are talking about?

</comment></comment><comment><USER13> The problem with Google Analytics is that it gives Google _all_ your weblogs. Not just your page hits but also your site _viewer's_: IP address, browser type, OS type, screen resolution, browser window size, as well as any lingering js or cookie info from their prior browsing. Google uses this data to correlate everything they can track about you, which would blow your mind if you knew what they know, then they sell this data for a substantial profit. EPIC, the EFF, and the ACLU website's go into detail about why this is decidedly not a good thing.

What I find fascinating, however, are those who ask why is that such a bad thing without, supposedly, considering the ramifications. If they ever were confronted with all that Google knows about them, from browsing to email to online purchases (not to mention their HN alias, and a fair amount of offline info too) they'd be too embarrassed to ever again "wonder" what the problem was.

At some point the scope of Google's privacy invasion will become better known and people will think twice before even considering spyware like Google Analytics. Until then it's Google's ballgame, at least here in the US.

</comment><comment><USER14> I tried Airbrake yesterday and it wasn't that helpful. I had to turn it off quickly as I was inundated with errors.

You can see from your screenshot that you're getting Script Error at line 0. A number of other errors pop up that I couldn't quite figure out.

For instance, when the variable 'google' isn't found it's because the google javascript never loaded. But, how many browsers are rejecting the google maps javascript?

<comment><USER3> It sounds like Airbrake was very helpful. It is telling you that users are experiencing errors frequently, something you didn't know before. If, for example, the "google javascript never loaded" situation is common you'd want to either fix that or have your own script work around it -- at the very least, let the user know why the page is broken and that it isn't your fault.

Line 0 script errors can be from dynamically loaded code, such as JSONP requests or `eval()` code.

<comment><USER14> Well... Yes. It was helpful for that reason. I waded through many of the errors and traced them back to actual lines of code. It just so happens that many of the errors weren't particularly useful to me. I.e., not actionable.

Our browser tests include IE7, IE8, IE9, Safari, Firefox and Chrome. None of those errors are present in our tests. As you note, in many of the cases I could wrap the errors with notifications to the user.

But, really, if the google variable isn't loaded for a small set of users and I can't easily configure a test system that can reproduce it, I'm not going to take the time right now. I have too many other pressing things on my list.

<comment><USER3> I understand deadlines, and yes you may not be able to do more than explain to the user that there is a problem out of your control. But don't diss Airbrake because you don't have time to investigate and/or fix. They're not sayin' you have to fix it, they're just sayin'.

<comment><USER14> Just to clarify... I love Airbrake. Apologies if it didn't come across as that way. I use it on every site and app we create.

</comment></comment></comment></comment></comment><comment><USER15> Two problems though: 1) no one should use Google Analytics, especially not start-ups, because it gives Google full access to intelligence that you don't want them to have.

2) I block Google Analytics because neither Google nor fly-by-night Web 2.0 startups have any business tracking that stuff. In fact it should be normal practice for all web browsers to block urchin.js by default.

<comment><USER12> What's wrong with start-ups using GA? Aren't you a bit paranoid?

</comment></comment><comment><USER16> I wonder if there are JS minifiers that creates a symbol file so that I can expand stack traces with it, much like compilers do.

<comment><USER7> Yes there are. Google Closure compiler does export this thing called Source Maps ([http://www.html5rocks.com/en/tutorials/developertools/source...](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/)) which is very exciting.

If it weren't for the fact that we don't get column numbers in window.error, I would have already supported source maps in <http://errorception.com/> by now. I'm still looking actively for ways to include support though.

</comment></comment><comment><USER17> Will this mess up other things in Google Analytics? Or is there any other reason not to use this?

<comment><AUTHOR> You need to give some thought about how you categorize your events. If you plan on using events for other things, you want to give some upfront planning for how you Categorize and label things otherwise you might make reporting difficult.</comment></comment>


Copyright King: Why the "I Have a Dream" Speech Still Isn't Free - <AUTHOR> http://motherboard.vice.com/2012/1/16/copyright-king-why-the-i-have-a-dream-speech-still-isn-t-free <comment><USER2> The article mostly covers the relevant law and how the copyright ownership has evolved.

I kept thinking about what we could do now. I doubt the copyright owner thinks about copyright laws like we do -- freedom, culture evolving, etc. Other posts on this thread say "Martin Luther King's descendants ... are disgracing the man's heritage," they probably don't know our perspective. They haven't read The Right to Read -- <http://www.gnu.org/philosophy/right-to-read.html>. They probably intend to keep others from messing it up.

Instead of insulting them, we might try to educate them on our perspective and see if they might be persuaded to release it under the GPL or something similar. If Sony has it, they may be unwilling to change, but maybe the family?

If an inflexible conglomerate already has it, what can we learn from them about getting the owners of rights to culturally important copyrighted works first? There are more of us. Why did they get there first? How can we do better next time?

I want copyright law changed, but in the meantime, this work and many like it could be GPL'ed. Why don't we make that happen?

<comment><USER3> FWIW, King's speech contains close to 40% repurposed or borrowed material (from the Declaration of Independence, the song "My Country 'Tis of Thee," cribs from previous speeches by Archibald Carey, etc.). I say this not to diminish the accomplishment, triumph, or historical significance of Dr. King's famous speech, but rather, to raise the point that it's a very nuanced copyright matter.

Am I allowed to copyright a work derived from a collage of other people's works? If I incorporated one of your posts into a blog post of mine, could I copyright the entirety of the blog post?

According to the letter of the law, King's estate should have been entitled only to copyright the portions of the "I Have a Dream" speech that contained 100% original material [1]. Yet these are not the most recognizable or famous portions of the speech, and they're not the portions King's estate has often licensed out to advertisers, etc. Almost all of the words most famously associated with the "I Have a Dream" speech are borrowed from other source material. And, unless I'm missing something -- I'm not a lawyer, so that's possible -- they should not have been granted to King's estate in the first place. Perhaps the current laws on the books took effect after that granting?

[1]From 17 U.S.C. SS 103(b): "The copyright in a compilation or derivative work extends only to the material contributed by the author of such work, as distinguished from the preexisting material employed in the work, and does not imply any exclusive right in the preexisting material. The copyright in such work is independent of, and does not affect or enlarge the scope, duration, ownership, or subsistence of, any copyright protection in the preexisting material."

<comment><USER4> Ironically, MLK was not the actual author of the "Dream" speech, which was written by King's regular speechwriters, Stanley Levison and Clarence B. Jones.([http://en.wikipedia.org/wiki/I_Have_a_Dream#Speech_title_and...](http://en.wikipedia.org/wiki/I_Have_a_Dream#Speech_title_and_the_writing_process)).

It's an interesting comment on our society that it prefers to attribute this type of artistic work to the performer, rather than the actual writer. Perhaps future generations will see MLK simply as the man who read Stanley Levison's great speeches, or Obama as the actor who brought Jon Favreau alive. We give props to Yo-Yo Ma for a great performance of Bach, too, but we don't talk about "Ma's fugue." And there's a very well-developed system for distinguishing between composition and performance copyrights...

<comment><USER5> You have just posted exactly what I was wanting to post although you probably said it clearer than I would have.

I always have the same reaction when I see a quote attributed to an actor in a film rather than the writer of the film, too. Similarly comedians (like Bob Hope) are often attributed for the work of gag writers.

It's an interesting that this seldom happens in theatre, music or literature but often happens in film, comedy and speeches.

I wonder why this is? Is it simply that we assume live speakers to be speaking off-the-cuff and the same translates to film? If so then why don't we do the same for Theatre?

<comment><USER6> Most popular music is not written by the person who performed it. Even prolific singer/songwriters have performed works that were written by other people that have gone on to become smash hits.

For theater, part of the reason may be that most theatrical productions are performed by numerous actors. Just think of how many Hamlets there have been over the years. Even modern theater is usually performed by numerous groups. Given this, it's pretty easy to say that the "definitive" work is the actual written play. However, when it comes to movies the "definitive" work is seen as the performance by the one actor that was in the movie.

<comment><USER7> _Most popular music is not written by the person who performed it._

I think that varies by genre. It's certainly true around pop music. But I don't think so much for, say, metal.

On the other hand, having recently watched a few episodes of VH1's "Clasic Albums" series (at least I think that's what it was), I was really surprised to see the amount of creative input that came from the album's producers. I was surprised to see that the melody of Kiss's "Beth" was written by the producer, and that Bob Rock did so much with Metallica (unfortunately?) in building the songs for The Black Album, albeit it out of riffs written by the band.

<comment><USER6> It does vary, but I didn't want to pigeon hole pop. Mostly because it happens in a lot of other genres such as country/wester and even folk. It also occurs more in places such as Nashville, Austin and Memphis where there is a strong songwriting tradition.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> The author's argument appears to be that Dr. King's speech is too important to be protected by copyright. The author provides very little to support this position other than an appeal to emotion.

Lacking support with relevant facts, details, and rationales, the argument is, for me, entirely unpersuasive.

Although I am certainly not an expert on the history of Civil Rights in the 1960's, I was curious as to who Bill Rutherford was and what he did. Before I found much I came across the source from which the author lifted:

> _"I think Martin Luther King must be spinning in his grave," Bill > Rutherford, who was executive director of the Southern Christian Leadership > Conference when King was murdered, told 60 Minutes. "He gave his life for > his ideas of justice, peace and love. He attempted his entire life to > communicate ideas for free. To communicate, not to sell," he says._

<http://www.cbsnews.com/2100-18560_162-319500.html>

<comment> brown9-2 I don't get it - what facts and details can someone supply to make the argument that this speech is very important to the public and to history?

What about mentioning how often the speech is cited, how common place phrases from it are, etc.?

<comment><USER9> Nobody's disputing that it's important to the public and to history. The point of contention is whether that implies that it should be un-copyrightable. I'm with brudgers--nothing in this article gives any justification for that proposition.

<comment><USER10> I think you're both begging the implied question: why _should_ this work be protected?

Regardless of the importance issue, we are discussing a speech given by one man nearly half a century ago to a huge audience in a public place. Today, that speech has somehow become the intellectual property of Sony.

As the relevant jurisdiction here is the US, we can ask directly what the Constitution has to say about this:

"To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries."

I fail to see how

1\. the above situation promotes the progress of science or useful arts,

2\. Sony is the author or inventor of this work, or

3\. protection that lasts longer than the average human lifetime is limited in any meaningful way.

After three strikes, I think you're supposed to be out.

<comment><USER9> Why should this work be protected? Protection is the default for copyrightable works. The onus is on the author here to show why this situation is different from the normal one, different enough to justify changing the rules. As for your specific questions...

1\. Speech writing is considered a useful art. Creative works of authorship generally are. If you want to argue that point _in general_ , fine... but let's put it into a general context instead of just focusing on this one speech.

2\. Sony is of course not the author. But MLK is, and he never put this speech in the public domain. He certainly could have if he wanted to, but he didn't. His rights passed to his estate. His estate isn't the author either, but it has the right to sell or license. None of this is controversial or unexpected.

3\. I tend to agree with you here.

<comment><USER10> > Why should this work be protected? Protection is the default for > copyrightable works.

It is today. And copyright durations are long and based on the author's lifetime today.

But Martin Luther King made this speech in 1963, and in 1963 copyright worked differently. It had a much shorter initial period and could then be renewed once for a second term. "I Have A Dream" would have entered the public domain later this decade, even if MLK had survived to renew it.

So, to address the specific points:

> 1\. Speech writing is considered a useful art. Creative works of authorship > generally are.

Indeed, and they are rightly protected. But retrospectively extending that protection for the benefit of unrelated third parties long after MLK's death hardly promotes such arts. Clearly he did give the speech without the need of today's rewards, and clearly he isn't going to be motivated to speak again because of them.

And please notice that this argument is entirely general and does not rely in any way on the fame or cultural significance of this particular work.

> 2\. Sony is of course not the author.

Indeed. And nothing in the Constitution says anything about protecting the rights of anyone but the Authors and Inventors.

You appeal to the rights of the estate and the ability to sell or licence copyrights, but these are modern legal inventions, just like effectively unlimited protection terms. They most certainly are controversial and unexpected, relative to both the Constitution's basis for copyright and the law that was in effect in 1963. To accept the premise that these legal games are necessarily in the interests of promoting arts and sciences and encouraging authors and inventors is to miss the entire point of this debate.

<comment><USER9> I agree with pretty much everything you just said, except that I'm not sure about the ability to sell and license copyrights being "modern legal inventions." I haven't done any research into this, so I'm just going off my gut feeling here... but IP isn't much use without the ability to grant licenses. A license is just saying "I agree not to sue you for doing X." My guess is that licensing has been around for a seriously long time.

The right to sell... perhaps not _quite_ as well-established or self-evident as the right to license. But still, my guess would be that it's been around since long before MLK was born. But like I said, I haven't actually researched these questions.

<comment><USER10> Just to be clear, when talking about selling or licensing copyrights, I'm really talking about deals where someone other than the original artist has either permanent or temporary control of those rights.

I would agree that if you can't at least grant temporary rights to make copies for the purposes of accessing the work, copyright is of limited usefulness in the Internet age. (Of course, this in itself is a relatively modern concern as well. If you go back far enough, it really would have been the copyright holder who was physically making all the copies anyway, and no licensing at all would have been necessary).

I think a lot of the trouble with copyright in practice today comes down to precisely that disconnect between the original artist and the long-term copyright holder. If copyrights could not be transferred, only delegated for a relatively short period, then all the middleman industries that tend to take the lion's share of the profits today at the expense of both artist and public would necessarily become subservient to the artists again, which I think would fix a lot of problems. If you are only going to get your contract as a distributor/marketer/whatever renewed after six months if you've been getting good returns for the artist for a fair price, and the artist can take their best-selling book or platinum-selling album to another distributor next week if they aren't happy with the deal, then a lot of inequalities get balanced out.

Then again, the Internet will probably render most middleman distributors irrelevant soon anyway. The process has already started, it's just that for now it remains the preserve of the technically knowledgeable and the trailblazers. Hopefully, as self-publishing becomes more mainstream, the result will be a rise of a new class of companies who provide actually useful/valuable services to artists, such as editorial/design work for authors or effective promotion that generates measurable returns for musicians.

Moreover, if transfers of rights could only be temporary, then an estate could only benefit for a genuinely limited time from the work of a deceased artist, instead of several generations receiving income in return for doing nothing effectively in perpetuity. It would be enough that an artist who had invested hard work in creating something valuable that should support his or her family could know that their family really would be supported for a while in the event of their untimely death, which seems reasonably fair, but that would be it.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> I think this is the first time I see YouTube embeds used this way. The article contains several of them -- non-functional and displaying a "removed due to _third party_ copyright claim" message -- all to drive the article's point.

<comment><USER12> I can still see the alcatel ad in germany

<comment><USER13> "Alcatel aired an ad with an excerpt of "I Have a Dream," which it _licensed from the King family for an undisclosed sum_."

They made money off of that one.

</comment></comment></comment><comment><USER14> I wonder what legal contortions were necessary to argue that "the speech was a performance distributed to the news media and not the public." That's some of the purest baloney I've ever heard. If giving a speech to a fifth of a million people on the steps of one of the most famous public monuments in the world, in one of the most famous public spaces in the world, doesn't count as "public," what possibly could?

Maybe the "not the public" summation is a poor one.

I've often thought it would be beneficial to the cause of history and governmental transparency to get more videos, recordings, and photographs of our important leaders (presidential candidates, et al) into the public domain. I had thought it was something a non-profit, a quasi-governmental corporation like PBS, or a governmental department could organize. But I don't know how copyright law interacts with public performances (obviously).

</comment><comment><USER15> "I Have A Dream" is nothing compared to the Riverside speech, and its anniversary.

[https://www.democracynow.org/2008/1/21/dr_martin_luther_king...](https://www.democracynow.org/2008/1/21/dr_martin_luther_king_jr_1929)

<comment><AUTHOR> _Time magazine called the speech "demagogic slander that sounded like a script for Radio Hanoi,"_

Yikes. He really was a progressive leader. Makes you wonder in perspective how we are going to someday see people for supporting Gitmo or giving gays "some rights" but not all rights.

<comment><USER2> Media today always talk about King's work on civil rights and equality work and show "I Have A Dream" footage and talk about his assassination.

They don't show the five years between, despite his greater experience, awareness, and maturity. In those years he took on greater issues of a system that created so much poverty and created war.

I think they don't cover those years because those issues remain and would force them to take on current issues they don't want to. Since his earlier work is better publicized, I find learning about his later work teach me more about him, his work, those issues, and leadership. The Riverside Church speech against the war in Vietnam was an incredibly courageous speech I consider right on, displaying mastery of the issues, his audience, oratory, ... basically every element of leadership.

</comment></comment></comment><comment><USER8> Dr. King was not a public official and was not giving testimony. His speech is no more a candidate for the public domain than the Beach Boys' Fourth of July, 1980 rendition of _Barbara Ann_ on the National Mall is.

<comment><AUTHOR> A reasonable argument. But 2038? What about taking the artists original intentions and desires in mind?

Would MLK want people to pay $20 to watch his speech?

<comment><USER16> "Intentions" don't mean much if they're not in writing. MLK could have put the speech under a freer license if he wanted to.

<comment><USER17> What freer licenses existed in 1963?

<comment><USER18> Why would it have to already exist? Anyone can create a license. Pretty sure some lawyer would've done it for free.

<comment><USER13> Just about anybody in recorded history could have created the phonograph. It's a dead simple concept, even the Mesopotamians probably could have managed it, all you need is a needle (probably could be bone), something to scratch lines into with it (wax for instance, maybe the clay they used for tablets), and some sort of diaphragm (leather should work nicely). Just imagine, we could have voice recordings of Alexander the Great, or Gautama Buddha.... that would be fucking wild.

Nobody did it until Edison in the _late 19th century_. Why? Because the _idea of doing something_ is in most cases more elusive than the _ability to do so_.

<comment><USER16> Rights were already being sold for printing, delivering, and televising speeches. It would not have been a new idea to license those rights.

<comment><USER13> The idea is licensing designed to keep a work free, _not_ licensing designed to restrict. Even if that idea existed at the time, it was _not_ prominent, evidenced by the lack of stock licenses to do so at the time.

As you say, "Rights were already being _sold_ ".

</comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> I slightly corrected the title as Sony bought part of the EMI Group, not the other way around.

Sorry if it makes less sense now but the article is a worthy read.

In a nutshell, you won't be able to watch the video for free until 2038 in the USA

<comment><USER8> Unsurprisingly, my public library has a copy. For twenty bucks you can donate a copy to yours.

<comment><AUTHOR> It's also on Netflix but not Instant Watch

[http://movies.netflix.com/Movie/Martin-Luther-King-Jr-I- Have...](http://movies.netflix.com/Movie/Martin-Luther-King-Jr-I-Have-a- Dream/70031442)

</comment></comment></comment><comment><USER19> That's alright. No one wants to hear the whole speech anyway - too boring and dated.

The great part ("I have a dream...") of the speech is available everywhere without paying. It's the truly memorable part of the speech. In fact, I'd bet that 99% who have heard of the speech have heard only that part of the speech.

</comment><comment><USER20> Makes me wonder how may of Apple's Think Different personalities were paid for their "endorsement".

[1] <http://en.wikipedia.org/wiki/Think_Different>

<comment><USER21> I would bet a lot of money that every single one of those photos and video clips was properly licensed by Apple. It's not even that complicated a commercial for that sort of thing--compare to the first iPhone ad, which probably had 2-3 times as many copyrighted clips:

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

<comment><USER22> I just finished reading the Jobs biography, and I believe you're correct. Isaacson writes about Steve personally calling the editor in chief of Time Inc to get the famous picture of Gandhi which isn't available for commercial use, and meeting with Yoko Ono to get the pic of Lennon.

</comment></comment></comment><comment><USER23> Does this mean that one could be convicted of a felony under SOPA/PIPA if they posted a video of the speech online?

</comment><comment><USER24> How can you copyright that? If it is, it should be under creative commons.

<comment><USER16> In the USA (and most other jurisdictions, really) as soon as you write it down, you have the copyright on it. You also have some control over "derivative works" including any copies of the "performance" of the speech. In music, for example, you would need to pay royalties to the songwriter for publicly playing a recording of their song, no matter who actually sang the song.

<comment><AUTHOR> I'm kind of surprised congress didn't try to retroactively copyright the Declaration of Independence and Gettysburg Address and force textbook publishers to pay royalties.

<comment><USER16> Those were works made by the government, so they're automatically in the public domain. I don't see why you're against Mr. King having the copyright on the speech he wrote and gave?

<comment><AUTHOR> MLK said those words to move governments and their people, to everyone and anyone that would listen.

Some things are too important to lock down and copyright, at least not until 2038.

<comment><USER25> With copyright, he/his heirs get to decide how it can be used, such as selling Coke. (They didn't have to decide "sell Coke".)

> Some things are too important to lock down and copyright, at least not until > 2038.

And the copyright law language embodying that principle is?

<comment><USER26> It doesn't exist in copyright law, but may be it should? If enough people think it should be, we can write it down and make it law.

<comment><USER25> I was unclear. I wasn't asking for an existing law that implements your idea. I was asking for language that does.

> If enough people think it should be, we can write it down and make it law.

Oh really? If enough people think that pi should be 3, can we pass a law and it will be so?

There are lots of things that people want that can't be codified with the desired properties. This is something that looks (to me) to be on the edge.

How about some other examples? (If it's just "I have a dream", we can pass specific legislation.)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> This is interesting on a number of levels. I'm part of the minority around here that is in favor of copyright but don't write me off as a knee-jerk reaction to my stance.

An article like this could easily become a rallying cry for abolishing copyright but when you dig deeper it really doesn't lend itself to total copyright abolishment as much as you'd think.

It's interesting when you bear in mind that Dr. Martin Luther King held copyright on this speech and used the copyright laws to control how his speech was used. The way he wielded the power afforded to him by copyright is a great argument _for_ copyright, not against it! If we make some conservative assumptions based on his actions and what we know of the man then it's safe to say he would allow the speech to become part of PBS documentaries but not used in corporate advertisements. Isnt it fair to believe that most of us these days would agree that his Dream speech be used in historical documentaries and other works that promote his legacy but be upset if we saw that speech used in a Nike commercial?

What I'm getting at here is that copyright itself isn't bad. It's how it is used that _can_ be harmful but not always. Using copyright to keep MLK's legacy from being sullied is a legitimate and reasonable use for copyright. This particular case reminds us that copyright can be used for good too. If we fast forward to today and consider the King estate's attempt to make money from Dr. King's legacy we see what I'd call a gray area. Not everyone would want to see money being made in MLK's name. But far more people don't want to see the right to his words and likeness belonging to a corporation like EMI.

I want to encourage all of us to take a less extreme, more balanced perspective on this. Laws like SOPA/PIPA have backed us into a corner where we're forced to take extreme positions against extreme laws but here amongst friends, why not discuss this in a balanced way and save the extremism for fighting those with equally extreme stances on the other side? I do support copyright but I don't support it in its entirety. This story is a prime example of why the length of copyright needs to be limited. But this isn't only about copyright. We forget that other US laws in combination with copyright are what cause some of the trouble. Corporations should not be considered people. I think taking a stance that promotes complete abolishment of copyright is like chopping off your head to cure a headache.

The "I Have a Dream" speech should be in the public domain by now, there's no question about it. Copyright has hurt us in this case but while Dr. King was alive it had every opportunity to help us. It could have ensured that his speech wasn't taken advantage of. We seem to forget that copyright helps us promote freedom just as much as it can be used to restrict it. It can help ensure not just freedom as in liberty but freedom as in gratis, for free, free beer, pay zero moneys. We can't stop people from using copyright in ways we don't approve of without abolishing it but abolishing it opens another can of worms. So instead let's focus on trying to make copyright a little more sane, less biased, by scaling it back instead of ripping out our hearts to cure high cholesterol (I didn't want to use the chopping heads to cure headaches metaphor again, hopefully that wasn't too awkward a metaphor).

<comment><USER28> I don't think the majority here advocates abolishing copyright (although a poll would clear that up). Many of us make their living due in part to copyright protections, nor do I think a sane person would think it could be abolished unless society changes radically.

I think many of us object to copyright extremism, as you point out. Dr. King certainly would never have guessed that someone could be extradited from another country to face jail time for publishing a link to an unauthorized copy of his speech. Yet here we are.

<comment><USER27> I think the majority here does favor copyright abolishment. I would hope I'm wrong but whenever the the subject of copyright comes up the vast majority of the comments talk about how we need to get rid of it, how all works should be free and in the public domain, etc. Especially when you bring money into the discussion I've seen everyone say that copyright is no longer necessary or helpful and we all need to find a way to make a living without it implying that creators should have no right to restrict how their works are used or distributed. I'm so glad this article was posted because it shows us the benefits of copyright.

I'm often downvoted to hell for comments like the one above and I'm really surprised its getting a positive response. Maybe a different subset of HN is discussing it. I don't hold an extreme position on this at all but I'm often a little afraid to speak my mind on this as I usually get a very negative response.

Also, many of us really do make a living thanks in part to copyright protections and to reiterate, I usually see and am responded to with comments saying that we shouldn't use copyright like that and should find another way. But not all works like that lend themselves well to models like paid support for free software or live performances instead of paid recordings.

Anyway, I'm relieved to see that people around here do see the validity of my argument.</comment></comment></comment>


The Intel Atom C2000 Series Bug – Why It Is So Quiet - <AUTHOR> https://www.servethehome.com/intel-atom-c2000-series-bug-quiet/ <comment><USER2> Scary stuff, my FreeNAS system runs on an Asrock Rack C2750D4i which has been great so far. The BMC on it is also usable.</comment>


Why Is Europe Failing to Create More Unicorns? - <AUTHOR> https://www.linkedin.com/pulse/why-europe-failing-create-more-unicorns-thomas-petersen?trk=v-feed&trk=hp-feed-article-title-share <comment><USER2> Are we even trying? I mean we live happy with our 40 hour weeks. Most coders i know work after less work as in even less work hours other than gaining millions. A lot of us even earn more than our parents in the first years of our carreer.</comment>


112th KGS Computer Go Tournament - <AUTHOR> http://www.weddslist.com/kgs/past/112/

<comment><AUTHOR> What I find shocking isn't only the level of play by machines, but also the number of techniques that can be applied to achieve it. Traditionally they were very domain knowledge based and now they tend to be hybrids. This for me really quantified how deep into the age of AI we're in. I never expected Go to be approched this quickly as the search space is so vast.

AyaMC (AyaBot 3d on KGS) was Aya[1] rewritten as a Monte Carlo simulation.

Many Faces of Go[2] (ManyFaces 2d on KGS) has been the strongest sold Go program which has transitioned to using Monte Carlo Tree Search.

NiceGo19N, was Detlef Schmicker's latest version of oakfoam, using a Convolutional Neural Network. The possibilty of using a CNN to play Go recently been described as promising, so it is good to see one such engine developed already. See this paper[3] for more information.

Hiratuka No Igo (aka HiraBot[4] 1d on KGS). I don't know its algorithm but its game invitation message is "15000 playouts per move".

[1] [http://senseis.xmp.net/?Aya](http://senseis.xmp.net/?Aya) [2] [http://senseis.xmp.net/?TheManyFacesOfGo](http://senseis.xmp.net/?TheManyFacesOfGo) [2] [http://arxiv.org/abs/1412.6564](http://arxiv.org/abs/1412.6564) [4] [http://senseis.xmp.net/?HiraBot](http://senseis.xmp.net/?HiraBot)</comment>


Twitter comes clean - <AUTHOR> http://www.techcrunchit.com/2009/02/01/twitter-comes-clean/

<comment><USER2> That's an amazing example of candid communication with your userbase, it really impresses me very much.

I can think of (quite) a few other companies that I would very much appreciate such candor from (but I guess that once you've IPO'd there are too many rules and regulations at work to make such candor a working solution).

Kudos to Alex Payne.</comment>


JavaScript Challenges (Online Book) - <AUTHOR> http://amischol.gitbooks.io/javascript_challenges/

<comment><USER2> This might be a good idea, but it is just so very bad at UX.

From clicking the first question / answer.

"ReferenceError: __match_answer_and_solution__ is not defined"

"SyntaxError: Unexpected token )"

Meh.

<comment><USER3> Agreed.

</comment></comment><comment><USER4> An example in the introduction would be great. That way we could tell how verbose we need to be when answering these.</comment>


OAuth 2.0 finalized - <AUTHOR> http://dickhardt.org/2012/10/oauth-2-0/ <comment><USER2> If anyone wants to use Google Oauth2 with flask and User session management we have Open sourced the project: <https://github.com/GrexIt/flask-login-oauth2>

</comment><comment><USER3> Finally. Now if only more Android app developers would rely on an open OAuth model rather than forcing users to use the stock browser.

</comment><comment> j-kidd I always feel that Hammer was the one holding things back. This article kind of confirms that.

<comment><USER4> I don't know if he was holding things back. I believe he wanted OAuth 2.0 to be as simple as possible, which wouldn't make the spec very flexible, but it would be easy to implement correctly.

I believe the committee had a lot of different ideas about how certain problems should be approached and instead of choosing 1 solution they either decided to keep some things open for the implementer or allowed several solutions to a problem as part of the spec.

</comment></comment><comment><USER5> I wish that for OAuth 3 they would make it such that client and server can separately sign the request and you don't have to share keys between the two. That would be a great security enhancement.

</comment><comment><USER6> And yet, here we are, with OAuth still a complex behemoth and everyone doing login with Facebook, Twitter, or a poorly-implemented homegrown login system.

<comment><USER7> OAuth 1 was a behemoth. OAuth 2 is simple.

1\. Get a login URL. Send people here to log in.

2\. Receive an auth token if the user clicked allow on the login page

3\. Swap the auth token for access and renewal tokens.

Optional 4: Maybe renew if you expire.

<comment><USER8> So is the following critique out of date? [http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to- hell...](http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/)

<comment><USER9> There are several flows possible with OAuth2. This is only one of them. So his critique is based on the total of OAuth2, not this small part that is fairly simple.

</comment></comment></comment></comment><comment><USER10> Now that's a blog name that I sense will come strong given enough time and care.</comment>