Friday, April 10, 2020

Read it or Throw it #216

  1. Vim and Emacs can be BFF
    My blog’s post trying to settle the “vim vs emacs” never-ending dispute.
  2. How Amazon Web Services Uses Formal Methods
    A very impressive article (from 2015) that reviews how Amazon used TLA+ on various complicated infrastructure projects. The nature of the described cases is high-scale complex distributed-systems. Such projects are notoriously known to be difficult to get right.
    Often they introduce evasive, intractable bugs. TLA+ assisted with avoiding many issues from the first place.

    Highly recommended reading!
  3. Why Don’t People Use Formal Methods?
    If you’ve found the previous article interesting, you’re encouraged to read this article too. I’ve added “Learning TLA+” to my TODO list :)
  4. Expertise is ‘Just’ Pattern Matching
    An awesome text giving a different angle about what expertise is. It argues that a core part of developing expertise on something is having a lot of patterns and being able to classify inputs into known patterns. The article fortified my own personal experience, especially over the last year.
    A very good read!
  5. Designing the Perfect Practice Loop
    In continuation of the preceding item is another eye-opening article by Scott H. Young about the importance of feedback loops. It’s not enough to feed yourself with patterns/data/exercises but being able to learn from mistakes by having good feedback is paramount. Otherwise, we may not make the desired progress we’d like to.
  6. I’m not feeling the async pressure
    A nice piece on how to make concurrent code more resilient by designing it with back-pressure in mind. If you liked the article, you should definitely consider reading the classic Release It! book.
  7. Math is your insurance policy
    The article argues that menial programming tasks will be replaced by AI and that future programming-languages will drift toward a more declarative-style paradigm. It’s a nice read and a wake-up call for any developer that does mostly a commodity job.
    However, I don’t see any radical changes in the foreseeable future. I think that that big changes eventually take more time than anticipated.
  8. The most important skill a programmer can learn
    How often do you clean up your code? This piece covers the importance of deleting redundant code or avoid writing unnecessary ones from the first place. See further The art of destroying software talk.
  9. System76
    I wasn’t familiar with the System76 brand until recently. The company manufactures its own laptops (more about that here) The machines Operating-System is Ubuntu, or Pop!_OS which is a Linux distribution developed by System76 itself.
  10. Recommended Book: Get Programming with Haskell
    Working on Rust made me “love the Type”. I wanted to dig more into the essence of Type-driven development and I figured that I must know the basics of Haskell. I doubt that I’ll ever write Haskell code for production, but learning a Haskell will expand everyone’s mental model for sure. There are many concepts that exist in Rust (that’s not a coincidence since Rust has been heavily influenced by Haskell), but seeing them in another language helps to strengthen understanding. You can skip the parts that cover libraries and tools and focus only on the abstract/mathematical content.
If something is worth doing, it is worth doing poorly until you can learn to do it well“ - Zig Ziglar

Monday, December 30, 2019

Read it or Throw it #215

  1. 2019 Summary
    My post summarizing my 2019 professional year.
    I’ve also added a Subscribe page to my blog!
  2. Announcing the Bytecode Alliance: Building a secure by default, composable future for WebAssembly
    This is a long read but a good one. The post starts with an announcement of a joint effort between leading companies that rely on WebAssembly to build the future of the internet and outside-the-browser infrastructure (Mozilla, Fastly, etc).
    Then the post proceeds with explanations on how using WebAssembly while employing a capabilities-based security model built-in will serve as a foundation to avoid much of the security vulnerabilities lurking almost any application nowadays.
  3. Join the beta: our new serverless compute environment gives you more power at the edge
    Fastly releases in Beta its new serverless platform named Compute@Edge based on Lucet, their in-house developed WebAssembly Runtime. We can start seeing right now the future of the internet. A CDN provider will cease to be merely a dumb provider of cached content, but it will transform to hosting full-blown applications. This is only the beginning, rest assured that more companies will enter this field. Not only traditional CDNs providers such as Akamai but also Cloud providers like Amazon.

    The boundaries between a Cloud to a CDN provider will become blurry. They will all run WebAssembly code and compete with one another for those who will get the chance to run our code. I predict that many databases, storage solutions, and other services will be available on the Edge too.

    Add to above the new emerging QUIC protocol as the next TCP and the Internet speed future seems bright.
  4. GitHub Universe 2019 TL;DR
    A very good summary of the annual event of GitHub Universe. The biggest announcement is that GitHub Actions is now publicly available for everyone!
  5. Visual Studio Online - Cloud-powered dev environments accessible from anywhere
    Microsoft Release VSCode as a Service product for public preview.
    It’s hard to predict whether it’ll catch or not but only time will tell.
    See also: Gitpod
  6. Execute Program: Learn programming tools fast. Then remember them.
    A new Spaced repetition based training for developers. The training is organized by courses. The platform has been created by Gary Bernhardt who is a very famous developer known for being innovative. It’s only the first footsteps and new courses will be added. I’m curious to see how this will evolve.
  7. Conventional Commits
    Did you notice people who use commit messages having patterns like:
    feat(...): new feature or fix: fixed the failed test...
    This is more than a phenomenon, but a well-defined git commit messages conventions. I think it adds more hygiene to the code, and I’ll consider using that too.
  8. Fourteen years after launching, 1Password takes a $200M Series A
    I’ve been using 1Password for a couple of years and I really think it’s a good product. The company refines and makes the product better consistently. It’s a truly remarkable story of a self-funded company that raises such a great amount of money for Series A - 14 years after having been founded!

    BTW, the 1Password team has rewritten part of their browser extension code in Rust! (compiled to WebAssembly that runs as part of the browser-extension).
  9. Recommended Talk: Rust’s Journey to Async/Await
    As always, Steve Klabnik condenses a lot of info (and history) elegantly and clearly into a great talk. This time, the talk outlines the evolution of Rust Async until today. Steve explains the trade-offs taken in Rust in order to reach the holy grail of having zero-cost abstractions futures.
    Rust async/await syntax became stable recently at the 1.39.0 release.
  10. Recommended Book: The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition (2nd Edition)
    Pragmatic Programmer is a classic. One of the most cited as “Must Read for every Programmer book”. I’ve never read this book. A few months ago, the 2nd edition has been published and I thought it’s about time I’ll read the book. Overall, I wish I’d read this book when I was at the start of my career. I think it would have helped me understand a lot of things faster, as opposed to learning them by nature. I believe that experienced programmers could also benefit from reading this book as it’s a centralized piece covering many aspects of a professional developer craft.

Success usually comes to those who are too busy to be looking for it.”
Henry David Thoreau

Friday, October 11, 2019

Read it or Throw it #214

  1. Relearning to Type
    My new post describing my journey to relearn to type. I won’t elaborate and just hope it will make you curious enough to go and read the article…
  2. SVM - Spacemesh Virtual Machine
    Another post of mine, but this time, a work official one.
    This post describes the first milestone of SVM (Spacemesh Virtual Machine).
    I’ve worked on the SVM project (first milestone) for the past 3 months.

    Here’s a link to the GitHub repository:
    https://github.com/spacemeshos/svm

    If you know Rust or if you’re into Compilers and looking for a very challenging job and super fun! please email me at: yaron.wittenstein@gmail.com
  3. Big Benefits when Your Product is Bootstrapped
    Oren Eini, one of the greatest developers on earth tells his remarkable story of bootstrapping his company creating RavenDB. A must-read article for entrepreneurs!
  4. Kubernetes and the Erlang VM: orchestration on the large and the small
    A great article by José Valim, the creator of Elixir about the similarities between KS8 and the Erlang VM. While KS8 orchestrates nodes, the Erlang VM does that same at the instance level. José also writes about how KS8 and the Erlang VM can complement each other in cases like Service Discovery.
  5. Tuple: A remote pair programming tool for discerning developers
    A new remote screen sharing product designed in particular for developers.
    The video on the site looks really cool.
    The tool is only for Mac users.
  6. How Many Words Does the Average Person Know?
    In the last couple of months I’ve worked almost daily on my English vocabulary.
    English is a gigantic language and I was asking myself how many words a fluent English speaker really knows. If you’re curious too, then read the article.
  7. gitmoji
    A cheat sheet to GitHub emojis.
  8. emacs or vim
    That’s funny. I will have my take about the endless war of emacs vs vim on a future post under my blog.
  9. Recommendation Talk: Rust, WebAssembly, and the future of Serverless
    A comprehensive summary by Steve Klabnik about Rust, the evolution of WebAssembly starting from asm.js to this day and the next generation of Serverless executing WebAssembly programs.
  10. Book Recommendation: Ultralearning
    A great book about applying innovative learning techniques by Scott H Young. This book will give you undoubtedly some food for thought. I know it made me think and reflect on the way I learn things. Highly recommended book!

Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.
– Alan Perlis

Saturday, August 24, 2019

Read it or Throw it #213

The second article of my new blog. This time a condensed post full of goodness about productivity principles with specific recommendations to Mac users.

Please forward it to colleagues if you liked it
Thank you!


Even though the article talks about exploring Rust only at Microsoft Security Response Center and not in more places within the company, for now, it's nonetheless a big accomplishment to Rust as the new alternative to the traditional system programming language like C/C++.

Microsoft won't be the first gigantic company to use Rust. 
Amazon relies on Rust for their Firecracker.
This is another positive sign that Rust has a bright future. 


In this blog post, Salvatore Sanfilippo (a.k.a antirez) goes low-level about the big forthcoming feature of Redis 6: Client-side caching.

The prerequisite for this will feature will be a breaking change on the redis protocol called: RESP3.
Existing redis client will have to go major changes in order to support these changes but I'm sure it'll worth it.

The new client-side caching will help applications gain better performance and be more real-time.
For some apps, it'll be a game-changer.


The Timber (check out this tool!) logging company released a new general-purpose logging collector agent likes Logstash//Filebeat/others.

Vector is written in Rust, and according to the site benchmarks it outperforms its competitors.
This tool comes with programmability for doing transformations of logged events using Lua.
Moreover, this tool has a detailed Roadmap filled with tons of goods.


A superb article about the nature of software development.
The article brings into the surface a lot of points that we see happening throughout our career.
This is a kind of article that should be re-read at least once a year.
The article is a long one but definitely worth reading!!


The open-source alternative to Google Spanner continues its growth.


Artichoke is an implementation of Ruby in Rust.
This is very cool!
BTW, there is also a more mature project of Python implementation in Rust called RustPython


Another new cool projejct is nushell. It's a shell (like bash/zsh/fish) but written in Rust :)


A Rust re-implementation of cloc that claims to be x100 faster.
loc will tell you how many lines of code has been written in your projects.
It will output stats per each programming language used.
There are usage flags like: "show LOC for each file" or "show LOC for by files regex"


I'm sure you're familiar with all these self-growing books.

The major problem with these books is that these books usually spread over way too many pages for providing a couple key messages.

Here comes Blinkisit to save us. It's a big archive of very short versions of most of these books.
Each book summary takes a couple of minutes to read. Most of the books also come as Audiobooks.'

I've already read about 30 short books like that in its Android mobile app.

This service costs mone, so you need to decide if it worth it for you.
Tip: look for a coupon on the internet.


"Good software, like wine, takes time"
Joel Spolsky

Friday, June 28, 2019

Read it or Throw it #212

My talk about the research so far at Spacemesh regarding Smart Contracts leveraging WebAssembly.

And here is a link to all the talks given at the Wasm on the blockchain workshop Berlin 2019

I'm thinking about starting my own blog...
So this is my very first blog post about why I think it's important to stay open-minded for new technological opportunities.

Many thanks for Omer Hamerman and Yuval Zalmenson for the feedback!

3. Waxosuit - The Cloud-Native Exosuit for WebAssembly
On the last issue, we had Fastly's announcement article about Lucet:

The wasm out of the browser explodes and now a new (still in its infancy) project called Waxosuit has been born.

Waxosuit is a WebAssembly runtime (build on top of wasmer) for running in the cloud wasm code. 
If I understand right, the vision is to equip the Waxosuit runtime with many capabilities (plugins) that could be used by the hosted wasm programs.

The big vision is to make the developer more productive since he/she will have a rich set of capabilities out of the box in the wasm runtime.
(for example, logging, monitoring, database integrations...)

It means a developer can write less code and rely on the set of these capabilities (high-level "system-calls like") 

This could have the potential to be the next generation of Heroku or next generation of serverless computing

Here is a medium post, Introducing Waxosuit by @Kevin Hoffman the creator of waxosuit

A very interesting article about the future of programming using dependent types
I hope that Rust will have some form of this in the future 

This is more like a mini-book about long-term memory.
It's a joyful read full with illustrations and simple explanations.

One of the topics covered for better long-term memory is by practicing using
the spaced-repetition technique. A few years ago I've given a lightning talk about this technique, here is a link (the talk is in Hebrew)

This is another mini-book about memory but this time on working memory.
If you liked the content of the above item about long-term memory, you'll surely love this one as well.

An article that reviews the positive effects of practicing the Dual N-back game on working memory (according to a conducted research)

Last time we had GitHub Package registry and now the former CTO of npm releases a Decentralized Package Registry called Entropic. 

This declaration is of high importance since it's a decentralized package registry.
Did it ever happen to you that the deployment of your service failed since your centralized package manager has been down? 

In the previous newsletter issue, I've added an item for Sourcegraph and GitHub has just released (still in Beta) its own Sourcegraph competitor (if to be delicate) and it'll be probably given the company another boost against the competition with GitLab.

Another product that should be worried for its future is Octotree (browser extension on top of GitHub)

GitHub also acquired another company called Pull Panda for streamlining the code reviews process

An eye-opening article about the nature of hiring people claiming that A Players will hire A Players, but B players will hire C players and so on.

I tend to agree with this. Usually, strong people will want to work with other strong people, since they understand they have something new to learn from them
(since no one knows everything).

This term has been coined by late Steve Jobs and here is the link to the original video of him talking about this.



"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs

Saturday, May 18, 2019

Read it or Throw it #211

This is a big deal since GitHub continues to expand its services after the GitHub Actions.

That's one of the reasons that private repositories are free since GitHub wants to attract customers and make them pay for the ecosystem services


This also a big deal since Web Assembly is the future universal bytecode not only of the internet
but probably of Desktop-apps / smartphones apps/god knows

Even though Web Assembly is still considered in an early stage, it's spec (see next item), browsers adoption, out of the browser Runtimes is getting a lot of momentum. 


Continuing the previous item, Mozilla announced WASI, a specification for running web assembly programs outside of the browser.

Imagine having a C++/Rust/Go/another language that is being compiled to Web-Assembly
(LLVM already supports that).

Then the Runtimes hosting the WebAssembly file will come out of the box with implementation
for the system-calls interface. 

It means that we could not only run our programs but also switch between WASM runtimes as long as they implement the WASI interface.


One day after Mozilla announcing the WASI standard Fastly announces its WASM runtime that implements WASI. (they have been working closely with Mozilla for months before going public). 

The future of CDNs is executing code on the edge, and what could be more suitable for the mission then running a WASM file on the edge? 

We'll be able to develop our code in a lot of programming languages and run execute WASM files.

Current Serverless seems like old tech already 😛


Stripe owns a very big Ruby codebase and they internally developed type-checking extensions in order to increase the code quality. (like TypeScript did for Java-Script). 

This project will become an official part of Ruby 3 

This is very cool, I love that Ruby is getting better doesn't stand still.
I also think it'll hurt badly the Crystal Programming Language adoption


A fantastic article about what it feels like getting into Rust when coming from any other programming language.
It talks about overcoming obstacles and frustration, learning new thinking paradigms and the benefits of knowing Rust


7. awesome 
There are many awesome-XXXX repositories in Github,
but this one is a list of all the awesome-XXXX


Recently I've started using this tool a lot (I was aware of it but never gave it a serious chance).

I find it much better than reading code via GitHub. 
(most of the times, I don't want to clone locally code and read it on my computer)


I'm a long-time reader of Scott-H-Young blog and I appreciate much his work. 
This article worth your read


Less than 10 minutes short video explaining what's IPFS for dummies.
You can think about it like Bittorent next generation.



A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system. 
John Gall

Saturday, March 30, 2019

Read it or Throw it #210

A well-written article talking about the importance of having programming languages that will guard us the developers from as many mistakes as possible.

After all, we're humans and humans make mistakes.
Also, projects assumptions change over time.
Good tools and good programming languages can assist much. Give Rust a try!

A short summary for The Snowball book talking about Warren Buffett knowledge consumption and prioritization methods and how his life-long learning helped him in business

A very cool technique to resolve git merge conflicts in vim using vim-fugitive and good shortcuts

I think this is one of the most inspiring stories in the history of Software.
Who would think that Erlang, developed in the '80s for the telecommunication industry in Ericsson
will serve so well high-scale internet systems 30 years after?

An introductory article covering the basics of WebAssembly with nice illustrations

If you're a Mac user, go over the list. You'll probably find something useful

A cool extension for traversing a file evolution in a GitHub/GitLab

This article goes over different businesses models of Mozzila over time.
It's unintuitive that Mozilla makes money thanks to other browsers

Just watch these 24 seconds

If you want to learn Rust, then I highly recommend this book.

It's a more advanced book than the official The Rust Programming Language book
so you may want to that first


"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies."

Tony Hoare