Show HN: An app that lets you become a beta tester for books - <AUTHOR> https://fresh.ink/app?hn <comment><AUTHOR> Hey everyone,

I'm excited to show off fresh.ink! If you haven't beta read someone's work before, it's a cool way to engage with authors and see work before it's published.

fresh.ink is dedicated to finding high quality work that you'll be interested in. It does this in two ways: first, by learning what kind of writing you like; second, by using your fellow beta readers' behavior to ensure that the majority of the work you're seeing is highly rated and engaging. It also sprinkles in some brand new stuff that you'll be the first to read.

Here's how it works:

\- The app matches you with 20 stories or novels to start, you can swipe to save or skip. \- We use your swipes, opens, drop-offs, ratings, comments, and feedback to help decide your next matches, as well as who else should be reading the stories you've read. \- Authors get a detailed report on their work so they know what to focus on, readers get good quality writing for free.

It's very fun to use, and the writing is fantastic. Give it a try—I'd love to hear your thoughts!

<comment><USER2> Really beautiful website!

<comment><USER3> For me, this redirects _directly to the app store_ and the website isn't visible.</comment></comment></comment>


Google Chrome now supports print preview - <AUTHOR> http://www.browsomatic.com/2011/06/print-preview-is-now-in-google-chrome.html

<comment><USER2> wow, it took them only 2 years to do this...

<comment><AUTHOR> yup</comment></comment>


Find running median from a stream of integers - <AUTHOR> http://stackoverflow.com/questions/10657503/find-running-median-from-a-stream-of-integers <comment><USER2> Here is a clever algorithm to find the median of a stream of integers by using just one variable:

The idea is to maintain a floating median. Start with an arbitrary number, say 0. If the incoming number is greater than the estimate, num += 1, else num -= 1.

It is easy to prove that for a large enough stream, assuming the stream is drawn from iid samples, this would converge to the median, by central limit theorem.

Using two variables instead of one, you could converge faster. So instead of incrementing/decrementing by one, you store how big your leap is, and have a schedule to change it.

<comment><USER3> > It is easy to prove that...

Reminds me of a similar comment in the margin of a old book: <http://en.wikipedia.org/wiki/Fermats_Last_Theorem>. :)

But it does sound both plausible and brilliant. How do you prove it (in broad terms)?

<comment><USER4> Slightly off topic, but looks like toemetoch has tripped one of the hellban filters, isn't a spammer, and has no contact info in his profile. Might want to sort that out if you're reading this toemetoch!

<comment><USER5> No, he just accidentally posted the same comment twice. The new one got autokilled. Then he deleted the first one, leaving a single dead comment.

</comment></comment></comment></comment><comment><USER6> This is kind of a weird problem, because it requires you to keep all the numbers in memory, so the "streaming" aspect is a lot less useful. And then once you have the list in memory there are linear median finding algorithms. The only way out that I can see is if you expect the incoming data to follow a normal distribution you can short-circuit the entire problem and just calculate the mean.

EDIT: One could construct a "Counted B-Tree" which is a pretty straightforward augmentation of the B-Tree (quick google result: [http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cbtre...](http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cbtree.html)). The insertion cost would still be of complexity log(n), the median could also be retrieved cheaply, and the data is kept sorted, but it takes more space.

<comment><USER7> You're right, it's kind of asking the wrong question.

Because of the robustness properties of the median, it would be hard to argue that the first 1E6 samples weren't enough, and that you really need to hang on for the next 9E6 to get an accurate median.

In real problems, if you have that much data, you would more likely start to question the iid assumption anyway, and you'd start looking for drifts in the medians within sliding windows. Real problems being real problems, you'd probably find some drift, and this would point out the unhelpfulness of an "all-data" median. ("Since the data is drifting, what is this the median _of_?")

</comment></comment><comment><USER8> Too bad that a horrible answer was selected as the best. The minheap/maxheap solution requires that the entire stream of integers be stored in memory.

There is a fast and memory efficient solution using Indexable Skiplists: [http://code.activestate.com/recipes/576930-efficient- running...](http://code.activestate.com/recipes/576930-efficient-running- median-using-an-indexable-skipli/)

In a n-sized sliding window, only the most recent n elements need to be stored (not the entire data stream). The skiplist insertions, deletions, and indexed lookups are all O(log n).

</comment><comment><USER9> Heap sounds like overkill to find the middle value in a running list. What's wrong with simple stack and keeping track of how many integers you've received?

<comment><USER10> Your solution is for median position, not median value, and it would require a queue, not a stack, so unneeded old values could be dropped.

<comment><USER9> Of course, a queue is correct.</comment></comment></comment>


Confidential Emails Sent by Facebook Executives Leaked Online - <AUTHOR> https://www.theguardian.com/technology/2019/feb/22/facebook-new-emails-leaked-six4three-lawsuit-user-data <comment><USER2> Can someone summarize the difference between these leaks and the ones in December?[1] I'm not seeing one at first pass

[https://www.businessinsider.com/facebook-documents- six4three...](https://www.businessinsider.com/facebook-documents-six4three- case-published-british-parliament-2018-12)</comment>


Searching for too many emojis breaks Google Search page layout - <AUTHOR> https://www.google.com/search?q=%E2%81%A3%E2%81%A3%E2%81%A3%F0%9F%87%A6%F0%9F%87%B1%F0%9F%87%A7%F0%9F%87%A6%F0%9F%87%BD%F0%9F%87%B0%F0%9F%87%B2%F0%9F%87%B0%F0%9F%87%AD%F0%9F%87%B7%F0%9F%87%B2%F0%9F%87%AA%F0%9F%87%B7%F0%9F%87%B8 <comment><AUTHOR> Here is a screenshot: [https://i.imgur.com/8VC1vWW.png](https://i.imgur.com/8VC1vWW.png)</comment>


How the Paleolithic life style got trendy (2014) - <AUTHOR> http://www.newyorker.com/magazine/2014/07/28/stone-soup

<comment><USER2> "She advises readers to "eat butter; drink milk whole, and feed it to the whole family...."

Isn't lactase persistence in modern humans a consequence of pastoralism of the neolithic era? In Europeans, the genetic mutation for it is estimated to be only 7,500 years old.

... Oh, I see from various web sites that this is a contentious point among paleo practitioners.</comment>


Samsung reports it has sold 11M Galaxy S5 since launch - <AUTHOR> http://www.cnet.com/news/samsung-weve-sold-11m-galaxy-s5-since-launch/ <comment><USER2> One thing I like about Samsung is that they make quality hardware.

One thing I dislike about Samsung is that their software is always so clunky! I find this consistent with all these hardware makers. Apple is the only company that does both well</comment>


SEOmoz Raises $18M - <AUTHOR> http://seattletimes.nwsource.com/html/technologybrierdudleysblog/2018110934_post_48.html

<comment><USER2> This is good news. I think SEOmoz does a pretty good job in a crowded field and it would be too bad if they weren't able to compete with the big boys. Whether you like moz or not, you have to admit that they help to push competitors to improve their products and we all benefit from the wealth of online SEO and online marketing tools available today (at a relatively cheap cost, too).</comment>


Amazon Zocalo – Document Storage and Sharing for the Enterprise - <AUTHOR> http://aws.amazon.com/blogs/aws/zocalo-doc-storage-sharing/

<comment><USER2> We built and launched exactly the same app one year back at [http://collablayer.com](http://collablayer.com)</comment>


E.W. Dijkstra Archive: The Humble Programmer - <AUTHOR> https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html <comment><USER2> It's interesting to imagine what Djikstra would've accomplished if he instead decided to focus on theoretical physics. Conversely, imagine what we would've lost if we didn't have Djikstra as a programmer.

I'd like to point out that Dijkstra's writing might arguably the best writing I've seen from a programmer. English is not my first language and his writing is inspiring; if possible I'd like to request if anyone can point me to a resource (apps, software, etc) so I can learn to write, speak, and converse like Dijkstra in this lecture?

<comment><USER3> Dijkstra writes directly and with and air of authority, but his writing is not great. His style is pretentious and obfuscatory. Even worse, he uses his authoritative style to get away with tons of unsubstantiated assertions. Let's look at a passage from the linked lecture:

 _Those who want really reliable software will discover [authority!] that they must find means of avoiding the majority of bugs to start with [unsubstantiated!], and as a result the programming process will become cheaper [unsubstantiated!]. If you want more effective programmers, you will discover [authority!] that they should not waste their time debugging [repeated assertion!], they should not introduce the bugs to start with [repeated assertion!]._

He could just say:

 _When creating reliable software debugging takes up much time. If we develop techniques that prevent these bugs from being introduced in the first place then programmers will become much more effective._

Good writing is terse and easy to understand. It should lead the reader from the premises to the conclusions. Good writing shouldn't contain pretentious detours. I don't think you should emulate Dijkstra.

<comment><USER4> I doubt Djikstra would have been Djikstra is he communicated in such a sterile way. His writing achieved the ends he sought. He's memorable and endlessly quoted which gives life to his ideas beyond what is immediately provable.

You might argue this is improper, but I think that's a bit morose. I dread the day when all people write like that second sentence.

That's not to say someone should emulate him, though. It's not that it's wrong, it's that they're bound to fail and produce something tinny and derivative. That's the thing your revised sentence has going for it: it's as cheap as it is limp.

<comment><USER3> That's the thing with blowhards. When you take away their rhetoric and literary flourishes they've got nothing left.

If something becomes boring and derivative when stated plainly then there was nothing of substance to start with.

</comment></comment></comment></comment><comment><USER5> > I married and Dutch marriage rites require you to state your profession and > I stated that I was a programmer. But the municipal authorities of the town > of Amsterdam did not accept it on the grounds that there was no such > profession.

wow

<comment><USER6> Shocking in his case as he was a true programmer (computer scientist).

Today, people say they're "software engineers" with a straight face, which is a disservice to real engineers. I know because I get paid to code.

If bridges were built like software is...

<comment><USER7> There's more to engineering than building bridges. Would you discredit electrical engineers, for example, because PCBs aren't hydroelectric dams? While I generally agree with your rhetoric that software engineering is perhaps not _as_ disciplined, it is still a legitimate engineering discipline, imo.

<comment><USER6> Right, I wouldn't discredit electrical engineers. I can reasonably expect my house not to burn to the ground due to an electrical fire, and my washing machine/fridge will probably fail safe as well. Hardware engineers mostly get a pass in my book, too (when was the last time your CPU hung?).

Meanwhile, Toyota is allowed to ship buggy, untested, unauditable ECUs[0]. How can SE be considered a legitimate engineering discipline when such examples abound?

The "Software engineer" title ought to be reserved for those doing formal verification or at least aiming for high code coverage and otherwise employing proper design and testing methods. Think programmers of NASA shuttle avionics or airplane autopilots.

It's not for your run-of-the-mill startup coder (which includes me).

[0]: [https://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_...](https://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_slides.pdf)

<comment><USER8> I find this interesting - I changed degrees halfway through electrical engineering to computer science (which is still under the engineering school at my university). You're right, EE is _much_ more disciplined, however, computer science/SE still requires an extremely logical thought process, and is applying science/maths to solve real problems. For these reasons, I believe it is engineering (even if somewhat softer than other strands).

</comment></comment></comment></comment></comment><comment><USER9> Many previous submissions: [https://hn.algolia.com/?query=Humble%20Programmer&sort=byDat...](https://hn.algolia.com/?query=Humble%20Programmer&sort=byDate&dateRange=all&type=story&storyText=false&prefix&page=0).

Reposts are ok unless the story has had major attention in the last year or so ([https://news.ycombinator.com/newsfaq.html](https://news.ycombinator.com/newsfaq.html)). In this case there has: [https://news.ycombinator.com/item?id=10014530](https://news.ycombinator.com/item?id=10014530).

</comment><comment><USER10> "I don't need to waste my time with a computer just because I am a computer scientist."

\- [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EW...](http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1305.html)

</comment><comment><USER11> Here is the last line in his essay:

intrinsic limitations of the human mind and approach the task as Very Humble Programmers.

The ironic thing was he was not very humble. He was pretty mean to a lot of people. He had a pretty massive ego.

<comment><USER12> He was not humble towards people, he was humble towards programming. Recognizing that you can never be more than an apprentice at programming is essential to becoming good at it.

</comment></comment><comment><USER13> My quick summary -- The main limitation in programming complex solutions is the limit of complexity each individual can hold in his/her head. So if we shape our tools, processes and disciplines to acknowledge that, the software development industry can become an order of magnitude.

<comment><USER13> ... more effective.

</comment></comment><comment><USER14> Favorite quotes:

> I pray daily that more of my fellow-programmers may find the means of > freeing themselves from the curse of compatibility.

> Society is getting dissatisfied with the performance of programmers and of > their products.

> [Program] testing can be a very effective way to show the presence of bugs, > but is hopelessly inadequate for showing their absence.

> The purpose of abstracting is _not_ to be vague, but to create a new > semantic level in which one can be absolutely precise.

> The competent programmer is fully aware of the strictly limited size of his > own skull; therefore he approaches the programming task in full humility, > and among other things he avoids clever tricks like the plague.

It's fascinating to see what he expected to be the biggest problems in programming. His discussion of more efficient programming techniques focuses on theorem provers, automated checking of loop invariants and the like, whereas today, the biggest problems typically occur during integration of software components with each other.

But maybe he actually did foresee that:

> I now suggest that we confine ourselves to the design and implementation of > intellectually manageable programs.

Regarding provably correct programs: I'm torn here. On the one hand, if we required all programs to carry proofs of their correctness, that would exclude a huge number of current programmers who lack the formal education etc. to carry out these proofs. On the other hand, if all programs that we need would have proofs of their correctness (and thus carry a bunch of helpful invariants and formal specifications), it might be easier to combine all these programs, hence obliterating the need for most programming tasks that are just concerned with integrating multiple programs with each other.

I'll close with the most insightful paragraph from this whole piece:

> There may also be political impediments. Even if we know how to educate > tomorrow's professional programmer, it is not certain that the society we > are living in will allow us to do so. The first effect of teaching a > methodology —rather than disseminating knowledge— is that of enhancing the > capacities of the already capable, thus magnifying the difference in > intelligence. In a society in which the educational system is used as an > instrument for the establishment of a homogenized culture, in which the > cream is prevented from rising to the top, the education of competent > programmers could be politically impalatable.

This is fascinating because right now, a lot of people lament that our students are only being stuffed with facts, but not equipped with the methodological knowledge required for their professions.

</comment><comment><USER15> Computer Science is still an early disciple. I am more jealous of what capabilities people will have 50 years from now than 50 years ago.</comment>


The Inherent Instability of Disordered Systems - <AUTHOR> http://necsi.edu/research/multiscale/disorderedsystems <comment><USER2> 'The Multiscale Law of Requisite Variety' may be my new favourite piece of science terminology - [https://en.wikipedia.org/wiki/Variety_(cybernetics)#Law_of_R...](https://en.wikipedia.org/wiki/Variety_\(cybernetics\)#Law_of_Requisite_Variety)

Would also make a good band name.

>in general, any system without structure above a certain scale is unable to withstand structure arising above that scale

The political implications of this are interesting, in this paper they look at anarchic systems ceding to structure, but it also helps illuminate some of the inherent difficulties in current events such as brexit.</comment>


Boss selling restaurant to save employee with brain tumor - <AUTHOR> http://www.khou.com/community/Boss-sells-restaurant-to-save-employee-with-brain-tumor-238996011.html <comment><USER2> That is way public health is better for the economy... it helps business owners provide healthcare to their employees without losing everything.

</comment><comment><USER3> I grew up near Lake Conroe, and lived there until 2008, but I never visited that restaurant.

Now I wish I had.</comment>


Google Fiber: Working with content providers to minimize buffering - <AUTHOR> http://googlefiberblog.blogspot.com/2014/05/minimizing-buffering.html

<comment><USER3> Pretty brilliant move on Google's part.

By launching Google Fiber, they have a huge wedge for any "Fast Lane" negotiations with the ISPs. If ISPs try to charge content providers too much, and start to impact Google's bottom line, Google can simply start expanding Fiber to bite into the ISP's business.

It effectively sets a ceiling for how much the ISPs can charge Google or it's customers, since Google can simply emphasize Fiber if it becomes more cost effective vs. paying the Fast Lane tolls.

</comment><comment><USER4> ISPs are trying to become Netflix. Google is trying to become an ISP.

Netflix is trying to commoditize bits.

Netflix should try to become an ISP.

</comment><comment><USER5> Google Fiber: we're also not available where you live.

<comment><USER6> If you're in the US, you can fix that by moving.

I did.

</comment></comment><comment><USER7> This is basically a giant fuck you to the whole Comcast/Time-Warner/net neutrality issue.

<comment><USER8> and by giving away for free the most expensive part of hosting - power - <USER2> the folks colo'ing with them, it is almost free for netflix and others to do this. it makes the offering something that other ISPs won't be able to compete with easily if at all.

<comment><USER9> At Netflix's scale I'm almost certain that paying for the space and power would still be much cheaper than having to pay direct bandwidth costs / external CDN costs.

I wonder how they decide who gets to put a server in there for free, I always thought it was just a matter of money.

</comment></comment></comment><comment><USER10> It's good that Google is doing this, and it's great PR at this moment in time, but Netflix has been offering ISPs their Open Connect Appliance for a while now:

[https://www.netflix.com/openconnect](https://www.netflix.com/openconnect)

This is one aspect that confuses me about the whole net neutrality debate revolving around Netflix. They basically provide a CDN point of presence to any major ISP who wants it, and that's less outside bandwidth the ISP needs to worry about. It's a win for everyone, except for much smaller competitors who don't have the budget to offer a free appliance, nor do they have the popularity for an ISP to want to power their device. Netflix is an odd poster child for the net neutrality debate.

<comment><USER11> The issue is that (as shown by Level3 [1]) the congestion isn't really at the intranet but within regional ISP networks. The regional ISPs (Comcast/TWC etc) realized that actually not spending money to augment their networks to accommodate for the traffic can be more profitable than actually providing a better service to their customers.

When the traffic on their network is congested, they can force companies like Netflix to actually run a fiber directly to their data center not only they can have Netflix pay for it (and therefore they don't have to pay anything to their uplink (such as Level3 and others), they also will receive money from these companies in order to not throttle their traffic.

And they can do all that only because they have regional monopoly, and users don't have anywhere else to go.

[1] [http://blog.level3.com/global-connectivity/observations- inte...](http://blog.level3.com/global-connectivity/observations-internet- middleman/)

</comment></comment><comment><USER12> If Google Fiber spreads to enough locations, the ISPs could start seeing effects on their subscribers. Content providers can dismiss the ISPs demand for money, and Google and content providers can go and say, "get all your favorite services, fastest on Google Fiber". The ISPs would be forced to put content on the "fast lane" or risk losing customers.

Unfortunately, Fiber is not available in enough locations yet.

</comment><comment><USER13> I lived in Chattanooga for a summer and was on the EPB gigabit fiber; having a peered YouTube CDN was a gigantic win. The speeds were unreal!

</comment><comment><USER14> I was under the impression that such colocation by Youtube, Netflix, etc. had been going on for years.

</comment><comment><USER15> We new net neutrality codified in regulations so that google et. al. can't change their minds.

</comment><comment><USER16> We changed the url from [http://gigaom.com/2014/05/21/google-fiber-we-dont- charge-for...](http://gigaom.com/2014/05/21/google-fiber-we-dont-charge-for- peering-dont-have-fast-lanes/), which was entirely lifted from this post.

Submitters: Please read what you post and, if it's just an excerpt from a more original source, post the original source instead. HN does not want blogspam.

</comment><comment><USER17> If Google became as large as AT&T and Comcast they'd be worst. I'm sure At&T and Comcast would support making Google's bread and butter (say Adwords or tracking data) open source or more open too.

Google makes a lot of their money when people download /upload /view a lot of files and videos since they slap ads on them. At&t etc must carry them, so there's a conflict of interests. No one is really on your side, just some of their interests may align with ours..for now.

</comment><comment><USER18> ...and still prohibit running servers in our Terms of Service, contrary to the net neutrality principle of allowing users to use any legal software on the network.

CORRECTED:

...and still restrict running servers _based on commercial use_ rather than anything related to network impact in our Terms of Service, contrary to the net neutrality principle of allowing users to use any legal software on the network.

<comment><USER19> Except that that's not true:

[http://arstechnica.com/information- technology/2013/10/google...](http://arstechnica.com/information- technology/2013/10/google-fiber-now-explicitly-permits-home-servers/)

Unless you're trying to run a commercial website from your apartment, but I don't think that's unreasonable.

<comment><USER20> And why shouldn't I be able to run a commercial server? But apparently a commercial client is okay? You don't mind me making money, you don't mind traffic, but you care very much which direction TCP connections are initiated, but only when there might be commercial activity involved? _Why?_

(And "Too much traffic" isn't a valid answer here: if I have a client, I can use as much bandwidth as I like — respecting the other sections of the ToS, which are outside the scope of this discussion.)

<comment><USER21> If you get a commercial account/connection then you should be fine.

Even if it is not technical, it might be like garbage services in my area where commercial operations subsidize residential operations. Residential connections might be getting a discount that is paid by commercial entities and you would be cheating their pricing model.

<comment><USER22> I had never considered that before but I presume you're onto something there. There's likely some commercial interest or government subsidy/tax implications that come into play as to why business and residential pay different rates for the same line.</comment></comment></comment></comment></comment>


World's best resignation letter - <AUTHOR> http://phunkyou.com/hot/?p=311

<comment><AUTHOR> "You will never understand computers. Something as incredibly simple as binary still gives you too many options."

Priceless

</comment><comment><USER2> Wow, what a dink.</comment>


It's harder to get a job at the Apple Store than it is to get into Harvard - <AUTHOR> http://www.businessinsider.com/its-harder-to-get-a-job-at-the-apple-store-than-it-is-to-get-into-harvard-2009-11

<comment><USER2> There's no evidence in the article of how Apple's hiring process actually works, so what is "selective" about it?

They received _10000_ applications for _one store_ , and hired 200, which still seems like tons of employees, to me. The only thing hard about getting the job is competition, which is just life.</comment>


Ask HN: How Can Ads Not Suck? - <AUTHOR>

There have been numerous articles debating ad block, ads sucking, etc.  Instead of arguing about the way things are (we can't change that), let's talk about the future:
How can we make ads not suck?
Google does well because the ads shown on search bring forth some form of utility.  List as comments how ads could "not suck".  Maybe a long list of grievances will prompt things to somehow get better.  It's better than complaining and arguing with each other. <comment><USER3> 1) Advertise real products or services. Seems like 3/4 of the ads I see on facebook are scams or vapor. Carefully vet your advertisers to make sure they're legit.

2) Make ads relevant. I'm a happily married stay-at-home dad. I'm not interested in dating ads, but ads for better bottles could get my attention. Keyword-driven or site-demographic-driven ads are a start. As dpcan suggested, browsers could allow us to tag ourselves and our interests, which would be even better.

3) Get rid of common annoyances: flashing ads, ads that eat CPU and grind my browser to a crawl, ads on sites I might visit from work or with my kids that aren't safe for work/kids, popups/popunders, ads that block my view of the content I'm looking for, and misleading ads. (Again, if you're a host, vet your ads!)

4) Do not compromise user privacy. Don't track my browsing; base ads off of the site I'm on or information I voluntarily tagged myself with.

Many of the webcomics I read use Project Wonderful, and they seem to have a pretty good model. I regularly see interesting ads, and almost never see offensive ads, scams, or CPU killers.

<comment><USER4> Although I agree with all of these points, I think relevancy is key. If it's determined by some means that I like "Antique Butter Churns", I'm hardly going to field like the ad to the "Antique Butter Churn Store!" website is actually an ad. I'd consider it a helpful recommendation.

If an ad platform could approach a point of such relevancy that users wouldn't see the ads as advertisements but friendly suggestions, that company would change the way the web works!

</comment></comment><comment><USER5> How? Don't serve ads.

Frequently on HN we get a lot of people who are great at building stuff but fall when it comes to finding and growing a userbase.

We then have people that are great at developing a community, have a popular niche blog or forum, and are itching to monetize their community.

Serving ads to solve this problem is like strip-mining for gold - <USER2> sediment to gold ratio.

So what if we concentrated on the affiliate model. Rather than serving ads to your community, you vet actual products and services _that your community would actually use_ and genuinely endorse the product openly. You could run a drop-in type of "marketplace page" for your endorsements. It would be clear to your community that you receive (large) commissions on these sales, but I reason happy users would _want_ to help your site. I'm talking 50%+ commissions so you can easily profit share in terms of offering a better price than they'd pay going directly anyway.

For product and service providers, I can't see a downside. They pay only from actual sales. The product is seen in a positive light (endorsed) rather than overlooked as an ad. And product providers could/should work closely to community moderators to iterate on their product.

As of now this seems like wishful thinking I know, but this could definitely be worked out, and provided it was dead-easy to get started from both ends, it's worth testing.

Make dropping in an affiliate marketplace easy for content providers. And make revenue sharing, management, and tracking easy for product providers. Develop community around connecting the two in a vetted environment. Profit off transaction fees.

</comment><comment><USER6> Doing targeted advertising that _is_ utility is the best way to make ads not suck.

The main reason advertising is annoying is because we are looking for something else, we don't need it right now, or its the wrong audience.

If you had a huge spare tire and wanted rock hard abs, and the advertisement could prove the safety of your purchase, you would say "HELL YEAH!"

When I was 16 the advertisement for Proactiv was very engaging. It worked and I was amazed. I'm no longer a zitty teenager so now I find their advertisements annoying.

I recently joined the Spiceworks team, and it is free software. It is advertisement driven, but most in the case where you need it. It is IT management software. As an example, if you see your SQL server getting slammed, you could see an ad that offers you RAM for that specific machine. Does this advertisement suck? Probably not.

One reason advertising could suck is due to audience. If you go to Digg (which has a wide audience) you are going to get wide or undirected ads. This is why targeted advertisement is all the rage these days - because its less annoying, and more to the point effective and win-win in more cases than not.

I'd say to make advertising not suck, don't involve yourself in communities without a common interest or goal. If you are an IT manager and you are in an IT community, you will more than likely get IT advertisements. If you are watching MTV... well...

<comment><AUTHOR> Yup, that's a feeling I have too. One thought is: how can you involve your community more to decide which ads are useful and get feedback?

<comment><USER7> <http://reddit.com/r/ads> is great for this

</comment></comment></comment><comment><USER8> We should be able to tag ourselves within our browsers.

When I install FF, I should be asked what applies to me (tech, baseball, family) and then all advertising can look to this public info first and display what's relevant only.

THIS should replace ad-blockers. Then we don't have to destroy our favorite sites' revenues and I don't have to see any prescription medicine ads.

And get rid of ads I have to "skip", ads that "pop-under", and ads that cover what I'm supposed to be reading.

</comment><comment><USER9> > Google does well because the ads shown on search bring forth some form of > utility.

As far as my personal experience goes, I can't remember a time I encountered a Google ad that was useful for me, unless I was searching for "Amazon.com" and Amazon.com shows up in the sponsored links.

But to answer your question, ads can _not_ suck by simply being perfectly targeted. Even though perfect is impossible, that should be the goal of all advertisers nonetheless. Get as much info about people, and send them only ads you _know_ will be useful. Advertiser wins because they got the word out about their great thing, consumer wins because they got a great thing. The only thing this ideal wouldn't help is a shitty product. Shitty products aren't great, so if they get undeserved attention, they just screw over more people.

</comment><comment><USER10> A friend and I developed a proof-of-concept system in 2006 to address this opportunity. The central concept was that publishers would receive offers via our advertising marketplace, and then use their own selection algorithm to select ads to display (publishers could choose to use our hosted selection tools, use our open-source selection algorithms, or build their own). This would allow the publisher to use any combination of factors, such as ad format and perceived relevance -- not just eCPM. It is a flexible system that give the publisher the final decision to display or veto an ad.

If anyone wants to read the whitepaper, feel free to send me an email. The truly adventurous can check out the patent application (#11948995).

</comment><comment><USER11> Some things to consider for me:

\- Don't put ads where content should be, I hate when I'm scrolling and there is an ad where I should be reading (unless it is displayed at the end of an article)

\- Put ads in a designated area, and stick to that single area

\- Only display relevant ads if your site is about web design I don't want to see ads about belly fat or ebay

\- No flash or animated ads, this is so annoying and probably makes me leave sites the most because it is just distracting from both your content and my train of thought

\- Don't display too many ads, this is also a major problem and just makes me assume that there is no real content and you just want to make money (news sites seem to do this a lot)

</comment><comment><USER12> 1\. Get rid of scam/cheating ads (rebills etc) and also pop unders

2\. Don't autoplay audio/video on the ads. Heck, autoplay is bad for content, its super annoying for ads.

3\. Increase relevance

4\. There are sites where I need to search the content inbetween ads. Would we tolerate if just 30% of our TV screen was video, and the rest were ads? (text, scrolling text etc). Maintain decent ratio between content and ads.

5\. Most websites don't even bother to experiment with other ways to make money, like subscription etc. quizlet turns off ads for a donation of 10$ (donations get some more features). Seems like a good experiment. May be others can try that? this could also be an option.

</comment><comment><USER13> Try a classifieds model where content providers don't place any advertising on their pages at all. They then put a "Classifieds" link on desired pages, that takes you to another page filled with targeted advertising relevant to the article or site as a whole. As a bonus, let the content providers have an opportunity to select or vote on ads to reward quality and improve relevancy. The classifieds page doesn't even need to come from the referring site, as it is completely separate from the content. If advertising is so wonderful, this model can't fail. It's less intrusive and encourages the advertising industry to provide something of value.

</comment><comment><USER14> It's impossible to make ads not suck. Fifty years ago, perhaps ads didn't always suck, before we had Metacritic and Amazon reviews and a million professional critics and reviewers writing online and social media telling you your friends' opinions about everything. All of those things are way more useful than an ad, no matter how well you target it. And soon, with augmented- reality stuff, they will be easier and easier to see whenever you are thinking about buying something.

With all that, what the hell is the point of ads? They're just wasting the time of the people producing and consuming them. They do nobody any good at all.

</comment><comment><USER15> > How can we make ads not suck?

If there was some kind of nonprofit "respectful advertising alliance" that enforced consumer-friendly practices and provided a whitelist to import into adblock plus, I _might_ use it. It would be hard to define what is consumer friendly and enforce the rules, though.

The only site I've disable adblock on is Reddit. This is because their ads use inside jokes and are sometimes humorous and always non-intrusive.

I don't see what is so nice about Google ads. They look crappy on most sites and are rarely useful in my experience. Also not a fan of Google's tracking with adwords.

</comment><comment><USER16> What about voting/rating ads? I've seen it in a few places, and it seems so simple -- someone has to have information on how it worked out in practice.

I would expect that having an easy, obvious rating meter on each ad would work in two ways. First it could improve targeting by having the user reject ads on a case-by-case basis. Second, ads that get rejected by a wide range of user types can be determined to be bad in general (ugly, offensive, annoying) and thus removed from circulation, automatically.

Does anyone know why this isn't in place more? (Or perhaps I just haven't noticed it?)

</comment><comment><AUTHOR> What other verticals can you apply "thedeck" model to?

</comment><comment><USER17> I think it comes down to specialized, targeted advertising outlets. A perfect example is what FusionAds is to the developer community. I enjoy clicking those ads (although I think they should allow more websites to display the ads).

</comment><comment><USER18> I like the 125x125 image ad format. It's just big enough to get my attention, and small enough so the publisher can stack in a few of them without taking up too much space. I think it's been gaining a lot of popularity lately for those who sell adspace directly to businesses.

A few examples that come to mind

<http://betterexplained.com/>

<http://theoatmeal.com/comics/coffee> (bottom of the page)

<http://37signals.com/svn/>

</comment><comment><USER19> My concern with asking "How can ads not suck?" is the limitation of the answer. If I take one step back from the question, my view of the problem shifts and the potential solutions grow. Your concern isn't about ads and ad- blockers, it's about generating revenue from a site. You think that ad- blockers are affecting your revenue. They aren't. How you're advertising is affecting your revenue.

I'd start with the question "How can I generate revenue without using ads?" Others may have better questions.

</comment><comment><USER20> I've taken numerous conscious and subconscious decisions to eliminate ads from my life. I don't watch broadcast television and I don't listen to broadcast radio. I don't regularly visit sites that whore out their pixel space (and even the content pixels with floating ads). It's easy for me because I know where to get good content without these media channels. I like to believe the net result is less fatigue at the end of the day.

</comment><comment><USER21> Bring down the editorial/advertising wall. Seems to happen a lot online but I think it's going to explode even in the established media once the efficacy of advertising tumbles. More payola, more "product placement", more links within the actual content to advertisers..

Industries tends to find a way to win (or at least fight hard). Our content is going to get a lot worse rather than the advertising better, IMHO.

</comment><comment><USER22> A lot of the ads I see that "suck" are for scam. Most, if not all of those ads are driven by rebills. If we can get rid of rebills, we can get rid of a lot of the crap ads.

<comment><USER23> The reason for that is that advertising is market driven, those that make the most money off a user are the ones that will pay the most for a spot.

Rebills and upsells are a way to make a lot of money from a single signup so that's why those advertisers pay top dollar.

And as long as the credit card companies allow scammers to operate this will continue.

</comment></comment><comment><USER24> Imitate The Deck (<http://decknetwork.net/>). They produce beautiful, low impact, relevant ads which I frequently consider carefully and often click- through on. They do an amazing job and I've deliberately reduced the power of my adblock blacklists to see those ads.

An example ad: <http://hivelogic.com/>

They're clearly not even attempting to scale, but they have the ideas that -- if brought to scale -- could make advertising less sinful.

<comment><USER25> I look forward to using them for GridSpy. Thanks for the recommendation.

</comment></comment><comment><USER26> I think one secret is community-based ads. I'm happy to receive ads about products directly related to sites I frequent. For example, things produced by YC... I would be happy to peruse an "ads" tab (next to "jobs"/"submit") by my own volition. 2600 magazine does the same thing... ads by subscribers only... and they're always interesting. That's the key. Find ads that people WANT to see, so much that they're almost willing to go out of their way to see.

Then again, if you really have high enough volume, why can't you just try EVERYTHING and then only show ads that get high CTR? Isn't 5k impressions a sufficient sample size?

What about using graphs of campaign clickthru rates for individual people (a la directededge)?

</comment><comment><USER27> Ditch automated ads, ads that try to steal our focus away from the content, and ads that hog up our bandwidth, screen space, CPU time, etc. They're annoying, usually irrelevant, and serve no good.

When you write, include in your writing very brief endorsements for products related to your subject. Don't just randomly interject with "oh by the way, go buy Product X!", but if Product X is a brand of hard drive and you're writing about hard drives, take a sentence or two to talk about the advantages of that particular brand. In plain text, just like the rest of your article.

There are TWO important parts to this equation. Many people only seem to realize the first. 1) Make your ads not so obvious that machines can tell they're ads. 2) Make your ads not so annoying that people will update their ad blocking rules to remove them.

In other words, working around the ad blocker to present annoying ads is just going to annoy even further. Your ads have to be seen AND they have to not be immediately blocked again and/or just ignored, and that means they have to be manually inserted so that they are intertwined with the content from both a technical and a writing standpoint.

You might even get away with static banners, that don't stand out too much, at the top and bottom of a page (where we can scroll it off the screen), and text links next to the content area. Just not IN the articles, unless it's part OF the article.

Why did I install an ad blocker in the first place? Because ages ago on gameshark.com, an ad popped up, demanding I join the US Army. I've never left Canada and I was maybe 13 at the time. This ad, for 30 seconds, played an animation with loud sound effects, hogging up all my CPU time and bandwidth (now I knew why the page had loaded so slow), and centred itself under the mouse cursor at all times so I couldn't click anything. It was a Flash layer of some sort, rather than a window, so no keyboard shortcut would be able to do anything either. When this ad finally disappeared, I IMMEDIATELY looked up and installed an ad blocker, and never again went to gameshark.com. If I'd had any interest whatsoever in joining the US Army, that also would have killed it permanently. This is the perfect example of how to do EVERYTHING WRONG with online advertising.

PS: one of the worst comment systems I've ever seen. Requiring registration? Fail. Not stating this until AFTER the comment is submitted? Massive fail. Not stating the requirements on the form until they're violated? Cherry on top.

</comment><comment><USER26> For every youtube video, i should see ads on when the artist is next coming to town by me. Find out where i live by simple ip address geolocation. Get commissions on ticket sales. If the artist isnt coming soon use the panoply of recommendation systems to just find out when similar artists are comin instead</comment>


Mistery solved: CPE1704TKS. The meaning of wargames film secret codes solved - <AUTHOR> http://mutants.co.nf/wargames.html <comment><USER2> This post makes absolutely no sense, and reveals nothing.</comment>


The sleepy village that stopped the black death - <AUTHOR> http://www.bbc.com/travel/story/20151026-the-sleepy-village-that-stopped-the-black-death <comment><USER2> There is a novel based on this story called Year of Wonders. It was a fairly good read.

</comment><comment><USER3> Awesome, as it says:

BBC Worldwide (International Site) We're sorry but this site is not accessible from the UK as it is part of our international service and is not funded by the licence fee. It is run commercially by BBC Worldwide, a wholly-owned subsidiary of the BBC, the profits made from it go back to BBC programme- makers to help fund great new BBC programmes. You can find out more about BBC Worldwide and its digital activities at www.bbcworldwide.com.

<comment><USER4> Because they are funded by taxes, they have very specific things they are allowed to sell because they have an unfair advantage in internal UK markets. However, to reduce the burden on the tax payers, they are allowed to sell things internationally.

So you suddenly have this dilemma, and this site is a direct consequence of that dilemma. They want to act in a commercial way to worldwide audiences to reduce the tax burden, but are prohibited from showing certain things to UK tax payers because they would have an unfair advantage against commercial UK competitors.

Your choice is get rid of the BBC or put up with this and a few other legal quirks.

I prefer keeping the BBC.

<comment><USER5> Why wouldn't they put more and more resources towards the paying market and short as much as possible the market required to pay by statute?

<comment><USER6> To state this more precisely than the others did:

Most companies are motivated to return a profit because that's what their shareholders want, and the continued employment of their directors depends on keeping the shareholders happy. The BBC doesn't have shareholders, it has a government oversight committee. The continued employment of their directors depends on keeping that committee happy, which a move like you propose would certainly not achieve.

They have an ordained purpose of providing quality content to UK citizens. Selling content internationally is only done insofar as it furthers this purpose (by generating extra funding for it). Their performance is measured based on how well they satisfy the UK market.</comment></comment></comment></comment>


How trustworthy are MedCram's videos? - <AUTHOR> https://www.youtube.com/channel/UCG-iSMVtWbbwDDXgXXypARQ <comment><AUTHOR> Specifically, I have been watching their Coronavirus series and while they seem fairly legitimate (with claims often backed by reputable sources), much of their recent content seems to include alternative medicine which makes me question the validity of their method.

Has anyone else been following this series and if so, what are your thoughts?</comment>


I taught myself Python on the Internet and so can you - <AUTHOR> http://aysinoruz.com/i-taught-myself-python-on-the-internet-and-so-can-you/ <comment><USER2> This post heavily resonate with my own experience. Specifically this:

>>During my studies I learned C++. Personally I think that C++ is quite a challenging language for a beginner. I did get the occasional straight A but I wished that I would have started with an easier language

I've took C++ course during my university days and that made me hate programming for years. The language is huge and full of things which beginner programmers shouldn't have to think about. It was back in early days of the Internet so it was hard to find information. It was just too hard to me to comprehend why we need virtual/friend classes, bizarre constructors rules and why the code has all those strange symbols. The picture of programming I've got is a lot of boilerplate and little essence. We were coding simplistic calculators but the class hierarchy and all the nonsense had to be there.

I've learnt Python as my first programming language several years after college (I dropped out; the reasons are many but one is that I really didn't enjoy the perspective of becoming a programmer and it was all just a chore) and my love for programming was resurrected. For me it was a web based programming game ([http://www.pythonchallenge.com/](http://www.pythonchallenge.com/)) paired with a lot of googling but today it would probably be Code Academy (it wasn't available back then). What was really great about the experience is that I was coding fun things like automatic downloaders, simple image generators and a (again very simple) web crawler after a week of it. I didn't need to care about arcane language constructs at all.

I've learnt C few years after that and today I do successful commercial project in C and most of the auxiliary programming (accounting, hobby projects, quick scripts etc.) in Python. The negative experience with C++ was so strong I don't touch the language to this day. Programming gives me a lot of joy and C++ was close to killing it forever. While it's a stronger sentiment than the author expresses I have the same advice for people just starting:

Go with Python and have fun!

<comment><USER3> I can echo quite a lot of your sentiment. In high school we learned C/C++ (on TurboC++!) and had a blast. We were quite happy to get anything done, and never aspired to much since it took so much effort to do even simple things. Ideas and algorithms had a lot of hoops to jump through to get the computer to understand them.

Fast forward a number of years, and I'm an engineer working in a plant. I need to get some analysis done, and Excel just ain't cutting it. Somehow I happen upon pandas and IPython, and it's _magic_. I remember building classes for calculating vectors and such in high school, full of pointer nonsense and terrifying piles of boilerplate. (You haven't lived until you're a newbie attempting to code a templated class that makes doing physics look like an ordinary equation - you'd think it's easy, and it is! Right until it _ain 't_.)

And now? I open up localhost:8888 and spin up a new Python kernel. Within seconds I am importing opencv and doing stuff I couldn't _dream_ of in high school. And it's fast! I lost years from the discouragement of fighting linkers and arcane syntax errors. Intellectually gratifying sometimes, but ultimately not worth starting in. Accomplishing real work early counts for a _lot_.

Never mind that the curriculum attempted to switch to Java in our third year in high school. We all rebelled and won, and I feel like we dodged a bullet there.

</comment></comment><comment><USER4> I liken learning C++ as a newbie to using a chainsaw to slice a pizza: it's not going to be pretty no matter how you do it and you might as well chug down the whole thing. It's always important to pick the right tool for the job, and when you are trying to get into the programmer's mindset, it's really easy to miss the forest for the trees. Programming is a wonderful intersection of math, algorithms, creativity, and the messy reality of modern hardware; that's both a curse and a blessing because it means that you have so many ways of looking at it that a beginner might just think that they aren't smart enough, when the reality is just that they are trying to bite more than they can chew.

<comment><AUTHOR> Totally, slow by slow learning helps. I was overwhelmed when i started first but then i took my time and tried to teach myself. Thank you for nice comment!

</comment></comment><comment><USER5> Other than a few lines of Basic when I was 10, I had never coded before. Three years ago I sat down with my laptop, fired up the MIT Introduction to Computer Science course, and began my journey into learning Computer Science and Programming.

I've stuck with Python mostly, with forays into JavaScript, C and Haskell since then.

In a couple of weeks time I'll be leaving main stream teaching and heading off to work for The Raspberry Pi Foundation.

I can't recommend Python enough, as an entry level programming language. The online resources are numerous and of high quality, the community is helpful and welcoming to beginners, the language is human readable and easy to debug.

<comment><USER6> First of all, great work! That is an impressive journey. Secondly, what was your Haskell experience like?

I'm always looking to see what others experiences are so I know how I can help make future experiences better.

</comment></comment><comment><USER7> > _After 7 months of self studies, I can add "Python programmer" to my resume > and I didn't have to get a loan to pay for College_

You probably shouldn't put "took free online classes" as evidence of expertise on a resume. That's not sufficient evidence of actual proficiency in the language.

It's also the reason why many advocate having a populated GitHub profile in lieu of professional experience/learning.

<comment><USER8> I agree. I don't see any evidence he has attempted to solve any problem or made something with Python. This is the measure of proficiency.

<comment><USER2> It's true but it's more of an evidence than graduating from college anyway.

(not to dismiss college education here but what you get there are good theoretical fundamentals not anywhere close to proficiency in programming or specific languages)

<comment><USER9> I don't know whether you went to college/university or not, but my program definitely gives you both of those things, in addition to very good theoretical fundamentals. Not to say that you've got the necessary real-world experience after completing it, but you're well on your way.

</comment></comment></comment></comment><comment><USER10> I would add Google's Python Class to the author's list.

[https://developers.google.com/edu/python/](https://developers.google.com/edu/python/)

<comment><AUTHOR> I actually did complete this program too. Forgot to add on the list. Thanks for the reminder!

</comment></comment><comment><USER11> Is Dive into Python still maintained by anyone? That's what I used when I learned Python about 10 years ago.

<comment><AUTHOR> I am actually reading that book right now. Just started. It is quite informative but the version is from 2004.

<comment><USER12> Byte of Python is good too.

</comment></comment></comment><comment><USER13> I've been sending friends who want to learn to code in python to Learn Python the Hard Way and more recently, have picked up [https://hellowebapp.com/](https://hellowebapp.com/) that allows them to build their first website using python. They've been a little overwhelmed (as expected), but with a "mentor" there to answer questions, they seem to be getting it.

</comment><comment><USER14> A.O., I am glad that you've become a programmer. Keep it up.

Does anybody else dislike non-free (both in $ and license) educational materials, particularly in the field of programming?

Full disclosure: I don't know anything about Udemy other than that they apparently charge money for educational materials related to programming.

Seems to me that knowledge is passed around from person to person via various mediums, but every given idea had to start _somewhere_. (Let's put simultaneous independent discovery aside!)

So... Let's say that Bob learned the syntax of python array literals from Jane who learned it from Mike who read the docs which were written by Fran who first learned the syntax by reading a post on a mailing list written by Sam who wrote the code that defines the darned syntax (though arguably he based it his experience with other languages).

Where the does an outfit like Udemy fit in that picture? How does somebody take public knowledge and charge for it? Should there be pushback against this practice? Is the license under which the documentation was released relevant?

[EDIT: Hmm. Ok, I accept these answers. There was a reason I asked. :) ]

<comment><USER15> Non-free educational materials aren't charging money for the public knowledge, they're charging money for the effort it took to put the public knowledge in a form that is easy to learn from. This effort is very often non-trivial. The public knowledge is still out there, and the person putting up material behind a paywall isn't subtracting from the availability of that knowledge.

Now, it would certainly be different if the person was literally just copying the documentation, or somebody else's free or non-free materials, because thats just plagiarism. But I think if a person goes to a significant effort to make educational material and wants to charge for it, and there are people to whom this material is valuable to pay for it, then power to them.

</comment></comment><comment><USER16> I've been learning Python myself but I'm fortunate to live in Chicago with the excellent [http://chipy.org](http://chipy.org) group. I've even taken part in their student mentorship program as a mentee. I hope to see more organizations put together a mentorship program.

</comment><comment><USER17> I was taught the basics of c++ in three months. I'm not a genius or anything but I never thought that it was any harder to use simple c++ than it is to use python. C++ also allows you to learn programming at a much lower level as you get better with it.

</comment><comment><USER18> A good foundation in math is imperative (if you're serious about programming). Sure, anyone can pick up syntax but can you program, that's the question. In my experience, it's what makes a difference between a good or bad programmer.

<comment><USER19> Couldn't disagree more. A recent link on HN was along the lines of "ability to mange complexity is the key differentiator of a good programmer" and I think this is vastly more important.

Most code has very little mathematics in - beyond the core skills of recognising patterns and abstractions. If that's all you mean by 'a good foundation in mathematics' then we agree but I don't think your formulation is terribly useful.

<comment><USER18> Code does not have to have mathematics for someone to have a difficult time writing it. By a good foundation, I meant being able to understand fundamental mathematical concepts such as those taught in discrete math. It's not a numbers class but it makes you use your brain in ways which help and facilitate the writing of code.

</comment></comment></comment><comment><USER20> Couple of things I see often in online language learning is that they (a) assume everyone is a n00b programmer and doesn't know much programming; and (b) often don't highlight the _idiomatic_ way to write code for that language.

</comment><comment><USER21> @aoruz : Please stop modifying the scroll behavior on your website. That's boring.

<comment><AUTHOR> @maximedev Thank you for your feedback but i didn't change any behavior of the scrolling. Can you send me a screen shot or give me an example what is the issue. Sorry for the inconvenience, i am still learning how to handle this.

</comment></comment><comment><USER22> Loved the Codecademy course. Was able to complete a project in Rhino that required phyton scripts after just two weeks.

</comment><comment><USER23> @aoruz: My story matches up with your's quite closely. One suggestion I would have for a future book to read is either Black Hat Python, Grey Hat Python, or Violent Python all "hacker" related books that are great for anyone interested in security at any level. BlackHat Python is number one pic.

<comment><AUTHOR> @sprkyco Thank you! I am more of a visual learner but I will def go ahead and look into those books. I appreciate your input!

<comment><USER23> In that case I would recommend: [http://www.pentesteracademy.com/course?id=1](http://www.pentesteracademy.com/course?id=1)

,but that is because I am an unabashed infosec enthusiast that attempts to force feed everyone infosec information.

</comment></comment></comment><comment><USER24> I'm a bit confused, doesn't the post say "I studied Computer Science at college"? So the poster studied and has a CS degree and yet it took them '7 months' to learn Python?

<comment><USER23> Not sure how this is confusing. Studying Computer Science at college != programming proficiency. I'm finishing up my last college class (online University) will graduate with B.S. in CS Major S.E. got good grades in both C++, Java, and CS related classes and I have been attempting to get better at Python for the better part of a year now and still don't know shit and would hardly qualify my self as a web developer let alone a software engineer.

</comment></comment><comment><USER25> Online courses are really great, but the Python tutorial is sufficient in itself.

I did this:

\- Read edw519 free PDF book, jump out of the bed and start learning. [0]

\- Read the Python tutorial from A-Z and learned it. [1]

\- Read Learn Python the hard way book and practice. [2]

\- Solved some problems from Project Euler. [3]

\- Learnt Django. (Started with the tutorial) [4]

\- Built something with Django.

\- Solved some problems from CheckIO. [5]

\- Built something with PyQt. [6]

\- Built my own library, even if it's stupid. [7]

\- Released a couple of packages even if they are small. [8]

The key thing is to learn AND BUILD something at the same time, and try to remember everything deeply. I used the Janki method [9] to learn statements, code snippets. This took me about a year, but after that, I did not need to apply for a job, however I did once and got that too.

[0]: [https://news.ycombinator.com/user?id=edw519](https://news.ycombinator.com/user?id=edw519)

[1]: [https://docs.python.org/2/tutorial/index.html](https://docs.python.org/2/tutorial/index.html)

[2]: [http://learnpythonthehardway.org/](http://learnpythonthehardway.org/)

[3]: [https://projecteuler.net/](https://projecteuler.net/)

[4]: [https://docs.djangoproject.com/](https://docs.djangoproject.com/)

[5]: [https://www.checkio.org/](https://www.checkio.org/)

[6]: [https://github.com/kissgyorgy/Womanager](https://github.com/kissgyorgy/Womanager)

[7]: [https://github.com/pokerregion/poker](https://github.com/pokerregion/poker)

[8]: [https://pypi.python.org/pypi/poker](https://pypi.python.org/pypi/poker) [https://pypi.python.org/pypi/enum34-custom](https://pypi.python.org/pypi/enum34-custom) [https://pypi.python.org/pypi/pytest- raisesregexp](https://pypi.python.org/pypi/pytest-raisesregexp)

[9]: [http://www.jackkinsella.ie/2011/12/05/janki- method.html](http://www.jackkinsella.ie/2011/12/05/janki-method.html)

</comment><comment><USER26> I would add [https://pythonspot.com](https://pythonspot.com) to the list.

</comment><comment><USER27> Sorry for not commenting on the linked article, but websites that mess with scrolling really irritate me, almost irrationally. I'm quite comfortable scrolling, the innovation in trackpads over recent years has made it almost pleasant to scroll down a page, why oh why do people feel the need to add some sort of script where when I scroll 1cm it jumps 4 pages down, then when I try and move a tiny bit it erratically jumps a paragraph and then all the way to the top of the article!

<comment><USER28> And it disabled the swipe to go back gesture on Mac. I wish there was some way to disable scroll takeovers.

<comment> data-cat Open up your browser's debug tools and throw this in to the console `document.addEventListener('mousewheel', function (event) { event.stopPropagation(); });`</comment></comment></comment>


Chrome adds experimental extension permission API - <AUTHOR> https://code.google.com/chrome/extensions/trunk/experimental.permissions.html

<comment><USER2> I like this, supposing that it lets extensions request permissions at the point when the user tries to do something requiring the permission, rather than at install time. At install time, the user has no idea why the extension needs a permission, and for the user's use-case it might not even need it. The extension has to ask for maximum permissions from the beginning.

This should make it easier for the user to gauge privacy lost vs. feature gained, rather than having to make essentially a brand trust decision from the start.</comment>


The Darkweb's New Favorite Drug Market, Profiting from Silk Road 2's Demise - <AUTHOR> http://www.wired.com/2014/11/the-evolution-of-evolution-after-silk-road/

<comment><USER2> _" And in addition to drugs, counterfeits and guns, Evolution also sells stolen credit cards, a kind of crime never allowed on the Silk Road."_

A sort of natural selection that favors more evil apparently.

<comment><USER3> I recently took a look at Evolution's fraud offerings, as I do anti-fraud work for an online company and was curious to see where the masses of fraudsters I deal with were getting their CC number and bank account info from.

It's actually pretty incredible; I was expecting to see simple "dumps" of CC info and bank login credentials, but it was much more sophisticated. Sellers were offering "packages" that would include bank login information (priced according to account balance), lists of IP addresses that were known to be flagged, SSNs and address information to help with security questions, and guides for how to best use this information.

Definitely seems like it'd be easy for a criminal with a little tech know-how to make a full time job of buying and exploiting this info. Based on the prices I saw, it would only take one successful fraudulent transaction out of many attempts for it to be profitable.

<comment><USER4> I wonder why the prices are low compared to the expected returns?

Perhaps there aren't many buyers out there, or there are just too many stolen CCs that the market is swamped by them.

OTOH, maybe the payoffs for CC fraud are actually lower than you might expect... could the banks be getting better at blocking cards sooner?

<comment><USER5> It's a combination of both.

There are far FAR too many CC numbers available out there and when you consider the work needed to find a viable one, not to mention the legal issues resulting from this...it's pretty clear why they are so "cheap".

It's pretty comparable to the current stolen iPhone market(assuming iCloud locked), as they are basically a paperweight in that configuration, which makes them a "traders" commodity of sorts. Much like this, I've seen CC "packages" used as a sort of commodity, where the partners aren't as much interested in using the CCs, as they are merely selling them off later.

</comment></comment></comment></comment><comment><USER6>
      "Evolution has also had much faster pageload times than competitors, most of whom
      run painfully slowly thanks to Tor's process of routing web traffic among random-
      ly chosen computers around the world. (Just how Evolution managed those speeds de-
      spite running on Tor itself isn't clear.)"

I can't really investigate myself currently and I've never visited but is anyone here know if/why Evolution is faster?

<comment><USER7> I'd guess multiple domains for hosting stuff like CSS and images to better exploit parallelism, and massive compression where possible.

</comment></comment><comment><USER8> Presumably they are smart enough to operate in a jurisdiction where the law enforcement agencies are more of a strategic partner rather than an operational risk. Given the guy running it is a former carder, and Krebs seems to think that all carders are Ukrainian or Russian, perhaps Evolution is based out there? If so that would make it pretty hard for the FBI I suspect.

<comment><USER9> I did wonder why you couldn't set up silk road 3 in eg russia and merely avoid selling drugs into russia. No tor required, and you can stick your middle finger up to the US/EU authorities. Though you probably have to be willing to never leave Russia ever...

</comment></comment><comment> mike-cardwell What is the .onion for this service?

EDIT: Seems to be listed on the hidden wiki. A clearnet mirror of which exists here: [http://hiddenwiki.me/](http://hiddenwiki.me/)

<comment><USER10> Just a reminder that the hidden wiki is, indeed, a wiki. People can go in there and change the onion link to a fraud site such as the ones referenced in the article. Since onion addresses are not nearly as memorable as domain names this is actually a pretty big problem.

</comment></comment><comment><USER11> How "immoral" is it really, facilitating the sale of stolen CC info? Clearly, it is a bad thing to do. But it seems to me that the CC companies are at least as much to blame for having such a crappy system. Anti-fraud is one of the few things that they can point at as justifying their exorbitant fees for sending a couple of packets. The fact is, their system allows fraud and they are not doing anything about it.

<comment><USER12> Given that stolen credit cards create a lot of headaches for the people who actually _use_ the credit cards, I'd say it's pretty immoral.

(Yes, yes, the CC companies are on the hook for it, and you're not liable for any money charged to a stolen card, etc., etc., but it doesn't make it pleasant. It's stressful.)

<comment><USER13> _the CC companies are on the hook for it_

The CC companies pass it down to the retailers in terms of transaction fees, who in turn pass it down to the consumers.

It doesn't matter whether your card gets stolen or not. It doesn't matter whether you even _have_ a credit card or not. Everyone is paying for the cost of credit card fraud in one way or another. Even people who only pay with cash still bear the burden of credit card fraud, since they're still paying the credit-card-fee-inclusive price (unless they only shop at retailers with cash discounts).

<comment><USER14> It's not even in the form of transaction fees.

Fraudulent charges are withdrawn from the retailers. Even if it has already posted to the bank account, they will take it back.

The CC companies never absorb the cost for fraud. Their greatest trick is convincing everyone they do.</comment></comment></comment></comment>


Ask HN: What's the most thought provoking short story you've read? - <AUTHOR> <comment><USER2> The Egg by Andy Weir [http://www.galactanet.com/oneoff/theegg_mod.html](http://www.galactanet.com/oneoff/theegg_mod.html)

<comment><USER3> It was Excellent. Sometimes I feel the other way. I am the only human and everything else is made up.

<comment><USER4> I'm real

</comment></comment></comment><comment><USER5> "Winter Dreams" by Fitzgerald is pretty great. It changed my perspective on wealth and has in general stuck with me for a long time: [https://public.wsu.edu/~campbelld/engl494/winterdreams.pdf](https://public.wsu.edu/~campbelld/engl494/winterdreams.pdf)

</comment><comment><USER6> Funes the Memorious, by Borges. "About" a dude (Funes) suffering from an infinite memory, written in a non-fiction tone/style.

[http://vigeland.caltech.edu/ist4/lectures/funes%20borges.pdf](http://vigeland.caltech.edu/ist4/lectures/funes%20borges.pdf)

</comment><comment><USER7> Not sure about MOST thought-provoking, but "The Bookmaking Habits of Select Species" and "State Change" (both by Ken Liu) are two good ones I read recently and think a lot about.

</comment><comment><USER8> I read a lot of good ones in school:

* Hills like White Elephants by Hemingway * A Good Man is Hard to Find by Flannery O'Connor * Harrison Bergeron by Vonnegut * Most Dangerous Game

</comment><comment><USER9> I recommend "The Merchant and the Alchemist's Gate" by Ted Chiang! An excellent sci-fi story set in the past that explores themes of guilt and repentance.

</comment><comment><USER10> Metamorphosis by Kafka

<comment><USER11> [http://www.gutenberg.org/ebooks/5200](http://www.gutenberg.org/ebooks/5200)

</comment></comment><comment><USER12> "Postpaid to Paradise" aka "Postmarked for Paradise" aka "The Marvelous Stamps from El Dorado", a short story by Robert Arthur.

</comment><comment><USER13> "A Christmas Carol" by Charles Dickens.

</comment><comment><USER14> "For sale, Baby shoes, Never worn."

Attributed to Hemingway, but he may have cribbed the idea from others...

</comment><comment><USER15> "The Machine Stops" by Forster sent me for a loop back in high school.

</comment><comment><USER16> "The last man alive was alone in a room. He locked the door."

</comment><comment><USER17> The open boat by Stephen Crane is amazingly well written

</comment><comment><USER18> "I have no mouth and I must scream"

</comment><comment><USER19> The Stranger by Albert Camus</comment>


Driverless trucks used at mines to slash costs - <AUTHOR> http://www.abc.net.au/news/2015-10-18/rio-tinto-opens-worlds-first-automated-mine/6863814 <comment><USER2> "The first two mines in the world to start moving all of their iron ore using fully _remote-controlled_ trucks have just gone online in Western Australia's Pilbara."

Yawn.</comment>


Gmail, Hacked – How to Optimise Your Email Inbox - <AUTHOR> http://blog.startupcvs.com/2015/09/04/gmail-hacked-how-to-optimise-your-email-inbox?utm_source=hackernews&utm_medium=social&utm_campaign=gmail-hacked

<comment><USER2> Title slightly misleading... still pleasantly surprised about the content. Will definitely use some of those tips</comment>


The valuation gap between stock market winners and losers is highest in 20 years - <AUTHOR> https://fortune.com/2020/05/18/stock-market-valuation-gap-coronavirus-goldman-sachs/ <comment><AUTHOR> >"Even within sectors, the "collective top 20% of stocks from every S&P 500 sector trade at a median [second fiscal year] multiple of 27x, while the bottom 20% of stocks with the same sector composition trade at a multiple of 9x," Goldman Sachs said in note. That makes the gap within sectors the widest in 20 years, the firm said."</comment>


Ask HN: Cheapest way to obtain lending licenses in various US states? - <AUTHOR> I'm interested in hearing from people who have bought lending licenses for businesses in the US in various states. Specifically, it would be great to know what third party services (if any) you used to and what the fixed cost (states fees) and hourly cost of the people you hired to do that work was. The state fees are obviously available on each state site but if there was anything surprising or additional costs that you learned along the way would be great to hear about that. Also I am interested in non-residential lending. <comment><USER2> Loan Sharking? (jk)

What are you looking to do?

<comment><AUTHOR> Long term goal would be to offer much better terms than what sharks offer. I'm working on building a service that relies heavily on data science (being intentionally vague atm). I will post a beta/demo at some point when it's ready for a show HN but in the meantime I'm trying to assess regulatory costs. Thanks

<comment><USER3> If it is a serious endeavor, I suggest it is well worth your money to speak with a lawyer who works in this area.

Random internet people are generally not the best for assessing the regulatory costs of your intentionally vague business venture, and most lawyers would be happy to compile this type of information for a fair fee with the hopes that you will then use them for jumping through the regulatory hoops when you launch.</comment></comment></comment>


Yahoo Open-Sources MySQL Performance Analyzer - <AUTHOR> https://github.com/yahoo/mysql_perf_analyzer <comment><USER3> How about adding "How-To" install and some screenshots?

<comment><USER4> i second that

</comment></comment><comment><USER5> What does the output look like? What exactly is it analyzing?

</comment><comment><USER6> ten points of OSS cred to the first person to download this thing, post some screenshots, so we have the slightest idea if we need to care.

</comment><comment><USER7> I haven't used this but I'm excited to see how it helps to analyze performance. We need more tools there, even the simple slow queries reports are good. I hope this helps.

</comment><comment><USER8> No screenshots, no example output. I just can't get excited without some visualization candy. The final rub, Java is such a nightmare to deploy.

<comment><USER9> What about sudo apt-get install openjdk-7-jre?

<comment><USER10> The Java packaging is only the first of your nightmares to work through with Java. Troubleshooting problems with OSS tools is a veritable nightmare.

<comment><USER11> Wait.. Troubleshooting all OSS tools are a nightmare? You find it easier to troubleshoot non-OSS tools? I find the opposite is true, since you can't look at the code and even see what the software is trying to do with non-OSS tools.

</comment></comment></comment></comment><comment><USER12> Can anyone provide a sound argument for choosing MySQL over Postgres?

<comment><USER13> 1\. It's far more popular so easier to find solutions to problems.

2\. Used by very popular websites e.g. Twitter, Facebook, Yahoo so you get projects like [http://webscalesql.org](http://webscalesql.org) to utilise.

3\. More options for client side tooling although debatable whether these are better than generic options.

4\. MySQL Cluster is a more cohesive solution for clustering.

5\. The most likely reason: you have bought something that needs it.

Obviously PostgreSQL has plenty of reasons for choosing it over MySQL.

<comment><USER14> For me the biggest reason not to change to PostgreSQL was the sad state of pgAdmin. In my opinion it doesn't hold a candle against the MySQL Workbench or the old MySQL tools.

Sure there are commercial options available, but it is really nice to have some good free or open source tools for a database.

Other than that PostgreSQL looks like a nice database, but I didn't find the "killer" argument to change to it. All the nice SQL syntax changes don't mean too much to me, because I am mostly using an ORM to access the database.

Another thing which isn't working as well on PostgreSQL is master - <USER2> clustering. All the solutions I found for PostgreSQL looked inferior to Galera (which has its own pitfalls). On the other hand I think it is far better to have one / two beefy servers than having a cluster of master databases.

<comment><USER15> pgAdmin is a disaster, and honestly all the tooling around PostgreSQL is not in the best shape. I am currently working on a new cross-platform database admin for PostgreSQL and MySQL - Datazenit[0]. It tries to solve a lot of problems other DB tools have and provides a nice UI on top of it. If you are interested, check it out.

[0] - [https://datazenit.com](https://datazenit.com)

<comment><USER16> Looks neat, why not open it up for the community? Your site design just begs for a "Fork Me on GitHub" link.

</comment></comment></comment></comment></comment><comment><USER17> I wonder how this compares to [https://github.com/box/Anemometer](https://github.com/box/Anemometer)

</comment><comment><USER17> Looks like Yahoo presented this at the Percona conference last month.

[https://www.percona.com/live/mysql- conference-2015/sessions/...](https://www.percona.com/live/mysql- conference-2015/sessions/yahoo-mysql-performance-analyzer)

</comment><comment><USER18> There is 0 information about the tool. Couldn't even find any slides or recording from the Percona conf. What exactly is it analyzing? How can I determine if it is even useful?

</comment><comment><USER19> > MySQL Performance Analyzer is a Java Maven project. JDK and Maven 3.0 or > later are required to build it.

</comment><comment><USER20> Relies on Linux SNMPD for OS level data, so won't work with AWS RDS :(

<comment><USER21> The number of times i get excited about a tool then realize it wont work on RDS. I made a comment about Aurora above (i really don't work for Amazon i promise!), while I'm truly excited about this tool, i'm also fearful that it'll have even more compatibility issue than MySQL RDS instances do. If it was not for some of the monitoring tools we've got setup (in particular New Relic) I would really find day to day insights frustrating to gather.</comment></comment>


The Cracking Monolith: Forces That Call for Microservices - <AUTHOR> https://semaphoreci.com/blog/2017/03/21/cracking-monolith-forces-that-call-for-microservices.html <comment><USER3> I find this article lacking, since it paints a too simplified brush over monoliths. Some missing points:

"Monolith", at least if you define it as a single process rather than a network of (micro)services, can still be modular in nature. Using a flexible core, you can build your application as a combination of modules, rather than as a single large codebase.

They also don't have to be a SPOF: in our architecture, we deploy monolith _s_ , one for each client (ie, company, not user), while keeping them isolated from each other. This allows us to scale pretty much indefinitely using a simple architecture. We don't have a huge sharded database, but small bundles of databases. We don't have datacenter-wide load balancers, rather we allocate clients to certain groups of nodes and use DNS to point them there.

This works because our clients don't really need to interact with each other, unlike say, social network users. Do yours? If not, why are you building a huge and complex mesh of services?

<comment><USER4> Isn't it hard to maintain all the servers? How do you upgrade your application or your database?

<comment><USER3> We automate it :) There's an "inventory" of the current instances, and then using configuration management (currently Ansible) we can deploy a new version (running migrations, starting new processes and stop old ones, etc) for all or any subset of our instances with a single command.

</comment></comment></comment><comment><USER5> Author without even knowing it described common microservice architecture problems that are faced in front-end. (Because in microservices front-end is consuming API and is usually a SPA)

\- The single point of fragility

Yeah, if you have an js error in your syntax the whole front-end application will not work.

\- Slow CI

Actually the front-end nowadays is the bottleneck of any CI if it is using React/Angular2 because of all the tree-shaking and optimizations. It can take a good 8 minutes to build, optimize, tree-shake, AOT etc. a modern SPA application.

\- Slow development cycles

This has nothing to do with monoliths whatsoever. If your codebase is crap it doesn't matter if it's microservices or monolith.

Anyway, I digress since this is a textbook Mary blog article.

<comment><USER6> \- Yeah, if you have an js error in your syntax the whole front-end application will not work.

How is this possible that you compiled js code with an error during packaging? Or you don't use packaging/analyzers tools?

<comment><USER7> If you reference a null object, an exception is thrown.

</comment></comment></comment><comment><USER8> I would like to argue that a microservice architecture is frequently a response to the scalability limits of traditional databases. Decomposing a monolith into multiple services (with each service interacting with only its own database) is essentially a form of vertical partitioning. It's a way to delay sharding.

Microservices are nice, but they seem like a heavyweight way to "force" module boundaries to exist. Potentially, if database technologies improve, there might not be a need to split up a monolith until much later on.

<comment><USER9> the danger in my view is that it is seen as a binary choice - which, if you go all in on microservices, just shifts from one problem to another - they need to be seen as just another tool for architecting and scaling

there is nothing wrong with building a monolith so long as you gave some thought to how it might get partitioned later

once you've built a few I think you start to see where those pressure points will be and microservices are a good pattern for scaling the functions that get all the traffic once it's working

I hear people talking about using only microservices to underpin a big app but I just can't imagine that is an efficient or sustainable approach for an app with any complexity if the core function spans across all those services - <USER2> the very least I can see macro changes becoming disproportionately more challenging and risky over time

<comment><USER10> > I hear people talking about using only microservices to underpin a big app > but I just can't imagine that is an efficient or sustainable approach for an > app with any complexity

Not having some coherent analytical approach probably isn't efficiently sustainable for complex systems, but if you have one, microservices for the whole system probably aren't a problem, since most system analysis approaches end up describing/modeling systems in a way that has a natural corresponds to a set of microservices wired together with a messaging bus.

</comment></comment></comment><comment><USER11> > early adopters have been tech behemoths such as Amazon

Not true. Amazon is heavily service-oriented, but quite wary of _micro_ services. You need the right size - microservices are often too slow and require a lot of work to debug.

<comment><USER12> The term micro was always left up to the implementer to define what exactly constitutes micro. There is no uniform standard, and no official definition of microservice, and indeed in my own short time dabbling in them, I have seen it vary from org to org.

The ultimate example I have seen, and used myself, is an AWS lambda function, but even then you talk to some "microservice experts" and they don't consider this to be the case.

<comment><USER13> hmmm i always thought there is clear definition. So microservice is :

A smaller problem domain. Built and deployed by itself, running in its own. Runs in its own process. Integrates via well-known interfaces. Owns its own data storage.

[https://youtu.be/wgdBVIX9ifA?t=13m10s](https://youtu.be/wgdBVIX9ifA?t=13m10s)

What is micro services [https://github.com/msjaiswal/book- notes/blob/master/Building...](https://github.com/msjaiswal/book- notes/blob/master/Building%20Microservices.markdown)

* copied from stack overflow

<comment><USER12> I have a copy of the book you linked in the book-notes! I am excited to start reading it. It's funny you bring up that book because I arrived at my conclusion that how small "micro" is in microservice is based on my previous viewings of talks and articles by Sam Newman and Fowler. I think a lot of microservices are is just applied distributed versions of Enterprise Integration.

</comment></comment></comment></comment><comment><USER14> > Emergency-driven context switching: we may have begun working on a new > feature, but an outage has just exposed a vulnerability in our system. So, > healing it becomes a top priority, and the team needs to react and switch to > solving that issue. By the time they return to the initial project, internal > or external circumstances can change and reduce its impact, perhaps even > make it obsolete. A badly designed distributed system can make this even > worse — hence one of the requirements for making one is having solid design > skills. However, if all code is part of a single runtime hitting one > database, our options for avoiding contention and downtime are very limited.

Flying Spaghetti Monster, this has been my life for the last three months. React, react, react. Spend two days working on new features, spend the next three on emergency bugfixes for old releases, rinse and repeat.

I'm so ready for a vacation.

</comment><comment><USER15> I'm not sure what we (bioxydyn) have done constitutes a microservice but we have split different parts of our business logic into separate executables that communicate using HTTP and a central data store. Our product is a data processing pipeline and we took this approach for several reasons which I may have missed in my skim read of the article. Firstly different parts of the pipeline have different resource requirements and would thus be hosted on different hardware configurations. Also parts of our pipeline lend themselves to different designs and languages (some Java, some C++) decisions which are also influenced by the availability of third-party libraries. Finally, by designing the overall system as a set of coordinated individual services we allow greater flexibility in our deployment model; allowing us to cope with some unknowns around scaling and regulations in different environments.

<comment><USER16> I'm no microservice expert but I'd guess the difference between your approach and microservices is that multiple instances of a microservice run concurrently, so they're inherently easier to scale?

</comment></comment><comment><USER17> A CI company that charges per box trying to persuade you to get more boxes.

<comment><AUTHOR> Consider a contrary argument. If every app in the universe was composed of microservices that do one thing and test out in 5 seconds, then there'd be no need for CI, only monitoring & continuous deployment.

<comment><USER18> Because everyone knows that the "ops" part of devops is the part that is enjoyable and scales well. /s

On a more serious note, if that is the goal why not just write a monolith in Erlang? You can hot-patch functions, scale on multiple machines, and don't need to use http as IPC.

</comment></comment></comment><comment><USER19> I wonder how much criticism and hatred this post would've received had it not used Rails as the example case. Monoliths exist in other stacks (obviously), but the Rails community always seem to take offense first. This is the first time I've seen such an opposition to micro services (maybe I'm not looking through forums hard enough).

<comment><USER20> > This is the first time I've seen such an opposition to micro services

Like anything, use the right tool for the job and weigh the trade offs

[https://martinfowler.com/bliki/MonolithFirst.html](https://martinfowler.com/bliki/MonolithFirst.html)

[https://www.martinfowler.com/microservices/#when](https://www.martinfowler.com/microservices/#when)

</comment></comment><comment><USER21> Everyone is hating on this post -- for good reason -- but keep in mind that this is an inbound marketing post for a CI company. It's in their best interest to have you split your app into many standalone pieces which will each require an individual testing setup.

<comment><AUTHOR> CI resource-wise, splitting things is actually more beneficial for customers than vendors. Gives more throughput.

</comment></comment><comment><USER22> Would a microservices architecture be feasible for a team of 3 developers?

It seems like only larger companies are adopting this architecture.

</comment><comment><USER23> Another aspect to consider is, time taken to run regression and automation tests on the Monolith, by both devs & QAs. This affects frequent release of software considerably l.

<comment><USER3> That's because you're testing the monolith end-to-end, but testing the microservices individually. None of this is inevitable: you should still test the microservice network as a whole, and you can definitively test the components of a monolith individually.

<comment><USER23> Agree that the functionality needs to be tested in-whole. But the delta in time is very large when the feature level tests have to be run on the monolith & they can be avoided when they are tested on the micro service.

<comment><USER24> But where does the difference come from?

A "well-designed monolith's" code architecture would be very similar to microservices - with separated modules, but in-process function calls instead of remote API calls.

If you do large-scale integration tests that cross module boundaries in the monolith, then you should also have the same tests of the full deployment with microservices. If you test each microservice independently, then you could also run tests for each module independently.

<comment><USER25> My experience (sample size of 1) is that long-lived monoliths tend not to evolve along "well-designed" lines, but rather along "what can I possibly do to get this to work in the time I have?" lines. Further, it's an impossible hurdle to schedule big dig to make substantial architectural improvements on a large monolith, so refactorings and improvements tend to be shallow and localized.

A decade later, and you have a lot of business logic in stored procedures in your database and now hear grumbling from coders who don't know or don't want to learn SQL. (And, to be fair, it does make it harder to scale the engineering team if everyone needs to be proficient at SQL.)

Neither availability nor technical scaling concerns were the reason we started to transition away from our monolith. We were regularly hitting 4 nines of availability (measured by "orders coming in") and had scaled to well over $1BB in revenue essentially on a single database for most of the site functionality. Above average engineers and ops, and way above average DBA team was key to making that happen.

</comment></comment></comment></comment></comment><comment><USER26> I'm working on a large system with is based on microservice architecture. We primarily use microservices to decompose the system into modules and enforce module boundaries. Things like scaling or performance is not so much of the problem, the monolyth would most probably work just as well.

Technically we write Spring Boot-based microservices which mainly exchange messages over RabbitMQ and in some rare cases call REST interfaces of each other.

Below a few problems I have with this architecture:

* Code duplication. For instance, we have to implement more-or-less the same DTO on both sending microservice as well as receiving microservice.

* Refactoring across microservices takes a lot of effort. In several cases we didn't cut in the right places and had to move functions across microservices. That was always quite difficult, and we also had to implement migration routinges (for databases as well as unprocessed messages which may be still in queues).

* Versioning and synchronization of messages. Our system receives events from the number of external data sources which trigger processing in the microservices and finally produce results. Since message exchange is asynchronous, older messages may overtake newer messages so we have to version them in order to not output obsolete results. Another problem is that messages travel different paths in the system, so it may happen that a microservice receives two messages which are based on partially obsolete data. Consider two sources A and B which produced events a0, a1, b0, b1. Later in the system a microservice receives two messages p and q based on p(a0, b1) and q(a1, b0) respectively. These messages are not compatible and cannot be processed together. But in order to detect this we have to track version of incoming events (a0, a1, b0, b1) all along the processing.

* A hell to debug. At the moment we have a network of around 40 microservices which process data from ca. 6 sources and feed 3-4 receiving systems. Microservices are quite complicated, the work with often incomplete or incorrect data, employ a lot of heuristics and make a number of assumption which are sometimes proven wrong. If any of the receiving systems report a problem we have pretty hard time identifying which of the few dozen microservices failed. Reasoning about asynchronous message processing is very difficult and approaches like remote debugging actually change the behaviour of the system.

* Tools. We employ maybe a dozen of different tools and custom scripts solely for the purpose of configuring, deploying and running our microservices. We'd most probably only needed a small part of them for a monolytic system.

From the other hand our system is a fourth attempt to solve a very difficult and important problem for our company, the problem which persisted for more than 30 years. And it is the first attempt which is so far successful.</comment>


Technical Debt Is Soul-Crushing - <AUTHOR> https://codeahoy.com/2020/01/25/technical-debt/ <comment><USER2> Indeed. The level of technical debt that exists in the product I current work on is beyond soul-crushing. It's making our product highly unreliable and buggy, makes it incredibly hard to track down and fix bugs, and the debt level increases noticeably with every feature we're required to add.

Upper management is fully aware of the issues. However, the immediate dev management doesn't think there's a serious problem and so there is no sign that any effort will be taken to begin to repay any of it.

The technical debt issue has directly led me to begin to seek work elsewhere.</comment>