Implementing a NES Emulator in Rust - <AUTHOR> http://www.michaelburge.us/2019/03/18/nes-design.html <comment><USER2> Shameless plug - for anyone that's interested, I also wrote a NES emulator in Rust a few years back: [https://github.com/koute/pinky](https://github.com/koute/pinky)

I even compiled it to WebAssembly: [https://koute.github.io/pinky- web/](https://koute.github.io/pinky-web/)

> The CPU address space has several PPU registers mapped. So the CPU maintains > a permanent mutable reference to the PPU. But the top-level Nes object also > owns the PPU. I worked around this using Box to assign fixed memory > addresses to values, and then "unsafe" pointer dereferences when needed.

There's actually a neat little trick which I used in my emulator which allows you to fulfill Rust's single ownership rule while simultaneously keeping the subcomponents of the emulator independent, making it possible to interconnect them without any unsafe and letting the compiler to optimize the whole thing as everything is statically dispatched.

Basically simplifying a little bit for each component (CPU, PPU, APU, etc.):

1\. You put the whole state of the component into a separate `State` structure.

2\. You create a `Context` trait which has a `get_state`/`get_state_mut` method as well as various callbacks needed by the component itself (e.g. PPU's `Context` has a `peek_video_memory` so that it can read video memory which is stored externally).

3\. You create an `Interface` trait (with `Context` as supertrait) which contains the public interface of a given component (e.g. PPU has `execute`, `peek_ppustatus`, etc.).

4\. You put the whole implementation of the component inside of a `Private` trait (with `Context` as supertrait).

5\. You do a blanket impl of `Interface` and `Private` for any `T` which implements `Context`.

So then you create a single `Nes` structure which has `cpu::State`, `ppu::State`, etc. inside of it as fields, and implements the `cpu::Context`, `ppu::Context`, etc. traits. Inside of those impls you just wire the various subcomponents together, and voila, every component is encapsulated from each other and yet they can talk with each other, and there is no indirection anywhere (no `Box`es, no `RefCell`s, etc.).

<comment><USER3> I'm really enjoying your 6502 emulation code. It feels clean and easy to read.

[https://github.com/koute/pinky/blob/master/mos6502/src/virtu...](https://github.com/koute/pinky/blob/master/mos6502/src/virtual_mos6502.rs)

(I imagine the rest is good too, but 6502 is what I know. :-) )

</comment></comment><comment><USER4> In the Iterators section if you use

      for (idx, x) in xs.iter().enumerate()

instead of

      for (x, idx) in xs.iter().zip(0..xs.len())

you get the 4x unroll ([https://godbolt.org/z/XDyx0w](https://godbolt.org/z/XDyx0w)).

</comment><comment><USER5> Why not use serde instead of rolling your own "Savable"?

Also you should use Rc/Arc and Weak (along with RefCell/Mutex if needed) instead of the unsafe pointers. Even better, if possible, move the functions that access multiple components to the object that holds them all, and don't use any "smart pointers". Another possible design is to pass borrowed references explicitly to the methods, and add them to the trait signatures where needed.

Regarding memory access, it's probably fastest to have an hardcoded fast path for RAM and ROM, and then process the rest like now. Lookup tables might help as well (as long as all the data including them fits in cache, of course).

<comment><USER6> This is very interesting. Do you have a good example to study how this should be done?

</comment></comment><comment><USER7> So what are your general thoughts on Rust? Would you use it again? How does it compare to using C or C++? Did you enjoy working in it? What was disappointing/motivating about the language?

</comment><comment><USER8> If you like the subject of emulator and Rust, I suggest you take a look at Ferris youtube : [https://www.youtube.com/channel/UC4mpLlHn0FOekNg05yCnkzQ/vid...](https://www.youtube.com/channel/UC4mpLlHn0FOekNg05yCnkzQ/videos)

He stream is development of a Nintendo 64 and Virtual Boy emulator in Rust.

<comment><USER9> And here is a video [1] and free to read online book [2] that someone else made about implementing a Game Boy emulator in Rust.

[1]: RustFest Rome 2018 - Ryan Levick: Oh Boy! Creating a Game Boy Emulator in Rust - [https://youtu.be/B7seNuQncvU](https://youtu.be/B7seNuQncvU)

[2]: DMG-01: How to Emulate a Game Boy - [http://blog.ryanlevick.com/DMG-01/](http://blog.ryanlevick.com/DMG-01/)

</comment></comment><comment><USER10> If I recall correctly, P.C. Walton, one of the creators of rust, used an NES emulator during rust's initial programming to measure performance of the language's output binaries.

<comment><USER11> Indeed. I peeped at his code[1] frequently while I worked on a GameBoy Original emulator[2] that I've as of yes failed to finish.

[1]: [https://github.com/pcwalton/sprocketnes](https://github.com/pcwalton/sprocketnes)

[2]: [https://github.com/zacstewart/gbrs](https://github.com/zacstewart/gbrs)

</comment></comment><comment><USER12> Question, what made it easier to build this in Rust than other languages? I know the advantages of Rust, but what exactly was the experience in this context?

<comment><USER13> It seems that unsafe references were used, so the advantages of Rust appear to have been somewhat relinquished in this case.

<comment><USER14> I am not sure you can _not_ use `unsafe` in an embedded type of project. `unsafe` isn't necessarily bad, but when used at least makes it very clear where extra attention should be paid.

<comment><USER15> Emulating a system of a few 2Mhz with a 4x3Ghz chipset ought to be doable using managed memory.

<comment><USER16> Nitpicking a bit, but there's not a lot of useful things that could be multithreaded in an 8-bit emulator, so it would be more like 1x3Ghz ;)

In those old 8- and 16-bit machines all components usually ran completely synchronous for each clock tick, for instance if the video emulation runs out of sync with the CPU emulation for a tick or two, a write from the CPU to a video hardware register might not make it in time and you get garbage video output.

Modern asynchronous systems may need less (relative) host system performance for emulation, because the timing requirements between the different hardware components are much more relaxed.

<comment><USER17> The original hardware was multithreaded... in the sense that there were several separate processing units.

<comment><USER16> Yes, but as far as I can glance from the NES spec, those still run from the same clock (with different dividers, but they're still locked to each other).

I haven't written an emulator for the NES yet, but on machines like the Amstrad CPC or C64, the CPU can reprogram video hardware registers (like color palette entries) at any time, for instance in the middle of a scanline. When this is off by a tick, you get the color palette change a couple of pixels late or early.

If CPU and video chip emulation would run on different threads, they would need to sync with each other a few million times per second, that doesn't sound like a good idea. If synchronization is only needed once per scanline, or even per frame that's an option of course. Often this is good enough to run some games which didn't go too close to the metal (again this is only from my experience with home computer emulators, haven't done NES stuff yet).

Parallelizing through SIMD might be an option though (one can pack a lot of 4- or 8-bit counters into a 512-bit register).

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> There's also sprocketnes, which was originally written ~6 years ago by pcwalton, who works on rust/servo at Mozilla.

It's been kept up to date and it's interesting to see how the project evolved along with the language:

[https://github.com/pcwalton/sprocketnes](https://github.com/pcwalton/sprocketnes)

<comment><USER19> While the project itself is a great resource, the dependencies marked as "*" are unfortunate for a project that is 6 years in the making.

</comment></comment><comment><USER20> What was the most challenging part for you in building this emulator?

<comment><USER21> I want to build one myself as well, but I don't want to use existing code as a guide, rather challenge myself to implement from raw specs.

The problem is I haven't really found any yet that helped me (admittedly, I have so far devoted just one Saturday morning to it.) Are there any specs about the hardware that you used, or that anyone else can share?

<comment><USER2> > Are there any specs about the hardware that you used, or that anyone else > can share?

Everything you need is either on [http://wiki.nesdev.com](http://wiki.nesdev.com) or on their forums. I know because that's what I did with my NES emulator - I explicitly didn't want to look at any source code and instead wanted to implement everything only based on the docs.

Granted, what's on the NESdev isn't always easy to grok, up to the point of being _really_ confusing sometimes. What I've found really helped is gradually setting up a test suite based on various test ROMs I could find, which even allows you to implement some parts of the emulator TDD-style once you get the basics up and running.

</comment></comment></comment><comment> robert-boehnke Nice, I wrote an NES emulator in Swift once: [https://github.com/robb/NES](https://github.com/robb/NES)

</comment><comment><USER22> This is the second emulator I'm seen in rust, the other being an ARM emulator done as a personal project by somebody who was an intern here. I do emulators, but in C. (BTW, hiring)

For an expert performance-sensitive C programmer who pulls out all the platform-specific tricks to make stuff go fast, how do you think rust would be? The default safety is appealing, but I have lots of concerns.

Bitfield access looks painful. In C, I can set things up to make read/write named access to bitfields easy. Granted, the header to set this up is complicated: make an union of anonymous structs, each with a bitfield and the needed padding. With that though, I can use bitfields just like ordinary struct members. I can pluck fields out of opcodes for emulation, or I can fill them in for a JIT.

Sometimes in C, one might use gcc's computed goto extension. (getting a void pointer from a unary && operator applied to a label, then derefing it at the goto) It doesn't seem like rust has this, even in unsafe code. Actually, there isn't even a "goto" keyword... which I find to be a worrisome sign that might indicate stubbornly academic language design.

The bounds checking on arrays is kind of the whole point of rust, but if that can't get out of the way for speed then I'd have to make everything unsafe. If I do that, then rust is pointless. Has anybody checked the assembly to see if the compiler is good at eliminating the checks? For example, if I use a 5-bit bitfield to index into a 32-entry table, do the checks get optimized out?

What if I want aliasing? With gcc I can mark things __may_alias__, and with Visual Studio I don't even need that. I had a case where I needed to lay structs over each other like shingles, in groups of 4 with internal padding, so that the same struct member of each of the 4 structs would be adjacent in memory. This was needed so that vector intrinsics could be used.

Speaking of that, are there vector intrinsics? What if I specifically want MMX opcodes in one place (for MMX emulation) and SSE opcodes in another place?

Can I get a switch without a default, such that the compiler doesn't try to generate code for a case that isn't listed? I know this will seem like a horrible idea to many programmers, but sometimes performance matters. When the language can't keep up, I have to drop down into assembly, and that sucks more.

<comment><USER23> Rust has no strict aliasing, so all Rust types are may_alias.

<comment><USER22> I thought it was the other way, all being effectively restrict, with the hazard removed by the borrow checker.

In any case, I want to be able to have both behaviors.

</comment></comment></comment><comment><USER24> Tiny off-topic, I was at hackaday Belgrade last year and a very good friend of mine ported a NES emulator on the badge. It was amazing for me seeing him how he solved the issues so quickly and how productive he was. And it was fun fiddling with an emulator on a uncommon embedded target.

</comment><comment><USER25> You mentioned fighting the borrow checker a bit around the emulated CPU address space. Did this come up anywhere else, like frame buffers?

Edit: Ugh. Never mind...not being familiar with NES I didn't recognize what a PPU was :)

<comment><AUTHOR> The borrow checker is mainly a problem when the same data needs to be modified in two different places. Only the PPU writes to a frame buffer(that it owns), so it wasn't a problem there.

The game controllers were another case: They are mapped in CPU address space, so the CPU needs a permanent mutable reference to them. But the top-level also needs to update them with inputs read from my Xbox 360 controller.

</comment></comment><comment><USER26> [http://www.michaelburge.us/assets/articles/20190318-nes- emul...](http://www.michaelburge.us/assets/articles/20190318-nes- emulator/bankswitch.gif)

Off-topic: Were the "bumping wheel" tiles ever used in the actual game? If so, in which level?

<comment><USER26> [https://tcrf.net/Super_Mario_Bros._3/Unused_graphics#World_8](https://tcrf.net/Super_Mario_Bros._3/Unused_graphics#World_8)

Apparently not.

</comment></comment><comment><USER27> Awesome. Love the blog post. I learnt Haskell using the NES ([http://github.com/dbousamra/hnes](http://github.com/dbousamra/hnes)). Definitely recommend doing your own.

</comment><comment> crooked-v This reminds me that I want to make an NES emulator in JS using Redux, in part to play around with the entire machine state being serializable/deserializable and time-travelable.

</comment><comment><USER28> Does anyone know if OP would be able to work around the single-ownership issue using Cell/RefCell?

I still haven't fully grasped how to use those, but they seem like they'd fit there.

<comment><USER29> OP mentions that the use of unsafe code means it's single-threaded, so yes it's likely that RefCell could be used instead of unsafe code.

<comment><USER30> I'm frankly a bit worried about that statement; I believe it means that they're producing UB. Even with unsafe, Rust code is expected to uphold the safety rules.

I haven't read the code though.

<comment><USER29> OP is using unsafe to store a mut pointer to a boxed value so that it can be mutated in two places. So the statement is just referring to data races.

<comment><USER30> Sounds like UB to me! I'll have to take a look. It really depends on the details.

(I tried to run miri on it, but I'm on Windows, and this is unix-only.)

EDIT: even with porting some of the code, I can't get the current repository to build, there's a borrow checker error...)

<comment><AUTHOR> Sorry about that. If it helps, I'm using Rust 1.32 to build:

        $ rustc --version
        rustc 1.32.0 (9fda7c223 2019-01-16)
        $ cargo --version
        cargo 1.32.0 (8610973aa 2019-01-02)

        $ cargo build --release
        $ cargo run --release --bin nes-emulator
    `

<comment><USER30> It's chill! So, two things:

1\. I can send you a patch later, but if you use std::io::stdin() and stdout, instead of opening the file descriptors, it should compile on Windows.

2\. The borrow error was coming from miri; it detected some UB! Compiling with cargo does work. It's not the bit I expected; I can file a bug with the error once I'm back at my laptop.

Anyway, this is a cool project, and I'm glad you're doing it; don't let my worries bug you. I've been trying to learn more unsafe stuff and so the UB bits are just on my mind more lately.

EDIT: actually it's just from building on nightly rust, not stable. No miri needed. I wonder why stable is okay with this... anyway I filed some github issues, please feel free to ignore me or close them, but if you wanna keep talking about this, let's do that there :)

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> What is something that I can do to learn Rust better? I have been through the book, but that's it. What would help me really learn Rust?

<comment><USER31> "How do you get to Carnegie Hall?"

Seriously, the best thing to do for virtually all professional or hobby work is to get more experience with it. Choose a project with small enough scope to give you encouraging results to keep that feedback loop going.

<comment><USER12> That is a great analogy thanks.

<comment><USER32> From personal experience, invest in good _(for you)_ resources to learn the language. I had two attempts, and it wasn't until I took "learning" seriously and purchased a book did Rust stick. My first attempt that has worked for all other languages, mostly by just reading docs and programming, was a massive headache.

That was years ago though, perhaps it's better now. All I know is after reading Programming Rust, I picked Rust up and it's been amazing. I love the language.

</comment></comment></comment></comment><comment><USER33> How cool would it be if computers shipped with a small FPGA to get better performance for stuff like this?

</comment><comment><USER34> I'll upvote anything using rust in a cool way</comment>


City Birds Are Smarter Than Rural Birds - <AUTHOR> http://www.united-academics.org/earth-environment/city-birds-are-smarter-than-rural-birds/ <comment><USER2> Before somebody starts trying to smugly draw some parallel with urban and rural humans, the finches have natural selection weeding out the weak (or in this case less intelligent). This isn't happening with people.

<comment><AUTHOR> Sure. Even though humans are still shaped by natural selection, we now have to consider that we are evolving in a balance between culture and biology. [http://www.sciencemag.org/news/2012/04/natural-selection- sti...](http://www.sciencemag.org/news/2012/04/natural-selection-still-us) (This article has some interesting (and controversial) remarks on the role of natural selection in humans).

</comment></comment><comment><USER3> "One such test involved setting a dish of food and timing how long it took the finch to eat it;"

How is this a test of "intelligence"? Biology, metabolism and food drive maybe, but "intelligence"?

<comment><AUTHOR> The researchers wanted to test whether city birds had 'higher boldness, reduced neophobia, and enhanced problem-solving and learning skills'. These specific test was done to see whether they could guarantee reproducibility of the results. Something like a control

<comment><USER3> that still makes no sense as far as 'intelligence' goes. First off, rural and urban birds have different overall diets. if you stick a french fry in front of a rural bird, it might not know its supposed to be 'food'. Same can be said with water-bugs and urban birds. there are too many factors to consider - though they could have and just not reported the specific metrics.</comment></comment></comment>


List of *all* YC Companies So Far - <AUTHOR> http://startupmeme.com/2007/03/19/ycombinator-a-force-to-reckon-with-a-model-to-replicate/ <comment><USER2> Inaccurate title: there are at least 8 missing.

This article gets the amount of funding wrong. I haven't read the whole thing, but if they got stuff wrong that's in our faq, there are probably other mistakes.

</comment><comment><USER3> Why do you think it's all YC companies? The article doesn't appear to claim that.

Haysan appears to be missing; that's the one with Marie Brattberg in it IIRC. <http://www.heysan.com/>

</comment><comment><AUTHOR> I thought it was a full list initially, but now it's too late to edit.

<comment><USER4> Horrible place to contact you, but an email wasn't listed in your profile.

I was scrolling through the log of the Meebo room setup by jkush and I thought I saw that you were in Providence. I just moved to Providence a few months ago from Boston and it would be cool to meetup with with someone in the area to possibly collaborate on some ideas.

If you get a chance, shoot me an email.

Thanks

</comment></comment><comment><USER5> Dupe: <http://news.ycombinator.com/comments?id=5031>

<comment><AUTHOR> Oops, I didn't find the other story. My bad fellas.

</comment></comment><comment><USER6> I wonder what percentage of YC companies never even get to the stage of being able to launch something.

<comment><USER7> Has that happened?

</comment></comment><comment><USER8> Hey, what about Simmery Axe? You know, the creators of BrainGuppy. You don't? Oh.

Anyway, yeah, Simmery Axe. And you thought Wufoo was a wacked-out name. It's apparently from a Gilbert and Sullivan opera, which doesn't explain as much as deepen the mystery.</comment>


How does Google Maps server authenticate android device? - <AUTHOR> Recently I have been digging in google maps authentication. When you are generating API keys for using google map for android, you can give `SHA-1` and `package name` of android apk for restricting api calls. Now the question I have is, How does google map server identify the apk, which is making the request to google map server with apiKey? <comment><USER2> The app probably doesn't talk to the API server directly, but to a Google service running on the device, which has access to that information.</comment>


Switzerland ended up with 2nd highest coronavirus infection rate in the world - <AUTHOR> https://globalnews.ca/news/6713906/coronavirus-switzerland-commentary/ <comment><USER2> This is also evident in the analysis that I just submitted - COVID-19 Cases / Capita (1M): [https://public.tableau.com/profile/neil.panchal#!/vizhome/CO...](https://public.tableau.com/profile/neil.panchal#!/vizhome/COVID-19CasesCapita/CasesCapita?publish=yes)

<comment><AUTHOR> Good job!</comment></comment>


Apps for the Army: the military offers cash for app dev - <AUTHOR> http://armylive.dodlive.mil/index.php/2010/03/apps-for-the-army-challenge-is-here/ Only open to Army civilians and soldiers, but this signals that the Army will welcome applications that improve the lives of soldiers in the near future. <comment><USER2> This is not a trial - it's a full program by the army cio/g6: [http://www.istrategylabs.com/2010/02/apps-for-the-army-a- fir...](http://www.istrategylabs.com/2010/02/apps-for-the-army-a-first-of-its- kind-app-dev-contest-for-mil/)

<comment><AUTHOR> Hooah!

</comment></comment><comment><AUTHOR> Only open to Army civilians and soldiers, but this signals that the Army will welcome applications that improve the lives of soldiers in the near future.

</comment><comment><USER3> Contest is limited to 100 people and $30k cash pool. It looks like a trial, or a pet, project.</comment>


Show HN: Poolside FM - <AUTHOR> https://poolside.fm/ <comment><USER2> Not being mean or anything, but can I ask what exactly this is?

</comment><comment><USER3> love it</comment>


Currency (Restrictions on the Use of Cash) Bill 2019 - <AUTHOR> https://www.treasury.gov.au/consultation/c2019-t395788 <comment><USER2> I wonder if we are going to reach a sort of singularity with regard to encroachment on privacy in western countries where we both take it for granted that privacy is a right, and live in societies where _actual privacy_ is clearly trending somewhere just above zero.

I don't think this is really about cryptocurrency particularly. This is about electronic transfers generally. My read on this was that the government is basically saying "big transactions can't be in something we can't feasibly track."

Australia seems quite aggressive in this regard; also openly banning encryption.

I used to be up in arms about this stuff. Now I am older and mostly trust (for my threat model) off-the-shelf end to end encryption for basically anything I consider private.

But I also don't _care_ about the privacy thing anymore. I kind of hope the people 10+ years younger than me still care about that stuff. Google reading/mining the dick jokes I've been sharing back and forth in a dying g-chat window for the last 10 years? Whatever. I'd still keep the conversation there just for intertia's sake; even though I also assume its adding to google's model about me.

I don't think, at least in countries culturally similar to the US (the one I know the most), any populous will embrace the idea of "let the experts of the government see everything so you can all be safe"; but, it also seems that we will just trend toward that and kinda pretend like its not happening.

<comment><USER3> > Australia seems quite aggressive in this regard; also openly banning > encryption.

Australian here, talking to you over an encrypted HTTP connection, because we didn't ban encryption. Mandating certain measures which sometimes can be used to circumvent the privacy guarantees of encryption doesn't mean encryption is banned... (yeah, it's still a bad law.)

As for transaction privacy - I am concerned about small transactions, not large ones. Small transactions reveal your personal preferences and day-to-day dealings, large transactions reveal aspects of your financial situation that almost certainly have an impact on your tax obligations (and therefore that government has more reason to want to track) without revealing as much about your personal affairs.

So this bill, on its own, seems alright to me. Though I do fear that it's the start of a slippery slope down to abolishing cash - not that the free market needs any help with doing that. We'll see.

<comment><USER4> > Mandating certain measures which sometimes can be used to circumvent the > privacy guarantees of encryption doesn't mean encryption is banned.

If there's a way around encryption for someone, then there's a way around encryption for everyone (because it will get out)

If there's a way around the encryption, then it's not really encrypted.

If the Australian government has mandated that there must be a known way to circumvent encryption, then yes, they have effectively banned encryption.

</comment></comment></comment><comment><USER5> My issue with removing cash is that in a way you are moving from public money (printed by the government) which you are free to use as you want to a private money issued by banks who generally have lots of ability to charge you money for payments and block your account.

Banks in Canada have been fighting for removal of cash and cheques (which are regulated in terms of fees).

<comment><USER6> Per the article, it's a $10k AU limit. That's... not really removing cash. It looks more like a money laundering statute to me.

<comment><USER7> They're just dipping a toe in the water with a $10k limit. It will necessarily drop as time goes on. Getting the ceiling in place is the hard part. Ratcheting down the cap is easy.

<comment><USER8> It doesn't need to drop, inflation will rise to meet it.

</comment></comment></comment></comment><comment><USER9> Who is lobbying for this? Who wants this legislation to pass, and why? (American here, not sure how things work in Australia, but these are questions I often ask in my own country)

<comment><USER10> I think the government, holds to benefit from this, and there might be no need of lobbying. Any transaction in cash for such a high amount, is intentionally done to keep the transaction off-book (and avoid taxes). There is little reason, why one would go through the inconvenience of managing so much cash, when a digital transaction is so much more ergonomical.

India too is aggressively trying to achieve this. One of their rather bold attempts, called demonetization, happened a few years back, but it failed. However, in principle, I agree with the idea of having a cashless economy, so that government has data to see who is lying in their tax returns.

<comment><USER11> > Any transaction in cash for such a high amount, is intentionally done to > keep the transaction off-book (and avoid taxes)

What if you wanted to buy a $25,000 car in cash from a dealership? That's not intentionally avoiding taxes. It's trying to get a better deal.

It's not unreasonable to want to avoid keeping a lot of money in a checking account in the US. They offer 0% interest rates. It doesn't make sense to have large sums of money sitting there. Why let the bank profit off your money if they aren't going to return some of it back to you for letting them use your money to make them more money.

<comment><USER12> > What if you wanted to buy a $25,000 car in cash from a dealership?

I think you've not done this in the past twenty years, or just heard the phrase and misunderstood it.

"Paying cash" at a dealership for a new car doesn't mean literally bringing in paper currency. Generally you pay via cashiers check or wire transfer (rarely via personal check, but with a waiting period most of the time then). Saying "paying cash" at a dealership means "not financing the vehicle."

I'm not saying it's not possible to use paper currency, I've done it myself. For anything of value though, you'll generally get a less enthused recipient (as they'll have hassles depositing it), not to mention the hassle you'll get just to withdraw the money. As an example in the US, withdrawing over $10k in cash requires filling out paperwork. Withdrawing much larger amounts will generally involve even more scrutiny. Trying to break up the withdrawals to stay under $10k will very likely set off red flags with the bank and lead to inquiries from their compliance department at best (usually much worse).

<comment><USER13> There's no waiting period if you pay by check. (Yes, real world personal experience.) Don't forget they're happy to let it go with just a promise to pay later.

<comment><USER12> I've paid by personal check before too without a waiting period, but I also have first hand knowledge that it's not the norm, at some dealerships anyway. Obviously every place will likely be somewhat different.

</comment></comment></comment></comment></comment></comment><comment><USER14> > Transactions equal to, or in excess of this amount would need to be made > using the electronic payment system or by cheque.

Does Australia have a law that guarantees access to a bank account? Or would this proposed limitation imply that people who can't get a bank account for various reasons aren't allowed to transact anymore?

<comment><USER15> Only 1% of Australians are fully excluded from financial services (no transaction account, no credit card, no general insurance)[1]. I doubt this law will have much of an impact on that small population.

[1]According to this report from 2013/2014: [https://www.nab.com.au/content/dam/nabrwd/documents/reports/...](https://www.nab.com.au/content/dam/nabrwd/documents/reports/financial/2014-measuring- financial-exclusion-in-australia.pdf)

<comment><USER16> 1% of Australians is still 246,000 people.

</comment></comment></comment><comment><USER17> It think it is bad. Payment in physical cash should not be restricted. Otherwise the system will fail and then you will not be able to make a payment at all.

I use cash for all payments anyways. And if cash will not work, then we will pay by barter.

<comment><USER18> If a public institution was introduced to allow you to freely digitally transact and securely store your money would you feel similarly?

<comment><USER17> I may then be more likely to use a digital transaction for some cases, although still I would prefer to use cash as much as possible. (For one thing, it doesn't fail in the way that digital systems do. And, it can be used without a computer. There are other advantages too.)

<comment><USER18> Not all digital systems fail similarly, consider some sort of distributed hub and spoke system that could arbitrate transactions; thus mitigating a single point of failure. Also consider how much of everything we purchase today is entirely reliant on our digital infrastructure, if there were some calamity that entirely halted our networks I don't think legal tender would be any use.

<comment><USER19> There is good reason to have more than 10k in cash to have for your family in case a localized natural disaster or other emergency makes digital transactions impossible where your are, during a crisis. You may well need a transaction larger than 10k in cash for transport etc at that point as well.

</comment></comment></comment></comment></comment><comment><USER20> How would this bill work in practice? People who use cash for tax dodging aren't reporting true values anyway. (have not read any of the documents)

I guess in the past they could have had a job quoted at $500K. Paid "in cash" with $400K and reported only $200K to the tax office.

Those businesses could still just have $200K paid by electronic transfer (reported to ATO) and the rest in cash. It does mean the tax dodging responsibility is somewhat pushed to the other party too which might make some people/businesses uncomfortable and avoid it entirely.

I am all for more fairness and having people pay the right tax. Too many builders and tradies sort things out in cash. The unfairness then extends further where people then become eligible for government subsidies because on paper they earn less - but really have just reported less.

edit: reworded for clarity.

<comment><USER21> There are countries where this type of restrictions to using cash for large payments have been in place for many years. They help with: \- mitigating money-laundering risk \- more effective application of sales tax \- more effective enforcement (in combination with other tools) against income tax evasion.

<comment><USER22> There are several common types of money laundering today, exchanging deeds to offshore shell companies that own other shell companies that own real estate, private art auctions (where the bidder, seller, and artwork is private), etc.

Those are all cashless.

</comment></comment></comment><comment><USER23> Isn't cash the only thing preventing banks from offsetting the negative interest rates to the general public?

For the time being people would just get out of their deposits but if cash gets banned then things become more complicated.

<comment><USER24> Cryptocurrencies seems to become the only "cash" alternative. Not saying I think it's a good (or bad) idea, but what else is there that resembles cash?

<comment><USER25> Even pseudoanonymous blockchains like Bitcoin aren't completely fungible like cash. You need to use privacy only cryptos like Monero, or zero knowledge proof contracts on Ethereum for that.

</comment></comment></comment><comment><USER26> Digital currency is currently exempted but will apparently be kept under close scrutiny (Section 9).

[https://www.treasury.gov.au/sites/default/files/2019-07/expo...](https://www.treasury.gov.au/sites/default/files/2019-07/exposure_draft_- _explanatory_materials_currency_restrictions_on_the_use_of_cash- excepted_transactions_instrument_2019_2.pdf#page=6)

<comment><USER27> So, this is good for Bitcoin.

</comment></comment><comment><USER28> This limit exists in Greece right now too, but the cap is 300 euros. Pretty frustrating.

<comment><USER29> Any exceptions? I ask because that limit is very low.

<comment><USER28> Not that I know of. Stores like IKEA have signs mentioning that transactions over 300 euros must be done by card and don't mention anything else...

</comment></comment></comment><comment> at-fates-hands Recently, I was eating at the same taco place pretty much the same day, twice a week. I was paying with my debit card and on a whim while checking my account, I noticed they were charging me on days I wasn't eating there, for the same amount when I would stop and eat there.

It actually happened three times where I had to have my card replaced so they couldn't keep running fraudulent charges on my card. Third time I just switched to cash and haven't had any issues since.

I can understand having a cashless society, but then I think about how many times cash has saved me from dealing with fraud and my cc# leaking out on the internet. Or dealing with shady people from craigslist.

<comment><USER30> I don't get it, you kept going to the fraudulent place? How good are these tacos that you are happy to have your money stolen from your bank account?

<comment> at-fates-hands A) The bank credited me back the amount so it wasn't a big deal.

b) The amount was minimal - around $7 per transaction

c) I wasn't checking my account regularly because I thought once it was fixed, it was fixed. I was usually a few weeks behind when I was getting billed and when I was catching it.

d) the tacos are magnificent and worth it.

<comment><USER30> Can you please share where this place is, it's name and what's good?

<comment> at-fates-hands [https://www.tacojohns.com/](https://www.tacojohns.com/)

primarily a midwest, mountain region chain.

The potato ole's are legendary. Anything with those is awesome like their meat and potato burrito. The taco bravo is awesome. I usually go there on Tuesday for the cheap hard shell tacos which are awesome too.

If you're really hungry, they have a "six pack and a pound" deal which is six tacos and a pound of potato ole's.

<comment><USER31> Every year on a bicycle trip (ragbrai.org) my family go to Taco Johns on Tuesday (Taco Tuesday!) and have a taco-eating contest. This year my middle son won, at 11.5 tacos!

<comment> at-fates-hands > This year my middle son won, at 11.5 tacos

OMG that's crazy!! I eat three or four and I'm totally stuffed. No way I could ever down that many, so that's so awesome!

<comment><USER31> 2nd place was 10. Third - 8. But these guys are all 6'4". When eating pancakes for a record, they top 30.

</comment></comment></comment></comment></comment></comment></comment></comment><comment> King-Aaron Don't worry about chasing down large multinationals who owe billions in tax revenue, best to just crack down on pot dealers and bricklayers paying for stuff in cash.

<comment><USER32> Yep.

Panama Papers, nothing.

Paradise Papers, nothing.

Multinational tax avoidance, nothing.

Banking Royal Commission, two years of resistance before being forced into it.

$10k cash payment limits. The legislation that doesn't solve any 'real' problem, that's what we get.

</comment></comment><comment><USER33> Slightly off topic, but why isn't a one dollar bank note worth more than one dollar in a bank _today_?

I have a very basic understanding of how bank works, so please correct me. If banks can only lend based on the reserve, it seems bank note should have more value to the banks.

<comment><USER30> There are two topics here:

a) the time value of money, and b) the fractional reserve system.

There is also a 3rd topic, which is inflation, which is implied in your question.

Topic 1: The time value of money is the bit about "a dollar today is worth more than a dollar tomorrow". The reason why this is the case, is because if I give you $1 dollar today, and you give me $1 dollar at the end of the year (metaphorically "tomorrow"), than I would have missed out on the interest I could have earned by lending it to the bank (in a savings account) or the Government (in a bond). I hope this makes it clear why there is a greater benefit to receiving money now, rather than an identical sum later.

Topic 2: This might be a mind-bender, but bank loans create money, not deposits. Don't believe me? Check out a Bank of England representative say the following in plain English:

"...banks create additional broad money whenever they make a loan"

"Now, while this is nothing new, it's sometimes overlooked as the main way in which money is created and it runs contrary to the view sometimes put forward that banks can only lend out deposits that they already have."

"In fact, loans create deposits, not the other way around."

Source: [https://www.youtube.com/watch?v=CvRAqR2pAgw](https://www.youtube.com/watch?v=CvRAqR2pAgw)

Sadly the resources I had pointing to the Fed saying this has been taken down.

For more on this read the following:

* Werner, R. A. (2014). Can banks individually create money out of nothing ([https://drive.google.com/open?id=0B5IFY-yq0O9IUHNTU0NaWTVQa0...](https://drive.google.com/open?id=0B5IFY-yq0O9IUHNTU0NaWTVQa01TcXdaQWJQZEVwdnF1c0Vz))

* McLeary, M., Radia, A. & Thomas, R. (2014). Money creation in the modern economy ([https://drive.google.com/file/d/0B5IFY-yq0O9IbEtsWlJZUFVxTzk...](https://drive.google.com/file/d/0B5IFY-yq0O9IbEtsWlJZUFVxTzkyaGZPVHlfaUJINnl5aURv/view?usp=sharing))

Topic 3: From the consumer perspective, inflation is stealth taxation... you have $10 at the start of the year... 3% inflation means that at the end of the year the $10 only buys $9.97 worth of goods... you keep that $10 in your pocket and you lose purchasing power in a compounded way (the inflation eats and eats at your purchasing power).

You then might ask, "why do the financial press and central bankers all talk about inflation being good?"

Well, the fiat fractional reserve financial system relies on inflation... in a way inflation is like a 'healthy' indicator for this messed up system where money has no intrinsic value (i.e. not backed by gold like the US dollar was prior to Nixon closing the gold window in 1971). Basically, the more money created the more value is siphoned away from a population to the banks and government. I think of the world as stuck on this giant hamster wheel where people are forced to keep working, keep spending, keep investing and keep being taxed.

This is why the Governments of the world bailed out the banks. Government fiat currency is a con, indeed the whole system is a con. Money is not backed by anything except faith that the Government can seize the wealth of its citizens or tax the wealth creation of its tax residents.

I think the last 'real money' died with the Swiss franc which had a legal requirement that a minimum of 40% be backed by gold reserves. However, this link to gold, was terminated on the 1st of May 2000 following a referendum.

To illustrate my point, prior to 15/08/1971 (when Nixon stopped US dollars being converted to gold), $35 bought 1oz of gold. Last time I checked 1oz of gold is worth $1,476.06. This should make you stop to consider how much wealth has been transferred via inflation.

For a more detailed explanation and history see:

* Griffin, G. E. (2018). The Creature from Jekyll Island: A Second Look at the Federal Reserve

* Maloney, M. (2013). Hidden Secrets of Money ([https://www.youtube.com/playlist?list=PLE88E9ICdiphYjJkeeLL2...](https://www.youtube.com/playlist?list=PLE88E9ICdiphYjJkeeLL2O09eJoC8r7Dc))

* Still, W. T. (1996). The Money Masters ([https://www.youtube.com/watch?v=HTPKJJ_CHjQ](https://www.youtube.com/watch?v=HTPKJJ_CHjQ))

<comment><USER34> The "Money creation in the modern economy" paper makes it clear that fractional reserve banking is _not_ how banks work - a fractional reserve system is based on banks lending out deposits, which as you say is not true.

> Money is not backed by anything except faith that the Government can seize > the wealth of its citizens or tax the wealth creation of its tax residents.

Money has always been "backed" by nothing more than confidence in its utility. How often have various governments and rulers throughout history either arbitrarily changed the amount or type of material used to back money or simply not had enough of it around to back up the money in use? Commodity money is just fiat money pegged to an arbitrary amount of stuff, you still have to trust the government to maintain the peg and have the required stuff somewhere.

</comment></comment></comment><comment><USER35> So my access to the economy can be terminated at the push of a button? That doesn't sound appealing. I suppose I could always barter.

</comment><comment><USER36> This is a restriction on physical cash, there is no mention of electronic cash let alone cryptocurrency.

<comment><USER37> Physical cash is still a very valuable thing [1], and restrictions to it should be resisted on principal, not just because of technological progress.

[1] [https://aeon.co/essays/if-plastic-replaces-cash-much-that- is...](https://aeon.co/essays/if-plastic-replaces-cash-much-that-is-good-will- be-lost)

</comment></comment><comment><USER38> "We need to see everything you do for your own good"

</comment><comment><USER39> It's clear that cash is going to disappear, it's only saved by 50+ year old people that refuse, on average, to stop using it, which means we have at best 30 years left of shrinking financial freedom. Cashless society with perfect surveillance is going to mean confiscatory taxes and behavior control on a level never thought possible in the Western world. Some countries like Italy already have a much smaller limit in place - €1000 max [1]

It's going to mean currently "absurd" and "extreme left" ideas like maximum wealth cap. The idea that "no person should have more than $10M" would be easy to sell even today in most countries, the only reason it doesn't happen is because it's impossible to enforce - such a country today would only see an enormous capital outflow and rise in cash deals. With nearly perfect global surveillance, which is already in an advanced stage of construction - FATCA, CRS/AEOI, ban on bearer shares - escaping with capital would be impossible. Either the next or the previous stage would be of course maximum income - eg. "no person deserves to earn more than $150k a year".

After that, individual limits on "productive" and "not productive" spending are going to appear, amounting to another form of taxes - an individual annual limit of eg. $1000 per year on video games, $1000 for "unhealthy" soda drinks. An illegal barter market would emerge, fought in the same way drug trading is fought now.

The inevitable end of this system is a tiny global elite class of bureaucrats, not "legally" owning any significant wealth but controlling enormous amounts of it (Putin and Chinese Party style), and billions of serfs for whom it's illegal to even try to get wealthy. A return of aristocracy in all but name - with serfs better fed and healthier, but with less personal freedom than even Russian peasants under tsar.

Cryptocurrencies with anonymity, getting too big to squash before that happens, are the only hope left.

[1] [https://www.italy-uk-law.com/new-restrictions-on-the-use- of-...](https://www.italy-uk-law.com/new-restrictions-on-the-use-of-cash-in- italy/)

</comment><comment><USER40> I wonder how this really will work in practice. Tradesmen are often paid in cash, and a business might quite reasonably take out a large amount each week to pay the workers on the job site. In some industries such as mining and oil work it is not uncommon to get the pay packet in cash, though perhaps less in Australia these days.

<comment><USER41> > Tradesmen are often paid in cash

Tradies here are stereotyped by (not all) unscrupulous operators that use cash to do jobs 'off the books' in under-quoting their true income or offering a discount to customers for unlawfully not charging the GST.

Bank transactions provide the tax office an audit trail. NB: The 'blackeconomy@...' feedback email hints at the purpose.

</comment></comment><comment><USER42> Which of the dozen documents on this page mentions cryptocurrency? I don't want to search all of them individually.

<comment><USER43> "That said, some forms of electronic payment more closely mirror physical currency. In particular, crypto-currencies and other digital currencies are generally unregulated and do not create clear records of transactions in a form that can easily be used to identify the parties to a transaction."

[https://www.treasury.gov.au/sites/default/files/2019-07/expo...](https://www.treasury.gov.au/sites/default/files/2019-07/exposure_draft_- _explantory_memorandum.pdf)

</comment></comment><comment><USER44> Interesting, if crypto is cash, then no CGT on holdings? I'm dreaming of course!

<comment><USER45> It sounds like currency trading is still subject to capital gains tax. There's no magic classification that will make cryptocurrency tax-free.

</comment></comment><comment><USER46> We've had similar laws in Belgium for many years. Cash transactions over 3000EUR aren't allowed.

<comment><USER47> Notably, like the proposed Australian bill, this rule in Belgium does not apply to transactions between consumers, e.g. a transaction between two individuals for a used car sale.

[https://www.nbb.be/docs/ts/enterprise/activities/notes_coins...](https://www.nbb.be/docs/ts/enterprise/activities/notes_coins/folderfodnl.pdf)

</comment></comment><comment><USER48> The submitted title was "Australia to make bitcoin payments above $10k illegal", but a moderator changed it to the article title, in accordance with the site guidelines: [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html).

</comment><comment><USER49> Big Brother is monitoring your transactions.

The worse our world runs into the digital rabbit hole, the less I participate in it. As much of my life as feasible is now transacted in cash, and I no longer even own a smart phone.

This is not progress.

</comment><comment><USER50> Australian money is made from palm oil. Its an attack on borneo

</comment><comment><USER45> On one hand this is just codifying common sense; cryptocurrencies aren't even good for payments and everybody already assumes that only criminals use large amounts of cash. OTOH I predict that innocent people will get tripped up by this law while criminals mostly won't.</comment>


How to migrate user data and preserve old links with Nginx - <AUTHOR> http://alvinlai.com/2010/06/05/how-to-migrate-user-data-and-preserve-old-links-with-nginx/

<comment><USER2> Where are you hosting the content now?

<comment><AUTHOR> Dreamhost

<comment><USER2> Thanks for the reply.

One of the complaints with shared hosting providers is they over-promise on the bandwidth and then 'encourage' you to upgrade if you get anywhere near it. I've no experience with dreamhost but is this a concern for you? Do you have any plans in place to deal with this possibility?

<comment><AUTHOR> Good thoughts.

Yes, that happens often with shared hosts.

However, the screenshots I'm hosting don't really get much traffic so it's fine at the moment, unless of course something gets slashdotted then it's a different story :)

Since the screenshot hosting provided is complementary, I don't think it's possible to provide a SLA similar to that of paid hosting in the long run.

Unless of course if customers start telling me that they'd want reliable image hosting, then I'd offer to host their screenshots on a more reliable host (which also means higher costs) like Amazon S3.

An uptime monitoring tool like pingdom can help to alert you if the site's down and so far my dreamhost account happens to be hosted on a pretty reliable server (YMMV on different servers)

I recently launched another project called Storyteller:

<http://storyteller.freshlog.com>

that I've gotten pretty good feedback from fellow HN readers:

<http://news.ycombinator.com/item?id=1347513>

The nature of multiple screenshot hosting is slightly different for Storyteller, since I'm targeting folks who want to create multiple screenshot guides easily for online faqs, guides, documentation (another pain point of mine, Freshlog is more for one off communication) that requires more reliable hosting.

Hence the images are hosted on S3 and I intend to bill monthly for that.

Hope that helps =)</comment></comment></comment></comment>


Show HN: RealtimeApp – Deploy a realtime app using serverless components - <AUTHOR> https://github.com/serverless-components/RealtimeApp <comment><USER2> Can we stop using YAML for configuration and instead use a real programming language with possibly a type interface and a compiler? So much time wasted looking up possible configurations and worse, learning that some configuration will conflict with another.

<comment><USER3> The purpose of CloudFormstion is not to tell AWS _how_ to do something it's to tell it the end state. How do you propose using a programming language where you can just change a resource and let the system figure out current state -> desired state and decide what needs to be created, updated, deleted, replaced?

But there are CloudFormation Linters.

[https://marketplace.visualstudio.com/itemdetails?itemName=kd...](https://marketplace.visualstudio.com/itemdetails?itemName=kddejong.vscode- cfn-lint)

And there is also the CF editor for Visual Studio.

[https://docs.aws.amazon.com/toolkit-for-visual- studio/latest...](https://docs.aws.amazon.com/toolkit-for-visual- studio/latest/user-guide/tkv-cfn-editor.html)

<comment><USER4> CloudFormation YAML being terrible is well known, to the point that AWS did precisely what that person suggested.

[https://github.com/awslabs/aws-cdk](https://github.com/awslabs/aws-cdk)

They are in the process of releasing a kit to define your infrastructure programmatically, and let them deal with the mess of CloudFormation as a compiled IR they send to their backend when you deploy.

<comment><USER3> That's not what CDK does:

You're still defining your resources declaratively - just with type checking - at least if you're using a statically typed language. If not, you're still just getting runtime errors when you run your program. It might catch some things before you run your template - but so will a linter.

Neither will catch issues like using a subnet that doesn't exist or using an AMI that doesn't exist.

<comment><USER4> > Neither will catch issues like using a subnet that doesn't exist [...]

The CDK does: you're either explicitly bypassing the safety checks, are explicitly importing a value (which necessarily is validated at runtime), or have to provide a subnet definition to instantiate the relevant object.

You then use these programming language constructs to implement higher level ideas like applications, fully in a programming language.

</comment></comment></comment></comment></comment><comment><AUTHOR> Here is a real-world example built using this project. It's a full Chat Application:

[https://github.com/serverless- components/RealtimeApp/tree/ma...](https://github.com/serverless- components/RealtimeApp/tree/master/example)

You can deploy this example. It contains a Create React App front-end and it uses DynamoDB on the back-end to keep track of who is connected to the Chat Application.

</comment><comment><USER5> Amazing. I am so happy to see serverless getting more capabilities and still remaining so clean and simple. Any plans to do anything around mobile push notifications?

<comment><AUTHOR> Yes, we're looking at providing a great solution for this.

In the interim, check out this Component (which is used by this project) which provides a simple webockets backend and can be used for that use-case - [https://github.com/serverless- components/Socket](https://github.com/serverless-components/Socket)

</comment></comment><comment><USER6> Two points on homepage design:

\- Why does it take ~4 seconds to load (blank) the page? Is it a PWA with no pre-loading / static initializers?

\- The scroll-jacking in the 1-2-3 section is broken on Safari

<comment><USER7> Agreed on both points, it shouldn't take 4 seconds to load a landing page that's only displaying information. I'm also experiencing the same scroll- jacking problems with Chrome.

Kinda disappointing because the Serverless project is very useful, and while the engineering behind the framework is great, the site has way too much going on for how simple it should be.

</comment></comment><comment><USER8> Having seen a lot of these types of services there is always a question about scale. In other words, these are great for quick prototyping, but at a certain level you have to move off a service like this onto a more robust infrastructure.

That being said, how hard is it to move the data off this platform and migrate it to another once you've reached scale?

<comment><USER9> What exactly is the "scale" problem here?

<comment><USER8> Since this is a general purpose platform with not much in the way of functionality. Meaning, you're not going to build the next Flappy Bird on this platform.

My question is what is the ceiling? At what point do you need to move off the platform and how easy is the migration?

I find people are pretty gun shy to park their data into a platform that doesn't make it easy to migrate off (Parse comes to mind).

<comment><AUTHOR> For clarity, the platform here is Amazon Web Services. We're just providing tooling to help you build and manage serverless architectures on AWS easily.

</comment></comment></comment></comment><comment><USER10> I think its brave to have real time and serverless in the same sentence when it can take minutes to "warmup"

<comment><AUTHOR> "Minutes" is a false statment for many runtimes and use-cases on AWS Lambda, including this one.

I've included some performance info in a comment below.

</comment></comment><comment><USER11> This is great! Is it possible to setup only the backend and have an iOS app as the frontend?

<comment><AUTHOR> Absolutely. This project is built on Serverless Components, which are composable architectural pieces based on serverless cloud infrastructure.

One of the child Components powering this project is the Socket Component, which allows anyone to provision a serverless websockets backend simply. You can use it here: [https://github.com/serverless- components/Socket](https://github.com/serverless-components/Socket)

</comment></comment><comment><USER12> I don't see anything about deadlines here. What kind of "realtime" is this?

<comment><USER13> It's real-time web, i.e. WebSocket, not to be confused with real-time computing.

</comment></comment><comment><USER14> Huh, interesting. Looks pretty similar to some of Fanout's stuff. [https://github.com/fanout/flychat](https://github.com/fanout/flychat)

</comment><comment><USER15> Does this method run into the typical lambda cold start problem? If not, how does it get mitigated without say, a regular cron job polling the endpoint?

<comment><AUTHOR> In a websockets implementation w/ AWS Lambdas and AWS API Gateway maintaining connection state, your AWS Lambdas are invoked whenever someone 1) connects 2) disconnects 3) sends a message.

This project's pattern uses a single AWS Lambda function for all of those events, for the sake of simplicity as well as performance because by receiving more events, the function is kept warmer than average.

Further, when the user loads a page, if you establish the connection at that time, you warm up the function in the background by sending the connection event.

Here is full Chat Application example you can deploy to test performance: [https://github.com/serverless- components/RealtimeApp/tree/ma...](https://github.com/serverless- components/RealtimeApp/tree/master/example)

When deployed to us-east-1 and using it in San Francisco, when the Chat App loads, it establishes the websockets connection immediately via React's componentWillMount(), which will warm the AWS Lambda Function. By the time I send the first chat message, the function is already warm, and it takes ~100ms on average to send and receive messages.

</comment></comment><comment><USER16> what about costs? How many requests will occur in the lambda side with sockets? It's an interesting concept.

<comment><AUTHOR> Good question. As always, it depends on the use-case. But to be helpful, we've added the relevant pricing pages here: [https://github.com/serverless- components/RealtimeApp/blob/ma...](https://github.com/serverless- components/RealtimeApp/blob/master/README.md#6-pricing)

<comment><USER16> Now I'm going crazy over the sockets after looking at the pricing!!! :)

</comment></comment></comment><comment><USER17> How can you test this or other serverless apps? Is it possible to run a local env that replicates AWS?

<comment><AUTHOR> We've been building serverless application dev tools for ~4 years now. In the process, we've seen incredible efforts to emulate the cloud locally. The result is usually the same: it requires tons of effort, the work is often brittle, and it still is not identical to how your app will perform in the real cloud environment (e.g. you deploy and immediately run into an API limit error). Further, the reason developers mostly want local emulation is because deploying to the cloud is simpler too darn slow.

Given this experience, our hypothesis is if we can greatly increase the speed of deployment, developers will be less interested in local emulation.

With Serverless Components, we're now achieving incredible results. First deployment always takes a bit longer due to initial creation of resources, some of which are global (e.g. AWS IAM), but all Serverless Components are designed to deploy as fast as possible and we're aiming for ~5s max in deployment time as our key metric. We'll go into detail later about how we've been able to optimize this.

<comment><USER18> I am a huge admirer as a "liberal arts grad" who grubs around technology like a blind truffle pig. Great use cases to learn from.

<comment><AUTHOR> Backgrounds don't matter. Software development should be accessible to everyone. Serverless tech will greatly help enable this.</comment></comment></comment></comment>


The death of RSS in a single graph - <AUTHOR> http://andrewchen.co/2013/04/29/the-death-of-rss-in-a-single-graph

<comment><USER2> It's one of those wishful-thinking things, I think. Despite a pool of people who actually use feeds and _prefer_ to use feeds over getting their mailboxes spammed, using your custom app to follow your site, etc., some people and companies just want RSS to die.</comment>


Ask HN: How would you change the tax system in the US? - <AUTHOR> I find our tax system to be a convoluted mess. What would you to improve it?
From my experience it looks like a system loaded with complexities, and loop-holes that only wealthy can take advantage of. The tax money, goes into a black box, that seems to function like a furnace.
I have friends that work in government, who acknowledge the bureaucratic mess that just wastes money.
I think we should all pay some predefined portion, but have the ability to change where we want our tax money allocated each quarter. Education, defense, infrastructure, health, etc. Everyone is happy, no one is skirting around their fair share, but each person gets to decide where their money goes. Granted, this might cause undershoot and overshoot in times of war, emergencies etc, but we could think of some clever way to mitigate that. <comment><USER2> First thing to understand is that taxes for revenue is an obsolete concept and has been for a very long time.

[http://home.hiwaay.net/~becraft/RUMLTAXES.html](http://home.hiwaay.net/~becraft/RUMLTAXES.html)

Once you have that then the general concept is that you tax bads not goods

[http://neweconomicperspectives.org/2014/06/tax-bads- goods.ht...](http://neweconomicperspectives.org/2014/06/tax-bads-goods.html)</comment>


De-anonymizing Users of French Political Forums [pdf] - <AUTHOR> http://archive.hack.lu/2013/dbongard_hacklu_2013.pdf <comment><USER3> The government could just as well pinpoint the hosting provider, and pull some strings to take the site offline, then read through the captured database. When the stakes are nation-state level, quite a large amount of very disturbing things start to become practical.

Shameless self plug: They should be using Aether. ( [http://www.getaether.net](http://www.getaether.net) ) It's a distributed network that creates forum–like, anonymous and encrypted public spaces— something I created and launched a few days ago. It's an app I created for this express purpose. I don't sympathise (at all) with their views, but no one gets to choose who gets free speech and who doesn't.

<comment><USER4> This sounds like an interesting project, and you should submit it as a link, although I'd expect various concerns about security to be thrown around.

<comment><USER3> I did, about three times. Nobody looks at 'new', apparently :/

</comment></comment></comment><comment><USER5> Very smart, I like it.

Gravatar is obviously wrong in its defense of the md5 choice. The md5 of an email is way more significant as we know in advance the structure, and for 80% of the population, we have a strong guess of the domain, the format. Rainbow tables can be specialized for one domain (*@gmail.com) via the reduce phases or for the "first_name dot last_name" structure... & so on.

<comment><USER6> There's also massive wordlists in the form of scraped and compromised emails to look through.

</comment></comment><comment><USER7> A little context here. The FDeSouche blog (a pun on "Français de souche" which could be translated as "stock French" or "purebred French", really meaning "White French") is an extreme-right blog whose commenters are pretty tame compared to what you could read on, say, Pam Geller's site. The commenters have internalized the French Hate Speech laws and mostly use innuendos.

The "mariage pour tous" (="marriage for all" i.e. same-sex marriage) was opposed by a semi grassroot movement called "la manif pour tous" ("the protest for all") made mostly of our religious right. The protests were huge, and some people have compared it to the Tea Party (minus the guns).

<comment><USER8> > The protests were huge, and some people have compared it to the Tea Party > (minus the guns).

And either better dressed or significantly less dressed (many, both inside and outside the country, wondered at the existence of such fabulous anti-LGBT protesters)

<comment><USER7> The lack of self-awareness was hilarious: [http://americablog.com/2013/07/frances-gayest-homophobes- str...](http://americablog.com/2013/07/frances-gayest-homophobes-strike- again.html)

</comment></comment></comment><comment><USER9> I published an identical attack in 2010:

De-Anonymizing Web Communities with Gravatar

[https://web.archive.org/web/20111219233019/http://rgov.org/2...](https://web.archive.org/web/20111219233019/http://rgov.org/2010/11/27/gravatar/)

</comment><comment><USER10> I'm surprised Gravatar claims the hash is about privacy in the first place. I thought it was about generating a short, standardized URL.

If sites wanted to protect their user's anonymity, they'd cache the gravatars with different file names on their servers. Also, as a user I would never sign up for a site with my "real" address when I'm not comfortable with it being known eventually, Gravatar or not.

</comment><comment><USER11> I was ready to dismiss this as "de-pseduonomizing" people, because in order for Gravatar to work (suitably well), they submitted their actual email address to the website host.

Intentionally "anonymous" individuals don't use real email addresses.

But the slides turned out to be pretty interesting when it gets to the email cracking part.

<comment><USER12> > Intentionally "anonymous" individuals don't use real email addresses.

([http://ritter.vg/blog-deanonymizing_amm.html](http://ritter.vg/blog- deanonymizing_amm.html))

Here's an analysis of de-anonymizing posts to alt.anonymous.messages - <USER2> people want to stay anonymous. They make some trivial mistakes.

> _Then I go into a large analysis of the types of PGP-encrypted messages > there are. Messages encrypted to public keys, to passwords and passphrases, > and PGP messages not encrypted at all!_

</comment></comment><comment><USER13> I've often thought Gravatars were less-noticed privacy violations. Nice to see that confirmed here. Of course, if the websites don't have SSL-always, then governments can listen between your ISP and the web host to get your cookie, and from there, get your email address or track your activity. This, obviously, is more open since anyone can view a gravatar, or even previously generated ones via archive.org.

<comment><USER14> Also noteworthy is that it's getting increasingly harder to even have pseudonyms -- and not be outed.

About a week ago, I really wanted to get in touch with a HN user (who did not have any contact information in his profile), so I set out to do a little detective work... and after about 2 hours I basically got his e-mail address. Innocently and guilelessly I wrote him a message, and I found him to be just bewildered that I found out his identity... I felt very sorry of course for having scared him like that. This was a big moment for me. Because I also prefer to be anonymous on comment forums, and I'm generally pretty careful to not give clues as to my identity, but I still can't help but wonder if it's all gonna come back to me and maybe hurt my career in some manner.

<comment><USER15> Things I noticed going through your comment history:

Your race.

What car you drive.

Hints at your political ideology.

Where you grew up/that you're not originally from the United States/wherever you live now.

You've undergone an IQ test in a professional environment.

You've probably donated to Lavabit's legal fund.

What OS you use, when you last bought a new computer.

Since you talk about a computer engineering class with 250+ people, you've probably been to college. (Scratch that, you've definitely been to college.)

You have a first church of atheism near you, and are probably a member.

\----

That seems like enough to uniquely ID you.

<comment><USER14> Oh boy.

Kudos to you for gathering a lot of good stuff, an A for the effort absolutely. I should point out that you're off on /some/ things (or perhaps more accurately: incomplete). For beginners, the OS I use -- you're thinking Win8, but that's only on the laptop I recently bought. I've actually been using Ubuntu for a couple of years on the main desktop. My race, car, political ideology, place of birth, current residence, current religion, religion of household I was born to, education you've got right. For my own good I will stop confirming other bits of information, I think (hope) that still leaves enough ambiguity to grant me still some freedom of anonymity (or maybe I'll have to abandon this account after another week or so, I guess I'll think about it). Oh, while I have the perfect chance to preach /why/ anonymity is important: I have family problems, because of religious differences. If my family found out my religious beliefs in full they'd be mad at me, that is _one_ of the reasons I choose to be anonymous (in addition to a good many other, relating to professional work life and other things).

One question: Why is my talking about being in a CE class of 250+ people not conclusive enough information that I've been to college? And, what was that /extra/ thing that made you confidently say 'Scratch that, you've definitely been to college'?

<comment><USER13> That'll teach me to make assumptions. I assumed Mac since you wrote somewhere that you didn't have the Java web plugin added 1 and 2 and got 4.

As to abandoning your account, I wouldn't worry about it. You're far more likely to get a relative's interest some other way -- perhaps an event notification on a smartphone screen, or the auto-complete bar in a browser. The simplest approach is most likely though: dinner table conversation on some evening in the future. :)

<comment><USER14> > That'll teach me to make assumptions. I assumed Mac since you wrote > somewhere that you didn't have the Java web plugin added 1 and 2 and got 4.

I don't have Java web plugin installed even on my Windows machines (indeed, when I provided the link to the rubik's cube page and complained about the java applet, I was on a Windows computer). A lot of people don't have Java webplugins installed these days... seriously, try living life without it, it's great (well, if you can -- I think a lot of people use it for work/school reasons).

It's certainly not as needed as it was some handful of years ago for smooth web browsing. So if you can go without the hassles of having to update it god- knows-how many times, having different versions installed and being a mess on the computer, having yet another thing running in the background, etc... it's great. I really, really don't miss it.

</comment></comment></comment></comment></comment></comment><comment><USER16> Interesting.

What this shows to me is that md5 needs to die. Perhaps it was a good in times past, but now it is too easy to crack with commodity computer hardware. The rig shown in the article costs <$2000 USD when priced out on newegg.com. Top- shelf gaming GPUs are only going to get faster.

I was surprised to read that the right to freedom of speech is not recognized in France. Anyone here from France willing to affirm or refute article's claim in that regard?

<comment><USER17> > I was surprised to read that the right to freedom of speech is not > recognized in France.

It is. The french constitution state:

> La libre communication des pensées et des opinions est un des droits les > plus précieux de l'homme ; tout citoyen peut donc parler, écrire, imprimer > librement, sauf à répondre de l'abus de cette liberté dans les cas > déterminés par la loi.

Which mean that you have free speech, BUT, you can be prosecuted if you abuse it as defined by the law. Example of common abuses: defamation (the most common), incitement to ethnic or racial hatred, privacy violation, historical revisionism, intellectual property infringement, etc.

But except "incitement to ethnic or racial hatred" and "historical revisionism" it's mostly the same in the US.

Also, it's not all about the law, during the same sex marriage debates, a lot of homosexual people got beaten by far right / nazi-like groups.

<comment><USER18> > a lot of homosexual people got beaten by far right / nazi-like groups.

This IS a lie. Do you have any sources?

There have been one attack on a gay couple, hugely used by the government and their supporting medias. Newspapers have implies (no facts) that the culprits where members of the strike against same sex marriage or far right activists. There was then a huge huge buzz to shame the strikers. And finally, 4 months later, the police arrested 4 youths: 3 in a "cité" (public housing, "ghetto") and one was already in jail, all of them well known of the police services for violence facts. [http://www.leparisien.fr/paris-75/agression-homophobe-a- pari...](http://www.leparisien.fr/paris-75/agression-homophobe-a-paris-les- auteurs-presumes-arretes-20-09-2013-3153685.php)

Some people in the comments do say that the police delayed the arrest so that the government could shame the protesters against same sex marriage.

One more thing, the man beaten reacts to the arrest on a far left web site. [https://bellaciao.org/fr/spip.php?article137205](https://bellaciao.org/fr/spip.php?article137205) And he is in a complete deny, not being able to recognize that those who beat him have nothing in common with those that protested against same sex marriage.

<comment><USER17> > This IS a lie. Do you have any sources?

What's the "lie", the aggressions or the fact that it come from far right groups ?

If the former:

[http://www.france24.com/fr/20130421-climat-homophobie- agress...](http://www.france24.com/fr/20130421-climat-homophobie-agression- insecurite-mariage-pour-tous-extremisme)

> 1200 aggressions on homosexual people in the first 3 months of 2013 compared > to 1 556 on the whole 2011.

Almost 4 times more than usual, is it enough for you ?

About the authors of the aggressions:

[http://www.lemonde.fr/societe/article/2013/09/04/bar-gay- sac...](http://www.lemonde.fr/societe/article/2013/09/04/bar-gay-saccage-a- lille-un-an-de-prison-requis_3471318_3224.html)

Are skinheads far-right enough for you ?

But off course, skinheads are probably not behind ALL these aggressions, most of them are probably "standard" homophobics.

<comment><USER19> Your first source speaks of "verbal aggression", you cannot take that as a proof for 1200 physical aggressions.

"L'organisme (SOS homophobie) a reçu trois fois plus d'appels et de mails entre le 1er janvier et la fin mars. (1 200 personnes sur trois mois, contre 1 556 sur l'ensemble de l'année 2011)." "Ces chiffres sont un indicateur important car ils permettent de mesurer la libération de la parole homophobe."

</comment></comment></comment></comment></comment><comment><USER20> Great article, and they make a good point that it is the right-wing whose political freedoms are most threatened by attacks against anonymity.

</comment><comment><USER21> Interesting preservation. I also couldn't help but notice that the slides themselves were beautiful. I wonder if they were generated using a recent version of, e.g., Microsoft Office (the fonts look like those used in Modern UI) or if there's a beamer theme that looks like that. If there is one, do tell.

<comment><USER21> "Interesting preservation" should read "interesting presentation".</comment></comment>


The making of Acorde | I love typography, the typography and fonts blog - <AUTHOR> http://ilovetypography.com/2010/10/10/the-making-of-acorde-2/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ILoveTypography+%28i+love+typography%29&utm_content=Google+Reader <comment><USER2> I love that font. Unfortunately, he wants it to be a corporate identity and has priced it as such. I'm not faulting him for it, but it makes me sad that I'll never use it.

<comment><AUTHOR> I hope that TypeKit will lower barriers to greater font adoption. Pricing for an individual is out of reach.</comment></comment>


The Shape of Mobile Development To Come - <AUTHOR> http://clayallsopp.com/posts/the-shape-of-mobile-development-to-come/

<comment><USER2> I disagree with the conclusion, but whole-heartedly agree with this quote:

 _I think there's far more low-hanging fruit in making native development easier than in making web/hybrid apps feel "right". I've seen two just good hybrid implementations (Quora and Pocket), and yet I still run into defects using both._

 _I think the "write-once-run-everywhere" benefit of web views is disingenuous; the phrase should really go "write-once-optimize-everywhere"._

</comment><comment><USER3> The problem with write once run anywhere is that it's not desirable to device manufacturers apart from those on the bottom rungs who don't have a big enough developer community to carry the devices on their own. If MS and Apple threw JVMs onto their devices then we would be 90% of the way there already.

If any write-once-run-anywhere solution becomes to popular then the likes of MS or Apple will try their best to kill it. See: Embrace, extend , extinguish by MS on Java and to an extent the web itself and Apple's ban on language runtimes/interpreters on the app store.

If every device allows for the same functionality as other devices due to identical software then manufacturers will only be able to compete on price.

<comment><USER4> _> If MS and Apple threw JVMs onto their devices then we would be 90% of the way there already._

As a one-time proponent of write-once-run-anywhere solutions, I would have to say this would probably result in a reduction of UX quality.

<comment><USER5> I think the MonoTouch guys are handling this in the only sensible way. Non-UI code is shared across platforms but UI code is written per-platform using the native toolkit. I think this is about as close as you're going to get without compromising user experience.

<comment><USER4> That is indeed the only sensible way.

</comment></comment></comment></comment><comment><USER6> _Imagine writing code like this and having it build to native apps on both platforms:_

I think Xamarin are going to be a really interesting company to watch for this stuff. Right now they have MonoTouch and MonoDroid as entirely separate products, allowing you to make apps using C#. But you can already reference libraries across both, and just do the UI plumbing separately, and if they're smart they will work very hard on what the author is describing.

<comment><USER5> I agree. Xamarin is closer than anybody else to a viable cross platform solution. They're in just the right place now to start eliminating some of the worst pain points in mobile.

<comment><USER6> Appcelerator ought to be as well (with the added bonus of using JS, far better known than C#), but their platform isn't on the same level. Yet?

<comment><USER5> Haven't tried it myself but the reviews on the web seem to be almost universally bad whereas most Monotouch users seem to be pretty happy. I think for larger code bases C# has some important advantages over JS.

<comment><USER6> Absolutely. I used Appcelerator a long time ago and it was awful- they've actually made a ton of progress since then, but they don't make fully native apps- there's a JS engine in the middle that parses the code. So it's always going to be a little slower than native- but probably acceptable for a ton of apps.

</comment></comment></comment></comment></comment><comment><USER7> I agree with your true write-once-run-everywhere dream, but I disagree with the conclusion that we build an abstraction over existing frameworks. This is essentially what wxWidgets or QT is for desktop.

While these things were great, in the end what most of us wanted was actually HTML/CSS/JS and the freedom to create beautiful things that it gives us. I would argue that default looking iOS apps are already stale and we want more control (which CSS is great at giving). I am banking my business on the same thing happening long term in mobile.

I agree that webview apps can't compete with native in certain situations, but devices are becoming more powerful every day and web technologies have already proven themselves with a large developer audience.

Also, I think there _is_ low-hanging fruit just in the mobile web space: making more websites work well on mobile devices.

</comment><comment><USER8> Until mobile phones become a lot faster and carry more storage and bandwidth becomes a lot cheaper and more ubiquitous, I believe the most successful approaches simply adapts the underlying framework for use with other languages (and abstraction levels), while simultaneously minimizing the excess baggage/payload required to get a small application up and running. Clojure for Android for instance suffers from this problem (1.7 MB payload), while Scala, Mirah (Ruby-like) and Kawa (Lisp/Scheme) seems to do a decent job on providing thinner wrappers on the host platform. I see the same thing on the web as well, with a multitude of languages targeting javascript as the platform. I did a small writeup on "Android development without Java" on <http://kjeldahl.net/d7/node/32> if you want more details than I wrote here.

<comment><USER9> Are there any languages that directly target Dalvik/dex without compiling through Java bytecode?

</comment></comment><comment><USER10> The idea that we'll be able to write apps in an interpereted language is probably a long ways off, but the second idea about more portable object models is spot on.

I would argue that such a model would need to include the ability to easily manage per record image assets. (think about how often we have images in a table view cell)

To that end, I've created an iOS library to deal with downloading these tables and images in a reasonable way. If you're interested: <https://github.com/Smartovation/STRemoteResources>

</comment><comment><USER11> The article's mention of beautifully designed mobile apps sparked a few thoughts for me. One property of mobile devices and especially smaller devices like phones is people use them frequently throughout the day in short bursts. Small wait times associated with bouncing, translating animations etc are magnified and the UIs start to feel laggy. Yesterday I purchased my first Android device and the snappy UI has been quite a nice change. This is a relatively low-end Android device. And I've been using an iPhone 4S for the past few months.

So I think the design of mobile apps will be simplified going forward. I could see moving towards simpler UIs like Craigslist. This is a major win in a variety of ways: faster UIs implies better user-experience, less computationally intensive UIs implies less drain on limited resources, and simpler UIs implies less design and development time. I love the idea of never stressing out about rounded corners, little shadow and shine marks etc. They're nice to have initially but just get old as one uses the same device/OS/apps for months on end.

<comment><USER12> I disagree about the prediction for simplified Craigslist-style UIs. I don't think it will ever happen on Mobile.

Animations play a very important role in communicating to the user how to interact with the interface. Animations also give the illusion of a responsive app.

The best apps are likely built by great designers who know how to use animations effectively to communicate with the user.

Everyone else will simply try to copy the best apps along with their animations... thus, it's hard to see animations going away any time soon.

On another note, I find it surprising that yours was the only comment even mentioning design. For me, that was the most important part of the article with by far the biggest implications.

The author predicts that designers will be able to take on a portion of the client-side engineering role in the near future. If this happens, it will completely change how apps are made. It will change the workflow between designers and engineers.

The traditional model of mocking up a PSD and passing it off to an engineer will no longer be viable. Designers will just build clients and interact with APIs. This means that more and more designers will probably have to learn programming, which is a good thing for the future of mobile apps.

<comment><USER11> I think you're right about animation not going away. Especially animations that help the user understand the app. However I think there's still some animations and especially some shadow, gradients and other small design touches that are overkill and can be removed w/o negatively impacting the user-experience.

</comment></comment></comment><comment><USER13> QuickDialog (<http://escoz.com/open-source/quickdialog>).

Showing a dialog:

        NSDictionary *dataDict = @{'title':'example', 'other':'other text'};
        QRootElement *root = [[QRootElement alloc] initWithJSONFile:@"file" andData:dataDict];
        QuickDialogController *myDialogController = [QuickDialogController controllerForRoot:root];
        [self presentModalViewController:navigation animated:YES];

example json form definition file to match:

        {
            "grouped": true,
            "title": "Example QuickDialog Form",
            "controllerName": "QuickDialogController",
            "sections": [
            {
                "elements": [
                    {
                        "type": "QEntryElement",
                        "title": "Title",
                        "placeholder": "item title",
                        "bind": "textValue:title"  },
                    {   "type": "QMultilineElement",
                        "title": "Other info",
                        "bind": "textValue:other" }
                    ]
                }
            ]
        }

data from dataDict is merged into the fields defined in the json definition file, using the bindings specified in the 'bind' property.

It's really awesome, and makes all kinds of dynamic views possible. I was skeptical at first (as I am about most cocoa libraries) but I'm pretty sold on it since I gave it a fair shot.

<comment><AUTHOR> Ha, I actually wrote something really similar (without knowing about QD) for RubyMotion: <https://github.com/clayallsopp/formotion>

Ruby is better suited to this IMO (no clunky file loading), but I agree they both prove dynamic native views need more exploration

<comment><USER13> That looks remarkably similar. Were you also influenced by MonoTouch.Dialog, as was QuickDialog's developer?

<comment><AUTHOR> Nope, developed it totally independently according to my needs.

</comment></comment></comment></comment><comment><USER14> I haven't seen any mention of Phone Gap (<http://phonegap.com/>) or Titanium (<http://www.appcelerator.com/>). Whats the consensus of how close either of these projects get us to a "one code base" solution to multiple platforms?

<comment><USER15> Neither does a very good job if a good UX is a concern. I haven't encountered any PhoneGap apps that feel native.

</comment></comment><comment><USER16> Liked your idea and will follow your developments on GitHub with an eye towards how you're going to integrate a CoreData client-side library. Besides the front-end issues you highlight, a key challenge will be synchronization: unless you don't plan to allow your users to work offline?

I agree with your hope that Rails could somehow be extended to cover this mobile use case, wish I had the chops to create a Devise+MobileAPI generator with a iOS native MongoDB-sychro engine. (Can Rails generators synthesize ObjectiveC source code?)

By the way, every time I think about doing something about this I keep an eye on the folks at Parse.com: seems like every week they're solving more and more of the backend part of this problem. And they're working on front-end libraries as well...

</comment><comment><USER17> He lost me with his "Objective-C ...has evolved over the past two years to become an "easier" language ... "

I would argue that it has less to do with the ease of the language and instead the market effects of iOS.

<comment><AUTHOR> I think you might've misinterpreted what I meant? I didn't mean to imply anything about the growth of iOS or that ObjC being just perceived as an easier language because of the growth. I trying to say that Objective-C was really criticized for its verbosity and forcing manual memory management, and Apple has made changes in direct response to those with ARC and more concise literals, which IMO makes it "easier" (espc. wrt ARC)

<comment><USER18> Also @property — first you had to declare variables and use @synthesize, then you could omit the declaration part, and no you can omit the declaration and @synthesize, @property alone is enough.

</comment></comment></comment><comment><USER19> I agree with most of the point, these advance certainly benefits for the product quality. But the conclusion and the hope of "Write once run everywhere" is probably not a good bet.

It is not about problem of programming language or tools, but Java already told us the "lowest common denominator" issue you have to face when implementing abstract over different platform. When people working on abstraction, it mean they will spend less time on real devices and fine details, and this is exactly what makes or breaks user experience.

</comment><comment><USER20> I did some research into the currently-available toolkits that let you write one code base to create mobile apps for iOS, Android, and (maybe) other mobile operating systems. I was astounded by how many options are currently available: more than 50! I made a website to summarize my findings; see <http://www.mobilechameleon.com/>

</comment><comment><USER21> The notion that business logic doesn't belong in the client is wrong because you need it when working offline. And sharing UI code is a pipe dream if you want native look and feel. (If you have a custom UI anyway like in a game, it's more feasible.) A more realistic goal is port the business logic, networking code, storage, and so on, and rewrite the UI code for each platform.

</comment><comment><USER15> The author mentions Quora and Pocket as the only examples of hybrid apps he knows of. What about the LinkedIn app? I always thought that was a good example of a well-done hybrid app.

</comment><comment><USER22> <http://kivy.org> does Ali of what you talk about using python

Edit:fix link

</comment><comment><USER23> I hope this is titled in reference to the album "the shape of punk to come" :-)

</comment><comment><USER24> One thing all those "let's build our app on top of 1000 layers so we can use our $favourite language"-people tend to forget is that mobile software runs on mobile devices. Which have one remarkable property: they are energy constrained. So you better write some fast, native code or your users will have trouble keeping their devices alive for one day.

<comment><USER25> I remember well the assembly language crowd making the same argument back in the eighties. Processors got faster and machines shipped with more RAM. The tipping point was reached and all of a sudden no one was writing entire programs that way.

<comment><USER26> While you wait for the tipping point, I'll be over here shipping.

<comment><USER27> Shipping slow, bloated software using a framework that is a second class citizen on any platform you decide to compile to.

<comment><USER6> That doesn't matter. What matters is whether your users care or not. We're all app perfections here, as well we should be, but plenty of people are happy with "good enough".</comment></comment></comment></comment></comment>


A Federal Judge Just Issued a Stay Against Donald Trump's "Muslim Ban" - <AUTHOR> http://m.motherjones.com/politics/2017/01/muslim-ban-federal-court <comment><USER2> "The stay is temporary and a court will have to decide whether to make it permanent at a later date—and it only affects people who have already arrived in the United States—but for now, people will not be deported because of Trump's executive order"

Only covers part of the ban; those who have not yet arrived from those countries will not be allowed in.</comment>


Donald Knuth: Calculus via O notation (1998) - <AUTHOR> http://micromath.wordpress.com/2008/04/14/donald-knuth-calculus-via-o-notation/

<comment><USER2> A love the "A" notation, and the definition of "O" in terms of "A". But I'm sorry to say that I don't follow the definition of "o" (little-Oh). Can anyone help me here?</comment>