Cooling a cup of coffee with help of a spoon - <AUTHOR> http://physics.stackexchange.com/questions/5265/cooling-a-cup-of-coffee-with-help-of-a-spoon <comment><USER2> The two cup trick is also used in Japan when making green tea, because the fragile tea leaves can be damaged if the water is too hot.

I once heard a tea master say that every time you pour the water from one cup to another, it cools down by 10 degrees (celsius). I'm not sure I fully believe him because pouring the water between cups 10 times didn't freeze the water. ;-)

<comment><USER3> It won't be a fixed "10 degrees". More like dt = (T_cup - T_room) x cooling factor.

I'll leave it as an exercise, as to what 10 pours will do, but it won't freeze the water; as I don't remember how to solve it and I don't have a piece of paper handy.

And that's not accounting for the specific heat in the state change.

<comment><USER4> Entropy is logarithmic with respect to degrees of freedom, and since degrees of freedom is (usually but not always) proportional to the energy of the system, the temperatures of the tea and of the room will approach each other faster when the difference between them is greater, but the heat exchange will slow down when the temperatures are similar.

EDIT I meant to say that entropy is _proportional_ to degrees of freedom, which is logarithmically related to heat energy (except in some weird cases). Anyway, the conclusion was right :-)

</comment></comment></comment><comment><USER5> <http://www.youtube.com/watch?v=-surEvJXj34>

<comment><USER6> This is the traditional way of serving coffee in south India: [http://farm4.static.flickr.com/3499/3281237995_091cdeac67.jp...](http://farm4.static.flickr.com/3499/3281237995_091cdeac67.jpg). Basically, you get a cup and a bowl to pour it back and forth with.

</comment></comment><comment><USER7> I also remember my grandfather using saucering to cool hot tea down, I finally have an explanation for why it works.

I wonder why the practice went out of fashion. Do paper doilies send a signal that the saucer is not to be used to hold liquids?

<comment><USER8> From reading the Laura Ingalls Wilder books, when I was a young'n, I remember that 'saucering' was considered rural, unrefined behavior. That kind of thing goes out quick; I bet none of the Silver Screen movie stars were seen saucering their tea.

</comment></comment><comment><USER9> I always stir my coffee in a random way so that you see turbulent movement in the cup as opposed to the whirlpool you get from moving the spoon in smooth circles.

My intuition tells me that this should give more efficient cooling. I basically have nothing to back this up. Thinking about it, it probably makes more sense for dissolving the sugar than cooling the coffee.

<comment><USER10> Your aim is to make sure that every bit of the coffee eventually makes it to the surface (so that the highest-energy molecules there can escape and cause cooling). If you stir regularly then (roughly) each bit of the coffee just moves in a circle, and parts that start out below the surface stay below the surface. If you stir it at random, then (this is probably a theorem, if you define "random" with a bit of care, and it probably doesn't require all that much randomness) any portion of the coffee ends up eventually at any given place.

So I think your intuition is doing pretty well.

<comment><USER11> Surely there are some regular motions which could be approximated using a spoon which would more efficiently move the hottest parts of a liquid to the surface than random turbulence? My intuition says sliding the spoon down the side of the mug, then turning the flat side upward and lifting it in the middle of the mug would be one such more efficient motion.

Does anybody have a supercomputing cluster we could use to run an optimizing search across a whole bunch of fluid flow simulations?

<comment><USER12> I got one, but unfortunately it's still working on the milk-or-tea-first conundrum.

<comment><USER9> _> milk-or-tea-first_

Ahhhhh, the one debate more divisive than emacs-or-vim.

</comment></comment></comment></comment></comment><comment><USER13> I think that the explanation is wrong (or at least it is a oversimplification.)

The main problem is that the explanation ignores completely the air. Static air is a good isolator, therefore much of the heat must be transported by thermal convection or forced convection (blowing). If the air doesn't move, it wouldn't be useful to make each part of the coffee visit the surface.

The second problem is that the it says that most of the heat is lost by evaporation of the water molecules (latent evaporation heat). I think that this is true when the temperature is over 195 F/90 C. But when the water is cooler I think that thermal conduction is more important, and it is not related to the "high-kinetic-energy outlier water molecules". And also some heat is lost by the floor and walls of the cup, but I think that most of the heat is lost by the surface. [More details in "experiment" bellow.]

The third problem is more an oversimplification. It is incorrect imagine that some of the molecules of the water are "high-kinetic-energy outlier". Let imagine that we mentally "paint" the fast molecules at initial time. Very soon these molecules will bounce with other molecules and change their velocity, so a few instants later the fast molecules will be other molecules. To estimate the time that we have to wait until the fast molecules bounce we can use the "mean free time". This time is useful in a gas where the molecules are far apart, and for air in usual conditions it is ~5E-10seg. Obviously water is not a gas, but the molecules are more close together, so this the time we should wait is much smaller. But the time that a drop of water needs to go from the bottom to the top of the cup is ~.1 seg (rough estimation). So the molecules have time to bounce and bounce. Moreover, while the drop is traveling though the surface the molecules have time to bounce and reach thermal equilibrium after some of then evaporate. So I think that a macroscopic model that only consider the temperature should work.

[experiment]

A few yeas ago, I worked at a school and we need an experiment for a physic olympiad. We measure the cooling of a plastic cup of water in different conditions. The idea was that the temperature follow a law like:

      Temp = Constant * exp(-time/tau) + Temp_external

Taking logarithms

      log(Temp-Temp_external) = - time/tau + Konstant

So it is possible to make a graphic of the log(Temp-Temp_external) and from the slope get the value of tau. In an ideal case, tau is a constant (or almost constant) that depends on the materials and the sizes of the experiment.

Really tau is not constant. When the temperature if below 195 F/90 C the value of tau is almost constant and the graphic of the log is a nice line.

But when the water is hotter tau is not constant, the bigger the temperature, the bigger is tau (IIRC perhaps like twice the cold value). So the graphic of the log is curved and the water cooled faster than expected.

When the temperature if above 195 F/90 C something strange was happening. Looking at the cups we see that above that temperature there was a lot of steam over the cups and bellow that temperature the seam almost disappear. Looking at the graphics of the vapor pressure of water we saw that above 195 F/90 C the vapor pressure is bigger than the value bellow 195 F/90 C. So we expect to have a lot of evaporation when the water is hot and few evaporation when it is cold.

So the conclusion was that when the water is cold most of the heat is exchanged by conduction and convection, but when the water is hotter the evaporation is and additional important part of the cooling effects.

Note 1: We did some additional experiments that are consistent with this explanation, but perhaps there is something we forgot to check.

Note 2: The change between the "hot" and "cold" water above and bellow 195 F/90 C was not sharp. While the water was cooling the steam get thiner softly, tau get lower softly and the vapor pressure gets null softly. So the number 195 F/90 C is only an approximation. (And it was a few years ago.)

Note 3: Heat flow is difficult to modelate in paper, so better measure it experimentally. "In theory, practice is the same as theory. In practice, it differs."

</comment><comment><USER14> Reminds me of a correction I sent to The Straight Dope many years ago: [http://www.straightdope.com/columns/read/851/why-do-you- blow...](http://www.straightdope.com/columns/read/851/why-do-you-blow-on- coffee-to-cool-it-but-on-your-hands-to-warm-them)

</comment><comment><USER15> The indian drink stall sellers in Malaysia and Singapore have a good way to cool it down. It is called Teh Tarik

Picture here [http://3.bp.blogspot.com/_0o2-S1p2MUo/Sm- YjNyRfpI/AAAAAAAAAd...](http://3.bp.blogspot.com/_0o2-S1p2MUo/Sm- YjNyRfpI/AAAAAAAAAd4/Xo3Ga1M7J3s/s1600/TEH+TARIK.jpg)

Description of what it is here <http://en.wikipedia.org/wiki/Teh_tarik>

Edit : Found a video of it here <http://www.youtube.com/watch?v=WPuIybnQemc>

</comment><comment><USER16> Similarly I've often wondered if it results in hotter coffee to mix your milk with the coffee when it goes into the thermos, rather than when it comes out. I'm pretty sure it is better to do it this way - my reasoning is that the hotter black coffee, because of a greater temperature difference with the surroundings, loses heat more rapidly through the thermos walls than the milk + coffee mixture. But I'm unsure how significant the effect is. Perhaps I'll measure it some time.

<comment><USER17> Yeah, that's interesting. I always do it the same way as you, but I decided to do a quick analytical calculation. I wrote it up here:

[http://maxbrunsfeld.wordpress.com/2011/02/17/on-the- mixing-o...](http://maxbrunsfeld.wordpress.com/2011/02/17/on-the-mixing-of- milk-and-hot-coffee/)

my result agrees with your intuition.

</comment></comment><comment><USER18> This is related to the phenomena that tea leaves tend to group in center of cup when you stir it with spoon.

Due to centrifugal forces the level of water near the border is higher that at the center so the water start to flow from borders to center at the bottom of the cup.

This speed up heat exchange as the water gets constantly mixed in addition of usual thermal exchange flow.

</comment><comment><USER19> Assume a spherical spoon...

<comment><USER17> in an infinite region of coffee...

</comment></comment><comment><USER20> I remember similar physics puzzle from high school days. Given a cup of hot tea and few spoons of sugar how does one go about sweetening the tea so that it would cool off the most in the process.

<comment><USER21> First, remove your sugar crystals from the thermos of liquid nitrogen...

<comment><USER22> Should you crush the sugar crystals (to promote rapid cooling) or should you use the largest possible crystals so there are more bonds to be broken?

I'm going to guess that there's a sweet spot in there somewhere; _a priori_ it seems you want the maximum size that will dissolve completely.

<comment><USER20> If I remember the answer correctly, it went something like this. Dump all sugar into the tea at once and wait for the temperature to settle. Now split sugar in two halves, dissolve first half, wait for the temperature to stabilize, dissolve second half. Through math it worked out that the second method cooled the tea more. So the answer was to go with the infinitely small pieces of sugar :)

</comment></comment></comment></comment><comment><USER23> > This is why physicists need to talk to chemists once in a while.

Reminded-me of this xkcd strip: <http://xkcd.com/435/>

<comment><USER24> I didn't understand that comment... was he insinuating physicists don't know thermodynamics? The original question is pretty basic.

<comment><USER17> I think he was saying that although physicists generally understand the principles involved, a chemist might have a better sense of the relative magnitudes of the different effects that come into play in cooling a solution, since chemists have to perform this task routinely.

<comment><USER24> I suppose, but any physicist worth anything should be able to remember enough high school chemistry to deduce the answer.

<comment><USER25> Fluid dynamics aren't exactly high school chemistry...

</comment></comment></comment></comment></comment><comment><USER26> Feynman would get a cup of coffee, a spoon and a thermometer.

<comment><USER13> Why the downvotes? I usually don't like oneliners and reference to Feynman/Einstein, but I think that this comment has an important point. I will try to expand it.

Some topics in physics are easy to model and get a closed formula but some are not. In particular, fluids flow and heat flow are very difficult (if the system is not very symmetric).

To make an industrial heat exchanger, the chemical engineers use "books" that have a lot of examples for different chemical products and different geometrical configurations and try to find the more similar to get some experimental constants. These constant can be placed in formulas to get the required size of the new heat exchanger, but are only reliable if the new one is similar to the original example.

A few yeas ago, I worked at a school and we need an experiment for a physic olympiad. We measure the cooling of a plastic cup of water in different conditions. One of the ideas was to measure the effect of a metal spoon, but in the pretesting we found out that the effect is negligible. We got the bigger difference using a thin plastic lid, the cooling time was much longer.

So, to find out the best method to cool a cup of coffee you can't use a pencil and a peace of paper. You should measure it experimentally wit a thermometer. (Perhaps a computer model simulator might work.)

And in one of the Feynman books, he was trying to see if jelly gets hard if you stir it while cooling. He waited for a freezing day, got a pan with hot jelly, something to stir and a jacket. In another book someone told him that a piece of rubber from the Challenger shuttle would become hard when cold. He got some water, ice cubes and somthing to hold the rubber to test it. So probably Feynman Feynman would get a cup of coffee, a spoon and a thermometer.

</comment></comment><comment><USER27> on a completely different note, I like my coffee hot :)

<comment><USER28> Hahaha yes, while I liked the thought exercise I kept thinking: "Why would I want to cool it?" In fact, I often pre-heat my cup with hot water before I put coffee in it, so it doesn't cool down as fast.

</comment></comment><comment><USER29> That`s why I love plastic ice cubes. Keep in the freezer for some time so the water inside will freeze and enjoy your non-watered down drinks!

</comment><comment><USER30> I smell an episode of Mythbusters coming on.

</comment><comment><USER31> try putting cooling heat-pipe into your hot cup of coffee - your fingers will burn instantly.

</comment><comment><USER32> 1) Find person nearby with a drink that has ice in it

2) Use spoon to extract the ice from their glass

3) Put ice in coffee

Also, you may need to threaten the person with the spoon to get the ice.

<comment><USER33> But now you've added a non negligible amount of water to your coffee. Nothing worse in the morning than watered down coffee.

</comment></comment><comment><USER34> bend spoon into a u-shape and stick the other end in a cup of liquid nitrogen</comment>


Arm Macs won't support (real) Target Disk Mode - <AUTHOR> https://appleinsider.com/articles/20/06/24/apple-silicon-macs-ditch-startup-key-combos-alter-target-disk-mode <comment><AUTHOR> TDM was always my favorite feature of post Classic Macs. When Apple started abusing the Mac line (eg: ports, extra cables, magsafe, the ability to buy an external display) I joked that one day they'd remove TDM. And seven years later, it's actually happening. Using SMB to deal with a corrupt drive sounds like a massive pain.

If I ever buy another Mac, I'll be booting off an external drive (though it's a matter of time till Apple walls _that_ ability off, just wait!). The internal soldered, encrypted, TDM-via-SMB ssd doesn't sound like a place I want to store my work. Looks like I'll just be using it as a big cache folder.

This stinks.

<comment><USER2> > the ability to buy an external display

As in an OEM one? They do pseudo-OEM ones (the LG Ultrasparc ones), but yeah, no Apple-branded one except the XDR.</comment></comment>


Cheapest MBA Program for CS Students Costs $99: It's Called the App Store - <AUTHOR> http://blog.fairsoftware.net/2009/08/12/the-cheapest-mba-program-for-cs-students-costs-99-and-its-called-the-app-store/

<comment><USER2> I came ready to hate, but it's actually a good idea presented well and simply in the blog post. The one statement I (slightly) disagree with:

"Strike that. You will know that you passed the class when you recoup that investment tenfold. How many other classes you took offer such direct, undisputable grades?"

I doubt you'll make $1k, or even $100, but even if you don't you'll still learn a hell of a lot, so just by doing it you pass the class.

<comment><AUTHOR> _I doubt you'll make $1k, or even $100_

How do you know if you haven't tried? What does it take to make it to $100?

The App Store solves a very nice problem for learning sales: every product is put on an equal footing on the App Store, unlike the wild, wild Internet.

<comment><USER3> > every product is put on an equal footing on the App Store

This is not completely true since what Apple decides to promote in the "what's new", "what's hot", "staff favorites" etc spots makes a huge huge difference.

<comment><USER4> Out of curiosity, how would one go about bringing their app to Apple's attention to be potentially listed there? Or is that process, as well, completely opaque?

<comment><USER3> It isn't possible as far as I know. And it wouldn't make much sense since everybody would like to be featured.

</comment></comment></comment></comment></comment><comment><USER5> As a person who is entering a top ranked MBA program in about 3 weeks, I think any MBA would agree that doing something like this is a good idea for the learning. At very worst, you will learn what doesnt work.

<comment><USER6> As someone who did the MBA, I think it's an incredibly valuable asset but one that is mispriced and too long in duration. I've gotten more experience building apps on elance and trying to build business cases. The valuable insights can be gained from the books of the best lecturers (in my case Bruce Greenwald <http://bit.ly/Vz5SL>) and direct correspondence.

I think the MBA should be 3-6 months long and priced accordingly. And have a larger entrepreneurship component for those that are so inclined.

</comment></comment><comment><USER7> Well for people who do not own a Mac, make that $1100 :( If only Apple made an SDK for Windows ., _sigh_.

<comment><USER8> Actually, you can put together a much cheaper system. I put together one for about $400:

      * Dell Mini 9 on sale (~$200)
      * Memory and SSD upgrade (~$100)
      * Retail Mac OS X (~$100)

[http://gizmodo.com/5156903/how-to-hackintosh-a-dell- mini-9-i...](http://gizmodo.com/5156903/how-to-hackintosh-a-dell-mini-9-into- the-ultimate-os-x-netbook)

<comment><USER3> The Dell Mini 9 (which is Atom based) wouldn't be fast enough for the iPhone emulator (which you would use most of the time even if you own an iPhone). Moreover, Xcode on OSX86 kernels is unstable and buggy (first hand experience).

<comment><USER9> Afaik the iPhone is simulated not emulated, the binary is built for x86. So I doubt it would be too slow -- certainly not slower than the device itself.

<comment><USER3> Now that I think of it, I've tried it on a machine with an AMD processor which was 2Ghz (don't remember the exact model) but it hadn't SSE3 support. SSE3 instructions are emulated on OSX86 which makes it inherently slower. And on my 2Ghz machine with 2Gb of ram the emulator was in fact slower than the device itself.

The Intel Atom has support for SSE3 instructions so it should work better but I believe the stability problems are still there.

<comment><USER9> Intriguing you would find it slower, I guess it is possible that the binaries are built to the baseline Mac architecture requiring some instructions to be emulated via invalid instruction exception on lower instr sets, which may also explain some of your other stability issues.

But looking at your other comments I'm surmising your main contention is that one might just as well get a real Mac (eg Mini). I agree fully with this, imho the price difference is hardly worth the time to deal with all the various issues around install, upgrading etc.

I've also found the Mac mini to be completely adequate; and it still seems to me that even buying an iMac at $1k+ is still a pittance for a toolchain for this type of platform, considering one also gets a general-purpose computer to boot.

</comment></comment></comment></comment></comment></comment><comment><USER10> Unfortunately, I think an apps popularity isn't based off of the things mentioned in this article. Apps like "Pull my finger" and "Mafia Wars" are not popular cause the creator priced them correctly or they were marketed well.

<comment><USER11> Knowing a market is pretty intrinsic to marketing. It seems obvious now but iFart was genius in that lots of people found the concept funny enough to pay a dollar for. I know plenty of people who have bought it on a whim at parties.

</comment></comment><comment><USER12> I think there have been similar opportunities at most times? There are always ways to try to make money off small applications.

Also, entering the app store costs more: you also need a Mac and at least an iPod.

<comment><USER13> _Also, entering the app store costs more: you also need a Mac and at least an iPod._

You can also just dual boot/virtualize OSx86 on a non-Apple PC.

<comment><USER12> "just" might be an overstatement: I wouldn't know how to go about it, and I would feel uneasy about using a hack for professional development.

</comment></comment></comment><comment><USER14> The article neglects the networking aspects of getting an MBA. The connections you develop while getting an MBA is often described as the most valuable element. Paying a large sums is what is both right and wrong about an MBA. Networking is important, I am just not sure if it is worth a 200k tuition.

Maybe if you are also expanding your network while building your iPhone application to investors and fellow hackers, you might be indeed getting most of an MBA for $99.

<comment><AUTHOR> You are raising an important point. Let's say half of the value of an MBA is in the teaching of business, which the article covers. The other half is in getting the diploma, the network and the brand recognition.

I guess my view is that for the average MBA person, whose goal is to get a high-paying job in a mid-size to Fortune 500 company, the piece of paper and the network are very important - go get the formal MBA.

For the 1% of hackers who like to get ahead of everyone else and take the fast lane to life, the App Store is an intriguing approach. More efficient.

</comment></comment><comment><USER15> I just finished my MBA, and decided to start a company out of business school. I can honestly say that I've learned more about starting a company in the past 3 months than I did in the two years before that. The only way to learn entrepreneurship is by doing it.

</comment><comment><USER16> Well, you can do the same thing for lot less by developing a facebook/opensocial application.</comment>


YANFF – Yet Another Network Function Framework - <AUTHOR> https://github.com/intel-go/yanff <comment><USER2> Hi there,

Is there a list of implemented functions? I saw examples for a firewall and static routing.

<comment><USER3> There is also an IPSec example in the tests, that we should move to the examples, and vNAT implemented. More is coming. If you are interested in a particular one, please write, maybe we already have done it.</comment></comment>


Attachinary - a modern attachments solution for Ruby on Rails - <AUTHOR> http://cloudinary.com/blog/attachinary_a_modern_attachments_solution_for_ruby_on_rails

<comment><AUTHOR> This blog post describes Attachinary, a great new attachment management library for Ruby on Rails by Milovan Zogovic.

Non-intrusive integration with your model, minimal code changes. Uses Cloudinary for uploading files to the cloud, transforming images and delivering files through a fast CDN. No need to install any image manipulation software. Built-in integration with jQuery-based direct uploading from the browser.</comment>


Ask HN:  Best Fitness Training Tech - <AUTHOR>

Which fitness products (Fitness Watch / Heart Rate / Foot Pod etc) have you used that you would recommend?  I am interested in being a bit more systematic about working out and tracking the effect of exercise on health over time.   Ideally, the solution would be rugged, able to store/transfer data to a PC for analysis and be reasonably priced - but am willing to hear about compromises in various areas. <comment><AUTHOR> To give some idea of what is in mind - I was looking at this: <http://www.heartratemonitorsusa.com/garmin-fr60bundle.html>

but knowledge is limited to online searches.</comment>


Securing ZeroMQ: CurveZMQ protocol and implementation - <AUTHOR> http://hintjens.com/blog:36

<comment> w-ll Yes, I'm pretty excited about this. I've been using ZMQ for a hot minute, and right now its just security via obscurity. I could crack my own apps. I've been meaning to openssl tunnel the traffic..... _shrug_ never got around to it.

</comment><comment><USER2> I believe the Salt Stack guys have already got a crypto implementation on top of ZMQ that has been pretty thoroughly vetted. Might be worth checking it out and collaborating with them.

<comment><USER3> I'm not sure where I'd place my trust. The CurveZMQ is based on CurveCP, which was designed by CJ Bernstein. CJB is a well known and generally well-regarded cypto expert, so that gives him substantial points.

However, CurveZMQ drops a number of CurveCP features that are deemed unimportant in the context of the ZMQ environment (to do with session handling in UDP). Maybe that's fine ... maybe it's not. Software in general has the annoying characteristic of spooky second-order effects appearing from "totally unrelated" local changes; in security those second-order effects are quickly found and exploited.

Meanwhile the Salt Stack guys seem to have stitched together some common crypto primitives into something workable, but ... again, I'm unclear about that. There are _so_ many ways to fuck up a crypto protocol -- I recently spent three months iterating one and the final design was as far from the original as oranges from unicorns.

One of the beauties of sticking with TLS, for all its inconvenience at times, it that is under constant scrutiny.

Security is one area where Linus's Law really does seem to apply.

<comment><USER4> The Salt security layer is great, and I've worked with Thomas Hatch on abstracting it for wider use. We wrote this <http://www.zeromq.org/topics:pubsub-security> some time ago.

While it's good, it has a number of weaknesses that CurveCP addresses, and which CurveZMQ includes. The parts of CurveCP that we don't implement are quite specifically to do with traffic control over UDP, name resolution, etc. and not security.

The second problem with Salt's security is that it's not inside 0MQ but layered on top. This has a number of consequences such as interoperability and reusability.

Our goal with CurveZMQ is to put this into the 0MQ kernel so it's available across all socket types. It will work over PUB-SUB as well as ROUTER-DEALER or PUSH-PULL. It will work over any intermediaries and since it's basically CurveCP, it will let you do things like migrate your clients (changing IP address) without re-establishing the secure session.

CurveCP is really awesome and worth learning. It is really the security model we've been looking for for years, for ZeroMQ.

The big difference between CurveZMQ and TLS is this: using TLS is complex.

One of the visions of NaCl and thus CurveCP and CurveZMQ in turn is that simple is more secure than complex. Users can't make as many mistakes.

CurveCP and CurveZMQ are simple. The current code for CurveZMQ is under 700 lines of C (assuming you have libsodium) and I didn't try to abstract any of the encryption calls; it's a flat implementation of the CurveCP handshake.

<comment><USER3> OK, TLS is complex. But a lot of that is due to its configurability.

How would you have fared if you'd picked a simpler TLS library (PolarSSL, for example, is meant to be embedded) and then simply defined a single ZeroMQ configuration profile and said "that's it, that's all we're going to support"?

<comment><USER2> > OK, TLS is complex. But a lot of that is due to its configurability.

...and as many have noted, that configurability is the root of a lot of security problems.

The pick one approach and say, "that's all we're going to do" might be one way to solve the problem. I'm not sure it'd be any better.</comment></comment></comment></comment></comment>


Scheme Bricks - <AUTHOR> http://www.pawfal.org/dave/index.cgi?Projects/Scheme%20Bricks <comment><USER2> This looks like a potential solution to YC's handheld development RFS.

You can get a lot done in scheme by defining some continuations and passing control around between them. The leaf-logic is small(er) compared to making decisions about who gets control next. Most of what you wind up typing is parens (which this approach mitagates) and function-name labels (which a pointing interface would obviate).

You'd do large-scale navigation with adaptive zoom (similar to the "shape" feature PLT already implements), and maybe add a heuristic search...

<comment><USER3> I've been playing with an S-expression editor using the iPhone's table view controls. It works pretty well, but it doesn't have zooming to navigate, just hierarchical navigation... but the higher levels give a summary of each child expression.

</comment></comment><comment><USER3> This is a lot like a logic editor I once built for a web app. It was definitely Lisp-inspired (although the back-end was Lua), and thanks to jQuery I had it working pretty quickly with drag-and-drop and everything. It was color-coded and everything.</comment>


Tracer: A Newsletter Focussed on the Development of DEEPFAKES - <AUTHOR> https://www.deeptracelabs.com/newsletter <comment><AUTHOR> Also featured by the Exponential View:

[https://exponentialview.substack.com/p/-cyborg-sex- micromobi...](https://exponentialview.substack.com/p/-cyborg-sex- micromobility- matters?token=eyJ1c2VyX2lkIjoxMjU1MTc2LCJwb3N0X2lkIjoyOTcwMiwiaWF0IjoxNTQ5MTc1NTUyLCJpc3MiOiJwdWItMjI1MiIsInN1YiI6InBvc3QtcmVhY3Rpb24ifQ.TulRI2wnJ1S2cAi4b9OMtXY6Wu06lbdLvwvtYjZSgig)

</comment><comment> Time-Grinder Interesting topic to base a newsletter on- but do you think deepfakes are going to keep evolving? Having seen deep portraits a while back I struggle to see how they could get much better.</comment>


Ask HN: Server-side web apps – is the database still a bottleneck? - vanilla-almond I've read many times in comments here on Hacker News that the speed of your database or disk access is the biggest bottleneck for your server-side web app. Therefore, the speed of your server-side programming language is not important (or less important).<p>Does this still hold true? Given that SSDs are now commonly used by many hosting providers - is database/disk access still a bottleneck for server-side web apps? <comment><USER2> In short, yes.

The database is the bottleneck because it's much harder to scale than applications.

The path of evolution in the industry:

1\. Stateful application - usually only 1 server, not distributed at all. It's very hard to scale.

2\. An obvious solution is to make application stateless and having a centralized state. Then the application is very easy to scale and operate. And databases slowly became the bottleneck because there are much more applications than databases.

3\. Then not so obvious solution is to split your problem domain into solution contexts, where every context become an application and each application have a database to talk to. So the databases are still not really distributed but it's sort of distributed by your sub-domain of business. (I think it's the industry mainstream or becoming mainstream now)

4\. Then the non-obvious solution is to have truly distributed states split across your application. Basically, the goal is you can distribute any object across a whole lot cluster, in a more or less transparency way which lets you treat the cluster as a whole without concern about individual machines. (There are some cutting edge stuff yet to become mainstream, like Orleans / Lasp-lang or just cluster/shared actor like Akka, or just distributed Erlang, etc)

It's an interesting example that short-term solution is in a totally different direction from the powerful solution. To address this in short-term is to extract and centralize the state, while to address this in the long-term is to truly distribute the state.

<comment><USER3> I want to quibble with you on one thing—the database is often easy to scale, by three orders of magnitude, by configuring it correctly, and then moving it onto dedicated hardware.

<comment><USER4> Similarly, _very_ few applications need more performance than you can get by scaling vertically and having a hot spare replica database.

Although a distributed data store on a few cheaper VPSes/nodes is probably less expensive.

</comment></comment></comment><comment><USER5> For simple "web apps", typically its a poor understanding of SQL that is the bottle neck. Since most web frameworks include an ORM, many developers don't even know much SQL any more and treat the database as a simple 'object' that you can call methods on and iterate through. Case in point: you're building a dash board for a web based store to show details about the 5 most recent orders. But each order references 5 other items (as a simple example). And each item references an SKU# that can come from 5 manufacturers.

So an optimized query set from an ORM will end up querying the DB like this: First it selects the 5 rows from the order table, but since you left out any join clauses, it then runs 5 more selects on each of the rows returned from the order table to pull the related rows from the items table. So we are now up to 6 queries.

But each row of the item table references 5 manufacturers (again, as a simple schema example). So each of the 'item' 'objects' (5 per order) has to then make a query to fetch the sku manufacturer. So that is 25 more select statement queries on top of the original 6. So using the ORM properly and building out the right join clauses, you would have made 1 query. Instead you made 31. Now lets say that DB is not on the same machine, but a different machine on the network. Throw in 2ms - 10ms latency per query and now you are looking at 62 - 310ms of latency to fetch your data. And that is just for 5 'rows' of data. Do the math for a more realistic dataset, 500-1000 rows or so. Now you're looking at minutes of latency for your data to come from the DB.

The worse case I've seen recently was this exact case. To generate an inventory page to show an html table with about 300 rows, the DB was being queried over 300,000 times with a page load of about 7 minutes (and getting longer everyday). I added the proper join clauses to the ORM and one query was issued which would return the result set in about 700ms which put the page load time to about 1 second. A 1 second page load imo is still not very good. But it seemed to impress everyone that with 1 hour of work, a page load went from from 7 minutes to 1 second....

For what ever reason, most people don't understand this anymore. Instead of learning SQL, the line of thought is to upgrade the machine, move to a 'no- sql' DB, introduce some caching layer, and many number of other ideas. But "lets make sure we are querying the DB instead of iterating through it" is never discussed.

<comment><USER4> If only more people used simple object structures to data mapping. Working on an overly normalized database, with in-database logging on all access via stored procedures for all access, and hitting bottlenecks on a few dozen users.

A "well structured" database can lead to performance issues. Every join and sub-query has a cost and they add up.

The funny thing is that on this project, I largely stepped back from anything to do with the Database because the target was only around 100 users or so on a deployment that could largely be dealt with by faster hardware. Now, stuck trying to scale to more users than that and stuck with layers of procedures/functions that don't perform well at all. I wanted a few loosely coupled tables with some destructured (json) data in them. Wouldn't be having half the issues today.

Also, not a fan of ORMs... it's usually easier to do simpler mapping directly or a simpler data mapper that isn't a more typical full on ORM.

<comment><USER6> Granted you can get a performance boost from denormalizing, and even maintain integrity, I still find the denormalization I want today won't be the denormalization I want tomorrow.

Moving from denormalization to denormalization can be hard, and you end up with a sui generis application, versus a normalized database where so much has been written about how to deal with problems up to a reasonably large scale, although the document store style does seem to be reasonably popular so maybe I'm missing something.

<comment><USER4> Depending on what I've needed in the past, I've simply duplicated all data from the RDBMS into denormalized structures for ElasticSearch or MongoDB. It's worked _incredibly_ well for scenarios that are mostly-read where normalized queries are very expensive.

</comment></comment></comment></comment><comment><USER7> The reason the database is the bottleneck is that in traditional architectures everything can be duplicated and run in parallel except writing to the database which has to be done serially one write at a time. How fast you can write (and commit to "permanent" storage like disc and SSD) is constrained by hardware.

There are ways to alleviate this issue but they have different trade offs. One of the most used pattern is "eventual consistency".

You might want to read about the CAP theorem if you have not heard about it: [https://en.wikipedia.org/wiki/CAP_theorem](https://en.wikipedia.org/wiki/CAP_theorem)

<comment><USER8> I've fixed a lot of performance problems over my career.

This is not true, and not what we talk about when we say it's almost always the db.

The usual cause of database problems is a single big query that is causing a slow page, or a lot of medium size queries inside a poorly written loop. Whether it be bad joins, missing indexes, select statements in the select statements, operations in select statements that force the db to run the query line by line instead of as a set (the technical term suddenly escapes me), it's the queries that almost always cause db slowdowns.

It rarely has anything to do with writes, and then in my experience usually had to do with escalating locks, and I haven't seen that problem in ages as hardwares got faster.

<comment><USER7> > This is not true, and not what we talk about when we say it's almost always > the db.

It depends who's talking and what they are talking about.

If we're talking about fixing slow website, then sure, bad big ugly queries are one dominant issue, but not the only one. If we're talking about architecture of a greenfield project, then balancing between concurrent writes and consistency is going to be your ultimate problem, everything else can be "duplicated" (read-duplicated DB servers, caching strategies, multiple apps server, etc...).

<comment><USER7> Replying to mattmanser in the sibling comment since I cannot replying to it directly:

It comes in faster than you think. One of the company I work for was a small company, at the time I think we were 4 or 5 including the 2 founders, they sell some specific information as a service through APIs. They charge per call, so you have to update the customer funds in their account on each API call. Yes, people can want and make lots of APIs call very fast, and in a business which charges per API call, this is a good thing, but you have to find strategies and make business decisions on how to handle accepting and replying to new API calls while maintaining their account balance.

<comment><USER8> I find it hard to believe this actually caused a DB problem, updating an int column on an indexed table should have taken nanoseconds. Far faster than any HTTP calls should have been happening. Sounds like something was very wrong. Someone fucked up with the network causing some severe DB latency or they'd written some really shitty code.

Even if it did, as the other comment says, you could easily work round it. If that was the behaviour there was no good reason to have it utterly perfect.

<comment><USER9> Depends if autocommit is enabled. If it is (and on many DBs it's the default) then you're telling the DB that by the time the increment completes, it should be written to durable storage. That's a minimum of one seek, which on a hard disk is about 4ms, which = max 250 TPS. On a SSD you might get 0.1ms seek times = 10k TPS.

It's possible to kill your performance very quickly with databases if you request features that you don't actually need.

</comment></comment></comment></comment></comment></comment><comment><USER10> Based on my experience, it's the most typically seen bottleneck. But bottlenecks change over time. You notice slowness somewhere in a website action and you dig into it. Sometimes, it's a new database table that isn't optimized with correct indexing. Sometimes, you end up doing an n^2 or n^3 operation on the backend (sometimes it's on the frontend). Sometimes, you're data is growing at a speed that your single monolith database isn't cutting it and you need to shard or consider a different type of storage.

Bottlenecks change all the time. You fix one, and now suddenly, the bottleneck lies somewhere else. There's almost always a bottleneck somewhere. A database bottleneck is relatively common, though.

From my experience, the bottleneck is mostly at some type of Big-O relevant scale in the code or database that using java vs ruby vs python doesn't make a huge difference.

However, if you're in a situation where speed is absolutely crucial - <AUTHOR> high frequency trading (where milliseconds mean millions of dollars) - well, that opens a completely different can of worms.

<comment><USER11> Just think about the architecture of NYSE. They are supporting billions of trades per day from so many decades.

<comment><USER12> And there's Kdb+ [https://en.wikipedia.org/wiki/Kdb%2B](https://en.wikipedia.org/wiki/Kdb%2B)

</comment></comment></comment><comment><USER13> It is probably one of the more common together with loading too much JavaScript and image content.

However even with that said a modern SQL database can handle A LOT of traffic and I've had discussions about internal CRUD applications with a couple of thousand users at most where people say we must use a document database because relational databases does not scale. Insane.

Of course people can use document databases and similar where it fits but you get a lot of nice things with a traditional rdmbs that you might miss later.

<comment><USER14> I haven't had a discussion about performance in years, weirdly enough, but people did default to the scalable solutions - even before knowing whether they needed it. Think new applications built using microservices. They also spent nearly two years before releasing something with a fraction of the features of the system it was supposed to replace.

If someone mentions a need for a technology choice based on performance, they had better come up with real numbers. Until they do, clarity, correctness and consistency should be the primary metrics. Don't solve a performance problem before you have the luxury of having a performance problem.

<comment><USER15> Premature scaling is akin to premature optimization.

On one of my recent projects, the highest use data was stored in DynamoDB. The entire dataset could trivially fit in RAM. So much wasted effort.

The org also over used Spark, event streams, and elasticsearch.

One could argue (rationalize) that using DynamoDB, for instance, for the small stuff builds team competency applicable to the big stuff. Or that using one set of tools reduces dependencies. I'd have to see some case studies. Because from where I was sitting, 90% of our maintenance costs were from mitigating bad sacred cow design decisions.

I've worked on similar metastatic tech debt based on NoSQL. Much as I love Redis, it's not a duck (fly, swim, walk).

<comment><USER13> I can understand the competency stuff. I was really blown away with React when that arrived and used it early, probably too early. React itself has been remarkably stable and consistent but everything around was chaotic for a couple of years. Anyway, we went all in in the department and builds all our front ends with React. I would argue it is a great fit for around half our applications as they are more complex but the rest could easily have been built with very little javascript enhancement. However now people can move between projects more easily and building something with React when you are comfortable with it and has a nice base is not slower than something else.

So I understand that people want to try new things but damn I wonder if I sounded the same when I wanted to start using React.

\- "We can just use couchdb because then we won't have any problems with scale and we will never have to have any downtime because schema updates".

....yeah but that comes at a cost. You need to handle those schema updates in code. You need to handle those conflicts that arise from eventual consistency in code.

Anyway, I like the idea where you have a limited innovation budget where you can go for a new type of db but then you select other technologies that you are comfortable with and are true and tested. Not "Yeah, we will build this in a completely new way and we have no experience with docker, kubernetes, nodejs, document databases, vue.js, Elastic stack, prometheus or kibana" but this modern way of building things means everything will go much faster. Sometimes you have to go that route but the learning time can be pretty rough.

</comment></comment></comment></comment><comment><USER16> That largely depends on the usage patterns of the app in question.

Write operations can be particularly expensive, read operations much less so, especially with application-level caching. Even as for write operations or notoriously expensive read operations such as full table scans modern RDBMS are optimised to a degree that for most applications database performance shouldn't be an issue.

While traditional hard drives competed with the network for the title of "system component with the lowest bandwidth" (see [http://www.cs.cornell.edu/projects/ladis2009/talks/dean- keyn...](http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote- ladis2009.pdf)) accessing data on an SSD is way faster than accessing a resource via network.

So, today the technical bottleneck (as in "component with the lowest bandwidth") in a typical web app system architecture is the network.

</comment><comment><USER17> I've spent my career answering this question at myriad companies. In a few cases, the database was actually a bottleneck. In the vast majority of cases, the database was just being used very poorly and was no longer a bottleneck once used correctly. The exceptions to this usually involve exotic data models, which isn't most web apps.

Of the few cases where the database was the bottleneck in practice, I cannot think of a single cases where it should have been the bottleneck in theory. The limitations were always a property of the specific database implementation being used, not intrinsic to databases as a class of software. For example, most open source databases have notoriously poor storage throughput as a product of their architecture; faster storage definitely helps but it often solves a problem that may not exist in other database implementations. In these cases the problem is an architectural mismatch.

Sometimes architectural mismatch is an engineering problem. A handful of workloads and data models are currently only possible with custom database engines e.g. high-throughput mixed workloads or data models that require continuous load shifting. As a practical matter, the exotic cases that require a custom database engine are also the cases where no company should try to build it themselves without a deep expert -- they are considered technically exotic for good reasons.

</comment><comment><USER3> Never underestimate the power of a properly configured server with 1TB of RAM running MySQL off of SSD.

In my experience, people used to cloud services misjudge the power of correctly tuned modern hardware by two-three orders of magnitude.

Giving a general answer to your question is hard in the absence of further information.

<comment><USER18> Heh, most systems could fit their entire working dataset in 1TB and never worry about I/O.

Except for logs, of course. Those things are incredible disk space hogs. Also, serialising data to logs can surprisingly expensive. (Our ES logging cluster has tens to low hundreds of TB of storage, and it expires data after roughly 40 days.)

</comment></comment><comment><USER19> Surely this depends _entirely_ on the app.

Is the database a bottle neck for a CRM app that deals with millions of customer records? Probably because everything else is incredibly lightweight. Is it the bottleneck for an app that transcodes video on the server? Absolutely not.

And so on, for every imaginable app.

<comment><USER20> But the database is often the hardest thing to scale. Scaling up transcoding is childs play by comparison.

</comment></comment><comment><USER21> Nowadays, in most system architectures, app servers are stateless and can be scaled horizontally. But something needs to hold the state, and that thing will be the bottleneck. Yes, you can horizontally scale some databases, but distributed state is very tricky to get right and will have performance trade- off.

</comment><comment><USER22> What are you doing? How many writes/s? How much processing are you doing in the app server? Do you have a queue you can offload work onto?

Your question is a bit open-ended.

Scaling your database is _generally_ the hardest part. Any jerk can put 100 app servers behind a load balancer. Scaling data is significantly harder, especially when it comes to writes. There are options to get around this, but they come with compromises.

So, really, it depends on what you're doing. In general, use things you're comfortable with. Is Python slower than Rust? Sure. But do you need 2ms response times from your app server or is 10ms fine, especially when latency between the user and your first load balancer is likely 3-5x that number? Build it, test it, if it's too slow, cache it. If you can't cache it, break out the offending piece and optimize it or put it into a faster language.

</comment><comment><USER23> Anything can be your bottleneck. Fix one bottleneck, find the next one. That said, databases are often the bottleneck. And with web apps, "the speed of your server-side programming language" is almost never the bottleneck - although the architectural limitations of your framework may be.

<comment><USER24> I've seen a lot of cases where "the speed of your server-side programming language" was, in fact, the problem—because the developer was doing stuff in it that they should have told their DB to do for them. Basically the speed of the server-side programming language doesn't matter only as long as you're very careful not to, you know, use it to do anything. Which is a realistic goal in many applications, by leaning on one or more DBs more heavily.

</comment></comment><comment><USER25> In general yes, database will be your bottleneck.

In reality, when database becomes a bottleneck it means you're probably making enough that you can just throw more money at it.

<comment><USER26> Let me know when this happens - I'll stand in front of it.

</comment></comment><comment><USER27> In my experience yes.

Example: We struggled with some read-queries taking a long time when aggregating over millions of rows. To solve this, we used triggers to pre- compute aggregate groups in real-time during write, which allowed us to easily achieve sub-second response times. However, this caused a lot of write amplification and now this is becoming a bottleneck. We could probably solve some of these problems by looking into column stores, but that carries it's own downsides (operational complexity, real-time data loading, etc.). Or we could buy faster disks, but that gets expensive quickly.

YMMV but I certainly still experience more database/disk related bottlenecks than application-level ones.

<comment><USER28> SQL in my experience is not designed for workloads where you want to compute together/return a ton of values from a ton of rows at once. Its good where you need to cherry-pick just a few rows belonging to one user from a databses of millions of row (e.g. CRUD operations).

tl;dr:

simple CRUD operations on few rows scale fine

data-science/analytics stuff involving millions of in one query scale rather badly

<comment><USER27> SQL isn't the problem IMO. The problem is that the implementation we're using (PostgreSQL) is a row-store which is indeed more optimal for the kind of operations you mention.

However, SQL isn't limited to row-stores. There are column-store implementations that are quite amazing for aggregate queries, e.g. Clickhouse. Using one of those would very likely work for us, but my understanding is that loading data into them in real-time is problematic.

<comment><USER29> How close is real time? Seconds? Minutes?

Also, what type of aggregate?

</comment></comment></comment></comment><comment><USER30> In my experience with enterprise applications, we hit database bottlenecks only if you are doing aggregate operations over millions of records or firing 'like' queries over varchar(max) columns without full text indexes. Or generating reports with joins over multiple million record tables.

For most crud operations any production ready database will not bottle neck before you have to fine tune your application server and application itself. Non thread safe application code and libraries have caused more performance issues than large join queries.

</comment><comment><USER31> Yes, the database is still a bottleneck, but that depends on the size of the data and what you're querying for. If your data fits comfortably in memory (and so do any operations you perform over it), then performance is not really an issue. For many businesses — probably the vast majority — all the data could just sit in memory.

</comment><comment><USER32> From fastest to slowest: web server > database > synchronous database connection.

The bottleneck in my code is rarely the database but rather the interface that is used to it. I'm sure if you had thousands of users running high latency but low utilization queries you could reach the actual limit of the database.

99% of the performance problems I experience involve loading data from systems that don't let me access it directly and instead the data is simply dumped and my application has to load the dump. When you have to delete and reinsert 300000 rows every day and use the naive way of INSERTing the data then you will wait several minutes because the synchronous nature of SQL means that the client has to wait for a response on every statement. An easy way out is to use non-standard features like COPY or INSERT INTO x FROM unnest(...) in postgres. Except they aren't really pretty to use. Your 1 line Domain.save() suddenly turns into a 30 line query just for inserting some data. I still prefer the former for smaller datasets even if it means waiting 2 minutes on an initial import that only happens once because that can be quickly implemented and then you can simply throw the code away if you need something better.

</comment><comment><USER33> Yes, any server-side language will do. But when you read "database is the most common bottleneck", you could frequently replace it with "database is the least well understood component in the stack". As soon as you stop using the database as a dumb store, you start to realise that your db can handle a lot more than you thought. One has to go beyond what the average ORM offers.

</comment><comment><USER34> "Therefore, the speed of your server-side programming language is not important (or less important)."

I view this statement as a prediction, in the scientific sense: "If you re- implement a program in a faster language, but have the same database access, the user will not have any visible performance improvements."

Like almost anything else, the answer is, "it depends". It is often true.

However, I have falsified it in some specific instances. It is definitely possible to take a "scripting language", which ranges in the 20x-50x slower than C (a rough, but adequate, approximation of "optimal"), then layer it in a couple more layers of abstraction that may be really nifty and cool and awesome but also adds another 10x to the slowdown (or more... if you're not careful, this term can be unboundedly large), and get to the point that simply generating an HTML page takes a full second of a 3GHz's processor time. I have replaced things that did non-trivial database work with something in a compiled language and gone from "noticeably sluggish" to "essentially instant" without all that much effort.

In one of those cases, significant effort had been expended trying to figure out why the database was so slow, presumably because of the prevalence of this meme, when even the first glance at the output of a profiling tool said that was not where the problem was.

Performance is rarely the first thing to worry about, but I find it's something you do want to at least keep in mind while developing. If you do at least keep it in mind, I suspect the saying is generally true, and the raw speed of the underlying server language won't bother you much. But you are definitely much closer to the point where performance becomes problematic than you start at with a faster language, so you need to be that much more vigilant. People who are lulled into a false sense of security by the idea that the database is _always_ the bottleneck can get blindsided by performance issues in their app.

I think the meme overall is damaging. It's not true _enough_ to make it a core, unquestioned assumption that you can rely on, and if it can't be that, then you might as well simply use the correct answer, which is to use a real profiler and look at the real data. I pretty much always through at least a basic profile pass at any code that isn't just brute scripting.

<comment><USER35> Most web application code is IO bound. You will get better performance by using more productive language to iterate and create better architecture. Github(Ruby) is noticeably faster than Bitbucket(Java) because engineering time spent on what matters.

I think most slowness is coming from bloated apps trying to push too much code/data over the crappy network. Additionaly it is easy to misconfigure AWS infrastructure.

<comment><USER34> "You will get better performance by using more productive language to iterate and create better architecture."

And if you blindly follow that, you'll fall into exactly the trap I mentioned, where that "better architecture" involves layering another 10x+ slowdown on top of your already-slow scripting language and before you know it it's 100,000 cycles just to emit "<p>".

I think there's rather more compute-bound web-generation code out there in the world than people think, precisely because this meme makes it so people never even _look_. Of course you'll think it's all IO bound if you just _assume_ it is and never check even a little bit whether that's true, which from what I can see, is the norm in the web programming world. The data can be screaming that you are in fact _not_ IO bound, but if nobody's listening because "everybody knows" that can't be true... who's going to find out it's wrong?

</comment></comment></comment><comment><USER36> It's hugely dependant on the app and type of data it's processing.

Our primary apps deal with trading data at 15/30 minute intervals over multiple years. It's not uncommon to have millions of rows involved in a process.

Yes, nearly all of our performance problems boil down to the database. The majority of the time spent on the server is on data access.

Basic CRUD on small data wouldn't be the same.

</comment><comment><USER37> Assuming everything is designed to scale linearly to some point well above the current workload, a better way to phrase this is to ask what percentage of your hardware spend goes to compute, network and storage machines.

Note that a single postgres instance with one core and 1gb of ram on 1 ssd can "scale linearly" by my definition, since you can easily double, triple, etc all those specs.

On the other hand, a fully populated data center running scale out software at 100% power capacity can't scale linearly anymore, because you can't upgrade it anymore. For that data center, power or maybe space is the bottleneck.

Short answer to the question you asked: SSD's are not going to be the bottleneck for software that's migrating off disk, and the database probably won't either. Hardware trends mean the storage and database just got 10-100x faster, while the business logic maybe doubled in speed.

If the system was well balanced before, that means no one spent then- unnecessary effort on now-necessary optimizations on the compute side.

</comment><comment><USER38> Biggest bottleneck these days are poorly written sqls and badly optimized db's. Hardware isn't really an issue anymore.

<comment><USER30> Also, poorly written application logic.

</comment></comment><comment><USER39> Persistence is still slow, but is no longer a major bottleneck. SSDs are faster, but io and network is still slow.

What has changed it is much easier for the client to be continually in touch with the server so that by the time the next "page" is loaded all necessary data has been retrieved.

This way the database is no longer the same obvious bottleneck.

</comment><comment><USER40> It really depends on the app, but if you're asking about a typical situation of a typical crud app, then yes, db is still likely the slowest part. SSD doesn't change this, because a typical crud app fits completely in memory and is 99% buffered reads anyway.

<comment><USER12> Is buffered read a database feature or the application?

<comment><USER40> Yes. Either. Depends on your application. It may be a feature of orm caching as well.

</comment></comment></comment><comment><USER41> Even if your disk speed is infinitely fast, or your using an in-memory thing like Redis, hitting the DB is almost always going to be slow-ish due to network latency.

Redis is awesome badass rockstar tech, but I try and avoid it for any single- processe thing, instead opting for a tried-and-true global (thread-safe) hash table. Network packets aren't free, and no matter how cool your database is, I don't see you avoiding that. Not to mention that there _is_ a cost to (de)serializing data, which you don't pay if you use something built into the language itself.

I'm not saying to go drop Redis (or any database/cache), just to keep this in mind.

</comment><comment><USER42> The data is a bit old, but I don't think the relative order or rough magnitude has changed.

[https://gist.github.com/jboner/2841832](https://gist.github.com/jboner/2841832)

</comment><comment><USER4> Often, yes... it will largely depend on what you are doing, how cacheable things are, and how large your data set is.

If you are largely static and most of your content is tethered to fixed keys that can map from URL patterns, then you could through a large redis cache in front and it wouldn't be the bottleneck... or enough ram to cache on-system.

There are more details to how much your disk or database are your bottleneck, but in almost every case, they are still much slower than your CPU or your network interface (that may be a bottleneck in some cases),

</comment><comment><USER14> One important thing that has changed since I learned of the "databases are slow" is that they can now be "as-a-service", with services like Amazon Aurora; from the outside interface they're just SQL databases, but underneath they can scale up a lot with minimal effort or knowledge. Likewise, you can have your database of choice and put it on a server which you can scale up or down. Not sure how the migration for those works though.

<comment><USER43> The serverless database options still remain the bottleneck though. They are still often the slowest aspect of any logic path if not also the most expensive.

</comment></comment><comment><USER44> I thought this promising title was going to be about a new trend called "server-side web apps" and how they reduce DB round trips. Oh well :)

<comment><USER24> "One cool, super-advanced trick you can use to reduce latency for simple queries by 95%!"

Then you read the article and it's just running the app and DB on the same physical server, and communicating over local sockets rather than a TCP/IP stack through various virtualization layers and across several networks, real and virtual—so, partying like it's 1999.

</comment></comment><comment><USER45> It does feel weird pulling an entire database into a docker container... I don't know what the path looks like to make that a cluster.

</comment><comment><USER46> Yes, for the most part, it still is. It's not always disk though. I can be CPU or memory but most of the time it is the database that falls short of it.

</comment><comment><USER47> Yarp, it is.

</comment><comment><USER48> This is a ridiculous conversation. Disks and RAM will always occupy their respective positions in the storage hierarchy, so databases (assuming stored on disks) will always be the bottleneck.

</comment><comment><USER43> Memory access of any type is often the slowest. This might just be a general law of computing regardless of level of the stack at this point.

In the serverless world, memory accesses are the most expensive with writes being the most expensive of all (where expensive == slow __AND __literally expensive)

<comment><USER49> Do you have an example of that being the case? Memory is usually pretty quick compared to disk & network.

<comment><USER43> I mean memory, storage in a broad sense. Not a statement about in RAM or cache, though I see the confusion in retrospect. Having code access some sort of storage (better word than memory) is always the most expensive part.</comment></comment></comment>


Ask HN: What deep learning papers should I implement to learn? - <AUTHOR> I have been wanting to implement a Deep Learning Paper to get some hands on the current state of the art model or current field of research. But, generally the paper I pickup is a bit tough to understand. So, I was looking if anyone could suggest me a paper which would be some latest research but slightly easier to grasp? <comment><USER2> Pushing the barriers or independent validation on the latest research is not a good place to start if you're new to the area.

Go and implement an image classifier, tweak the parameters and the topology and see how the results and training changes.

Switch to a time series model / text model, and learn the difference between convolution / recurrent networks.

Start playing with non-sequential topologies, custom objective functions, Q-Learning,

Once you have a grasp of these basics go back and read the papers, and you'll find that you understand them a lot more, and you'll see where they're pushing the boundaries.

<comment><USER3> If he wants to focus on Deep Learning I wouldn't touch Reinforcement Learning (you mentioned Q-learning). Lots of hours can be wasted on RL.

<comment><USER2> Agreed!

</comment></comment></comment><comment><USER3> That's actually a pretty good idea to improve your skills. I would highly recommend to implement one of the semantic segmentation papers. Perhaps start with a simple FCN (with and without a pretrained encoder).</comment>


Business Advice from a Billionaire - <AUTHOR> http://www.wisebread.com/business-advice-from-a-billionaire <comment><AUTHOR> "You need to tolerate surface differences in order to help people focus their talents on what needs attention. One of the weaknesses of some people in administration is that they want people around who look, act, and think like they do. That's a recipe for disaster."

This is why so many startups hit a wall after they get picked up by corporate giants. Group think kills.

<comment><USER2> Yes, group think kills.</comment></comment>


Show HN: Are you looking for a Co-founder or some help for your side project? - <AUTHOR> VERSION 1 is now public
You can view it at: https://spfound.netlify.com
Hey HN
For the past year, I have been experimenting and creating new projects to release to the community. However, I felt that I kept trying to do jobs that I couldn't really do. So I decided to try and get some help but kept finding it so difficult to find anyone who could help me. I also found that there was no central location, where I could easily get help for my projects. So I decided to build SPFound, a central location where users can post their projects that they need help with and explain what help they need so that other users that come onto the site, who are looking to help others can simply choose a project and contact the Project creator.
Now, this is version 1 of the site, meaning that site is not yet fully complete with all the feature I want to integrate, but has all the core features built and is functional to start using.
Here are some of the features I wish to integrate.
Upcoming Features: - Contact forum - CMS ( so that users can create, edit, and delete a post) - User Accounts - Better looking form - search - User Profiles - Sharing (so users can share the projects that need help to other people)
If you have any more ideas that you think would improve the site, please leave a comment, I will be sure to read and respond to them all. <comment><USER2> Add 'Show HN' to the submission title and it will go into the [https://news.ycombinator.com/show](https://news.ycombinator.com/show) page dedicated to show off new projects. Early, unfinished projects are fine as long as it's something users can try and play with (blog posts, signup pages, fundraisers can't be tried).

My feedback is the header uses too much whitespace. On a 27-inch (3840 x 2160) monitor I need to scroll down to see a project.

There's need on HN: "Ask HN: Who is seeking a cofounder?" [https://news.ycombinator.com/item?id=20266463](https://news.ycombinator.com/item?id=20266463) (160 comments)

<comment><AUTHOR> Thank you for the response. I will fix the whitespace.</comment></comment>


Second world war bomb explodes after three-quarters of a century - <AUTHOR> https://www.newscientist.com/article/2207515-second-world-war-bomb-explodes-after-three-quarters-of-a-century/ <comment><USER2> To correct ambiguity, can we say WWII bomb? Makes it sound less like this is only the second time this happened. Thank you!

And kinda scary this is still happening, in 2019

<comment><AUTHOR> I submitted the original headline in accordance with common HN style.

Speaking of the ambiguity, this is the _first_ time I have heard of a WW II bomb spontaneously exploding though it must happen from time to time.</comment></comment>


Hackers tricked a Tesla, and it's a sign of things to come to fool AI - <AUTHOR> https://www.abc.net.au/news/science/2019-04-14/tesla-tencent-study-humans-are-trickable-so-are-computers/10994578 <comment><USER2> Humans are subject to many optical illusions. Maybe you could trick human drivers in similar ways. But humans can't be fixed, while AI can be trained to be better at some point.</comment>


Ask HN: any interest in a hacker social network? - <AUTHOR>

i use hacker news, some comp.lang newsgroups, some blogs etc to keep myself updated and learn more about programming and webculture.
i have recently found the need to have it more integrated. and sometimes i want to be able to have respones from people from all the different groups. i have thus felt the need for a social site for programmers and hackers.
i mean there is obv a lot of good sites already for different purporses/interest areas of programming but nothing that puts it all in one easy accesible place. most programming forums also have fairly low quality. comp.lang is generally good though but there are no community features.
so i was thinking i might do one. a good project to learn diverse skills related to programming and even if noone is interested i learn something.
so features:

  *profiles
  *forum
  *chat
  *news(hacker news is great though maybe PG would let me integrate it?)
  *jobsearch and advertising, specialized ads for computer/programming-related jobs.
  *quick-and-dirty outsource application, ie make it easy for a startup to get in touch with a specific programmer to do some shortterm job for them if they need that.
 great thing is that it might actually be possible to profit from this then if you can monetarize on jobadvertising? maybe hard but i could imagine a community based on connecting people to create things and get jobs would be easier to monetarize than a lot of other social platforms.
would you people want this? i think i will start working on it anyway to learn how to build a big application. <comment><USER2> I don't personally feel any pain by having these in different places. If other people do, then you might be on to something, but otherwise, why not focus on a piece that isn't done well elsewhere, rather than replicating common things (job search, news, forums, etc.)? In particular, I haven't seen a quick-and- dirty outsource app done well. Ideally, I think you want something kind of along the lines of linkedin, where you post jobs to people you know. I'm not going to give SCM credentials to a stranger on elance. If this does well, you could build a community around it, rather than starting with a community.

<comment><AUTHOR> thanks for the hint, ill go with the quick-and-dirty outsource app instead of the whole shebang.

</comment></comment><comment><USER3> I say go for it, it'll be fun, but I don't share your sense that there's a problem to be solved here. Personally, I'm most interested in communities where I can meet folks in person in addition to online interactions, i.e. geography-based in addition to shared-interest.

<comment><USER4> There might well be no problem to solve here but ... <http://www.paulgraham.com/newthings.html></comment></comment>


I did what is taking government years and millions to do - <AUTHOR> Right now you can not easily send photos or videos to the police. The government has been trying for years now to make 911 handle photos and videos without much luck. Today I coded the ability to send photos and videos to the police. One goes to https://sendevidence.org and uploads their evidence. If the police department is in the database then they get an email with the data and links to S3 to download the evidence. If not I'll try to find an email address and send them the evidence. By doing this officers won't have to go to people homes, can take hours in a major city, to pick up say surveillance videos of car prowlers. This also helps officers who don't want to give out their email addresses, see http://blog.seattlepi.com/seattle911/2015/07/24/seattle-cop-who-bungled-westlake-groper-report-suspended-2-days/ <comment><USER2> There is definitely an opportunity here. Several things you will need to consider:

1\. Documented chain of custody for the evidence. For it to hold up in court everybody that touches any evidence must be logged.

2\. There is a process that police departments utilize when handling computer data in terms of photos or videos. Most big cities and states have large computer forensics departments that handle this type of evidence specifically. To hold up in court, they need to be able to prove the data is not only real, but original and unaltered.

3\. There should be a way to verify the photo/video belongs to the crime being investigated. For example, let's say several homes are broken into in my neighborhood. I have a home surveillance system, but really dislike my one neighbor. I decide to take a few stills from my home surveillance system of my neighbor walking by my yard, and submit them as potential evidence in the case.

4\. I realize this is early on, but as the site stands now, I would never submit anything through it. How do I know I can trust the site, how do I know my evidence got to the detective investigating the case. As law enforcement (which I am not) how do I know the data is secure, how do I know it is real, etc...

Like I said, there is a good opportunity here. But there is also a ton of case law that makes implementing what would appear to be a simple solution much more difficult.

<comment><AUTHOR> Do you think uploading straight to a department's S3 bucket would address any of the audit/security concerns? [http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST...](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html) I'm looking into [https://aws.amazon.com/cloudtrail/](https://aws.amazon.com/cloudtrail/)

<comment><USER2> I think you may still run into some issues, but to be honest, if you are looking to make a business out of this, I would find and talk extensively to law enforcement and/or the state's attorney office in your area. I am neither. I did work for several years alongside law enforcement and have been to more crime scenes than I care to recount. I know from that experience that even what appears to be the simplest of tasks involved heavy documentation, logging, and chain of custody procedures. For data, such as photos and videos, they must eliminate or significantly reduce any chances of a file's metadata being altered. A good defense attorney simply has to put doubt in a jury's mind. They can do that by showing the video/photo could have come from a different date, a different location, etc...

I think it may be easier to refer to more as a crime tip submission site. However, with that approach you are competing with Crimestoppers which already accepts photos and videos from tipsters. Again, IANAL, but I believe those submissions fall into something similar to a polygraph. Where if you submit a photo/video to the site, the police can use it to build a case, but cannot use it in court.

Depending on where you are located, I do know a few crime scene investigators and computer forensic investigators that I may be able to put you in contact with and who could better answer your questions.

See: [https://www.fbi.gov/about-us/lab/forensic-science- communicat...](https://www.fbi.gov/about-us/lab/forensic-science- communications/fsc/oct2000/index.htm/computer.htm)

<comment><AUTHOR> I'm not looking to make a business of out this which is why I went with .org instead of .com. I'm looking to solve a major problem with sending photos/videos to police departments. I'm looking into chain of evidence now. Thank you for your helpful feedback.

<comment><USER2> Yep. Look into digital evidence or "e-evidence". Both are big topics in crime scene investigations and many law enforcement agencies and courts have established procedures for handling. There is ample discussion.

</comment></comment></comment></comment></comment><comment><USER3> There is a similar startup in the UK, has good traction [https://www.facewatch.co.uk/](https://www.facewatch.co.uk/)

<comment><AUTHOR> Thank you!

</comment></comment><comment><USER4> We're already doing this and have clients using our system.

<comment><AUTHOR> What's your url?

</comment></comment><comment><USER5> Add fields to the evidence that could correspond to the fields in police information systems.</comment>


German city declares 'Nazi emergency' as extremist views and violence increase - <AUTHOR> https://news.sky.com/story/dresden-german-city-declares-nazi-emergency-as-extremist-views-and-violence-increase-11851760 <comment><USER2> "The policy statement said "anti-democratic, anti-pluralist, misanthropic and right-wing extremist attitudes and actions, including violence in Dresden, are occurring with increasing frequency", according to Deutsche Welle (DW)."

What a joke. You have a permission to be liberal in a liberal regime and nothing else. Which itself boils down to anti-pluralism and anti-democratic attitude.

"Alternative for Germany, a far-right party, received more than 17% of the vote in city council elections this year." Oh, it's an emergency because people are not voting correctly in the democracy _rightly understood_.

<comment><USER3> > What a joke. You have a permission to be liberal in a liberal regime and > nothing else.

Your "nothing else" refers to authoritarian ideas devised to oppress and persecute everyone around you that does not comply with your world view. Oppression and ideological persecution is no joke, and it's a civilization problem that must be dealt with before it becomes a problem to society.

[https://en.wikipedia.org/wiki/Paradox_of_tolerance](https://en.wikipedia.org/wiki/Paradox_of_tolerance)

<comment><USER2> > "authoritarian ideas devised to oppress and persecute everyone around you > that does not comply with your world view"

This is a description of State governance (and it's mirror image is State institutions enforcing ideas with which it agrees). This description is impossible to distinguish from any other description of functional State enforcing monopoly of violence over territory. Liberal regimes issue heavy propaganda, such as nicknaming this as 'paradox of tolerance', to create legal and philosophical fictions to enforce the ruling elite's grasp of State power. Robert Michels called it 'Iron Law of Oligarchy', Vilfredo Pareto & Gaetano Mosca described it in elite theory. There's always going to be rulers and ruled.

So the issue in the "news" is not a Third Reich uprising through "accidents" of democratic voting, or an idealistic liberal regime being under threat, or an authoritarian threat, but the capture of State power and institutions away from one elite to another. The institutions and State power matter not if you cannot enforce your ideas through them.

Nothing is in here which wasn't already in Thucydides.</comment></comment></comment>


APNG-canvas – Display animated PNG files in the browser - <AUTHOR> http://davidmz.github.io/apng-canvas/ In case you want native APNG support on Chrome, you can install this chrome addon from the same author: https://github.com/davidmz/apng-chrome <comment><USER2> I've been wondering about the point of APNG lately.

1\. The gif patents are expired. So that whole drama is done.

2\. If you want more colors, couldn't you just do a doublesize dithered gif, display at half size and let the browser pixel averaging algorithm take care of the rest?

3\. Would the above result in much larger files than APNG? i don't know, maybe that's the clincher.

4\. APNG does not provide any additional API advantage over GIF. I still can't control when it plays, how fast it plays, or easily provide the ability to replay it (without going round the long, glitchy looking way by forcing a reload of it)

Incidentally, you know what does provide a pretty good and well supported javascript api? This is going to sound weird, but you can make just a plain PNG image strip, wrap an img tag in a marquee tag, and get full control over how it works, with universal browser support[1] : Play, pause, stop, rewind, speed, looping, etc. etc.

[1]:Except for bloody webkit, in which recent versions have changed the behaviour of the marquee tag with relation to other browsers for some fucking reason. :(

<comment><USER3> _2\. If you want more colors, couldn 't you just do a doublesize dithered gif, display at half size and let the browser pixel averaging algorithm take care of the rest?_

Browsers are often horrible at resizing files; it would not look good at all.

 _4\. APNG does not provide any additional API advantage over GIF. I still can 't control when it plays, how fast it plays, or easily provide the ability to replay it (without going round the long, glitchy looking way by forcing a reload of it)_

If you want to mess with speed, save it. If you want a way to trigger replay in your browser, file a bug report.

APNG does everything GIF does but better, and it is a small attack surface compared to MNG or video formats. It's also efficient compared to handling video embeds.

<comment><USER2> "Browsers are often horrible at resizing files; it would not look good at all."

What's with the weasel words? You can name names if you want. Which browsers? what do they do that makes them look horrible? The only browsers left I know of that use nearest neighbour resampling are ie7 and ie8.

"If you want to mess with speed, save it."

You're joking, right?

"If you want a way to trigger replay in your browser, file a bug report."

you definitely are joking. You think I'm the first person to ever want that?

<comment><USER3> I'm not joking when I say right click should have a repeat option. Why does a suggestion to file a bug report sound dismissive to you? It's not like I told you to code it yourself.

I'm not joking about changing speed; how often do you want to play a video in slow motion? It's not really the browser's job to do that.

I used weasel words because I didn't want to go testing. In addition to me remembering additional issues on my phone, Opera and IE10 do bad resampling, and chrome does a weird thing where it shows bad resampling for a couple seconds before replacing it with good resampling. Specifically, when I say 'bad' here, it's not nearest neighbor but it's not using a proper method either. Small details, such as lines 3-4 pixels wide, disappear entirely in spots when I zoom out. They're using algorithms that only sample a couple of points, which breaks down terribly on sizes like 33%.

Edit: I found a mozilla bug report claiming that high-quality resizing is turned off if an image is on a page multiple times. Ech.

<comment><USER2> The suggestion to file a bug report doesn't sound dismissive. It sounds naive. It assumes that I wouldn't go to the bugzilla and just see, already there, these: [https://bugzilla.mozilla.org/show_bug.cgi?id=617875](https://bugzilla.mozilla.org/show_bug.cgi?id=617875)

(2010)

[https://bugzilla.mozilla.org/show_bug.cgi?id=284511](https://bugzilla.mozilla.org/show_bug.cgi?id=284511)

(2005)

[https://bugzilla.mozilla.org/show_bug.cgi?id=899861](https://bugzilla.mozilla.org/show_bug.cgi?id=899861)

(2013)

[https://bugzilla.mozilla.org/show_bug.cgi?id=211145](https://bugzilla.mozilla.org/show_bug.cgi?id=211145)

(2003)

[https://bugzilla.mozilla.org/show_bug.cgi?id=96873](https://bugzilla.mozilla.org/show_bug.cgi?id=96873)

(2001)

[https://bugzilla.mozilla.org/show_bug.cgi?id=523973](https://bugzilla.mozilla.org/show_bug.cgi?id=523973)

(2009)

[https://bugzilla.mozilla.org/show_bug.cgi?id=629819](https://bugzilla.mozilla.org/show_bug.cgi?id=629819)

(2011)

[https://bugzilla.mozilla.org/show_bug.cgi?id=619957](https://bugzilla.mozilla.org/show_bug.cgi?id=619957)

(2010)

[https://bugzilla.mozilla.org/show_bug.cgi?id=873881](https://bugzilla.mozilla.org/show_bug.cgi?id=873881)

(2013)

Need I go on? I laughed because the problem with gifs is so obvious and painful I couldn't imagine there wouldn't be a pile of really old bugs there already. Gifs on page don't really work right. They're not consistent, predictable, and none of the many inconsistent ways they do behave in is what anyone expects. But this is all well known by anyone but the browser developers, it seems. Filing a duplicate is a waste of everyone's time.

"I'm not joking about changing speed; how often do you want to play a video in slow motion? It's not really the browser's job to do that."

I mean changing speed for design effects. We're not talking about video here. Remember? We're talking about gifs/pngs. Totally different thing. Totally different use cases. Admittedly it's not often I'd need to do that. Really adding play/rewind/pause/seek, in that order, is more important.

"Small details, such as lines 3-4 pixels wide, disappear entirely in spots when I zoom out. They're using algorithms that only sample a couple of points, which breaks down terribly on sizes like 33%."

Fascinating. Maybe I should do some tests. Do you have example images where you'd expect problems to happen?

</comment></comment></comment></comment></comment><comment><AUTHOR> In case you want native APNG support on Chrome, you can install this open- source Chrome Add-On from the same author: [https://github.com/davidmz/apng- chrome](https://github.com/davidmz/apng-chrome)

One could say that this is a pendant to: "Animated gifs the easy way" to [http://www.sublimetext.com/~jps/animated_gifs_the_hard_way.h...](http://www.sublimetext.com/~jps/animated_gifs_the_hard_way.html)

</comment><comment><USER4> See also: [http://devongovett.github.io/png.js/](http://devongovett.github.io/png.js/) code: [https://github.com/devongovett/png.js](https://github.com/devongovett/png.js)

also works in Node (png-js on npm) if you want raw pixel values there.

<comment><AUTHOR> Thank you for posting that, it may be helpful, but it's ~twice larger than apng. I think that matters when served to clients.</comment></comment>


Heuristically finding content in html - <AUTHOR> http://www.hydrogen18.com/blog/finding-content-in-html.html <comment><USER2> Nice write up.

This reminds me of goose-ng [0].

There are a number of implementations and ports of the heuristic approach out there, including for Go and Scala.

It works nicely, I'm a fan!

[https://github.com/jaytaylor/goose-ng](https://github.com/jaytaylor/goose-ng)

</comment><comment><USER3> Nicely written post! I've had this issue when trying to focus on just the content of the page. It would be interesting to see if you can find any deeper filtering ideas from other browsers - like Firefox has a "reader view" that strips away cruft from pages. Or even looking at the source code of some open- source feed reader apps like Flym - they do a great job of scraping off content and caching it online in a searchable format.

<comment><AUTHOR> Thank you for the feedback. I intend to go back and try and find a better basis for the mathematics I used.</comment></comment>


Brew Finder App: Helps you find new brews - <AUTHOR> http://www.brewfinderapp.com/

<comment><USER2> Thanks @sfeather for the post here!

But wouldn't you know it, I just found a bug in the iOS version that breaks searches. :facepalm: An update has been uploaded to Apple but it has to go through their review process. The Android version works in our testing.</comment>


Pydantic Version 1 Released - <AUTHOR> https://pydantic-docs.helpmanual.io/ <comment><USER2> This is awesome! And soon to be updated/integrated into FastAPI, with all the new features.</comment>


This Simple Way Is the Best Way to Predict the Market - <AUTHOR> http://blogs.wsj.com/moneybeat/2015/12/24/this-simple-way-is-the-best-way-to-predict-the-market/ <comment><AUTHOR> Link to the original journal article (pay wall, but you can register to read a free article.)

[http://www.iijournals.com/doi/abs/10.3905/jpm.2015.42.1.119](http://www.iijournals.com/doi/abs/10.3905/jpm.2015.42.1.119)</comment>


Brit converts jet engine nacelle into camper - <AUTHOR> https://www.thedrive.com/news/34636/this-hollowed-out-jet-engine-camper-took-over-six-years-and-1000-hours-to-build <comment><USER2> Ironically, it doesn't look like it would be very aerodynamic when being hauled down the road.

<comment><USER3> It would probably be more aerodynamic the other way round.</comment></comment>


Students: Hack on FOSS. Get Paid. - <AUTHOR> http://tirania.org/blog/archive/2011/Mar-30.html <comment><USER2> How good do you need to be to get accepted? Do they only want A students from CS courses, sort of thing?

<comment><USER3> IMO, Grades in courses are irrelevant in GSOC. As a mentor I don't even bother looking at that sort of thing. I just see how well they do on the qualification tasks we give out, how well the student interacts on IRC, and whether there are any things that might interfere with an effective summer (e.g. having another job at the same time, etc).

</comment></comment><comment><USER4> semi-off-topic; does anyone here have experiences with GSoC they'd like to share?

<comment><USER3> I've mentored with x264 (for Videolan) for 3 years, this year going to be the 4th.

It's an absolutely amazing program and has led to an enormous amount of success for our students so far. _Almost all_ of our successful students have gone on to get real jobs (contract, part-time, or full-time) from their work on x264. Most had absolutely no experience in anything they worked on before they started.

Examples:

Holger Lubitz (2008): Got contract work from Avail Media and CoreCodec for his amazing assembly code skills.

David Conrad (2009): Got hired by Apple due in large part to his multimedia experience with x264 and ffmpeg.

Dylan Yudaken (2009): Used Summer of Code as a reference to get a software dev job in Britain (he's from South Africa).

Oskar Arvidsson (2010): Now working part-time for CoreCodec to improve their assembly code.

Simon Horlicks (2010): Getting paid by Avail Media to finish up his (huge) 2010 Summer of Code project.

Daniel Kang (Google Code-In, 2010): Won top-10 in GCI, got into MIT as a result, and is probably going to get work from CoreCodec. Oh, and he's only 17.

Additionally, x264 has a dual-licensing program -- all successful students, having contributed a large chunk to the codebase, get a share of the profits (like any other major developer).

Here's our ideas page for this year: <http://wiki.videolan.org/SoC_x264_2011>

</comment></comment><comment><USER5> A bit more detail about Google Summer of Code, including deadline info... <http://h-online.com/-1216668>

</comment><comment><USER6> More clearly: Mono is accepting applications for paid summer internships.

<comment><USER7> Err, no. Google Summer of Code isn't really an internship. You just develop for the project on something you're interested in (and your mentor approves), and you and the mentoring project get paid in chunks over the summer (by Google).

<comment><USER6> Oh sorry. How does "Mono announces participation in SoC," strike you? It's mundane any way you slice it, but of course I'm quibbling.</comment></comment></comment>


Python Mistakes That Most People May Have Made at One Point or Another - <AUTHOR> https://progjourneyblog.wordpress.com/2015/09/04/python-mistakes-that-most-people-may-have-made-at-one-point-or-another/ <comment><USER2> from the top of my head:

      - def bad_default(x = [])
      - bool('False')
      - 1--1 #typo
      - x = 42; y = 42L ; x==y,hex(x)==hex(y)
      - type(5/2) # <class 'float'> or <type 'int'> (python2 versus python3)</comment>


Ask HN: What should I learn for viable career in web dev? - <AUTHOR> After almost 8 years, I am trying to switch career from customer service to web dev. I am learning Python in weekends.<p>What should I learn for viable career in web dev? <comment><USER2> JavaScript, another backend language, a SQL or a NoSQL DB, git, Linux/Unix.

Look at what backend languages are used in your area (PHP, Python, Ruby, Java, C#, JavaScript/Node.js) and learn one.

Look at what JavaScript frameworks are used in your area (Vue, React, Angular, Ember) and learn one.

Look at what DBs are being used in your area and chose one.

Learn Linux/Unix and how to get your frontend and backend choice running. Even if you never do this it will help you understand what you are doing way more.

Best choose for something common in your area. The idea is to get you working soon because real work will get you farther then a long list of hobby projects. Set up a github account and throw out a few projects. Use a CSS framework, even if you know what you are doing with CSS you will get lost in it and waste a lot of time you should be spending understanding frontend and backend programming.

If you have the possibility to spend two weeks or a month without pay (because you live at home) see if you can get an internship somewhere where they will put you to work. After that search for a paying job, with no experience you probably won't get something good, but you will learn enough. As soon as you've got some chops switch jobs, maybe even language and move to a company that has talented people. Learn from as much from them as you can.

Now comes the hard part, search for a language, operating system, app or something else that interests you. If you have a small hobby project that you love, that has nothing to do with work (this is very important) it is way easier to keep the passion for what you are doing.

You don't always have a lot of choices locally when it comes to languages, tools, DBs and so on and moving is often not worth losing your support network for, especially when you are first getting started since you will fuck up as your idea and industry reality start to converge.

</comment><comment><USER3> javascript</comment>