Swift impressions - <AUTHOR> http://www.evanmiller.org/swift-impressions.html <comment><USER2> First of all, "no garbage collection" Technically, referencing counting is garbage collection, it's automatic memory management by definition.

Is ARC really a win over non-refcounted GC + escape analysis? Full manual control over stack vs heap allocations and lifetime, I get, especially for games. But reference counting is not deterministic, and can also generate pauses.

@Override has been in Java since Java 5.

<comment><USER3> ARC are less likely to get paused as memory release are amortised rather than gather and swept.

Also, LLVM static analyze is so good at figuring out your code path that it could effectively retain and release your memory for you.

Cyclic reference is its only flaw but its something that can easily solved through programmer awareness.

<comment><USER2> What LLVM static analysis can be done to figure out the lifecycle of objects also applies to other GC algorithms.

ARC may be less likely to get memory paused on release, but ARC doesn't compact free memory, and therefore fragmentation can cause object allocations (malloc) to become more expensive, possibly leading to pauses.

If you use non-copying GC that doesn't compact (ARC doesn't compact), then there are low pause GC algorithms out there that give pretty good bounds (e.g. 5ms pause).

I'd like to see actual benchmarks of both ARC and say, mark-and-sweep on a mobile device rather than speculation and opinion, and both benchmarks must get the same static compilation treatment. That is, if escape analysis tells you that the lifetime of the object is bounded by the current stack frame, then allocate it on the stack, and don't penalize the non-reference-counted GC by allocating 100% of everything on the heap.

<comment><USER4> ARC may be slower than a good GC, but what it has is deterministic behaviour. A 10ms pause could be tolerable if you know when it will happen.

A fair few years ago I worked in the murky world of J2ME games, and a common pattern was byte[] _variables = new byte[1024] so you could ensure there were no GC pauses.

<comment><USER5> > A fair few years ago I worked in the murky world of J2ME games, and a common > pattern was byte[] _variables = new byte[1024] so you could ensure there > were no GC pauses.

That's not the same as ARC, though. The Java equivalent to ARC would be something like having an array of volatile reference counts to go with your variables and fiddling with those at most accesses.

<comment><USER4> Not the same, but they had the same problem - GC pauses when it likes, not when you like. If you know calling move_hero() takes 23ms, 15 of which is ARC you can plan for that. You can't plan for move_hero() taking 7ms, except when GC happens.

<comment><USER2> Depending on VM, Java developers can plan where the pauses happen. One way they do that is by object pooling, another is by using DirectBuffers/off-head memory. A third way to do it is with scoped heaps.

It's not like tons of games haven't been shipped with non ref-count GC. Minecraft being the most famous, but games on Unity3D/Mono can have non-ref count GC. Lua is shipped in tons of game engines and uses classic GC.

Regardless of whether you are using automatic GC, or if you are using malloc/free, you can't write a high performance game without carefully working around memory issues. Even C/C++ games like Max Payne have shipped with frame hiccups caused by poor malloc/free behavior that had to be fixed with custom allocators.

If you're writing a game, you have to pay attention to what you're doing. But do non-framrate limited games and regular apps need ref-count GC? I suggest no, they do not.

<comment><USER6> > But do non-framrate limited games and regular apps need ref-count GC? I > suggest no, they do not.

Practically the first piece of advice usually given when someone asks "how do I make my Android app non-laggy" is to avoid allocation wherever possible; even a single frame drop due to a GC pause when the user is scrolling a list, say, can be noticeable.

<comment><USER2> Android's GC is not optimal/best of breed. ART is introducing much lower pause times for Android AFAIK.

Low pause GC is possible. See [http://openjdk.java.net/jeps/189](http://openjdk.java.net/jeps/189) or Zing/Azul (absolutely pauseless GC or so they claim)

<comment><USER5> Azul C4 uses a custom kernel extension. It's not really a general purpose GC for user-level apps. (There are kernel-extension-free variations of it, but they suffer from reduced throughput over the HotSpot GC.)

<comment><USER2> That's true, but for a mobile device, you can control the kernel, it it may be, from a user experience point of view, that reducing pause latency is better than high throughput. I dunno, has anyone ever considered using Azul- like tricks on mobile kernels? Does ARM have the required HW to support it efficiently?

What's FirefoxOS doing for it's GC?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Anybody interested in an ebook about using all of Swift's strict typing features for better app development?

I _may_ be in the process of writing one of those. It _may_ be up to 100 pages so far with only a chapter or two remaining. It _may_ be available for release in a day or two.

<comment><USER8> Definitely. I think that would be fantastic.

</comment></comment><comment><USER3> Swift seems to be a very pragmatic language. It borrow and learn heavily from other languages, but it doesn't try to be promise anything big. It just introduce opinionated defaults which is safe and tends to be at least 80% of the implementor's intend, while providing alternative for the 20%.

An example is the switch case fall through behaviour of C. In Swift, by default, switch case no longer fall through, but if you need that behaviour, you can always add fallthrough keyword at the end.

When you think about the above behaviour, it seems so much more natural, and wonder why we have been keeping ourselves bitten by this C language construct and developing muscle memory to prevent it by having break, sometimes with a scope (All cases in a switch scare the same scope within C switch, if I don't remember wrongly).

Part of the switch example is solved in other languages (default intends and scoping), of course. But the subtlety of the fallthrough keyword gave me a strong impression. It felt that it should always be a opt-in all these while, rather than an opt-out as it have always been.

With my limited command of english, I feels that I would do it little justice to the language trying to explains some of its concepts like optionals & mutability hints. Some of these concepts only modify the existing solution only so slightly, but meaningful enough to be impactful.

It also doesn't take a stance in the OO and functional debates. It is both OO and functional. Staying as pragmatic as possible.

Finally, Swift is like a wolf hiding under the sheep's skin. Its a very very strongly typed language. It is very specific about it type. But half the time, you can ignore the type and write it like python or ruby. The magic was type inference, its kinda weird but I like that.

You can almost feel that Chris Lattner might have felt he is reaching the point of diminishing return while optimising LLVM for Objective-C. after all, this is a very old language. He done a great job all these while with LLVM but sometimes, the problem is something deeper. Swift is kinda like Objective-C 3.0 without the backward compatibility.

(P.S. Objective-C is my favourite language before Swift)

If programming language is a sword, Swift is just another sword, albeit one that's very sharp.

<comment><USER9> Go already has the same _switch_ behavior (plus the _fallthrough_ keyword) and is very specific about its types while having type inference.

<comment><USER10> haha these answers are cracking me up. Who cares? Do people develop iPhone apps using Go? Swift never claimed to invent new paradigms that didn't exist in other languages, it simply brought them to Cocoa.

<comment><USER9> My comment was specific to lxcid's comment and his surprise to see all these features in a language. I don't understand why my reply got downvoted.

> Who cares? Do people develop iPhone apps using Go?

There is no built-in support for people to start caring in the first place anyway. But Go fundamentally is better suited for server-side code rather than applications as Swift is supposed to.

On a different note, Apple has started hiring Go engineers. But who cares huh? [https://jobs.apple.com/us/search?jobFunction=MTLMF#&ss=33773...](https://jobs.apple.com/us/search?jobFunction=MTLMF#&ss=33773001&t=0&so=&j=MTLMF&lo=0*USA&pN=0&openJobId=33773001)

</comment></comment></comment></comment><comment><AUTHOR> I'm with him on the arcane rules about Array copying — IIRC, when you modify them such as to change the length but not otherwise.

<comment><USER11> I do not understand that, either. Also, I find it weird that dictionaries are value types. If I started programming in Swift, I think I would soon have a generic class named 'Dict' that has a single field storing a Dictionary and the same interface as the Dictionary struct.

Does anybody know what is the reason they chose those non-standard behavior for the standard containers?

<comment><USER12> My guess is that they want you to declare map/array arguments as "inout" to be able to add/change things so that the changes are visible by caller. It might not be a bad idea after all.

<comment><USER11> That makes some, but not much sense to me. Firstly, that is not what I read in the book "The Swift Programming Language":

 _" Whenever you assign a Dictionary instance to a constant or variable, or pass a Dictionary instance as an argument to a function or method call, the dictionary is copied at the point that the assignment or call takes place."_

Even if I assume that that is an error (they didn't think of _inout_ arguments when writing that), the behavior still doesn't make much sense to me.

Say that I want to do a few things with someObject.someField.someDict. In most languages, I would introduce a helper variable: _var items = someObject.someField.someDict_ and do _items[42] = 346; items[423] = 356; etc_. That won't work, as it clones the dictionary (shallowly). I find it is just too easy to accidentally clone arrays or dictionaries in Swift.

<comment><USER13> The idea is you shouldn't be modifying someObject.someField.someDict in the first place since you don't own the dict, someField does.

<comment><USER11> That's true in the majority of cases. However, the code could be written as it is for performance reasons. If someObject is a field in the current object, that isn't that bad, especially if it also is an instance of a nested class.

Also, weirdly, that isn't something the language forbids. It doesn't even make it possible for library writers to prevent it.

I still think we will see some language changes before the official release here in this area because naive users will run into too many weird issues with the current behavior.

For example, if the goal is to have normal function arguments immutable, I think it would be more natural to forbid functions from calling mutating methods on their arguments, unless they are specified as _inout_.

On the other hand, good compiler warnings might be enough for preventing programmers from accidentally copying containers.

</comment></comment></comment></comment></comment></comment><comment><USER14> I'd be curious to get a summary of what Swift has that is not a mix of traditional OO and ML-family features.

<comment><USER15> What other language families are there, apart from C and ML languages? Lisp, maybe? Maybe dataflow or logic programming?

<comment><USER16> Pascal?

<comment><USER17> This is a very interesting and complex question. CTM provides some answers, summarized in [http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf](http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf)

</comment></comment></comment></comment><comment><USER18> > At its core, the language is designed to eliminate bugs, but not in the > academic way that, say, Haskell eliminates bugs by preventing normal people > from writing code in it

Shots fired

</comment><comment><USER19> D ([http://dlang.org](http://dlang.org)) has had mandatory override for a long time.

</comment><comment><USER20> > Override functions must use the `override` keyword. Now when you rename the > superclass's function, all the subclass functions fail to compile because > they're not overriding anything. Why did no one think of this before?

As I understand it, Java has a similar `@Override` annotation:

[http://stackoverflow.com/q/94361/49485](http://stackoverflow.com/q/94361/49485)

<comment><USER21> Eiffel, Object Pascal, Modula-3, Component Pascal and many others do as well.

I guess the author is not well versed in programming languages history.

<comment><USER22> I read the article as being in the context of Objective-C bugs that were solved by Swift.

</comment></comment></comment><comment><USER23> wow! almost like C# from, what, 10 years ago?

<comment><USER4> Except with pattern matching, built-in immutability, extensible classes, curried function and tagged unions.

More like F# 2.0 in feature set.</comment></comment>


Ask HN: Web app for storing and annotating PDFs - <AUTHOR> I am extremely frustrated by the lack of a web app that will simply store PDFs and let you annotate them. For example, a simple navigation sidebar and a display to the right would be sufficient. I have tried googling for this to no avail. Are there any recommendations for something like this? As a sidenote, I currently use Dynalist for all of my notes and if there is something similar to this that can store and annotate PDFs, that would be ideal. <comment><USER2> Consider converting the PDF to HTML, and then annotate the HTML, [http://web.hypothes.is](http://web.hypothes.is)

Three years ago I faced this problem while creating a prototype to annotate research papers, and used a client side library by [http://annotateit.org](http://annotateit.org) which posted annotations to my own server.

The conversion from HTML to PDF was handled by [http://pdftron.com](http://pdftron.com) DocPub.

<comment><AUTHOR> I've installed hypothes.is on your recommendation and tried it out. There are a bit more steps than I'd hope for, such as needing to sign into chrome and storing the hypothes.is-generated link in my notes (on Dynalist), instead of storing everything in a simple web platform. Still, this is better than anything I've come across. Thank you!

Edit: I could just use the hypothes.is platform to locate my PDF notes as well, instead of storing the URLs. One downside is the lack of organization, but the upside is that it's less work than copying/pasting the hypothes.is- generated HTML page every time. (As you can tell, I am very lazy).</comment></comment>


Never Use a Warning When You Mean Undo - <AUTHOR> http://www.alistapart.com/articles/neveruseawarning <comment><USER2> Easier said than done. Consider version control, which is, in a sense, one big system for allowing "undos". Just today, I spent an hour struggling with subversion which seems to have a different error for every seeming non-error situation. "Obstructed update", "Item is out-of-date", "Error bumping revisions post-commit (details follow):" [And they DO]

Okay, so version control deals with TEXT, but applications deal with internal states that have innumerable interactions. For every one of those crazy subversion errors there are lots of data corruptions that could occur--and once they do, you've stuck your user with something potentially unsolvable through manual intervention.

A simple example would be: User deletes event at 3:00 - 3:30. User adds event at 3:00 - 3:30. User undeletes event at 3:00 - 3:30. Fairly easy to resolve, seemingly:

1\. Undelete selected. 2\. Check conflict. 3\. [possible actions]: a) Announce conflict. b) Override new event. c) Allow multiple events at same time. (Hmm...was this allowed through normal interractions.) d) Prevent undelete, but allow the user to delete new event.

...that sort of thing can balloon uncontrollably. Suddenly, for every "undo" you have a tree of options for every possible conflict that may have arrisen from system state changes.

No, a better way would be:

1) Generic undo selected. 2) New event undone. 3) Generic Undo selected. 4) Old event restored.

...but then you have a system-wide "version control" system to deal with.

<comment><USER3> For some applications, it's not a big deal if only the latest action can be undone. This already beats warning dialogs, which is the point in the article.

Next step (I'll call this B, below) is keeping a linear undo history, which you can navigate one step at a time, like most text editors today. This doesn't bring any of the complications you mention here.

One way to get more sophisticated is exposing a linear undo history a la Photoshop, from which you can remove intermediate old steps. This seems to work for Photoshop, but in general it sounds like a can of worms, for the reasons you mention.

Another path up from B is to keep an undo history _tree_ , with the following properties:

\- You can display the tree explicitly somehow, and navigate it. So, e.g., selecting a node shows you the state of your content at that time.

\- You never delete nodes or branches. To undo a bad decision, you go back to the last good node and start a new branch from there.

\- You can still move data between nodes. For example, in a text editor I would be able to cut text in a discarded branch to incorporate it to my current one.

Does this make sense to you?

I don't understand the problems you mention with subversion, but aren't those implementation issues? Or do you mean that these are inherent limitations in the undo concept?

<comment><USER4> The implementation and user interface presentation of linear undo histories (even if you can only push and pop with no random access) are way more complicated than you're giving them credit for.

<comment><USER3> User interface for undo/redo is Ctrl+Z, Ctrl+Y on Windows systems (or equivalent menu entries or icons). What's complicated about that?

Re: implementation, it of course depends on the application. The key difficulty is having an inverse (undo) for every mutating operation you have. This may get tricky to do efficiently for some applications (video editing comes to mind). An additional complication may come from, e.g., undoing every word rather than every keystroke. So you need some provision for gathering 'small' actions that you don't care for saving separately in history.

The history itself is nothing more than a list.

Now, I understand how it can be very hard to retrofit this functionality in an app that was made without this in mind. I'm redoing a hobby project from scratch because of this.

Anyway, care to give details on the complications you've found? I'm not trying to convince anyone it's easy; I'm trying to help, and maybe gain a better understanding of the problems in the process.

<comment><USER4> You've addressed most of the issues. One thing of note is that having to be able to undo _everything_ is not really that easy for certain types of apps. Take submitting this reply form to the news.yc forum, for example.

<comment><USER3> The 'delete' option is an undo. The 'edit' option is a less drastic way to correct your actions. Neither of them seems difficult to implement.

The fact that they are only available for a short time is a design decision. If your point is that sometimes it doesn't make sense, design wise, to provide undo, then I agree.

<comment><USER4> Though I think we've argued this enough, I'll at least reply to say that neither delete nor edit are actually undos. They allow me to repair, but they don't (necessarily) return me/the server to the previous state.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> Sounds like an author just picked up the book "The Inmates Are Running The Asylum."

\-- Alex

<comment><USER3> Nope; this is where the author comes from (quite literally):

<http://en.wikipedia.org/wiki/Jef_Raskin></comment></comment>


Android IMSI-Catcher Detector - <AUTHOR> https://secupwn.github.io/Android-IMSI-Catcher-Detector/ <comment><AUTHOR> As Stingrays and other IMSI catchers become more common, I thought this project should get more visibility.</comment>


The Collapse of Complex Business Models (2010) - <AUTHOR> http://www.shirky.com/weblog/2010/04/the-collapse-of-complex-business-models/ <comment><USER2> "In a bureaucracy, it's easier to make a process more complex than to make it simpler, and easier to create a new burden than kill an old one."

He should have lead with this.

<comment><USER3> One fun experiment would be for a company to place all it's middle managers on gardening leave. For a year. Give them the same ability to influence as that of a very minority shareholder (i.e. none).

Then see how the bottom line fares. I see three outcomes:

      1. Profits are down. Those managers added value after all.
      2. Profits about the same. Those managers added nothing.
      3. Profits up!! Those managers were dragging them down the whole time. Who knew?

Letting highly paid employees go is, of course, expensive. But in 2 out of those 3 scenarios the company can afford to simply keep them on gardening leave indefinitely.

<comment><USER4> What will happen is massive ugly in-fighting among professionals over turfs, who is responsible for what, whose faults what is. Eventually, winners of that cut the throat and backstab fight will take the role of middle managers.

<comment><USER5> And the difference with the current situation is ...

</comment></comment></comment></comment><comment><USER6> Shirky cites Joseph Tainter. If you want to hear from Tainter directly, which is the podcast that has kept me up at night, listen to this:

podcast (en) – omega tau science & engineering podcast 184 – Societal Complexity and Collapse

[https://overcast.fm/+HPTgN-4U](https://overcast.fm/+HPTgN-4U)

Tainter's book on Amazon (no affiliate link): [http://a.co/hDAtqpU](http://a.co/hDAtqpU)

</comment><comment><USER7> Man I miss the hell out of Clay Shirky writing stuff on a blog. He barely even posts on Twitter. I guess he had the book about the Chinese smartphone company in 2015

[https://www.amazon.com/Little-Rice-Smartphones-Xiaomi- Chines...](https://www.amazon.com/Little-Rice-Smartphones-Xiaomi-Chinese- ebook/dp/B013AH5IUQ/)

.. but nothing else of note? It's hard to tell what he's up to these days, but I sorely miss his blog writing.

<comment><USER6> He left NYU Shanghai earlier this year to move back to NYU Manhattan.

</comment></comment><comment><USER8> To pick a couple of examples more or less at random, last year Barry Diller of IAC said, of content available on the web, "It is not free, and is not going to be," Steve Brill of Journalism Online said that users "just need to get back into the habit of doing so [paying for content] online", and Rupert Murdoch of News Corp said "Web users will have to pay for what they watch and use."

Was that dog whistling the repeal of net neutrality?

</comment><comment><USER9> My favorite is all the financial complexity in order to take advantage of the debt-based economy. I even did a blog post on Google and Mozilla that shows some of the other problems: [http://yuhongbao.blogspot.com/2017/12/google- mozilla-and-deb...](http://yuhongbao.blogspot.com/2017/12/google-mozilla-and- debt-based-economy.html)

</comment><comment><USER10> "The most watched minute of video made in the last five years shows baby Charlie biting his brother's finger. (Twice!) That minute has been watched by more people than the viewership of American Idol, Dancing With The Stars, and the Superbowl combined. (174 million views and counting.)"

Not sure why the two use cases are presented as directly competing. The popularity of long form scripted content on Netflix and shows like Walking Dead, Breaking Bad, etc., are huge and not going away even though the methods of distribution are changing from linear broadcast with commercials over cable/satellite to subscription on-demand OTT without ads. That's the transition taking place rather than hours spent viewing 1 minute viral videos taking away from hours spent watching high cost production long-form content otherwise the ratings would be crashing for those shows and Netflix wouldn't be spending billions on production.

Seems like a false dichotomy.

At least a few times per week I go through the YouTube and Vimeo apps on the Apple TV and apart from catching up on late night talk shows on YouTube, and some interesting short-form content on Vimeo, it doesn't at all replace watching high quality (expensive, complex) content from iTunes and Netflix.

The article also doesn't cover live programming at all, which is increasing exponentially in complexity for things like sports (Olympics coverage, specifically) but also a ton of live event production that wasn't possible before complexity (new technology) increases. Again, user-generated live (Periscope, YouTube) is additional, and doesn't replace watching that content either. There's a ton of room for more complexity with new technology for things like the Super Bowl with tiny 4K cameras in each helmet and delivery over web streaming with viewers watching from whatever angle they want, etc., that user generate content has no means of replacing.

The challenge is managing the shift from ad revenue to subscription revenue, and subsequent competition for the consumer's total monthly subscription budgets, rather than complex production being challenged by non-complex (user generated) content.

Unlike the AT&T example listed, large companies are already aggressively moving towards acquiring content rights and shifting to building OTT/VOD platforms, which is a key motivator of the recent large acquisitions like AT&T (ironically) and Time Warner / Turner / HBO, and Disney and Fox... the pivot is underway and whether or not it is successful doesn't seem related to those companies not being able to simplify but rather if they can avoid a fall in revenue from loss in ad sales during the transition process.

<comment><USER11> _All_ content competes with each other, because humans still have finite time. Personally, I have gone through periods of not watching any long-form, scripted shows, and primarily watched content on YouTube about my specific interests. I have a finite amount of leisure time in the evening, and every option I have - books, shows, video games, dinner with friends, YouTube channels, etc. - is in direct competition with everything else.

<comment><USER10> Yes, obviously true in terms of finite time in the day. I think the total time is actually increasing (although up to a finite point) but the main point is that it's more of a transition from linear/cable/sat/ads to VOD/OTT/mobile as the primarily factor that the large companies have to manage, rather than heaving losses in time spent on complex (high budget professional content) vs non-complex (user generated).

To imagine an extreme end of the spectrum as a thought experiment, I can't imagine that 5 years from now I'll be watching 1 minute viral videos all evening instead of professionally produced long form content. Candy is great but I still haven't replaced a (complex) full meal dinner with a pile of candies.

Even for video content on Facebook, I'd assume as that takes up more of the finite time it will trend towards increasing volumes of professionally produced content.

There's a lot of interesting low budget user generated content but that won't change the fact that a lot of value created by professional, extremely talented writers, producers, cinematographers, editors, special effects graphics creators, etc..

<comment><USER12> > I can't imagine that 5 years from now I'll be watching 1 minute viral videos > all evening instead of professionally produced long form content.

What's the youngest person you have the chance to observe the evening routine of?

Both my girlfriend and my sister will go to bed every evening, pull out their phone, and spend an hour watching 1 minute short viral videos on Instagram, Facebook, and Snapchat. Endless stream. 1 minute bits of content.

My girlfriend has gone so far as saying Snapchat's serious channels are the best service to catch up on the news.

<comment><USER10> Definitely a good point, although it might be a reflection of high budget long form content reflecting interests of older people more than younger generations, and as they grow into being more represented at the professional tiers (which takes years of experience) they'll produce new shows that reflect their values and interests.

In terms of younger audiences though there is also huge success with high budget animation. Pixar's success over time still seems more tied to quality of each film rather than declining consistently over time due to loss of interest in the format itself.

For news, 100% agree, ripe for disruption from social media (or at least web over cable news) although that is obviously facing new challenges in terms of reliability (i.e. Facebook/Twitter re election).

<comment><USER12> The trend I've seen on Snapchat is high budget high quality production of 1 minute viral videos. Think NatGeo documentary, but delivered as 5 20second videos with captions.

Similar to how a lot of high budget production moved from making 3 hour movies, to making 10 1 hour episodes. Overall more and better content, but in smaller easier to digest pieces.

I think that's a trend that isn't going away. People, especially as they age, have less and less time to stick to one thing. If you can cut it up for them and make it nibbleable, they will go for it.

When was the last time you chose to watch a full movie at home in one sitting? I bet you watch Netflix series instead, or pause your movie and continue the next day.

</comment></comment></comment></comment></comment></comment><comment><USER13> I was actually thinking this about the movie/tv industry recently. in order to get better, it has to get cheaper / less quality / quicker turn around times.

</comment><comment><USER14> But today we have people paying for high quality content streamed over the net. Its the business model of Netflix and Amazon.</comment>


Effective Engineer – Notes - <AUTHOR> https://gist.github.com/rondy/af1dee1d28c02e9a225ae55da2674a6f <comment><USER2> "Opportunity cost of working on wrong ideas can set back growth by years."

I feel like this is spoken by someone who hasn't seen more than one technology cycle come and go.

What I've observed - having started my career back in the Java-will-eat-the- desktop days and then adapted through webapps, big data, mobile, and now AI - is that the people who are best positioned to capitalize on an emerging technology wave are the ones who started working on it before anyone realized it was important, just because it was interesting to them. They're the ones who write the papers and software that everyone else evangelizes, and then get multi-million-$ signing bonuses or stock grants (or billions of dollars worth of cryptocurrency) when corporate interests catch on that this is a new technology wave. But at the time they start working on the idea, it's both useless and unlikely to work.

You can make a decent living always being on the look out for a new technology wave and jumping on it as soon as it's clear that it's hot. I spent much of my 20s doing that, and made enough money doing so that I can take it a bit easier now. But it's exhausting, and you'll never be the one actually driving change.

It's also usually not clear what's the "wrong idea" except in retrospect. DropBox is rsync with cloud storage and some pretty slick desktop app integration, done at a time when everybody thought that desktop apps were dead and Drew's Windows hacking skills were old news. But it's that familiarity with old technology that put him in a place to realize that new technology could make the old technology dramatically more useful, to the tune of a $10B company.

<comment><USER3> For every person who rode a powerful technology wave, there are also many others who rode the wrong ones.

One of my favorite stories from Drew was that when he first started Dropbox, he created a 4-minute demo video showcasing the product that functioned as an MVP for the product. The video drove hundreds of thousands of people to their site and grew their beta mailing list from 5,000 to 75,000 people overnight.

On the outside looking in, skeptics might have thought that it was nothing new. But the MVP provided validation around what future customers actually thought.

My main takeaway from that story (and that I share in the book) has always been to validate your ideas early and often, so that you can get more signal on whether the assumptions you're using to shape your behavior are accurate.

More about the Dropbox story here: [https://techcrunch.com/2011/10/19/dropbox- minimal-viable-pro...](https://techcrunch.com/2011/10/19/dropbox-minimal- viable-product/)

<comment><USER2> That's true and part of the challenge. It's not always clear what's a powerful technology wave and what's the wrong one.

I've actually got a bit more of a personal connection to DropBox - Drew was active on HN before founding it, he posted it here before posting it on Digg [1], and he took me out to lunch right after they'd gotten their Sequoia seed round and asked if he could convince me to be employee #2. At the time, I was working on a casual game creation startup with a friend, and I declined, #1 because I felt I couldn't leave my cofounder and #2 because Drew had a startup, I had a startup, and at the time it wasn't clear which of us was actually more likely to be successful.

Before you laugh, consider the environment in Feb 2008 (when this occurred). My cofounder was a consultant at Monitor Group, where he'd been researching the casual gaming space and had run across multiple reports saying it would be a $200M, $1B, etc. space (market research reports never agree on market size, because they're largely bullshit). Kongregate had just raised a Series A from Reid Hoffman, Jeff Bezos, and other luminaries. Max Levchin had just raised $50M for Slide the month before. Zynga had just been founded but Farmville hadn't come out yet. The Web 2.0 bubble was in full swing, AJAX and Javascript were the new hot buzzwords (I had just ported Arc - PG's pet programming language, which HN is written in - to Javascript, which is what caught Drew's interest in the first place), and as you can see from the first comment on DropBox's "Show HN", anything that required installation of software was considered a non-starter. And our product concept let everyone, from teenagers to retirees, build their own games instead of being at the mercy of a studio & professional developers.

My lesson from how things evolved - learned _much_ later, and I'm probably still grasping the implications - was to preference personal experience over industry zeitgeist and prestigious research reports. Drew's personal experience with the problem domain and his 75,000 beta signups were worth a lot more than the famous people and industry market research reports around the problem domain we were solving. And this insight has actually saved me a lot of time & aggrevation chasing fads that people realize are bad ideas 4 years in.

But this is not obvious to someone just starting their career, probably because they don't actually have all that much personal experience to draw upon, and because it takes a certain amount of chutzpah to hear about all these eminent people saying "This will be the next hot thing, you better get in now!" and think to yourself "Actually, sounds like bullshit to me." Personal experience is also inherently limited because you've only got your own and it takes years to build; it turns out that the set of problems you can viably solve is actually quite small.

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

<comment><USER3> Wow, that is an amazing story. Thanks for sharing.

It really hammers home how hard it is to disentangle good & bad advice and how easy it is for an outsider looking into to really underestimate the depth of someone else's expertise in a given domain.

<comment><USER4> >It really hammers home how hard it is to disentangle good & bad advice and

> how easy it is for an outsider looking into to really underestimate the > depth of someone else's expertise in a given domain.

</comment></comment></comment></comment></comment><comment><USER5> This is totally an incomplete thought, and I'm not trying to be down on this author in particular:

It's interesting to see a lot of management thoughts and colloquialisms slowly creep into the "other side" of software development (i.e. the actual developers) and become fairly well-tolerated.

We still make fun of phrases like "paradigm" or "synergy", but we're all mostly on-board with phrases like "own <x>" or "growth mindset". You can see the author using the word "leverage" here repeatedly in the same way that we often chide managers for using words like "synergy".

Interestingly the conversation around "effective engineers" has also shifted to really de-emphasize that technical ability - the best engineer is a good teammate, first and foremost (and I think a not-so-subtle implication also is that a good engineer is mostly extroverted as well). In the past decade or so, it seems like the "effective engineer" has become one who straddles that line between management and technical ability.

I don't really have an opinion on this yet (I think there's good and bad, as with most things), but it's just fascinating to watch.

<comment><USER3> It's less about management and technical ability, and more about soft skills and hard skills.

A recent Washington Post article shared an analytical study from Google on what made engineers at the company successful:

"Project Oxygen shocked everyone by concluding that, among the eight most important qualities of Google's top employees, STEM expertise comes in dead last. The seven top characteristics of success at Google are all soft skills: being a good coach; communicating and listening well; possessing insights into others (including others different values and points of view); having empathy toward and being supportive of one's colleagues; being a good critical thinker and problem solver; and being able to make connections across complex ideas."

Unfortunately, almost all computer science education nowadays focuses on pure technical skills and hiring interviews at most tech companies also focus on the technical skills. The impact is that many engineers plateau in their careers because they've underinvested in (and oftentimes looked down upon) the "soft skills" that actually separate the top engineers from everyone else.

Here's the article: [https://www.washingtonpost.com/news/answer- sheet/wp/2017/12/...](https://www.washingtonpost.com/news/answer- sheet/wp/2017/12/20/the-surprising-thing-google-learned-about-its-employees- and-what-it-means-for-todays-students/)

<comment><USER6> >Project Oxygen shocked everyone by concluding that, among the eight most important qualities of Google's top employees, STEM expertise comes in dead last.

This result seems a bit unsurprising. People who work at Google would already be in the top n-th percent in terms of STEM expertise. If everyone you hire is 'above average' then being a bit better than that has marginal gains and other factors would lead to your success. I'd be curious to see how this plays out at smaller firms where they cannot afford to hire the top-end STEM expertise.

<comment><USER3> Your observation is a great one, and I'd love to see more data on this as well.

A related point, though, also rings true. Soft skills like being a good coach and effective listening are so underinvested in, that even marginal improvements in those skills lead to huge differences in success.

I see this in engineering leadership workshops that I've run with Jean Hsu and Diana Berlin, where even teaching a handful of coaching and listening skills can have a transformative impact on participants.

If you're interested in future workshops, you can sign up to hear about them here: [https://effectiveengineer.typeform.com/to/cDMeZu](https://effectiveengineer.typeform.com/to/cDMeZu)

<comment><USER7> Do you have any ideas on how companies can better assess soft skills during interviews?

<comment><USER3> At Quip, we run one coding interview that happens on a laptop, and where your conversation and discussions with the interviewer, including how you handle suggestions and feedback, matter a huge deal.

For experienced hires, we'll do deep dives on technical projects that they've worked on. Sometimes, I'll frame these as "Suppose I'm a new member joining that team. Bring me up to speed." These interviews focus on whether the candidate can clearly articulate concepts, explain the big-picture motivations, defend decisions they've made, understand complex technical problems, and stay humble and share lessons learned.

For manager interviews, we'll also do interviews that are one-on-ones with engineers on actual issues that they're facing.

<comment><USER8> > we'll also do interviews that are one-on-ones with engineers on actual > issues that they're facing.

Be careful with this approach. If you're not paying candidates for their interview time, you're not allowed to use their work. Big companies go to great lengths to demonstrate that the entire interview is for the purpose of a hiring decision and nothing more. This is to limit liability. Your approach is very dangerous for your company and if an unhired candidate's idea shows up in your product, even if you arrived at that result independent of the interview, the candidate has a strong case against you in a lawsuit.

If you're doing interviews like this, be sure you've discussed all the nuances with your company's lawyers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> Really great book! The things that stood out for me:

\- Optimize for learning

\- Invest in time-saving tools

\- Shorten the debugging loop

\- Don't sprint in the middle of a marathon

\- Recovery over prevention

\- Automate mechanics, not decision making

\- Make batch processes idempotent

We read it in the book club at work a year ago, and I wrote a longer review of it here: [https://henrikwarne.com/2017/01/15/book-review-the- effective...](https://henrikwarne.com/2017/01/15/book-review-the-effective- engineer/)

<comment><USER3> Awesome! Thanks for adding your notes to the discussion.

</comment></comment><comment><USER3> Hi! I'm Edmond, the author of the book. Happy to answer any questions about my two-year journey in self-publishing the book.

<comment><USER10> Hi Edmond, is "high leverage" a phrase you use in the book? From the notes, "leverage" is defined as "impact / time invested." Why did you choose "leverage" to describe this concept? "Leverage" suggests to me that it is grown with the idea of using it to climb a career ladder, but I'd like to hear your thoughts on this, as I have read just these notes and not the book yet.

<comment><USER3> Yes, "high-leverage" is a phrase I use in the book. I learned about leverage when I read Andy Grove's High Output Management.

Why the word leverage?

Time is our most limited resource. And so the way to really increase our impact (say by 10x) is not to increase the number of hours you work, but to increase your rate of impact, which is how I define leverage in the book.

Another way to think about leverage is in terms of a lever, which lets you apply a little bit of force, have it amplified, and then move large boulders. Many of the stories and strategies from the book talk about these leverage points in engineering, e.g. investing in iterating speed or validating your ideas early and often, where small bits of effort end up having a disproportionate impact.

<comment><USER11> What's the right level of completion for validation? A few weeks for a prototype seems reasonable, but even that can result in feedback that isn't or isn't considered fast enough.

<comment><USER7> It depends. Easily communicated product ideas can be validated on day 0 by talking to users.

Less easily communicated ideas often need at least a demo. Dropbox is one example.

</comment></comment></comment></comment></comment><comment><USER12> It's strange how obsessed software engineers are about methods of working. At a surface level it's just: sit down and write the code. But actually there are thousands of programming languages you can choose from; there are build tools, code standards, testing(to TDD or not to TDD) and mental models you have to wrap your head around before you even can start to consider yourself a decent programmer. It's fascinating, but at the same time I wish it was all simpler. I wonder if there are other occupations in the world that are so much focused on tools, paradigms and methodology as software engineering(investing and trading come in mind. And it's interesting that these notes use so much investing and business lingo).

<comment><USER13> If it was simpler, it wont command such wages, and would be automated out sooner.

Humans' current advantage is the ability to tackle complexity and uncertainty.

<comment><USER11> Another way to look at it is automation will free people up to solve more important problems.

<comment><USER13> Yes, those who'll happen to be capable of that by the time.

</comment></comment></comment></comment><comment><USER14> On the topic of reading code "written by brilliant engineers"…

Code bases can be so large that you might find brilliantly-written things intermixed with things that are not brilliant (and some of those parts may even have been added by the brilliant engineer on an off day). Therefore, it's risky to just absorb an entire blob as Good without also understanding its history.

An interesting side effect of languages/ecosystems with single coding styles enforced: bad changes to good code no longer stick out like a sore thumb! In my experience, developers with the discipline to write great code also typically write it in a consistently _structured_ way, and it's kind of useful that "warts" added by others over time usually won't follow the structure/style and those warts will be easier to find and scrutinize.

<comment><USER15> Somewhat unrelated, it would be great to have a Medium-style highlight feature for codebases, where you could onboard developers toward excellent practice by highlighting good code in a repository that consists of various levels of code.

<comment><USER16> That's actually a really brilliant idea.

We have people sometimes produce the software equivalent of a Picasso, but it so rarely comes to light, and even more rarely codified to guidelines/standard-practice.

Would be very good to have "greatest-hits" of a company's codebase, that could serve as internal knowledge-sharing.

</comment></comment></comment><comment><USER17> > _Optimize for Learning_

An idealist, for sure...

> _Prioritize learning over profitability._

... but that doesn't _sound_ very pragmatic.

I love learning. My boss loves making the company profitable. Coming to a happy medium is where a lot of learning can happen if both of you let it. If one party's not on board, then it's going to end up being a problem.

<comment><USER18> I really liked this post, and I'm again saddened to see 'take downs' in the comments (not solely addressing you).

The author said "prioritize" not to sacrifice profitability in order to learn. By prioritizing learning you may very well increase profitability over the long term. See the recent Google Maps is a moat post.

<comment><USER7> Challenging an idea is not a "take down".

<comment><USER18> At the time I posted there were 3 top level comments, all negative on the post.

</comment></comment></comment></comment><comment><USER19> I think that the understanding of software engineering as an occupation is a bit oversimplified.

While there are good chances most people will be working on web or mobile applications, there's much more going on. Compilers, cryptography, compression, operating systems, graphics, simulation, data retrieval, distributed systems, etc. To that you need to add machine learning and AI.

I think it is hard to come up with a unified set of tactics/strategy to be an effective engineer at each part of this occupational spectrum.

For example, some engineers, while learning, try to specialize themselves in an area while others try to become generalists. Both approaches can be valid depending on the role.

Some engineers focus on applied science while others on theoretical science, some others just on empirical knowledge, processes and techniques. Again, the impact of this decision will largely depend on the role.

Then, prioritization is a double edged sword. To do what is perceived as important is intuitively the right thing to do. But during learning it is harder to recognize what is important. This is how many people end up neglecting valuable learning.

</comment><comment><USER20> Pretty good overview, although I was aghast when I saw that The Mythical Man Month was missing from the book list. The Effective Executive is also a timeless classic that's useful to anyone who manages anything.

<comment><USER21> It references the primary concept, and it also looks like much of the information from MMM is already distilled into this - which is not hard to do; MMM is a bit verbose if I recall correctly.

</comment></comment><comment><USER22> I love all of Edmond Lau's stuff. I accidentally found one of his Google talks while trying to find something for my team when we started on fixing a massively underscaled tech stack. I bought the book read it and shared it with a few other engineers. Super valuable and a lesson I keep trying to teach to our organization is how worth it is to build better tooling.

<comment><USER3> Thank you! It means a lot to me hear its impact on you -- stories from readers are what keep me excited about doing this work.

</comment></comment><comment><USER23> (From the gist's account owner)

FWIW: I didn't produce the content present on this gist.

I've just copy-pasted it from somewhere over the Internet, but I cannot remember exactly the original source. I was also not able to find the author's name, so I cannot give him/her the proper credit.

<comment><USER24> This seems like something worth mentioning on the gist.

</comment></comment><comment><USER25> Lot of very selfish anti team ideas here. Shipping requires doing grunt work. That's the person I want to work with and that's the person I think is valuable.

<comment><USER26> Perhaps I misread the post. I thought there were several points about putting your team first.

I've found that this can mean doing grunt work or it can mean reducing siloed information by having them do grunt work. This is to say that helping the team, helping grow yourself, and helping to ship product are not mutually exclusive from each other.

</comment></comment><comment><USER27> I work on a team in which a few people adopted the strategy of doing 20% of the work for 80% of the impact. That leaves the rest of us doing the remaining 80%. If the people doing most of the work are not getting the credit for it, how is it going to play out in the long run?

<comment><USER28> Why does that 80% need to be done?

<comment><USER29> How else do you get to 100% of the work done?

<comment><USER28> What I mean is that the number of pieces of work that _can_ be done is some high multiple of the work that you can do. So find the projects that are in the top 20% of impact by starting with "why does this need to happen?"

Of course if someone is only doing 20% of any given piece of work (say, never writing tests or refactoring or doing code review), then yea, that is a big problem.

</comment></comment></comment></comment><comment><USER30> Hang on.. What should I do first?

\+ The most valuable thing? \+ The riskiest thing? \+ The simple thing?

<comment><USER3> They're orthogonal dimensions. My fault that this isn't clearer.

Here's a simpler ordering of operations:

1\. Start with the most valuable, highest-leverage thing you want to focus on. 2\. Figure out what the riskiest bit of that thing is. Focus on de-risking it. 3\. When you're de-risking (or more generally whenever you're just doing that thing), start simple. Beware of adding in unnecessary complexity.

</comment></comment><comment><USER29> High leverage, compounding learning, exponential growth, high impact work, high priority, fast paced, focus on value, larger time blocks, ever deeper flow, prioritization for higher leverage, faster deployment, faster tools, shorter iterations, skyrocketing productivity, scale impact beyond confines, impact scaling, time saving, shorter loops, faster tests, shorter compiles, mastered tools...

Does any of this seem a bit Shepard Tones to anyone else?

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

(ever-ascending-tones audio illusion)

</comment><comment><USER31> My most useful insight/takeaway from the book was about leverage and what activities you choose to do as you progress in your career: in six months you could ship 1x engineers worth of output (or maybe 2x or 3x if you are really great) -- or you could help hire and onboard 10 engineers and create 10x worth of output.

Thinking more strategically about the most effective way to spend my own time and energy was easily worth the nominal cost of the book.

<comment><USER32> you are pretty much saying that the most effective way to be an engineer is to not be one

<comment><USER33> "The best code is the code you don't write."

</comment></comment></comment><comment> bra-ket A combination of software engineering and domain expertise makes for a really effective engineer.

As an example - if you work as an software engineer in finance learn about a few particular financial products at the same level or better than your users, get a masters in finance, applied math, accounting and whatnot. This has the added benefit of staying relevant in the market when you age, as software engineering becomes increasingly commoditized.

</comment><comment><USER34> This is effective nonsense. Based on my personal experience, effective engineers I know do not follow a formula like this.

This looks like a list of how to be teacher's pet. A superficial need to be praised by others as effective only takes to "mediocre".

<comment><USER34> I will try to elaborate without trying to insult anyone. It might be harsh but I am sure the author can handle it.

First of all look at this sales copy of the book. [https://www.effectiveengineer.com/book](https://www.effectiveengineer.com/book)

It looks like a weight loss e-book product designed to trick ambitious people into impulse buying. It tries to build credibility by name dropping "google", "facebook", "insert big company here" every other paragraph. Then there are testimonials about how great the advice is from "LeaderLeaderLeader" enterprise hierarchy pattern i.e people with big titles from popular silicon valley companies.

Everything in that page is designed and optimized to make you buy the package. For a price of 250$ you too can know the secrets of effective Engineers.

To sell this content first create and exploit an insecurity in jr.Engineers or fresh job seekers in technology by saying they are not an effective engineer unless they buy this book/package and read the content and then they too will be part of the club and work at a big name brand company. Some people in our work places are exceptionally good at social engineering and not so much in actual engineering. The sales copy co-opted the "engineering" discipline to sell some curated content. This looks much similar to team/company "politics".

I do not think people in "effective engineering" business do this. This is certainly what people in content business do.

Now compare that to some other book for a contrast. [https://basecamp.com/books/getting-real](https://basecamp.com/books/getting- real)

Engineering is just like any other skill for e.g., like playing chess or piano or swimming etc. You get better by doing it many times and failing often. To be good at engineering involves many factors like genetics, discipline, irrational love and passion for a particular domain, patience, exposure to better ideas and better people. Even you are good at engineering, to be effective at a company/market, you need to know the right people and have right social and financial skills to get name and recognition.

Some how, effective engineering has become synonymous with what happens at big name company teams which I think is very wrong. If you look at the real world, once companies reach a bigger size, they stop doing effective anything. They just buy other small companies which spend more time on making effective products.

This content seems to be analogous to "founders at work" but a better title would have been "engineers at the enterprise".

<comment><USER3> The perspective I'll offer is that good sales copy is also a skill, just like engineering or any of the other skills you mention.

To be good at sales copy also involves many factors, like interviewing your prospective customers, understanding what language they use to describe their problems, listening for what dreams they actually have, addressing their concerns by establishing credibility, and having a strong desire to help them achieve their goals.

Good sales copy doesn't aim to "trick" people; it aims to show that the product being sold will achieve the prospective customer's goals.

The reason I'm sharing this perspective is that many engineers do look down on marketing and sales copy as something that's automatically "bad." And that automatic association does them a disservice.

They write awesome code or build awesome products and features that could add so much value to the world, but they then just expect anyone to automatically see that value. They don't take the time to understand what their users' problems might be, to share how what they built might solve those problems, and to "market" their solutions. That mismatch of supply and demand ends up being a missed opportunity, and sadly, this happens all the time.

<comment><USER34> Hope what ever you did works for you. I am probably not your prospective customer. I found the whole sales copy very deceptive. You are selling "Tactical Toolkit" to be effective engineer.

I understand your perspective about engineers undervaluing marketing and sales skills, but I think it's an example of short term thinking. Credibility is a currency, internet never forgets and I would never build credibility like this because I do not know how this will limit my future possibilities.

</comment></comment></comment></comment><comment><USER35> On the "read code written by brilliant engineers" point, as someone just starting to learn Python, where would I find some?

<comment><USER36> Peter Norvig has lots of expository code that embodies lots of good design.

I find I like to learn the flavor of different kinds of code, but practical codebases have so much stuff going on that it's not easy to find the distinctive part. It would be great to see more people do expository versions of familiar software and libraries.

<comment><USER37> +1 Here's a link to Norvig's (self annotated!) github repo: [https://github.com/norvig/pytudes](https://github.com/norvig/pytudes)

</comment></comment></comment><comment><USER38> I used to follow Edmond's detailed posts on Quora and that led me to buy his book. I am yet to complete but like it so far.

</comment><comment><USER39> > Reduce Operational Complexity

If I hook everything into slack I have a simple interface that can cover and reflect all my needs!

</comment><comment><USER40> I pwrsonally found that Refactoring often and unit testing don't play nicely together. A huge refactoring lead to a lot of rewriting of unit tests since they weren't compiling anymore. I was able to reuse test logic though.

</comment><comment><USER41> Does this violate copyright? It appears to be a clear derivative work. I ask because this is something I'd love to see more of, but I'd be afraid of doing myself because I don't want to get a C&D.

<comment><USER42> Is a book review a derivative work? The author of the book is in here politely answering questions rather than crying "you copied!" so the nice summary of his ideas must feel ok to him...

</comment></comment><comment><USER43> Next big thing is finding out the non-algorithmic capabilities of the human mind, and how to best utilize human in the loop.

</comment><comment><USER44> The website is broken (sign up link not working) with ublock on. This is really unacceptable for a landing page.

</comment><comment><USER45> I just skimmed the article, but it seemed a lot like a rip off of "The Pragmatic Programmer" to me.

</comment><comment><USER46> Wow yet another Github Markdown README about how to be good at X or a list of things of X

<comment><USER20> who knew that Github would be used for "10 ways to do x" type of articles

<comment><USER47> People who applied the lessons of 10 ways to read the future.

</comment></comment></comment><comment><USER48> Not one mention of using a spellchecker, surely that's high leverage: quick and easy, increases the quality of your output.

<comment><USER29> surely commenting on the spelling of something you understand is not a high priority, high leverage, effective use of your time?

</comment></comment><comment><USER49> > 80% of the impact comes from 20% of the work.

This simply has no basis in reality nor research and it pains me to see it propagated.

The old VLSI design koan is: "The first 90% of the project takes 90% of the schedule. The last 10% of the project also takes 90% of the schedule. 90% of the engineering occurs in the last 10% of the project."

<comment><USER50> I was going to say the same thing. The 80 20 thing should be reserved to the higher-ups and marketers deciding what to implement. At the development level, zero value is provided by any less than 100 percent of the work. Too many developers just focus on the 20 percent, leaving the project 4/5 unfinished.

<comment><USER51> Your assuming complete and correct requirements. 80 20 is great when you get fuzzy reqs and have to make a decision.</comment></comment></comment>


Exciting Days for ARM Processors - <AUTHOR> https://smist08.wordpress.com/2020/06/24/exciting-days-for-arm-processors/ <comment><USER2> > I think Apple should be thanking the Raspberry Pi world for showing what you > can do with SoCs, and for driving so much software to already be ported to > the ARM processor.

With all due respect, I love my raspberry pi, but Apple just needs to thank whoever was in charge of acquiring PA Semi's know how in 2008, along with the chip mastermind that is Johni Srouji. Or themselves from 1990, when they actually founded ARM as a joint venture with Acorn computers to make chips for the Newton.

<comment><USER3> Before the Pi ...

The first ARM-based device for Linux that I remember getting big was the Sheevaplug. It was an ARM-based "plug computer" with an SD card slot, a USB port IIRC, serial/JTAG port, Ethernet, Wifi, and no display.

I had its next generation, the Guruplug, which had 2 Ethernet ports, Bluetooth, and a couple USB ports. Used it as a router for a few years.

I don't know how long Debian's arm distro was around before then but that was my goto for the Guruplug. Worked great.

<comment> jay-anderson I still have my sheevaplug. It was great to have a small self-contained computer at the time. The raspberry pi definitely fills that spot today, but it isn't a full self-contained package like the sheevaplug was (for the pi you need to figure out the case and power).

<comment><USER4> There is Olimex homer server: [https://www.olimex.com/Products/OLinuXino/Home- Server/open-s...](https://www.olimex.com/Products/OLinuXino/Home-Server/open- source-hardware) Fully contained package for a small home server, Free Hardware Design, SATA

</comment></comment></comment></comment><comment><USER5> > The Intel world has stagnated in recent years, and I look forward to seeing > the CPU market jump ahead again.

Really? AMD's recent moves with Zen/Zen2/Zen3/EPYC look like a big step forward. Zen2 chiplets are the biggest change in years. Zen3 IPC is supposed to be significantly better than Zen2 (17%). The previous gen Ryzen was like 15w TDP, where as the A12Z in the Mac Mini ARM is 15w TDP, but the Zen crushes the A12Z Bionic on benchmarks.

It's difficult for people to remember, but ARM came from really terrible performance to a spot where it is getting in the ballpark of x86, so the advancements look impressive, but that's like saying if I go from $100 to $200, the gains look impressive, whereas you only went from $10000 to $11000, it looks like you are standing relatively still in comparison.

But x86 architectures are decades of maturity, so someone getting a 17% IPC lift (Zen2->Zen3) or a massive reduction in TDP on such a complex chip, isn't stagnation, it's actually MORE impressive IMHO.

ARM is going to reach marginal returns, and soon the yearly perf boosts won't look as impressive anymore.

In the end, I think we'll see convergence of performance. ARM will still have a power advantage on mobile, because they don't have so much backwards compatibility legacy that x86 has to support. However, are Macbooks and Mac Desktops going to be performance and price competitive with Linux x86? I doubt it.

First of all, ARM vendors haven't even come close to the GPU performance of NVidia or AMD's discrete GPUs. An ARM A13 or Mali is not going to compete with a laptop with an RTX 2060, 3060, or RDNA1/2\. And secondly, just looking at AMD, it's possible to lift performance / watt still in x86.

I think the laptop space in the x86 realm is still exciting, because of what AMD and NVidia are doing.

<comment><USER6> You might find it interesting that Apple made some very suggestive statements at WWDC regarding graphics performance, like "don't assume discrete graphics is better than integrated". I think it might be interesting to wait a bit to see what they come out with.

<comment><USER5> Right, so a device with 5000+ CUDA Cores, 312 TFlops of Tensor Cores, hundreds of dedicated RT Cores, and 1+ Tb/s memory bandwidth to 8gb of dedicated VRAM, and 54 billion transistors, is going to lose to a SoC? Not likely.

Apple's view of what "discrete" performance is, is probably 2-generation old cut-down mobile variants. For example, their top-of-the-line uber-expensive Mac Pro ships with Radeon Vega II architecture from 2017. Meanwhile, AMD RDNA2/Navi and NVidia Ampere are about to ship.

From my view, they're at least 2-3 generations behind in performance, and their focus on mobile means they're always going to be behind given thermals. NVidia and AMD are focused on maximum performance, and they assume gaming takes place plugged into a wall socket. And because they're focused on maximum performance, especially for triple-A title games and DCC, they're putting in features like DXR (DirectX Raytracing) with support for hardware accelerated ray-intersection. How long until I can run Minecraft with ray-tracered shaders at 2k or 4k on Apple's GPU? ([https://www.youtube.com/watch?v=AdTxrggo8e8](https://www.youtube.com/watch?v=AdTxrggo8e8))

I mean, Apple's engineers on ARM are good and they did a fantastic job improving the PA Semi IP, but I don't think they're going to take what's essentially a PowerVR architecture which was never competitive with discrete, and leapfrog NVidia and AMD.

<comment><USER7> Apple's GPUs have exceptional render performance. Consider how close they get to a GTX 1060 laptop already[1], and then consider that their upcoming chips can comfortably double GPU core counts and will be 50% stronger per core with even conservative generational improvements.

They do less well in compute, but even there they do well, and a 16 core A14 GPU is likely to bat with a 1060.

[1] [https://images.anandtech.com/graphs/graph13661/103805.png](https://images.anandtech.com/graphs/graph13661/103805.png) (not a perfect benchmark because of CPU bottlenecking, but there are no good benchmarks to choose)

<comment><USER8> Not exceptional and impressing for comparing 14nm/7nm GPUs. (yes it's fanless.)

<comment><USER7> A 1060 is 200mm² of pure GPU at ~100W, an A12X's GPU is ~26mm² (approximated) running at ~10W.

Of course it's impressive. Even if that was somehow all down to the better node, their next generation SoCs will _still_ use a newer node than NVIDIA's next generation GPUs.

<comment><USER8> You comparing 1060's entire die size including NVEnc, memory controller, PCIe controller, and so on vs A12X's GPU core only die size. And I expect 1060 is optimized for perf but A12X is optimized for power(temp).

There's no reason NVIDIA should use a process behind Apple forever because both uses TSMC (and Samsung) and process improves slowing down.

<comment><USER7> Cropping to the inner part still gives ~140mm², or comfortably over 5x the size of Apple's GPU.

I don't really get your argument. Apple customers buying Apple Silicon Macs—which, again, will probably have a GPU over three times as fast as the A12X—aren't going to let hypotheticals detract from their powerful and power- efficient GPUs. 'But NVIDIA didn't optimize for efficiency' and 'but NVIDIA hypothetically could have used a newer node than they did' don't count for squat.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I was a bit surprised the article didn't mention Windows on ARM at all. Following the Apple announcement, I managed to snag a Windows laptop that uses the Qualcomm Snapdragon 850 ARM SoC for dramatically less than MSRP on eBay. (To be fair, they were selling it for parts since they couldn't figure out how to remove the password. Wiping the drive and reinstalling Windows was easy enough.) For the most part, it feels just like Windows. Every app I've downloaded has _just worked_. That being said, there's definitely at least one app that won't (Wireguard since it requires an ARM64 driver to work). I've actually been tracking which software provides an ARM64 version[1]. Sadly, it looks like virtually every toolchain still needs to update to support ARM64 on Windows. I'm tracking a handful of GitHub issues, and support is definitely in the pipeline, but it's slow going. For example, .NET _still_ doesn't support Windows on ARM, despite the fact it's the flagship way to build apps on Windows, and ARM64 Windows devices have been available for almost two years.

[1] [https://iswindowsonarmready.netlify.app/](https://iswindowsonarmready.netlify.app/)

<comment><USER10> Is plain win32 API supported on arm64/Windows? Is there a version of MSVC? Or does one use mingw?

<comment><USER11> Hello,

Win32 is supported with MSVC just fine.

You can also use MinGW with LLVM (not MinGW with GCC), available at: [https://github.com/mstorsjo/llvm-mingw](https://github.com/mstorsjo/llvm- mingw)

</comment></comment></comment><comment><USER12> I'm quite interested in what Nvidia is planning. Nvidia purchased Mellanox last year (they make high-end network gear often used in compute clusters). Nvidia is very involved in machine learning with their GPUs. The only missing part of puzzle is CPUs which was either Intel or AMD (a direct competitor). ARM changes things and means they're not dependant on those companies (and the x86 licensing clusterfcuk preventing newcomers), and they have some room to tailor it to fit their needs (like Amazon & Google recently).

These definitely are exciting times. Most Brits born in the 80's and 90's will have used Acorn computers in school, no one predicted that what would grow out of it (they weren't particularly fast).

<comment><USER13> You seem to have overlooked the Tegra X1, which powers 55+ million Nintendo Switches. Nvidia seems to already be invested in the ARM CPU market and doing relatively well. Their X2 powers the new Shield devices and who knows what else in the future.

Yes, that's a very tiny number compared to the billions of CPUs made by Intel, Apple, AMD, Qualcomm and Samsung, but the point is, they are already doing ARM CPU integration and have carved out a decent niche for themselves.

<comment><USER6> Video game CPUs aren't generally where the puck is going, sadly. Cell was interesting but other than that we've had a history of picking a semi-popular architecture and usually some old chip (Nintendo) or just a normal x86.

<comment><USER13> You are totally mistaken. Have you seen what the PS5 is doing with memory bandwidth? It's amazing. The entire PC industry is going to end up emulating their architecture.

<comment><USER8> Memory bandwidth (by using GDDR6 for shared RAM/VRAM) is impressive compared to PC but it's already done by PS4(GDDR5) and not special/difficult architecture like Cell. Just a difference comparing general hardware vs gaming hardware.

For normal PC workload, such bandwidth is not useful and GDDR increases latency.

IMO Interesting thing like HBM is happening in Server/HPC world.

<comment><USER13> I was talking about PS5's secondary storage being essentially as fast as RAM: 9GB/sec throughput with custom 12-channel controller to the new PCIe 4.0 SSD.

[https://screenrant.com/ps5-io-ssd-speed-tech-specs- playstati...](https://screenrant.com/ps5-io-ssd-speed-tech-specs- playstation-5/)

<comment><USER8> It's impressively fast and adopting it as standard equipment is great but similar SSD product should be available for PC soon. Not feel innovative like Cell.

<comment><USER13> Right, so you could say that "being available for PC soon" means that's "where the puck is going", correct? Which was my original point. The PS5 is a video game console, but isn't just commodity hardware, but is actually pushing the limits of computing in a way that the PC industry will soon adopt.

Also. It might be much longer than "soon". Though Sony is targeting the next gen SSD specs (unlike Microsoft), there will need to be a new generation of motherboards and CPU upgrades before PCs will be able to come close to the PS5 bandwidth, even with the same exact next gen SSD.

<comment><USER8> I don't think the PS5 will make SSD manufacturers to develop faster SSDs. It's already on the roadmap.

But I want the PS4 to enforce a fast SSD as a requirement for PC game, like you say. I think game consoles have a power to standardize great techs, but no longer makes innovating techs for computing.

"a new generation of motherboards and CPU" was available in 2019.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> > One possible downside of the new Macs, is that Apple keeps talking about the > new secure boot feature only allowing Apple signed operating systems to boot > as a security feature. Does this mean we won't be able to run Linux on these > new Macs, except using virtualization?

No, you can turn off secure boot.

<comment><USER14> Was it just a gaffe when Federighi mentioned you couldn't install alternative operating systems in his recent Daring Fireball interview, then? I admit I could have misunderstood him, but it seemed like that was what he was saying.

<comment><USER15> An important thing to recognize is that every version of macOS (and iOS!) so far has retained some official way to boot a custom/unsigned/"unclean" kernel, specifically for kernel (or kernel extension) development.

When SIP (rootless v1) was introduced, macOS came with a way to disable it, for the sake of kernel developers. When APFS was introduced by default, macOS retained _two_ workarounds for kernel developers: both the ability to boot from alternate APFS volumes within the APFS container; and _also_ the ability to install to/boot from HFS+. And when the system volume became truly read- only in Catalina (rootless v2)—that's right, even that restriction could be overridden via csrutil, specifically to facilitate kernel development.

Apple is never going to lock themselves out of booting custom OSes that are almost, but not quite, macOS; because that's how new macOS gets made.

And, of course, as long as you can boot something that's not literally macOS; then that same mechanism can always be abused to boot something that is much less macOS, or in fact not macOS at all (but may still _seem_ to be macOS, from the bootloader's perspective.)

<comment><USER16> Nitpick: SIP and rootless are the same thing.

<comment><USER6> Followup nit: the read only system partition is named as such and pronounced as an acronym.

</comment></comment></comment></comment></comment><comment><USER17> I take delivery of a Raspberry Pi 4 tomorrow. I'm really hoping it will replace my MBP for almost everything I do — namely clerical office work, teaching high school CS, and web browsing. Exciting times.

<comment><USER18> I would be prepared to be underwhelmed at using a rpi as a desktop. Graphics drivers still need work.

This is where I think Apple can do it right. They can tune drivers and fully optimize system performance, since they basically own the whole stack, and won't be stuck with proprietary broken blobs or reverse engineering a 3rd party design.

<comment><USER17> I've watched a lot of YouTube videos of, ironically, people using Raspberry Pis to watch YouTube videos. The UI seems snappy, and I can live without full screen 1080p — the only thing that seems poor is full screen full resolution video.

Is there anything else I should be looking out for?

Raspberry Pi 4 is now OpenGL ES 3.0 certified, so I'm expecting it to only get faster with time. My main concern is a Pi5 being released and my "old" hardware becoming obsolete.

<comment><USER19> Here was my experience a few weeks ago: [https://www.jeffgeerling.com/blog/2020/i-replaced-my- macbook...](https://www.jeffgeerling.com/blog/2020/i-replaced-my-macbook-pro- raspberry-pi-4-8gb-day)

Just as a helpful data point.

<comment><USER17> Followup: this was very helpful, thank you. As much for the technical content as the inspiration that it _could be viable_.

No, it didn't really work out for you.

Yes, it's working out great for me!

Konsole with Terminus is an aesthetically pleasing environment in which to work, 8 hours a day.

i3 in 4k, even at 30Hz, looks great. Vim renders fast (66-80ms keyboard latency.)

eog, evince, and gimp let me fiddle with materials. gnome-screenshot copies to the clipboard for rapidly sharing notes with others, based on what I have on screen.

davmail transparently connects dumb IMAP clients to the corporate email, address book, and calendaring systems. I have an XBiff alerting me to incoming Outlook emails!

REPL.it is slow in Firefox but fast in Chromium. It's going to work just fine for managing pupils' class work.

My home directory is encrypted and mounted on login. Mutt and offlineimap let me handle last term's mail in bulk.

Python and git and tmux let me prepare and mark work from the students, or at least they should do come next term. I have all my little tools working to give me an excellent markdown environment for note taking on classes and pupils and meetings. Asciidoctor for the more typographically demanding class materials.

Absolutely all of this was a breeze to set up because all of these technologies _just work_ in Raspbian/Debian on armhf. It has, so far, been unbelievably clean and pleasant.

I even have LXC working locally, for running Unix and IPv6 experiments with multiple little Alpine "VMs". χ!

</comment></comment></comment></comment></comment><comment><USER20> Hindsight is 20/20, but Intel selling off their ARM division (XScale) almost exactly a year before the first iPhone was announced looks like a pretty bad call in retrospect.

<comment><USER21> it gets worse. apple had apparently originally approached intel to build arm chips for the iPhone, and intel said no due it thinking it would never be successful: [https://appleinsider.com/articles/15/01/19/how-intel-lost- th...](https://appleinsider.com/articles/15/01/19/how-intel-lost-the-mobile- chip-business-to-apples-ax-arm-application-processors)

<comment><USER22> It's like Decca refusing to signup The Beatles.

</comment></comment></comment><comment> tedk-42 Woah. Isn't apple only licencing the ARM instruction set? They're still very much physically making their own chips riight?

The A13 bionic wouldn't physically share any components built by ARM?

If that's the case, it's like saying AMD use Intel chips, but really they just licence the instruction set

<comment><USER23> They're designing their own chips, including their own CPU core (which implements the ARM instruction set). TSMC actually fabs them though. There may be some ancillary cores or blocks licensed from ARM, but nothing major.

<comment> tedk-42 Ithought so. Full credit to apple then for pioneering this effort.

I appreciate some commenters saying the raspberry helped, but really it's apple who are the taking a big step forward with popularising a third player in the CPU space. Unless they are willing to sell their chipsets, I doubt it will affect consumer products much outside of their own ecosystem.

Again nothing exciting for ARM, but more the future of apple chips

</comment></comment></comment><comment><USER24> My fingers are crossed for Steam on ARM and distributing ARM binaries for games that devs cross-compiled. Given Valve's support for Linux, if an ARM client ran on Android too and could finally access my library on my phone, I'd be a happy customer.

</comment><comment><USER25> Surprised he doesn't mention Nuvia, which could be a very exciting development in Arm servers (if it lives up to the hype of course).

<comment><USER26> Isn't Nuvia "just" making a server chip with ARM Neoverse cores? Nothing to sneeze at, sure, but if you want to kick the tires just launch a graviton2 instance on AWS?

<comment><USER27> AWS won't sell you the physical hardware.

Ampere will, though — Altra's going to be good. Also there's Marvell (ex- Cavium), but that's custom cores, and rather HPC-focused.

More choice is more better though, and since Jon Masters works for Nuvia, we know Nuvia is going to have the most compliant and least quirky hardware, especially in the PCIe area :) Though to be fair, Ampere's first generation is already very decent in terms of this, and Ampere even promised to eventually contribute support for their hardware to EDK2 TianoCore open firmware..

</comment></comment></comment><comment><USER28> What size is a memory page on other ARM CPUs? I think Apple's processors use 16KiB pages. Doesn't x86 software assume a 4KiB page size, unless it deals with huge pages?

<comment><USER29> They all support 4KiB, 16KiB, and 1MiB. It's required by the ARM spec, obviously with the exception of CPUs that don't have an MMU. Support for 16MiB pages is optional.

<comment><USER30> And for 64-bit ARM, the base page sizes are 4KiB, 16KiB, and 64KiB, with IIRC 16KiB being optional. If you want 52-bit physical addresses, you need to use 64KiB base page size, otherwise the maximum is 48-bit physical addresses; this is probably why RHEL uses 64KiB page size on 64-bit ARM.

<comment><USER31> 64kb is also a better match for today's working sets to avoid TLB pressure. I imagine x86 would switch to it or something close if it weren't such a schlep.

<comment><USER30> Another advantage of a 64KiB page size is that it allows for a bigger L1. The L1 is usually VIPT (for good reasons), and to prevent confusing issues with aliases, it means that its maximum size is a single page per cache way. For an 8-way cache, that means the L1 can be at most 32KiB with a 4KiB page size; with a 64KiB page size, even a 2-way L1 cache could have up to 128KiB.

</comment></comment></comment></comment></comment><comment><USER32> > Of course this computer runs Linux and currently is being used to solve > protein folding problems around developing a cure for COVID-19, similar to > folding@home. This is a truly impressive warehouse of technology and shows > where you can go with the ARM CPU and the open source Linux operating > system.

Extraordinary claim, but any evidence to support that Fugaku is super useful apart from making headlines?

</comment><comment><USER33> I am not sure what to make of the fact that the article never says "X86", but keeps mentioning "Intel" and occasionally "AMD". Was that tailored to the expected audience, or the author is not confident enough about what "X86" means?

</comment><comment><USER34> I would have preferred this to happens with RISC-V, though...

<comment><USER35> It will and much sooner than you think. Everything that is making Arm attractive right now is applicable to RISC-V but even more so, since it is so much easier to add custom logic.

</comment></comment><comment><USER36> Did Apple say they would move their entire line of Macs to Apple Silicon? I thought Federighi said they had « amazing » Intel-powered new Macs in their pipeline.

<comment><USER37> Yes, they announced a transition to Apple Silicon over two years. There are a few new Intel Macs left in the pipeline before everything switches over.

</comment></comment><comment><USER38> Are Apple ARM chips the same as other ARM chips or are there any "magic" that requires more work for developer to port software?

<comment><USER39> Pure speculation on my part, but I think Apple wouldn't want people installing either other OSes on their machines or their OS on other hardware, so I would expect some lock-in hardware/firmware/software to make impossible or really difficult to build ARM hackintoshes and the other way around. Hoping to be wrong, though.

<comment><USER40> In his interview with Gruber, Federighi explicitly said that they wanted hobbyists and hackers to be able to play with the Mac hardware, so it would be possible to boot other OSen. Don't have a link right now, but it was clear that he was saying that the platform would be hackable.

Proof will be in the pudding of course.

</comment></comment></comment><comment><USER41> Where can a developer buy one of these $500 ARM minis?

<comment><USER42> You can't buy them - it's more of a rental situation.

<comment><USER6> And you need approval and all, plus there's a bunch of terms and conditions…

<comment><USER43> Like living in one of the EU countries that Apple have decided are part of the EU rather than all of them. <grumbling from a Balkan EU country not on the list>

</comment></comment></comment></comment><comment><USER44> Read the first paragraph then wished that the font on mobile was a lot bigger.

<comment><USER45> " _Please don 't complain about website formatting, back-button breakage, and similar annoyances. They're too common to be interesting. Exception: when the author is present. Then friendly feedback might be helpful._"

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER6> Is this a new addition to the guidelines? I could have sworn it wasn't there before…

<comment><USER46> Yup! Just 10 days new.

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

</comment></comment></comment></comment><comment><USER47> Apple should start investigating a transition to RISC-V IMHO

<comment><USER26> Given that Apple was one of the original founders of Arm, and has an ARM architectural license (the most gold plated license Arm sells, basically allowing the customer to create their own chips implementing the ARM ISA), I'd guess Apple would be the last one to switch from Arm to RISC-V (assuming such a switch would ever happen).

</comment></comment><comment><USER48> Apple Silicon are not ARM processors. They have ARM compatible instruction sets. They are not based on 3rd party ARM cores.

<comment><USER49> That's like saying AMD chips aren't x86 processors.

<comment><USER48> No, it is like saying AMD chips aren't Intel processors.</comment></comment></comment>


First 3D-Printed Car Hits The Road - <AUTHOR> http://www.kurzweilai.net/first-3d-printed-car-hits-the-road

<comment><USER2> The big boys' RepRap!

But from the looks of it, the 3d printing process is for mold making rather than the finished product itself.</comment>


Ask HN: How many of you would love to join an another new social network? - <AUTHOR> <comment><USER2> If there was a compelling reason to then definitely, but I have no idea what that reason would be. I do know what it _wouldn 't_ be though. I wouldn't want to join a network that's better for sharing status updates, or photos, or memes, and I'd be very reluctant about any network that claimed better privacy or security if it's business model was based on advertising.

</comment><comment><USER3> I would, but I'm not sure what the right format is for saying so. Are we all supposed to reply with "yes" or "no"? That could lead to a very awkward comment thread!</comment>


Introduction to HTML and CSS - <AUTHOR> https://github.com/mjhea0/thinkful-html

<comment><USER2> "For this exercise, please download the cross-platform editor Sublime Text, which is an _open-source_ editor designed for simplicity and ease of use.

Also, please make sure you have Google Chrome installed."

<comment><USER3> Indeed. ST is neither open-source or free.

<comment><AUTHOR> Updated. Thanks to some kind PULL requests

</comment></comment></comment><comment><USER4> This is a great resource. Good work!

I recently was helping out a non-technical friend with basic HTML/CSS stuff (like this repo) and I had the best success with showing her [http://www.codecademy.com/tracks/web](http://www.codecademy.com/tracks/web). She had tried other resources but _for her_ , Codecademy seemed to be the most hopeful and easy to use (AND FREE).

<comment><AUTHOR> Cheers!

</comment></comment><comment><USER5> \- things like "first-paragraph" are better written as classes.

\- things like odd-even should be implemented with pseudo selectors.

</comment><comment><USER6> Hi! This is Ellen from Thinkful. The author is one of our amazing mentors who does a number of free sessions where he walks through these types of guides. Check it out: [http://www.thinkful.com/a/mentorship- preview](http://www.thinkful.com/a/mentorship-preview). If you are just starting to learn to program we hope you join us!

<comment><AUTHOR> Yes, I present a basic tutorial like this every Wednesday. Then address any questions about the tutorial or programming in general. I'm a Python and front-end mentor and know Ruby as well. So if you're looking to learn how to code, contact me. Or visit [http://thinkful.com](http://thinkful.com).

Cheers!

</comment></comment><comment><USER7> This makes it sound so easy... browser bugs and idiosyncrasies still cling to web development like barnacles. Maybe one day when the old IEs and Firefoxes are dead, web development will become this. I hope it does, at least :)

<comment><USER8> You have to start somewhere - when beginning, there's no reason to worry about different browsers, you need to focus on the core concepts.

</comment></comment><comment><USER9> Good one for Start up developers as this is clean and the challenges in last of the Github Page are fair for them. Good to see that old html tags are not used.

</comment><comment><USER10> It's a shame that they're not producing valid HTML.

</comment><comment><USER11> nice touch with the

 either is fine

<comment><USER12> isn't
 part of XHTML and not HTML5?

<comment><USER11> Actually looking into it seems that it is, and that example is wrong.

The spec examples only use
 and call it a void element (one which can't have any content) but states only foreign elements can be self closing.

<comment><USER13> It's true that void elements can't be self-closing in HTML, but the slash is still allowed. If you scroll down to 188.8.131.52 #6, you will see that the slash is just ignored if present on void elements.</comment></comment></comment></comment>


Android 2.0 First Look: Fresh Face, Sick Speed - <AUTHOR> http://gizmodo.com/5383485/android-20-first-look-fresh-face-sick-speed

<comment><USER2> what a content-less article. they just reposted screenshots from bgr and didn't even do any of their own testing.

<comment><USER3> Agreed. No new information. Same screenshots I've seen on 5 or 6 other mobile blogs. Useless 'me too' article

<comment><AUTHOR> Sorry for posting it then guys. I honestly haven't seen these screenshots before, that's why I posted :)</comment></comment></comment>


Engauge Digitizer: Extracts data points from images of graphs - <AUTHOR> http://markummitchell.github.io/engauge-digitizer/ <comment><USER2> Wow, nice to see this posted here. I had used this at one point for a project that could make arbitrary datadog graphs (was useful when writing articles and wanting to show a specific example) based off a hand-drawn approximation.

</comment><comment><USER3> Interesting. I'll keep an eye on this as I've previously used [https://automeris.io/WebPlotDigitizer/](https://automeris.io/WebPlotDigitizer/).

</comment><comment><USER4> Really appreciate this. Makes it easy to convert graphed academic journal results into data I can use for funding presentations. Thank you.

</comment><comment><USER5> Thanks for posting this. This looks quite useful for making programmatic use of electronics datasheets.</comment>


Links were always supposed to go both ways. It just took decades to get there - <AUTHOR> https://capiche.com/e/roam-research-worldwideweb-xanadu <comment><USER2> Here's another article on Roam Research (I did appreciate the history in that link) that more clearly explains what it is they're up to. [https://nesslabs.com/roam-research](https://nesslabs.com/roam-research)

Also noted, Roam wants a request for access to their site: [https://roamresearch.com/](https://roamresearch.com/)</comment>