Neil Fraser

neil.fraser.name · Personal blog · on HN since 2008

Neil Fraser, a Google engineer, writes about programming projects, computer science education, and odd experiments like JS-Interpreter and Differential Synchronization.

What HN saysHN commenters cite it for the neural-network tank failure story, the computer-science-by-mail post, and as a reference on operational transformation and synchronization.
78HN people shared it
43linked it in comments
104stories submitted
2.3Kstory points
5 months agolast shared
2008people per year2026

Most-shared posts

  1. 1
    Differential Synchronization (2009)
    22 people · 81 points · first shared 2009 · 10 comments on HN
  2. 2
    Computer Science in Vietnam
    9 people · 304 points · first shared 2013 · 49 comments on HN
  3. 3
    Neural Network Follies (2003)
    5 people · 32 points · first shared 2011 · 4 comments on HN
  4. 4
    Computer Science by Mail
    4 people · 151 points · first shared 2015 · 50 comments on HN
  5. 5
  6. 6
    Lava Lamp Centrifuge
    2 people · 70 points · first shared 2010 · 38 comments on HN
  7. 7
    String overlap detection in Python
    2 people · 68 points · first shared 2010 · 14 comments on HN
  8. 8
    Google Multivac
    2 people · 58 points · first shared 2009 · 17 comments on HN
  9. 9
    Hardware: Computerized Etch a Sketch
    2 people · 10 points · first shared 2009 · 1 comments on HN
  10. 10
    Image to HTML Converter (clever, but useless)
    2 people · 5 points · first shared 2008 · 2 comments on HN
  11. 11
    Human Element
    2 people · 3 points · first shared 2011 · discussion on HN
  12. 12
    Controversial log(n) prefix matching explored ...
    2 people · 3 points · first shared 2011 · 1 comments on HN
  13. 13
    The one, the only, photograph of Earth (2001)
    2 people · 1 points · first shared 2016 · discussion on HN
  14. 14
  15. 15
    11 01
    2 people · first shared 2009

What HN people wrote when they linked it

bsznjyewgd · 2016-10-09
I'm reminded of one of Neil Fraser's blog entries "CS by Mail" https://neil.fraser.name/news/2015/04/13/, in which he received mail from someone inquiring how he could learn programming in prison and Neil recommended CS Unplugged. I wonder if that worked out.
phes · 2016-10-08
I remember reading this here a while back - wonder what happened: https://neil.fraser.name/news/2015/04/13/ But like others in this post I would recommend CS unplugged. And depending on how long he is in there for he might want to look at: How to Design Programs - This is a good book, and although it's in Scheme, it teaches how to create appropriate levels of abstraction, which seems to be something many programmers struggle with. Concepts, Techniques & Models of Computer Programs - Discusses the different paradigms and how they are inter-related. Also something a bit more vocational like The Pragmatic Programmer or Clean Code / Clean Coder probably wouldn't hurt either. If he can read all of those he will be very well prepared to do some actual programming when he gets out. SICP not a bad shout either, although I've not got past the first chapter.
jweir · 2015-06-20
https://neil.fraser.name/writing/tank/ This is a classic story of a neural net failure. The net was able to find tanks hiding in the trees with amazing accuracy. Too amazing. It turned out the photos of the hidden tanks were all photographed on a cloudy day. The images without tanks in a clear day.
amix · 2013-12-30
For OT to work you would need the ability to track all the changes and mirror them to the other users. React appears to have the ability to track changes, but I am unsure how easy it would be to mirror them over the network. There's a great article here that describes how OT and other synchronization algorithms work (OT is event passing): https://neil.fraser.name/writing/sync/
ivan_ah · 2013-04-14
While OTs (there are several variants) are a promising approach for distributed authoring, I think the complexity of implementing them is still prohibitive. Surely there is a better way... I have been reading papers on this looking for a "clean" way to solve this (in the context of packet loss, latency, etc). One good approach I was able to understand is Neil Fraser's Differential Sync http://neil.fraser.name/writing/sync/eng047-fraser.pdf There are other approaches out there. One example which uses character based changes and is worth checking out is here: PAPER wikisym.org/ws2010/tiki-download_wiki_attachment.php?attId=15 CODE https://github.com/gritzko/ctre I feel like it is time someone solved this collab. editing thing once and for all and shared the code with everyone. (Firepad? https://github.com/firebase/firepad/)
Lewisham · 2011-03-30
I'm an intern right now. Just today I saw Neil Fraser [1], who wrote MobWrite [2]. I shook his hand and thanked him, he's probably one of the reasons I actually managed to pass! My third phone interview had code in MobWrite, not Google Docs, and it was so much better. I'm going to try to find a way to feed it back to HR, because it really is much easier to think about code when what you're doing looks like code. [1] http://neil.fraser.name [2] http://www.mobwrite.net
RiderOfGiraffes · 2010-08-15
Check out the end of this page: http://neil.fraser.name/news/2009/10/27/ It's a great example of "Nerd Sniping": http://xkcd.com/356/
keizo · 2024-12-07
I implemented differential sync (https://neil.fraser.name/writing/sync/) mostly because I couldn’t understand anything else and seemed simplest in my grugnotes.com app -- and while the app is pretty janky and not fully real-time, it does get your example merge right regardless of who comes back online first. In the case the deletion comes online first, the 'colour' version is thrown out and not saved in edit history. I’m sure there’s a lot more wrong with it, have no idea what would happen with more than two users, but for my case I’m happy with it. :)
lioeters · 2024-09-13
That reminds me of the JavaScript interpreter written in JavaScript (which is used for Scratch, I think) - that supports stepping through multiple instances of the interpreter to achieve a kind of interleaved concurrency. https://neil.fraser.name/software/JS-Interpreter/docs.html#threading > JavaScript is single-threaded, but the JS-Interpreter allows one to run multiple threads at the same time. Creating two or more completely independent threads that run separately from each other is trivial: just create two or more instances of the Interpreter, each with its own code, and alternate calling each interpreter's step function. They may communicate indirectly with each other through any external APIs that are provided. > A more complex case is where two or more threads should share the same global scope..
speps · 2023-11-16
The Wikipedia page for Operational Transformation [1] mentions Differential Synchronization [2] as an alternative, does anyone have any experience with DS? [1] https://en.wikipedia.org/wiki/Operational_transformation [2] https://neil.fraser.name/writing/sync/
alephnan · 2023-10-04
> text editing as the de-facto solution is so weird to me since that problem is both niche and extremely complex. My first foray into collaborative editing was for my text editor. Indeed, things get super linearly harder as you add basic functionality of editors such as deleting and replacing, especially when those space multiple lines. Instead, I reached for Fraser’s differential syncing. https://neil.fraser.name/writing/sync/. There’s a lot of ambiguity and nuances in various versions of the prose and white paper that I could never really flesh out. I think anyone attempting to relay a collaborative editing algorithm needs to do is start with the simplest scenarios: append only / monotonically increasing data.
nigrioid · 2022-05-26
I remember coming across this one a long time ago. Could this be it? https://neil.fraser.name/software/img2html/
flatiron · 2022-03-14
https://neil.fraser.name/news/2019/Polara%20Operations%20Manual.pdf "The EPBS will compare the system security code with the code entered on the E-Configurator. If the code matches, you will have an opportunity to change the code. Press NO to continue on without any change. Press YES if you want to change to a new security code at this time. Entering a new code uses the same technique just described, using the Left/Right and Down keys. It is necessary to use a security code different from the default AAAA. Failure to change the code will cause a periodic message to play – “CHANGE PASSWORD”." they just didn't RTFM and that password is still set to AAAA
pg_bot · 2018-10-16
For anyone interested in this issue I would suggest taking a look a Neil Fraser's Differential Synchronization.[0] It took me 2 weeks as a solo developer to add real time collaborative editing to our product using that method. [0]: https://neil.fraser.name/writing/sync/
billconan · 2018-02-05
How does this compared to differential synchronization used by google drive? https://neil.fraser.name/writing/sync/
sanxiyn · 2017-12-28
See also: The one, the only, photograph of Earth (2001). https://neil.fraser.name/writing/earth/
sn9 · 2017-08-13
For example of how children can be taught to program at a surprisingly high level with a paucity of resources, see this blog post on CS in Vietnam: https://neil.fraser.name/news/2013/03/16/ People need to raise their expectations of what children are capable of when given the right resources and environment.
gghh · 2017-05-12
This blog post from Google engineer Neil Fraser made the rounds 4 years ago: https://neil.fraser.name/news/2013/03/16/ He traveled to Vietnam and observed a high quality Computer Science education in primary / secondary school. Talking about grade 11 scholars, he wrote: After returning to the US, I asked a senior engineer how he'd rank this question on a Google interview. Without knowing the source of the question, he judged that this would be in the top third. The class had 45 minutes to design a solution and implement it in Pascal. Most of them finished, a few just needed another five minutes. There is no question that half of the students in that grade 11 class could pass the Google interview process.
sushimako · 2016-11-15
https://www.hiroapp.com - Note-taking reduced to the core that just works™. Offline first, no signup needed, easily sharable (url, sms, email) and (web)realtime sync between all devices and collaborators. My co-founder and I moved on to a new project a year ago, but this thing is still buzzing along on a cheap DO box and works like a charm with basically zero maintenance. Frontend is vanilla JS, backend in Go and the protocol is our slight modification of differential sync[0] to (re-)synchronize all text and metadata. [0] https://neil.fraser.name/writing/sync/
techplex · 2016-10-08
Niel Fraser, the guy who created the Blockly block programming toolkit also created a JS Interpreter which allows single stepping of code. https://neil.fraser.name/software/JS-Interpreter/docs.html
akjetma · 2016-03-01
Not sure if this is what you're looking for but I've been working on a collaborative coding environment for clojurescript lately and am implementing the algorithm from this (incredibly readable) paper https://neil.fraser.name/writing/sync/
wallflower · 2016-02-14
While imperfect, test scores provide some context for comparison. The being said, back in 2013, this article was widely shared. It demonstrates that you can teach STEM ways of thinking (e.g. CS), starting from early elementary grades. It does not have to be a AP-level course. https://neil.fraser.name/news/2013/03/16/
cbr · 2015-12-24
> ended up learning which days were sunny and which were overcast. The earliest source I can find for this is https://neil.fraser.name/writing/tank/ but it says it "might be apocryphal".
espadrine · 2015-10-20
This looks quite neat! I believe text synchronization relies on Simon Fraser's Differential Synchronization[0], which relies on conventional diff / match / patch and requires that the server hold a full copy of each user's files (and that each client hold a full copy of the server's copy, in addition to its own). I believe it complicates >2 user editing and re-synchronization after a brief disconnection. Was there a technical reason to use that instead of Operational Transformation or CRDTs? [0]: https://neil.fraser.name/writing/sync/
dugmartin · 2015-04-23
An alternative to OT is Differential Synchronization. You can find out more here: https://neil.fraser.name/writing/sync/ I wrote this to help me understand the algorithm: http://dougmart.in/dssimulation/
pmontra · 2015-04-15
Thanks for the reference to Differential Synchronization, very interesting! https://neil.fraser.name/writing/sync/
gcommer · 2015-01-21
You are completely assuming that everyone who wants to program is intending to do so professionally, or that they won't be able to grow from a basic intro of "here is how to present your thoughts programmatically" and then cover the deeper subjects later, as they need to. This is especially relevant as we start teaching programming at younger and younger ages. I hope it's obvious that when kids start programming in 4th grade, it's much more intuitive to start them on Logo than lambda calculus... See, for example: https://neil.fraser.name/news/2013/03/16/ Also, if you look at the amount of money that "Flappy Bird" made, perhaps making brain-dead iPhone apps isn't such a bad deal...
skybrian · 2014-11-05
Operational transformations are used by both Google Wave (now Apache Wave) and Google Docs [1]. The basic idea is to avoid latency by making sure all edit operations commute, so patches can be applied out of order to get the same result. This is not so different from source control except that merge conflicts are handled differently. Differential synchronization [2] might be easier to implement, though. [1] http://en.wikipedia.org/wiki/Operational_transformation [2] https://neil.fraser.name/writing/sync/
xioxox · 2014-08-14
Sounds like the neural net tank story: https://neil.fraser.name/writing/tank/
jamra · 2014-03-24
Here is a cool approach to the subject by Linked In. http://engineering.linkedin.com/open-source/cleo-open-source-technolog… Here is my HN-obligatory, self-written golang version: https://github.com/jamra/gocleo I went with this author's approach to use Jaccard to rank the results, however, I like this approach better: https://neil.fraser.name/writing/patch/ They basically take the distance to the beginning of the text into account.

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close