Putting out fires at 37signals: The on-call programmer - <AUTHOR> http://37signals.com/svn/posts/3162-the-on-call-programmer? <comment><USER2> (I work at 37signals, though not as a sysadmin or developer)

Just to clarify - we do have a 24/7 on-call system administrator who is the first line of defense for when things go wrong. They're the ones who get phone calls when things do go 'bump' in the night, and they're fantastic in every way.

Our "on call" developers fix customer problems; rarely do these arise suddenly in the middle of the night, but our software has bugs (like most pieces of software) that impact customers immediately, and we've found it helpful to have a couple of developers at a time who focus on fixing those during business hours rather than working on a longer term project. Most companies probably don't call this "on call", but rather something like (as a commenter on the original post pointed out) "second level support". This is what Nick was describing in his post.

Of course, fixing root causes is the best way to solve bugs, and we do a lot of this too. We've taken a significant dent (>= 30% reduction) out of our "on call" developer load over the last 6-12 months by going after these root cause issues.

Hope that clarifies the situation some.

</comment><comment><USER3> Is this seriously a post highlighting the heroics of being on-call?!

Wake up -- being on call sucks.

Being an on call programmer is even worse. All developers should have to work support sometime in their life to realize the pain of supporting software vs writing it. Only then will you realize why doing it "right" the first time really matters.

I kind of agree with the first comment on that post from Alice Young. Even though DHH just calls Alice out as trolling I know from experience that if you have on-call programmers it is a sign that your product is reaching a new level of complexity. Whether the complexity is coming from internal features or outside integrations it is probably time to take a second look at how you are handling your development processes.

<comment><USER4> I believe that programmers shouldn't have to work support "sometime in their life", they should be working it at their current position. Sometimes it is all too easy to throw the problems over the fence to a tech ops (fancy name for sysadmins?) or the even worse -- the dreaded app support team. Having to live with the decisions your code makes can hopefully only make it better.

<comment><USER5> In theory that sounds great. What I've seen and heard from practice (surprisingly) isn't.

I think a better idea is to have excellent communication between the two groups, whether on channels or in the same room. Both specialize, but both have the ready support of the other. It's unnecessary to go further.

That's what we do at my current gig. It has worked out well.

</comment></comment></comment><comment><USER6> "I spend one week every ten or so, on call. Then I spend the next nine weeks writing code to make my next on call shift better." - Tom Limoncelli

Sure, people may write off the fact that Tom found his niche in systems administration. He's currently at Google, as a "Site Reliability Engineer" which (in case you aren't familiar) is about 40% development work and 60% systems administration work. (Though his recent project, Ganeti, seems far more development work.)

I find it "amusing" how so many people are all "DevOps! DevOps! DevOps!" _until_ it causes some kind of inconvenience for the developer. (Pesky paying clients! Why must you want what you paid for, to work!) Then it's "Make the sysadmin's do it. That's Ops job. It's not _my_ job, as a developer, to help fix the service when it breaks. I write the code... it's your job to make it work, sysadmins..." Operability is _everyone's_ responsibility. If your code fails, for whatever reason, it should fail _gracefully_. It should tell us _why_ it failed. This is the basis of operable code. Of course, even with testing or the best, possible, operable code, shit will still happen.

I think the division of labor is simple. If the failure is clearly software related (you know this because you monitor your systems/software), the on call developer is paged. If the failure is hardware or core OS/system related, the sysadmin is paged. If shit's on fire, both are paged.

Yes, we all know "Well Designed Systems and Software" shouldn't experience catastrophic failure. Guess what, it happens, no matter how well you prepare. So, you prepare for the worst case and have processes in place on how to deal with such issues. Drill your developers and sysadmins. Preparation is key.

Ultimately, _everyone_ on your team should carry the title of "Chief Make It Fucking Work Officer". If you don't get this, don't sit here and gripe about "Not being DevOps-y enough" as is so prevalent in what I read and hear these days. When the Sysadmin says, "No, you aren't pushing code today.", don't bitch. Perhaps if developers accepted responsibility for helping support the systems and software they write, the Sysadmins would be more open to working with the developers.

DevOps Motherfucker. Do You (do more than just) Speak It?

</comment><comment><USER7> I have to assume all of the other comments in this thread are from small shops that have never supported a live product.

We run a multi-hundred person team here for a live, 24/7 product, and as many as half of our developers have been scheduled as "on-call programmers," which we call our Live team. Their sole responsibility is the live, deployed product and customer-impacting issues.

They do no bug fixes outside of that. They do no feature development outside of that. There is an entire other team dedicated to those things, and like 37s, that team gets rotated through.

We also have QA dedicated to the live product, Operations dedicated to the live product, etc., etc., all separate from new feature development, because an immediate, customer-facing issue requires different prioritization than feature development.

<comment><USER8> I've supported (what I would expect to be) an equivalently large deployment. If you truly have half of a multi-hundred person development team scheduled simply to respond to emergency on-call events, you very, very likely have fundamental issues in your development standards and processes leading to those events.

That's simply a _tremendous_ percentage of your staff dedicated to putting out fires.

<comment><USER7> Well, some of them are artists and designers, too, and this isn't just a web site, it's a desktop product and an online service, and the proportion changes depending on where features are in development and what sort of load we're seeing on customer-facing issues, but, yes, there have been occasions where half of our web and infrastructure staff have been doing "live" development and support.

And that's the thing: they're not "emergency on-call" events. They're simply "customer-facing issues." With a 24/7 product and 1.7M subscribers, things come up. They're not "fires." They're "live" issues. They're _always_ there.

The 37s post is not about emergency staff, even if they're using those types of words. It's about having dedicated personnel to handle technical issues arising from a customer support ticket, so the "new feature" programmers don't have to get pulled away unless they have the only knowledge of that particular system (which doesn't happen too often here any more).

</comment></comment></comment><comment><USER8> A requirement for 24/7 on-call programmers demonstrates a systemic organizational failure in the design and implementation of robust, well- architected software.

37Signals would see significant savings in development and maintenance costs -- and increased customer satisfaction -- if they approached this staffing requirement as a band-aid, not as a final solution, and took a long, considered look at the root cause of this systemic failure.

<comment><USER9> What they're actually doing is conflating programmer and sysadmin here; the tasks they're assigning to the 'on-call programmer' are very similar to the ones I would expect as a sysadmin to get. Things like monitor the service, act as first responder, coordinate fixes; there's precious little that is actual programming there until you get into fixing it, and even there the goal is minimizing downtime, not debugging the change into working on the live system; typically "revert whatever changed" is one of the first tools for this work.

An actual need to do programming instantly and with no warning is quite a different proposition, not one that I'm aware of having ever been needed in any of the companies I've worked for.

<comment><USER10> It sounds like they have a dedicated customer support team and the on-call programmers are the second-level support. Take a look at the examples DHH gives of the work on-call programmers do-

"We spend time trying to figure out why emails weren't delivered (often because they get caught in the client's spam filter or their inbox is over capacity), or why an import of contacts from Excel is broken (because some formatting isn't right), or any of the myriad of other issues that arises from having variable input and output from an application that's been used by millions of people."

</comment></comment></comment><comment><USER11> Don't be too quick to condemn 37signals for needing on-call programmers. For many startups, the process goes like this: all devs are always on-call. It seems that 37signals at least makes the requirements of the job clear. The fact is, running a live service almost always requires some degree of live support. (Even the most robust production software will experience the occasional hiccup.)

But it does seem like they're throwing money at the band-aids. Would love to see an article addressing how to fix the root of these sorts of problems, instead of just outlining how they put out all of their fires.

<comment><USER12> Unless it's major server failure, I really don't see a need to have immediate customer support. Most issues can be solved the next day/a few hours later.

<comment><USER13> Or perhaps 37signals is of a size that losing a small % of subscriptions due to an issue is considerably larger cost than placing a couple of people on- call to deal with it immediately.

<comment><USER12> As a customer, if 37signals got back to me at the next day as opposed to 3am that night, I wouldn't see a problem with it. I seriously double they will lose any subscriptions.

Like I said, on-call should only be used for catastrophic server failures.

Most people don't need that kind of support.

</comment></comment></comment></comment><comment><USER14> I like how quite a number of peoples answers to the on-call programmer blog was "you need better tests"

here's a what if scenario:-

\- you have a third party service your systems rely on

\- at 4am on Sunday morning said 3rd party service upgrades their system, introducing a breaking change, having never bothered to notify users

\- you get a call as the on-call person saying "application X is not longer working, please resolve"

How do tests stop that scenario from happening? Tests don't magically help you invent features/work around introduced issues in 3rd party systems.

Those are typically the on-call issues we deal with (we're on a weekly rotation)

<comment><USER15> > Tests don't magically help you invent features/work around introduced issues > in 3rd party systems.

Uh, yes they do. You want a unit or system test which covers the case where an external system is down or returns something that you can't parse. Something like:

      # code to take third party thing down
      # eg. mock out lib and return nonsense (unit tests)
      # or add an /etc/hosts entry (system tests)
      assert "Sorry, but that feature is unavailable." in page.content

Now the entire app doesn't asplode, and you can wait until 9am to fix it. Follow up is to make sure that you're on whatever mailing list tells you when changes are coming.

The only case that this doesn't cover is when it's a) an essential part of your app, which b) you aren't paying for and c) they don't have a mailing list, in which case wtf? you need to find a better 3rd party library/service.

ps. Look up the "chaos monkey" - it's very enlightening :)

<comment><USER16> (I work for Netflix)

It's funny that you mention the Chaos Monkey, considering that Netflix has 24/7 on call programmers for tier 1 support.

We do however also make great efforts to make sure that we are resilient as possible to failure of 3rd party services.

<comment><USER15> I suspect you also pay for your 3rd party services, which the GP's company doesn't seem to do.

</comment></comment></comment></comment><comment><USER17> Programmers shouldn't be on-call, but they should probably listen to the sysadmins who are.

I'll never understand why it's so common to use programmers as IT/Sysadmins. Operating a working system is fundamentally different than building it. No one would expect a ship designer to be a captain. Sure there is enough overlap to make it possible, but why not have them each handle their specialty?

If you've never experienced a good IT person backing you up I encourage you to try it. Detailed reports of failures/bottlenecks/repeatable issues. Problems already localized, and identified. No getting up at 2am!

<comment><USER18> So what exactly are you proposing for a situation where the system fails for a large number of people and it's not a platform / sysadmin level issue? Assuming you're running 24/7 service with sla in place... Basically you need someone who knows your code and knows how to code.

To go with your ship analogy, no, the ship designer is like an solution architect who may never code any of it. In reality cruise ships carry whole engineering / maintenance teams on board in case of problems. I wouldn't be surprised if many of them were involved in building parts of some ship in the past.

</comment></comment><comment><USER19> I'm curious to know what compensation people receive for being on-call, either as a percentage of salary or flat rate.

(I'd submit a poll, but it appears from <http://news.ycombinator.com/newpoll> that polls are currently turned off.)

<comment><USER20> A friend of mine used to work in a dinosaur pen. He's moved up, but he is still rotated through on-call periods because of his familiarity with the particular outfit he works for.

He receives several hundred dollars over his base salary per week to be on- call; he then receives a minimum of three hours pay at the maximum penalty rate when he takes a phone call.

Given how stressful being on-call can be, I think he earns every dollar. His social life is constrained; getting a 2AM phone call and having to login or drive to the data centre to troubleshoot is hell on sleeping patterns.

The expense of calling him in also encourages the relevant shift managers to think carefully about whether they need to bump the issue up or to recheck it themselves.

If I was in the position of requiring on-call staff of any kind, I would endeavour to have a similar set of rules in place.

</comment></comment><comment><USER21> They're a geographically spread out company with employees spanning multiple timezones. They work in small teams and cycle their programmers into the support teams to get them on the front lines. The programmers in the support teams are "on-call" for issues that come up, skipping the need to send the issue over the fence and take someone off application development.

Whats the controversy? Despite the name of the position, it sounds like its just the role they assume in day to day work rather than fighting fires every couple of days.

</comment><comment><USER22> More than whether or not they "should" or shouldn't need on-call programmers, I am curious what causes the majority of errors that are encountered. Is it mistakes the programmers have made? Unpredictable interactions that are caused by the complexity of the software? Unexpected user behavior or interactions with client software? Something else a novice like me can't anticipate?

</comment><comment><USER23> "We spend little time investigating crash bugs."

Isn't "not crashing" kind of an implicit responsibility of any programmer? There are some bugs that aren't worth fixing, but even the most rare set of circumstances shouldn't be causing a crash for very long.

<comment><USER24> I think he means that there are rarely crash bugs that need fixing, therefore, little time is spent fixing them

</comment></comment><comment><USER25> Classic example of someone developing without considering support.

If I developed an app that required that much 'fire fighting', I'd replace it with something professional ASAP.

Or is it the selected technology that is the problem here?

</comment><comment><USER26> There's a big difference between having programmers on-call and actually having work/fires for the on-call programmers to solve. We only know about one of these for sure from this post.

</comment><comment><USER27> If you write such awesome well tested code you won't mind being primary on- call to support it, since it won't break and you won't get paged.

</comment><comment><USER12> Honestly, this sounds like a nightmare. It brings me back to my sysadmin days when I was getting paid $10/hour.

I would need to get paid lots of money to do this (dig into my precious free time). Probably more than 37signals is ever willing to may me.

A buddy of mine is a sysadmin and told me that at his work, only the "best" techs get this duty. The company makes it sound like an honor to get pager duty and have to deal with putting out fires at 2am.

<comment><USER28> There are ways to do ops which don't suck as much for the ops people -- for exempt/salaried, offering liberal comp time for taking on-call shifts, and even more if there are alerts, is pretty nice. And making sure all the tools for on-call people are as convenient as possible.

There surely is _some_ price where being woken up is worth it to you. If it happens once a month and you get a day off the next week, I'm pretty happy.

</comment></comment><comment><USER15> I guess that's what happens when you don't have enough tests...

</cheap shot></comment>


Ask HN: How does beatrixapp site do this animation? - <AUTHOR>

Please have a look at http://beatrixapp.com. I am unable to figure out how they are performing the fluid animation jquery animation. It does not look like they have manually made the whole animation (or have they)? Can Google Web Designer be used for something like this? <comment><USER2> They probably did it manually. It's not that hard considering it only includes scrolling, positioning elements, opacity changes and CSS class substitutions.

The reason why it looks fluid is because they use appropriate easing functions that feel more natural and snappy.

Also, apart from the scrolling, it can be done using only CSS animations. Check out my website for tons of CSS animations: [http://bbxdesign.com](http://bbxdesign.com)

<comment><AUTHOR> Thank you</comment></comment>


The Right Tool? - <AUTHOR> http://therighttool.hammerprinciple.com/ We all talk about using the right tool for the job in the context of programming languages. But which job? And what's the right tool for it?<p>This nifty little web app sets out to determine the answer to that by asking a bunch of questions and getting the user to rank the languages they know in order of how well that statement fits each. <comment><USER2> This is a great idea, and I'm going to do my humble part in pointing others in this direction. The mission statement says it all. Too often we make language choices along too narrow a focus and surveys like this will help tease apart finer grained distinctions.</comment>


Open source in higher education - why not? - <AUTHOR> http://www.imperialwicket.com/open-source-in-higher-education-why-not

<comment><USER2> "How is it that a CS major pays tens of thousands of dollars for a degree, and has little to no concept of version control, project roles, design documentation, functional specs, or a bug tracker?"

Simple: this isn't what Computer Science is about! A fundamental misconception about computer science seems to be that is _is_ software engineering. This couldn't be further from the truth. CS is about algorithms: their efficiency, their provable correctness, and their applicability to actual problems. None of that necessitates version control.

Dijkstra said, "Computer Science is no more about computers than astronomy is about telescopes." It seems to me that version control, bug trackers, and wikis are about _software_ , not Computer Science. These things are important, to be sure, but they're not Computer Science.

<comment><USER3> You make a valid point, and I probably should have centered more around CS majors seeking software development positions. I have not investigated this, but I have to assume that a large percentage of CS majors end up working in software development at some point or other; thus it seems a slight modification to the CS major could prove fruitful.

This also touches on the ever-sensitive recruiter/hiring manager issues. So many recruiters seeking a software developer have a mandatory checkbox that indicates Computer Science degree; which (as you point out), just is not an appropriate fit; but why not?

Also, Dijkstra was a bright guy, but I don't think the distinction between Computer Science and computers is at stake here. There are plenty of skilled software engineers who couldn't replace RAM if their project depended on it. However, I don't think the jump from the theory and foundation of computer science to software development techniques is a large one. Wikipedia (citing numerous sources) calls Computer Science - the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems. I think your CS distinction is the first clause - and I think it's important. Nonetheless, my point falls into the second clause, and learning the "practical techniques for their implementation" seems more economical for most individuals.</comment></comment>


Tau Prolog 0.3.0 - <AUTHOR> https://github.com/tau-prolog/tau-prolog/blob/master/RELEASE_NOTES.md <comment><USER2> This is an extremely interesting new Prolog system, with strong commitment to the ISO standard, and one of the first systems that treats strings as lists of characters, which comes in extremely handy when reasoning about text.

Congratulations on the new release, keep up the great work!

</comment><comment><AUTHOR> [http://tau-prolog.org/](http://tau-prolog.org/)</comment>


Flat UI Tutorials - <AUTHOR> http://flattrendz.com/flat-ui-tutorials/

<comment><USER2> So odd just a bunch of random tutorials with the word "flat" in it, and i didn't like to be asked to follow certain people on twitter to get the code examples and the demo

</comment><comment><USER3> The landing page won't let you backspace to leave... Not nice!</comment>


AMD's 64-Core Threadripper 3990X, only $3990 Coming February 7th - <AUTHOR> https://www.anandtech.com/show/15318/amds-64core-threadripper-3990x-3990-sd <comment><USER2> When I left Sun in 1995 their "biggest" Iron was the Enterprise 10K (which internally was called "Dragon" because of the Xerox bus) A system with 64 cores and 256GB of RAM was just under 2.5 million dollars list. It needed over 10kW of power provided by a 60A 240V circuit. The power cord weighed in at like 20 lbs. I put together a new desktop with the TR3960 and 128GB of ECC ram, that motherboard will take the 3990 and 256GB of RAM if I chose to upgrade it. It really boggles my mind what you can fit under your desk these days with a single 120V outlet.

<comment><USER3> In 2001, the fastest supercomputer _in the world_ was ASCI White. It cost $110M, weighed 106 tons, consumed 3MW of power (plus 3MW for cooling), and had a peak speed of 12.3 TFLOPS.

Right now, sitting under my desk is a RTX 2080 Ti GPU which cost around $1000, weighs 3 pounds, draws a maximum of 250 watts, and has a peak speed of 13.4 TFLOPS [1].

We truly live in amazing times.

 _[1] Not quite a fair comparison: the GPU is using 32-bit floating-point, while ASCI White used 64-bit. But for many applications, the precision difference doesn 't matter._

<comment><USER4> It's not fast enough. After having access to 160 TPUs, it's physically painful to use anything else.

I hope in 20 years I'll have the equivalent of 160 TPUs under my desk. Hopefully less.

The reason it's not fast enough is that ... there's so much you can do! People don't know. You can't really know until you have access to such a vast amount of horsepower, and can apply it to whatever you want. You might think "What could I possibly use it for?" but there are so many things.

The most important thing you can use it for is fun, and intellectual gratification. You can train ML models just to see what they do. And as AI Dungeon shows, sometimes you win the lottery.

I can't wait for the future. It's going to be so cool.

<comment><USER5> > You can't really know until you have access to such a vast amount of > horsepower, and can apply it to whatever you want.

Something I've often wondered, and there are probably good reasons why, is that billionaire tech moguls - even the ones who are outwardly technical (or were in the past - people like Bill Gates, who we know had technical chops in the past) - that none of them (that I'm aware of) haven't ever tried to build "their ultimate computer".

For instance, if I had their kind of money, I've often thought that I would construct a datacenter (or maybe multiple datacenters, networked together) filled with NVidia GPU/TPU/whatever hardware (the best of the best they could sell me) - purely for use as my "personal computer". Completely non-public, non-commercial - just a datacenter I would own with racks filled to the brim with the best computing tech I could stuff into them (on a side note, I've also pondered the idea of such a personal datacenter, but filled with D-Wave quantum computing machines or the like).

What could you do with such a system?

Obviously anything massive parallelism could be useful for - the usual simulation, machine learning, etc; but could you make any breakthroughs with it - assuming you had the knowledge to do such work?

Which is probably why none have done it - at least as a personal thing.

I mean, sure, I would bet that people who own large swathes of machines in a datacenter, or those who outright own datacenter (like Google or Amazon) - their founders and likely internal people do run massively parallel experiments or whatnot on a regular basis, ad-hoc, and "free" \- but it's a commercial thing, and other stuff is also running on those machines...

But a single person is probably unlikely to have or think of problems that would require such a grand scale before they would just "start a company to do it" or something similar; because in the end, just to maintain and administer everything in such a datacenter, if one were built, would require (I would think) the resources of a large company.

Of course, then I wonder if such companies - especially ones like Google and Amazon, which own and run many datacenters around the world, and also sell the resources of them for compute purposes - weren't started in some fashion (even if only in the back of their heads) by their founders with that idea or goal in mind (that is, to be able to own and use on their whim "the world's largest amount of computing power"...?

<comment><USER6> Paul Allen kinda did just that, although in a different direction. He built a datacenter and filled it with a bunch of old computers he thought were cool, like the DEC PDP-10. It's now the Living Computer Museum in Seattle.

[https://www.pcworld.com/article/3313424/inside-seattle- livin...](https://www.pcworld.com/article/3313424/inside-seattle-living- computer-museum-pc-history.html)

</comment></comment></comment></comment></comment><comment><USER7> The comments are mentioning the Xeons in Mac Pros and how Apple should switch. I have no factual basis for this, but I figure Apple has got to be using AMD's new chips as leverage to get some pretty sweet deals on Intel silicon.

<comment><USER8> Deals that Apple does not pass on to their customers.

<comment><USER9> If people continue to pay Apple's (sometimes) outrageous prices, why should they lower them?

(I'm just as guilty, having spent over two grand on MBPs multiple times!)

<comment><USER10> Despite their price, there was a time when macbooks were only 5-10% more than the PC equivalent laptop. People that were complaining about its price were inevitably comparing it to bottom of the barrel PC laptops, not higher end business laptops that had comparable specs.

I haven't priced out any recent macbooks to know if that's still true though. Glancing at the new 16" macbook pro, it seems like it might be reasonably priced for what you're getting.

<comment><USER11> Yeah, the MBP 16" is pretty comparable to the Dell XPS in price - at least when comparing base models.

However, the costs go up a lot if you spec out a custom config (+$400 just for 32GB RAM). Then the MBP starts looking quite a bit more expensive. Overall I don't think they're a bad buy though if you want macOS.

<comment><USER12> >Yeah, the MBP 16" is pretty comparable to the Dell XPS in price - at least when comparing base models.

The Dell XPS [1] with a comparable spec cost $1650 compare to MBP 16" $2399. In the old days Apple would have priced it closer to $2199 or slightly lower.

Somewhere along the line they started making Mac same margins as iPhone.

[1] [https://www.dell.com/en-us/shop/deals/new- xps-15-laptop/spd/...](https://www.dell.com/en-us/shop/deals/new- xps-15-laptop/spd/xps-15-7590-laptop/xnber5cr656ps?view=configurations)

</comment></comment></comment></comment></comment></comment><comment><USER13> "consumer variant of the 64-core EPYC"

At nearly $4000 for just the CPU, is that still consumer territory? I assume only huge companies would spend that much money on a single CPU.

<comment><USER14> There is a huge gamer market. Every hardcore gamer wants to have the fastest cpu avaiable.

Those who can afford it, will buy it.

edit: yes, it is definitely overkill for most if not all avaiable games, but in a certain scene "overkill" is considered awesome

<comment><USER15> Does the CPU actually matter that much for modern AAA games? (I haven't played any AAA game in a looooooooooong time.)

<comment><USER16> LinusTechTips tester it, and, IIRC, the answer is CPU bottlenecks aren't really a thing anymore.

<comment><USER17> They sure are a thing, because programmers. For example for a stutter free game RDR2 needed 6 cpu cores up to a patch one month ago thanks to bad console first optimizations.

<comment><USER16> The key word was _really_. There are obviously times where CPU bottlenecks are a thing, but for the most part, they're not.

</comment></comment></comment></comment></comment></comment><comment><USER18> So wouldn't this be like 2.6 TFLOPS? I'm thinking if this can replace NVidia V100s to train something like ImageNet purely on CPU. However, V100 has 100 TFLOPS which seems 50x more than 3990X. Perhaps, I'm reading the specs wrong?

PS: Although FLOPS is not a good way to measure these stuff, it's a good indication of possible upper bound for deep learning related computation.

<comment><USER19> DDR4 has a bandwidth of about 25 Gigabytes per second. The memory on a V100 does about 900 Gigabytes per second. Cerebras has 9.6 Petabytes per second of memory bandwidth. For stochastic gradient descent, which typically requires high-frequency read/writes, memory bandwidth is crucial. For ImageNet, you're trying to run well over 1TB of pixels through the processing device as quickly as possible while the processor uses a few gigabytes of scratch space.

<comment><USER20> DDR has a bandwidth of about 25GBps _per channel_. You can hit around 100-200GBps on Epyc processors if you're utilizing ram efficiently. GPUs tend to enforce programming models that ensure more sequential accesses, but CPU can do it too.

<comment><USER19> oh that's true thanks! I knew GDDR had higher bandwidth but the gap seemed a little high when I looked it up

</comment></comment></comment></comment><comment><USER21> Some product manager smiled as they entered in the pricing for this product. Screw the margin, make it match the SKU.

<comment><USER22> True story, AMD's original price was different. I suggested this price in a pre-briefing the night before. I got an email at 4am of the announcement to say it had been changed.

</comment></comment><comment><USER23> Can someone clarify what exactly is cut here compared to EPYC 7742 other than PCIe lines? I don't quite see really get how AMD want to avoid competing with their own product.

<comment><USER8> They also cut multi-socket and half the memory channels. It's only ~10% cheaper than Epyc 7702P so AMD is not hurting themselves.

<comment><USER23> Ah okay. I missed half of memory channels so it does make sense now.

</comment></comment></comment><comment><USER24> I haven't seen any reviews taking into account the price of unregistered DDR4 RAM at the densities required to use these things. AMD is suggesting 2GB/core or 128GB, but these HEDT CPUs cannot support the typical registered RAM used by server memory kits and require unregistered desktop RAM (for market segmentation, you see) which can be (depending on SKU) quite a bit more expensive. I feel any price comparisons with Epyc or Xeon need to take that into account.

</comment><comment><USER25> This is a bit tangential but maybe someone could give me a some advice.

When running with many cores is there some way to get the Linux kernel to run them at a fixed frequency?

I've been doing multicore work lately on AWS - which works pretty well but you don't get access to event counters so sometimes I'm having trouble zeroing in on what the performance bottleneck is. At higher core counts I get weird results and I can never tell what's really going on. Running locally I have concerns about random benchmark noise like thermal throttling, "turbo" and other OS/hardware surprises (I know on modern chips single thread stuff can run really different from when you load all the cores). I've been thinking of getting something a bit dumber like an old 16 core Xeon (I'm on a bit of a budget) and clocking it down - or maybe there is some better solution?

<comment><USER26> I don't have a answer to your frequency problem but I ran into similar issues with memory usage when trying to process LIDAR data in pandas and keras. I ended up buying an old HP quad xeon 4U with 320gb of DDR3 for $330 shipped. I used [https://labgopher.com/](https://labgopher.com/) to find the server deals.

<comment><USER27> Thanks for sharing labgopher... would have made my own search much easier last year.

</comment></comment></comment><comment><USER28> i think the smart buy (for most) is still the 32 core threadripper. it is a lot less money with much higher clocks and is less likely to be ram throughput starved.

</comment><comment><USER29> I've been experimenting with some ideas for new ML approaches (not neural networks). I was thinking about playing around with FPGAs, which the high end ones are really expensive. 64 cores is making me think it probably is not worthwhile to focus on FPGAs or even necessarily GPU programming like I was thinking before.

<comment><USER30> With 64-lanes of PCIe on this Threadripper... why not all three?

Plenty of PCIe space to afford a few GPUs to experiment with your 64-core CPU. You probably can shove 2x GPUs + 1x FPGA into one box.

<comment><USER29> Right and it is possible that by doing something like that the power of the system would be multiplied by many times. It's really more about the programming model.

<comment><USER30> I'm not sure if that's a big deal with a single box.

Threadripper is only 300W+ under load. Idles for the CPU are ~100W for the whole system. ([https://www.kitguru.net/components/cpu/luke-hill/amd- ryzen-t...](https://www.kitguru.net/components/cpu/luke-hill/amd-ryzen- threadripper-3960x-3970x-cpu-review/11/))

GPUs are similar. GPUs take ~20W while idling, but 300W or 500W while under load. FPGAs are also similar.

\</comment></comment></comment></comment><comment>-

The total system idle of a Threadripper + 2x GPU + FPGA rig probably is under 200W.

If you happen to utilize the entire machine, sure, you'll be over 1000W. But you'll probably only utilize parts of the machine as you experiment and try to figure out the optimal solution.

A "mixed rig" that can handle a variety of programming techniques is probably what's needed in the research / development phase of algorithms. Once you've done enough research, you build dedicated boxes that optimize the ultimate solution.

<comment><USER29> By power I meant compute power. Did not mean power draw.

<comment><USER30> Ahh, gotcha. I guess I misunderstood.

Your earlier comment makes sense now that I understand what you're saying.

</comment></comment></comment><comment><USER31> 16 cores per memory channel seems to be pushing it, if 47% cinebench improvement is any indication.

</comment><comment><USER32> i want one of these solely to shave days off of waiting for fpga synthesis. even on a 3900x and smaller hobby board things can take hours

now whether its worth selling a body organ to kit out..

</comment><comment><USER33> How does Windows 10 licensing work for this number of cores?

<comment><USER34> Honest question: do people who need 64 cores use Windows? I assumed these types of workstations and workloads are 99% Linux based.

IIRC windows's scheduler wasn't as good as linux's at managing these kind of paralel workloads.

<comment><USER35> Yes, we do :) Well, maybe not 64 cores.

In embedded/automotive, majority of the tooling does not have a linux version. Compiling is a bitch. Still, you're probably right about the 99% comment.

</comment></comment></comment><comment><USER36> Having a blast with Ryzen 5 3600X. Only problem is that Win10 appears to have a bug with it. Stutters all over. Only stopped when I reinstalled the newest chipset drivers and set the Ryzen Balanced energy profile. Windows default energy profiles all stutter, fans make too much noise etc. Now it stays variating clock from ~3.8 to ~4.2. Before it was fixed at 3.79.

<comment><USER37> Have you tried it in Linux? When the first Threadrippers came out, I remember seeing people having all sorts of problems with them in Windows 10, with the same machines running in Linux outputting double the performance.

<comment><USER36> Yeah, probably a Win10 driver issue. When i updated it, it fixed it. Before i event got a BSOD because of it.

</comment></comment></comment><comment><USER38> When can I buy the new amd vega 2 without having to purchase a Mac Pro ?

</comment><comment><USER39> its a bit excessive in the prosumer market but these will make great cheap home lab machines.</comment>


Ask HN: What milestones do you use for vesting equity of minority co-founder? - <AUTHOR>

I'm looking to bring a front-end developer on-board as a co-founder with equity compensation (5-10% total equity).  I want the equity to vest 3-4 times based on achieving 3-4 milestones (i.e. 1% for achieving M1, 1% for M2, 1% for M3 and 2% for M4).
What milestones have you successfully used to tie the vesting to?
How have you structured the vesting for part-time participate (that will probably grow to full-time as the business can support it)? <comment><USER2> Why not just use the standard four year vesting with a one year "cliff" for the full 5-10%? If your co-founder isn't a good fit or isn't hitting milestones you can part ways early and retain all or most of the stock.

More on founder vesting here: <http://cdixon.org/2009/04/21/founder-vesting/> <http://venturehacks.com/articles/get-vested-for-time-served> [http://venturebeat.com/2010/01/04/ask-the-attorney- founder-v...](http://venturebeat.com/2010/01/04/ask-the-attorney-founder- vesting/)

<comment><AUTHOR> Time-based vesting implies full-time participation. In my case (and probably a lot of other cases), we are both part-time until the product gets traction. Then we will take the risk of going all-in.

If I tie the vesting to milestones instead of time, I should be able to fairly compensate the other person's part-time efforts without walking down the 'you aren't working enough, your shares aren't fully vested' path if/when we divorce.

<comment><USER3> Why not base the first 1% or so on an hourly vesting schedule? So if he is working part time he can rack the up the hours all year or however long it takes. Make the milestones 'hours worked'

<comment><AUTHOR> 'Rack up the hours all year' just sent chills down my spine! That's exactly what I want to avoid. :)</comment></comment></comment></comment>


Bridge.NET. Write C#. Run JavaScript - <AUTHOR> http://bridge.net/the-bridge-is-open/ <comment><USER2> Finnaly, no language is complete without compile-to-javascript support :)

<comment><USER3> The .NET ecosystem already had his fair share of these, see [https://github.com/jashkenas/coffeescript/wiki/List-of- langu...](https://github.com/jashkenas/coffeescript/wiki/List-of-languages- that-compile-to-JS#c-f-net-related-languages)</comment></comment>


Emacs with the SpiderMonkey garbage collector - <AUTHOR> http://lists.gnu.org/archive/html/emacs-devel/2017-11/msg00575.html <comment><USER2> I came across this some time ago, may be of interest:

[https://github.com/Wilfred/remacs](https://github.com/Wilfred/remacs)

It's a port of the EmacsOS to Rust, should be able to run all your elisp code at some point.

<comment><USER3> I'm thrilled to see how much progress this project is making. The ancient core of Emacs written in C is nearly impossible for a newcomer to understand. Porting it to Rust might make it possible to work on the codebase and feel confident that your changes is correct.

<comment><USER2> Yeah, much more hackable it will be fur sure.

It may also come with speed improvements, as Rust did for FF. :)

And I can imagine that writing (parts of) Emacs' plugins in Rust (for speed and/or hackability) may also be a great addition.

<comment><USER4> extremely naive to think a new language added perf over C++. its obviously a side effect of rewriting a 20+ yrs codebase under an updated architecture vision from scratch.

<comment><USER5> It's not that it's impossible in C++ just that it's impractical to write large-scale solutions with a complex threading model with the "don't screw up" model C++ uses. The Rust compiler provides what amount to built-in unit tests with every build pass that allow you to fearlessly write code without data races. This in turn allows the new architecture you're referencing.

<comment><USER6> I don't think you need a complex threading model. The browser showed that you can get good interaction with single-threaded environment as long as you 1) can offload computation to other processes (web services, in the case of the browser, or more recently, workers) through message-passing and 2) such interaction can be performed asynchronously (i.e. while you wait for the result you can continue with the rest).

I think such kind of approach could be adopted by emacs without having to rewrite everything from scratch. Taking advantage of this would require of course rewriting a good amount of code (both elisp and C), but it could be done bit by bit over the course of a long time.

<comment><USER5> I think the Stylo developments show that it's not entirely true. Yes, you can get good performance from single-threaded models, and you can get better performance with threading. I'm also a huge advocate of not rewriting things, which is why Rust's C interop allows for incremental re-development of legacy codebases in a reasonable way.

<comment><USER2> > you can get better performance with threading

Indeed. I think mrighele is talking about server side web app performance, which is a much higher level game and because a lot is stateless allows scale- out + loadbalancing to achieve resource utilization maximization.

When writing hi-perf systems (like a browser), this is a very different game. In this game threading is a tool you need to make sure all cores utilized.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> _The main difference between the current mark-and-sweep garbage collector and the SpiderMonkey garbage collector is that the latter is a copying garbage collector and precise, meaning that objects may change address during GC and that only typed values, not memory locations that might or might not be, must be trace_

Out of all the types of gc out there going to a copying gc seems not very compelling. Mark and sweep is not bad at all (well understood, straight forward to implement), and you don't have to worry about double dereferencing pointers (ie some implementations of Cheneys, I don't know if spidermonkey refercences are indirect pointers to one of two buffers).

<comment><USER8> Out of the 3 general garbage collector types - copying, mark & sweep, and reference count - copying is superior in general. The benefits of copying include: automatic compaction when copying from old heap to new heap (no memory fragmentation), improved locality (objects are closely packed), extremely fast reclamation (just throw away the old heap whereas mark & sweep needs to maintain/update the free list for different sizes of objects), great for systems with lots of objects dying young (mark & sweep needs to reclaim each died young object), cycle removal (ref count's pitfall), and generational GC is just an extension of the copying concept (in addition to copy from old heap to new heap, copy from younger generation to older generations).

<comment><USER9> I agree. We used this architecture in Apache CouchDB, and it can also be seen in the Lucene fulltext index.

The only downfall is needing enough free space to perform the copy.

<comment><USER10> And this is where the "it takes five times as much RAM to run a GC'd program with the same performance as the equivalent program with explicitly managed memory" bit kicks in.

Value semantics covers 95% of your object-lifetime needs. The other 5% can be covered with some form of reference counting and being smart about strong vs. weak references. Tracing GC is like bubble sort: almost always a suboptimal solution.

<comment><USER11> Not 5x as much ram. Exactly 2x more ram. You copy between two half spaces, back and forth. That's why it's usually also called semispace collector.

What you are talking in the 2nd paragraph is total nonsense in a lisp world. Lisp solved this problem decades ago, with copying collectors. Stack values are 20%, plus refcounts do not work with rplac* able trees and are super slow.

<comment><USER10> Yes -- five times as much RAM: [http://people.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf](http://people.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf)

As it turns out, compared to the analysis and tree traversal inherent in even a fast GC algorithm, the overhead of malloc() and free() is really quite small. So yes, it takes twice as much memory to use a copying GC, right out of the starting gate -- but in order to match the performance of the equivalent explicitly managed program, it takes even more memory on top of that. And real time -- forget about it. It takes highly tuned, specialized algorithms to run a GC language that can meet hard real-time deadlines. You'll know you've found a decent algorithm because it will be proprietary -- part of some expensive, specialized JVM the Navy uses to crunch radar data aboard ship or something. The conventional algorithms (stop-and-copy, generational, etc.) are all fucking terrible.

And I wasn't talking about "in a Lisp world". Lisp is dead for real application development. Hell, the scruffies won, and C++ is now the predominant language in AI -- where Lisp was once said to thrive. Of course refcounts don't work if you try to build a graph with only one kind of reference. But a) you should know what kind of data structure you're building (cyclic or acyclic, graph or tree) and b) you should use weak references where possible to inform the deallocator which references not to chase. It's called being smart. Yes, it's a little more work than using a tracing GC, but it's still far less cognitively taxing or error-prone than using malloc() and free() manually.

<comment><USER11> I think you misread the 5x, 3x and 2x sentences there. These are the workloads benchmarked there. The more memory used the faster was a slow GC compared to malloc, equally fast with 5x more memory used, and with 2x memory 70% slower.

Any GC uses much less memory than a refcount or malloc application. That's common sense. Just copying uses more vmem during the copying, compaction step, but even this size is usually less than the refcount and malloc overhead. The copying one even uses no stack-space, due to Cheney.

A GC is always superior to refcounts and manual malloc, because it's much too hard to do that by yourself. With real-time you use incremental collections. Just store the state where to continue.

Agreed, the conventional m&s, stop the world collectors as eg. used in most major fancy languages are all terrible. You only need that for an FFI. But a good GC is far superior. And most importantly faster and safe. You don't update refcounts with a GC. You don't pollute your cache and concurrent updates with that.

Look at Java or .NET if you don't like lisp. Same tech, a solved problem.

<comment><USER12> > Any GC uses much less memory than a refcount or malloc application.

That's plain wrong.

> because it's much too hard to do that by yourself.

Too hard to do yourself? There are some of us who have been doing it for decades. In places where performance, predictable runtime and memory usage is of paramount importance (like the linux kernel) it is still done manually. I'll grant you Moore's law has made those places increasing rare nowadays.

Yes it harder to do it manually, but only in the sense that it's harder to do anything manually than have it automated. But being hard and error prone doesn't mean the result is slower, or uses more memory. A moments thought should have told you that. GC delays freeing memory until there is sufficient memory pressure. The mental load imposed by tracking malloc's means a programmer does it immediately so he can forget about it. Thus the memory is available for re-use immediately.

In my experience a long running program manually managing it's heap has a heap about twice the size of actual space in use. In theory some degenerate cases caused by fragmentation can make it far worse - but I've never been bitten by it. Long running GC languages (they tend to be written in Java) it's around 5 times. Again, if you done any sort of server administration, you would know this. All of us who do have watched Java VM's grow over with amazement and dismay. Ironically, the cure is a form of manual memory management - kill them and restart.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Could someone explain, for someone not familiar with low level programming, what would be the advantages of using another garbage collector in Emacs?

<comment><USER14> This is asked in the thread, though I'm not sure I saw a good answer, yet.

Basic answer is if there are complaints with the garbage collector causing stalls or other hiccups, then moving to a faster one could help.

Now, this implies that a new one would, ipso facto, be faster. That is not guaranteed. But, garbage collectors have gotten quite effective in modern times. Extra memory helps, of course.

<comment><USER15> There are two ways a new GC might be helpful. It might reduce the length of any individual pause (though normally at the expense of total overall pauses) and it might reduce total memory usage by compacting the heap and being a precise rather than a conservative collector.

The current emacs GC can introduce long pauses, so I'd be happy to see something which improved Thant, and I have seen annoying increased memory usage in long emacs processes so experiments in this area would be welcome.

<comment><USER14> I'm curious how you get long pauses. I only really see giant pauses when I do a sync process call that takes longer than I expected. So, updating GLOBAL tags, for example.

</comment></comment></comment></comment><comment><USER16> my emacs gc strategy: disable the gc. do manual collections by restarting every now and then.

<comment><USER17> Why would you want to do that? Are you running on a severely memory-restricted machine?

<comment><USER18> I'm assuming the opposite - they're running on a machine with lots of memory, and Emacs is getting bogged down by frequent and slow GC pauses. I have run into this problem myself and actually quit using Emacs because its GC lag was so bad.

<comment><USER16> yeah, this is correct. iirc it was some sort of "autocomplete open a file" library that was running slowly, mostly because of gc -- disabling gc made that snappy, and i have enough memory that it doesn't really matter if emacs never reclaims it.

i also really don't like having my editor pause to do gc.

(i'm addicted to emacs flexibility, but i would love a better-engineered replacement. maybe xi editor, someday. (though their multiprocess approach seems _insane_ to me, _especially_ in a language that gives you safe shared- memory concurrency!))

here's the necessary incantations, in any case anyone wants to try this at home:

      ;; never collect.
      (setq gc-cons-threshold 10000000000)
      (defun garbage-collect (&rest args)
    	  (message "trying to garbage collect. probably you want to quit emacs."))
      (setq garbage-collection-messages t)

the message kicks in at 10GB.

<comment><USER19> Could turning it off cause other issues (in Emacs / in OS), apart from eating lots of memory?

<comment><USER20> The OOM killer preferentially targets processes with a lot of memory allocated. If you actually let emacs consume all memory it's likely to die without warning.

</comment></comment></comment></comment></comment></comment><comment><USER21> Wow! My gut instinct would have been to try Boehm, but I have no idea why one would prefer one GC over another with Emacs.

<comment><USER11> Because Boehm is still a conservative mark & sweep, whilst a modern copying collector with nan tagging is MUCH faster. It only needs twice as much memory.

The root scanning problem with nested calls causing races is known. I do have the same problem. You need to assign to volatile temps, or implement boehm- like scanning of registers. Which is not easily portable. Volatile temps are, and they are fast enough for me. Still running circles around boehm or any other m&s GC.</comment></comment>


Buzz Aldrin: It's time to focus on the great migration of humankind to Mars - <AUTHOR> https://m.greenwichtime.com/opinion/article/Buzz-Aldrin-It-s-time-to-focus-on-the-great-13811434.php <comment><USER2> Getting our environment into a less volitile state, and in the US, Health Care into a more sane, civilized state are much higher priorities.

I will be ultra frank:

So long as I see my nation continuing resource and politically motivated aggression, while basically shitting on the majority of it's people, fuck Mars.

That is from a policy perspective. Private entities seeking that goal are just fine, provided they are, in fact, paying their fair share of taxes.

Have at it!

No worries.

As a nation, and I am speaking from and as a citizen of the USA, no way. Our national priorities are way out of order. Dangerously so.

</comment><comment><USER3> Mars has 40% of Earth's gravity, which will have very bad consequences:

[https://www.wired.com/2014/02/happens-body- mars/](https://www.wired.com/2014/02/happens-body-mars/)

</comment><comment><USER4> Without a global magnetosphere, or an atmosphere to breathe, I think life on Mars will be pretty miserable. I see less of a great migration and more of a tiny outpost.

<comment><USER5> You really only need a magnetosphere on the side facing the sun. It's probably possible to make satellite do that job. Calculations show you need about 2 Teslas or 20,000 Gauss. We can already produce such fields here on earth.

I would say the thin atmosphere is a bigger problem. It means your stuck in a box or a suit to provide oxygen and pressure.

While giving mars an atmosphere is possible in theory. A fair amount of the rock on mars are oxides. The energy required to extract enough to have any sizeable effect on the planet are insane. Like we are lucky enough we had plants do this over those course of millions of years to produce such an oxygen rich atmosphere.

It might be easier to just build bigger boxes though.

Really if we are serious about this we need to building infrastructure that allows boot strapping further and further. If there is going to be any meaningful migration or settlement. Living in small boxes like the ISS or in caves does not really help on that regard.

Honestly, the first people to go and build this infrastructure are going to have some toughest jobs ahead of them.

</comment></comment><comment><USER6> Couldn't he have sent a text to his Elite friends instead?

Why announce it to the world when 99.9% of people are not affected by this?

Oh wait... They need your money to do it.

</comment><comment><USER7> How about instead of colonizing mars, we colonize Greenland first? Or Antarctica?

<comment><USER8> There's no reason both of those can't be done at the same time. The people/technology/equipment required to colonise Greenland or Antarctica have very small crossover with the people/tech/equipment required to colonise Mars.

(And while the money required is "the same money" \- the costs of colonising Greenland disappear into the noise of the costs required to colonise Mars.)

<comment><USER9> Most of the tech is the same, only the transport differs. Getting people to live in a lava tube in Antartica permanently would at least tell us if the idea is feasible for the human psyche, it's basically the same as mars but warmer and with easier access to water.</comment></comment></comment>


Show HN: Stituency – Conditional Campaign Contributions Tied to Votes on Bills - <AUTHOR> https://stituency.org <comment><AUTHOR> The basic idea is that you pick a bill and a representative and state how you'd like them to vote. If they vote the way you want them to, they get the money as a campaign contribution. If they don't, it goes to their next opponent.

Here's the bill to save net neutrality: [https://stituency.org/bills/hr4585-115](https://stituency.org/bills/hr4585-115) And here's the current tax bill: [https://stituency.org/bills/hr1-115](https://stituency.org/bills/hr1-115)

The site is live and contributions will be delivered.

I'd love feedback on the experience. Particularly, I have a theory that choosing a representative can be overwhelming and I'd like to brainstorm ideas on how to fix that.

I'll be sticking around to answer any questions.</comment>


Show HN: A JavaScript interpreter written in Ruby - <AUTHOR> http://github.com/charliesome/twostroke

<comment><AUTHOR> Twostroke is also capable enough to run the CoffeeScript compiler: <http://github.com/charliesome/coffee-script-pure>

<comment><USER2> Very cool! If you added a Twostroke adapter to ExecJS (<https://github.com/sstephenson/execjs>), the ruby-coffee-script gem would work without modification.

<comment><USER3> I've been thinking of making a pure-ruby javascript interpreter in order to embed it into ExecJS as a fallback for when nothing else is present.

I believe this is only the case on Linux, but I've found that it gives my coworkers who are trying out rails for the first time quite a bit of confusion. (For that matter, it would help if execjs appended #readme in its error message instead of just to the github page, since the same coworkers were also unfamiliar with github, and didn't realize they had to look below the fold for the list of runtimes.)

</comment></comment></comment><comment><USER4> I'm quite flabbergasted seeing this:

[https://github.com/charliesome/twostroke/blob/master/lib/two...](https://github.com/charliesome/twostroke/blob/master/lib/twostroke/parser.rb)

That is, a parser which is essentially coded by hand, with all token checking, saving and restoring parser's state, functions corresponding to non- terminating symbols of grammar etc.

Are there no good parsing libraries in Ruby (similar to Python's pyparsing or Haskell's Parsec), and could this have forced the author to code his parser from scratch?

<comment><USER5> Forced? I've written dozens of parsers, and personally I avoid parsing libraries like the plague - unless you're writing a really simple parser with few needs for error reporting and recovery, my experience is that parsing libraries usually end up being far more pain than they are worth.

<comment><USER6> Completely agreed. Once I got the hang of hand-writing parsers, I never looked back; they're higher-quality, generally faster, easier to write, and are easier to maintain than generated parsers.

<comment><USER7> My favorite compiler writer (dgc of mwc fame) says "Yacc makes the hard part of a compiler harder and the easy part easier".

</comment></comment></comment></comment><comment><USER8> You should check out HotRuby, which is a Ruby interpreter, written in Javascript: <http://hotruby.yukoba.jp/>

Should be pretty interesting to see Twostroke running on HotRuby running on Twostroke running on HotRuby running...

<comment><USER9> The front page for the project hasn't been updated in over 3 years, and a quick search for github activity shows stagnation too. What direction is this project heading and how fast is it getting there?

</comment></comment><comment><USER5> Looks fun, but it'd be interesting to hear more about your rationale for this vs. embedding V8 etc.

<comment><AUTHOR> Something like Twostroke could be useful if for some reason or other you can't embed V8 (eg. no platform support, no access to compilers, etc.) Twostroke is dog slow compared to a 'real' JavaScript engine, but it will do the job if there's no other options.

It's also a fun project that has taught me a lot about parsers, language implementations and JavaScript's object model.

<comment><USER5> Fun is always a good reason... I need to dust off my (horribly incomplete) Ruby compiler project.

</comment></comment></comment><comment><USER10> This look pretty neat. Could you share your motivation behind why you build this and some use cases? :)

</comment><comment><USER11> Very cool! I was looking for a python js interpreter just the other day, maybe I'll take a crack at it :)

</comment><comment><USER12> I see no use case for this. You must be masters of both languages after this project.

</comment><comment><USER13> I'm starting to wonder if the people behind these sorts of projects (eg. old console emulators written in JavaScript, this, etc.) are insane or if this is all some sort of epic trolling for lulz.

<comment><USER14> It's just people enjoying themselves, it's fun to work on crazy projects (at least for some people). Don't worry about it :)</comment></comment>


China levies anti-dumping tariffs on chemical imports from Taiwan, Malaysia, US - <AUTHOR> https://www.cnbc.com/2018/12/28/china-anti-dumping-tariffs-on-chemicals-from-taiwan-malaysia-us.html <comment> n-gate The article didn't mention this- how do they "justify" taxes on what is "their own province"?</comment>


Wikipedia:There is a deadline - <AUTHOR> http://en.wikipedia.org/wiki/Wikipedia:There_is_a_deadline <comment><USER2> Yea. The first 500 years of history of my region in Germany were lost on September 11th 1944 when the archives of Darmstadt were consumed by a firestorm.</comment>


The Meaning of Money - <AUTHOR> http://aquaviva.wordpress.com/2007/04/01/the-meaning-of-money/ <comment><USER2> I don't think that a central authority is necessary for money to work, at least not in form of a monopolist. Actually the current systems are rather unsatisfying because a state can loose its credibility and thus the trust in its curreny quite fast, basically as soon as war looms on the horizon or it becomes apparent that it will default on its debt. In the last 25 years over 87 currencies crashed. And because of the monopoly of the state on money the whole economy is usually going down along. For my part I would therefore abandon the monetary monopoly of the state and allow competition, allow companies to issue money. When they connect their name to the currency and have no legal power to make their money legal tender they will have a much stronger incentive to provide a good and stable money. Hayek wrote a fascinating treatise on the denationalisation of money, and with the ongoing globalisation sooner or later we will get used to juggle with more than one currency in our pockets. Second Life seems to be a step in the direction that companies start to issue private currencies and when states, especially in the developing countries, will fail to keep their currency stable chances are that they will be replaced by private currencies.

Equally interesting and probably easier to believe are gold backed currencies with competing private institutes issuing goldbacked money.

Still, its great to see people thinking about money in another way than just how to get it.

<comment><AUTHOR> "central authority is necessary for money to work" - No I don't mean "central authority" just some authority that is responsible for "following the rules" in given market. This can be a company that issued virtual money in online game for example. If participants in virtual world do not trust in the fact that the company will play fair game (e.g. that all participants in the virtual game will have equal power to trade, and that the quantity of money and quantity of virtual goods will grow by some known way.), then the virtual money value will decrease.

</comment></comment><comment><USER3> This article can apply to situations other than real life. Anyone creating a virtual economy may benefit from reading this and other economics articles.

For example, iminlikewithyou's virtual economy. #4 may apply here:

 _"The size of the market is determined by the number of participants who want to exchange money for goods and goods for money."_

So iminlikewithyou's virtual market size is the number of active users, right? Well, not necessarily. If a number of active users have no incentive to bid anymore, for whatever reason, the market size goes down. If it drops below a certain critical point, then people may lose faith in the market due to lack of goods and leave the service. Of course, I feel they're doing an awesome job and I don't expect this to happen. It's just an example.

The best markets are those with the highest number of people _wanting to trade_.

I think that creating virtual economies inside of a product is interesting because you have to create something people want (the startup's product) and then something people want inside the product (virtual goods, which happen to be cute women and men in iminlikewithyou's case). So if creating something people want is difficult, would creating something people want squared be difficult squared?</comment>


Ask HN: When to notify employer of security vulnerability? - <AUTHOR> I stumbled upon a recent zero-day for Microsoft Silver Light (CVE-2016-0034 or KB3126036).  Checking my work system, I can see it hasn't yet been patched.  It's not my job to keep systems secure, I'm only a developer/analyst but ultimately I want to work my way into information systems security + do the right thing.  What do you recommend is the best course of action?  Do nothing?  Wait?  Report it immediately? <comment><USER2> It sounds as simple as sending an email to IT saying "it has come to my knowledge that there is this security vulnerability in the Silverlight version that we're using".

And then, probably, forget about it -- being too pushy about demanding an fast resolution may lose you the points that you'll gain by pointing out the issue.

</comment><comment><USER3> I would post to an online discussion, to obtain community feedback.

<comment><AUTHOR> Are you saying like on an internal company blog or something?

</comment></comment><comment><USER4> Report it immediately.</comment>


Where the f*** should I go for drinks? - <AUTHOR> http://wherethefuckshouldigofordrinks.com

<comment><USER2> I'm not sure about the accuracy of the recommandations. After a few clicks I was advised with a "deux étoiles" (2 stars) restaurant which is a top-notch place for gastronomy, not the kind of place you would hang out and drink beers. To me, the database could need some refining.

<comment><USER3> I was wondering if it takes the "No, this place is ..." clicks into account at some point? That would be a way to refine the database without much effort.</comment></comment>


Gender bias in open source: Pull request acceptance of women versus men [pdf] - <AUTHOR> https://peerj.com/preprints/1733.pdf <comment><AUTHOR> This journal article is not yet peer-reviewed. I'm submitting this to HN, so that the community here and read it and contribute to peer reviewing it.</comment>


Damm algorithm - <AUTHOR> http://en.wikipedia.org/wiki/Damm_algorithm

<comment><USER2> The Damm algorithm is an amazingly useful algorithm. I put together a Base32 version that I use for checking passwords that users enter [1]. It is only in C and PHP right now - I need to get around to porting it javascript [2].

[1] [http://www.tillett.info/2014/06/12/base32-implementation- of-...](http://www.tillett.info/2014/06/12/base32-implementation-of-the-damn- error-detection-algorithm-in-c/)

[2] [https://github.com/DanielTillett/Damm32](https://github.com/DanielTillett/Damm32)

<comment><USER3> Question, in what context is it even possible, or advisable, to catch mistyped passwords?

<comment><USER2> Whenever you want to catch user errors client side rather than server side. It does not remove the need for security server side, but in my case it allows me to simplify the security aspects of my service and allow me to immediately drop any connection that is not using a potentially valid password. If a potentially valid password has been received then I do further checks on the actual password. Basically defence in layers.

Another potential use is for checking coupon codes client side. Of course a JavaScript port would be good for this.

</comment></comment></comment><comment><USER4> Took me at least 1 minute to notice that it was not "damn", which was quite puzzling me...

<comment><USER5> yeah I was kind of hoping this was an elaborate wikipedia joke article

</comment></comment><comment><USER6> So this is an improvement on the Luhn algorithm which is used for credit cards?

<comment><AUTHOR> Pretty much.

First there's the Luhn algorithm, which "will detect any single-digit error, as well as almost all transpositions of adjacent digits. It will not, however, detect transposition of the two-digit sequence 09 to 90 (or vice versa). It will detect 7 of the 10 possible twin errors (it will not detect 22 ↔ 55, 33 ↔ 66 or 44 ↔ 77)." [0]

Then came the Verhoeff algorithm, which "was the first decimal check digit algorithm which detects all single-digit errors, and all transposition errors involving two adjacent digits, which was at the time thought impossible with such a code." [1]

The Damm algorithm was developed in 2004 and was a further improvement:

> The Damm algorithm is similar to the Verhoeff algorithm. It too will detect > all occurrences of the two most frequently appearing types of transcription > errors,[1] namely altering one single digit, and transposing two adjacent > digits (including the transposition of the trailing check digit itself and > the digit preceding it). But the Damm algorithm has the benefit that it > makes do without the dedicatedly constructed permutations and its position > specific powers being inherent in the Verhoeff scheme. Furthermore, a table > of inverses can be dispensed with provided all main diagonal entries of the > operation table are zero.

> The Damm algorithm does not suffer from exceeding the number of 10 possible > values, resulting in the need for using a non-digit character (as the X in > the 10-digit ISBN check digit scheme).

> Prepending leading zeros does not affect the check digit.

> There are totally anti-symmetric quasigroups that detect all phonetic errors > associated with the English language (13 ↔ 30, 14 ↔ 40, ..., 19 ↔ 90). The > table used in the illustrating example is based on an instance of such kind.

> Despite its desirable properties in typical contexts where similar > algorithms are used, the Damm algorithm is largely unknown and scarcely used > in practice.

That last point is also why I submitted this :)

[0] [http://en.wikipedia.org/wiki/Luhn_algorithm](http://en.wikipedia.org/wiki/Luhn_algorithm)

[1] [http://en.wikipedia.org/wiki/Verhoeff_algorithm](http://en.wikipedia.org/wiki/Verhoeff_algorithm)

</comment></comment><comment><USER7> Damm</comment>


The Inefficient Websites, That Make Up the Internet - <AUTHOR> https://worldofmatthew.com/technology/edp24-is-inefficient/ <comment><USER2> "Ultarmently"

[https://www.greggblanchard.com/easiest-way-to-spell- check-a-...](https://www.greggblanchard.com/easiest-way-to-spell-check-a-web- page/) spell check a website

<comment><USER3> The content and meaning of a scentence is easuly captured even with 30% of all letters typed incorrectLy.

Pointing to typos, instead of commenting on the content makes you a "grammar- nazi" in the eyes of the rest of the web:

[https://www.urbandictionary.com/define.php?term=Grammar%20Na...](https://www.urbandictionary.com/define.php?term=Grammar%20Nazi)</comment></comment>


Ask HN: Software Engineering Timeline/Estimates - <AUTHOR> What's the general consensus among engineers in HN about estimating for your stories as an individual contributor when your Project Manager asks for an ETA?
Do you think estimates for software tasks are worth doing at all considering complexities you need to account for? How do you budget uncertainties?
How do you handle cases where the timeline gets exceeded?
Are there any tools (Gantt/Timeline) tools out there that you'd recommend for this? <comment><USER2> Plans are useless but indispensable. They are definitely worth doing, they give your manager and ultimately the rest of the company insight on product development. This could inform marketing, sales, customer success. Is that feature likely to come next week? Should we start writing a blog post now or can it wait? Are we fixing a major issue for an important customer?

Part of your job as a professional engineer is to both communicate and manage uncertainty. A properly scoped story shouldn't be a month long project. It could be a few hours, or it could be a few days.

Helpful advice is to give your estimates using an appropriate dimension of time that reflects the uncertainty. If you think it's going to take 2-3 hours, call it a half day.

If you think it'll be 8 business days call it about two weeks.

Sometimes you don't have an estimate. That's where scoping comes in. It's perfectly acceptable to say I'm not sure but if I spend the next 30 mins scoping it out, I can get back to you with a better idea.

I find managers are perfectly understanding that the world is a fuzzy place and no one has all the answers. Get comfortable with admitting that to yourself and to others and estimating gets a lot easier.</comment>


[Ebook] Data Structures from Scratch (Free Until Next Tuesday (Jan/29/2019)) - <AUTHOR> https://www.amazon.com/Data-Structures-Scratch-introduction-persistent-ebook/dp/B07MZZT6SW/ref=sr_1_6?ie=UTF8&qid=1548418824&sr=8-6&keywords=data+structures+ruby <comment><USER2> only in US...

<comment><AUTHOR> That's odd. I got comments from other programmers saying that is not available in Brazil... I might set something wrong. (However, I can get it from Argentina). Anyway here is a link to the files [https://drive.google.com/drive/folders/1LKgJcNmsRDCHb5Kigvpo...](https://drive.google.com/drive/folders/1LKgJcNmsRDCHb5KigvpoKfTDaTrIV2jf?usp=sharing)

Thanks for letting me know! Cheers!</comment></comment>


vTaiwan: An experiment in participatory governance - <AUTHOR> https://www.technologyreview.com/s/611816/the-simple-but-ingenious-system-taiwan-uses-to-crowdsource-its-laws/ <comment><USER2> Mentioned in the article: As an accomplished programmer and a bit of an anarchist, Audrey Tang is a super interesting government minister. I just came back from regularly scheduled office hours, which I find really rad for a minister to have (both walk-in and by appointment office hours are available).

I wanted to compliment her g0V org on a great rewrite of the online dictionary published by the Ministry of Education: really clean URLs, using open data for translations, publishing the original data under a nice license, behind a CDN – and she commented, oh yeah I just deployed an update (!). [https://www.moedict.tw/](https://www.moedict.tw/)

Many years ago, Audrey also elucidated Chinese language Twitter users living in 2x the density of English users, which foreshadow's Twitter's decision in lengthening limits to 280 chars for English but not for Chinese: [https://news.ycombinator.com/item?id=875414](https://news.ycombinator.com/item?id=875414)

About g0v and a list of projects: [http://g0v.asia/](http://g0v.asia/)

<comment><USER3> I'm surprised the g0v version include translations in foreign languages (and other Chinese languages). Doesn't the ND clause of CC forbid it?

(Edit: this is not a rethorical question. I worked with this dictionary before and if it is indeed allowed to extend it I have work to do)

<comment><USER4> The website displays search results from several dictionaries: [https://www.moedict.tw/about.html](https://www.moedict.tw/about.html)

<comment><USER3> I already read this page. It does not address my question. My interrogation is around the fact that mixing several dictionaries in the same page is considered a derivate product or not. Intuitively it is, so I don't understand how this does not break the ND clause of some source material. So they must be some non obvious legal loophole I want to know about, or this website is breaching some licences.

<comment><USER5> It's a fair question. The Ministry of Education's interpretation for its use of ND clause scopes specifically to the individual items, not the compilation:

"The use of words, radicals, strokes, glyphs, phonetic readings and interpretations of the individual items in the Revised Mandarin Dictionary may not be modified or converted into simplified forms.

However, the change of the code according to the contents of the reference table provided by the Ministry of Education, as well as modifications unrelated to the specific items in the Revised Mandarin Dictionary specified above, are deemed as outside the scope of prohibition of modification."

(Source: [http://resources.publicense.moe.edu.tw/reviseddict_10312.pdf](http://resources.publicense.moe.edu.tw/reviseddict_10312.pdf) )

使用者對於《重編國語辭典修訂本》個別條目的詞目、部首、筆畫、字形、音讀及釋義等內容不得為任何修改,或轉為簡化字。惟依教育部所提供對照表內容作字碼改換,或不涉及更改《重編國語辭典修訂本》個別條目所有內容之調整行為,可不被認定構成上述禁止修改條款之拘束範圍。

<comment><USER3> Thank you very much for your reply and for the source link. This is indeed different from my previous understanding, which was based mostly on English/French CC explanations website.

I'm surprised but pleased by the clause concerning the transformation in simplified characters, and all in all this is less restrictive than what I thought.

</comment></comment></comment></comment></comment></comment><comment><USER6> Talking about Taiwan, they're trying really hard to attract foreign talents. If you're interested, check their Golden Card Permit. It's a visa+redisent card allowing you to stay and work for anyone there up to 3years. The only requirement is to justify of a salary of 160k NTD/month(~USD 5210/month), anywhere in the world, if you don't earn that, try the skills application[1].

And about the article, they are now requesting feedbacks from the public for the next immigration bill [2], that will make even easier to apply fo the visa.

[1] [https://foreigntalentact.ndc.gov.tw/en/cp.aspx?n=128B875DE9C...](https://foreigntalentact.ndc.gov.tw/en/cp.aspx?n=128B875DE9CBEBE3&s=0FCDB188C74F69A0)

[2] [https://join.gov.tw/policies/detail/1b688f9c-5f05-47ce- ab56-...](https://join.gov.tw/policies/detail/1b688f9c-5f05-47ce- ab56-10820643a38a)

<comment><USER7> Any idea why there's a fairly specific special category for neutron physics?

<comment><USER8> [https://en.wikipedia.org/wiki/Nuclear_power_in_Taiwan](https://en.wikipedia.org/wiki/Nuclear_power_in_Taiwan)

<comment><USER9> Let's hope they find the talent they need for that.

Taiwan is home to the world's largest coal-fired power station (which is also the world's largest emitter of CO2 - equivalent to that Switzerland) and just announced construction of a new coal-fired plant 40 minutes from Taipei[1], much to the dismay of residents, environmental groups, and those related to the estimated 1,000 people killed each year by the existing plants. [2]

[1] [https://thediplomat.com/2018/05/taiwan-takes-a-step-back- wit...](https://thediplomat.com/2018/05/taiwan-takes-a-step-back-with-new- coal-plant/)

[2] [https://pubs.acs.org/doi/abs/10.1021/acs.est.6b03731](https://pubs.acs.org/doi/abs/10.1021/acs.est.6b03731)

</comment></comment></comment></comment><comment><USER10> > In any case, Kao says, if vTaiwan's recommendations are ultimately ignored, > as they were with the alcohol sales law, then the whole process runs the > risk of being viewed as "openwashing"—something that creates the pretense of > transparency. "The end goal is legislation," he says.

Sounds like what happened to We the People in the U.S.

<comment><USER5> Indeed, We the People was one of the earliest inspirations of the Join platform.

After I joined the cabinet as the Digital Minister, we have iterated on it quite a bit: [https://civichall.org/civicist/what-vtaiwan-teaches-us- about...](https://civichall.org/civicist/what-vtaiwan-teaches-us-about- digital-democracy/)

</comment></comment><comment><USER11> Audrey Tang also spoke about this at DebConf18 in Taiwan recently:

[https://www.youtube.com/watch?v=oDwfk5jo_ow](https://www.youtube.com/watch?v=oDwfk5jo_ow) [https://meetings-archive.debian.net/pub/debian- meetings/2018...](https://meetings-archive.debian.net/pub/debian- meetings/2018/DebConf18/2018-07-28/q-a-session-with-minister-tang.webm)

The tech sounds interesting to apply to other situations too, like collaboration on open source projects.

</comment><comment><USER12> I'm by no means an expert, but Taiwan has a very interesting political scene due to the relationship with China. The dominant party is Taiwanese nationalistic and for Taiwanese independence, whereas the biggest opposition is Chinese nationalistic.

The Sunflower Student Movement, mentioned a throughout this article, lead to the formation of the progressive nationalistic New Power Party in 2015. This party was co-founded by lead singer of the political metal band Chthonic, Freddy Lim, who is now one of 5 members of the party in the Taiwanese legislature (out of a total of 113 seats).

<comment><USER13> An important bit of context to this comment is that the official name of Taiwan is "the Republic of China", as opposed to "The People's Republic of China". According to international treaties there can only be one China. The nationalist party claims that the Taiwanese government is the government of all of China and is not, as the comment may seem to suggest, "pro China"

<comment><USER14> I want to clear up some terminology here.

The revolution was between the Communist party and Nationalist party. The Nationalist party, the Kuomintang, has it's roots in China, consider themselves Chinese, and consider themselves the true government of China as they were in the past. They only claim this officially. Of course people in reality know that they don't actually have any control of China and have zero chance of regaining it in the future. Typically they are descendants mainland Chinese. This is the blue party. In an extreme simplification, they can thought of as the republican party. Usually older people, more conservative, more friendly to China, and consider themselves more Chinese. (Extreme extreme oversimplification.)

There is also the Green party, which grew in opposition to the kuomintang. They were not as involved in the revolution and I think they care even less about sovereignty over China than the blue party, who as I mentioned, already care very little about it. The green party members are typically descendants of families that were in Taiwan before the revolution. In an extreme simplification, they can be thought of as the democratic party. Usually younger people, more liberal, less friendly to China, and consider themselves more Taiwanese. (Extreme extreme oversimplification.)

I don't have enough knowledge to elaborate past the very very basics but I thought I would clear up some of the differences, and point out that both parties care little about sovereignty over China. Also, the grandparent comment I think made a good distinction by specifying "taiwanese nationalist" and "chinese nationalist", removing ambiguity about what the "nation" in "nationalist" refers to. The capital-n Nationalist party does claim sovereignty over China, but only in an official capacity and they are indeed more pro-China.

<comment> eric-hu I'm not an expert on the subject either, but I believe they Taiwanese government is in a stalemate with China over Taiwan's "Republic of China" title. Taiwan can't get it's own seat as a country in the UN because of the "China" in its title. On the other hand, any attempt to remove China from its title would provoke China. China would see it as a gesture towards independence and sovereignty. Some fear China would react with hostility in that case. Some anti-independence Taiwanese see it as the best way to keep the peace.

<comment><USER8> Taiwan had its own seat as a country in the UN. They were a founding member and had a permanent seat on the security council. The UN has just adopted the "one china" policy and recognized the PRC victory in the Chinese civil war as legitimate. The UN is wholly recognizing the PRC's claims here. In fact, Taiwan tried to (re-)join the UN in 2007 under the name of "Taiwan", dropping the "Republic of China" bit entirely. No dice. See:

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

<comment><USER15> Honestly, what are you talking about? At which point has the UN accepted the PRC's claims to Taiwan or the PRC victory? There hasn't even been a peace treaty signed so how could that be possible anyway. Without knowing all the UN's history, I 100% totally don't believe that the UN has recognized the PRC's claims, simply since the US itself hasn't actually accepted those claims and the US is on the security counsel (thereby capable of blocking such a motion).

Both the PRC and the ROC would have long ago been seated in the UN if there never were a position for "China" on the security counsel. That position allowed the ROC to block the PRC's seat in the UN when it represented "China" and it then allowed the PRC to block the ROC's seat later when it represented "China". The reason that the representation for "China" was switched to the PRC from the ROC was because that step was possible procedurally within the UN's rules even though the ROC was against it. In other words, due to a procedural quirk the ROC could keep the PRC from being seated as a separate country, but couldn't keep its own representation from being switched. After that point the PRC could play the same games.

If there were no seat for "China" on the security counsel or if the rules were different or simply if the ROC would have allowed it at the time, both the ROC and the PRC would have seats in the UN. But none of this means that the UN accepts the PRC's claims to Taiwan.

edit: The downvoting is a bit disturbing. I'm quite honestly curious if there is anything factually wrong with what I've written. My suspicion is that these facts do not match the false assumptions of some HN readers and that they'd rather hide it away instead of confronting it directly.

<comment><USER16> The U.S. has accepted the principle that Taiwan is a part of China. It's official legal status is kept deliberately ambiguous to avoid provoking a war.

[https://en.wikipedia.org/wiki/One- China_policy](https://en.wikipedia.org/wiki/One-China_policy)

 _In the case of the United States, the One-China Policy was first stated in the Shanghai Communiqué of 1972: "the United States acknowledges that Chinese on either side of the Taiwan Strait maintain there is but one China and that Taiwan is a part of China. The United States does not challenge that position."_

You are correct that there is no 'legal reason' why a country could not recognize both states, other than that recognizing one means the other will break off relations (and, in the case of the PRC, possibly take punitive action against that you). Ultimately, the legal niceties are irrelevant; what is important is power politics.

<comment><USER15> > The U.S. has accepted the principle that Taiwan is a part of China.

The quote you provide does _not_ say that. It says that the US has _acknowledged_ that both the PRC and the ROC maintain their is one China and that Taiwan is a part of it. It does _not_ say that the US _agrees_ with that position. It also does not say that it considers the PRC the government of that "China". It does not say that Taiwan is governed by the PRC. The US has _never_ stated that it considers the PRC the rightful government of Taiwan.

You are however extremely correct about the ambiguity of the US position.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> Audrey Tang has been a HN member since 2009 ([https://news.ycombinator.com/user?id=audreyt](https://news.ycombinator.com/user?id=audreyt))

</comment><comment><USER18> People seem to misunderstand the relationship between Formosa (a.k.a Taiwan) and Chinese government (ROC and PRC). Actually Formosa is not related to ROC in terms of sovereignty. ROC, merely a governing authority, happens to exist on the island of Formosa. Basically ROC do not own Formosa's sovereignty.

ROC is still contending against PRC regarding to the representation of China[0]. It's Chinese government's affair, and nothing related to Formosan because both of them, including PRC and ROC, do not own Formsa's sovereignty[1].

> JURIDICAL ASPECTS OF THE FORMOSA SITUATION

> In the Japanese Peace Treaty of April, 1952, Japan formally renounced all > right, title and claim to Formosa and the Pescadores, but again this did not > operate as a transfer to Chinese sovereignty, whether to the Chinese > People's Republic or to the Chinese Nationalist authorities.

And Formosa may be handled in the same way as Ryukyus[2][3]. That's the reason why ROC rejected to admit Japan remains residual sovereignty over Ryukyus when Ryukyus was returned back to Japan[4].

[0]. [https://imgur.com/a/eoJhPsY](https://imgur.com/a/eoJhPsY)

[1]. [http://filestore.nationalarchives.gov.uk/pdfs/large/cab-129-...](http://filestore.nationalarchives.gov.uk/pdfs/large/cab-129-73.pdf)

[2]. [https://history.state.gov/historicaldocuments/frus1955-57v23...](https://history.state.gov/historicaldocuments/frus1955-57v23p1/d89)

[3]. [https://history.state.gov/historicaldocuments/frus1955-57v23...](https://history.state.gov/historicaldocuments/frus1955-57v23p1/d31)

[4]. [https://imgur.com/a/HeGbcB3](https://imgur.com/a/HeGbcB3)</comment>