New MacBook Pro series - <AUTHOR> http://apple.com/macbookpro/ <comment><USER2> Didn't get as much coverage, but there are also new ThinkPads this week: [http://www.engadget.com/2011/02/22/lenovo-trots-out-new- thin...](http://www.engadget.com/2011/02/22/lenovo-trots-out-new-thinkpad-t-l- and-w-series-laptops/)

The 14" models look good: 30 hours (claimed) battery on the T420, 0.83" ultrathin T420s with discrete graphics.

Edit: Here's the official announcement, which took a bit of digging around to find: <http://news.lenovo.com/article_display.cfm?article_id=1421> . synacksynack has posted a good link now.

<comment><USER3> 30 hours (claimed) battery life?

That sounds ridiculous. How close (or far away) to the truth is that? Anybody know more?

<comment><USER4> That's for _extended_ battery used _together_ with the regular battery.

<comment><USER3> Ah, the fine print.

I just feel if this was just the actual battery, we would have heard a bigger announcement!

<comment><USER5> 15 hours (claimed) with the regular 9 cell battery. Not too shabby.

</comment></comment></comment></comment></comment><comment><USER6> Color me disappointed. I was hoping for:

• Ditching the optical media for longer battery life

• 4 cores in the 13"

• Max RAM of 12 GB (this one isn't listed ... maybe?)

• The higher resolution 1440x900 resolution in the 13" that the Macbook Air has

Altogether it's a pretty wussy update. Basically it looks like the diff (on the 13" model, which is what I care about) is:

• Faster CPU (finally!)

• Thunderbolt port (count on buying another $30 display adapter like every generation)

• 3 hours less battery life

<comment><USER7> >>• 3 hours less battery life

The old battery tests were unrealistic. They advertised 8 hours on the 17'', but who really got even close to that under normal use?

I'm thankful they're taking the hit on pure battery life numbers to report an honest, realistic test.

<comment><USER8> Well, I do get very close to 8 hours on my 17" MBP (when the cpu is not too stressed). That number will go down if any serious work is done, but light browsing etc. takes it all the way up to 8h.

<comment><USER9> The key I find with my mid 2010 17 is to manually force intel graphics. Several web browsers and plugins seem to invoke the NVidia discrete chip which sucks power.

<comment><USER9> <http://codykrieger.com/gfxCardStatus> is a great tool for this.

</comment></comment></comment></comment></comment><comment><USER10> hmm - you need to go to 1799$ before you end up with a half decent graphics card and 2199$ for a decent card.

Compare it with a Dell XPS 15 Sandy Bridge - $1049 for i7 2620M, 1920X1080 display, nVidia GT525 Optimus card, HD Camera.

For a first time possible mac buyer (me) - is it well justified ?

<comment><USER11> Have you used OS X before?

I pay the Mac premium for two reasons: (1) my laptop is supported by tons of Apple Stores across the country, and (2) OS X is awesome (and since it's Unix- based, I can work in the terminal without a problem). There's also a great reselling market for Macs.

If (1) and (2) don't really matter to you, go with the Dell. I'll pay the extra price to get exactly what I want in my computer.

<comment><USER12> This... the cost of my computer hardware is basically inconsequential given that these days I'll often get 3-4 years out of it. If I'm using it for work, that's like $2 a day total cost over its lifetime. I'll happily pay an incremental $1 a day for a system that saves me 10 minutes of dicking around and forgo starbucks if that's what it takes.

Justifying choice of your primary work system on the basis of even a $1,000 price difference is generally penny wise - pound foolish. I don't think that's a Mac/Win/Linux issue, just common sense when it comes to work tools.

<comment><USER13> That assumes you save any time at all. I use a ThinkPad with Win7 and I think honestly say that I lose no additional time vs using a MBP. In fact I'd argue it saves me time as I generally like the keyboard more and I can't stand trackpads (I turn mine off and use the stickpoint -- which I actually even prefer over a mouse).

My point... the $1000 savings for many comes with no penalty at all. With that said, I don't have a Unix environnemnt requirements, which would change the equation in a big way.

<comment><USER12> I think if you find the Thinkpad / W7 more powerful, you should go that route.

All I'm saying is that if you're planning to make on the order of $250-$300K off using a piece of equipment, $1,000 (or even $10,000, arguably) probably shouldn't be material to which one you choose.

<comment><USER14> But any dollar not spent on one part of a work setup can be spent on some other part of the work setup, so that kind of thinking can easily come out in the wash.

</comment></comment></comment></comment></comment></comment><comment><USER15> Thunderbolt is the coolest thing here to me. The way I read this, Intel at least partly owns the IP on it, so it should be available on PCs in the future, too? (I hope so, because that will create a bigger peripheral market.)

UPDATE: Answer appears to be "yes."

"...the fastest way to get information in and out of your PC and peripheral devices..."

<http://www.intel.com/technology/io/thunderbolt/index.htm>

<comment><USER16> when the 11" Macbook Air gets Thunderbolt and a newer generation of processors, I will be first in line to pick one up.

Compact size, internal SSD, and only two cords to plug in each time I sit down - power and data - and data happens to also carry video to a large external monitor setup.

</comment></comment><comment><USER17> I was about to post something to the effect of "I'm disappointed that the 13-inch model replaced the Nvidia GPU with an Intel one", but it seems to be decently better: [http://www.notebookcheck.net/NVIDIA- GeForce-320M.28701.0.htm...](http://www.notebookcheck.net/NVIDIA- GeForce-320M.28701.0.html)

<comment><USER18> I'm a bit disappointed because I wanted to fool with GPU programming and I think Nvidia is still the standard there:

[http://stackoverflow.com/questions/4638324/nvidia-vs-amd- gpg...](http://stackoverflow.com/questions/4638324/nvidia-vs-amd-gpgpu- performance)

Does anyone have any experience with OpenCL versus Cuda?

<comment><USER19> you can't program cuda in os x anyway, apple only uses OpenCL. As far as I know, os x doesn't support OpenCL on the intel graphics chips either

<comment><USER18> The people in this forum would be very surprised you can't program Cuda on Mac OS X :)

<http://forums.nvidia.com/index.php?showforum=75>

<comment><USER19> Oh wow, I was pretty sure I read somewhere that Apple was only allowing OpenCL. Good find

</comment></comment></comment></comment></comment><comment><USER20> I never understood why the 13" version is such a second class citizen? Is it that different of a footprint that Apple can't fit the same technology in it... or is this Apple's plan?

<comment><USER21> Probably because of overlap between it and the MacBook and the MacBook Air?

Frankly, I'm amazed they still offer a 13 inch MBP (which is not to say that it isn't a good little machine, but that Apple likes to segment their market clearly)

I can't see the prices and options at the moment, but it may be that the MBP is just a couple of hundred bucks more than the top end MacBook, which means that some people might stretch that little bit extra.... but the Apple lineup is becoming very cluttered around that small portable computer strange attractor.

<comment><USER22> There is indeed this overlap and clutter on the 13". I think this is because much within the Air is still pretty new stuff for most people: SSD, ditching optical drives. So if people want to pay for performance as they now know it, they'll go for the Pro version. But I doubt there will be a next generation of 13 inch Pros.

<comment><USER23> More like, so much within the Air is still bloody expensive.

I'd rather have space than SSD speed for the associated price. I want to be able to watch DVDs or burn off a quick disk. I don't want to have to step up to a bulky 15" machine just to retain these features.

The Air is not, in my opinion, a really useful machine.

<comment><USER22> So you are one of the reasons there is still a 13 inch Pro. In a couple of years, with a new Air with bigger SSD and more of your data in the cloud, it might make more sense to you.

<comment><USER21> How is having a bigger SSD going to help him burn stuff to disk or watch a DVD? His point was that he still uses the optical drive.

So you say, well, your DVD will be 'in the cloud'. Never mind that pushing that much data up most connections will take all month, _how will he even get it onto his computer with no optical drive in the first place?_

Well, you might say, all your new stuff will be on the cloud, so don't worry about it. But consider if he has a massive DVD collection. Heck, not even a massive one, just assume a hundred or s DVDs.... are you _Seriously_ proposing that he repurchase all that media in 'cloud' format? At $30 a pop, that would _easily_ justify the cost of going for a more expensive MBP rather than a crippled Air.

Oh you say, well if it is just a matter of money, you can just buy the external optical drive. But now whenever you take the laptop anywhere, you have _peripherals_ to drag along with you, and that involves _logistics_. Again, he's better off with the one that is just built in.

Disclaimer: personally I think the Air is pretty neat. I just don't agree with parent's assertion that optical drives are unnecessary.

<comment><USER24> Streaming Netflix is $8 a month. Its library now is okay. In the next few years, it may approach total coverage of the movies most people want to watch. (There already is plenty of overlap with my collection and what's available through streaming.)

The parent did not assert optical drives were unnecessary. He only suggested they _may_ not be necessary for _that person_.

</comment></comment></comment></comment></comment></comment></comment><comment><USER25> Bummed that you can't get more than 8 GB of memory on even the i7. Why are the i7 mobiles only limited to 8 GB? That seems silly for today's standards and memory costs.

<comment><USER26> its not the new i7 mobiles that are not supporting it... You can get a sager with 16GB [http://www.sagernotebook.com/index.php?page=product_customed...](http://www.sagernotebook.com/index.php?page=product_customed&model_name=NP8130)

</comment></comment><comment><USER27> may be they should've relabeled the 13" MBP as Macbook and retired the white Macbook, frankly the specs are quite low except for the CPU.. display at 1280x800 :(

But the 15" and 17" inchers look awesome with quads

<comment><USER24> I think that was the original goal - hence why my original 13" unibody just says "Macbook" and not "Macbook Pro." I think they originally planned on retiring the white plastic model, and either calling all of them Macbooks, or just calling the 15" and 17" models Pros. I can only assume they changed because there was still demand for the slightly cheaper plastic model.

</comment></comment><comment><USER28> Consumer laptops where the OS sees 8 processors. Now is a _really_ good time to pick up Clojure, Erlang, Haskell, Scala and see what the fuss is all about.

</comment><comment><USER29> Does anyone know if Thunderbolt will support multiple displays? If I hear a yes, I'm off to the Apple store.

<comment><USER30> I agree with you. It'd be great to be able to run 3 monitors from a closed mbp as a tower replacement. We'll have to see what kind of display adapters they come up with. I use a Diamond NV usb-2 video adapter and it works well for excel or mail, but if you are trying to actively use spaces it gets very laggy due to bandwidth constraints on usb2.0

<comment><USER29> Yeah, I've got the Diamond BVU195, too. Slows everything down, especially spaces and other things that use Core animation.

</comment></comment></comment><comment><USER31> I dread this because it makes the model I bought last year feel outdated! I can't see upgrading something like an MBP more than once every two years, though. That's reassuring since I know whatever that model is, it will be fantastic by current standards.

The only time my MBP breaks a sweat as it is, though, is on games: Half Life 2 and the PlayStation 2 emulator make the fans come on like it's trying to dry my hair.

I'm not 100% sold on my next laptop being an Apple, though. While my MBP is very impressive, it _is_ also a quite expensive piece of hardware... and I'm not impressed by Apple's policies regarding iOS and the App Store. But what is the alternative? It doesn't seem like there is any other manufacturer successfully designs elegant, high performance luxury notebooks.

<comment><USER32> Don't feel out of date. I've had the same macbook pro I bought 4 years ago. It's gone on trips with me, it's been knocked off the couch by my kid, and it runs my unit tests just as fast as my friend's newer model.

I paid $1900 for my core2duo macbook pro and got four years and counting out of it. Before that I was buying new Windows machines every two years. They were half the price, but didn't last as long.

My next machine, when this one dies, will definitely be a mac. :)

</comment></comment><comment><USER33> unfortunate that almost all the rumours were false \- hybrid ssd \- better battery \- higher resolution \- bigger trackpad \- thinner body

</comment><comment><USER34> I find the benchmark graphs on <http://www.apple.com/macbookpro/performance.html> frustrating. What is the baseline Apple is comparing to? I have a MacBook Pro with a core 2 duo 2.53GHz processor. I am sure that the 2.2 GHz quad-core processor on the new MBPs is faster, but by how much. How do the processors stack up when running single treaded applications? I suppose I'll need to wait for the third party reviews.

<comment><USER35> Apple always say what the stats are of the machines in the footnotes: <http://grab.by/98Pq>

</comment></comment><comment><USER36> Anyone know if you can boot from a Thunderbolt Connected drive?

<comment><USER37> The drive would have to either be a device that's already supported by Apple's EFI or it would have to include an EFI option ROM.

</comment></comment><comment><USER38> It seems as if for the last couple years every time Apple releases a new device it gets less expensive than the predecessor. I wonder if this is just an economy of scale effect, if as Apple grows they can afford to make less expensive computers, or if the lower prices are driven by falling hardware costs, or if they are deliberately driving the price down to grab a larger market share.

Either way the Apple product line up is just getting better and better in my eyes.

<comment><USER39> Aren't prices exactly the same as before?

<comment><USER38> Right, but now you are getting more hardware for your dollars.

<comment><USER39> Uhm, like everywhere else? Have you been alive those last thirty years? Hardware gets better, prices come down. This years MacBook is obviously and unsurprisingly going to better than last years.

</comment></comment></comment></comment><comment><USER40> > _Thanks to the new microarchitecture, the graphics processor is on the same > chip as the central processor and has direct access to L3 cache._

I've been waiting for this kind of thing for _years_. Up until the iPad, I never would've guessed it'd be Apple that beat everyone out the door. That kind of proximity has the potential to change how we use GPUs, because moving data back and forth can be so much faster.

<comment><USER37> Innovations in Sandy Bridge are due to Intel, not Apple. All PC vendors use the same Intel processors. CPU/GPU "fusion" sounds like a great idea until you realize that it necessarily involves a _weak_ GPU, which negates any benefit of the close coupling.

</comment></comment><comment><USER41> Interesting that they are now offering a SSD drive......does this mean they have now added the SSD TRIM command (or planning to add it in Lion)?

<comment><USER42> Not sure why you were voted down - I really want to see Apple support TRIM, too.

Does anyone know whether there's a next-gen interface standard that's being worked on that might supersede SATA, with more elegant support for flash memory (beyond SATA's hacky NCQ+TRIM)?

<comment><USER43> Built in garbage collection in newer SSD's makes it unnecessary.

</comment></comment></comment><comment><USER44> Somehow the shot of the side made me feel very old, I hardly recognized what half of the ports were. :(

</comment><comment><USER45> Interesting they've included an integrated graphics controller (Intel) but also a discrete ATI card with 1GB of its own memory.

I wonder if real-world gaming benchmarks will really have near the promised 3x improvements over the last gen MBP's...

<comment><USER46> hasn't Apple always done this?

<comment><USER21> The combo of built in and also discrete graphics is a relatively new phenomenon for them.

I remember back when they introduced the first MBPs with the two different built in graphics chips they were hyping it up, but the audience reaction was stony to say the least, because the previous MBPs had had a moderately good (for the time) graphics card, and built in graphics were perceived as being of a much lower capability, so that was a step backwards in power.

It might have given them great battery life (I seem to remember that as their big selling point), but it meant you couldn't play graphics intensive games on them.

</comment></comment></comment><comment><USER47> The new SDXC slot is limited to 64GB. That's an odd limitation given that Lexar has already released a 128GB SDXC card. The spec tops out at 2TB, so this slot could have provided a great way to load huge filesystems.

</comment><comment><USER48> Ask HN: Get an old 13in MBP or new 13in MBP?

The battery is more important to me than Thunderbolt.

<comment><USER16> Also consider that the new i5 in the 13" will be much better than the old Core2Duo.

</comment></comment><comment><USER49> The Mac I'm working on is the last Apple product I plan on buying. Not interested in further subsidizing their attempts to normalize restrictive computing models on their iOS platforms.

<comment><USER50> Ugh, that's the biggest reason i decided to be a first time Mac user.

</comment></comment><comment><USER51> I'm disappointed that the 13" still has no high DPI screen. I think Apple will start pushing higher DPI screens into their laptops when their OS becomes more resolution-independent.

</comment><comment><USER52> I just bought a MacBook Pro last month. Why can't they announce these kinds of updates so us poor fools don't get caught with old tech.

<comment><USER53> <http://buyersguide.macrumors.com/#MacBook_Pro>

</comment></comment><comment><USER54> sucks i bought a MBP two months ago...

<comment><USER55> Yea, I just ordered 4 Henge Docks for the current (last?) generation MacBook Pro lineup. Crap! I have a support question out to Henge to see if the ports line up or not.

BTW: I'm not affiliated with Henge in any way, just a satisfied customer. If you need a dock for your MBP, the Henge is it!

<comment><USER56> I'm excited about "Thunderbolt" because someone will finally be able to build a _real_ Mac laptop dock/port replicator.

Henge looks nice, but having a bunch of plugs sticking out from a piece of plastic seems like such a kludge.

<comment><USER55> It actually works quite well. I have it set up behind my huge cinema display and it looks kinda like a tiny tower back there. :)

</comment></comment></comment></comment><comment><USER57> They took out the AMD Radeon graphic card on the 13" unit?

Make up your mind, Apple.

</comment><comment><USER58> So who's getting ready to sell their old MBP?

<comment><USER59> Not me, my dual-core i7 already runs quite hot enough!

<comment><USER60> And has the feature of when running connected to a monitor (lid closed) to becoming a warm cat bed/magnet :)

</comment></comment></comment><comment><USER61> No USB 3.0 is surprising/bad.

<comment><USER62> Is there any technical reason they'd stick with USB2?

Politically, I think they want to skip it and push "Thunderbolt" as the better standard, since USB3 adoption is still pretty low. Just look at their comparison chart:

<http://www.apple.com/macbookpro/performance.html>

</comment></comment><comment><USER63> What's new?

<comment><USER46> Quad core i7 instead of dual core i7 in 15" and 17"

i5 processor in 13"

Thunderbolt 10Gbps integrated into DisplayPort connection

AMD/ATI Radeon graphics chips

<comment><USER64> Actually the older generation of core i7 were quad core too but had less cache than this generation.

      L2 Cache (per core):	256 KB
      L3 Cache:	4 MB

<comment><USER46> My i7 says 2 cores in Device Profiler but says 4 in Activity Monitor, fwiw.

<comment><USER65> Hyperthreading. 2 physical core, 4 logical.

</comment></comment></comment></comment></comment><comment><USER66> Will you be able to get a MBP with a builtin 3G-adapter yet? No? Ok, I'll just go back to Dell then.

Edit: While my comment may come off trollish, this _is_ a requirement for me when buying any mobile gear. That Apple still doesn't provide this for their top of the line laptops still baffles me.

<comment><USER67> 3G? What about 4G?

I'm a little irked that there's no system bus [1] slot, into which I could install a 3G/4G combo card.

However, in the past, I've turned out to be unwilling to spend the extra money on the dedicated hardware _and_ extra subscription. I'd rather have a (nowadays quite tolerably small) USB dongle that I can use on any laptop or even a battery-powered wireless access point [2] than the sleek convenience of something built-in that only supports what was available when I bought it.

[1] e.g. ExpressCard, though, since the 802.11 on the pre-unibody generations appeared to be mini-PCIe, I do wonder if there's hope for a combo wifi/wwan card, even aftermarket.

[2] I'm a huge fan of the Cradlepoint PHS-300

<comment><USER68> There is an ExpressCard/34 slot on the 17" MBPs, and there isn't really room for one on the 15" and smaller sizes.

<comment><USER67> I'm aware, but the 17" is just too huge. The 15" is just right, and I wouldn't mind it being larger, as in previous generations, if only from squarer corners.

I'm not convinced there's an issue of space _per se_ , since the SD card slot is only slightly smaller, and, even there, a card is not completely contained within the chassis when plugged in. Doing this with ExpressCard would be better than having none at all, IMO.

</comment></comment></comment></comment><comment><USER69> Its the first MacBook Pro that I have wanted to buy

<comment><USER46> What has made it such an improvement over the previous models?

<comment><USER70> He likes the shorter battery life.

</comment></comment></comment><comment><USER71> No BluRay combo drive.. I was very much expecting it to be present in the series update.

<comment><USER72> Apple will never include a Bluray drive. Period.

<comment><USER73> Why?

<comment><USER72> Apple won't add a new technology to a product for no reason. I can't think of a reason why the mainstream users of MBP would be interested in BluRay.

Moving forward, I hope Apple will get rid of the optical drive or offer an option to replace it with a 2nd HDD.

<comment><USER74> _I can't think of a reason why the mainstream users of MBP would be interested in BluRay._

For those of us without excellent internet connections, it's the only feasible way to get HD movies.

<comment><USER72> Oh, well. Maybe because I live in Singapore here where internet connection is damn fast I took it for granted.

</comment></comment></comment></comment></comment></comment><comment><USER75> In other news Dell XPS Laptops Add Premium Audio, 3D Video, Sandy Bridge Processors.

</comment><comment><USER76> TL;DR A year and a half after quad core i7 mobile processors become available (and two and half years after the first quad core mobile processors were released), the MBP gets them.

<comment><USER60> The first ones ran hotter/used more power than the case was designed for.

<comment><USER76> The reason was Apple wanted to sell older processors at a high markup. It was not as if Intel kept their roadmap a mystery or that Apple was not capable of designing a new case and by the time unibody 17" MBP came on the market Penryn had been out for more than a quarter.

</comment></comment></comment><comment><USER77> I remember when Apple used to have events for their notebook releases. Sigh.

<comment><USER39> They never had events for speed bumps.

<comment><USER78> I've never seen a more beautiful laptop. What can they really do besides include faster components and add features to software?

<comment><USER39> Ditch the two spinning drives and build in a SSD by default? That would allow for a redesign as well as a larger battery and would certainly warrant an event.

After the MacBook Air, it's only a matter of time until they do just that, maybe next year. (I can only hope. I'm actually seriously considering schlepping my 2007 MacBook Pro around another year.)

<comment><USER78> I understand that there are pretty HUGE technical differences between SSDs and traditional HDDs. But from a user perspective it's just a faster component that uses less power...

<comment><USER39> It's not the SSD per se, it's the saved space. A speed bump is a necessary but not sufficient requirement for an Apple event ;-)</comment></comment></comment></comment></comment></comment>


Where there's a webhook there's a way – Should we prefer SaaS with webhooks? - <AUTHOR> https://www.alooma.com/blog/data-integration-via-webhook?utm_source=hn&utm_medium=new&utm_campaign=webhooks <comment><USER2> This is misleading. The title here is not the title on the destination post, which is really an ad for this service. It does not address the question "Should we prefer SaaS with webhooks?".

<comment><AUTHOR> actually, this was a question we discussed in the office lately, we wondered if startups pick SaaS that support webhooks. I (it's totally my bad if this was misleading) was hoping to find our if people do actually weigh this in as they make decisions.

</comment></comment><comment><USER3> I thoroughly detest the use of the thinly weighted Raleway font on websites. I can barely read it despite having relatively good eyesight. Please ensure that you're using fonts of the appropriate weight for a given context.

The use of such a thin font as body text on a white background violates even the most basic accessibility guidlines.

<comment><AUTHOR> thanks, it's an important feedback.

<comment><USER3> Sorry if I sounded overly harsh. It just is a little annoying having to edit a page to be able to read it.

</comment></comment></comment><comment><USER4> Great post!

<comment><USER5> I'm guessing you work at this company? You should disclose your affiliation, especially since this is your first comment on HN.

[https://il.linkedin.com/in/ronihacohen](https://il.linkedin.com/in/ronihacohen)

<comment><USER6> Seconded: ronihcohen, expect to be punished on hn when you

a) don't disclose your affiliation (doing that goves you some leeway)

and

b) add nothing to the discussion.</comment></comment></comment>


Dutch city of Utrecht will start experimenting with unconditional, basic income - <AUTHOR> http://www.zmescience.com/other/basic-income-utrecht-26062015/

<comment><USER2> Similar post here : [https://news.ycombinator.com/item?id=9817209](https://news.ycombinator.com/item?id=9817209)</comment>


Stress Testing HTTP with Twisted Python and Treq - old-gregg http://blog.mailgun.net/post/stress-testing-http-with-twisted-python-and-treq/

<comment><AUTHOR> Speaking on using this with multiprocessing. AFAIK Twisted does not work well with multiprocessing – the details are not on top of my head.

So the simple way to make this work on a multi-core machine is to wrap the whole thing (including imports) into a function and spawn a pool of processes BEFORE you import Twisted, initialize the reactor, etc.

<comment><USER2> As long as you mean the multiprocessing module, that's correct. Alternatively, you can use the reactor's spawnProcess method for creating processes, or Ampoule if you want a process pool (which is nice because it works remote, too). Perspective Broker and it's object-capability successor, Foolscap, are more full-blown distributed computing tools, but they would work fine for this as well if distributed requests is what you want :)

Of course, all of this mumbo jumbo is probably only required if you can't manage to saturate that network link with a single core :)

</comment></comment><comment><USER2> In case anyone was wondering, this is wrapped in a cooperator for a reason. At every yield, the reactor is given a chance to act. That's important, because otherwise the reporting function would only ever run after you've made all the requests, which is probably not quite what you want :)

Also, you might want to replace the automatic rescheduling with twisted.internet.task.LoopingCall.</comment>


Moderna says COVID vaccine trial produced robust immune response in all patients - <AUTHOR> https://www.cnbc.com/2020/07/14/moderna-says-its-coronavirus-vaccine-trial-produced-robust-immune-response-in-all-patients.html <comment><AUTHOR> Tl dr; Moderna vaccine exits Phase 1 trials successfully.

"Clinical development is a three-phase process. During Phase I, small groups of people receive the trial vaccine. In Phase II, the clinical study is expanded and vaccine is given to people who have characteristics (such as age and physical health) similar to those for whom the new vaccine is intended. In Phase III, the vaccine is given to thousands of people and tested for efficacy and safety."

">30% of drugs entering phase II studies fail to progress, and >58% of drugs entering phase III studies go on to fail"

<comment><USER2> It has not exited yet. This is an interim evaluation at day 56. The whole trial will last a year.

</comment></comment><comment><USER2> Link to the actual study: [https://www.nejm.org/doi/full/10.1056/NEJMoa2022483](https://www.nejm.org/doi/full/10.1056/NEJMoa2022483)

</comment><comment><USER3> The significance here is that a paper with data has been published regarding the phase 1 trial[1]. Previously, Moderna had only reported some of the study results, and no study data.

A later study had been delayed, raising questions about what might have happened in the unreported cases during Phase 1.

It should be pointed out that the significance of the Moderna approach extends beyond COVID-19. If approved, it would mark the first time for an mRNA vaccine. Such vaccines don't need to gain entry into the nucleus, just the cell membrane. They don't modify the genome, just cause ribosomes to start making viral protein. Given that many diseases are caused by lack of functional protein, this could have implications for medicine beyond vaccines.

[1] [https://www.nejm.org/doi/full/10.1056/NEJMoa2022483](https://www.nejm.org/doi/full/10.1056/NEJMoa2022483)

</comment><comment><USER4> > Moderna's potential vaccine to prevent Covid-19 produced neutralizing > antibodies in all 45 patients in its early stage human trial, according to > newly released data.

> Earlier Tuesday, Moderna announced it would begin its late-stage trial for > its vaccine on July 27. The trial will enroll 30,000 participants across 87 > locations, according to ClinicalTrials.gov. Participants in the experimental > arm will receive a 100 microgram dose of the potential vaccine on the first > day and another 29 days later. Some patients will also receive a placebo.

Looks promising.</comment>


TotalSpaces for OSX brings back grid Spaces and cube transitions - <AUTHOR> http://totalspaces.binaryage.com/

<comment><AUTHOR> The best part for me is that it fixes the painfully slow animations when using ctrl+arrow</comment>


User-defined Order in SQL - <AUTHOR> https://begriffs.com/posts/2018-03-20-user-defined-order.html <comment><USER2> Having run into this problem a few times now, Approach 1 is unfortunately best. Two reasons:

(1) If updates fail, you don't get a resulting broken state

(2) The size of the lists is not that large (<50), so the extra writes are not that expensive.

Essentially, with any variation on fractional updates (where only 1-2 rows are updated per list update), the client is sending to the server "move item a to position x". Then, shortly after, "move item b to position y", etc. And if any intermediate step fails, the server and client are out of sync.

If, instead, the client message is "here is the new state of the list: (a,b,c)" and the server updates, failed requests only leave the state temporarily out of sync. The client will continue to send the complete correct state at each update.

<comment><USER3> I've run into this problem when keeping a single large (100000+) list sorted. In my case it was very important not to change the sort value on rows that didn't need to.

I had considered most of the solutions listed in the article except for the true fraction method. I believe that solution was explored by the author as they thought floating points were somehow solving a problem that couldn't be solved by integers. I settled on an approach that is essentially Solution 2 but using integers instead, each time bisecting the other two integers. The important aspect is that when inserting at the head or tail of the list, you bisect between MININT (-2^63) or MAXINT (2^63-1) respectively.

<comment><USER4> have you considered using a string and have them sort lexographically? To insert, you have to create a new string that sorts between the two, which this library proposes an algorithm for: [https://github.com/fasiha/mudderjs](https://github.com/fasiha/mudderjs)

<comment><USER5> This was my thought, too. Use a point-based versioning-like scheme as a string (1.1.25, 1.1.26, 188.8.131.52, 1.2, etc). You will have to worry about adding prefixed 0s, though, as powers of ten are increased if you want it to sort correctly, and of course there is presumably a hard-limit on the size of the string.

It might be possible to have a table that keys to the first that has a level and a value. For 126.96.36.199 above, it would have the rows (1, 1), (2, 1), (3, 26), (4, 1) (with keys to the table rows). Not sure exactly how to write the sql to join it all together and sort it, but it seems possible, at least if you have some known maximum number of levels.

<comment><USER4> if you use the full unicode space as alphabets, you can probably get a lot of mileage out of just having a 255 char column (or bigger, if expecting a large number of items constantly changing). Most databases will have a inbuilt way to lexographically sort text, and so you won't have to do anything extra. The smarts is in the computation of the ordering string.

</comment></comment></comment></comment></comment><comment><USER6> > Robust? Yes. It would take virtually forever to run out of space through > repeated list reordering.

I think the author missed a pathological case with using the Stern-Brocot tree.

The goal is to sort each item with a score. Then to insert something between two items, you calculate a new score that is "between" their existing scores.

\- Option 1) Take the average of the two score a/b and c/d:

      (ad+bc)/(2bd)

\- Option 2) Take the mediant([https://en.wikipedia.org/wiki/Mediant_(mathematics)](https://en.wikipedia.org/wiki/Mediant_\(mathematics\)) ):

      (a+c)/(b+d)

We don't want to use the first option, the _average_ because almost by definition you would require at least another bit of precision in the denominator for each insert due the multiplication by 2. This limits you to a meager ~64 repeated inserts before overflowing the denominator.

So the _mediant_ is better because the precision requirements is limited by the number of times you can add instead of multiply. This might seem to grow a lot slower at first. And the author even showed that if you're repeatedly averaging 0/1 with the new score, you would get the pattern 1/2, 1/3, 1/4, 1/5, 1/6, .... Which means you can handle up 2^precision number of inserts which is much better than before.

But this only applies to inserting to front (medianting with 0/1) or back (medianting with 1/1) because this will only add a 0 or 1 each time.

If you go down a zigzag path down the middle of the tree instead, you can get the two numbers added to be much closer in magnitude and explode. For example: 1/1, 1/2, 2/3, 3/5, 5/8, 8/13, 13/21, 21/34, ... (it's fibonacci!).

So essentially you get the same thing as the averaging case where the precision required roughly doubles(1.6180339887...) at each step and it will overflow quickly.

This isn't a purely theoretical edge case either. The example from before can be realized by repeatedly inserting between the last two items inserted, which arises naturally if you're repeatedly adding to the middle of a list.

<comment><USER7> Exactly. If we're storing the positional value into 64-bits then there must be some patterns of 64 inserts which don't fit.

The decimal solution is really not bad. You could improve on it by not taking the midpoint between the two values you're inserting between, but rather another point which doesn't require an extra digit, when that's possible, but really that's very likely to be an unnecessary optimisation. So continual insertion on the end might give 0.5, 0.8, 0.9, 0.95, 0.98 0.99, 0.995...

<comment><USER6> That's a really elegant way to put it. Yay for information theory.

</comment></comment></comment><comment><USER8> Vadim Tropashko wrote a book "SQL Design Patterns" that, among others, presents non-trivial approaches to storing trees and graphs in SQL databases. I highly recommend it. The PDF version is free here: [https://vadimtropashko.wordpress.com/%E2%80%9Csql-design- pat...](https://vadimtropashko.wordpress.com/%E2%80%9Csql-design- patterns%E2%80%9D-book/about/)

</comment><comment><USER9> Throwing my qnd solution to this problem in here.

      id | name | at | date_modified
       1 | foo  | 1  | 2018-03-21 12:00
       2 | bar  | 2  | 2018-03-21 12:01
       3 | baz  | 3  | 2018-03-21 12:02

Updating the ordering is a matter of updating a single row with it's new intended position and triggering a date_modified update.

      -- Move last item to top
      UPDATE ordered_set SET at = 1, date_modified = NOW() WHERE id = 3;

Retrieving can easily be done using a multicolumn order by;

      SELECT * FROM ordered_set ORDER BY at ASC, date_modified DESC;

      id | name | at | date_modified
       3 | baz  | 1  | 2018-03-21 12:10
       1 | foo  | 1  | 2018-03-21 12:00
       2 | bar  | 2  | 2018-03-21 12:01

If you want to explicitly get the current ordering as a sequence number some databases have ROW_NUMBER() OVER (ORDER BY <same as above>) as a potential solution.

That said, this seems like a pretty trivial non-issue. You wouldn't want to do this on very large datasets, and updating many rows for small sets performs just fine in my experience.

<comment><USER10> If you have two rows with at=1, how would you insert a row between them?

<comment><USER11> You just convert the datetimes to integer timestamps, then find the midpoint between the two entries... wait this sounds familiar :)

</comment></comment></comment><comment><USER12> At the start of the article, elegance I defined as:

>The solution shouldn't require complicated PL/pgSQL functions or parsing lists of numbers in strings.

Not to be overly pedantic, but if creating an extension that implements a new data type isn't "[requiring] complicated PL/pgSQL functions", I don't know what is.

<comment><AUTHOR> One of the benefits of Postgres is having user-defined extensions like this that are effectively drop-in. Yeah, it's a trade-off. The whole submission is a discussion of the trade-offs between various implementations. One I'd make is using a custom datatype rather than custom PL/pgSQL functions (and I've written my share of those, including in this domain—they can be tough to get right in all of the edge cases) as the type is likely more efficient and correct.

</comment></comment><comment><USER13> My immediate thought was to store the information in a doubly-linked list type structure in SQL. Obviously the space efficiency is not optimal, but I am surprised that the article didn't even point this out.

The table could be designed with a unique PK, the todo item, and some binary or bool field to determine first (head) and last (tail). You would then add 'previous' and 'next' fields that would be updated for insert/delete/updates.

<comment><USER14> The problem with that is that it kind of breaks SQL to traverse the list.

Let's say you have a 1M element list, and you want to get the first 100 elements. Normally you would write something like:

      > select top(100) * ... order by itemPosition asc

To walk a linked list, you'd either have to:

\- walk it on the client, one query per element, resulting in way too many roundtrips to the server.

\- get all the data in one go and then walk it on the client. Here we're selecting and returning 1M records and throwing most of those away.

\- walk the list in the database with a recursive common table expression. CTE's aren't appropriate for this; it'll be slow, and we'll run up against a recursion limit for large lists.

\- walk the list in the database with cursors/loops/etc. Very icky, and breaks composability.

<comment><USER13> You are right and make many succinct points. I imagined this in the context of the todo list example given in the article, and assumed there would be a sane limit on items in a list, and that each record in the database would be tied to a list ID, or user ID, or some other method to allow only pulling the items that are actually in the list.

That being said, this would not alleviate the problems you mentioned when walking the list. It would need to be arranged once retrieved either by the client, or by the backend before passing to the client. I imagined that I would traverse the list recursively to order it before passing it off to the client. This should take O(n) time, since we only need to traverse the list once, and we haven't retrieved from the database any unrelated rows (list ID, user ID, etc - there has to be some boundary in place).

</comment></comment></comment><comment><USER15> What's it called when the primary key is also a "foreign" (but not really) key into the same table? Anyway just do that. Each Item has a "PrecededByItemId" value. To insert X between A & B, just make X preceded by A and B preceded by X. Or probably better, go the other way (FollowedByItemId). It's the SQL version of a linked list. Efficient? Yes they're integers and an insert takes only two changes. Robust? Yes, infinite inserts possible. Elegant? Beats any of that complicated stuff in the article, unless I'm missing something. I suppose you could run out of integers but if your to-do list is that long, well...

<comment><AUTHOR> Would you elaborate on how to select data in the custom order efficiently? What you're describing can't be easily indexed, if I understand you correctly. The strategy outlined in the submission ensures minimal table rewrites on updates (insertion, reordering, deletion) as well as efficient retrieval.

<comment><USER16>
      with recursive todo_list_sorted as (
      	select
      		*
      	from
      		todo_list tl1 where prev_id is null
      	union all
      	select
      		tl1.*
      	from
      		todo_list tl1
      	join
      		todo_list_sorted tl2 on tl1.prev_id = tl2.id
      )
      select * from todo_list_sorted

<comment><AUTHOR> Yes, there are ways to do it. The question is how to do so _efficiently_. Recursive queries don't benefit from indexes as efficiently as, for example, the solution outlined in the submission.

</comment></comment></comment></comment><comment><USER17> For most practical uses, something like the transaction described in Approach 1 should be good enough.

It has no limit imposed by precision, the benefit of a compact and well- supported storage format (just one BIGINT) will probably compensate for any inefficiency caused by updating several rows, and the multiple steps are not fragile at all if you trust PostgreSQL to handle trasactions properly. If you're really worried, just increment the sequence _before_ you update a bunch of rows, not afterward.

But what if you have millions of users reordering billions of todo items?

Well, change the uniqueness constraint to (user_id, list_id, pos) or something composite like that. Only reorder items belonging to the same list owned by the same user. If a person is manually reordering items, there can't be too many items in any given list in the first place. There's no need to touch billions of other items belonging to other lists and other users.

<comment><AUTHOR> Rewriting even a sublist generates unnecessary updates—on both the table and associated indexes. (While the article doesn't specifically describe using sublists, this is likely for pedagogical reasons: he doesn't include surrogate keys either. The pathological case of a full table rewrite on any update would be avoided in any event.)

As for storage, the rational datatype described in the submission has the same size as a BIGINT (64 bits), so there's no storage disadvantage there.

</comment></comment><comment><USER18> I encountered this problem on what must have been the first web programming project I ever tried and it's haunted me since. I still think all the time about ways to solve this issue. It crops up all over the place.

I'll never brush aside the SQL-object impedance mismatch like many people do, as something to work around in an otherwise great system that you can adapt to anything. SQL and relational modeling is an abstraction that leaks way too easily when it comes to these sorts of "human" use cases, wherein you want to do something that's not perfectly rectangular like arbitrary sort. SQL probably didn't leak like this when used for enterprise invoice-orders that it was designed for, but using it for applications where a touch screen is the primary user input that motivates the model: I'm not so sure it holds up.

</comment><comment><USER19> Related is modeling trees in SQL, which has been discussed on HN: [https://news.ycombinator.com/item?id=13517490](https://news.ycombinator.com/item?id=13517490)

</comment><comment><USER20> I've had success just using letters between a and z.

\- The first item added has rank "m"

\- If I want to add an item before that, it's m-a/2 (somewhere around "f")

\- If I want to put something between "b" and "c" that's "bm"

\- The database can sort it just fine.

<comment><AUTHOR> This is the "what about leaving room?" variant described in the submission with either (a) a smaller range of available values if you're limiting yourself to single characters and/or (b) less efficient storage.

<comment><USER20> It's less efficient storage-wise, sure, but there's no "occasionally take the hit of shifting" problem.

<comment><USER21> Your strings could get REALLY long.

Suppose you have 3 items:

        id  pos  name
        1   'a'  apple
        2   'm'  banana
        3   'z'  cherry

You move cherry to the middle of the list. Now, you have:

        id  pos  name
        1   'a'  apple
        3   'g'  cherry
        2   'm'  banana

Now you move banana back to the middle of the list, which gives you this:

        id  pos  name
        1   'a'  apple
        2   'd'  banana
        3   'g'  cherry

Keep doing this, and the gap keeps shrinking. You need to make pos longer to be more precise to fit in the gap. Eventually you run out of space in your string field.

<comment><AUTHOR> I read their response as not limiting themselves to a single character (which you have too, if I read you correctly). If they use a text column, it's practically arbitrarily large. I believe the limit is around 1GB in Postgres. They've also dismissed concerns of storage, so it's a price they're willing to pay.

</comment></comment></comment></comment></comment><comment><USER22> Why not strings? For two different strings A and B it's trivial to build one that is between them in alphabetic order.

<comment><USER21> That is equivalent to the "Arbitrary Precision" section under Approach 2.

</comment></comment><comment><USER23> Simple solution: Don't use `unique`.

(Let's assume that your db is very fast, and let your app update all needed positions on save)

<comment><USER24> Yes! I'm reading through all this discussion and thinking "why are these people so bent on overthinking such a simple concept"? Also using text as the sort order solves most of the issues people are bringing up.

<comment><USER25> Pretty much every implementation of arbitrary sort order I have seen uses varchar for this very reason, and requires none of the cleverness in the article.

</comment></comment></comment><comment><USER21> There's an O(log N) data structure for this. Unfortunately I don't know the name of it.

Keep a (balanced) binary tree where each node contains a pointer to one of the items you want to keep ordered. (In this case, each node has the primary key of one of your database rows.)

Every node also contains an integer which tells the size of that subtree (the tree whose root is that node).

To enumerate the entire list, do an in-order traversal of the tree.

To find the Nth item in the list, check the left child to see if it contains enough nodes that your Nth item would be in that subtree. If so, go left. If not, it's either the current node (if off by exactly one) or you go right. But if you go right, you must reduce N by 1 to account for the current node and also reduce N by the size of the left subtree.

To enumerate a range, you basically combine the previous two.

To move an item, just move it in the normal way you'd delete/add a node in any regular tree, but remember to update the counts stored inside any nodes that are affected, i.e. all parents/ancestors of any node that is removed or added. If you delete an internal node, you need to be careful to preserve the order of everything, but there are ways to do that by exchange

This data structure can definitely be modeled in database tables. Whether the operations on it can all be expressed in SQL is an interesting question. It might be impossible, or it might just be really tricky.

</comment><comment><USER26> While it's vendor-specific, SQL Server has a built-in solution for it: [http://technet.microsoft.com/en- us/library/bb677173.aspx](http://technet.microsoft.com/en- us/library/bb677173.aspx)

<comment><USER27> It doesn't do what I supposed it would do.

> A column of type hierarchyid does not automatically represent a tree. It is > up to the application to generate and assign hierarchyid values in such a > way that the desired relationship between rows is reflected in the values. > Some applications might have a column of type hierarchyid that indicates the > location in a hierarchy defined in another table.

</comment></comment><comment><USER28> why not use a linked list made of self references?

      id | text               | prev | next
       1 | "steal underpants" | NULL | 2
       2 | "???"              | 1    | 3
       3 | "profit"           | 2    | NULL

For the use case of rearranging and inserting at arbitrary positions, wouldn't a linked list be ideal?

<comment><USER29> For the query to retrieve the items back in order, logically it goes like:

       select * from (items) order by `prev`  --`next` doesn't help
       -- also hope that NULL is at the beginning

So it's no better than Approach 1. in the article, but is actually worse with the extraneous column in storage and head scratching for the next maintainer of the system.

Exercise for the reader: what happens when item id #3 is moved in between item id #1 and #2, how many update statements are needed?

<comment><USER16> No, this query doesn't retrieve the items in the correct order in general. It only works for the particular data in GP because the row ordering coincides with the user's ordering there. Try ordering by `prev` on the table below, which is a different valid representation of "steal underpants" -> "???" -> "profit".

      id | text               | prev | next
       1 | "profit"           | 2    | NULL
       2 | "???"              | 3    | 1
       3 | "steal underpants" | NULL | 2

<comment><USER29> Yep, that's fine - highlights the complexity of implementing the ordering in a linked list. The fundamental thing is that both columns aren't needed, only one column is needed to determine the order.

</comment></comment></comment></comment><comment><USER30> I must admit, I don't like the the use of floats/decimals/rationals in this way. They are unfit for sorting.

Say I wanted to present a list of users with their top three to-do items, that's impossible using the above method.

        select
            u.user, item1=i1.text, item2=i2.text, item3=i3.text
          from
            users u
              join items i1 on i1.user = u.user and i1.pos = 1
              left join items i2 on i2.user = u.user and i2.pos = 2
              left join items i3 on i3.user = u.user and i3.pos = 3

Them being integers means I can rationally reason about them. I can also infer their position easily. With floats, I don't know where pos=3 is without counting how many have a lower number.

Floats only solve two issues: Making inserting easier while still being able to use `order by`. But reasoning about your data becomes a lot harder.

<comment><USER31> > Say I wanted to present a list of users with their top three to-do items, > that's impossible using the above method.

Not really:

        SELECT u.user, i.text
        FROM users u,
        LATERAL (SELECT * FROM items WHERE items.user = u.user ORDER BY items.pos DESC LIMIT 3) i;

(You can also make these columns instead of rows, but as someone already pointed out, you'd usually not do that in SQL.)

<comment><USER30> You are not wrong, although your example would not work in every SQL dialect (even when rewritten). Sybase's T-SQL does not have equivalent for LIMIT.[0]

My point being, there are some issues with regards to data purity and reasoning, particularly if you want a system where users can build custom reports.

And I just wish the original article highlighted that using floats _would_ have these issues, and if writing SQL like this is important to you, then you might want to reconsider.

(As for your note in brackets, where I work, SQL is basically used as a scripting language. So we would do my example in SQL.)

[0] Yes, I know there is 'set rowcount', but you cannot do that within a sub select.

<comment><USER32> > Sybase's T-SQL does not have equivalent for LIMIT.[0]

Are you looking for SELECT TOP 3 ...?

<comment><USER30> First available from 12.5.3. And I cannot be certain we have that version or a newer running.

But you are right, I should have clarified that.

</comment></comment></comment></comment></comment><comment><USER33> Another approach is that users often want the newest items listed first, but occasionally want exceptions. Thus, have a "sort date" with a time portion that governs the order. The sort-date defaults to the data entry (add) date/time. The display date and sort-date may differ, if present. A sort-date doesn't work for everything, but is simple, intuitive, and effective for news- or blog-like content.

</comment><comment><USER34> This is pretty cool!

Honestly I don't think there is a "best" solution here. Even in a "regular" programming language where you can easily use any data structure, it's not obvious which is best for maintaining the order.

Updating the order "value" of all the rows = moving a value around in an array (causing you to also shift a bunch of other values around).

Storing the ID of the row that should show up next in the list (not mentioned in the article, but mentioned in the comments below) = moving nodes around in a linked list.

Creating a new index that will fit in between two existing rows = inserting a value into a tree (because of the index).

It is a little bit trickier in a database, just because, no matter what you do, you also have to pay the price of putting something into a tree as well. Still... I can think of situations where I'd use any of these techniques. In general, this is not a problem with a clean solution for every use case.

</comment><comment><USER35> At Pinterest, we expanded the precision of our existing timestamp-based sequence column to accommodate reordering:

[https://medium.com/@Pinterest_Engineering/how-we-built- rearr...](https://medium.com/@Pinterest_Engineering/how-we-built-rearranging- pins-b11052e95c8b)

</comment><comment><USER36> What about storing all the item ids in a text array (on another table, one related to these items somehow)?

      int[]

If the items are being ordered manually by the user, then they cannot be of a very large length.

<comment><AUTHOR> That may meet your needs. You'll lose some of the benefits of database constraints and indexing.

And while the submission uses it as an example, the use case of reordering items in a list needn't be limited to lists manually ordered by a user.

<comment><USER36> It's not "an example", it's the entire point of the article.

</comment></comment></comment><comment><USER37> Your to-do list is how big?

</comment><comment><USER38> I have the same problem right now.

I use an unsigned int "pos" column in the db.

For a new list the "pos" starts with 1..n

When the user changes the order I find the largest "pos" in the list and with a for I set largest + n "pos" for every item.

There will be about 20 items in a list but let's just assume it's a 1000, so with this I'm good if the user edits the list less than 4 294 967 295 / 1000 times.

And if the largest + count(list) < lowest I can set the largest to zero and start over the pos with 1.

</comment><comment><USER39> I implemented something like this in a naive way. I took the modified date (previous default sort order) and stored the unix timestamp * 100 in a 64 bit indexed SortVal column. Drag-n-drop sets the SortVal +/-1 relative to the item it is being dropped against. There's only ~30 items per page so I figure it won't break except in the pathological case.

Curious if there is some obvious flaw with this plan or if I really need the power of true fractions.

<comment><USER40> How do you handle situations where two items (lets call them A and B) are both moved before a third item C?

Then wouldn't A and B both have a "SortVal" that's 1 less than C's SortVal? That would make your SortVals non-unique and order arbitrary.

<comment><USER41> Well, only if your UI allows dragging two items at once. If you reorder multiple items, well, I suppose you can resolve it by passing some relative position. If you want to squeeze something in-between reordered items, then -1 probably is not a good choice, but more like calculating some middle value between previous and next item.

<comment><AUTHOR> What would the timestamp represent? Are you providing a timestamp which encodes the position somehow, or using CURRENT_TIMESTAMP? Updating the timestamp for all of the rows in the (sub) list? How does this permit you to reorder the items in the list?

<comment><USER41> I haven't implemented this, just brainstorming.

Timestamp would only represent position and enables to put something in between, rather than an integer which adds +1. If put A (timestamp = 100) between B (timestamp = 200) and C (timestamp = 300), just set that order value to middle (150). Naive

It actually looks the same as "What about leaving room?" and, yeah, introduces complexity when you organize items for too long.

</comment></comment></comment></comment></comment><comment><USER42> Interesting, thanks for posting,I wish Postgres would add a native rational type to core, would be far more useful than the umpteen other esoteric types they have. How battle tested is your rational number datatype? I just use 2 columns for fractions and some udf's, is there a huge advantage with a single column? Did you look at the pgmp extension includes !mpq rational type based on GMP library? Looks v powerful but License put me off.

</comment><comment><USER43> You can also use ORDPATH[1], which is built for tree structures but should work just as well for a flat list as it does support "in-between inserts."

[1]: [http://www.dbis.informatik.hu- berlin.de/fileadmin/lectures/W...](http://www.dbis.informatik.hu- berlin.de/fileadmin/lectures/WS2011_12/NeueKonzepte_Vorlesung/ordpath.pdf)

</comment><comment><USER44> There are a lot of solutions to this problem, each with their own merits.

Personally, I'd probably add a second table with FKs to the todos table PK. That allows you to remove the calls to nexval. It doesn't remove the need for a processing language, but it's a much cleaner solution, I think.

</comment><comment><USER45> The problem of swapping two entries in such a list is also quite funny.

</comment><comment><USER46> The author has imposed some rather arbitrary constraints on possible solutions, probably for pedantic reasons. I'd prefer to look for ways to use an index.

</comment><comment> yoz-y What about using linked lists? If the write performance is more of a concern than read performance then it is a possible option too.

<comment> FLUX-YOU It's cheaper to write to the DB when doing ordering updates, but you lose easy 'order by sort_order' in queries since the nodes you're linking to will likely be primary keys that are in a different order than the creation sequence. This probably has index ramifications but I don't know enough about them to say.

That's fine if you sort everything on the front end though. It's product- dependent.

Like someone else said, usually these kinds of lists are small enough and PCs/databases are fast enough for it to not really matter.

</comment></comment><comment><USER47> And with a graph database this would be trivial.

<comment><USER48> You say that as if it solves all problems (e.g. fast reads) at the same time.

You could very easily build a link-list type datastore in SQL and use a CTE to build the list, but if your main use-case is viewing the list rather than updating the order, then it's a slower compromise than something like the solutions OP was discussing.

</comment></comment><comment><USER49> Use a blob. Do the reordering in the program. Write the todo list (in order) into a blob with some delimiter between each item.

Pro: simple

Con: might as well use a flat file

</comment><comment><USER50> arrays ?

</comment><comment><USER51> I think I would simply use json to store the list in a field. Makes it very easy to read and replace the json but then again, I would not be using SQL for this so I'm cheating.

<comment><USER52> It depends a lot on how many items are in the list. If there are less than 10000 items in each sorted set you should probably let the client handle the ordering and just do bulk inserts with order index in a denormalised JSON col or something, but after that you probably want something db-native.

<comment><USER53> What is the use case where your app would need to let the user sort such a large list? I cannot think of any use case. At that point I would let the user set the order field (integer) as it would not be feasible to have a drag and drop UI anymore. That would be cumbersome to use.

<comment><USER54> It's not 10k but I have Spotify playlists with 4k+ tracks (queue of new albums I listen to as radio at the office) and I always fiddle with the order of the albums at the tail of the playlist.</comment></comment></comment></comment>


Ask HN: How do I develop polyglot thinking? - <AUTHOR> I am self taught for the most part when it comes to programming. The first thing I learned to write in C++ was a for loop. for (int i = 0; i <10; i++) { ... }. That's imperative. Now I write SQL for a living and still find myself not thinking in a very relational way. I have desires to learn what I can from the functional languages but have a hard time wrapping my head around the concepts to gain anything of value from it. My question: how do I enhance the way I think to be able to think in different domains and become a better engineer? <comment><USER2> I think the best way to internalize the "magic" that is possible w/ programming paradigms such as functional, logical, relational, etc. is to learn enough about how compilers and interpreters work that you can see how these things are implemented (what is really going on) and being able to use those kind of tools to create either internal or external DSLs that use those ideas to solve your problems.

Learning "yet another" programming language will probably teach you less than learning how to implement a programming language.

</comment><comment><USER3> In my experience it really just comes down to doing work in them. I started programming with Java and initially found it difficult to break the OO style when moving into functional languages. What I ended up doing is just finding a personal project and committing to doing it in a new language. Years later, I find that my thoughts are tailored to the problem rather than the language. You can't really _learn_ a language from a book or the docs, you have to actually do it.</comment>


There is one, and only one strain of SARS-CoV-2 - <AUTHOR> https://www.virology.ws/2020/05/07/there-is-one-and-only-one-strain-of-sars-cov-2/ <comment><USER2> I don't think the article addresses the point right. Yes, there is only one strain of Sars-CoV-2 as the definition of a strain is a strict scientific term. Nevertheless, there are different clades [1] of Sars-CoV-2, which are characterised as organisms with a common ancestor [2]. This doesn't has to imply a changed property, like infectivity or mortality, but it implies common heritage which is of course of interest. You can see it nicely in the the phylogenetic tree of the sequenced genomes [3].

[1] [https://onlinelibrary.wiley.com/doi/abs/10.1002/jmv.25902](https://onlinelibrary.wiley.com/doi/abs/10.1002/jmv.25902)

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

[3] [https://nextstrain.org/ncov/global](https://nextstrain.org/ncov/global)

<comment><USER3> This is all correct, but the importance here is to combat the misinformed titles everywhere talking about multiple different "strains" going around, as well as that one damn Chinese paper (now retracted) claiming two different strains with different mortality rates.

Put more simply, two samples of virus can be of the same "strain" even if they aren't _exactly_ the same sequence. This is because replication can sometimes make errors on segments of the genome that do not impact functionality - moreover these same irrelevant loop segments are not error-corrected either, so mutations are common - despite not modifying the properties of the virus. These irrelevant mutations are actually very useful for tracking the virus spread.

A virus mutation becomes a different "strain" when the change is meaningful for the viruses interaction with the host or the environment.

SARS-COV2-2 is a type of virus that does error correction (unlike flu), so the rates of mutation are extremely low. This is good news because if means a vaccine will work, and we won't need a yearly one - like the flu.

<comment><USER4> > A virus mutation becomes a different "strain" when the change is meaningful > for the viruses interaction with the host or the environment.

Of course, that also means that detecting different strains is dependent on understanding those interactions and where they differ. If the post-infection cluster of pediatric multisystem inflammatory syndrome in NYC isn't just NYC being better at identifying that effect, it could well be a sign of a different strain with meaningfully different interactions with hosts. (It could still be a variety of other things, too.)

<comment><USER5> > If the post-infection cluster of pediatric multisystem inflammatory syndrome > in NYC isn't just NYC being better at identifying that effect,

Doctors in the UK were seeing this throughout April, and issued an alert in late April: [https://twitter.com/PICSociety/status/1254508725227982848](https://twitter.com/PICSociety/status/1254508725227982848)

<comment><USER3> Different groups of doctors around the world are noticing different aspects of the virus. This is normal with a new virus, and does not indicate that there are multiple strains.

<comment><USER6> I know you didn't assert it, but important to keep in mind it doesn't show the contrary either - ie nor does it show it's not [now] multiple strains.

</comment></comment></comment></comment></comment></comment><comment><USER7> I'm not an expert in this field or any related fields. I am, however, in a field where I have to frequently communicate on technical topics to a nontechnical audience. The following is a critique of the technical communication in this article, not of the science.

There are some more nuanced claims which are made or hinted at:

1\. There's not adequate evidence to prove a difference in mortality between the L and S variations of the virus.

2\. There's not adequate evidence to prove increased viral transmission over time of the virus.

And if your definition of the word "strain" is "reserved only for special changes that confer a new property to the virus", then both of those would be arguments that there's not adequate evidence to prove the existence of different strains of the virus.

However, is the definition of the word "strain" really the important point you want to communicate? Either point 1 or 2 could have been made without talking about the word "strain" (note how I sidestepped the whole strain/isolate issue by using the word "variation"). I would argue that either of those two points are much more important than the meaning of the word "strain".

Sure, using the proper jargon is a strong indicator of expertise in a field. But jargon arises from expertise, not the other way around. Correcting people's jargon before they have the adequate mental framework to differentiate between the terms just creates conflict and is counterproductive.

<comment><USER8> Yes, science can be pedantic at times, but I do believe that it's necessary to describe terms before you discuss why they're important. For me, this article reads exactly as I was taught to write technical papers. It builds upon the definition of "species" to make an argument against the reoccurring claims that this virus is mutating to become more transmissible. Of course, I did study microbiology at university, so I can see how others might find it too focused on the jargon.

What this pandemic has taught me over anything else is that wielding scientific terms without proper understanding is damaging to progress of science itself. It becomes difficult to tease apart legend from fact, especially for those not trained to do so. I go crazy every day listening to half-baked hypotheses and conspiracies that don't understand the foundations for the things they're claiming.

All this said, Dr. Racaniello is very gracious and humble. He has dedicated his life to teaching, both in the classroom and through his podcasts. I highly suggest sending him your concerns about his discourse and subscribing to his podacast TWIV [0]. He and his colleagues respond to every email at the end of each podcast.

[0] [http://www.microbe.tv/twiv/](http://www.microbe.tv/twiv/)

<comment><USER7> > Yes, science can be pedantic at times, but I do believe that it's necessary > to describe terms before you discuss why they're important.

Yes, it's necessary to describe terms, but there's a big difference between giving a definition of "strain" at the beginning of your talk, and explicitly correcting everyone who has misused the term. One is necessary for clarity, the other is unnecessary and combative.

> What this pandemic has taught me over anything else is that wielding > scientific terms without proper understanding is damaging to progress of > science itself. It becomes difficult to tease apart legend from fact, > especially for those not trained to do so. I go crazy every day listening to > half-baked hypotheses and conspiracies that don't understand the foundations > for the things they're claiming.

I don't think that's true. It's not the terms being misused. You can still say the wrong thing with the right terms.

Let's take a summary of the story that was going around for a bit, "There are two strains of coronavirus, the S strain and the L strain. The L strain is more deadly but it isn't spreading as quickly because sufferers are more likely to be identified and treated/quarantined."

That statement is wrong, because there isn't enough scientific evidence to declare any of that. But is the problem the misuse of the word "strain"? I don't think so. Consider the following: "There are two variants of coronavirus, the S variant and the L variant. The L variant is more deadly but it isn't spreading as quickly because sufferers are more likely to be identified and treated/quarantined."

I'm not an expert in the field, but as far as I know, the word "variant" doesn't have any specific meaning that would say it's being misused here. But nothing has changed: the summary is still 100%, completely wrong, because there still isn't adequate scientific evidence to say there are different variants with different mortality rates.

And, critically, even knowing the definition of the word strain, I can still say the first version of this incorrect statement and be wrong, not because I'm misusing the word, but because there isn't adequate scientific evidence for what I'm saying.

> All this said, Dr. Racaniello is very gracious and humble. He has dedicated > his life to teaching, both in the classroom and through his podcasts. I > highly suggest sending him your concerns about his discourse and subscribing > to his podacast TWIV [0]. He and his colleagues respond to every email at > the end of each podcast.

I'll do that.

</comment></comment></comment><comment><USER9> There are several downvoted comments here attempting to express the common idea that this virus has impacted different regions in very different ways. That observation alone is not an argument against there being only a single strain of this virus, but it is a valid observation in its own right. There are plenty of half-explanations that rely on cultural differences (hand shaking, masks), climate (heat, humidity), and various other factors, but so far no one has proven _precisely_ what factors make the biggest differences. That piece of information is one of the most valuable things in the world right now and we do not have it.

The other big factor is the different government responses, but these are all over the map. Specifically, the lack of a lockdown does not always equal a high rate of transmission, and the presence of a lockdown does not always result in a low enough rate of transmission to avoid a crisis. This is something we should all be curious about.

<comment><USER10> > lockdown does not always result in a low enough rate of transmission to > avoid a crisis.

On that topic, Cuomo just declared that among the last batch of infected people in NY, more than 80% were apparently respecting the lockdown and staying at home and we have no idea how they were even contaminated. Puzzling.

<comment><USER11> Generally lockdown in the US has been pretty loose. Many people have left their homes, and had the opportunity to be exposed.

I also think there is a likelihood that between presymptomatic/asymptomatic transmission, and the possibility of 2 week incubation this seems like a nightmare to track transmission.

A friend who had SARS-cov2 was sick for 30+ days. So it's not clear to me that a mild infection would be over in 14 days.

<comment><USER12> If it's a mild infection, by definition, the immune system has squashed it. If it didn't, the virus would take hold; it's not a latent viral infection like herpes.

Edit: okay, okay, I didn't specify "a mild infection that stays mild and goes away". We know complications can arise and the infection can progress into severe symptoms. Plenty of examples.

<comment><USER13> The evidence does not support this viewpoint. Also, things are complicated by the evidence that the worst symptoms are caused by cytokine storm, i.e. an auto-immune response.

<comment><USER12> Which evidence? Are you referring to the "lag" in immune response in the initial stage of infection?

<comment><USER13> Perhaps I should have said there is no evidence that I am aware of that supports that viewpoint. Instead, there is evidence that asymptomatic people can transmit the virus. No symptoms does not mean no virus.

<comment><USER12> Asymptomatic does not mean permanently infected

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> The author is Vincent Racaniello Ph.D., Professor of Microbiology & Immunology in the College of Physicians and Surgeons of Columbia University([https://www.virology.ws/about/](https://www.virology.ws/about/))

I absolutely recommend his virology lectures [https://youtu.be/lj3NhPgOoX4](https://youtu.be/lj3NhPgOoX4)

<comment><USER8> In addition, he is possibly the most prolific podcaster of our time. He's started no less than 6 different podcasts over the last decade or so, collectively known as the TWIx podcasts (This Week in Virology/Microbiology/Parasitology/etc. I'm a huge fan of TWIV, but they're all top-notch.

[https://www.microbe.tv/](https://www.microbe.tv/)

</comment></comment><comment><USER15> For anyone else reading and wondering what the _founder effect_ is:

> In population genetics, the founder effect is the loss of genetic variation > that occurs when a new population is established by a very small number of > individuals from a larger population.

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

<comment><USER16> Did anyone else read this and, experiences colored by startups, immediately begin thinking about an analogous effect in startup organizational developmental dynamics?

Anyways, to be more on topic, I read this quote from the article: "Because of the founder effect, showing that a particular mutation increases viral transmission in humans is very difficult." Does the author here mean that it is hard to determine whether a mutation increases viral transmission in humans or not because that mutation's survival may not necessarily be the result of genetic fitness but founder effect?

</comment></comment><comment><USER17> ...as far as we know, because it's difficult to prove otherwise and would take months.

Why the impulse to round off uncertainty to certainty? Ed Yong explained it better:

[https://www.theatlantic.com/health/archive/2020/05/coronavir...](https://www.theatlantic.com/health/archive/2020/05/coronavirus- strains-transmissible/611239/)

<comment><USER18> So a more more accurate description seems to be "there is no evidence that thinking of the viruses in terms of multiple strains is scientifically helpful".

<comment><USER19> Thinking of things that aren't proven to exist is scientifically unhelpful?...

<comment><USER6> You've cut the context, was that on purpose? The context is a discussion of improving medical interventions during the current pandemic, in that context, at present the argument is that 'considering Covid19 to be separate "strains" (isolates) will not help to treat patients'.

Is that clearer?

<comment><USER19> It's not clearer, it's a completely different statement. The idea of the answer to a question being "medically unhelpful" doesn't seem at all related to "scientifically unhelpful".

</comment></comment></comment></comment></comment><comment><USER20> The authors of the D614G paper do attempt to rule out a founder effect. I'm not saying their analysis is bullet proof, but the OP doesn't address its merits.

 _To differentiate between founder effects and a selective advantage driving the increasing frequency of the G clade in the GISAID data, we applied the suite of tools that we had been developing for the SARS-CoV-2 analysis pipeline (Fig. 2, Fig. 3, Fig. S2 and Fig. S3). A clear and consistent pattern was observed in almost every place where adequate sampling was available. In most countries and states where the COVID-19 epidemic was initiated and where sequences were sampled prior to March 1, the D614 form was the dominant local form early in the epidemic (orange in Figs. 2 and 3). Wherever G614 entered a population, a rapid rise in its frequency followed, and in many cases G614 became the dominant local form in a matter of only a few weeks (Fig. 3 and S3)._

</comment><comment><USER21> Vincent Racaniello's[0] YouTube channel[1] is well worth a visit. He publishes his lectures on virology on the channel, updated each year to reflect latest research etc.

His website Microbe.tv[2] also hosts various regular podcasts (which are also published as audio to YouTube) about virology and microbiology, they're very interesting.

I can thoroughly recommend.

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

[1]: [https://www.youtube.com/user/profvrr/videos](https://www.youtube.com/user/profvrr/videos)

[2]: [https://www.microbe.tv/](https://www.microbe.tv/)

</comment><comment><USER22> The crux of the argument is showing different strains requires showing different phenotypes, and that that hasn't been supported with enough evidence. D614S is taken as an example, which purportedly increases transmissibility (thus would be a different strain), but most-likely doesn't. Apparently the data in support of D615S is just based on it being found in a lot of isolates-- but that would also be seen in the case of founder effect.

</comment><comment><USER23> The tone of this content seemed a bit off to me. It converted a high degree of certainty, when the purpose was to decry that we are placing a high degree of certainty on a fact that is unproven and likely unprovable, if not totally untrue. Seems ironic.

Anyway, this was the money line to me: "For an amino acid change such as D614S to be positively selected, as opposed to being maintained as a consequence of the founder effect, requires selective pressure. For such an already highly transmissible virus, the nature of such selection pressure is difficult to discern."

QED

<comment><USER24> This is backwards of what science does. Science doesn't really rule things in, rather it rules things out till there is nothing left. For example, take the discussion about D614S here. The original claim was that D614S makes the virus more transmittable, and the author claims this is wrong. Who has the burden of proof? It is the researchers that claimed D614S made Cov2 more transmissible. The author here points out that there is no selection pressure here and that there is a more reasonable solution to the results. Occam's razor is in play.

So not all arguments need a burden of proof. It is the one that is making the claim that has the burden.

<comment><USER25> Right, and this article is titled "There is one, and only one strain" which is an affirmative statement, and calls for a burden of proof.

What this piece should be titled is "We don't have any evidence yet of multiple strains."

<comment><USER24> Except the claim was that there are more than one strain and the author is responding to that. The burden of proof lies in the one making the claim that there are multiple strains. The author has no burden of proof.

This would be akin to one person making the claim: "Unicorns are not only real, but are causing a global pandemic" and then someone writing an article titled "Unicorns aren't real, STFU". The second title doesn't have the burden of proof and we wouldn't be having this conversation if these were the titles of the respective articles.

Why is the unicorns title an accurate analogy? Because the science doesn't expect there to be multiple strains in the same way the science doesn't expect unicorns to exist. I'm using the same vernacular here that we use in science. I didn't say "unicorns don't exist" but "we don't expect unicorns to exist". This is how we say things.

<comment><USER23> That's the thing. Science is a bit of a different language from English. And they get conflated all the time. The strain doesn't exist until it does, and then everybody gets mad and thinks the scientist was lying.

It's speaking different languages that have a high overlap, but key words may have completely different meanings.

And, when you're talking to a regular person, being able to speak English will help you convey your point.

<comment><USER24> This is exactly right. As I said in another post

> Well we're chimps that can barely communicate with one another even when we > speak the same language.

<comment><USER23> My point is, this post was supposed to be written in English, but its headline only makes sense in science, and actually means something misleading in English

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> I guess the important thing is not so much if two viruses differ in any base pairs or in any 'biological property'; but whether immunity to one is also immunity to the other?

If they were two strains of SARS-CoV-2 but your body fights them the same, that's as good as only one strain for most people. But still very interesting for scientists.

Equivalently, if we see lots of differences in base pairs but no differences in biological properties yet, that might still alert us to the possibility of new strains rapidly emerging in the future.

<comment><USER27> That is certainly a "biological property". Immune response depends on the "outer form" of the pathogen - what does its protein structure look like from the outside?

</comment></comment><comment><USER28> Did anyone else notice the ".ws" domain of the site and, not being familiar with the site, immediately think "that looks a bit shady"? That's been the long-time association of that TLD for me, probably because a lot of cracks/warez/virus (the computer type) sites used it, along with SEO spam and such.

<comment><USER29> In this case, looks to have been a tactic to gain some "virology.*" for the domain name:

[https://www.samoanic.ws/](https://www.samoanic.ws/)

</comment></comment><comment><USER30> As a layperson, the question that springs to my mind is:

If there's only one 'strain' then that means one 'vaccine' will work on all patients, correct?

So it's unlike the Flu where the vaccine only works half the time and they keep having to update it ?

<comment><USER31> Yes.

</comment></comment><comment><USER32> It is ironic that this blog post is published just a little after a preprint was posted making a case that the D614G mutation has biologically significant differences. There is an explanation of the paper here: [https://chrismasterjohnphd.com/covid-19/why-the-mutated- viru...](https://chrismasterjohnphd.com/covid-19/why-the-mutated-virus- spreads-faster-in-america-and-europe-than-east-asia)

</comment><comment><USER33> Can someone explain to me like I'm 5yo why a virus is not considered alive?

<comment><USER34> People like to classify things. They like having neat buckets to place things in, give them a name, make them feel like they have a handle on it.

The world is not easily classified. But people persist. So we end up with situations like "is Pluto a planet?" and "is a virus alive?" Then people start focusing on their classifications and definitions when in fact they don't actually matter to the reality of the situation.

I need to dumb this down more if the audience is a 5 year old.

People like to give things names. Like the colors: red, orange, yellow, green, blue and purple. But sometimes a color can't be easily named.

For example the shirt I'm wearing might look blue to me and green to you. Then we start arguing about what color the shirt is when what we really should talk about is if it matches my pants.

</comment></comment><comment><USER35> This echoed what Peter Kolchinsky (Harvard-trained Virologist turned VC in Life Science)[1] had said why the initial wave of vaccines for SARS-CoV-2 will arrive and will be mostly effective[2]

[1]: [https://peterkolchinsky.com/bio](https://peterkolchinsky.com/bio)

[2]: [https://news.ycombinator.com/item?id=22900397](https://news.ycombinator.com/item?id=22900397)

</comment><comment><USER36> Wrong. A national lab has identified enough variance in "strains" in the population to negate a singular vaccine.

Source: [https://www.santafenewmexican.com/news/coronavirus/lanl- find...](https://www.santafenewmexican.com/news/coronavirus/lanl-finds-more- contagious-coronavirus-strain-has-emerged/article_cf549a5a-8ef3-11ea- abca-8fa643b35e8c.html)

</comment><comment><USER37> That sure looks like more than 1 strain to me: [https://nextstrain.org/ncov/](https://nextstrain.org/ncov/)

<comment><USER38> Yes, it _looks like_ that, but it isn't. All those distinct lineages are functionally equivalent. That's the point. A detectable difference isn't the same as a functional difference in transmissibility, virulence, etc.

<comment><USER39> Well you cannot claim either way. There is still circumstantial evidence for a significant difference in virulence and mortality across the globe, so there might be indeed multiple strains, we just do know about it.

<comment><USER40> You can definitely claim it if, say, a CUA codon is replaced by a CUG codon because both of those code for Leucine and the resulting proteins will be absolutely identical.

<comment><USER39> That is not what I said. If there is observable difference between two populations, then indeed there might be two different strains at work. If you want to be super pedantic, not all RNAs are mRNAs, and there might be difference between CUA and CUG in tRNA's behavior.

</comment></comment></comment></comment></comment><comment><USER41> Cases and deaths in Asia (N & S hemispheres, 1st & 3rd world) are significantly lower than elsewhere.

> So far no one has shown that any of these virus isolates differ in any > fundamental property.

A different sequence is prevalent elsewhere. Not proof, but suggestive of a property difference.

<comment><USER42> The jury is still very much out for many Asian countries (India, Indonesia, etc), and there are a plethora of other factors that can explain the difference: demographics, genetics, comorbidities, sunlight (UV-B), heat/humidity, access to testing etc.

Also, the virus originated from one point (Wuhan) and was spread more or less simultaneously across the world. It would be quite odd if one strain hopped on all the west/east-bound planes, while another strain found its way only to the south-bound planes. Not to mention that the 'second wave' of infections in APAC originated largely from Europe.

<comment><USER41> The hypothesis is the mutation occurred outside of Asia, and countries in Asia closed ports after the initial infections, but before the mutation.

> sunlight (UV-B), heat/humidity

Much of Asia is in the northern hemisphere (e.g. China and Japan); same season as Europe and USA.

Australia is in Asia too, close to China with much travel between.

I agree there are many factors and it's early. But the low cases and deaths over all countries in Asia has a peculiar uniformity - in contrast to elsewhere.

<comment><USER41> Wow, HN is strange sometimes. Have covid19 strains become political/tribal somehow?

I'm just pointing out something interesting in the data I was curious about. It's a pity HN picks out one detail and ignores the interesting thing... but upon reflection, pedantry is typical of today's HN, and partly why pg withdrew.

Regarding Australia, it's often said we are in the Asia region. And for the specific purposes here, of initial transmission, we have much contact with China, through tourism, education, primary produce and trade in general. It's expected we'd get initial infection direct from China (which trwcing shows we did), rather than via Europe.

<comment><USER42> I didn't downvote you (can't even if I wanted to since you replied to me!), but the difference in outcomes is unlikely to be explained solely by differing strains, and there's no evidence at this time that the mutations have any biologically meaningful difference:

[https://www.virology.ws/2020/05/07/there-is-one-and-only- one...](https://www.virology.ws/2020/05/07/there-is-one-and-only-one-strain- of-sars-cov-2/)

<comment><USER41> Thanks. I did say it was only "suggestive".

A series of similar events in similar circumstances can be explained by a series of different causes, but it seems worth looking at a similar cause, no? This is at the stage of initial hypothesis.

Gosh, maybe people thought I was saying it was the absolute truth.

</comment></comment></comment></comment></comment></comment><comment><USER43> Ouch! I feel exactly like when the WHO stated once and again "NOT A PANDEMIC!!"

And then, just because a silly observational threshold was passed "PANDEMIC!!!!!".

Same as "not recession/recession" just because of a silly totally arbitrary threshold...

<comment><USER44> Sorry to piggy back on your post. I'm not intending to aim this at you, but it made me think. I'm finding a lot of the current reactions to Covid-19 are pretty similar to the stages of grief.

Denial - It's not really a problem. We don't have to disrupt our lives. It will all disappear in a few weeks. It's all a conspiracy theory.

Anger - If (some organisation) had done their job, we wouldn't be in this mess! It's all the fault of the (some country)!

Bargaining - If we get the new cases below X (or wait for X weeks), then we can all go back to our normal lives. I did what I'm supposed to do, you can't tell me I have to shelter in place any longer (well, a little bit of anger mixed in there)

Depression - We are so screwed. That's it. The world as we knew it is over. Our politicians, health organisations, etc are so incompetent that there is no escape.

Acceptance - Yep. It's a bad situation alright. However, it _will_ pass eventually. It will be difficult for people. A lot of people will die. A lot will lose their jobs. The economy will probably be hurting for a very long time, but we _will_ come out of it eventually.

<comment><USER45> You might find this article on "Adjustment Reactions: The Teachable Moment in Crisis Communication" [0] (1/17/05) interesting. I found out about it through the peak prosperity daily COVID-19 updates [1] back in mid-March.

[0] [https://www.psandman.com/col/teachable.htm](https://www.psandman.com/col/teachable.htm)

[1] [https://youtu.be/ogf6Hru2trE?list=PLRgTUN1zz_oeQpnJxpeaEkFim...](https://youtu.be/ogf6Hru2trE?list=PLRgTUN1zz_oeQpnJxpeaEkFimDeepqyWf&t=714) (queued up to when he talks about this article)

</comment></comment></comment><comment><USER46> Based on the difference in virulence of the virus in Western Europe and US versus Asia, it is hard to believe there is only one strain of SARS-CoV-2.

My hypothesis is that while Asia was originally infected by Wuhan originated strain, the Western Europe and US may have been infected by a mutated strain. The differences in impact in different countries is very difficult to explain without the hypothesis of multiple strains.

Edit: There was a decent article recently (I am unable to find now, most probably from NYT, WSJ) that addressed several factors mentioned in replies and showed none of those could explain the discrepancy in cases across countries. For example, high temperature and warm weather don't explain differences in cases between Singapore, Thailand, Indonesia, Malaysia, and Amazon region of Brazil.

The closest article, I could find using google search is from Brookings.

[https://www.brookings.edu/blog/future- development/2020/05/05...](https://www.brookings.edu/blog/future- development/2020/05/05/the-unreal-dichotomy-in-covid-19-mortality-between- high-income-and-developing-countries/)

<comment><USER47> Could you elaborate on this? How do the effects differ and couldn't a lot of it be explained by the vastly different pandemic reactions (lock-down vs doing almost nothing)?

<comment><USER48> Because there are too many wildly differing reactions in similar populations.

More than 700 passengers on the _Diamond Princess_ were infected, leading to a total of eight deaths. This would have been an older-than-usual cohort, simply by dint of demographics on cruise ships.

Meanwhile, in New York, deaths in long-term care homes have approached 5,000.

Obviously nursing home residents are a more vulnerable population, but with this kind of disparity in outcomes, I'm not buying it. Nursing homes may have an older clientele, but then, cruise ships aren't staffed by medical professionals.

IMHO it's been obvious that there are multiple strains in circulation for a long time. Otherwise, the medical community needs to explain exactly why outcomes vary so dramatically, not only from one individual to the next, but between populations with similar demographics. When they explain that, then I'll be more interested in their opinions regarding how many strains are out there. If they think the bugs are all the same, they aren't looking closely enough.</comment></comment></comment>