When Can I Code Swift on the Server? - <AUTHOR> https://www.cabforward.com/can-code-swift-server-side/ <comment><USER2> _Apple's desire to provide open source products (none)_

This trope drives me nuts. Go here: [http://www.opensource.apple.com](http://www.opensource.apple.com)

You'll find a bunch of open-source projects that Apple has contributed code to (LLVM, WebKit, CUPS), as well as a bunch that they wrote and released (launchd, clang). They've recently released their ARM64 backend for LLVM.

I will be surprised—extremely so—if Apple choose not to open-source Swift. It has no downsides for them, and it's obvious that many people will simply refuse to get involved with it if they don't.

<comment><USER3> Apple hasn't so much contributed to LLVM and Webkit as fundamentally enabled them, right? Chris Lattner is an engineering lead at Apple, for instance.

I agree with your prediction about Swift being open sourced. Among other things: as nice as Swift might be, its #1 value proposition is "easy to build iOS applications in", so the more people using it the bigger the developer base for iOS becomes. I can't see the downside to opening it.

That doesn't, however, mean they'll open it up on HN's preferred schedule.

<comment><USER4> Lattner created LLVM before joining Apple. Apple hired him _for_ LLVM.

<comment><USER3> ... and then massively invested in LLVM.

<comment><USER4> Certainly true, but what I'm getting at is, the decision not to close up an open-source project is rather different than the decision to open up a closed- source project. I'm not saying Apple has never contributed to open-source, but that I don't think their decision to heavily support an existing open-source project really reflects on what they'll do with Swift.

</comment></comment></comment></comment></comment><comment><USER5> Wow, the OP loves jumping to conclusions. I've seen on HN a couple of threads where people claim that Apple employees say they, at a minimum, need to clean up the codebase first before open sourcing the language. While I don't know if that's true, I'm prepared to wait until Apple, not this guy, says that Swift will or will not be open sourced. Just because it's not open source now doesn't mean it'll never be.

Then they point out that there are 3rd party HTTP libraries, and completely ignore the possibility that maybe Swift might be just the thing to catalyze the creation of a new one.

To be sure, unless you're serving from an OS X based server, it'll be hard to deploy Swift-based apps until significant supporting infrastructure has been built. But I don't see any real evidence that "never" is the answer to "When Can I Code Swift on the Server?"

</comment><comment><USER6> On the topic of Swift's openness, it appears to be somewhat ambiguous at this time; that is, the door is neither entirely open or closed. For example, in response to general questions on this topic, Chris Lattner responded:

 _" We don't have anything to say about that at this point [...]"_

[http://article.gmane.org/gmane.comp.compilers.clang.user/493](http://article.gmane.org/gmane.comp.compilers.clang.user/493)

And...

 _" Right now we are focused on finishing it up for the final release this fall."_

[https://twitter.com/clattner_llvm/status/473907124288770050](https://twitter.com/clattner_llvm/status/473907124288770050)

<comment><USER7> I'd give about 95% odds that Swift will be open sourced relatively soon. That's just how Apple works at this level. They kept WebKit open source. They adopted LLVM and kept their contributions open when they could have easily made a closed fork. They built and open sourced clang even though there was nothing requiring them to.

But another aspect of how Apple works is that they love secrecy and hate making promises. They built an ARM64 backend for LLVM in private, and the first time anyone found out it existed was when they announced the iPhone 5S with an ARM64 CPU. They still ended up releasing the source code.

Right now, even the Swift compiler _binary_ isn't publicly available. You have to have a paid developer membership to obtain it. They wouldn't open the source at this stage regardless. They most likely will, but they also most likely won't commit to anything until the initial public release.

<comment><USER8> I thought they were compelled to open source WebKit since it was based on LGPL code?

<comment><USER7> It looks like that applies to WebCore and JavaScriptCore but not WebKit, since that's built on top of the LGPL parts as a separate entity. From Wikipedia, "WebKit's JavaScriptCore and WebCore components are available under the GNU Lesser General Public License, while the rest of WebKit is available under a BSD-style license."

<comment><USER9> So, I would say "not enough evidence" to make a call on Swift. Clang's the only from-scratch project that was open-sourced, right? Same author though, so I think the chances are fairly good, but how long is the bigger question.

<comment><USER7> There have been a lot more. I give a partial list elsewhere in the thread:

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

<comment><USER9> Fair enough, good list.

<comment><USER7> I should say that you're right about "not enough evidence". I think it's safe to say that it's likely, but with Apple, nothing is certain until they announce it and sometimes not even then.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I wouldn't necessarily say "never." The author says Apple has no interest in open source projects, but there is precedent with WebKit and the LLVM project. So while no one should hold their breath waiting for Apple to open source Swift's standard library and LLVM components, I wouldn't be surprised to see it happen (and wait for the inevitable Rails-like framework to sprout up. "Bullet Train" anyone?).

<comment><USER11> Is it possible you could give some examples of projects that were created in house at Apple that were open sourced?

<comment><USER12> Off the top of my head, clang, launchd, libdispatch, Bonjour (Rendezvous) and the ARM64 backend for LLVM.

</comment></comment></comment><comment><USER13> I am one of the guys behind Objective-Cloud. We will support Swift sooner than later.

<comment><USER14> I think you guys are in a great position now to implement a server/client solution in Swift. Effectively re-create Parse in Swift but I imagine CloudKit may have these aspirations? Any comments on what sort of competition the CloudKit brings to the BaaS table?

</comment></comment><comment><USER15> Sounds like an interesting case that somebody should just start a project to add swift as a frontend to GCC - maybe a kick starter project for a grad student. GCC has support for all of the language constructs that are present in swift.

<comment><USER16> Swift is built on LLVM which can compile to many targets such as Linux and Windows. I'm not sure I see any reason to add Swift to GCC.

</comment></comment><comment><USER17> If some solution for Swift-on-the-server came out, it'll probably have to be OS X-only; as, as far as I know Swift is OS X* only. Such a dependency on OS X is not feasible, as OS X adds dependency to Apple hardware, rendering the platform infinitely expensive and unportable.

I reckon that it would be the best bet for Apple to open source Swift, as it would allow a much more lively community and a much bigger set of libraries around the language. They need not open-source the OS X-specific libraries, but a closed source Swift will not succeed to survive in any area other than OS X/iOS GUI development.

* ... and iOS.

<comment><USER18> Swift is a LLVM frontend, as long it does compiles source code to the LLVM-IR, all of the LLVM "ecosystem" in the backend applies here.. so its pretty much multiplatform by now, since LLVM compiles to virtually all platforms and OS's..

Only Apple specific Api's wouldnt be available.. but even this.. there are always obj-c clones here and there for the apis..

So once they release the source for the Swift frontend, the possibilities for the Swift code are endless

<comment><USER4> The Swift standard library is Cocoa. Swift might be able to compile for all platforms through LLVM, but without the runtime and standard library, what use is the compiled code?

</comment></comment></comment><comment><USER19> Probably when Apple has a server product that requires it?

</comment><comment><USER20> Two things:

1\. You could write an OS X application for your back end services, and use a OS X hosting company (there are some) or use a mac mini, etc. in a colo rack. But, you would not have a rich server side software tools infrastructure like JBoss, Tomcat, Yesod, etc.

2\. use another language like Haskell, Java, etc. on the server.

</comment><comment><USER21> Swift on the client-side and Scala on the server-side would make for a great combination.

</comment><comment><USER22> Hold my beer as I put the finishing touches on my Swift-to-node.js compiler...

</comment><comment><USER23> WebObjects used to be highly regarded. I would assume that given the Objective-C origins, Swift could use it as well?

<comment><USER24> WebObjects hasn't been related to Objective-C for a while (It was rewritten in Java in 2001).

While WebObjects is still apparently being used by Apple's Online store and presumably some other internal applications, I wouldn't expect any serious WebObjects integration for Swift from Apple.

</comment></comment><comment><USER25> Right after they launch their 64 CPU, 256 core ARM64 X-serves.

</comment><comment><USER26> If only we had Yet Another Dynamic Scripting Language (YADSL) that we could use to write web frameworks! Because there are only like 17 with full ecosystems and tools and libraries to talk to every existing database engine, yadayadayada.

What we really need is another one so that we can spend our time poking at a new language instead of building useful things! Swift would be an especially good one, since it doesn't have anything new to offer (unlike Clojure or Scala or Rust or Go) and it has great interoperability with Objective C (which Apple abandoned for server side programming in like 2005) AND it doesn't run on anything other than OSX, which is awesome because Apple discontinued Xserve over 10 years ago (EDIT: Xserve discontinued a few years ago), and there are basically no hosting providers of any kind. We could spend literally tens of person years building up all that stuff instead of using the massive infrastructure already in place!

<comment><USER2> What parts of Swift (a compiled, statically-typed language) make it YADSL?

<comment><USER26> "Compiled" is a pretty tricky thing, even Python and Ruby are "compiled".

How about "Yet Another Syntax Without Any Interesting Semantics, With a Bonus of Being Proprietary" (YASWAISWBBP)

<comment><USER4> I don't think there is any other mainstreamish language with enforced option types. Even Scala and F# just cave and allow nulls everywhere. Swift's constellation of features is very interesting IMO.

<comment><USER26> 1\. Swift is not a mainstream language. Maybe you trust in Apple's ability to turn it into one. 2\. Haskell and Common Lisp, but maybe those aren't "mainstreamish".

<comment><USER4> It's the primary language for a huge platform. I don't know how much more mainstream you can get. This seems a bit like saying, "I'm not sure the newly elected US president is a significant figure in US politics."

And no, neither Haskell nor Common Lisp are anywhere in the same city as the mainstream. For an idea of what I mean, pick a reasonably significant "target domain" for the language and consider how many major applications are written in that language. There is no platform on which Haskell or Common Lisp get used very much compared to other languages. Objective-C is clearly a dominant presence on iOS, C# rules Windows, Java has a lock on the enterprise, C and C++ are the bosses of systems programming, Haskell is…an interesting language whose motto is "avoid success at all costs."

And also, I don't think Common Lisp has enforced option types. (car '(1)) is 1 while (cadr '(1)) is NIL. Am I mistaken?</comment></comment></comment></comment></comment></comment>


Show HN: Blockchain Stamping API - <AUTHOR> To anyone concerned in integrating blockchain functionality in their application: We have launched a very simple API. It's still in limited access so please contact us if you are interested.<p>API Reference: https://stampd.io/api_reference/ <comment><USER2> excellent Idea. I would recommend adding the founder Bios to the page. Also can you comment on using Bitcoing blockchain vs rolling your own chain?

<comment><USER3> Rolling a separate chain that would be immutable/trustless/decentralized would require several parties mining plus a token of value (creating the incentives for the mining as a block reward). Bitcoin's blockchain has bitcoin as such a token. In our own chain the token we would issue would be worthless. Therefore blockchain notary stamping is only immutable with well established valuable token backed cryptocurrencies (such as bitcoin in our case).

Indeed founder bios is a good idea, we will work on it.

<comment><USER2> Thanks for the response. You state as much in the FAQs.

I will show my ignorance here but see if we can make some headway.

Your own token doesn't have to be fungible with other tokens so it doesn't have to be worth anything.

The cost of mining therefore is just the time and electricity which you would charge your users for.

So my question was around user cost,fungibility of your token and added stress to the Bitcoin blockchain.

<comment><USER3> In order for a blockchain to be decentralized and immutable one would need to have a large spectrum of participants involved in mining. If a single party is mining then his particular blockchain could be re-written by that single party or any other single party with greater mining power. Therefore we tend to believe that basing a stamping functionality on a broadly accepted token based blockchain (such as bitcoin or ethereum) is the only way to go.

<comment><USER2> I am sure we are talking past each other here. I wish you the best of luck with your idea. Please let me know If I can help in anyway.</comment></comment></comment></comment></comment>


JQuery 1.4 iPhone reference app - <AUTHOR> http://www.mrspeaker.net/2010/01/14/jquery-iphone-reference/

<comment><USER2> While interesting, I'm not exactly sure why you need jQuery reference on a mobile device. Every single time I have been developing with jQuery I have been on a computer.

<comment><USER3> I find stuff like this useful as a way to learn more while doing something like riding the bus, sitting in a waiting room, etc. I wouldn't use it while developing, but it'll help me learn while not developing.

</comment></comment><comment><USER4> Very cool web-app. Interesting use of local db and iphone-specific html stuff. props!

</comment><comment><USER5> If anyone could point me to similar (iPhone-friendly) references for Objective-C and iPhone development I would be eternally grateful. I've downloaded the PDFs, which a reader like GoodReader does pretty well at, but something like an HTML-formatted guide would be more palatable.

</comment><comment><AUTHOR> iPhone link: <http://www.mrspeaker.net/dev/jq/ref/></comment>


Talks.guru – a free, curated directory of incredible lectures and presentations - <AUTHOR> http://talks.guru/

<comment><USER2> Not bad. RSS feed? It says "send pull request", but I don't see a github link or any contact address.</comment>


Microsoft's Mojave Experiment Exposes Serious Vista Problems - <AUTHOR> http://www.roughlydrafted.com/2008/08/15/microsofts-mojave-experiment-exposes-serious-vista-problems/

<comment><AUTHOR> An extremely thorough review of the lies, damned lies, and statistics behind Vista. Note the analysis of Microsoft's comparison between Vista and OS X vulnerabilities: when counting OS X vulnerabilities, MSFT's shills include applications and third party libraries such as Safari and Java vulnerabilities. Meanwhile they excluded the same categories of vulnerabilities for Vista, ignoring IE and Java on their own platform.</comment>


Dropbox confirms that a bug within Selective Sync may have caused data loss - <AUTHOR> https://gist.githubusercontent.com/ghuntley/42803b4cabb181098063/raw/2e06230c31018cefbc706dca5e7b12ef9692d87e/gistfile1.txt <comment><AUTHOR> Additional info from Dropbox support:

        We received several reports from users who used a Dropbox feature called Selective Sync and couldn't locate certain files they'd saved in Dropbox.
        When we took a closer look, we discovered that older versions of the Dropbox client had introduced an issue affecting a small number of users whose Dropbox application shut down or restarted while users were applying Selective Sync settings.

        In light of all of this, we've taken the following steps to ensure the Selective Sync bug won't affect anyone else going forward:

        1) we've patched our desktop client so this issue doesn't exist in Dropbox anymore;
        2) we've made sure all our users are running an updated version of the Dropbox client; and
        3) we've retired all affected versions of the Dropbox client so no one can use them.

        We've also put additional testing in place to prevent this from happening in the future.

        We're very sorry about this issue and the trouble it might have caused. We'll keep doing our best to ensure our users' data is always safe and available to them.

<comment><USER2> Just so you folks don't have to scroll sideways:

We received several reports from users who used a Dropbox feature called Selective Sync and couldn't locate certain files they'd saved in Dropbox.

When we took a closer look, we discovered that older versions of the Dropbox client had introduced an issue affecting a small number of users whose Dropbox application shut down or restarted while users were applying Selective Sync settings.

In light of all of this, we've taken the following steps to ensure the Selective Sync bug won't affect anyone else going forward:

1) we've patched our desktop client so this issue doesn't exist in Dropbox anymore; 2) we've made sure all our users are running an updated version of the Dropbox client; and 3) we've retired all affected versions of the Dropbox client so no one can use them.

We've also put additional testing in place to prevent this from happening in the future.

We're very sorry about this issue and the trouble it might have caused. We'll keep doing our best to ensure our users' data is always safe and available to them.

<comment><USER3> Is there a way we can contribute some CSS fixes to the HN code base. These issues could be quick and permanent fixes. Also 12px Verdana? Mobile?

<comment><USER4> They've been reluctant to change the markup because of the many scrapers. Hence, the recently released API in preparation. An updated UI is incoming.

<comment><USER3> The majority get a poorer experience because a few people are scraping? I'm guessing 99% of traffic is from people hitting the site in browsers.

<comment><USER5> HN has historically subscribed to a form of deontological ethics[1] rather than utilitarianism.

[1] [http://www.bbc.co.uk/ethics/introduction/duty_1.shtml](http://www.bbc.co.uk/ethics/introduction/duty_1.shtml)

(I happen to agree with HN's ethical posisition, but I invite you to look at the section "Bad points of duty-based ethics" in the link).

<comment><USER3> You are assuming the rule "Never change the source code unless you have to" is a deontological imperative.

It's not really is it? It's just something you believe and are justifying with obscure ethical arguments. Thanks for the reading :-D

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> I was affected by this, but I realized it at the time.

I have an older laptop that I turned on. It was a work laptop a few years ago, linked to my dropbox account, etc. Since then I had added a bunch of things like a bunch of git repos to a folder included in dropbox.

I turned on that laptop and Dropbox started using 100% cpu after a few minutes. Then the fan kicked on and it was annoyingly loud so I looked at dropbox and saw it was chugging along in the repos directory. I went ahead and clicked on selective sync, unchecked repos, and left it alone for about 5 minutes.

It was still 100% cpu, so I killed the dropbox task and restarted it.

Minutes later, on another machine, I went to fetch from one of the repos and it had a gnarly error. So I went about investigating.

I found my way to the dropbox events tab (on the website - the desktop client doesn't have this feature) and saw an event where dropbox decided to delete 7,800 files.

I submitted a support request, but before they responded I had figured out it was (mostly) in the repos directory, which I fixed by simply deleting the repos and pulling from one of my servers.

Anyways. There's my real world run in with this bug.

</comment><comment><USER7> This is exactly why sync is not a commodity. Dropbox is the very best at what they do, and even they have bugs. So when someone offers to sync your files for less, ask why.

<comment><USER8> > This is exactly why sync is not a commodity. Dropbox is the very best at > what they do,

The very best? I use OneDrive across all of my Windows machines and I don't even notice it exists; never had any problems. I just access all my files everywhere. If you buy a windows phone you even get a decent amount of space for free (15GB). (Though I subscribe to Office 365 so I have virtually unlimited space.)

<comment><USER9> It is a cliche, but the plural of anecdote is not data. I never had any problems with Dropbox, but had Office on OneDrive corrupt files. OneNote has also rendered some notes unreadable.

The bottom line is that errors happen. You should prepare for that and make backups.

Also, Dropbox are still among the very best when it comes to syncing. Many useful synchronization features are implemented by Dropbox, but not the competition. E.g., features that most competitors do not have:

\- Modifying a large file on Dropbox will only resync modified chunks.

\- DropBox avoids re-uploads, both when uploading identical files and moving files around:

[http://macography.net/2013/05/speed-test-dropbox-google- driv...](http://macography.net/2013/05/speed-test-dropbox-google-drive-box- skydrive-amazon-cloud-drive/)

\- Dropbox does LAN sync. If a machine has to download a large file and another machine on the network has the same file, chunks are provided peer to peer. This makes using large files on multiple machines or in a team much faster.

\- Dropbox does streaming sync. A machine can already download chunks when another machine is still uploading:

[https://blog.dropbox.com/2014/07/introducing-streaming- sync-...](https://blog.dropbox.com/2014/07/introducing-streaming-sync- supercharged-sync-for-large-files/)

Sure, OneDrive and Google Drive do have many useful functions that Dropbox does not have, such as including complete office suites. But for the original task, file syncing, Dropbox is still pretty much unbeaten.

<comment><USER10> I think you're attributing too much of Dropbox's success to simple technical reliability. It really isn't that difficult a problem, and many services and projects do it right. I have an rsync script that has been syncing my files reliably to an offsite location for 6 years.

It's certain that Dropbox has a high quality syncing service, but there are other factors. Think, for example, how this case was handled: a fault in their core product, a breach of user trust in their service, and they understood that it needed more than a technical solution. None of this was part of their core sync reliability: it was part of a more broad quality, which is closer to their true reason for success.

<comment><USER9> _I think you 're attributing too much of Dropbox's success to simple technical reliability._

I did not say anything about their reasons for success. Only what the technical advantages are compared to some of the other file sync services.

 _It really isn 't that difficult a problem,_

Difficult enough that some of its useful features are not matched by other services yet.

 _I have an rsync script that has been syncing my files reliably to an offsite location for 6 years._

That's great. But that is one-way sync and not something my parents could use. Dropbox is successful because they made sync technology that is relatively flawless to the average user. Also, there is a network effect.

In the longer term, it will be interesting to see if they survive, since Microsoft and Google have been undercutting prices heavily, and as far as I know there is no online Office suite on the horizon (only Microsoft Office integration for business users).

</comment></comment></comment></comment></comment><comment><USER11> I aggressively use selective sync, and have since as long as I can remember yet I haven't got an email like this, so it may only affect specific users.

<comment><USER12> It appears the circumstance is more specific than simply using selective sync.

> This problem occurred when the Dropbox desktop application shut down or > restarted while users were applying Selective Sync settings.

So, you must be in the midst of applying selective sync settings while the app shuts down or restarts. Although I'm not sure what they mean when they say, "while users were applying selective sync settings." I'm not sure if this means:

A) Changes made in the selection dialog box, but not committed (by clicking OK).

or

B) Changes committed, but still syncing.

The former is an edge case, the later, not so much.

<comment><USER11> Interesting. I know a few times I've had to kill the dropbox process while changing my selective sync settings before.

</comment></comment></comment><comment><USER13> Dropbox should have understood that people are using it as a backup service. I mean carousel and other use cases sort of ebcourage and imply this. With that in mind, it baffling they didn't have any proper backups for user data.

<comment><USER9> It is a shame that they don't offer the unlimited packrat option anymore. It's still not backup, but at the very least people would be able to recover files in such cases.

Also, if I understand correctly, Google Drive has a better policy here: removed files are just placed in the trash until you remove them from the trash. Of course, trash takes space up as well, but it protects better against such cases.

I guess Dropbox is trying to maximize its profits with its 'remove after 30 days' policy.

<comment><USER14> I have been using the "packrat" feature for more than a year, and Dropbox sent me a similar notification today to tell me they lost several thousand files, 816 could not been restored. They were "lost" around 8 months ago, so "packrat" didn't save me at all.

As it turns out, I have other backups of most of the files, and the rest of them weren't important. So I was lucky. Still, my confidence in the product is unlikely to recover.

I want to note that I had been aware of the "dropbox is not backup" chorus, but that argument usually is just "sync is not backup", which is sort of obvious. The packrat feature pretty much addressed this issue, so dropbox with packrat WAS a backup solution. So the lesson here is never to rely on any ONE backup provider.

</comment></comment></comment><comment><USER15> A good reminder that Dropbox is not a backup client, and should not be relied on for backups, any more than RAID should be.

<comment><USER16> It's about as good as any online backup system. It's much much better than raid.

If you want to be picky you shouldn't _rely_ on backups unless you have multiple independent backup systems, at least one offsite, at least one offline.

<comment><USER17> Sorry, but this is just wrong. Any system that offers multi user sync is inherently more complex than it needs to be as a backup solution. A backup should generally be

\- convenient enough that you do it without thinking about it.

\- technically as simple as possible, so it's easy to understand and review.

\- secure.

Dropbox fullfills the first point, but not the second, and the third is debatable. Spideroak as a counterexample is just as convenient, has a pure incremental backup mode and is client-side encrypted, the gold standard of security.

<comment><USER16> You really don't need any of those to be a solid backup system. What matters is that you make backups, the backups last long enough, and there's testing of backups.

Also from what I've seen spideroak is significantly more complex than dropbox.

</comment></comment></comment></comment><comment><USER18> We provide a self hosted sync offering for businesses. It is currently used by close to 1000 businesses. It took us almost 18 months from our launch to get the sync right. There are simply too many edge cases and the development team needs to closely work with the customers to identify and fix it. Even then our complexity is much less than dropbox. The largest customer of ours have 10000 users.

Short story: if you plan to develop a sync product from scratch, be prepared to spend at least 2 years or hire core developers from Dropbox sync team. Eve now dropbox has issues with handling large number of small files. Try to stuff 200000 to 300000 files and see how it works.

</comment><comment><USER19> How old is this issue? The release notes don't spell out clearly if this bug was fixed in the past 2-3 updates (using v2.10.30 on Win 7)

[https://www.dropbox.com/release_notes](https://www.dropbox.com/release_notes)

</comment><comment><USER20> I was notified of the potential data loss and checked my data on the 'personalized web page.' Of the 12,000 files that may have been affected, I found only a subfolder of a few dozen photos that may've been removed.

The problem is that when I clicked 'restore all' from within the subfolder, Dropbox restored all 12,000 files rather than just the files within the folder.

Note to DB's UX team: when you place a Restore All checkbox above the lefthand file selection column, it means 'select and restore all files on the page', not 'lift the roof off my house and dump in all the shit I spent months decluttering.'

<comment><USER21> I've been hoping for a 'restore folder to date X' for a long time too.

</comment></comment><comment><USER3> Ha, dropbox deleted my files the other day presumably due to this bug. I ranted on Twitter and they came back with the dropbox client can't delete files. Hmmmm. Seems I was correct :-/

</comment><comment><USER22> I have all my digital life on dropbox, a few hundred gig.

One of my greatest fears is that thousands of files might disappear without me noticing for years.

I use selective sync and twice I was looking for something that has disappeared and I have to restore it. I assumed maybe my wife accidentally deleted some files, but maybe it was dropbox?

What is the solution to this anxiety?

<comment><USER23> Perhaps you can have a cron job run against your local dropbox folder(s) and do an "md5deep" reporting only differences (or sha1deep or whatever, perhaps test which uses least resources, maybe nice it heavily too). Then you could have the output report saved to a folder (not a dropbox one!). Perhaps add another job to email/alert you if the "count" of lines in the report is greater than a certain number? Crude, for sure.

</comment></comment><comment><USER24> I remember someone posting on HN about this, a month ago. Can't seem to find the link.

<comment><USER25> Here it is: [https://news.ycombinator.com/item?id=8441230](https://news.ycombinator.com/item?id=8441230)

</comment></comment><comment><USER26> This manifested for me as a large number of "conflicted copies" everywhere inside my main visual studio solution. Thankfully, source control saved the day... But I was really annoyed at Dropbox for a little while.

</comment><comment><USER27> As founder of cloudHQ, I have to jump into this. Software products will have bugs. And people will make mistakes. We are all human.

So even if you store data in Dropbox - it is smart to have one extra copy in some other cloud storage. Like Google Drive. Or Box. Or Egnyte. So if data is deleted in Dropbox (accidentally, maliciously, or due to a bug) you can restore it from other cloud.

Of course, cloudHQ is the system which can do that: [http://chq.io/hnsc](http://chq.io/hnsc)

</comment><comment><USER28> I stopped using Dropbox because of this. I booted my system up one day and a ton of my files were deleted (locally). Luckily, this didn't affect the sync on my other systems.

</comment><comment><USER29> Yikes. All those nines of durability that Amazon provided for Dropbox...brought to naught by a bug in Dropbox's software.

</comment><comment><USER30> I think this calls for an aggressively distributed, user-controlled backup system. Perhaps tahoe lafs based.</comment>


Show HN: Minecraft clone in 2500 lines of C - even supports multiplayer online - <AUTHOR> https://github.com/fogleman/Craft <comment><USER2> Cool. From the same author of Minecraft clone with Python: [https://github.com/fogleman/Minecraft](https://github.com/fogleman/Minecraft)

The python version uses only 894 lines of code: [https://github.com/fogleman/Minecraft/blob/master/main.py](https://github.com/fogleman/Minecraft/blob/master/main.py)

<comment><USER3> Woah, i just began python programming for sysadmin scripts, didnt even know one could do that with python! impressive.Is there any other game made with pyglet that are open source?

<comment><USER4> I don't know about pyglet, but there are lot of PyGame games to explore.

</comment></comment></comment><comment><USER5> Not to be a party pooper, but there doesn't seem to be much in the way of error checking, null pointer checking, etc. e.g. Apparently library calls like calloc() and fopen() never fail. I guess if your goal is "few lines of code" it's understandable to leave that stuff out.

If your brain has the tendency to automatically go into "code review" mode, I recommend against browsing the source :)

<comment><USER6> What should you do if calloc fails? Any solution I can think of requires an architecture that does not belong in a game.

<comment><USER7> Abort and terminate? Jokes aside, error checking in c is important since if you don't do it you get "On error resume next" behavior.

<comment><USER8> What does malloc() return if it fails?

        volatile char *x = 0;

And what happens if you write to that address?

        *x = 69;

The answers to these questions, whilst not defined by the C language, are portable enough.

<comment><USER9> What about the more common situation where the thing to be allocated is a (potentially large) array? These aren't always accessed sequentially. And the offset might be (indirectly) controlled by untrusted data from the wild.

</comment></comment></comment></comment></comment><comment><USER10> CMake Error at CMakeLists.txt:20 (find_package): By not providing "FindGLEW.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "GLEW", but CMake did not find one.

      Could not find a package configuration file provided by "GLEW" with any of
      the following names:

        GLEWConfig.cmake
        glew-config.cmake

      Add the installation prefix of "GLEW" to CMAKE_PREFIX_PATH or set
      "GLEW_DIR" to a directory containing one of the above files.  If "GLEW"
      provides a separate development package or SDK, be sure it has been
      installed.

\-- Configuring incomplete, errors occurred!

~

:(

(Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux)

<comment><USER11> Welcome to the pile of busted that is CMake. If you do it for a living, you'll even get to learn their wonderful psuedo language, so you can parse through 450 lines of Find*.cmake just to figure out that all it does is check ENV_VAR0 and then fall back to a hardcoded string- even though the documentation/header claims it checks ENV_VAR1.

<comment><USER12> This.

CMake is another barrier to entry.

what happened to a nice simple makefile? Been using just standard makefiles for literally 20 years.

The only thing I do is put a checkdeps dependency on which tests for the presence of dependencies, like autoconf but without the eye poking. Have built everything from small network servers to Motif behemoths doing only that.

<comment><USER13> You get no (compatible) make on MSVC. More imporantly, whith nontrivial dependencies to third party libraries, self-coded makefiles just break down. Cross-platform handling of dependencies is fragile and makes drudgery. You're liable to do worse than CMake - after wasting a lot of time and energy.

CMake is more an alternative to GNU autoconf and pals, with the difference that it has first class support for things like MSVC and XCode.

<comment><USER14> Is nmake not compatible with make? I thought that it was. I haven't programmed C/C++ on Windows at all though, so I have no experience with this.

<comment><USER13> Microsoft "nmake" is unrelated to the AT&T-originated Unix "nmake", which you may be thinking of.

(people rarely even attempt nontrivial Makefiles that are portable between BSD and GNU makes though...)

</comment></comment></comment></comment></comment></comment><comment><USER15> This looks awesome. The code is very clean and well laid out. I am disappointed that there are literally no comments in the source code though. Hopefully he will add comments, because a lot of what he is doing is not super obvious, at least not to me.

<comment><USER16> Learn to read code instead of comments. It's super straight forward C.

<comment><USER4> What the code is doing is clear. The why (and especially the `why not') could benefit from some commentary.

<comment><USER17> I wish more programmers understood this concept. Yes, we can read the code for the _what_ , which is why we don't need you to tell us you are adding 2 to X. _Why_ is a different matter altogether, and that is where a comment can shine light on the scenario.

<comment><USER16> To me it ruins the surprise, uncommented code is like an uncommented novel, once you've grok'd it the whole thing starts to make sense.

Comments are like coles notes.

It's good as professional courtesy but for personal projects... seems like a waste of time.

<comment><USER18> Until you go back to it in a year's time and can't remember any of the reasons for your design decisions.

<comment><USER19> Besides, I genuinely find myself hilarious so the attempts at pithy commentary tend to make the whole "christ what was I thinking" part of looking at my old work less painful.

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> Some days ago there were comments about Notch being a bad programmer. And when I see posts like this I think that's unfair.

2500 lines of C doesn't mean a thing. I could do it in 1 line when I removed all line breaks.

Did the programmer created the concept, interaction design, graphic design? No, Notch did.

So maybe Notch does write bad code but I think being a programmer is more than just writing code. In the end Notch got the job done and people are enjoying the result.

But yeah! great to see another Minecraft clone. It's always nice when people share there knowledge!

<comment><USER21> He didn't created the concept but took the ideas from Dwarf Fortress and he says it :) [http://notch.tumblr.com/post/227922045/the-origins-of- minecr...](http://notch.tumblr.com/post/227922045/the-origins-of-minecraft)

But still minecraft makes a 2012 macbookpro overheat like no other game, I get 80°C while Minecraft alternative clients/servers barely make it to 70°

<comment><USER22> If you had bothered to actually read the linked article, he claims to have been..."inspired" by infiniminer more than any other game.

" But then I found Infiniminer. My god, I realized that that was the game I wanted to do"

</comment></comment></comment><comment><USER23> I think an easy visual upgrade to get rid of the jaggies would be to (optionally) turn on MSAA (multi sample anti-aliasing). It doesn't drop the lo-fi look IMHO but still looks ways better. MSAA is real easy to enable, create your window with a MS buffer:

/* I'm not entirely sure if this is the right call for GLFW * I normally use SDL, you can usually go up to 16 with the * samples */ glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);

Enable multisamplimg before drawing anything:

glEnable(GL_MULTISAMPLE);

Thanks for the source, I'll have a read through!

</comment><comment><USER24> Oops [https://github.com/fogleman/Craft/issues/15](https://github.com/fogleman/Craft/issues/15)

<comment><USER25> that's the first thing he does on github?

</comment></comment><comment><USER26> It would appear that placing block 15 (the clouds) can cause some problems. If you disconnect while in a player created cloud it causes you to fall through the ground permanently.

</comment><comment><USER27> not to be a parade-rainer (because this is really cool!), but it's not really a 'clone'. it's really just a cube rendering engine with a handful of textures and a barebones python socket server.

in my very humble opinion, a minecraft clone would have (at least stubbed out):

\- ui. if you've never made a game, you'd be amazed at the amount of code ui takes up. even ugly ui. good lord.

\- mobs. while you can data-drive a lots of your mobs, something like minecraft still has vast swaths of business logic to drive interactions with everything from creepers to mating wolves to the ender dragon.

\- crafting. again, you can get a long way with data-driving your crafting system, but you've still got to build in all the mechanics that control your crafted items behavior among all the other various items in the game.

and none of that counts any of the polish that publishing a game requires. as a guy who's shipped games, it's really (even more so than traditional enterprise software) a case of the last 20% of the work takes 80% of the time allotted to the entire project.

in my experience, that's where "indie devs" fall down. they solve the hard, interesting problems (look! i've got an environment rendering! boom! the combat code works!), but then lose interest and chase other shiny things when it comes to the rote, painful tasks (wait... i've got to data-bind the hud? and handle socket disconnects without crashing? and the camera behavior? the animation has to blend? what about handling a network timeout on the dynamically loaded textures? you want to deliver "news and updates" to the client? from what server? and you want a cms with that? oh, and write the checkbox code for options screen? and qa insists we can apply and skip the first 30 levels so they can test 31 without playing the entire game? but, but, but... look! the environment loads on my machine! what kind of video card do you have?)

anyway.

sorry about the rant.

this really is super-cool. just more of render-plumbing and not really a clone.

<comment><USER28> I found a similar project that fits also your definition of "clone". The guy coded it in C++ and created a cross platform framework with render path for OpenGL and DirectX. He even compiled it to JavaScript and WebGL via Emscripten. And it has some initial multiplayer support and he also wrote his own GUI framework. Interesting read:

[http://sea-of-memes.com/](http://sea-of-memes.com/)

</comment></comment><comment><USER29> The minetest project could use a contributor with shader experience. ;)

[http://minetest.net/](http://minetest.net/)

<comment><USER30> What is minetest trying to do better than Minecraft?

<comment><USER29> Better performance, especially on cheaper machines through use of C++

Easy extensibility via Lua scripting, no need for Java disassembly

Free Software

<comment><USER30> Cool. I really like the idea. I wonder how a Haskell version would compare in performance.

I've wanted a leaner and simpler multiplayer Minecraft for some time.

<comment><USER9> During an early stage of development, I ran minetest on OpenBSD on a netbook with Atom N450. It ran smoothly with a low-ish view distance.

Last I checked, Minecraft was nonfree and depended on some binaries plus did an OS check, so running it on OpenBSD would've been a nonstarter.

I'm sure performance on N450 would've been miserable too; if it could run at all with just 1G of RAM.

</comment></comment></comment></comment></comment><comment><USER31> This is badass.

Recently I'm discovering how little C it takes to create a decent game with OpenGL. Well-written, straightforward C is a phenomenally powerful language.

<comment><USER32> Agreed. Minecraft definitely isn't as smooth as this.

</comment></comment><comment><USER33> One starts to think - what if minecraft was made in C from the start? Would it perform better?

<comment><USER34> Difficult to say. Writing in C doesn't magically make code run faster, and it's entirely possible to get abysmal performance compared to a better implementation in a high-level language.

That being said, it probably wouldn't be too difficult to make something better in terms of performance than minecraft, because its perceived perf sucks now as far as I can tell from running it on my machine: sometimes rendering lags, I regularly see mobs "suspended" in the air while the terrain renders (and yes, this happens within "old" chunks too, so I can't say that terrain is being generated or something like that), and I'm not even on weak hardware, it's a gaming laptop that runs modern AAA titles smoothly. Not sure what the source of these problems is, maybe my drivers, maybe mojang screwed up. I didn't notice these things happening on earlier versions which I ran on a fairly weak linux machine with a crappy intel graphics chip.

<comment><USER35> > _Difficult to say. Writing in C doesn 't magically make code run faster, and > it's entirely possible to get abysmal performance compared to a better > implementation in a high-level language._

That's the theory, but in practice, the kind of programmer that is competent enough to pull it off in C, is also the kind of programmer that will give it better performance than the one writing it in some not very game-suitable higher level language (say Python or Java).

<comment><USER36> It is still difficult to say. IMHO C at scale requires often trading performance for architectural simplicity. E.g. relying on function pointers for indirection (or switch) or passing things by value / deep copy to simplify memory management are techniques which would often degrade performance than boost it, relative to Java. In real big code, you have to do some higher-level abstractions or your project is going to be unmaintainable spaghetti mess, and it is arguable if C lets you build them in the most performant manner.

<comment><USER35> I've never really seen any Java project for high performance stuff outperform a C/C++ based on.

Visualization tools, video processing tools, multimedia tools, games, etc -- all Java examples I've seen come worse off that the C/C++ equivalents.

It's true that in large scale C you often trae performance for architectural simplicity.

But in a higher level you trade performance for everything, even the most basic operation has some added complexity layer. And you don't even have as much say as where you'd trade performance for architectural simplicity in, as you do in C/C++, since some parts you just can't do without.

<comment><USER37> Same...until the GC kicks in. Then the app locks up for 60+ seconds at a time every few hours, at which point the developers start moving anything memory intensive out of Java to avoid the pauses, and/or reduce their severity (c.f. Cassandra). At that point, is it really Java? You might as well use a scripting language to integrate with all that C...

<comment><USER38> > Then the app locks up for 60+ seconds at a time every few hours

Given that the GC can generally process 1GB of live objects per second, I'd love to see an example where you have been working with 60GB+ heaps.

<comment><USER36> And this is not taking into account that modern GCs do most or all of the work either _without stopping the mutator_ (CMS, C4) or incrementally (G1), in smaller chunks. Times of STW collectors are long gone.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER39> has anyone test this? how's the performance?

<comment><USER40> Just tried it and the peformance is fast, it loads in seconds and looks really good. My friends are already installing it and we are trying get the multiplayer working. [http://i.imgur.com/Mzjxhpp.png](http://i.imgur.com/Mzjxhpp.png)

<comment><USER41> What desktop environment is that? The icons look like Gnome's but I've never seen a theme like this.

<comment><USER42> Looks like Gnome with the Phosphene theme.

[https://github.com/hdni/Phosphene](https://github.com/hdni/Phosphene)

<comment><USER43> This is easily the best theme I've ever seen. Where/how did you find this?

</comment></comment></comment></comment></comment><comment><USER44> Time to plug Minetest. The core is written in C++ and a Lua API is exposed for extensions. [https://github.com/minetest/minetest](https://github.com/minetest/minetest)

</comment><comment><USER45> Just because it has blocks and you can break them, does not make it a 'minecraft clone'. Like we do not think a rich text editor to be a replacement for Microsoft Word.

Let's see a redstone implementation in survival mode :)

</comment><comment><USER34> This is amazing. Good job!

</comment><comment><USER46> Kinda getting sick of Minecraft. All those clones and remakes.

Plus I don't understand my Notch is so highly praised. On the one hand he claims to be an indie dev champion but turns around and makes lucrative exclusive deals with Microsoft. If he really cared he wouldn't choose his wallet over his principles. Sorry but that is how I feel.

<comment><USER47> What exclusive deals? MC is still available for any OS that will run Java. That doesn't seem very exclusive. Mojang recently said they're going to release on PS4 too.

</comment></comment><comment><USER48> My make also fails due to Glew. Can anyone provide some premade binaries?

<comment><USER49> Here you go: [http://www.pozdravi.net/tmp/craft.2013_12_10.binary.ubuntu.1...](http://www.pozdravi.net/tmp/craft.2013_12_10.binary.ubuntu.13.04.tar.gz)

</comment></comment><comment><USER50> client.c: 145

struct sockaddr_in address; ... memset(&address, 0, sizeof(address));

Can someone explain me why you need to set memory of sockaddr_in to 0 ? (Even if &address haven't been touched).

<comment><USER51> it's a local variable, and local variables do not get initialized in C.

<comment><USER50> But the initialization of the variable is right after the memset:

        address.sin_family = AF_INET;
        address.sin_addr.s_addr = ((struct in_addr *)(host->h_addr_list[0]))->s_addr;
        address.sin_port = htons(port);

Why is it useful the put 0 before setting those values?

<comment><USER52> It's good practice in general. There might be other fields that were not explicitly set, or the struct may expand in future versions, or you have union fields/bitfields (e.g. you explicitly set the low order bits of some union field to some value, thinking the high order bits are all zeroes, but because you neglected to zero them out first, they're filled with garbage bits. when you read the union field as a whole you'll get incorrect values).

<comment><USER50> Thanks for the explanation!

</comment></comment></comment></comment></comment><comment><USER32> Compiles and works amazingly well on Porteus.

</comment><comment><USER53> Looks like it's under the MIT License.

</comment><comment><USER37> Someone should hook up LuaJIT. :)</comment>


15-Inch MacBook Pro with Touch Bar Has Non-Removable SSD - <AUTHOR> http://www.macrumors.com/2016/11/15/macbook-pro-touch-bar-non-removable-ssd/ <comment><USER2> Every new piece of information I learn about the new Macs - whether the Macbook Pro these past weeks or the Mac Pro desktop a few years ago - is all along this trend. It's a trend that lost me as a customer, having owned a mini, the Mac Pro desktop, and two Airs.

But what do I matter? People love these new things.

</comment><comment><USER3> Good thing that Apple is _very_ concerned about environment and the reduction of the electronics waste...

<comment><USER4> I hear the sarcasm. But I wonder what the total environmental cost of the connectors and separate manufacturing is, for a replaceable part that is rarely (I'm guessing+) replaced?

+No need to tell me you replaced yours. So did I. I still bet >90% of units are not replaced.

<comment><USER3> I have no idea if there ever was an env. study that show one way is more friendly than another, but having to replace your computer just because you don't have enough space anymore, it's a bit crazy and it just produces waste, one way or another.

[https://www.ifixit.com/Teardown/MacBook+Pro+13-Inch+Touch+Ba...](https://www.ifixit.com/Teardown/MacBook+Pro+13-Inch+Touch+Bar+Teardown/73480)

<comment><USER4> > it just produces waste, one way or another.

It does, but it might be the least wasteful way to do it.

Manufacturing a modular machine is more costly than a single integrated board. If almost nobody exploits the modularity then all those connectors are wasted. A few million unneeded connectors traded off against a few hundred upgraded laptops is not a good deal.

I like upgradability, but most people don't care, and the economics and environmental impact are dominated by most people.

</comment></comment></comment></comment><comment><USER5> So if the SSD breaks I can throw away my >2.5k$ Laptop? Wonderful.

<comment><USER6> SSD's life expectancy shouldn't be a concern. It's more likely you'll have to replace a fan or screen before the SSD if you want to keep using the laptop.

<comment><USER7> That really depends on how often you write to the drive. I don't have specs for the mac SSD, but the EVO 950 pro which is in a similar category has an endurance of 400TB. Quite a lot but you can use up a surprising amount of data on temporary writes.

<comment><USER6> 400TB adds up to writing more than 200GB, _every day_ , during 5 years. That's a lot.

On top of that, manufacturers are conservative on these ratings. There's a test somewhere on the web where they tested life expectancy of an EVO 840, and it took 800TB before failure. The new one could be even better in that regard.

<comment><USER7> A full build at work generates over 200GB of output, and that's before considering things like intermediate writes to the page file or temporary files.

The codebase is very large so this is unusual, but its not a trivial concern for people with large workloads. I imagine video editors have disk usage of a similar magnitude.

<comment><USER6> > A full build at work generates over 200GB of output

Impressive.

</comment></comment></comment></comment></comment></comment><comment><USER8> This is the true thing to be angry about with the new wave of Apple laptops.</comment>


New Panera Bread Location Offers "Pay What You Can Afford" Pricing Model - <AUTHOR> http://www.inquisitr.com/73217/pay-what-you-can-afford-panera-bread/

<comment><AUTHOR> Not tech business related, but an interesting business model nonetheless.</comment>


Monotonic Versioning Manifesto - <AUTHOR> http://blog.appliedcompscilab.com/monotonic_versioning_manifesto/ <comment><USER2> I think you do lose some information this way. If the release number isn't reset with every breaking change, you have no context for how mature that change is. For a library that's very importantto your app's functionality, you might prefer to use 1.13, instead of 2.1. As the 2.x release number increases, you can see that version 2 has been iterated upon.

<comment><USER3> I agree! This does not feel intuative at all: 1.1 -> 2.2 -> 2.3 -> 3.4

<comment><USER4> Naturalistic fallacy informs public about your preferences but doesn't really tell us anything about the concept itself. :)

<comment><USER5> I'm sincerely tired of those comments that uses overly complicated and shady use of the language to denote simple ideas.

If you were in a middle of a philosophy book and have previously defined what you mean by "naturalistic fallacy" that would be fine, but you are literally throwing the term in an isolated sentence.

<comment><USER6> And I'm tired of everything being dumbed down to within an inch of its life - filled with introductory noise, or worse, just avoiding complex arguments.

We're all reading this on the internet - if you don't know what a term means it only requires a tiny hand movement and a few seconds to fix that. That way we can have discussions that build on previous abstractions and move on to more complex ideas.

It's a shame that the "arrogant ivory-tower egghead" narrative sticks so easily. It's true that some people use words to obscure, but just as often it's someone trying to say something that's difficult to explain in any other way without ending up with a wall of text.

<comment><USER5> I'm arguing in favor of simplicity, not of simplicity of reach (tiny hand movement) but of simplicity of meaning.

Bringing up Hume's guillotine [1] to show someone that version numbers is not what it seems to be to that individual is a bit of an overkill, don't you think?

If we start to see everything as Kant's golden rule [2], Sartre's existence problem [3], Wittgenstein's private language [4] and Marx's worker struggle [5] is going to be very hard at all to communicate simple ideas, most of time those are arguments that raises more questions than answers.

To make a programming analogy, is a bit like design patterns, sometimes is nice to say "it's just a factory" without having to go throughout the concept of factory, but if you overuse it and start talking only in patterns it all becomes a mess.

If it's complex, suite yourself. If it ain't, don't make it so.

[1]: [https://www.youtube.com/watch?v=eT7yXG2aJdY](https://www.youtube.com/watch?v=eT7yXG2aJdY)

[2]: [https://www.youtube.com/watch?v=x_uUEaeqFog](https://www.youtube.com/watch?v=x_uUEaeqFog)

[3]: [https://www.youtube.com/watch?v=qpXNRrtuo38](https://www.youtube.com/watch?v=qpXNRrtuo38)

[4]: [https://www.youtube.com/watch?v=x86hLtOkou8](https://www.youtube.com/watch?v=x86hLtOkou8)

[5]: [https://www.youtube.com/watch?v=PZ4VzhIuKCQ](https://www.youtube.com/watch?v=PZ4VzhIuKCQ)

<comment><USER7> You are introducing ideas named for people, rather than the idea itself. _Of course_ that will obscure meaning, and you are only further deteriorating the SNR of the thread by doing so.

<comment><USER5> And you didn't like that, right? You felt as being noise to the actual meaning I'm trying to convey.

Precisely my point.

<comment><USER7> No, it comes across as a deliberate tactic, entirely unrelated to the benign use of "naturalistic fallacy" in the original comment. I feel the actual meaning you are trying to convey _is_ noise, and you've done so in a way that is not representative of the original comment.

<comment><USER5> Yes, my saying is "deliberate", I'm in full command of my actions and thinking. And yes, it is a "tactic", after all I'm trying to do something here (convey a point in an argumentation).

I hope that by "deliberate tactic" you didn't try to imply as being "mean" or "bad" or not "benign".

As for the "benign use" you mentioned, it is clearly your opinion on it, but where are your reasons, your arguments in favour of it?

(welcome to the conversation)

<comment><USER7> A _deliberately obtuse tactic_. Your point is not well made, and is a waste of thread space. The arguments in favor of the original comment have been stated by others. I will not continue replying.

<comment><USER7> Hmm. While I stand by the sentiment of this comment, in hindsight I could have worded it less harshly.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> That picture wasn't what I was expecting, which was more like this: [http://i.imgur.com/Lx6OiIb.png](http://i.imgur.com/Lx6OiIb.png) solid arrows show chronology, the colors highlight compatibility, dashed arrows are backporting.

</comment><comment><USER9> I dislike this. The reasons I like semantic versioning is that it encourages things that I consider to be good:

\- releasing features separately from bugfixes

\- releasing backwards-compatible new features

\- releasing bugfixes for older releases (this one is more optional)

This versioning scheme seems to remove all of that just for the sake of simplicity - I don't see the benefits.

<comment><USER5> SemVer does not encourage the things you listed, it only demands that you show such changes in its versioning.

The difference here with Monotonic is that such changes does not have a special meaning in the version number (nothing on the encouragment side IMO).

</comment></comment><comment><USER10> The patch level allows you to indicate when a release was bad and should be ignored (you should always use the highest patch release). With monotonic versioning an unintended breaking change must be corrected by another breaking change (breaking WRT the broken version). Now you have two breaking changes where having a patch level would allow you to correct the regression and continue with no breaking changes in the release history.

<comment><USER11> The spec encourages the following, if a bad bug is found (cough openssl):

1.1 -> 2.2 -> 3.3 -> 1.4 -> 2.5 -> 3.6

And in fact I kind of like this. 1.4 is rather obviously compatible with 1.1 (and 2.5 with 2.2), but also clearly denotes a new release. You're still always using the most recent release, within a compatibility number.

Even better, it avoids crap like: "Affected users should upgrade to OpenSSL 1.0.1g. 1.0.2 will be fixed in 1.0.2-beta2." Instead, the fix is announced simply "Bug fixed in release 4 and later".

<comment><USER12> I thought it said explicitly not to do that in the same paragraph:

      The Release Number SHALL NOT be decremented.

Which would break exactly this us case if you followed to a T.

<comment><USER13> It is confusing, but the release number is never decremented in this example, the compatibility number is being reused to indicate the release is compatible the API documentation for the existing compatibility number.

<comment><USER12> Damn, that was really confusingly worded.

</comment></comment></comment></comment></comment><comment><USER4> World never asked for this. ;) Seriously though - any versioning scheme, as long as it's consistent, is fine. Like everything in the world, this has some pros and cons compared to typical semantic versioning: it does remove some of the noise/confusion in exchange for potentially exploding release number. If you're releasing often, semver probably makes more sense. If you're releasing at a glacier pace but break BC from time to time, this looks like a good match.

<comment><USER14> Genuinely curious, what is the problem with "exploding release number"s?

<comment><USER4> We've had this problem in one of the internal projects in the past where version would change so rapidly we basically didn't care about some of them. By the time team A did something to .70 there was already .75 released by team B. What do you do to, say, .72 - port changes? Ignore it? Does anyone actually care about in-betweens?

This also increased cognitive load: if I have 5 versions to care about I actually have better understanding of what went where, why, etc. With hundreds of versions institutional memory wasn't as strong.

I feel that if we were to push minor updates (ones only team B cared about) to a separate portion, everyone would be better off. This changed for later projects and simplified workflow (you could actually remember things).

<comment><USER15> >What do you do to, say, .72 - port changes? Ignore it? Does anyone actually care about in-betweens?

It seems that your project was misusing version management.

Despite the name, version management is not actually taking care of managing your software versions for your project. It takes care of the bit level versions, you still need people to manage the semantics and human side of it.

If different groups can push an pull things without anyone accepting, rejecting and deciding what is release branch and development branch, you are doing it wrong.

</comment></comment></comment></comment><comment><USER5> There are two very good things about this versioning that people seems to miss it here on the comment section:

* One, stated in the manifesto itself, is that we don't have the minor and patch distinction anymore. Let's be honest, most of us (but not all) simply doesn't care if the library update is a minor or a patch, we are only scary of the major number.

* The second is that with Monotonic you have a sense of ordering of the whole project (note that I'm saying order, not progress). If I give you two different SemVer version numbers are you able to say which one was released first or how old they are? With Monotonic you can answer that, the RELEASE number is common to all COMPATIBILITY "branches".

I have to say, I liked it. But I guess it won't be adopted by many since SemVer is somewhat ubiquitous and is entrenched in the how we think version numbers.

<comment><USER16> As the author of a library, I care _very much_ about the minor and patch numbers: when you report a bug to me, I want to know exactly which build you're using. But I don't want that to impact the major/minor release number, which document compatibility.

Eg: releases 188.8.131.52, 188.8.131.52, and 126.96.36.199, are all equally compatible and have the same API. They are all version 2.4, and any software that uses them only needs to express a dependency on v2.4. But they're all different builds with internal changes (that don't alter the API), and if you report a bug I need to know which of those builds you're using.

If they were numbered 2.4, 2.5, and 2.6, I guess I'd know the build, but I'd lose some flexibility in expressing the API compatibility. I like being able to say that anything which works with 2.x will also work with 2.x+, where 2.x+ might add features but will not remove them. However, 3.0 might remove API methods or alter the semantics of existing methods. A single compatibility number doesn't let you express that.

</comment></comment><comment><USER17> Really interesting. I like the way that the total ordering approach makes it clear when an earlier compatibility-version (e.g. 1._) is being maintained alongside a later version (e.g. 2._). That's something that isn't expressible in SemVer.

<comment><USER18> Do you mean instance where the release number be the same, as in 1.77 vs. 2.77? Because that likely won't happen, as due to the different compatibility these should be different releases. Or do you mean, if the release numbers are reasonably close, as in 1.77 vs. 2.78, and then maybe 1.79 again?

</comment></comment><comment><USER19> HTML progresses without using version numbers. Perhaps, in general, we don't need them..

[https://blog.whatwg.org/html-is-the-new-html5](https://blog.whatwg.org/html- is-the-new-html5)

<comment><USER20> We care about version numbers of _browsers_ , because in practice those numbers encode what HTML, CSS and JavaScript is available.

</comment></comment><comment><USER21> The requirement of a public API seems weird to me. What is the point of that; why should my versioning scheme meddle with whether I want to release an API?

Also a small note on the name, I don't see how `4.7944+beta7` is "MonoVer/MVer/MoVer" since it's not quite... mono ([http://www.dictionary.com/browse/mono-](http://www.dictionary.com/browse/mono-)). It has between two and three components.

<comment><USER22> The "mono" this is referring to is "monotonic", specifically "monotically increasing" ([https://en.wikipedia.org/wiki/Monotonic_function](https://en.wikipedia.org/wiki/Monotonic_function)). That is, when layed out chronologically the components of the version numbers are always increasing.

<comment><USER23> Technically, "never decreasing" is more correct than "always increasing", regarding "monotonically increasing". In MonoVer the Compatibility number is monotonically increasing but not always increasing. The release number is both.

</comment></comment></comment><comment><USER20> I've seen a scheme like this used for numbering BOSH stemcells and releases[0]. If you have slow-changing or update-in-place artefacts like sourcecode it will look a bit like a shortened semver.

If, as is the case for BOSH, you are meant to totally replace the previous version, then the numbers advance rapidly. Note that stemcell versions are into the low 3000s.

[0] [http://bosh.io/](http://bosh.io/)</comment>


I Shouldn't Have to Publish This in The New York Times - <AUTHOR> https://www.nytimes.com/2019/06/24/opinion/future-free-speech-social-media-platforms.html <comment><USER3> I was sort of with it until it seemed to pivot abruptly into poor reasoning for breaking up big tech companies.

The article seems to make contradictory arguments that (1) censorship is good, (2) big tech is the only way censorship can be enforced, (3) big tech must be broken up to enable smaller companies.

The article also only focuses on examples of obvious right-leaning types of inflammatory content and excuses itself and its equal weight in dividing us.

NYT also presents itself as the last beacon of hope, the only place such an article could be published in the future. Which is the biggest joke in the world for free speech; just read the paper daily and you will observe that it has one of the biggest self-applied filters anywhere.

Big media doesn't like that people don't need it anymore, and it sees breaking up competing large institutions as part of what will save it.

It is trying to use its weight and influence to squelch competition, which is what it accuses others of doing. But goes one step further by asking for it to be enforced politically.

Maybe the papers should be broken up.

<comment><USER4> > Maybe the papers should be broken up.

I mean, definitely [1], but that doesn't invalidate his argument. Both tech and media consolidation is a problem.

[1] [http://cgi.rumormillnews.com/pix0/Screen- shot-2012-07-19-at-...](http://cgi.rumormillnews.com/pix0/Screen- shot-2012-07-19-at-5.23.17-PM.png)

<comment><USER3> Is it? There are more forums on the internet than there have ever been. It's not like FB and Twitter are the only 2 platforms that exist.

I'm skeptical that "breaking them up" would really do anything. People would continue to use the thousands of other platforms that are out there, but there would still be a desire for a sufficiently abstract social network that another one would grow. Then there would be calls to break that one up...

To fight against large social networks is to fight against natural human organization and interaction. Attempting to is pointless and probably even harmful, since the velocity of good ideas would be reduced along with the bad.

<comment><USER5> They may not _technically_ be the only platforms (extending to include all big tech), but practically speaking they are effectively the only platforms, which is what really matters. Someone may technically be able to change from Comcast to Verizon, but if it would cost them 10k then it becomes rather impractical and the net effect is the same as if Comcast was the only option. The barrier to switching must be considered as well as the existence of options.

However I agree that breaking them up may not be the solution - <USER2> interoperability may be. At least then there would be the benefits of having freedom of choice with plenty of options without the downsides of losing access to your data and your social network (which I think constitute the majority of the switching barrier). Similar mandates in healthcare and education would also be beneficial. This would of course not immediately solve the problem, but I would rather have to deal with getting developers to be mindful of the needs of their users than face the impossibility of getting users in the first place.

An entity should be allowed to be as successful as they can manage, so long as the practical barriers to competition are not affected (ie, network effects)

<comment><USER3> Switching costs are low. People use YouTube, Telegram, Slack, Instagram, Snapchat, and Reddit all day. Countless smaller forums are wildly popular for specific interests.

If they fell, whatever platform is next in line would start receiving the criticism.

But further, I think we've seen many times in tech that about the time something gets so large that people start wanting to regulate it is about when tides are shifting anyway. The thing to reduce the influence of these networks won't be regulation, it will be some combination of boredom, disillusionment, a better alternative, the next generation wanting something different from their parents, etc. To force split before that happens just ensures the market-provided solution is weaker and less revolutionary than it could be, since the competition it is overcoming has artificial handicaps. That makes progress slower overall.

</comment></comment></comment></comment></comment><comment><USER6> I always find myself wishing that Cory Doctorow would give his creative pieces another revision before I read them. His premises are interesting, but the end result is hardly ever worth the slog through stilted writing and weird hand- waving away of details or objections.

</comment><comment><USER7> While they covered copyrighted material, the "Safe Harbor" provisions of the Digital Millennium Copyright Act (DMCA) [1] were essential for any user- created content to be hosted by third parties on the web.

I wonder if speech could be treated similarly, with a distinction made between passive hosting and promotion:

"Tech companies should not be liable for the content that users upload to their platforms, but they should be liable when their algorithms choose to show it." [2]

[1] [https://en.wikipedia.org/wiki/Online_Copyright_Infringement_...](https://en.wikipedia.org/wiki/Online_Copyright_Infringement_Liability_Limitation_Act) [2] [https://twitter.com/pmddomingos/status/955594859154259968](https://twitter.com/pmddomingos/status/955594859154259968)

</comment><comment><USER8> It's weird, he seems to think this article couldn't be published to Facebook. I wonder if he really tried to do so.

It's also interesting that he published it on the NYTimes.com, which has an even higher barrier to entry, and thus is not an option for most people to express their freedom of speech.

I know article titles are usually an editor's choice, but doesn't it seem like he could have easily published that article on his blog? (Fully admit I have have missed his larger point; I have difficulty grokking Mr. Doctorow's writings, which is a pity because I think he's an interesting thinker.)

<comment><USER9> It's a fictional piece based on the premise that in the future, social networks will be so regulated that he won't be able to get a piece like that past the automated filters. There's a paragraph at the beginning that explains it:

 _> Editors' note: This is part of a series, "Op-Eds From the Future," in which science fiction authors, futurists, philosophers and scientists write Op-Eds that they imagine we might read 10, 20 or even 100 years from now. The challenges they predict are imaginary — for now — but their arguments illuminate the urgent questions of today and prepare us for tomorrow. The opinion piece below is a work of fiction._

</comment></comment><comment><USER10> I've stopped reading any article with clickbaity title. We seriously need a clickbait vote up-down button in HM to get rid of this bad trend. Hopefully other communities might follow to fight back.

</comment><comment><USER11> Unpopular opinion: I think that changing Section 503 could actually _decrease_ censorship in the long run, by making centralized services less profitable & decentralized ones more advantageous.

</comment><comment><USER12> What's the usual refrain we hear? (paraphrased) "You have no right to talk on another companies' platform." Of course, silencing, restrictions, bans, hellbans, and more are the answer by these profiteering owners.

You have have a right of speech (with very limited curtailments) in the USA... However given high density of people on limited technologies, if you're on the out, you have no effective right to speech.

And since political candidates are on there, you even lose the forum to talk with them. (AOC, Trump, other national politicians, local city councils, county councils). When the soapbox IS twitter, Facebook, Reddit, Instagram, Snapchat - just how much power should the corps yield to decide who talks and who doesn't?

(I'm making an argument for a review on user density relating to a monopoly and thus significant oversight and access, esp when relating to politicians and their constituents.)

<comment><USER13> (I am an attorney, but this is not legal advice.)

I think most courts would conclude that freedom of speech is the right for you to speak in a public place or to publish using your own means. It is not necessarily the right to be heard by the particular audience you desire to reach, nor the right to publish using someone else's equipment. The internet is still an open place, and there are plenty of venues other than Facebook, Twitter, and YouTube where you can express your thoughts and opinions. You can also build your own website or blog and seek attention to it by reaching out to others for links.

<comment><USER14> _> The internet is still an open place, and there are plenty of venues_

You are absolutely right that putting all the eggs in one basket is a textbook mistake, and one should diversify communication channels & sources of income.

 _> nor the right to publish using someone else's equipment_

Two legal cases come to mind:

the recent decision that POTUS twitter feed is a public space ([https://theconversation.com/federal-judge-rules-trumps- twitt...](https://theconversation.com/federal-judge-rules-trumps-twitter- account-is-a-public-forum-97159))

and the 1980 decision in Pruneyard Shopping Center v. Robins where, based on Californian law, private property of the shoping mall was deemed open to political speech ([https://en.wikipedia.org/wiki/Pruneyard_Shopping_Center_v._R...](https://en.wikipedia.org/wiki/Pruneyard_Shopping_Center_v._Robins)).

It's perfectly fine for FB, Twitter, Google & friends to declare themselves editorial organizations rather than open platforms. However it's worth noting Section 230 protections hinge on being a platform.

<comment><USER13> > the recent decision that POTUS twitter feed is a public space > ([https://theconversation.com/federal-judge-rules-trumps- > twitt...](https://theconversation.com/federal-judge-rules-trumps-twitt...))

Interestingly, the opinion did _not_ conclude that Twitter itself is a public forum and therefore must allow all speakers to use it and viewpoints to be presented. Instead, it concluded that the _President's Twitter account_ is a public forum for the purpose of answering the question whether the President can block others' accounts from responding to it.

As for _Pruneyard_, that case is about freedom of speech under the California Constitution, and has narrowed by subsequent law, but it remains an open question as to whether "open to the public means all content must be permitted" under CA law in the social media context.</comment></comment></comment></comment>


Ask HN: What "Word" Defines Your City? - <AUTHOR>

PG's essay "Cities & Ambition"[1] has been a huge topic of discussion here lately - but most of it has centered around NYC, SV, LA & DC. That's great, but with several other growing hubs of entrepreneurs - I'm curious to know:
What "word" best defines your city?
Ideally we're talking about upcoming tech centers in the US - Chicago, Austin, etc), as well as international hot spots for startups & bootstrappers that don't get as much attention or chatters as NYC/SV/LA/DC.
[1] https://news.ycombinator.com/item?id=7083151 <comment><USER2> London -- filthy

</comment><comment><USER3> Brisbane, Australia -- relaxed.

Oh dear!

</comment><comment><USER4> Zacatecas, México -- Oldschool

</comment><comment><USER5> Cheltenham: spies</comment>


This is how Material Design looks on Chrome OS, rolling out now - <AUTHOR> http://www.theverge.com/2016/4/23/11495442/chrome-os-material-design-update-rolling-out-screenshots <comment><USER2> Anyone know what sort of widget toolkit they are using to draw Material Design on Chrome OS?</comment>