BorgBackup: Deduplicating Archiver - <AUTHOR> https://www.borgbackup.org/ <comment><USER2> We[1] built borg into our environment[2] as soon as it was stable, release software. In the years since, it has (ironically) supplanted use of rsync as the de facto standard that our users back up to us with.

As one of our users have said[2], borg is "the holy grail" of backups as it does everything rsync always did, and produces remotely encrypted backups that the provider has zero insight into.

It also does not have the inefficiencies that the older, duplicity software has.

If you are willing to go without (borg specific) technical support _and_ do your retention with borg instead of our zfs snapshots, there is a special, discounted rate available.[4]

[1] rsync.net

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

[3] [https://www.stavros.io/posts/holy-grail- backups/](https://www.stavros.io/posts/holy-grail-backups/)

[4] [https://www.rsync.net/products/borg.html](https://www.rsync.net/products/borg.html)

<comment><USER3>
       inefficiencies that the older, duplicity software has.

As much as I love duplicity, it does sort of suck when you get into larger numbers of files and gigabytes of data. It's so darn slow sometimes it's almost unusable. Good to know borg is better, I've been meaning to check that out!

<comment><USER4> It's incredibly slow (backing up 1.5TB took more than a day), but the built-in support for PAR2 makes it worth it (for me).

Sadly, it seems like borg has no built-in support for any kind of redundancy [1]

[1] [https://github.com/borgbackup/borg/issues/225](https://github.com/borgbackup/borg/issues/225)

</comment></comment></comment><comment><USER5> There's so many backup systems out there these days, but none that are _quite_ perfect. The closest I've found is `rdedup`[1], which may no longer be maintained. What I'd like in a backup solution is:

\- compressed

\- deduplicated

\- encrypted using asymmetric encryption, so that the encrypting machine doesn't need to know a password

\- durable (using par2 or directly supporting repository repair from an independent backup)/signed

\- composed of standard open source tools so that if the backup software goes away, everything can still be retrieved

\- supports differing upstream data hosting providers

\- open source

There's lots of things that fill most of those requirements, but none that tick all the boxes.

\- rdiff-backup does all of the above _except_ deduplication; it's full + incremental which requires a management strategy

\- restic doesn't compress, doesn't use asymmetric encryption and doesn't use par2 or similar tools for durability

\- borg doesn't use asymmetric encryption and doesn't use par2/durability stuff; it's also pretty slow

I know people call borg the "holy grail", but I think we're still a wee way off that emerging, personally -- even though I do really like (and use!) borg.

[1]: [https://github.com/dpc/rdedup](https://github.com/dpc/rdedup)

<comment><USER6> Yeah, I've been searching for a great general archiver for a long time. I tried borgbackup a couple of years ago and immediately hit a handful of issues that put me off, though I can't really recall the specific technical details clearly (I'm vaguely recollecting something about incompatible block sizes).

Whatever the details were, I came away with the distinct impression that the borgbackup developers didn't really respect the gravity of archived records and long-term storage. While that's probably not a totally fair conclusion from a one-shot use, in my defense, I'll offer up the latest version of their changelog [0], where:

* the first thing listed is an apparently serious data corruption bug that lived through several stable releases

* the second thing listed is an apparently-very-serious security vulnerability ("a flaw in the cryptographic authentication scheme used in Borg allowed an attacker to spoof the manifest ...")

* the third thing listed is another data corruption bug titled "Pre-1.0.9 data loss"

* the fourth thing listed is _another_ data corruption bug titled "Pre-1.0.4 potential repo corruption"

Note these are all post-1.0 versions. To be frank, I dare not scroll further.

Users are depending on this software to safeguard important files with the assumption that it will be able to reproduce them bit-for-bit-intact some years down the road. Any long-term storage software _requires_ developers with a fanatical devotion to compatibility, longevity, and integrity if it's ever going to be more than a toy.

I hate to pile on open-source devs who're trying their hand at making software that a lot of people appreciate, but overall, it's hard for me to say I regret the choice to pass it up and stick to combinations of ZFS, rsync, and the trusty old tarball.

[0] [https://github.com/borgbackup/borg/commit/75dcf9356334188276...](https://github.com/borgbackup/borg/commit/75dcf9356334188276d095d818e22cb4b437a456)

<comment><USER7> I still don't know how to really judge software from changelogs, but I think it's really hard to do and this post is not a great example either.

This is a changelog backup software which does data storage and encryption mainly. If it ever has bugs worth talking about they're going to be in... data storage and encryption. If we look at rsync for a change which is much older, simpler and mature: [https://download.samba.org/pub/rsync/src/rsync-3.1.1-NEWS](https://download.samba.org/pub/rsync/src/rsync-3.1.1-NEWS)

\- fixing .. traversal in V3 (how did that survive so long?)

\- issues with copying attributes

(There won't be much data corruption since rsync does 1:1 copies)

Time-to-fix could give us a better idea maybe? Either way, software doing X has bugs in X is "normal".

<comment><USER6> I mean, the issue isn't so much that _bugs exist_ \-- like you say, that's par for the course, even among the best developers. It's about a large incidence of severe eat-your-data bugs in such a short span of time (roughly a year) in something that's quote-unquote stable and whose entire purpose is long-term data storage and retrieval.

It's even worse because unlike rsync, which synchronizes filetrees from point A to B and can be immediately confirmed to have either worked correctly or not, borg uses a bespoke storage format that's not easily verified or operated upon by standard utilities. You just have to trust it to pull the correct data out when you need it. That's a heavy burden to put on a tool, and the borg devs seem to be struggling under its weight.

Consider the standards expected of filesystem or database maintainers. borg repos are not really that different -- they're a big, opaque chunks of bytes that you expect to be able to produce specific data on demand with perfect reliability.

These types of systems don't get marked stable when they're still in primordial, eat-your-data development phases, and on the small handful of unfortunate occasions when data loss bugs sneak in, they're a) usually limited to some bizarre corner case; and b) taken _extremely_ seriously, almost to the point of solemnity, and often result in major overhauls to a project's validation and QA routine.

If any stable filesystem or database had 4 widely-applicable database corruption bugs within a year, it'd be lights out for that project. All trust lost, reputation irreparably ruined, angry letters to a variety of mailing lists, permanently-increased scrutiny on any new projects or maintainers among the same class of projects, etc.

All I'm saying is that based on my admittedly-murky prior experience, the project's observed track record, and the high standard of care that must be met to qualify a project for storing authoritative copies of data, I'm _personally_ not comfortable trusting borg with anything important any time soon. No one is obliged to share that evaluation, of course.

</comment></comment></comment></comment><comment><USER8> I offer dedicated Borg hosting at BorgBase.com[1] from $5/TB. As opposed to normal SFTP-based backup services, every backup repo is fully isolated. This allowed to add features, like append-only mode and monitoring for stales backups.

We have also developed a Qt-based desktop client[2] that runs in the system tray and makes it easier to browse archives or do restores.

For headless deployments, I highly recommend Dan's Borgmatic[3]. You could deploy it all together with our Ansible role[4].

1: [https://www.borgbase.com](https://www.borgbase.com)

2: [https://vorta.borgbase.com](https://vorta.borgbase.com)

3: [https://torsion.org/borgmatic/](https://torsion.org/borgmatic/)

4: [https://github.com/borgbase/ansible-role- borgbackup](https://github.com/borgbase/ansible-role-borgbackup)

</comment><comment><USER9> I switched from bup backup to borg backup, because it generally works better for my use cases; however, there are two things bup does do better:

1\. remote backup through ssh, especially de-duplicating between different clients, especially concurrent client backups.

borg needs a compatible version installed on the other side (and compatibility has been broken between versions in the past); bup uses bare-bones ssh+sftp, so the other side can basically be anything.

borg will have a lot of download to client from server if multiple clients back up to the same repository (essentially every time in most common use cases); bup will have a minimal download.

borg maintains a repo lock, so multiple clients backing up to the same repo will be serialized; bup does not, so it can be concurrent.

2\. Storage format

borg's format is it's own format; bup's underlying data format is basically a git repo (which you can treat as such; you may need to manually apply "cat" to rebuild files, bit "git" and "cat" are all you need).

I have heard good things about restic, but did not have a chance to evaluate it myself.

<comment><USER5> restic doesn't perform compression. Depending on your use case (I use it for photography backups, which don't compress well), that might be OK -- but it's something to be aware of.

</comment></comment><comment><USER10> In my testing (early 2019), NONE of restic, rclone, borg, duplicity, or tarsnap was able to handle anything other than hobbyist workloads.

restic fell over _hard_ at around 100 terabytes; the others at around 500.

I'm backing up a little over 3 petabytes. I use Bacula. It's _awful_ , but I haven't found anything else that can deal with that kind of volume.

<comment><USER11> When I was backing up several 100 tb, I tried every open source option at the time and found them all lacking.

What ultimately worked? Plain old rsync over ssh, to a zfs pool with snapshots and compression.

As far as I could figure, the only notable downside of this is that the storage device must be trusted, since it has access to all of the data, and that you effectively needed root permissions on the storage you're copying to for filesystem permissions which makes a multi tenant backup server cumbersome (you could chroot or use containers or something but these solutions can become fiddly, e.g. running multiple instances of ssh on nonstandard ports to enable multitenancy).

<comment><USER10> I've been very tempted to dump bacula and do that, especially since my main disk-based storage is an Oracle ZFS appliance.

But I also do backups to tape (LTO-8, in a Storagetek library), and I do like that Bacula handles that for me.

</comment></comment></comment><comment><USER12> Borg backup is amazing. I've been using it for years now, backing up a few terabytes of data from a few dozen VMs.

The dedupe is downright magical. We've been able to remain super frugal on the storage allocation for backups solely because of how wonderful its dedupe is.

Restores are also really nice and easy since they are just a FUSE mount.

If you have a Linux host or hosts, I can wholeheartedly recommend borg. It's elegant, robust, and fast. And open source.

<comment><USER13> I benchmarked borg and restics deduplication on a few datasets and restic was the winner (1-2 years ago). Did you do any comparisons with other deduplicating backup solutions? (Benchmarked the efficiency not the speed. Test data set was a few 100GB)

<comment><USER12> We were previously using Bacula, which was way too heavyweight for what we wanted. I found Borg after looking into Attic, and wasn't aware of Restic at that point.

Compared to the Bacula and BackupExec, Borg was lightning fast and its disk usage was very frugal.

</comment></comment></comment><comment><USER14> Use, love, and support[1] borg.

[1] [https://liberapay.com/borgbackup/donate](https://liberapay.com/borgbackup/donate)

</comment><comment><USER15> I'm still not totally happy with most of the backup solutions, or maybe I want too many features all at once (sth like Perkeep). Although, otherwise, if the tools are simple, I have to use multiple tools to cover all the features, and there will be lots of overlap, which is maybe not too much of a problem actually.

I collected a list here: [https://github.com/albertz/wiki/blob/master/backup- software....](https://github.com/albertz/wiki/blob/master/backup-software.md)

</comment><comment><USER16> I'm using borg and I honestly like it. Not ready to only rely on it. I try to use the 3-2-1 principle of backup strategy and borg is really a space and bandwidth saver! My collection grew from few Gb to some Tb. It's already more than a year old and I was wondering whether it's better to start a fresh new repo every year or to let grow the original one until it reaches a certain size? Any recommendations from ppl that used it for +2 years?

</comment><comment><USER17> I use BorgBackup to make a local backup on linux and mac machines and rclone to upload that backup to the cloud.

It took me some time to figure it all out. I wrote a script to not manually repeat configuration steps next time. Although it's quite opinionated it still grew to 600 lines.

Feel free to check it out, maybe it can help someone [https://github.com/senotrusov/backup- script](https://github.com/senotrusov/backup-script)

</comment><comment><USER18> I've been using Borg for a couple of years now (and before that, Attic[0]) and I have been very happy with it. It's seen me through three laptops and it has been reliable and easy-to-use.

[0]: [https://attic-backup.org/](https://attic-backup.org/)

</comment><comment><USER19> BorgBackup is great.

One limitation that isn't mentioned often is that when doing anything with your borg repo, RAM use increases with the number of files you have backed up. In my case I had 15 million files, and mounting the repo took quite a bit of time (minutes) and used 11GB of RAM.

Restic also has the same issue.

</comment><comment><USER20> I use borg extensively as well. One thing I haven't found a good solution for yet is monitoring.

How do you all keep track of whether your backups succeeded? I'd like to receive an email if a scheduled backup didn't run. The only thing I have for now is rsync's feature where they warn you if your data hasn't changed by X kb in the last Y hours/days but I find this lacking because multiple machines write to my rsync account. It'll only warn me if none made any change but I'd never know if only a few failed. Same thing if there is nothing new to backup, I get an email from rsync.net but I don't know if every backup job failed or there is just no changes.

</comment><comment><USER21> How does this compare against S3QL? Does it do multithreaded compression when backing up?

So far S3QL is the least worst of all these deduplicating/compressing/encrypting backup solutions I have tried, but I havent tried borgbackup. Despite it's stated focus on cloud object storage, S3QL also works great on NFS and local filesystems as a target as well.. and sshfs..

</comment><comment><USER18> I see that BorgBackup is available in Chocolatey[0] and it looks like the current version. It's not clear to me if this is an official port or not, but I am interested. :-)

[0]: [https://chocolatey.org/packages/borgbackup#testingResults](https://chocolatey.org/packages/borgbackup#testingResults)

</comment><comment><USER22> Has anyone done a pricing comparison between borgbase, rsync.net, AWS S3, and Wasabi for offsite borgbackup storage?

<comment><USER2> We try to stay current and competitive with pricing - currently at 1.5 cents/GB/month for the discounted, "no support"[1] "borg accounts":

[https://www.rsync.net/products/borg.html](https://www.rsync.net/products/borg.html)

What is s3 these days ? 2.x cents ? Plus traffic ? We don't charge for traffic/usage/bandiwdth in any way ...

[1] You _do_ get technical support, just not specific support for setting up your borg backups, which can be fairly complicated ...

<comment><USER5> I (sadly) moved from you guys to Backblaze, as they're down at $0.005 (ie. 0.5 cents) per GB. They _will_ charge me (1 cent/GB) if I have to restore the backup, but this is my extreme off-site everything-blew-up-including-the- backups-closer-to-me backup, so, hopefully that won't eventuate.

<comment><USER2> We will always be more expensive than B2, Wasabi, et. al.

You're not ever going to get immediate, personal technical support from a UNIX engineer at those services like you do at rsync.net.

<comment><USER5> Fair enough. I still use and like your service for a second off-site backup of ~40GB of very very important stuff, but was unable to ignore the cost savings for bulk data.

</comment></comment></comment></comment></comment><comment><USER23> How does it compare against tarsnap?

[https://www.tarsnap.com](https://www.tarsnap.com)

<comment><USER24> Is that $1/4GB/month? Plus bandwidth at the same cost on top of that? That seems wildly expensive.

</comment></comment><comment><USER25> I had never heard of borg backup, seems like a great backup tool.

Now, I just installed it on my mac and running `borg --help` takes about 5 seconds before outputting the help.

Same for any other `borg ...` command.

I'm not quite sure why, but that's the only command I've noticed to be running slow on my system.

I'm running borg 1.1.10.

<comment><USER26> is it based on python?

<comment><USER27> [https://github.com/borgbackup/borg](https://github.com/borgbackup/borg)

62% C 35% Python

<comment><USER28> Most of the C code is vendored third party libraries, there are only 2000-3000 lines of C that are actually part of the project.

</comment></comment></comment></comment><comment><USER29> Does it care about the underlying file systems? I have one Linux machine I need to backup a directory on, and dedupe would be a huge help on this one in particular, but I'm backing up to an SMB share that's mounted to a folder location.

<comment><USER30> Not generally, but I wonder if the locking will still work in your case.

</comment></comment><comment><USER31> Curious if this name is going to draw the ire of Paramount's copyright lawyers.

<comment><USER32> Borg? Hardly, there is already a Google product with the same name.

But more importantly, it is the name for a castle in several languages. So unless Paramamount is planning to sue a lot of very old places in Norway and other countries...

<comment><USER33> > there is already a Google product with the same name

Borg at Google is not a product per se, it's a internal tool/service. Pretty sure you can name internal tools whatever you want.

</comment></comment></comment><comment><USER34> I wonder if I'm the only one with this phobia: i see a tool written in a dynamically typed language and automatically trust it less. Especially something that is responsible for all my data. I wonder if this is a good candidate project to be rewritten in rust.

<comment><USER28> It actually would be for several reasons, which I could outline if people are interested (but I suspect they are not, so I will not go to the effort per- emptively). Also yes, there have been a number of bugs specifically due to both dynamic typing of the code and the dynamic data structures (msgpack, basically JSON) used.

<comment><USER35> I used borg for a while but the bugs you mentioned and some of the discussions in the Github issues gave me pause. For my taste, there is still too much development going on for me to rely on it as my main backup solution.</comment></comment></comment>


Facebook Offered to Buy Scvngr for $80M: Could Have Powered Facebook Deals - <AUTHOR> http://bostinnovation.com/2011/09/07/oh-ya-facebook-offered-to-buy-scvngr-for-80-million-could-have-powered-facebook-deals-places/

<comment><USER2> Unconfirmed, that doesn't amount to much. And if true and they said 'no' they must have had their reasons, it all depends on the total package, not just on the amount. It most likely wasn't 80 million in cash, no strings attached.

</comment><comment><USER3> If true, it would have been a major exit for DreamIt.

Assuming DreamIt's stake was diluted to 2%, that'd be $1.6 million from a $~20,000 investment.

</comment><comment><USER4> I wonder how many actual active users they have. I know I downloaded their apps and did a couple activities but quit pretty quickly. Also, I originally tried them based on a piece of print advertising I saw somewhere, which makes me think they are spending a lot per user acquired.

</comment><comment><USER5> If true, they should've taken the money. I don't see much coming from that Scvngr team other than marketing themselves as the next ___ for ___.

<comment><USER6> Yes this is one of the ideas that only survive if they have a fast exit. It`s a neat idea but it does not scale. The whole "coupon" space is tainted by groupon

Take the money say "Thank you" join Facebook stay there for a while and get exposed to totaly new ideas and leave with a team after the IPO.

<comment><USER7> Scvngr always struck me as more of a Foursquare competitor than Groupon.

Honestly, I thought they had a lot of really good ideas, and they leveraged game mechanics in a really interesting way, but, unfortunately, they just didn't ever have the user base that makes that sort of service feel worthwhile.

<comment><USER8> _Scvngr always struck me as more of a Foursquare competitor than Groupon._

Scvngr was more of a location service. LevelUp seems to be a bit of a pivot into the daily deals space.</comment></comment></comment></comment>


On learning Go [the programming language] - <AUTHOR> http://nf.id.au/on-learning-go

<comment><USER2> I wonder if I'm the only Go Player who is annoyed by Google naming their language after one of the worlds most popular board games.

<comment><USER3> They have had their chance to rename it to issue9 (<http://code.google.com/p/go/issues/detail?id=9>). Unfortunately they didn't. They probably never googled for "go" when they chose the name.

<comment><USER4> Better results are had with "golang".

</comment></comment></comment><comment><USER5> Do you imagine Go ever being able to create Android applications?

<comment><USER6> "Ever" is a difficult time frame to bet against.

There are good reasons it won't happen anytime soon.

First, there are 2 kinds of Android programming: * majority of programs are written to Dalvik VM using either official Java SDK or with clever cross- compilers (I believe C# can be used with mono-based compiler) * for performance sensitive programs (i.e. games) code can be compiled to native ARM assembly. There's official NDK from Google based on gcc. However, those programs have very limited access to the system, pretty much enough to write games but you can't access majority of the OS libraries, since those are written in Java and compiled to Dalivk VM.

Go already has an ARM compiler so it wouldn't be hard to make it generate native ARM code compatible with Android, like NDK's gcc does.

Go, however, has a feature (concurrency based on goroutines/channels) that is fundamental to the language and just doesn't mesh well with traditional runtimes, which are provide good support for threads. Making goroutines/channels work on Java/.NET runtimes is either impossible or would have terrible performance.

Again, it's not inconceivable to e.g. modify Dalvik VM to also support goroutines but that's not easy and no-one is even talking about that being a possibility. Go is still a very young implementation, it'll take a year or two before the basics are worked out and then esoteric use cases like supporting Android will invade implementor's minds.

<comment><USER7> For the record, MonoDroid (Mono for Android) doesn't run on Dalvik, but rather runs on its own and has a bridge to the Dalvik VM.

</comment></comment></comment><comment><USER8> I have been thinking of learning a new language, would anyone recommend go over haskell (simply for the sake of learning, real world applicability aside)?

<comment><USER9> Why not learn both? Pick a small but non-trivial application, and write it in both languages.

I am pretty familiar with and a fan of both languages. I started with Haskell, and found it to be really exciting. Go is very different, but after I got over my initial incredulity at it for not being Haskell or at least an ML variant, I learned to like it quite a bit. I think changed my thinking about programming at least as much as Haskell, perhaps more.

I wanted to end this post by trying to answer your question, but I don't think I can. It's like asking, "Should I teach myself the piano or the guitar?". The real learning comes from what you make, not what you make it with.</comment></comment>


Apple Watch too big for a wrist? - <AUTHOR>

Anyone else notice that the vast majority of Apple Watch promotional pictures do NOT show the watch on a wrist? <comment><USER2> All the smartwatches are _very_ large so far I think. "Too big" is really dependent on the wrist as there were already very large traditional watches that don't suit everybody.

There seems to be some photos on wrists here:

[https://www.google.com/search?q=apple+watch&num=100&client=f...](https://www.google.com/search?q=apple+watch&num=100&client=firefox-a&hs=ULq&rls=org.mozilla:en- US:official&source=lnms&tbm=isch&sa=X&ei=w18rVJ3SHKnksASXyILIAg&ved=0CAoQ_AUoAw&biw=1501&bih=926&dpr=0.9)</comment>


Project Sandcastle: Android for the iPhone - <AUTHOR> https://projectsandcastle.org/ <comment><USER2> Note this project is being run under the roof of Corellium, which was in the news recently because Apple is suing them.

I'm really impressed with what this company has achieved and super excited about their products. I hope they beat Apple!

<comment><USER3> I wonder if this project is in part a hedge against Apple's legal attacks, as in "our tech opened up Apple's locked hardware".

</comment></comment><comment><USER4> Source code: [https://github.com/corellium/projectsandcastle/](https://github.com/corellium/projectsandcastle/)

The backstory is also incredibly interesting: [https://projectsandcastle.org/history](https://projectsandcastle.org/history)

</comment><comment><USER5> The list of what hardware is supported on what phones is here: [https://projectsandcastle.org/status](https://projectsandcastle.org/status)

As of right now, many functions are not available on any device: Bluetooth, camera, cellular, GPU, sound.

The only devices with CPU support are the iPhone 7 and 7+.

<comment><USER6> And the new iPod Touch, apparently?

<comment><USER7> Hello,

Yes iPod Touch 7 is part of the first wave of supported devices, and cost compared to other options + it using the same A10 SoC played a role there.

Other devices will be supported soon.

</comment></comment></comment><comment><USER8> There's no denying the technical side of this is simply incredible. As a user though, my personal (and probably very divisive) preference for the iPhone is exactly because it is _not_ Android. Many companies make very solid phone hardware, I don't think Apple is that far ahead in that regard, if at all. For me, the isolation, privacy controls, and more on iOS are the reason to prefer that over any Android phone. So while I have massive respect for pulling such a technical feat off, I can't help but scratch my head when I see it.

<comment><USER9> Fascinating! I recently switched to an iPhone from 8 years of Android and the iPhone hardware is amazing but I kind of hate iOS. I have reasons:

Siri can't do basic tasks like turn on flashlight or wifi hotpot.

Voice recognition quality is much less accurate than Google's.

App store has poor search and filtering options.

App store fails to install apps and does not show errors.

Swipe typing is inaccurate compared to android. Gboard exists for iOS but it is clunky: it pops you out of your current app frequently and sometimes the default iOS keyboard reverts, despite Gboard being set to default.

No live wallpapers — boo! They're fun. (iOS has them but they are video files, not apps.)

No equivalent to Smart Lock on android where the device stays unlocked when you're at home or when it detects you are carrying your device. Face ID, therefore, needs to be used super frequently as a result, which doesn't work well at funny angles or with the device in horizontal mode.

Possible bug: Battery won't charge past 80% even when Optimized Battery Charging is disabled. My device has literally never reached 100% despite trying.

Safari is the unchangeable device default and I find it awkward to use with many tabs.

I'm just one user, but I was shocked to learn how good I actually had it on Android (Pixel 3 series.) I thought the grass was greener on the iOS side but it wasn't a clear winner.

I am totally on the fence as to whether to keep it. I love the privacy focus that iOS has but dislike the restrictiveness and features that make the device slower to use. (The smart lock is a huge deal to me...)

<comment><USER10> _Siri can't do basic tasks like turn on flashlight or wifi hotpot._

Yes it can. I just did it "turn on the flashlight".

It won't turn on the hotspot, but, if you have another iOS device or Mac within range, you can connect to one and it will turn it on automatically.

As far as your battery not going past 80%, why wouldn't you take it to an Apple store for repair?

<comment><USER9> I stand corrected about the flashlight. I also am pleased to learn in some sense the hotspot is always available.

I think I will get the 80% battery checked out ! Thanks.

</comment></comment></comment></comment><comment><USER11> I'm confused as to how this works.. this is something you install to replace iOS (and if so, how.. a jailbreak like mechanism)? Or is this an OS inside of an app?

<comment><USER12> Sandcastle is using the checkm8[0] unpatchable bootrom exploit to allow running unsigned secureROM arbitrary code with help from alloc8[1]. They then load a modified pongoOS[2] to get device tree and load their modified AOSP[3] from what I can tell.

[0] [https://github.com/axi0mX/ipwndfu](https://github.com/axi0mX/ipwndfu) [1] [https://github.com/axi0mX/alloc8](https://github.com/axi0mX/alloc8) [2] [https://github.com/checkra1n/pongoOS](https://github.com/checkra1n/pongoOS) [3] [https://github.com/corellium/projectsandcastle](https://github.com/corellium/projectsandcastle)

<comment><USER6> What does alloc8 (for iPhone 3GS) have to do with this? Also, what are their modifications to pongoOS and why do they need them?

<comment><USER7> Hello,

Upstream pongoOS is used for this AFAIK, without further changes needed.

However, the FDT from Apple device tree generator is currently basic and not really ready for anything other than FB + display, so a custom device tree is provided in the Sandcastle distribution.

</comment></comment></comment></comment><comment><USER6> I'm curious why they chose iPhone 7 as the device to start with; iPhone 6 would have saved them the page size issues since it uses 4K pages.

<comment><USER13> Probably had a recently retired iPhone 7 to use instead of their daily driver.

<comment><USER6> I would be _extremely_ surprised if Corellium didn't have a dozen of every iPhone model hanging around ;)

</comment></comment></comment><comment><USER14> Fortinet Web Filtering at my work has blocked this page under the category of "Hacking" :(

I just submitted a re-evaluation and it was updated to... the hacking category

\---

Web Page Blocked!

You have tried to access a web page which is in violation of your internet usage policy.

URL: [https://projectsandcastle.org/](https://projectsandcastle.org/) Category: Hacking</comment>


Ask HN: Help me prepare for my interview with Ward Cunningham - <AUTHOR>

I've scored an interview with Ward Cunningham for an upcoming Pragmatic Podcast, and would really like help from the Hacker News community. I've always loved the questions that get asked here.
If you could ask Ward Cunningham a question, what would it be?
If I use your question, I'll credit the submitter in the show notes. <comment><USER2> For those like me, wondering (no disrespect) who Ward Canningham is:

 _Howard G. "Ward" Cunningham (born May 26, 1949) is an American computer programmer who developed the first wiki. A pioneer in both design patterns and Extreme Programming, he started programming the software WikiWikiWeb in 1994 and installed it on the website of his software consultancy, Cunningham & Cunningham (commonly known by its domain name, c2.com), on March 25, 1995, as an add-on to the Portland Pattern Repository. He currently lives in Beaverton, Oregon and is the chief technology officer for AboutUs._

<http://en.wikipedia.org/wiki/Ward_Cunningham>

</comment><comment><USER3> If you have time, go for a walkabout here:

<http://c2.com/cgi/wiki?WelcomeVisitors>

It's the progenitor Wiki.

<comment><AUTHOR> Thanks. I'll be reviewing that page as well as many other old interviews.

</comment></comment><comment><USER4> When I met Ward, I asked him if he'd ever used a wiki. His immediate facial expression was impossible to transcribe.

</comment><comment><AUTHOR> I usually collect questions using an EtherPad that I tweet out <http://titanpad.com/qVBi1QngeR>

Really surprised to see my old method outperforming HN.

<comment><USER3> Ward's been around while. (See my other comment about the progenitor wiki.) He's actually in a position to talk about interesting historical perspectives, like the rise and fall of Smalltalk. (The same for Patterns, come to think of it.)

One thing I've heard about Ward, is that he has an uncanny ability to learn something positive in _any_ situation. Where others come away with annoyance or frustration, he'll come away with a keen insight.

</comment></comment><comment><USER5> How about: what would be 'simplest thing that could possibly work' if one were implementing a new government for an existing nation-state?

<comment><USER3> For what time period? Dictatorships often work well, if the requirements are reduced to a time span of just a few years and personal freedom is not a part of the spec.

<comment><USER5> Sure, I'd call that a valid point.

Replacing one dictatorship with another has significant historical president, and might be very simple if everyone agrees on who should be in charge. One might argue, though, that if the new regime needs to actively suppress an oppositional group, by any means, then the solution might no longer qualify as simple.

</comment></comment></comment><comment><USER6> Do you think automated functional testing (in the style of Fit) is catching on? What is getting in the way?

</comment><comment><USER7> How about this -

What new technology or methodology do you see that might have a big impact on future software development? Like object-oriented programming, concurrent programming, functional programming and Agile methodologies had in past decades.

</comment><comment><USER8> 1/ How are wikis doing today?

2/ What is the future of wikis?

3/ How are you involved?

</comment><comment><USER5> vi or emacs?</comment>


Facebook says it identifies campaign to meddle in 2018 U.S. elections - <AUTHOR> https://www.reuters.com/article/us-usa-election-facebook/facebook-says-it-uncovers-new-meddling-before-2018-u-s-elections-idUSKBN1KL2FG <comment><USER2> Extensive discussion of original source: [https://news.ycombinator.com/item?id=17654574](https://news.ycombinator.com/item?id=17654574)</comment>


Deploy Your RSS Reader (JARR – Just Another RSS Reader) in Minutes with Vagrant - <AUTHOR> https://jarr.readthedocs.io/en/latest/deployment.html#deploying-the-application-with-vagrant <comment><AUTHOR> You can also deploy JARR ([https://github.com/JARR/JARR](https://github.com/JARR/JARR)) on Heroku, or just test it here: [https://jarr.herokuapp.com/](https://jarr.herokuapp.com/)</comment>


Switch - <AUTHOR> https://play.google.com/store/apps/details?id=com.monkeymoon.switch

<comment><USER2> Sports very intruding ads when you least expect it. Uninstalled…</comment>


Uber got banned in East Hampton - <AUTHOR> http://uk.businessinsider.com/uber-banned-in-east-hampton-2015-6?r=US

<comment><AUTHOR> Their driver policy is terrible, it should get banned in larger areas till they wake up(just my opinion)</comment>


Ask HN: What free services can I use for a back-end? - <AUTHOR> I as a student who doesn't quite have a job, rely on free services like GitHub pages to host my projects. One of the problems I have with this approach is finding reliable hosts that are free of cost. I have been looking around for any free services that allow hosting a back-end a few I've seen are https://pythonanywhere.com Most others I find only offer PHP hosting do any of you own some good back-end hosting services that are somewhat usable and don't run on outdated versions of a language? <comment><USER2> Not sure what exactly on the back-end you're after. But why not use the free tier on Google Cloud, AWS or Azure? I've been using GCP for a few months for free (you get $300 credit when you first sign up):

[https://cloud.google.com/free/](https://cloud.google.com/free/)

That way, you can just build or use whatever back-end services you need.

<comment><USER3> Just to back this up -- I launched [https://dndemail.com](https://dndemail.com) on Google Cloud earlier this year. I have 250 users and still haven't used the full $300 credit. It was a great way to prototype, test, and launch.

</comment></comment><comment><USER4> Here's a pretty comprehensive, categorized list:

[https://github.com/ripienaar/free-for-dev](https://github.com/ripienaar/free- for-dev)

<comment><AUTHOR> Thanks! :D This is really great. The perfect comprehensive list of free stuff to use.

</comment></comment><comment><USER5> Maybe you qualify for Microsoft's Dreamspark or you can sign up for the Microsoft Imagine cup and get some free credits.

[https://azure.microsoft.com/en-us/pricing/member- offers/imag...](https://azure.microsoft.com/en-us/pricing/member- offers/imagine/)

[https://imagine.microsoft.com/en- us/custom/Dreamspark](https://imagine.microsoft.com/en-us/custom/Dreamspark)

That comes with some Azure credits you can use for .NET or Node or PHP apps :) and backends such as MsSQL or CosmosDB (Microsoft's MongoDB) . I don't know how long it lasts though (1 year at the very least).

I have a Microsoft BizSpark account and it's great.

<comment><AUTHOR> Ah, I hadn't seen this before. I'll give it a try.

</comment></comment><comment><USER6> Zeit now is great for static sites or nodejs. You would be on your own for anything stateful. Some options for stateful add-ons (from other companies) include vultr's $2.50/month VPS if you need postgre or redis, firebase has a free tier, digital ocean's S3 alternative is cheaper than AWS's.

</comment><comment><USER7> Firebase is definitely good to use, essentially free if its not a huge-ass application that is massively scaling up.

</comment><comment><USER8> Hang out on lowendtalk and grab something like a $8/year VPS special offer and run your stuff there. Administrating it will also be a good learning experience.

</comment><comment><USER9> Use Zappa + NoDB! [https://github.com/Miserlou/Zappa](https://github.com/Miserlou/Zappa)

</comment><comment><USER10> I run most of my side projects on a combination of app engine, firebase, and some times even just google spreadsheet.

To me Gcloud is also a pretty good bet because they have a very good startup plan ($100k in credits) in case you want to bring any of your projects to the next level.

(this is not to say that others have bad services, this is just my personal pref for my own things)

</comment><comment><USER11> Heroku or Firebase

Or just spend $5/mo on DigitalOcean.

<comment><USER12> +1 vote for Heroku.

Re: spending a little money, Scaleway has some the cheapest servers I've seen & would consider using. 2.99 Euros (3.54 USD as of now) for a server w/ 2GB of RAM & 50GB of storage is a pretty solid deal (if it works well, and I haven't heavily used it). Pricing info at [https://www.scaleway.com/pricing/](https://www.scaleway.com/pricing/).

[1] [https://www.scaleway.com/pricing/](https://www.scaleway.com/pricing/) 2.99 Euro equals 3.54 US Dollar

</comment></comment><comment><USER13> Check my repo [https://github.com/255kb/stack-on-a- budget](https://github.com/255kb/stack-on-a-budget) it gathers a list of services with freetiers for backend, emailing, etc

</comment><comment><USER14> Vultr has an instance for $2.50 a month. If that's too much money for you. Host one on your personal computer at home/in the dorm and use Dynamic DNS.

</comment><comment><USER15> I'm a huge fan of PythonAnywhere. I use it for all my own projects as well as for anything I'm building for clients :)

</comment><comment><USER16> Netlify.com

Just static sites, so brush up on that Javascript.

</comment><comment><USER17> Graph.cool

<comment><USER6> Just wanted to share some information that I think a lot of people will want to know before diving in:

> Every Graphcool service comes with an AWS Aurora instance that is backing > the GraphQL server. > [https://github.com/graphcool/framework/blob/master/docs/02-C...](https://github.com/graphcool/framework/blob/master/docs/02-Concepts/02-Database-%26-API/02-Database-%26-Data- > Modelling.md)

> Amazon Aurora is a MySQL and PostgreSQL compatible relational database built > for the cloud > [https://aws.amazon.com/rds/aurora](https://aws.amazon.com/rds/aurora)

The free tier currently provides 100MB of database.

<comment><USER18> comparitively, is that bad or good

<comment><USER6> I've surfed for some free DBs in the past. Most free hosts don't allow remote connections. Some services I've seen 50MB and 20MB but were uselessly slow. If you're not paying, I suspect this is actually good.</comment></comment></comment></comment>


Playing battleships over BGP - <AUTHOR> https://blog.benjojo.co.uk/post/bgp-battleships <comment><USER3> I love Battleship hacks. The game begs to be implemented everywhere for its simplicity. Before I learned to program I implemented it in MS Excel circa 2002. It was played over a local network as a shared file, and it relied on manual polling (file reload) and honor (don't peek at your opponent's worksheet).

I played it with a coworker during breaks in an environment that IT had locked down, but they didn't block Excel.

<comment><USER4> >in an environment that IT had locked down

When I worked in one such environment people made and enjoyed HTA chat app which used text file on a corporate file share as its storage.

<comment><USER5> I remember me and a friend figuring out how to use `net send` to send messages in my middle school typing class. They had everything so locked down, but they allowed command prompt for some reason. We felt so accomplished.

</comment></comment></comment><comment><USER6> > The game went smoothly, apart from a 45 minute period where no moves were > exchanged due to causing the previously mentioned route flap damping to > activate. This happened on my side and caused Level 3 to have a less optimal > route for my traffic in the 45 minute period. To mitigate this from > happening again later on the game, we decided to move to a 90 second > cooldown period on every move.

Must have been an interesting support call.

<comment><USER7> I can't even imagine taking the call from the business people why we were basically off the internet for 45 minutes, and or severely degraded..

<comment><USER8> Only way they'd be offline or severely degraded is if this was a shit network that was only connected to (3).

<comment><USER7> Level 3? Yeah it's shit. And by causing the routes to be dampened, yeah great thing to do with a production network.

</comment></comment></comment></comment><comment><USER9> Love it. But I like the skrillex steganography even more! [https://blog.benjojo.co.uk/post/encoding-data-into- dubstep-d...](https://blog.benjojo.co.uk/post/encoding-data-into-dubstep- drops)

<comment><USER10> > But that had me thinking, how much effort would it be to actually embed > machine readable data inside a dubstep track

The Aphex Twin actually did this in 1999:

[https://www.magneticmag.com/2012/08/the-aphex-face- visualizi...](https://www.magneticmag.com/2012/08/the-aphex-face-visualizing- the-sound-spectrum/)

As did a few other people around that time - there was even software for it.

> while ensuring that the sound could be enjoyed by humans as well…

Ah, well now that is arguably something that the Aphex Twin didn't do.

<comment><USER11> The same trick was used in the soundtrack of the new Doom game: [http://www.factmag.com/2016/05/30/doom-game-pentagrams- sound...](http://www.factmag.com/2016/05/30/doom-game-pentagrams-soundtrack- spectrogram/)

</comment></comment></comment><comment><USER12> Found your tweets weeks ago by accident and started following you.

Man, you must start giving nerd standup comedy talks at CCC/RIPE/ARIN/etc!!

</comment><comment><USER13> If this looks familiar, it's probably because you've recently read Ben's post about making art from SSH key randomart: [https://blog.benjojo.co.uk/post/ssh- randomart-how-does-it-wo...](https://blog.benjojo.co.uk/post/ssh-randomart- how-does-it-work-art)

</comment><comment><USER14> I work for an ISP and have done a fair bit of work on the peering side of things - it's amazing how many peers have no/few filters on their side, and/or refuse to use an MD5 password.

</comment><comment><USER15> > Since we were both supporting real production traffic through the prefixes > we were using to play the game

Annnnd fired

<comment><USER8> Naah. :) Network engineers that can do this are pretty rare and their managers are usually quite chill.

See also: the BGPNyaa cat: [https://stat.ripe.net/widget/routing- history#w.resource=as15...](https://stat.ripe.net/widget/routing- history#w.resource=as15562&w.starttime=2017-01-15T00%3A00%3A00&w.endtime=2017-06-23T00%3A00%3A00&show=Maxmized)

</comment></comment><comment><USER16> Need to come up with a good reason to register a ASN so I can play too

</comment><comment><USER17> I am amazed about the hilarious design and concept. Horrified that this was done with links running production data.

<comment><USER18> No experiment is worth doing without your production system at stake

<comment><USER17> Typically move fast and break things refers to improving a product, not the next move in battleship.

<comment><USER14> I think it's open to interpretation.

</comment></comment></comment></comment><comment><USER19> Does anyone have any recommended resources for learning more about and playing with BGP?

<comment><USER14> You can setup a decent lab with GNS3.

<comment><USER7> Why bother with a lab, I want a company that'll let me mess up their traffic, and an ISP that'll not block me for doing so.

</comment></comment></comment><comment><USER20> This is _insane_. Wow.

</comment><comment><USER21> I can't be the only one who was annoyed because the game is "Battleship", not "Battleships". I can see using the plural to describe the game generically, but he also uses the name capitalized, which is just wrong.

Nevertheless, it was an interesting article. It's always cool when someone totally subverts the purpose of something to do something entirely different.

<comment><USER22> The game is much older than Milton Bradley's version (which I assume you're referring to) and has gone by several different names - <USER2> "Battleships". [https://en.wikipedia.org/wiki/Battleship_(game)#History](https://en.wikipedia.org/wiki/Battleship_\(game\)#History)</comment></comment>


Amazon adds 1 free book rental a month for Kindle users with Amazon Prime - <AUTHOR> http://www.amazon.com/gp/feature.html/ref=amb_link_357575542_1?ie=UTF8&docId=1000739811&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=gateway-center-column&pf_rd_r=0C2QDM83F877YDQVEEBK&pf_rd_t=101&pf_rd_p=1328879142&pf_rd_i=507846

<comment><USER2> I'm not surprised that Amazon is pushing Prime heavily- once you've got people paying a regular subscription (especially one as low as $80 a year) they'll rarely stop paying it.

I'm close to signing up. I tried the month free trial and enjoyed the shipping, but barely used the on demand video because there wasn't that much recent stuff on there that I could actually rent for free. I imagine that Amazon is quite committed to changing that.

<comment><USER3> Very true.

Not to mention that the inhibition to purchase drops significantly. Before activating Prime I knew there was an invisible $25 Super Saver free shipping barrier that I had to break before I would complete an order on Amazon. Now with Prime, I activated One-Click Buy and haven't looked back. It's addicting having a new package arrive at your door every day or two.

<Obvious warning about irresponsible spending unrelated to the business angle of this discussion />

</comment></comment><comment><USER4> Amazon + great shipping logistics + cloud + huge retail + mobile devices + Bezos = ???

There are synergies here I'm fairly certain I don't understand -- I look forward to seeing what Amazon can do over the next 5-10 years.

<comment><USER5> Amazon's foray into mobile is "just" a natural extension of their retail business. The primary purpose of the Kindle and their variety of mobile apps/services is to get consumers to buy digital goods from Amazon; just as Amazon (the retail) is to get consumers to buy physical goods. The logistics plays a large role in keeping the physical goods flowing; AWS gives them a solid platform to keep the digital goods flowing.

<comment><USER6> But the interesting thing is, I think, how Amazon realised that building a superior delivery network for bits would be just as much of an advantage as having a superior delivery mechanism for atoms was. You buy a kindle from them. Amazon ship it to you. You turn it on, buy things, and the bits just arrive. And Amazon have that process down better than anybody, even Apple.

</comment></comment></comment><comment><USER7> I've been a prime user for the past year or so. Seemed a bit indulgent at first, but really love the service. Free 2-day shipping seems un-necessary when you can get super-shipper saving but every time my packages show up in two days, I'm grinning. I still have a Netflix account, but despite my love for Netflix it might only be a matter of time before I switch to Amazon Prime streaming (I don't watch a lot of TV). Now with this? Great deal.

<comment><USER8> I originally signed up for Prime because it saved me money. Not because I was paying for a lot of fast shipping, but because I would frequently have a $10 item I wanted to purchase, and i would add $15-25 worth of stuff to _get_ super saver shipping. With Prime I just buy what I want, when I want, and never worry about shipping costs or meeting a threshold for free shipping.

<comment><USER9> Prime changes how you shop. I used to put things in my shopping cart, figuring I'd buy them later if I had something else I wanted and could drive the price over $25. Now I just buy it right away if I figure I need it - there's no hassle, no shipping fee, and I know that if it turns out I don't want/need it, it's trivially easy to return it and I won't be charged.

It also means Amazon is the first place I check for just about anything I buy online: over time I've found that it's highly unlikely that the difference in price (esp. with shipping) is going to be enough to cover the potential hassle of ordering somewhere else.

Prime is a huge win for Amazon. They take loyal customers, increase order volume and push the customers into ordering from a wider range of categories. More dollars from those customers end up going to Amazon, and the customers become less price sensitive as well.

</comment></comment></comment><comment><USER10> Is there any way to get a list of the available books without looking on a Kindle device?

It's hard to evaluate just how valuable this will be without being able to browse the selection from a computer.

<comment><USER11> kindle.amazon.com lists all the books you've purchased, all the devices you have, etc once you log in.

</comment></comment><comment><USER12> I'm a little confused - so in any given month, I can only borrow a single book? Or, is it that for any given book, I can only borrow it once a month?

<comment><USER13> You can only borrow a single free book per month. If you want to borrow more you will probably have to pay.

<comment><USER12> In that case, it sounds like a nice bonus for Prime members, but I'm not going to pay $80/year just to get one free book for a month that I have to return later.

<comment><USER14> Of course you don't pay $80/year just to access ~$120 worth of book content. You pay to also get free 2-day shipping, a large library of free streaming videos, and what we can assume will be a growing pile of other benefits as time passes.

<comment><USER15> In the UK prime is bittersweet. Here all we get is free 1 day delivery.

That alone is pretty good - and for a "power user" of Amazon like me (who used to spend multiples of the £50 prime membership in delivery a year) it rocks.

But we don't get any of this good stuff (streaming/books).

Which is a shame because I suspect it would finally convince me to buy a Kindle :)

<comment><USER16> Less than a year ago, all you got in the USA was free _2_ day delivery.

Licensing videos and books is surely very complex legally, so starting more than one country at a time would undoubtedly be very hard.

I'd hardly call that "bittersweet".

</comment></comment></comment></comment></comment></comment><comment><USER17> Previous submission/discussion: <http://news.ycombinator.com/item?id=3190307>

</comment><comment><USER18> Give us Canadians the chance to subscribe! But regardless, this is just another great reason to subscribe to Prime in my opinion.

</comment><comment><USER19> This is perfect for me. I don't read that much so one book a month is more than enough. Sold

</comment><comment><USER20> I love Amazon but let my Prime membership lapse after reading about the working conditions at Amazon's warehouses. I am not sure if I want to do business with them anymore.</comment>


Speed Without Wizardry - <AUTHOR> http://fitzgeraldnick.com/2018/02/26/speed-without-wizardry.html <comment><USER2> The simple rule I have found for achieving superior performance in high level languages, particularly JavaScript is to simply _do less_. It isn't that simple though.

Doing less really means less code totally at the current compilation target, essentially feeding fewer total instructions to the compiler. This means no frameworks and minimal abstractions. It means having a clear appreciation for the APIs you are writing to. It means minimizing use of nested loops, which exponentially increase statement count.

Sometimes caching groups of instructions in functions can allow for cleaner code with a positive performance impact.

V8 cannot compile arithmetic assignment operators, which it calls left-side expressions, so you can see a rapid speed boost in V8 when you replace something like _a += 1_ with _a = a + 1_.

The side benefit of less code is generally clearer and cleaner code to read. There isn't any wizardry or black magic. No tricks or super weapon utilities.

As an example I wrote a new diff algorithm last year that I thought was really fast. [https://news.ycombinator.com/item?id=13983085](https://news.ycombinator.com/item?id=13983085) This algorithm is only fast because it does substantially less than other algorithms. I only wrote it because I could not wrap my head around the more famous Myers' O(ND) algorithm. A side benefit, in this case, of doing less is an algorithm that produces substantially more accurate results.

<comment><USER3> > "It means minimizing use of nested loops, which exponentially increase > statement count."

Nesting two loops has an n^2 cost and nesting 3 levels deep costs n^3. At no point does it ever cost 2^n or any x^n.

It's polynomial, not exponential.

<comment><USER2> Before I begin just let me say I am not a mathematician. I program so that I don't have to do complex math.

I know in reality the frequency of iterations varies considerably but for simplicity of discussion let's remove variability.

Say we have a loop with 1000 iterations. That is at minimum 1000 statements in the loop body plus expression overhead from the loop itself. If this loop is nested once with a same sized loop there are now 1,000,000 iterations plus some expression overhead per iteration. If it is nested twice deep there are now 1 billion iterations.

That example is exponential of 1000. Given that there is overhead associated with operation of a loop it is actually greater than exponential. It may not be quite so dramatic as a logarithmic growth curve though.

I completely concede that in reality loops vary in iteration count and so nested loops aren't likely perfectly exponential unless their iteration counts are identical. The increase of iterations from nesting loops does increase more dramatically than a simple multiplicative operation as the depth of loop nesting increases, such that the growth of total iterations is a curve on a graph. A polynomial growth operation when graphed should present a straight diagonal line without the presence of a third variable.

<comment><USER4> I wouldn't call time complexity particularly complex math. Imagine a loop. It does something n times. Within that loop, you do something n times. For each outer looo through n,you do an inner loop through n. Trivially, this is n*n, or n^2, also known as quadratic time. If you nest another loop, it becomes n^3, or cubic time.

Anyway, there might be some confusion of terms, perhaps. Exponential time in the algorithmic complexity sense is any algorithm that takes 2^n operations to complete. If you're talking about the number of iterations after you loop through n things n times, then that increase itself would not be exponential. But that delta in iterations is unrelated to exponential and polynomial time complexity.

<comment><USER2> I am sooo not a math person.

Let's not forget there is overhead to loops. At a minimum let's assume there is a single statement in the loop body, an increment statement and a terminal condition. In a single loop of 1000 iterations there are 3000 things to evaluate. The math becomes:

(n * 3)^x

If a simple loop is nested twice (3 depths) there would be 1 billion iterations but about 27 billion evaluations. Would it be correct to say that is just slightly faster polynomial growth?

</comment></comment></comment></comment></comment><comment><USER5> I've got to admire the graciousness in this response. It's making the point that mraleph's "Maybe you don't need Rust and WASM to speed up your JS" article completely neglected code maintainability as a factor, but it does so without turning the whole thing into a pissing match. It's all been a fascinating to read.

<comment><USER6> > completely neglected code maintainability

Where did I neglect maintainability as a factor? The only optimization that potentially affects maintainability is manually allocating Mapping-s in the typed array. And there I openly acknowledged that it affects readability and makes the code error prone. All other optimizations are not in any way affecting maintainability.

Even typed array optimization is purely confined in the library internals... On the other hand WASM spills out of the library by requiring users to explicitly destroy SourceMapConsumer.

<comment><USER7> Turning a function into a string and back is also a reduction in maintainability, as programmers now have to be sure it doesn't use any captured variables or such, in future edits. Using a Uint8Array and integer constants rather than a string and character constants makes the code harder to read. Separating the sorting pass and doing some of it lazily (for good performance reasons) makes the final ordering slightly less clear.

But "completely neglected code maintainability" is definitely unfair. While you made changes that reduced maintainability, you weren't neglectful.

</comment></comment></comment><comment><USER8> Funny, I was using the source-map library under Nashorn. The performance was poor enough that I had to switch to embedding V8; I'm not sure whether that was a consequence of Nashorn itself being too slow, or the Javascript optimizations intended for V8/Firefox just completely missing their mark.

Not that the WASM version of the library would've helped, since Nashorn doesn't do WASM at all. But maybe the performance would've been decent if it had.

</comment><comment><USER9> > But a distinction between JavaScript and Rust+WebAssembly emerges when we > consider the effort required to attain inlining and monomorphization, or to > avoid allocations.

I'm not sure that is true. Having worked/interacted with a lot of people working with Rust on different experience levels, most of them (that includes me) don't have a deep knowledge of what Rust concept maps to a specific concept with which performance implications. And if they do it's often only partial. I'd say that right now, only very few people that don't work on the Rust compiler have a broad knowledge in that area. Sure, it's much better to have to Result of the optimization expressed in code itself, but I'd say that the amount of knowledge and effort required to get to such a level of optimization is similar to optimizing Javascript.

I also found the hint to `#[inline]` suggestions, a bit disingenuous. In the end they are just _suggestions_, and your are just as much at the mercy of the Rust/LLVM optimizer to accept them, as you are with a Javascript JIT.

I'm a big fan of Rust, and I'm a big fan of Rust+Webassembly (working with it is the most fun I had programming in a long time!). Generally I think that Rust has one of the better performance optimzation stories, I just don't a gree with some of the sentiments in the post. There are also enough other reasons to love Rust+WebAssembly than just the peformance!

<comment><USER10> > I'd say that the amount of knowledge and effort required to get to such a > level of optimization is similar to optimizing Javascript.

Really? After reading all of the articles in this series (the original about porting to Rust, the rebuttal about optimizing JavaScript, and this one)?

I'm more familiar with Rust than JavaScript, but I found that other than the algorithmic optimization, the rest of the JavaScript optimizations were very non-obvious in order to achieve an effect that is entirely natural in Rust.

There's no need to be careful to avoid particular types of function calls, since there are no dynamic variadic function calls in Rust. There's no need to resort to using the equivalent of `eval` for monomorphization, it's a natural feature of the language. There's no need to do manual memory management by encoding values into typed arrays of integers; you can simply allocate vectors of structs, borrow references, and so on.

These are all things that had significant cost in JS, and needed to be worked around via some intensive profiling and knowledge of how JIT engines work, but just doing things naturally in Rust leads to a pretty much zero-cost solution.

It's true that if you want to really get into the nitty-gritty of micro- optimization in Rust, you need to learn some more and do things like profiling and inspecting the generated code to see what optimizations the compiler was able to apply or not.

But the Rust rewrite of source maps did none of that; they just rewrote it in fairly idiomatic Rust, and achieved a similar speedup to what a JIT engineer armed with a profiler, a deep knowledge of what affects how well a JIT works, and a willingness to do manual memory management in typed arrays was able to do.

> Having worked/interacted with a lot of people working with Rust on different > experience levels, most of them (that includes me) don't have a deep > knowledge of what Rust concept maps to a specific concept with which > performance implications

What parts of Rust do you feel like you don't understand the performance implications of? I feel like the mental model for performance is relatively similar to C or C++, with relatively few things that would surprise you if you're familiar with modern C++ (in fact, a lot fewer performance surprises than modern C++ offers, in addition to the extra safety).

</comment></comment><comment><USER11> I really don't understand this article, and the claims really rub me the wrong way.

The main point it makes is, again "He perfectly demonstrates one of the points my "Oxidizing" article was making: with Rust and WebAssembly we have reliable performance without the wizard-level shenanigans that are required to get the same performance in JavaScript."

This doesn't make a lot of sense as a claim.

Why? Because underneath all that rust .... is an optimizing compiler, and it happens the author has decided to stay on the happy path of that. There is also an unhappy path there. Is that happy path wider? Maybe. It's a significantly longer and more complex optimization pipeline just to wasm output, let alone the interpretation of that output. I have doubts it's as "reliable" as the author claims (among other things, WebAssembly is still an experimental target for LLVM). Adding the adjective "reliable" repeatedly does not make it so.

Let's ignore this though, because there are easier claims to pick a bone with.

It also tries to differentiate optimizations between the two in ways that don't make sense to me: "In some cases, JITs can optimize away such allocations, but (once again) that depends on unreliable heuristics, and JIT engines vary in their effectiveness at removing the allocations."

I don't see a guarantee in the rust language spec that these allocations will be optimized away. Maybe i missed it. Pointers welcome.

Instead, i have watched plenty of patches to LLVM go by to try to improve it's _heuristics_ (oh god, there's that evil word they used above!) for removing allocations for rust. They are all heuristic based, they deliberately do not guarantee attempting to remove every allocation (for a variety of reasons). In general, it can be proven this is a statically undecidable problem for a language like rust (and most languages), so i doubt rustc has it down either (though i'm sure it does a great job in general!)

The author also writes the following: "WebAssembly is designed to perform well without relying on heuristic-based optimizations, avoiding the performance cliffs that come if code doesn't meet those heuristics. It is expected that the compiler emitting the WebAssembly (in this case rustc and LLVM) already has sophisticated optimization infrastructure,"

These two sentences literally do not make sense together. The "sophisticated optimization infrastructure" is also using heuristics to avoid expensive compilation times, pretty much all over the place. LLVM included. Even in basic analysis, where it still depends on quadratic algorithms in basic things.

If you have a block with 99 stores, and ask LLVM's memory dependence analysis about the dependency between the first and the last, you will get a real answer. If you have 100 stores, it will tell you it has no idea.

What happened to reliable?

Why does this matter? For example: Every time rust emits a memcpy (which is not infrequent), if there are more than 99 instructions in between them in the same block, it will not eliminate it, even if it could. Whoops. Thats' a random example. These things are endless. Because compilers make tradeoffs (and because LLVM has some infrastructure that badly needs rewriting/reworking).

These "sophisticated optimization infrastructures" are not different than JITs in their use of heuristics. They often use the same algorithms. The only difference is the time budget allocated to them and how expensive the heuristics let things get.

There may be good reasons to want to write code in rust and good reasons to believe it will perform better, but they certainly are _not_ the things mentioned above.

Maybe what the author really wants to say is "we expect the ahead of time compiler we use is better and more mature than most JITs and can spend more time optimizing". But they don't.

Maybe it would also surprise the author to learn that their are JITs that beat the pants off LLVM AOT for dynamic languages like javascript (they just don't happen to be integrated into web browsers).

But instead, they make ridiculous claims about heuristics and JITs. Pretending the compiler they use doesn't also depend, all over the place, on heuristics and other things is just flat out wrong. At least to me (and i don't really give a crap about what programming language people use), it makes it come off as rampant fanboism. (Which is sad, because i suspect, had it been written less so, it might be actually convincing)

<comment><USER12> > Why? Because underneath all that rust .... is an optimizing compiler, and it > happens the author has decided to stay on the happy path of that.

There are two big differences here: 1) You're comparing "staying on the happy path" of a JIT compiler in the JS case, vs. an optimizing compiler in the Rust case. With the latter you can just compile your code and see what comes out and it tends to be fairly predictable. With the former, I'm not even sure there are tools to inspect the generated JIT code, and you're constantly walking the line of JS engines changing their heuristics and throwing you off the fast path. This was one of the primary motivations for the asm.js/WebAssembly work: the ability to get predictable performance.

2) Many of the optimizations mraleph performed were tricks to avoid allocation (which is normal optimization stuff, but more of a pain in GCed languages). In JS he winds up having to effectively write C-in-JS which looks pretty hairy. In Rust controlling allocation is a built-in language feature, so you can write very idiomatic code without heap allocation.

<comment><USER9> > what comes out and it tends to be fairly predictable

Predictable as long as you stay on the same version of the compiler (yes, I know that there are crater runs to prevent regressions). Also, how does much can/does the output for different target architetures differ in performance? Couldn't that be likened to trying to optimize for multiple JS engines?

</comment></comment></comment><comment><USER13> > _This is a factor of 4 improvement!_

This is a common mistake. It should read, "This is a factor of 3 improvement!"

x+x+x+x is an improvement over x of 3x not of 4x. The improvement factor is 3.

<comment><USER14> It's 3x faster _than_ , but 4x _as fast as_.

<comment><USER13> Yes</comment></comment></comment>


Retro design is crippling innovation - <AUTHOR> http://www.wired.co.uk/magazine/archive/2012/03/ideas-bank/clive-thompson

<comment><USER2> Comparing the headline to the contents, I feel there's room for a follow-up article: "hyperbole is killing criticism".

I mean, it's OK to hate skeuomorphs, a valid critical position, but nobody is going to die.

And the whole thing feels like Louis CK's riff about airplanes. You are _riffling through entire bookstores and museums on an affordable 150dpi Star Trek pad in the bathroom_ while complaining that innovation has stopped because the graphics look too familiar.

Two limited defenses of skeuomorphs. One: In a world where all of tech turns over on a timescale of months, orientation is important. It may be more important that people can glance at your calendar app and _tell that it's supposed to be a calendar_ than that the calendar app perform optimally in the hands of a trained expert.

The other is: Skeuomorphs generally mimic designs that are at least decades old, sometimes centuries old. Be cautious about casually discarding the work of tens of generations of designers in the name of neophilia.

(Book page-flipping animations are less defensible with the latter argument, but the former still applies.)

<comment><USER3> I don't think it's okay to hate on skeuomorphs in shipping products, as the author does here. It's a designer-centric rather than user-centric way of looking at things, and it's bad news for users when value judgments that aren't derived from the user experience are allowed to affect real products. Going by his definition of skeuomorphs, a drop-down menu is not a skeuomorph. A spinner (like the ones used in the iPhone to set a timer or an alarm) is a skeuomorph. That distinction has nothing whatsoever to do with which one is more usable in a given context.

Design space is dizzyingly unconstrained, and finding an optimal design is an intractable problem. A skeuomorph (sticking to the definition in play here) has taken its initial design from a particular source, a physical object. Odds are that the optimal design does not resemble that physical object. So what? Physical objects are a legitimate source of design ideas. Starting with a highly optimized solution to a similar, more tightly constrained problem is a common and effective pattern for generating good solutions to an intractable problem.

Another way of saying "hating on skeuomorphs" is "stigmatizing skeuomorphs," and the likely outcome of that is that designers, mindful of their professional image, will tend to eschew skeuomorphs in favor of inferior non- skeuomorphic designs until the winds shift back. (Isn't that the point of hating on skeuomorphs? To influence which designs are perceived as good or bad?) All that means to users is that they will be forced to use inferior designs because of a point of fashion they aren't even aware of. Another way of saying it is that analyzing whether a design is a skeuomorph or not is like analyzing a musician's influences: it might give you a clue to whether the creator keeps up with current trends, but it won't tell you anything about whether the product is good or not.

Sure, it's legitimate to say that other sources of inspiration should be mined as well. Constraining a problem to non-skeuomorphic solutions is a legitimate creative exercise, just like constraining the problem in any other way. It's a creative exercise, though. It isn't a legitimate rule of thumb for designing products any more than "use skeuomorphs!" is a good rule of thumb. Blindly changing features to make them less skeuomorphic is likely to make the product worse, not better. How to implement features in a shipping product such as Google Calendar should be based on usability, not whether you think the designer's thought process reflects a certain heuristic, overdependence on which has historically inhibited the emergence of new and better designs. Research efforts should be criticized on that basis, not shipping products.

<comment><USER4> Ease of learning is often decoupled from ease of efficient use, sometimes even inversely related. 'Usable' is not one thing for everybody.

So: a skeuomorph is obviously not a problem if it does not cause gratuitous errors or slowdowns, and it obviously is if it does.

And in any case design also concerns matters of taste, on which opinions will naturally differ.

</comment></comment></comment><comment><USER5> There's a nice tip in the comments for that article:

"In Google Calendar, pick the "4 Weeks" option at the top, instead of "Month" and it functions exactly as you describe, with the current week at the top. -benjymous"

I didn't have a 4 Weeks view - turns out there's a setting which controls what the button between Month and Agenda does, in Settings -> General -> Custom View. There's also a setting above that for which view is your default when you reload the calendar.

<comment><USER6> I've set 4 weeks as default in Google Calendar, so reading this article was baffling at first. Curious that 4 weeks doesn't show up for everyone. It is infinitely more useful than the month view.

</comment></comment><comment><USER7> I don't understand his criticism of the calendar. I WANT to see past dates. It gives me a context to what day of the week it is in relation to dates before and after today. Nothing irks me more when a calendar does not show days from last month on this month's calendar.

Example: Wednesday is April 2... Was Monday March 30 or 31? It forces me to switch my entire calendar to get this info. I want to see days in March and May on my April calendar.

For me personally, the agenda view is hard to view because my brain works on a week/month scale, not day scale. In day view, I also like to see all my events in blocks throughout the day with gaps, instead of a linear list of events without gaps. It helps me visualise free time.

<comment><USER8> I learned this rhyme from my parents: <http://en.wikipedia.org/wiki/Thirty_days_hath_September>

It works pretty well (I just remember the first two lines). I hope it saves you some time!

</comment></comment><comment><USER9> I don't get it.

He spends most of the article telling us that skeuomorphs are bad giving the example of calendar app that looks like a desk calendar and then finishes by praising an app with a screen that skeuomorphically flips up just like a wall- calendar.

<comment><USER10> The difference (at least as I understood it) is that that app isn't a wall calendar and chose that approach because they believed it was the best design, not because they wanted to mimic a wall calendar. Most designers of calendar and calculator software set out to design something as close to a paper calendar or desktop calculator as possible without necessarily asking if it was the best possible design.

Or in summary Mimicking because it is good design that fits what you're trying to do is good, mimicking simply for the sake mimicking is bad.

<comment><USER11> Yeah, there's a lot of cached thoughts in UI design.

Someone should start an open source lab that sets out to explore and test new design patterns in that space, without any preconceived notions of what should and should not work.

</comment></comment></comment><comment><USER3> I really hate criticism that doesn't suggest improvements. You can point out deficiencies all day, but until you have proposed or implied an improvement, you have not even proved that what you are criticizing is suboptimal, much less provided any helpful pointer towards improvement.

Unfortunately, the "old-fashioned, physical object" this design is based on is the human brain, or more precisely, the useful cultural artifacts that happen to be engrained in pretty much all the human brains on the planet. The monthly and weekly calendar reflects how we think about time. You think you can stop me from thinking in weeks and months by changing one calendar application? You'd have to work a little harder than that. Here's what you need to do:

1\. Stop my company from scheduling my paychecks to coincide with the beginning and middle of each month. Stop them from organizing my work days into groups of five days in the middle of groups of seven, and stop people where I work from informally scheduling things with respect to month boundaries.

2\. Do the same to the companies that employ all the people I occasionally synchronize my social schedule with.

3\. Stop all the businesses I use from scheduling lessons and classes on a monthly basis and varying their hours on a weekly basis. Persuade the state government that it should be as easy to buy liquor on Sunday as on any other day. (That should be easy once you've abolished the days of the week; see 5.)

4\. Detach holidays from dates. It would be so much nicer if Thanksgiving was the 329th day of the year instead of the fourth Thursday in November. That way I could forget about months and weeks, and my online calendar could make better use of screen space. (Again, this will follow easily once you've accomplished number 5.)

5\. Abolish the days of the week and the months of the year. Prevent anyone from referring to Monday, Tuesday, January, etc., or to weeks and months at all, so I never have to think, "We're shipping on the first Monday of next month. How many days until then?"

After all that, I'll no longer want a calendar app that orients me with respect to weeks and months. You can get rid of your "skeuomorph," and I won't mind that my calendar app gives me no visual, non-verbal cues about what day of the week or week of the month it is.

So, sarcasm aside, you DO need to show month boundaries. It is not helpful to propose doing away with the one convention for that without proposing any replacement for it.

Also, it is not helpful to propose doing away with the past entirely. People are oriented by the past as well as by the future. Oh, dear, it's been a week since I told Doug that information would be available soon. I had better drop him a line and explain that it's delayed. My tooth has been hurting ever since I went to the dentist; how long has that been? When's the last time I worked out?

Showing the past is a valuable function! If you don't recognize that showing the past is part of the function of the calendar, then criticizing a calendar for showing too much of the past rings a little hollow, because you aren't balancing the valuable functions of the interface. You're just picking one and throwing out another.

A better statement of the problem is that the visual clues for month boundaries are the top and bottom of the displayed grid of days on the screen, and therefore the past to present ratio varies dramatically through the month. During some parts of the month, you see very little of the past, and during other parts of the month, you see very little of the future.

A useful suggestion would be to detach month boundaries from the edges of the displayed grid and show them in some other way, perhaps by using color or shading. That way you can keep the balance of past to present close to an optimum value. Perhaps the current week can be the second or third from the top. I'm not a UI designer, but I think that is a more useful analysis of the problem, even if I didn't show off a new word I learned a few weeks ago from a magazine article.

<comment><USER12> Not quite there, but at least it was a start:

<http://en.wikipedia.org/wiki/French_Republican_Calendar>

</comment></comment><comment><USER13> Finally! Somebody who understands me!

Now I certainly don't think retro design is "crippling" the basic OS experience. I personally find the whole desktop metaphor to be silly and outdated and not so useful for a generation that has grown up with computers and don't need a clock to look like a wall clock in order to understand that it's telling us the time. OSX widgets may be immature and tasteless, but they're not a hindrance.

If retro design is crippling anything, IMO, it digital audio workstations (DAW). Whenever I launch Cubase I have to deal with virtual mixer boards and virtual synthesizers that mimic the interfaces of 40 year old hardware to the point that you have to turn virtual knobs with my mouse. It's ridiculous and more often than not it's frustrating. Now I understand how this choice of design eases the learning curve, but I'd much rather jump over a few hurdles than run straightaway into a wall.

This is why programs like vim and emacs are still relevant decades after their invention. They don't insult the users intelligence, they don't pretend to be something they're not, and they take full advantage of the platform they're designed for.

If somebody could create a DAW that adhere's to this kind of philosophy, I don't care if it uses ncurses as an interface, I'd adopt it in a heartbeat.

</comment><comment><USER14> "Let paper work like paper and screens like screens."

I liked that quote. Having said that, I take the point that skeuomorphs are not exactly destroying people's minds.

Another quote I found extremely intresting was this one, from a professional designer's blog

"It shows the care and attention paid to the printing of a photographic image, but also _shows how the analogue process of printing a photograph shares a lot with the the digital process of adjusting an image in Photoshop._ " [ my italics ]

See the quote in context at the link below

<http://www.wemadethis.co.uk/blog/2012/01/shaped-by-war/>

Basically, are we reaching the point where metaphors that originally made software more accessible (Photoshop like a wet darkroom) actually lose their meaning. My colleagues who teach photography often illustrate aspects of the photographic printing process using Photoshop (reverse metaphor).

Does anyone have any academic references on the anthropology of interfaces?

</comment><comment><USER15> If his argument is valid, there's no logical reason to stop where he does. You see a continuous progression of weeks instead of discrete months; fine. But what about days? What's so special about the end of one day and the beginning of the next? Nothing - it's just an artifact of paper calendars, daily planners, and so on.

What a calendar should be, if we're going to truly abolish the tragedy of skeuomorphism, is a smoothly flowing timeline, with you at the front, diminishing logarithmically into the future. This way, you can clearly see your appointments. Should make the author happy.

The point is, sometimes we need to artificially break things up into manageable pieces. We think in milestones - the beginning of a season, midnight as a landmark showing how late you're staying up. Some skeuomorphic designs are only "incidentally" skeuomorphic, in that they solve a problem the right way, and just happen to resemble how people used to solve that problem.

</comment><comment><USER16> Isn't iOS filled with skeumorphism, too? I know Matias Duarte said he wanted to make Android 4.0's design completely digital and without any skeumorphism.

</comment><comment><USER17> First thing I saw "Retro design is crippling innovation" followed by the left hand column "Subscribe to Wired Magazine for..."

Magazine, how retro

<comment><USER18> No, I don't think that magazines count as retro _design_. The problem isn't that print magazines still exist; the problem would be if the online subscription was designed to look like a print magazine (static pages sizes, separate pages that had to be turned, no links, etc).

</comment></comment><comment><USER19> I keep wondering when we'll move away from the "pages" paradigm in e-books. We should be returning to the scroll paradigm (which is already a familiar motif in software), not forcing content to fit a physical format which the e-reader is precisely an attempt to get away from.

Worst case is when trying to highlight, as a single mark (with note attached), a section of text which spans more than 2 pages (esp. when a "page" is a large-font phone-screen size): I can't tap-and-drag from one end of the section to then next because the "page" paradigm intervenes. Web page? word processing? no problem, we're used to highlighting via scrolling. E-book? _scroll_? nope, gotta match that page-flipping animation.

<comment><USER20> Scrolls do have one disadvantage over pages. It's hard to communicate where you are in one without some indexing aid. Any scrolling technology seems to be devoid of that.

I think that's why the page paradigm has persisted. It's all about familiarity.

</comment></comment><comment><USER21> I thought this was going to be about gaming before I read it. Retro designs have become de rigeur in gaming over the last couple of years and it's _boosting_ innovation by making it possible for indie developers to compete on a more level playing field against the big studios (e.g. MineCraft).

This article demonstrates how it's almost the opposite for non-game interfaces. Instead, it's the plucky upstarts that can take the risk on novel interfaces since they don't have large numbers of users to annoy (and I bet if Google tried to get radical with Calendar now, there'd be a real storm of hate over it).

</comment><comment><USER22> If nothing else, this article made me consider all of the 'retro' ideas I live with everyday. It is amazing how much things advance while staying the same.

What other 'retro' tech hasn't changed much? The automobile?

</comment><comment><USER18> Often, I'm just as frustrated about the opposite problem... technology that is _less_ functional than what it is replacing because it _doesn't_ replicate important features in a natural way. For example, I feel like I can organize my physical music collection on shelves in my house more quickly, naturally, and helpfully than I can my digital music collection in any media player/music manager I've tried. Shouldn't our technology be _at least as good as_ its counterpart?

<comment><USER23> So how do you search or sort by track name in your physical music collection?

<comment><USER18> You're right, I can't, and that's a useful feature. However, I don't find that I need to very often. In the interest and excitement of offering new (useful) features such as track name searching, I feel that these programs overlook many _more_ useful features. (This is besides the point, but... for example, I can organize albums together on a shelf in my house. That's how I like to decide what to listen to. Why do digital music libraries fail to offer such a tool?)

</comment></comment></comment><comment><USER24> The author is off-target.

Apple went over the top with the new iCal GUI, but it wasn't an interaction problem. Users have mental models from cultural experience that dictate how they want to use things. In other words, "that software feels intuitive."

The issue I suspect the author actually has with the new iCal is that it goes over the top visually. Software doesn't have to mimic the gaudy ornamentation of a real world object to resemble it.

</comment><comment><USER25> Can't agree more that skeuomorphs are awful. Probably my fav example of this is "sticky notes" apps. So f'in useless! What are your favs?

<comment><USER26> iBooks. It shows a bunch of pages on each side, regardless of whether or not you're on the first page, actually in the middle, or on the last page.

I wish that there was an OS with the core of iOS and the appearance of WP7[1].

1\. except Helvetica.

</comment></comment><comment><USER27> One nice thing that came about with the KIN (yes as in Microsoft) was the KIN studio. It had sort of a timeline thing going with all of the pictures and video you uploaded grouped by days. A lot of people complained it had no calendar but I thought it would have been kind of cool to put the calendar functionality with the studio.

</comment><comment><USER28> Regarding Google Calendar, there's a "7 days" view that shows today+6 days.

Personally I prefer the regular week view.

</comment><comment><USER29> Speaking of a good calendar UI widget, I really like how ITA Software OnTheFly iOS app does it... Instead of showing you one month at a time it shows you the current week - 2 weeks, current week + 2 weeks. Makes it really utilitarian. I wish more apps would adopt that format making scheduling much easier.

</comment><comment><USER30> HEAVILY inspired by [http://www.marco.org/2010/03/28/more-ideas-than-time- logarit...](http://www.marco.org/2010/03/28/more-ideas-than-time-logarithmic- calendar-view)

</comment><comment><USER31> So...this article about how a design philosophy is wrong contains exactly how many direct comparasons between flawed designs and their alternatives?

</comment><comment><USER32> This is article's premise is weird on so many accounts..

It's "crippling innovation"...what!? Retro design isn't an institution, or a person, or even a "thing". It's a concept that designers take in order to progress towards a more usable interface.

You know what "cripples" innovation - massive design changes that happen in extended batch schedules. Technically this doesn't cripple innovation, it simply decreases innovative adoption and user acceptance.

</comment><comment><USER33> What's wrong with skeuomorphs?

That needs to be answered first before assuming crippling of innovation.</comment>


Plex Server Now Running on Nvidia  SHIELD Android TV - <AUTHOR> https://blog.plex.tv/2016/06/09/nvidia-shield-you-complete-us/ <comment><AUTHOR> The SHIELD can now run Plex Media Server as well as the Plex Android client. PMS on SHIELD includes full hardware accelerated transcoding and support for 4k@60 content. Pretty sweet!

Also: [https://shield.nvidia.com/blog/plex-media- server](https://shield.nvidia.com/blog/plex-media-server)</comment>


Clue to earthquake lightning mystery - <AUTHOR> http://www.bbc.co.uk/news/science-environment-26462348 <comment><USER2> preface: I'm doing a PhD in granular physics.

I was at a conference two years ago where this experiment (flash of light from a tub of flour) was discussed. This is not new, or news.

It was also linked, by another speaker at the conference, to earthquake lightning in the following discussions.

<comment><USER3> It may not be news to experts in the field, but I think it's news to most of us.

<comment><USER4> Unless I've missed something, it also seems to be news to Professor Troy Shinbrot of Rutgers University.

<comment><USER5> No, Troy is the link. [http://phys.org/news/2012-06-rutgers-granular-slip- documents...](http://phys.org/news/2012-06-rutgers-granular-slip-documents- voltage-video.html) (So after 2 years he still has no idea on how it's happening?)

<comment><USER2> Ah, if they were writing about it 2 years ago already, then their result may be the one that was repeated in front of me - curse the mainstream media's "new! new!" language in their copy.

the abstract from that paper is very informative as to the context:

 _" It has been known for over a century that electrical signals are produced by material failure, for example during crack formation of crystals and glasses, or stick-slip motion of liquid mercury on glass. We describe here new experiments revealing that slip events in cohesive powders also produce electrical signals, and remarkably these signals can appear significantly in advance of slip events. We have confirmed this effect in two different experimental systems and using two common powdered materials, and in a third experiment we have demonstrated that similar voltage signals are produced by crack-like defects in several powdered materials."_

<comment><USER6> Interesting that this is likely also very related (or the exact same) as when peeling scotch tape, that mechanical action produces x-rays.

What about the thought of Chi; could the electric impulses commonly thought of for centuries by martial artists and meditators be an electrical output of some mechanical function of the body?

<comment><USER2> Chi - only of breaking your arm.

The energy being released is from fracture, i.e. bonds breaking, in all but the granular case. Indeed, even granular pack breakup could well involve sympathetic local charging, especially for packs gradually compressed and stressed like soils.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Tupperware tends to be plastic, the BBC article doesn't really mention if they tested different container materials with the same substrate. For example, would a wooden container yield the same results with flour as the "soil"?

Their abstract mentions the use of 3 types of "soil" \- organic powders, polymeric disks and glass particles. Does anyone have access to the full article to see if they repeated the experiment with differing containers?

<comment><USER8> I had the same thought. The box in the photograph looks like acrylic, which has a strong triboelectric potential.

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

Here's a paper by the authors:

[http://arxiv.org/abs/1307.2489](http://arxiv.org/abs/1307.2489)

 _" The shear cell is nominally 125 cm × 26 cm in size, and the particles are weakly confined by either a 0.5 mm clear flexible PVC or 1.4 mm thick acrylic sheet in order to suppress out-of-plane buckling. The sheet is wiped with a damp cloth before the experiment to minimize triboelectrification."_

<comment><USER7> Exactly. Also, it's a bit hard to determine but the container looks closed. In my mind that would provide another surface to enhance the triboelectric potential you mentioned.

Edit: Thanks for that link. Why don't they remove the triboelectric contribution altogether by using a more sensible container for obtaining reliable results?

</comment></comment></comment><comment><USER9> Interesting. I'd like to see further research done to test if large voltage spikes like this could explain animal behavioral patterns before earthquakes and tsunamis.

</comment><comment><USER10> What kind of equipment is required to detect those spikes? Can it be done at home as an experiment?

<comment><USER11> Check out "The Scientific American Book Of Projects For The Amateur Scientist" \- C. L. Strong describes quite a bit of this in the section "The earth sciences". The schematics date from 1960 (tubes, not transistors) but you'll find updates around the web.

[http://www.sciencemadness.org/library/books/projects_for_the...](http://www.sciencemadness.org/library/books/projects_for_the_amateur_scientist.pdf)

</comment></comment><comment><USER12> If this is a phenomenon, could it used to generate electricity? What the lower layer of ships were filled with a flour like substance? Would that produce anything useful as the ship rolled? Or what if we float tubs of this stuff on waves?

<comment><USER13> > If this is a phenomenon, could it used to generate electricity?

In theory yes. You could gain electricity by rubbing millions of plastic rods on cats. Whether that's an efficient way to produce electricity is a different matter: Power plants that use the power of waves exist, at least in experimental stages and they're probably much more efficient than a boat filled with flour.

<comment><USER14> Also, note that although producing Volts means electricity it doesn't mean necessarily that you have any significant amount of energy.

You may have an incredibly large amount of volts from a source that's not even capable to light a bulb for a few seconds.

<comment><USER13> see for example a zamboni pile: [http://en.wikipedia.org/wiki/Zamboni_pile](http://en.wikipedia.org/wiki/Zamboni_pile) potential is in the KV range while the current is in the nano ampere range. That thing is weaker than most most modern batteries when it comes to powering things.</comment></comment></comment></comment>