App Developers on Swift Evolution - <AUTHOR> http://curtclifton.net/app-developers-on-swift-evolution <comment><USER2> Apple's engineers are right on this one. From a performance point of view, the only way Java (and dynamic languages like JavaScript) get away with having almost everything be virtual is that they can JIT under a whole-program analysis, add final automatically in the absence of subclassing, and deoptimize in the presence of classloaders. In other words, Java optimistically compiles under the assumption that classes that aren't initially subclassed won't be, and if that assumption later turns out to be invalid it deletes the now-incorrect JIT code and recompiles. This isn't an option for Swift, which is ahead-of-time compiled and can't recompile on the fly.

If you don't allow an ahead of time compiler to devirtualize anything, you're going to have worse method call performance than _JavaScript_.

<comment><USER3> Yet Obj-C seems to get by quite fine, and everything is super-dynamic there.

Being able to dynamically hack behavior is a _huge boon_ when coding against a closed-source, 3rd party platform.

Doesn't matter so much in an open-source context, where you can just modify code and ship your own version of the library if necessary.

<comment><USER2> Depends what you mean by "just fine". Objective-C method dispatch is very slow. It's significantly slower than that of JavaScript, for example.

<comment><USER3> Just fine in the sense that it's the dominant language on iOS, and iOS sets the bar, IMO, for snappy experiences on modern platforms.

Stuff implemented in java and javascript, not so much.

Maybe saying objc is cheating a little bit, because it's so easy to drop into straight C to optimize. But stuff like UITableView (edit: scroll => table) is all heavily based on objc message sending, and it's easy to get great scrolling perf using that api.

I don't know the exact number, but you can get a lot of message sends done in 16ms.

(Another example -- GitUp, insanely fast git client, objc.)

(On the other hand, I do remember that C++ based BeOS on 66 MHz PowerPCs back in the day was _double-insanely_ fast, so maybe Obj-C is slow, on a language level, and we just don't know it because everything else is so much slower, on an implementation level. But then again that stuff was all virtual calls. I just don't buy the argument that at the _system framework_ level dynamic dispatch is a barrier to good performance.)

<comment><USER2> > Just fine in the sense that it's the dominant language on iOS, and iOS sets > the bar, IMO, for snappy experiences on modern platforms.

> Stuff implemented in java and javascript, not so much.

I agree with the data but not the conclusion. iOS' performance is great in spite of using Objective-C as its language, not because of it.

The only performance-related features that Objective-C brings to the table are (a) being able to piggyback on the optimizations implemented in popular open source C++ compilers; (b) being compatible with C, so you can easily inline C into Objective-C when Objective-C's slow performance bites you; (c) not requiring tracing garbage collection. When you're actually in heavy Objective-C land with method calls in tight loops, performance is pretty bad, both because message sending is slow and because methods can't be devirtualized. Apple knows this, and they've basically reached the limit of what they can do without incompatible changes to the Objective-C semantics. Hence the performance-related design decisions in Swift.

(As for UIScrollView/UITableView, I agree that they're very fast relative to Android or current Web browsers for example. I know the reasons for this and they have nothing to do with the implementation language. Algorithmic and engineering concerns often trump programming language performance.)

<comment><USER4> >iOS' performance is great in spite of using Objective-C as its language, not because of it.

Nope. Objective-C is a _great_ language for performance. Remember the 97-3 rule. That is, only roughly 3% of your code are responsible for almost all the performance. You just don't know which parts those are.

The dynamic features of the language give you awesome productivity to more quickly get to the point where you find out which 3% to actually optimize heavily. Doing this optimization is straightforward because you have all the tools at your disposal, the road to them is smooth and the performance model is predictable.

I have repeatedly achieved performance that's better (yes!) than equivalent C programs, and with a little bit of work you can actually maintain nice OO APIs.

>(b) being compatible with C so you can easily inline C into Objective-C

I really don't understand where this (common) misunderstanding is coming from. Objective-C _is_ C, or more precisely a superset of C. You don't "inline C into Objective-C". You use different aspects of Objective-C as appropriate. If you are not capable of using the full capabilities of the languages, that is your fault, not a problem of Objective-C.

This seems to have been lost, with people (inappropriately) using Objective-C as a pure object-oriented language. It is not. It is a _hybrid_ object- oriented language. In fact, the way it was intended to be used is to write your components using C and use dynamic messaging as flexible packaging or glue.

> because methods can't be devirtualized

Sure they can. I do it all the time:

       SEL msgSel=@selector(someMessage:);
       IMP devirtualized = [object methodForSelector: msgSel];
       for (i=0;i<LARGE_NUMBER;i++) {
           devirtualized( object, msgSel, arg[i] );
       }

Did you mean they can't be automatically devirtualized by the compiler? I hope you understand that these are two different things. Of course, it would be nice to have compiler support for this sort of thing, which would have been miles easier than coming up with a whole new language:

       for (i=0;i<LARGE_NUMBER;i++) {
           [[object cached:&cache] someMessage:arg[i]];
       }

Or some other mechanism using const.

> reached the limit of what they can do without incompatible changes to the > Objective-C semantics. > Hence the performance-related design decisions in > Swift.

Swift performance is significantly worse and waaaayy less predictable than Objective-C, and that is despite the Swift compiler running a bunch of mandatory optimizations even at -O0.

<comment><USER5> Calling via a function pointer isn't devirtualization. It's still an indirect call, and does not allow the function to be inlined since the actual function is not known until runtime. It merely gets you from something 2-4x as expensive as a c++ virtual call to something roughly as expensive.

<comment><USER4> Last I checked, a C++ virtual function call loads the method pointer via an indirect memory load. Hard for the CPU to speculate through, so typically a pipeline stall.

A function pointer that's in a local variable, so loaded into a register is a completely different beast, as the measurements bear out.

In my measurements, a message-send is ~40% slower than a C++ virtual method call, whereas an IMP-cached function call is ~40% faster, and slightly faster than a regular function call.

<comment><USER5> The vtable for an object being actively used will be in L1 cache, and when a virtual function is called in a loop, Intel's CPUs have been able to predict the target for many, many years. ARM may not; I've never had recent to deeply investigate virtual call performance on iOS.

Finding calling via a function pointer to be faster than calling directly suggests that you were not actually measuring what you thought you were measuring.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is a cultural issue much more than a technical issue. I can relate to both sides. "I want to be able to patch anything myself," versus "I want to be able to reliably reason about how my module works."

The rhetoric on both sides can quickly get stupid. This is one of the major ways in which languages are divided. Ruby folks are used to being able to monkey patch everything, and Python folks tend to avoid it even though they can. JavaScript programmers are divided on the issue: should you add a method to Array.prototype, or is that just asking for trouble? I've certainly seen my own fair share of bugs and crashes caused by programmers substituting types where they shouldn't, and seen my fair share of frustrating limitations in sealed modules that should just expose that one method I need, dammit.

Objective-C leaned towards the "go wild, do anything" approach, which grew quite naturally out of the minimalistic "opaque pointer + method table" foundations for object instances. One of the reasons that you make such a choice in the first place is the ease of implementation, but in 2015, writing your own compiler is easier than ever. So Apple is quite naturally considering application reliability as a priority (since they're competing with a platform that uses a safer language for most development).

Unfortunately, it's a cultural fight where one side or the other must necessarily lose.

<comment><USER7> Because I have no experience with Swift, could someone more informed explain this to me? How would my subclassing an Apple-provided class and overriding its methods affect anyone but me? In Python, if I write:

        class MyRequest(requests.Request):
            def get(self): do_something_stupid()

then my coworkers can still use `requests.Request` itself without getting my bad behavior, and if they find themselves looking at a flaw in my code, they know not to blame the upstream author. What's different about the Swift situation?

I'm kind of horrified at the idea of an OOP language that wouldn't easily let me override a parent class's behavior. If I break something in the subclass, it's on me to fix it. That never reflects poorly on that parent class.

<comment><USER8> Sure, it only affects you. The problem is that changes to superclass can now break your code.

For example, perhaps right now the function looks like this:

        def get(self, url, method='GET'):
            ...

        def post(self, url):
            self.get(url, method='POST')

You override get, to add some additional functionality. All is fine.

Then somebody realizes that the original code was silly, and rewrites it:

        def get(self, url, method='GET'):
            if method != 'GET':
               print "DEPRECATED!"
            self.request(url, method=method)

        def post(self, url):
            self.request(url, method='POST')

It seems to do the same thing, and probably passes all the same tests. But suddenly, now your code doesn't get called for post requests and your additional functionality breaks in a mysterious way.

Perhaps its still your fault for doing a bad job subclassing, but its going to look like its the fault of the person who fixed the parent class.

<comment><USER9> > changes to superclass can now break your code

The same exact thing happens when using composition.

</comment></comment></comment></comment><comment><USER10> Final by default is correct, since otherwise you are effectively exposing and having to maintain an extra stable API towards subclasses, which is a nightmare and won't be done properly unless it's intentional.

In fact, having virtual methods at all outside of interfaces/traits/typeclasses is dubious language design since it meshes together the concepts of interface and implementation and makes it inconvenient, impossible or confusing to name the implementation instead of the interface.

The issues in the discussion are instead due to Apple's framework code being closed source and unmodifiable by users and developers, and also buggy according to the author.

<comment><USER11> I'm an app developer. This change will absolutely break some of my stuff, and it's going to suck. Even with that, I do feel OP is taking an overtly political stance (even using the word "banned".) This change is perfectly reasonable within the already-strict mindset of Swift. Having a less-strict language just to work around potentially buggy Apple frameworks would be setting a bad precedent.

Using "final" also has some performance wins by reducing dynamic dispatch. [1]

[1] [https://developer.apple.com/swift/blog/?id=27](https://developer.apple.com/swift/blog/?id=27)

<comment><USER12> What will it break? Name one single thing.

Remember, the only change here is the _default_ for classes that don't specify it. As I stated on the list earlier, I guarantee you 100% that when Apple starts vending framework classes written in Swift they will make an intentional decision on every single class as to whether it is final or not. And the language default won't impact that at all.

<comment><USER13> If Swift changes the default, do you think they'll Audit all of UIKit and AppKit to fix it? They're still transitioning things over to Swift piece by piece still. I imagine they'll let defaults work the way it is unless there is a good reason not to.

</comment></comment></comment></comment><comment><USER14> I find this slow march in "modern" language design toward completely static compilation models troublesome to the extreme. It feels like a significant historical regression; they speak as if Smalltalk and the Metaobject Protocol are things to revile and shun, not elegant programming models that we as programmers should aspire to understand and use in our own programs.

To elide these features as a matter of principle implies that you believe your compilation model is perfect, and is able to deduce all information necessary for optimal compilation of your program statically, perhaps augmented with profiling information you have obtained from earlier runs. It also makes upgrading programs for users more difficult since patches must be applied in a non-portable manner across programs. I shan't mention the fact that they make iterative, interactive development an ordeal. The Swift REPL is progress (although REPLs for static languages are nothing new), but it still pales in comparison to the development and debugging experience in any Smalltalk or Lisp system.

There is no reason why the typing disciplines Swift is designed to support should demand the eradication of all dynamism in the runtime and object model.

If you have never heard of the Metaobject Protocol or similar concepts before, here is the standard reference: [https://mitpress.mit.edu/books/art- metaobject-protocol](https://mitpress.mit.edu/books/art-metaobject-protocol)

This discussion also reminds me of this essay by Richard P. Gabriel: [https://www.dreamsongs.com/SeatBelts.html](https://www.dreamsongs.com/SeatBelts.html)

<comment><USER2> OK, but Swift is an ahead of time compiled language, unlike Lisp or Smalltalk. That makes the tradeoffs completely different.

</comment></comment><comment><USER15> Methods in C# are non-virtual by default and almost every class in the core libraries is sealed and the world hasn't ended in .NET land.

I have definitely done some hacks to work around bugs in frameworks I've used. But I've _also_ had to deal with users who broke _my_ libraries or inadvertently wandered into the weeds because it wasn't clear what things were and weren't allowed.

This is one of those features where the appeal depends entirely on which role you imagine yourself in in scenarios where the feature comes into play.

<comment><USER16> But .NET definitely struggled with cultural issues around making APIs virtual. Because of Microsoft's strong 'no breaking changes' rule they were extremely cautious about adding virtuals- in my experience it was not unusual to see it costed at 1 week dev/test time for a single virtual on an existing method (in WPF).

C++ is also non-virtual by default and I think it's worked out OK.

<comment><USER17> Some of the cultural issues around avoiding virtual came from hard lessons with v1.0. After shipping v1 they realized that there were a large set of security and compatibility issues with not having framework classes sealed. No-one I worked with really like the idea of sealing all our classes, but the alternative was an insane amount of work. It is just too hard to hide implementation details from subclasses. If you don't hide the details then you can never change the implementation.

I can't say for swift, but there were also real security challenges. It is hard enough to build a secure library, but to also have to guard against malicious subclasses is enough to make even the most customer friendly dev run screaming. My team hit this and it cost us a huge amount of extra work that meant fewer features. vNext we shipped sealed classes and more features and the customers were happier.

</comment></comment></comment><comment><USER18> Sealing classes by default is troubling. I'm having a bad feeling about the future of Swift. I also think it's growing too big already.

<comment><USER19> The fragile base class problem shows that not sealing is also troubling, much more than sealing them.

<comment><USER4> Hmm...that problem that both Objective-C and Smalltalk don't have...

<comment><USER19> All OO languages suffer from it.

<comment><USER18> How big of a problem is it really?

<comment><USER19> Quite big for library writers.

You cannot ever be sure how changes to the public / protected API from a class affects classes down in the inheritance tree.

Specially bad is when methods that were never supposed to be overwriten change their semantics, leading to erratic behaviour on classes that have overwritten them.

</comment></comment></comment></comment></comment></comment><comment><USER20> The whole argument boils down to how developers were treated with apples libraries so far. The submission/review process is quite prohibitive, and the core libraries (like almost every piece of software) have flaws. Together with the opaque intransparent radar bug reporting / bug resolution system, you had to resort to method swizzling to keep your sanity (I guess the PSPDFKit guys can speak volumes on that).

Going forward, I hope apple sticks to the open source approach they took with swift. That more of the libraries will follow, with Apple encouraging more community participation.

</comment><comment><USER21> This is a correct decision. APIs have to be designed to support subclassing properly. It's also a performance win.

<comment><USER18> Interesting, it's like how Swift forces you to think about nulls. Now you have to think about people subclassing your classes.

</comment></comment><comment><USER22> As an iOS developer for years, I have never resorted to a runtime hack, subclass and re-implement, or similar trick to work around a framework bug.

Our team rarely shipped a new version of the app concurrent with a .0 release of iOS, so that might be related, but we always found ways to work around issues while respecting the APIs provided.

I understand other products and other developers have had a different experience, but I'm not overly concerned about this particular change.

<comment><USER23> OK, but: As a (Mac) OS X developer, in 2003 I implemented a custom NSTextView subclass to fix two specific bugs that were impossible to work around otherwise. That subclass was used in everything we shipped for years and years... on OS X 10.3, 10.4, 10.5, 10.6, and 10.7.

(After that I lost track, but I think one or both bugs were finally fixed.)

I feel like maybe this change will make Apple frameworks more stable in the long run, but that will take a tech eternity (10+ years).

In the meantime, the overall user experience will be degraded by system framework bugs that can no longer be worked around. It just sounds more aspirational than realistic.

"Let's make it impossible for developers to work around our bugs -- that will _force_ us to write perfect software!"

</comment></comment><comment><USER24> Apple has been pushing composition over inheritance for years. No surprises.

<comment><USER25> I'm not sure so i'm asking : is your comment ironical ? I see inheritance everywhere on uikit.</comment></comment>


Singapore uses this app to help fight Covid-19; open source soon - <AUTHOR> https://www.tracetogether.gov.sg/ <comment><AUTHOR> Coming soon: open source [https://www.theregister.co.uk/2020/03/26/singapore_tracetoge...](https://www.theregister.co.uk/2020/03/26/singapore_tracetogether_coronavirus_encounter_tracing_app_lessons/)</comment>


House of Commons committee re-invites Mark Zuckerburg to appear [pdf] - <AUTHOR> https://www.parliament.uk/documents/commons-committees/culture-media-and-sport/180501-Chair-to-Rebecca-Stimson-Facebook-re-oral-evidence-follow-up.pdf <comment><USER2> I'm surprised that neither these questions nor those by U.S. Congress last month include a request to provide an exhaustive list of all types of data that Facebook has on its users, including data bought from third parties (e.g. credit score) or acquired via subsidiaries (e.g. browser history from that Vonavo VPN app). Or am I missing something, and is such a list available somewhere?

<comment><USER3> It's Onavo

</comment></comment><comment><USER4> (edit: When I wrote this, this thread was a link to the following Twitter post, but of course that context was lost by Hacker News.)

[https://mobile.twitter.com/CommonsCMS/status/991302283920015...](https://mobile.twitter.com/CommonsCMS/status/991302283920015361)

Almost certainly more useful, providing not just the tiny bit of understanding from this tweet and the full wording of the letter but also providing context and reasons and, well, actual information (Twitter is so damned useless), is this this article from the Parliament.

[https://www.parliament.uk/business/committees/committees- a-z...](https://www.parliament.uk/business/committees/committees-a-z/commons- select/digital-culture-media-and-sport-committee/news/fake-news-post-facebook- evidence-17-19/)

</comment><comment><USER5> I'm not that familiar with the UK legal sphere - how and why is this an ultimatum and what happens if Zuckerberg doesn't appear before the committee?

<comment><USER6> [https://www.instituteforgovernment.org.uk/blog/contempt- witn...](https://www.instituteforgovernment.org.uk/blog/contempt-witnesses- select-committees)

<comment><USER7> And the relevant bit (for persons under UK jurisdiction):

> Historically, those found guilty of contempts could be fined or imprisoned, > but those sanctions have not been used by the Commons since 1666 and 1880 > respectively. For all sorts of practical, legal and constitutional reasons, > it is highly doubtful that the modern House would seriously consider this.

</comment></comment></comment><comment><USER8> If they want answers on legal proceedings and advertising, they need to invite the Chief counsel and Boz; Mark probably knows very little about either.

</comment><comment><USER9> Would be pretty useful to see Mr. Zuckerberg in a parliamentary style debate (the motion, arguments for, arguments against, counterarguments on both sides, and a vote). For examples of how to conduct this style of debate a great podcast that follows this format is "Intelligence Squared". "The Motion" could be "FB is good for society".

</comment><comment><USER10> "MPs found the majority of Mr Schroepfer's answers about Facebook's business practices, including their policies on the privacy and protection of users' data and their relationship with Cambridge Analytica and associated companies, to be unsatisfactory."

"Mr Schroepfer, who was appearing as a witness in the Committee's inquiry into Fake News, failed to answer fully on nearly 40 separate points, including.....

This is interesting, so are these like a rogue group of MP's who actually take their job seriously and think government should return to its non-theatre basis?

<comment><USER11> > This is interesting, so are these like a rogue group of MP's who actually > take their job seriously and think government should return to its non- > theatre basis?

This is possible, but the theatrical value of these (televised) hearings shouldn't be underestimated.

<comment><USER10> But if politicians asked _real_ questions and _demanded actual answers_ , the theatrical value could be replaced by actual value, which is supposed to be the point of the democratic process in the first place. As it is, more times than not we are paying a massive number of very expensive people to engage in theatre that no one wants to watch to produce results that often do more harm than good, and are rarely resemble what the voting public wants.</comment></comment></comment>


Socialcam Founder: There Will Be No Instagram of Video - <AUTHOR> http://pandodaily.com/2012/07/17/socialcam-founder-there-will-be-no-instagram-of-video/ <comment><USER2> There was. It's called YouTube.

<comment><USER3> By this logic, Flickr was an Instagram for pictures.

<comment><USER4> It could have been.

<comment><USER5> :,(

</comment></comment></comment></comment><comment><USER6> >No one invests hoping for a mere 3x return.

As in, in the VC sense where you expect most people to fail, etc, right?

'Cos any day of the week I'd like to have some access to 300% returns. Especially 300% in 6 months.

<comment><USER7> In VC mathematics, you always divide by the entire lifetime of the fund to calculate your rate of return, because there's no recycling allowed. You also got to factor in compound interest and management fees, so in Socialcam's case, this works out to about 3-4% return. Dan Shapiro explained it well here:

[http://www.danshapiro.com/blog/2010/08/vc-insanity- economics...](http://www.danshapiro.com/blog/2010/08/vc-insanity-economics/)

edit: calculating Socialcam's ROI

<comment><USER8> The HN discussions on the article are also very good:

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

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

</comment></comment></comment><comment><USER9> Er, final line is "There may still be an Instagram-style winner in the social video race..."

<comment><USER10> Winner, yes, but I think the core of it is that he doesn't believe there will be a billion dollar exit.</comment></comment>


Tell HN: To improve quality of conversation, HN should not limit deletion time - <AUTHOR> Say I reconsider the tone of a comment I have made on HN.  Chances are I cannot delete it because too much time has passed.<p>I think that there should not be a limit on deletion time, so that people may at any time delete their posts having reconsidered the tone of conversation. <comment><USER2> Keep in mind that there is a 2 hour window on deletion, which is more than enough time for you to catch your mistakes/address widely downvoted comments.

 _However_ , a recent change made it so that a reply to your post will disable deletion. The intent is that it discourages conversations from being broken up, but after a couple months with it, I don't think the advantages outweigh the disadvantages.

</comment><comment><USER3> You can always follow-up with a new comment containing a retraction or apology or whatever.

A problem with extending that window is that there can be subsequent comments in reaction to yours (and, in turn, other comments reacting to _those_ ), and removing an original well after the fact can ruin context.

</comment><comment><USER4> It would be pretty difficult to read a number of older posts if let's say 4 or 5 "flaming comments" were deleted. Then you would have 10 responses that would left on the record (without clarity as to what they were intending to address).

It would basically ruin the majority of older posts where good conversations (read with opposing positions) existed.

I like the content left in its genuine (or original) form.

</comment><comment><USER5> personally, I find the deletion time limit a bit arbitrary. I suppose the finality is there to make one consider the tone before posting. there's nothing worse than posting a karma-burning comment and coming back to find there's nothing you can do about it.</comment>


The Founder of Panera Bread Explains the Economic Forces That Led to Trump - <AUTHOR> https://www.newyorker.com/business/currency/the-founder-of-panera-bread-explains-the-economic-forces-that-led-to-trump <comment><USER2> Panera had interesting CEO.

 _Shaich partly blames activist hedge funds, many of which buy shares in companies with the aim of pushing their management to make decisions that drive their stock prices up within a few months. According to Shaich, this makes it more difficult to invest in long-term projects, and create sustainable jobs.

Panera had its own encounters with activist investors. In 2007, the Shamrock Activist Value Fund bought a stake in the company, and, in 2015, Luxor Capital did the same thing. "I had activists twice—I almost lost this company," Shaich told me._

</comment><comment><USER3> I thought this was a neat idea (below). Imagine if _investors_ had voting privileges but _speculators_ didnt't.

 _"Tech titans including Reid Hoffman and Marc Andreessen have financially backed the creation of a new investment framework called the Long-Term Stock Exchange, which would give shareholders greater influence over a company the longer they hold shares."_

</comment><comment><USER4> Nice informative article but has only one sketchy paragraph on Trump. Almost as if the editors didn't want to talk about it.</comment>


Juniors Literally Can't Write Switch Statements: What Sr. Devs Need to Focus On - <AUTHOR> https://dev.to/robdwaller/juniors-literally-cant-write-switch-statements-what-senior-php-developers-need-to-focus-on-986 <comment><USER3> This whole article boils down to "new hires require training". Is this surprising to anyone?

Yes, those are examples of bad code - I've written it, and in a _code review_ (y'all do those, via reading pull requests or some other method, right? Your new hires don't just start shoving commits into master, _right_?), the senior developers pointed out my mistakes, and showed me the correct way to do things. Once I became a somewhat better developer, it was my turn to do the same thing for those who know less than I do - or even for those who maybe just got a bad night's sleep, and aren't at their best that day.

It is fucking frightening that this blog post needs to be written.

<comment><USER4> > This whole article boils down to "new hires require training".

There were also the parts about needless bickering in the PHP community, the responsibility of senior developers to guide junior developers, and the importance of keeping an open mind.

</comment></comment><comment><USER5> _Beyond actually coding stuff, the day job, the primary focus of senior developers should be to educate and guide junior developers._

As a general rule the thing that gets a developer to start writing better code is when they eventually come around to the idea that writing tests and documentation is actually worthwhile. Then they start write code that they _can_ write tests and documentation for, and then, as if by magic, their code improves.

As a senior the only thing you need to do is show them your tests and documentation, demonstrate why it makes life easier, and make sure they have time to do the 'additional' work of writing tests and documentation (juniors think it adds time rather than saving time; they think in the short term).

If you're feeling a little mean then you can decline their pull requests because the code doesn't have good enough test coverage. :)

<comment><USER6> There is a lot hidden in the "idea that writing tests and documentation is actually worthwhile." Few (any?) will argue against that. The problem is there are actually three skills embedded there.

I am coming to view it in three parts:

Testing code typically benefits most from being able to think about how the code is _not_ supposed to act.

Writing code is typically describing what you want.

Documenting code is talking about how all of the code is supposed to work together.

I think most examples online that try and get folks better at any one of these, pick an example that is worthless for the other two skills. In particular, writing solid tests for a function or unit does little to help document how it will work with all of the other parts. Writing good documentation for a unit is trivial, so not often applicable to a person's day job. And then seeing the documentation for a full piece is often too much to include the code and tests. (I'm talking specifically about "blog" level articles.)

</comment></comment><comment><USER7> I tend to classify the developer track using terminology borrowed from American high schools. "Freshman", "Sophomore", and then "Senior".

The Freshmen are straight out of school. Hopefully the DO know how to write a `switch` statement (that's just basic competence)... but they typically know little or nothing about working in a team, source control branching strategy, unit testing, breaking tasks up into tickets and estimating them, and a thousand other aspects of real-world professional development.

The Sophomore phase is when you know enough to be dangerous. You've mastered all of those basics, and have set about learning more advanced topics. You've learned a 100 different design patterns from books or blogs, and can't wait to find excuses to incorporate each one _somewhere_ (whether justified or not). You've learned Groovy/Scala/Clojure/Kotlin whatever, and lobby to migrate your company's application because going back to plain Java is too unbearable. Etc.

The Seniors aren't much more knowledgeable than the Sophomores. They've simply gone through enough ego-gratification, that at this point they have the confidence to demur on complexity and favor simplicity instead. They tend to write more documentation and code comments, explicitly declare their types for visual clarity, terminate statements with semicolons even if their language doesn't require it, etc. They can push back on bad business requirements, and tend to offer more conservative (i.e. informed and realistic) estimates.

Typically, the Sophomores teach the Freshmen. The Seniors teach the Sophomores. I've never seen anyone jump over the middle step.

<comment><USER8> A question on your model then: How does the progression of people through those "states" work. Are they judged by the team?

I've interacted with a couple of senior developers who - without a doubt - <USER2> considerably more experience in the industry, knew more about niche-specific technology etc. etc, but were worse in all the things you just listed for the freshmen than some of the people I studied with.

Experience and insight might get you very far, but there are also people who really don't care to learn new approaches on a certain topics, and those might as well be unit testing, versioning or even the readability of code.

I guess in bigger companies, this might balance itself out, but if your dev team consists of about five people, there's always the chance you're in for a surprise if you're the new hire.

</comment></comment><comment><USER9> Ok, I'm relatively new to professional coding (I tried to be an engineer for a while before being lured in by the programming money). I have a question: what exactly is a junior developer? I mean, if you don't understand how a 'switch' works, I would have thought that basically means you can't program, and shouldn't be working as a programmer.

Is it really the job of non-junior programmers to teach the junior ones how to code? What level would you expect a "junior C++ developer" to be?

<comment><USER10> > Ok, I'm relatively new to professional coding (I tried to be an engineer for > a while before being lured in by the programming money). I have a question: > what exactly is a junior developer? I mean, if you don't understand how a > 'switch' works, I would have thought that basically means you can't program, > and shouldn't be working as a programmer.

Generally I think misusing language constructs as in this 'switch' example - or misapplying patterns - are the hallmarks of a junior. They used the screwdriver handle to drive the nail in, and sure, it works, they just didn't know a hammer was available to do it better.

And without wanting to get too silly with the tools analogy, the eventual accumulation of those tools in your brain's toolbox is what makes you move from junior to mid to senior, but there's no clearly defined line of when that is, or which tools they are, because the field is so varied and each language/ecosystem carries its own nuances.

</comment></comment><comment><USER11> Yes let's create another clearly delineated group: junior devs vs senior devs, liberal vs conservative and so on. There are plenty of senior devs who would do the same thing.

The article wouldn't be that bad if it was titled "make an effort to understand before you are blindly copying from "Stack overflow".

Maybe the whole industry would do well learning the basics of coding.

<comment><USER12> > Yes let's create another clearly delineated group: junior devs vs senior > devs, liberal vs conservative

i think it's a clear sign that you're being a bit reductive if you can compare "junior vs senior" with "liberal vs conservative" and not bat an eye.

<comment><USER11> I am a bit reductive but I really hate it when people draw these clear boundaries and then associate certain attributes with the groups they just created. There is no clear line between junior and senior and there is no clear line between liberal and conservative. These labels hinder improvement.

Back to Junior vs senior: there are plenty of senior devs who do exactly the same stuff. So in my mind it's not junior vs senior but people who think about what they are doing vs others who don't.

</comment></comment></comment><comment><USER13> (disclaimer: I'm self taught, did a few months of University but couldn't afford more - dirt poor family).

I'm a little confused(and more than a bit shocked), isn't this what University is suppose to teach?

I agree with the author about mentoring and passing on experience(infact as soon as I have reliable net I'll be checking out his links in that article, and any previous posts he has made), but how can you pass any course without learning the basics of a switch statement.

Although I do admit in guilty of copy/pasting some code I have gotten online :-p (purely just to get-shit-moving again when I'm stuck, I'll always refactor later to learn how it works exactly).

Unless I'm missing something (hell I would kill for a junior dev job without the expense of University :-p), how did these juniors pass their exams?

<comment><USER14> That's the thing. If they went to school for Computer Science, depending on the program, we aren't necessarily taught how to code. More about how to think and solve problems. I never had to use a switch statement in my Algorithms or Data Structures course.

I learned how to write tests after pairing with a person from Twitter on some Rails work a few years back. He randomly saw me testing things manually and then he was like, "Let me show you how to write tests for this so you don't have to waste time manually testing." And I've just written tests since then. But my University never taught us how to write tests for our code. Some professors gave us a test suite for our code to run against as a sanity check, but that's about it. I became a better software engineer through great mentorship and building stuff in my free time.

<comment><USER13> That's actually really surprising. Thank you for your input.

I had assumed it would have been -teach basics of code, explain the thinking behind it and why to use certain things at such time, then slowly expand upon that. Hmm certanly something for me to think about.

<comment><USER15> In practice, I think you'd be hard put to find a university CS degree that didn't involve a fair bit of programming. There was often more distinction in the past, especially at schools where CS came out of the Math department for historical reasons. But look at something like the Intro to Algorithms and CS class at MIT--there's a two-part MOOC on edX--and there's definitely programming. (Although it's clearly designed for people who already have some programming background. The assumption at top-tier schools tends to be that incoming students who want to major in CS already know programming to some degree, which has it's own set of problems but that's another topic.)

<comment><USER13> Hmm that an interesting point of view for those schools to take. I'm sure they have a reason for it, I just haven't quite figured it :-)

Putting it into something I'm more familiar with(eg formally trained), if I had a chef who had just finished his degree I'd certainly expect them to understand how flavours combine, every single standard cooking technique, basic soups, stocks and sauces, as well as able to prepare all standard western food from purchasing, through preparing from the full carcass (for meats) up to presentation.

Which for me I had assumed can degrees would do for programming.

Well the more you learn I guess :-)

<comment><USER15> Top-tier engineering schools tend to be pretty theory-heavy. To the degree they teach programming, it's mostly a means to an end. It's not MIT's objective that you can code a working website by the time you graduate. You may be able to but it's mostly a byproduct of being exposed to programming as part of various course work.

It's also the case that many/most of the students coming into a school like MIT to major in CS have been playing with computers for a long time. Which tends to lead to a course program that assumes more prior knowledge than is the norm with other types of engineering. Unfortunately, this has the effect of making it harder for students who don't have that prior background to get into computers in college.

The chef example is pretty different because any cooking school is very hands on and is probably pretty light on the theoretical underpinnings of the "science of food."

<comment><USER13> Hmm okay, I appreciate the reply, I don't necessarily agree it's the best course, but then again, I'm not a call major, so it's mostly gut feeling(always a bad place to start from haha).

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> I'd like to mention that job title alone is no indication or measure of being a senior developer in my own personal opinion. Neither is years of experience.

I know many developers, who have years of experience, at one or many companies, startups and big (public) corporations, but continue to make what one could call junior or beginner mistakes, never seem to learn from past experience, and/or continue to commit and pull request bad, breaking code.

Also, I think calling out co-workers on a public blog (on the front page of Hacker News no less) and ridiculing their code, no matter how mind blowing, at any company, is not very professional. I don't care if you are at a young hot start up with twenty year olds or not even a formed company yet or work in a corporation with 80,000 other engineers.

I realize everyone probably has their own definitions of junior, senior, and whatever other level of development hierarchies we can come up with, but I personal think this blog post and copying code directly off a website willy- nilly like the article describes are both junior level or unprofessional attributes.

Disclaimer, I couldn't stomach finishing reading this post.

</comment><comment><USER17> As a senior dev, I'd recommend moving off of PHP or at least training junior DEV's how to code properly before using PHP. Even in the old days of BASIC with numbered lines you could teach solid principals. These languages just have more ways to screw up, which need to be understood by anyone using them. But to understand how and why you can screw up, you need to understand what good coding practices would look like.

<comment><USER18> PHP is a very strong language (Esp php 7.0) .. it's grown up a lot since the crap from 4 and early 5 branches.

There's totally nothing wrong with using PHP as it's found on most servers, and available just about everywhere.

Junior's should be trained though on best practices, how to write testable/maintainable/self-documenting code, the different Design Patterns and using things like repositories properly and why/why not to use them depending on size and scope of project...etc..

<comment><USER17> Can you still ignore encapsulation and call methods across pages (classes)?

</comment></comment></comment><comment><USER19> I know senior Java devs with 20 years experience, who can not write switch statement. It is pretty limited language construct.

<comment><USER20> It's weird, and even harmful in many cases.

A modern goto of sorts: it has performance benefits [1], but not overall readability ones.

        switch (x) {
           case 0:
               doThing1();
               break;
           case 1:
               doThing2();
               break;
           default
               doThing3();
       }

vs

        if (x == 0) {
            doThing1();
        } else if (x == 1) {
            doThing2();
        } else {
            doThing3();
        }

This somewhat unsafe form of switch-case made it into C, Java, C#, and JavaScript, and cases the great iOS SSL bug of 2014. [2]

[1] [https://en.wikipedia.org/wiki/Duff%27s_device](https://en.wikipedia.org/wiki/Duff%27s_device)

[2] [https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a- got...](https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail- apples-ssl-bug-explained-plus-an-unofficial-patch/)

<comment><USER21> I use it because if your switch is exhaustive, it's nice that the compiler can tell you exactly which parts of your code need to be updated when you add cases to an enum. (Also, in Swift, fallthrough is opt-in instead of opt-out, which is great.)

<comment><USER20> Scala pattern matching is the same.

Both are less easy to misuse than C switch.

</comment></comment></comment></comment><comment><USER22> This has nothint to do with junior developers; this has to do with bad developers who don't know what a switch statement is. I'm glad they used it as a learning opportunity.

(Though, I'm kind of baffled how they didn't know this stuff.)

</comment><comment><USER23> There's a few things potentially wrong (or right, in fact, depending on context - maybe you want them to fall through) with those switch statements, so I'm not sure precisely what he's objecting to...

<comment><USER24> I can't think of any case where `switch(true)` is what you actually want to do, barring some weird compiler workaround or hack or something.

And the first one is akin to:

        if (data == 1) {}
        if (data == 2) {}
        if (data == 3) {}
        ...
        if (data == thevalueIactuallywant) { doSomething(); }

<comment><USER25> Actually in the hardware world I see switch(true) a lot. It is very useful for creating a priority encoder. For example you have 3 interrupts with priorities int0 > int1 > int2. Then this code is pretty clean and concise:

      Switch(true) {
        Case(int0):
          // Do stuff for interrupt 0
        Case(int1):
          // Do stuff for interrupt 1
        ...

<comment><USER24> I stand corrected. Assuming no fallthrough, what are the advantages of this over chaining if and else-if? Just to look cleaner?

<comment><USER26> I believe the point is to explicitly take advantage of the fallthrough.

<comment><USER24> Well, then it would just be chaining if statements.

</comment></comment></comment></comment></comment></comment><comment><USER27> iirc the last time i used a switch was to create a static factory method to instantiate objects. the static class had a static method that took an enum as input. the return type was an abstract base class. the method switched off of the enum, new'd up the type - did some common initialization - and returned the new object to the caller. this approach keeps your "creation" logic in one place.

</comment><comment><USER28> (Did not read the article, judging only by its title.)

Do not teach switch statements, they are old hat and are error-prone.

Teach pattern matching statements. Actually, even kids understand them much better.

(To downvoters: yes, I mean using better, more adequate tools first, to teach the important principles. The traditional flintstone tools still in use can be taught later, from a vantage point of better understanding.)

<comment><USER29> I remember Nick Lowe in an interview saying one of the best things about getting older is you get less judgmental. He was talking about music and his example was that one day he realized: hey, Barry Manilow is actually pretty good.

Those old hats are actually pretty good.

<comment><USER28> Not all hats get old the same way. Between Cobol (1959), Fortran (1957), and Lisp (1958), some aged better than others.

C may be considered to have aged exceptionally well, _despite_ its syntactical warts, like the declaration syntax, switch statement, lack of module system, etc. Unfortunately, some of these features were imported to other languages because of the familiarity, not because of e.g. good ergonomics or deep logic behind them.

(This is to say nothing about PHP as a language.)

<comment><USER29> Ok, I'll give you s/those old hats/that old hat/. I use case expressions in my Lisp code all the time. Those are switches and they're pretty good.

<comment><USER28> (case...) has no fall-through, the hallmark of the switch statement. Hence the sanity of the former.

</comment></comment></comment></comment></comment><comment><USER30> Literally overuse of "literally."

</comment><comment><USER31> Someone who can't write (or doesn't understand the concept behind) a switch statement shouldn't really be called a junior developer...

</comment><comment><USER32> Is there any "safe space" I can escape the ever increasing stupidity of our civilization? I try MOOCs, university degrees, etc. but it's just getting worse and worse. It's like the Nothing in Neverending Story that was taking over the world...</comment>


A minecraft map viewer implemented in pure Javascript and WebGL - <AUTHOR> https://github.com/quantsni/JS-Minecraft-Map-Viewer <comment><USER2> Here's a clickable link: <http://osm.mapki.com/JS-Minecraft-Map-Viewer/>

... Chrome was giving me security errors when I loaded it locally.

</comment><comment><USER3> Chrome 11.0.696.68 (0) seems to have some objections to the drag & drop functionality. Dragging a .mcr file onto the appropriate region on the page has Chrome download the file.

</comment><comment><USER4> Try it again. There were some minor bugs causing the thing to asplode. Seems to be fixed with the latest pull request.

Also, you'll probably have to drop this thing on a virtual host. Local filesystem restrictions seem to break it also.

</comment><comment><USER5> I'm using Chrome 12.0.742.53 and I have tried this both locally and through a webserver and all I am getting is loading.

<comment><USER5> OK, I figured it out. It was working but I needed to use the arrow keys and the mouse to move to find the right view. If you are too far away the land disappears.

Here is a screenshot: <http://i.imgur.com/SkYHs.jpg>

</comment></comment><comment><USER6> any chance of getting a demo version up on a url?

<comment><USER7> it's client-side only. You can just clone the repo and open index.html in your browser

</comment></comment><comment><USER8> Demo anywhere?

<comment><USER9> yea on your computer ;). though screenshot(s) would be nice.</comment></comment>


Why you benefit from using UTF-8 Unicode everywhere in your web applications - <AUTHOR> http://www.webforefront.com/archives/2010/10/why_you_benefit.html

<comment><USER2> I find this a very interesting topic. Character sets and their encodings are usually completely invisible to the end user, and often even to the engineers working on the system. But, when a problem rears its head, it can be nasty.

A great example is certain api calls in legacy Windows code that modify registry keys. Using the legacy api call can lead to a single-byte encoding of the key, making it un-editable by multibyte methods (i.e. the newer methods that are supposed to depricate the old ones). As much as people love to hate on MSFT, I've often felt honest pity for the programmers who have to build on top of 20+ years of code without breaking backward compatibility.

Also, there was an interesting discussion on slashdot recently:

[http://developers.slashdot.org/story/10/10/31/2127201/Mr- Pik...](http://developers.slashdot.org/story/10/10/31/2127201/Mr-Pike-Tear- Down-This-ASCII-Wall)</comment>


Trustwave sued with Target over data breach  - <AUTHOR> http://www.chicagobusiness.com/article/20140325/BLOGS11/140329865 <comment><AUTHOR> From the actual complaint:

 _As early as 2007, Dr. Neal Krawetz of Hacker Factor Solutions published a white paper entitled "Point-of-Sale Vulnerabilities" (the "White Paper"). According to the White Paper, POS systems "provide virtually no security" and few POS systems "implement best practices for handling sensitive information, such as the Visa standards for credit card management."6_

and

 _Thereafter, at least 17 copies of the White Paper were downloaded to a domain owned by Target, the most recent download occurring in May 2013. Target personnel used the search term "POS vulnerability" to locate and download the White Paper. As is now apparent, Target did not heed the White Paper or implement its suggestions._

[edit] link to the Dr. Krawetz paper: [http://www.hackerfactor.com/papers/cc- pos-20.pdf](http://www.hackerfactor.com/papers/cc-pos-20.pdf)</comment>


Is it socially acceptable to wear Google Glass to a bar? - <AUTHOR> http://www.quora.com/Project-Glass/Is-it-socially-acceptable-to-wear-Google-Glass-to-a-bar?srid=OQY&st=ns <comment><USER2> Where else? The bar is the perfect place. Face recognition app shows me the name of every girl so I can hit on her.

<comment><USER3> And her glasses show you're a player so she can blow you off!

<comment><USER2> I am wearing a fake stash, of course!

</comment></comment></comment><comment><USER4> I don't think it is socially acceptable - it's like walking around with a movie camera over your shoulder where you've taped over the red LED. No-one you're talking to will know whether they're being recorded, resulting in a very uncomfortable feeling.

There's also an aspect of rudeness - when I talk to you and you're wearing these glasses I will automatically assume you're doing something different while I'm talking, which would feel very annoying. It's a little bit like the person I'm talking to is constantly staring at his/her smart phone.

If these glasses take off I can imagine explicit or implied "No Glasses"-policies at bars, and especially restaurants.

</comment><comment><USER5> Wait, you can actually buy google glasses?

I still don't understand what they are supposed to be used for. As for the question, of course it's silly: it depends on which bar you are going to and at what time.

<comment><USER6> They are supposed to replace your bluetooth... well, also your phone... mmmm.... as a matter of fact also your notebook.... now that I think about it also your Facebook since it integrates exclusively with Google Plus... mmmm... Oh i know, they are supposed to replace real life! :D

</comment></comment><comment><USER7> I think I´ll wait until those things are contact lenses...

</comment><comment><USER6> It is acceptable if you want to look like the geekish guy in town (not to mention one of the luckiest). It is not ok if you wish to hookup, I cannot image a pickup line that starts... "hey Pamela, I did a reserve google image search of your face and found out that you use pretty neat lingerie" :/</comment>


Amazon fires worker who led strike over virus - <AUTHOR> https://www.bloomberg.com/news/articles/2020-03-30/amazon-worker-who-led-strike-over-virus-says-company-fired-him <comment><USER3> Here is the key point Amazon claims he was exposed to the worker on March 11th. Over the weekened he said he is organizing a strike, so over the weekend they order him and only him into quarantine. A full 18 days after his 5 min exposure. From my reading of it, this almost certainly looks like retaliatory action due to the strike, and a company using the excuse of quarantine to cover it up.

Key excerpts from a much clearer article. And yet again, why you never 100% believe a company's PR response when they're trying to cover themselves. They tell just enough truth, but use it to intentionally mislead.

[https://www.theguardian.com/us-news/2020/mar/31/amazon- strik...](https://www.theguardian.com/us-news/2020/mar/31/amazon-strike- worker-fired-organizing-walkout-chris-smallls)

> _According to the company's previous statements, the infected co-worker in > question last reported for work on 11 March. Had Smalls been exposed that > day, a 14-day mandatory quarantine would have made him eligible to return as > soon as 25 March._

> Smalls said Amazon did not send him home until _28 March, three weeks after > the exposure._

> "No one else was put on quarantine," he said, even as the infected person > worked alongside "associates for 10-plus hours a week".

> "You put me on quarantine for coming into contact with somebody, but I was > around [that person] for less than five minutes," he told Vice.

> According to Amazon, no one else was fired. Smalls said he was considering > legal action, calling it "a no-brainer".

<comment><USER4> We should apply rigor to both sides. Each has incentive to cherry pick and mislead.

> key point Amazon claims he was exposed to the worker on March 11th

Did they claim that? I'm looking for a source on this. "According to the company's previous statements, the infected co-worker in question last reported for work on 11 March", but when you look at their linked source[1] it says: "Amazon confirmed an associate, who reported for work on 11 March, has since been diagnosed with Covid-19".

> "No one else was put on quarantine," he said

Is this confirmed? You can't just assume this to be true. Pretty damning if so, though.

> "You put me on quarantine for coming into contact with somebody, but I was > around [that person] for less than five minutes," he told Vice.

Viral transmission has no minimum timeline and often occurs at first point of contact (e.g., handshake) or cough/sneeze at any time. Kind of irresponsible to even print that quote without correcting the argument.

It may be that Amazon retaliated, but stuff like this doesn't prove it. We need the hard facts. At this point it's unclear and sounds fishy on both sides.

1\. [https://www.theguardian.com/technology/2020/mar/30/amazon- wo...](https://www.theguardian.com/technology/2020/mar/30/amazon-workers- strike-coronavirus)

<comment><USER5> I really hate it when people use he said/she said type arguments to pretend that they are being objective and 'rigorous'.

There is a reason that the courts have something called 'burden of proof'.

When an individual worker does something a large company doesn't like and they fire him, the burden of proof in my mind is on the company. Because HR has professionals and if they can't tell a better story than what we are seeing, then retaliation is the reason 90% of the time.

It isn't unclear. It is perfectly normal for companies to get rid of the whistle blowers. That's why there are (weakly enforced) laws against it.

<comment><USER6> It's weird that you mention courts and then in the next sentence say this:

>the burden of proof in my mind is on the company

Because that is not how the courts operate. It is up to the person making the accusation (which in this case is the employee accusing Amazon of an unjust firing) to provide proof.

If you want to start dismissing all "he said/she said" arguments, then we might as well shut down this entire thread. We are never going to get any further than "he said/she said" unless someone in this thread has insider knowledge of this situation and is willing to break privacy agreements.

<comment><USER7> > It is up to the person making the accusation (which in this case is the > employee accusing Amazon of an unjust firing) to provide proof.

It's not necessarily either. It may very well simply be the preponderance of the evidence. Nevertheless, such a suit will be undertaken with the benefit of the discovery process.

[https://en.wikipedia.org/wiki/Discovery_%28law%29](https://en.wikipedia.org/wiki/Discovery_%28law%29)

<comment><USER8> Preponderance of the evidence is only used in arbitration, if he's suing then this is litigation. In reality, if he has a contract requiring arbitration or mediation instead of litigation then he has absolutely no power and no chance of winning because arbitratators/mediators are always hired by the company.

Even discounting all of that, the judge/jury/arbitrator/litigator would have to agree that sending him into quarantine and not others constitutes retaliation. To be completely honest, this kind of job is a huge joke. If you take too many bathroom breaks you won't hit your quota and they cN fire you for that.

The only way to win isn't to prove he was treated inconsistently, that can be ignored so long as the reason they stated for letting him go is true.

<comment><USER9> A quick google search says preponderance of the evidence is the standard of proof for most civil cases, so your assertion that it is only used in arbitration seems to be incorrect.

And arbitrators are always required to be agreed on by both parties.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> Tech companies in general and Amazon specifically seem scared to death of unionization. I think Amazon's actions in this matter are going to backfire tremendously.

<comment><USER11> ...and anyone who's had to work with a union can understand why.

<comment><USER12> My girlfriend worked at Macys. She was paid $14hr to do white collar admin work and was in a "union". Each month we would walk a few blocks away downtown to a small office. This is where we paid "dues". We couldn't pay online or have it deduct from her check. The person we handed our check to would just roll their eyes and throw her check into a pile of checks. She couldn't afford these dues. The best part? You were required to be in the union.

The union helped Macys layoff thousands of workers including her with no severance in a nice streamlined fashion. I am wrong, but this is what I learned: Unions are basically fat cat organizations that leach hard working people.

<comment><USER13> If your girlfriend was in a union, why do you say "we paid"?

<comment><USER14> I'm going to assune good faith here, maybe it's a cultural thing, who knows?

Regardless, here in the US it is typical for couples to form a partnership in which both income and expenses are shared. Possibly the reason for the recent emergence of the term 'Partner' to describe one's Significant Other.

<comment><USER13> I'm from Europe and it struck me as odd that the subject of the sentence switched from singular to plural for no good reason.

>My girlfriend worked at Macys

>She was paid

>(She) was in a "union"

>Each month _we_ would walk

> _we_ paid "dues"

> _we_ couldn't pay online

> _we_ handed our check

>throw her check

I was just wondering if there was some hidden twist behind the change of subject, so I asked bluntly.

</comment></comment></comment></comment></comment></comment><comment><USER15> Devils advocate: if you're sent home on full pay and told not to come in, and you come in, that's fireable (doubly so with coronavirus happening). If you do that, you need some strong evidence that it's retaliation. You have away the benefit of the doubt...

<comment><USER16> Except when the only reason you're being told not to come in is to prevent you from organizing a strike.

<comment><USER17> no, that individual was exposed to someone confirmed positiv with covid-19. one of the workers he worked with. both public and private sources confirmed it to me.

if you ask me, that's a pretty dick move for someone. Can't you wait your strike protest after your 14 days of quarantine? just 14 days.

<comment><USER16> Why is he the only one being quarantined then? And from what I'm seeing, the exposure was the 11th, so 14 days would already be up.

</comment></comment></comment></comment><comment><USER18> Is the newsworthy claim that this firing was illegally retaliatory?

In other words, is the claim that Chris Smalls was being vocal in reporting safety/health issues and was illegally fired as a result?

<comment><USER19> It's the most likely explanation, despite Amazon's obfuscations.

<comment><USER11> Really? Because the employee admits that he went to work despite being exposed to a covid-19 person, and despite being ordered not to.

Those facts are not even in dispute.

<comment><USER20> He was exposed 18 days before he was ordered to quarantine. Please do not try to say that there is some factual basis.

<comment><USER11> So? He did not get a covid-19 test, so for all Amazon knows, he's a carrier. There are plenty of lightly-symptomatic people who are ill and contagious for longer than 14 days.

<comment><USER21> Weird how no one else around him was quarantined. If he was contagious, then why didn't they quarantine everyone he was in contact with as well?

Maybe because it was bullshit and retribution on Amazon's part.

<comment><USER11> That is what _he_ claims. If you only believe one side of the story - <USER2> obviously you'll side with that side.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> This is a union busting, anti-labor and retaliatory firing. It is illegal in the United States.

Multiple employees have spoken out about the working conditions at Amazon's warehouse facilities over the last couple of weeks. Common complaints include a lack of protective equipment, sanitization, health monitoring, and working "shoulder to shoulder". Workers are getting sick, and Amazon isn't properly reporting the actual cases of COVID-19 at their facilities.

Source: [https://www.cnbc.com/2020/03/26/amazon-warehouse- employees-g...](https://www.cnbc.com/2020/03/26/amazon-warehouse-employees- grapple-with-coronavirus-risks.html)

Source: [https://www.msn.com/en-us/money/companies/whole-foods- amazon...](https://www.msn.com/en-us/money/companies/whole-foods-amazon- instacart-workers-to-strike-over-safety-concerns/ar-BB11VwT1)

Source: [https://www.thedailybeast.com/whole-foods-workers-to- strike-...](https://www.thedailybeast.com/whole-foods-workers-to-strike-after- amazon-instacart-employees-walk-out)

Mr. Smalls announced ahead of time that he was going to lead a general strike at his facility in solidarity with the instacart and wholefoods strike on the same day. This was reported in the media. Amazon knew this was being organized and waited to fire the worker until after the planned protest strike occurred.

Source: [https://apnews.com/cf27e9bec86d846447aad7e632484bea](https://apnews.com/cf27e9bec86d846447aad7e632484bea)

Here is Mr. Smalls talking about this in detail: [https://www.cnbc.com/video/2020/03/30/staten-island-whole- fo...](https://www.cnbc.com/video/2020/03/30/staten-island-whole-foods- workers-walk-out-over-coronavirus-concerns.html) \- All he was asking for was for the building to be sanitized after a confirmed case of COVID-19 occurred at his facility, at Staten Island near the epicenter of the pandemic in the United States in New York.

The attorney general of New York recognized this issue for what it is.

\---

New York Attorney General Letitia James said late Monday evening that "it is disgraceful that Amazon would terminate an employee who bravely stood up to protect himself and his colleagues."

"At the height of a global pandemic, Chris Smalls and his colleagues publicly protested the lack of precautions that Amazon was taking to protect them from COVID-19," she said. "Today, Chris Smalls was fired. In New York, the right to organize is codified into law, and any retaliatory action by management related thereto is strictly prohibited."

Source: [https://www.cnn.com/2020/03/30/tech/amazon-worker-fired- stat...](https://www.cnn.com/2020/03/30/tech/amazon-worker-fired-staten- island-warehouse/index.html)

\---

Here is another article discussing the actual conditions of Mr. Smalls Facility:

\---

Despite Amazon's efforts, Amazon employees at multiple facilities who spoke to CNBC argue that the measures aren't enough to keep them safe. They say uneven safety precautions at facilities across the country have sown feelings of distrust between workers and their managers. Workers say they've become worried that managers aren't being honest about whether employees are sick with the virus, so that they can keep the facilities open.

At some facilities, workers say essential supplies like hand sanitizer and disinfectant wipes are rationed or there's none available, putting them at risk of catching the virus. Warehouse workers say they're forced to choose between going to work and risking their health or staying home and not being able to pay their bills.

Source: [https://www.cnbc.com/2020/03/30/amazon-fires-staten- island-c...](https://www.cnbc.com/2020/03/30/amazon-fires-staten-island- coronavirus-strike-leader-chris-smalls.html)

\---

Amazon is in the wrong here. They retaliated against Mr. Smalls. This was a labor movement action, and they illegally fired Mr. Smalls for organizing at this facility.

These workers aren't asking for more money. They are asking for safe and sanitary working conditions. Are they not entitled to a healthy working environment?

Edit: Formatting issues. This was a copy-paste from a comment I made on a /r/business thread on reddit. Formatting on HN is a bit different. :)

<comment><USER23> How does at-will employment work with union busting? I remember working at Amazon they were very adamant about everything being at-will. Furthermore, in their management training, they didn't even tiptoe around their hatred of unions. They basically have a formal system developed to rat out any union organizers. The only reason I can infer for the existence of such a system is so that they can bust unions. They seem willing to take the legal risks that come with retaliation.

<comment><USER24> "Union busting" is a pretty vague term. There's no legal issue with a company hating unions or trying to prevent a union from forming, as long as they don't prevent employees from talking or retaliate against them for it.

<comment><USER22> That may be true, but in this instance there is clear evidence that Mr. Smalls was retaliated against for his labor organizing actions.

<comment><USER25> "Mr. Smalls was retaliated against for his labor organizing actions"

This is actually quite unclear

</comment></comment></comment></comment></comment><comment><USER26> Is there a company out there that does full time employment, with benefits, and pays their taxes (no dutch sandwhich/offshoring) in the same space as Amazon? That is, an online megastore, not worrying about AWS/cloud.

I think there's more than a few of us who are ready to vote with their dollars.

<comment><USER27> Costco delivers, and has a better corporate reputation than Amazon and Walmart.

<comment><USER28> But how much taxes does it pay? I very skeptical of any company that claims to pay its fair share.

<comment><USER25> Why is it a bad thing if a company has loss carryforwards and R&D credits?

</comment></comment></comment></comment><comment><USER29> I've been personally boycotting Amazon for years, and very happy with that decision. There are so many stories like this which are more or less egregious.

</comment><comment><USER30> This is the part where everyone stops buying from Amazon as a show of solidarity right?

<comment> y-c-o-m-b Now would be a great time to do this given the delays of the once-convenient fast shipping times. That said, what are the equal alternatives?

I think for most consumers, some things are absolutely required in order to switch away from Amazon: fast shipping, an inventory of hard-to-find items (e.g. car part or furnace element typically found on Amazon), a good refunds/returns system, and a massive crackdown on counterfeit products.

That last one is really important to me. Vendors are now filling legit containers of brand name items with fake product, then resealing them as new. This is becoming increasingly common now. I've noticed it with food (Pumpkin seeds, noticed a poor re-seal job), vitamins (a hole in the top seal beneath the cap despite being plastic wrapped), and Clorox bromine tablets for a spa (tablets didn't match store bought version). These products have all been obviously tampered with.

<comment><USER31> There's a fairly decent alternative to Amazon for most of the things you listed.

It's Wal-Mart and walmart.com. Oh. Not much better from a workers' rights standpoint than Amazon, I guess...

</comment></comment></comment><comment><USER32> Amazon being Amazon.

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

</comment><comment><USER33> If amazon is so shitty, and aws is so expensive compared to others... why on earth do people still pour all their cash in it

<comment><USER34> Where I work, we're basically donating money to the Bezos charity known as AWS at this point. We have so much waste in our multiple AWS accounts. We have people who double things up because they can't/don't/won't communicate (effectively). It's truly an unmanaged disaster. Bring it up to management, they don't seem to care. Even back on the napkin estimates are showing us wasting > 100k a year on unnecessary or outright unused AWS services. They still don't care. And I know we're not alone and that there are other places (even in my immediate geographical area) that have waste well in excess of what we're pissing away.

<comment><USER35> Your company is operating inefficiently in some regard. You've done the leg work and determined this inefficiency costs about ~$100k annually. You take this to your leadership with a proposal: we can save this money through better communication among teams, a review of existing system for "unnecessary" or unused services, and "management".

From an engineering perspective, this makes perfect sense!

But management reacts negatively, maybe even becoming skeptical of your value to the org. Why?

1\. The savings you propose are too small to make a significant difference to profitability. $100k is equivalent to between .3 to 1 FTE engineers depending on geography.

2\. Someone has to run this project, they will cost money. Engineers will have to be involved, they will cost money. Every project team is going to have to evaluate their usage and provide justification documents, so now the costs are cascading through the org.

3\. Remember that the cost of a decision is the sum of the the cost of the thing done plus the cost of the things forgone. People working on this are not working on things customers will pay for—that is, things that get multiplied by many customers now and into the future and differentiates from the competition. This project has its own costs. The savings must be very, very high to compensate for both.

4\. It's hard to imagine how the savings can be sustained without significant new bureaucracy. Every resource allocation is going to have to go through an architecture, implementation, harmonization, and business necessity justification review. That is a lot of new gate keepers.

5\. You indicated that teams already "can't/won't/don't communicate." This means the teams are going to have significant political battles over who owns/runs which resources. Ownership of a the architecture is a tool to bludgeon other departments into compliance—which will make inter-team conflicts worse because they can't just agree to disagree. Suddenly, one team winning an argument means winning forever.

6\. Solving the previous point with better communication is not viable—it would mean solving fundamental problems in organizational management and psychology.

So, what can you do? The fundamental issue here is that the scale of the problem does not match the scale of the organization. Cost saving projects that succeed—like google early on deciding to develop their own servers and racks instead of buying off the shelf—provide a sustaining competitive advantage. Google saves so much money from its infrastructure investments that it lets them build products that would be wildly expensive for others to replicate.

In business language this is referred to as cost leadership. Ferrari has a much lower need for cost leadership than Toyota. Ferrari still needs to contain costs to be profitable, but it primarily competes on differentiated products in a focused market. They might be interested in saving money on aerodynamic simulations so they could do even more of them. But Toyota would quickly go bankrupt if they didn't make cost leadership part of everything they do—just a few years a failing to improve efficiency would lead to their cars costing many thousands of dollars more than competitors in a market sensitive to price.

Which kind of company do you work for: one that serves the broad market (AWS) or something more niche (IBM Mainframes)? One that competes on price (commercial airlines) or one that competes on differentiated features (private jets)? Craft your project proposals to the business and they may have a much higher probability to getting heard.

<comment><USER36> Fantastic reply.

It's the type of reply I want to write every time I see misguided comments from people who don't have the full picture of the business and don't even know that they don't have the full picture.

<comment><USER34> My comment started with:

> Where I work, we're basically donating money to the Bezos charity known as > AWS at this point.

And ended with:

> And I know we're not alone and that there are other places (even in my > immediate geographical area) that have waste well in excess of what we're > pissing away.

That was my point. I perfectly (okay, maybe not perfectly, but well enough to understand that it's not worth my time to pursue) understand why and how these things happen, it isn't my first rodeo. And, honestly, I think I'd probably applaud the guy for figuring out how to get _damn near every one in SV_ to open up their fat fucking VC wallets to the man if it weren't for his business practices, like what we see in TFA.

<comment><USER35> If this is an issue that really bugs you, perhaps consider working for a company that has similar values to you.

Working for tech in the valley is going to be extremely biased on focused differentiation, so cost containment has a lower priority.

On the other hand, the people I know in logistics and manufacturing are extremely concerned about cost containment. For them, charging more for the product/service is orders of magnitude more difficult than cutting costs—indeed, improving efficiency is often the primary method of growing the company (through lower prices or increased output). Such companies, even ones making hundreds of millions in revenue, would be very interested in proposals that save $100k/year.

</comment></comment></comment></comment></comment></comment><comment><USER37> IANAL, but would be interested to know if it would've BENEFITED their case if they met with a lawyer BEFORE putting their plans into action. It seems this would've been a pretty legitimate way of confirming their intention, and would've put Amazon in a much more compromising position after the fact.

</comment><comment><USER38> After this is all over, Amazon needs to be subjected to the full range of antitrust laws and regulations. And broken up.

</comment><comment><USER39> Would it be illegal for Amazon's competitors to extend job offers to those who are at risk of being fired for going on strike? (If the fear is being fired as retaliation)

<comment><USER40> The aim of the law is to prevent employers from blocking unionization. Your hypothetical might prevent harm to specific individuals who were fired, but it wouldn't achieve the overall goal of protecting the right to organize. Instead it would rid the employer of the organizers, which is what the employer wants.

</comment></comment><comment><USER41> [https://archive.md/tGAlW](https://archive.md/tGAlW)

</comment><comment><USER42> SARS-cov-2 survives days on cardboard.

If you can't give two f _cks for the workers, do it for tour own consumers' ass.

Amazon must enforce sanitary and safe working conditions during the COVID19 epidemic lest it becomes itself a source of contagion. More so now that home delivery is so important in the "stay home" strategy.

For f_cks sake people, how big a stick do you need before you notice?!

<comment><USER43> > SARS-cov-2 survives days on cardboard.

It doesn't.

<comment> y-c-o-m-b From [https://www.nih.gov/news-events/news-releases/new- coronaviru...](https://www.nih.gov/news-events/news-releases/new-coronavirus- stable-hours-surfaces)

> The scientists found that severe acute respiratory syndrome coronavirus 2 > (SARS-CoV-2) was detectable in aerosols for up to three hours, up to four > hours on copper, up to 24 hours on cardboard and up to two to three days on > plastic and stainless steel.

24 hours is within the time-frame of same-day deliveries at the least. I think OP's point still stands; it's a disease vector.

<comment><USER43> 24 hours isn't days.

</comment></comment></comment></comment><comment><USER44> whatever you believe, all they want is for them to shutdown and clean, how hard is that?

</comment><comment><USER45> The worker was exposed to covid-19, was told to quarantine, and came back on site anyway.

This strikes me as an egregious safety violation and a truly excellent reason to fire the worker.

<comment><USER46> I think the point is that more than just this worker was exposed to COVID-19...shouldn't the entire warehouse be shuttered?

<comment><USER47> It's not anthrax. You are unlikely to get it from just being the in same space a day after the fact.

<comment><USER48> Unless you, say, use the same push cart, flush the same toilet, etc

</comment></comment></comment></comment><comment><USER49> They'll settle out of court with this guy in 2 years for $10 million but it's worth it to them to silence him at the present moment.

</comment><comment><USER39> > Like all businesses grappling with the ongoing coronavirus pandemic, we are > working hard to keep employees safe while serving communities and the most > vulnerable

Because people who can afford Amazon prime and prices are the most vulnerable

<comment><USER50> I mean, so far yes. I think people with disposable income and those who travel a lot have been early adopters when it comes to getting the virus. Politicians, professional athletes, and rich people seem disproportionately likely to be infected, and I wouldn't be surprised if that imbalance still existed once you accounted for the differences in test availability. ofc that's my North America-centric perception which may change in the coming months

</comment></comment><comment><USER51> > Despite that instruction to stay home with pay, he came on site today, March > 30, further putting the teams at risk

The employee was exposed to another employee who tested positive for covid-19. They asked him to stay home with pay for 14 days and he came back to the building to protest, putting other employees at risk.

<comment><USER52> Whenever there is anti-Amazon or pro-Union discussion, the first comment on HN will always be siding with management. Why is that?

This obviously an illegal retaliatory firing. Amazon is running domestic sweatshops where they don't even provide basic PPE during a global pandemic, and he was the leader trying to get that gear.

Seriously - what goes through the head of somebody who posts a comment siding with management in a situation like this? I literally can't understand why you'd think to post something like this, unless you're an Amazon executive or shareholder and only care about short term face/profit. Otherwise - why the reactionary take?

I just find this level of obedience to authority baffling. It's endemic in the United States, which otherwise prides itself on it's "maverick" status - except when it comes to shocking levels of obedience and servitude to the police and to market forces.

EDIT: I looked up this user and he is an Amazon employee, which explains this bizarre take. Given Amazon's policy of paying employees to say nice things about the company online, even when they work in unrelated departments, I think we should seriously consider warning/banning users who engage in astroturfing for their employers on HackerNews.

<comment><USER53> > Amazon is running domestic sweatshops where they don't even provide basic > PPE during a global pandemic

It doesn't help your argument to frame it in hyperbolic terms. Amazon pays a minimum wage of $15/hour, every warehouse is air conditioned, they now offer paid time off to every worker who works >20 hours a week, they have substantial career advancement training and education benefits, they have health benefits and matching 401k program, 20 weeks paid parental leave.

I mean, come on. There might be some legitimate problems, but when you call it a sweatshop, you've already lost the argument.

<comment><USER54> and they have employees pissing into bottles because toilet breaks are limited/timed/monitored.

I mean, come on. What would take for you to piss into bottle at your work instead of going to toilet.

<comment><USER55> Amazon pays very well for an entry-level job. Yes, work conditions suck compared to white-collar work. Many blue-collar jobs do, especially now that the 6-figure blue collar factory jobs have all but disappeared.

But that's the price you pay for a job that has no requirements beyond being able to use your hands.

<comment><USER56> Who decides whether blue collar workers deserve bathroom breaks? Why do you treat the free market as the sole authority on what working conditions people "deserve"?

You're arguing that shaving off a couple minutes a day is worth the loss of human dignity that these workers experience.

<comment><USER54> That's the problem with economies at scale, a bathroom break for small store owner is not an issue. When you have 1000's of stores its a massive saving area, where its much easier to justify pissing bottles. Any small trivial thing at scale can cost or save huge amounts money.

And when we talk huge sums of money, morality often is tossed out of the window first.

<comment><USER53> You're suggesting that for a small business, because the value of five minutes of a single employee's time is trifling, the small business does not care to regulate bathroom breaks.

I don't really see it that way. In my view, small businesses abuse their employees just dramatically more than large businesses.

For a small business, a single employee may be the only person working the till. The employee simply won't be allowed to go to the bathroom at all except during designated times.</comment></comment></comment></comment></comment></comment></comment></comment>


Models in biology: 'accurate descriptions of our pathetic thinking' (2014) - <AUTHOR> http://www.biomedcentral.com/1741-7007/12/29 <comment><USER2> I loved this review. This is systems biology at its best: simple hypotheses let us build models that explain/predict emergent behaviour. How cool to explain that a biological oscillator can produce periodically repeating structures during development!

And the title is spot on: without getting hung up on the details we can look for structural insights. There's no shame in the "pathetic thinking". Keeping it simple eliminates the perils of overfitting.

</comment><comment><USER3> idk.. we really haven't had empirical (e.g. molecular biology) data for as long as physical (e.g. position of the planets). and even w/ the position of galaxies or fluid flow, there it's not clear what can and can't be "derived from fundamental laws."

so I'm not sure this is unique to bio. also, the title grates on me. would prefer "our incomplete maths" or something.

<comment><USER4> True. But it is really worth remembering (as the editorial notes) that math in biology is nothing new and fields like classical genetics were highly mathematical before molecular biology existed.

</comment></comment><comment><USER5> There are ongoing efforts to build accurate cellular models, incorporating all processes and networks to such level that predictions can be made.

There was a rather big breakthrough in 2012, when first bacterial model was published.</comment>


Evaluating Vax Lisp 3.1 - <AUTHOR> https://netzhansa.blogspot.com/2018/08/evaluating-vax-lisp-30.html <comment><USER2> > At some point, I brought a MicroVAX with me to a vintage computer > convention, and a friend had his MacIvory Symbolics Lisp Machine on display. > As the two systems were from the same era, we thought that we should try to > bring up some network between them. My VAX ran a fairly recent version of > VMS, though, and when we tried to establish a DECNET connection, the Lisp > machine would signal an error and put us into a debugger. What got me hooked > on Lisp was that my friend could display the source code of the failing > DECNET device driver, figure out that the problem was the too-new DECNET > version number that the VAX had reported in the connection setup packet, fix > the Lisp code in the DECNET driver of the Lisp Machine and then continue the > file transfer operation that had signaled the problem. I certainly > understood that this would theoretically be possible back then, but I had > never seen a system that would have that level of integration of operating > system and programming language. I was intrigued.

<comment><USER3> Makes one wonder if an OS should be built using LISP these days to make available that kind of hackability. Or port Genera OS [1] to x86 or arm. The languages used by the VPRI project were bootstrapped on lisp if I recall correctly [2]. It would be great if that projects code was released as open source too.

[1] [http://wiki.c2.com/?GeneraOs](http://wiki.c2.com/?GeneraOs) [2] [http://www.vpri.org/writings.php](http://www.vpri.org/writings.php)

<comment><USER4> Movitz[0] is a Lisp-based environment for x86 hardware. I have only cursory knowledge of Common Lisp and x86 assembly but found the code quite easy to follow. It isn't under active development but there is nothing stopping you from dusting it off.

[0] [https://www.common-lisp.net/project/movitz/](https://www.common- lisp.net/project/movitz/)

<comment><USER5> There is a bug in the compiler that I never managed to fix.

</comment></comment></comment></comment><comment><USER6> The language survey class I took as part of my CSci degree, had us use Lisp on a MicroVAX. The resources that Lisp required versus the machine we were running it on made it very much like programing a batch system. The terminals were slow when Lisp was running. It was so bad we typed our programs out on a PC and ftp'd it up to the VAX and then loaded it, check if we got the syntax right, run it, and repeat. The whole interactive lesson was lost on us since it would take forever to do anything. The only good that came out of it was winning enough money at poker played in the lab to pay for pizza that weekend.

<comment> nils-m-holm The VAX was really a beautiful architecture and a good fit for systems that ran lots of small processes subsequently. However, it was also notoriously bad at running LISP because of its huge page table overhead. A page was 512 bytes in size, giving an address space of 2^23 pages. So when a process grew larger, the machine started to swap out parts of the page table and everything went down to a crawl. This is probably what you observed.

512-byte pages worked fine on a 18-bit or 22-bit architectures, like the various models of the PDP-10 and the PDP-11, but were simply too small for the VAX. So the VAX did solve the memory shortage of its predecessors, but in the case of LISP at the price of abysmal performance when running memory-intensive applications, which many LISP programs unfortunately were.

</comment></comment><comment><USER7> This is slightly tangential, but it details my first real professional screw- up on a VMS system.

My first serious job was working as a Junior Sysadmin on a large VAXCluster. I literally had NO idea what I was doing. On my first day my boss said to me, "Here's your account details, it's got the same rights as SYSTEM, if you screw up, we'll fire you. Good Luck.". The senior admin showed me the ropes, and especially the HELP command, and basically spent the next week typing HELP followed by every command I encountered.

Fast forward three months, and I'm fairly comfortable with VMS, writing scripts and improving some of the daily housekeeping tasks to make them faster and more efficient. I'm working on the startup script that boots the cluster, stepping through the existing one to understand what it does and I encounter a command I've never seen before, so I duly flip terminal screens (VT420 dumb terminal with dual inputs), and type HELP followed by the command.

Except I didn't actually type HELP. I just typed the command.

As I watched the terminal fill up with output, I realised what it did. Basically it flushed all core processes out of memory. Including the one that allowed people to logon.

Normally this would be a fairly embarrassing screw up requiring a simple reboot, except that this VAXCluster belonged to the MoD, and it was running military combat scenarios (wargames), and had been running a large war scenario for several weeks, non-stop. Somewhere on the site where I was working, there were two large rooms each filled with soldiers and each day they'd been planning out their campaign tactics against each other and these decisions were being plumbed into the running scenario in real time by an operator.

I'd basically broken everything, and potentially destroyed the whole scenario. The scenario was still running in memory, but no-one could talk to it anymore. Rebooting the cluster was _not_ an option.

Immediately, white faced, I admitted to what I'd done. One of the 'real' VMS coders on my team also went ashen. After lots of head scratching, he set to work. I don't know in detail what he did, but from what I understood at the time, he effectively manually restarted the 100s of processes that the Cluster needed to operate, as if it was rebooting but without actually flipping the switch.

Several hours later, the Cluster was fixed and running normally. I'd also not been fired.

This event, left me with a massive appreciation of multi-user systems and how one small error can affect 100s of people. A year or so later, I transitioned into PC support, as Desktop PCs were slowly replacing the dumb terminals across the site, and later on I started working for an international bank where again networked PCs were new. I found that having cut my teeth and been burned on a large multi-user system gave me an impact perspective that most people working in the fledgling PC support industry didn't yet have.

Because of this, VAX/VMS systems will always be special to me.</comment>


Ask any President a question – Message President - <AUTHOR> https://messagepresident.com/presidents/

<comment><AUTHOR> Message a President and ask your friends to support your message. Share your message on social media to rank-up.</comment>


Ask HN: Best way to collect recurring payments from customers? - <AUTHOR>

I'm developing websites for clients and it would be significantly cheaper for clients to bundle sites onto one server (and restrict/regulate FTP accounts) rather than purchasing separate instances of hosting for each client. The never need all the resources anyway... This might be as simple as a service.
What's the best way to collect recurring payments from customers/clients?
What do you use? <comment><USER2> Come on, do a _little_ work, e.g. looking at <http://searchyc.com/recurring>.

<comment><USER3> Come on, Joachim, do a little work, e.g. and check your links before chiding someone else.

</comment></comment><comment><USER4> I'm an intern at WePay YC(09) so I am biased, but it does a great job for what you want to do and its pretty inexpensive.

Ask me for a demo anytime or check it out on your own :)

</comment><comment><USER5> Lots of options: PintPay, Recurly, Chargify, etc.

<comment><USER6> If any these ever go out of business, would there be any way to easily switch your customer base over to another provider?

This is why I hesitate to use startups for reoccurring billing. I know that something like authorize.net will most likely not go out of business.

</comment></comment><comment><USER7> Vote for CheddarGetter.

</comment><comment><USER8> Take a look at SaaSy</comment>


Why Beginning Designers Don't Need to Learn Grids, Type Scales, or Color Theory - <AUTHOR> https://learnui.design/blog/why-beginning-designers-dont-need-grids-type-scales-color-theory.html <comment> n-gatedotcom Are all your newsletters a blog post too? Because I've been wondering where I can read your stuff in one place.

<comment><AUTHOR> No, not all of them. But much of the stuff that goes out to the newsletter is later posted on the blog ([https://learnui.design/blog](https://learnui.design/blog)) in some format or another.

<comment> n-gatedotcom Okay. Thank you.</comment></comment></comment>