Big companies have an unfair advantage in distribution and bundling

Originally posted at The Investing Desk: https://www.the-investing-desk.com/blog/why-slack-lost-to-teams

Salesforce recently bought Slack for $27B. A win for investors in every stage. Even if you invested just recently, you got a nice bump on the stock price when the sale came through.

But the sale is also a defeat in some way. Slack couldn’t stand as a standalone company against its competition — namely, Microsoft teams.

Even though Slack had the superior product (debatable, but most will agree), it had lost to teams.

The reasons for the failure against teams also mark…


Go reflections is a topic that requires understanding of the go internals regarding structs, interfaces and the type system in order to understand how it fundamentally works behind the scenes.

You can use reflections without going into these details, of course. This article objective is to introduce you to some of the details in a way that will enable deeper understanding. But those are not strictly required.

This article assumes you have basic understanding of structs and interfaces. …


There seems to be missing a guide for Google sign in with flutter, without firebase. Guides for firebase are in abundance, but if for any reason you want to go bare with google sign in, you are on your own.

So let’s discover what is necessary for Google sign in with flutter;
Most of it is also relevant for any other framework (Android native, react-native etc’).

Our steps are:
- Generate signed key for your android app
- Registering the app in Google cloud services
- Using google_sign_in package to sign in with google

Necessary authentication background

Google sign in is using oAuth…


Navigation patterns for flutter are hard. And this is a scenario I stumbled upon and couldn’t find an agreed upon pattern to handle, so I made up one.

The scenario is this: You want to navigate to some “Views” of the app, and keep track of the current “View” for usage on some widget outside that view.

In my case, it was the BottomNavigatonVar that needs to constantly have its currentIndex parameter updated to the correct menu item we are viewing.

BottomNavigationBar with `currentIndex` set to 0, to mark `Home`

To solve this, we have 3 issues to tackle:

  1. Set a central place for the currentView state.
  2. Update the…


Rubyconf 2019 is just behind us, and as always Matz keynote is packed with information on what’s coming next for ruby. Some of it are concrete things, some are more subtle, mostly due to being Matz opinions, and as the leader of ruby design, his opinions means a lot.

You can watch the full keynote here: https://www.youtube.com/watch?v=2g9R7PUCEXo thanks to Confreaks amazing work every year in recording this conference.

Programming joy, community, and attracting new people

The first few minutes of the keynote is devoted to these 3 themes, that are strongly interconnected, and by looking at Matz words, we can better understand his priorities for the language.


Long time I craved for something like ReasonML. It allows me to keep using the JS environment of NodeJS I highly adore, while converting crucial and complex code to a statically typed, and typed sound language.

On top of that, the immutable constructs coming with the language is a huge bonus for my specific needs. Especially given they do not add any performance overhead after compilation. (Been burned by immutable.js before).

But going deep into reasoning I’ll keep for another post, after some time hearing about ReasonML today I decided to give it a run. Play with it directly on…


Coming to set up Node.js for production, there are some articles recommending usage of various v8 flags to optimize the runtime (e.g https://blog.heroku.com/node-habits-2016#7-avoid-garbage )

These usually mention the --optimize_for_size , --gc_interval=100 , and --max_old_space_size flags.

If you use any of these flags in production, I want to encourage you to experiment with them and find what is optimal for your application. In my company services, we found --optimize_for_size to generally be a good thing to include, as otherwise RAM usage might sometimes go out of hand and causing long breaks for GC.

But for one service, it was actually harmful…

Snir David

Programming enthusiast. https://www.snir.dev

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store