Show HN: TabNine, an autocompleter for all languages - jacob-jackson https://tabnine.com/ <comment><AUTHOR> Quoting the author from r/rust[0]

> Its paid features are always enabled when completing Rust code, in > acknowledgment of the fact that TabNine could not exist without the Rust > ecosystem.

Thanks for this, Jacob!

[0] - [https://www.reddit.com/r/rust/comments/9uhc1x/tabnine_an_aut...](https://www.reddit.com/r/rust/comments/9uhc1x/tabnine_an_autocompleter_for_all_languages_built/)

<comment><USER2> That's odd, because it could indeed exist without the Rust ecosystem. The author just opted to write it in Rust.

<comment><USER3> Think of it like "I couldn't have done it without you" when people accept awards. Sure they could have, it's just an expression of appreciation.

He might also not have chased the project if he weren't working in an ecosystem he particularly liked, so who knows, maybe it wouldn't have happened without Rust.

<comment><USER4> I disagree. I believe most people accepting awards really wouldn't have done it without other people.

Actors do not win Oscars doing great performances in bad movies.

Scientists do not win Nobel prizes working alone or in bad work conditions.

I always take these appreciations at face value.

<comment><USER3> Sure, makes sense. The original argument was that an ecosystem like Python's could have been a possible substitution for Rust, as an example, and therefore it was a baseless statement. Think the analogy with yours would be an equally good screenwriter or scientific collaborator. You need one, but technically maybe not exactly the one you had.

That said, not trying to undercut anyone's appreciative statements, especially the one from OP in his repo towards Rust! Obviously people (and programming languages, for that matter) aren't simple drop-in replacements for each other in real life. You have to be inspired and empowered by them.

That personal motivation or rapport component is probably what was being missed in the post to which I replied.

</comment></comment></comment></comment></comment><comment><USER5> > your software will automatically update to the full released version at no > additional charge.

So, give your proprietary software both network access and access to all my source code?

I have very few complaints about the Jedi autocomplete library, which is neither proprietary nor requires network access.

I welcome innovation in dev tools, but I wish you had found a monetization strategy that didn't require us to trust you so completely.

<comment> jacob-jackson Your concerns are understandable. It is about as risky as installing an editor plugin which updates automatically.

The private keys used to sign releases are kept offline and would not be available to an attacker even if they compromised my online accounts.

Finally, TabNine will work correctly if you deny it network access (say, by blacklisting update.tabnine.com).

<comment><USER5> ...as risky as installing a proprietary editor plugin which updates automatically, yes.

Also, AFAIK most understandings of MIT, BSD, and Apache 2.0 licenses require you to acknowledge the copyright holders of the source code you compile into your binary, even if the licenses permit binary distribution. I can't find your "Copyright (c) 2018 Tokio Contributors" or "Copyright (c) 2014 The Rust Project Developers" that I'd expect based on `strings TabNine | grep github`. Maybe you've got a lawyer that suggests otherwise? Your plea of "trust me, I have good hygiene" carries less weight when I have to `strings` your stuff to know what shoulders of which giants you're standing on.

<comment><USER6> > ...as risky as installing a proprietary editor plugin which updates > automatically, yes.

Can't you make the same complaint about any auto-update functionality in any software? Even if it's BSD licensed, you're still counting on whomever has authority to push an update to not push malicious code.

This doesn't seem to have anything to do with the fact that his code is proprietary nor his monetisation strategy, so why are you singling him out for those?

<comment><USER5> Proprietary - Can't patch out the autoupdate, which I might be tempted to do if something else in my toolchain did things at someone else's leisure.

DRM/monetisation - the product as of my comment didn't seem to acknowledge the open source works compiled into the binary, and I didn't think that was a good look for someone with the authority to push out malicious code.

</comment></comment></comment></comment></comment><comment><USER7> I wish someone would figure out the right UX for partial autocompletion. e.g. I type "wo" and my phone suggests ("would", "work", "wonder"), there should be an easy way to say I'm trying to type "working" rather than clicking the "work" autocomplete then backspace, then "ing".

I'd imaging TabNine has this problem in spades, since it does such long autocompletes. It could suggest "unsigned long long" when I've typed "unsi" and I really want "unsigned long int". Seems like a tough UX problem. ¯\\_(ツ)_/¯

<comment><USER8> Xcode has handled this for years. In Xcode, when autocompletion is presented, hitting Tab will complete the longest unique prefixed subword for the currently-selected tab item. If this results in only having one completion option left, then it completes the whole thing (e.g. adding method arguments and whatnot). Similarly, hitting Return will just complete the whole entry instead of the longest unique prefixed subword.

By that I mean if you have 2 autocompletion options `addDefaultFoo()` and `addDefaultBar()`, and you type `add` to get those options, hitting Tab will fill in `addDefault`, and then hitting Tab again will fill in the rest of the selection.

<comment><USER9> *nix shells typically do something very similar, where hitting tab auto-completes up to the first forking character

<comment><USER10> After recently binge-watching The Good Place, this comment rattled me :)

<comment><USER11> Lol, I wasn't the only one!

Which is The Good Place of computer languages?

<comment><USER12> Lisp? Up front appears to be written with one thing in mind: Infuriate you with brackets.

Then, once you've worked out how to deal with the brackets, it's pretty forking sweet.

<comment><USER13> Never seen The Good Place so I'm just trying to figure out what the frak you all are taking about.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> I've been using TabNine for a few weeks, and it's really cool how well it works. My first "woah" moment with it was writing a function where the first thing I wanted to do was take the length of the array, and once I started typing

def foo(bar):

        n

it suggested the entire completion of "= len(bar)". It has a really cool way of picking up your coding style that makes it stand out to me.

Full disclosure that I know the author.

<comment><USER15> I agree that is worthy of a "woah".

Thinking about it more, I wonder how useful that type of autocompletion is for those who can type fast. I wonder how much time it takes my brain to context switch away from "code authoring and typing mode" to recognize the " = len(bar)" in the autocomplete options list. It seems like it would be faster to just type out the " = len(bar)" for those who type a solid 60+ words a minute?

</comment></comment><comment><USER16> "If TabNine does not work as soon as you install it, this is a bug and you should file an issue."

Just wonderful. All dev tools should be like this.

I got great results for a PHP/JS project straight away — an instant upgrade for me just to support continued development.

</comment><comment><USER17> Played with free for a bit, 200KB is quite a bit low, didn't get any completions. Purchased the premium licence. Gotta say stripe integration is very smooth.

Overall after a couple of hours of playing with this. My mind is quite blown away. This is absolutely amazing.

Hopefully Microsoft or someone acquires this technology for a fat sum and open sources it.

I've thought about code completion smarts for a long time. You actually executed and delivered a product. Kudos! Take my money!

<comment><USER18> I don't get the jump from "didn't get any completions" to buying the premium license. Can you explain?

<comment><USER19> I suppose because it's worth trying and the price is not unreasonably high. But the 15MB indexed limit to me seems strange on premium, as others have mentioned.

</comment></comment></comment><comment><USER20> I'm trying this with VSCode and C#. It's quite neat, though no doubt it'd be even better with a dynamic language.

My main issue is when I type a '.', the C# extension gives me an accurate list of members, but TabNine intersperses its own guesses, which are often wrong.

Possible fixes or mitigations (VSCode API permitting):

\- After a '.', discard the TabNine completions whose prefix doesn't match one of the C# completions.

\- After a '.', discard all one-word TabNine completions.

\- Give all TabNine completions a different icon and maybe sort them all at the top or bottom.

</comment><comment><USER21> >TabNine is 11,000 lines of Rust. In recognition of the fact that TabNine could not exist without the Rust ecosystem, TabNine's paid features are always enabled when completing Rust code.

This makes me very happy as a new Rust learner.

</comment><comment><USER22> First impression is that this is insanely fast and is actually giving recommendations based on context, without setting up additional files. So, it's doing exactly as advertised.

I'm using this in Vim and would like to know if there's a way to configure it such that the dropdown does not show up until I hit <C-n> or <C-p>? I realize that this is supposed to be a zero-config tool, and I'm asking for a configuration!

Great job with pricing as well. Going to use this for a week before I commit to the license but $29 is a no-brainer for how much use I'll get out of this autocomplete.

<comment><USER23> I've written a vim plugin for people who use deoplete and YCM would conflict: [https://github.com/tbodt/deoplete-tabnine](https://github.com/tbodt/deoplete- tabnine)

<comment><USER24> Thank you for this. The deoplete defaults are much more sane than ycm. I've started using your plugin. I'm glad to see the author of tabnine has asked to feature it on his site.

</comment></comment></comment><comment><USER25> I've prototyped something like this in the past using n-grams and it was surprisingly effective. When I think it gets really interesting is if you marry ML/NLP tactics with traditional static code analysis.

So you can imagine the ML engine generating the suggestions with the static analyzer ranking the suggestions intelligently.

It's kind of similar to the original AlphaGo where you have the model generate the potential moves that are then ranked by the Monte Carlo Tree Search algorithm.

<comment><USER26> I believe the Visual Studio team is working on something like this to provide better autocomplete for specifically C#.

</comment></comment><comment><USER27> This is extremely cool. Emacs has a similar, though less intelligent, language agnostic auto-complete function called hippie-expand[0], which has generally been good enough for my needs.

[0] [https://www.gnu.org/software/emacs/manual/html_node/autotype...](https://www.gnu.org/software/emacs/manual/html_node/autotype/Hippie- Expand.html)

</comment><comment><USER28> Why is the paid index limit 15MB? Why does the paid version have a limit?

<comment> jacob-jackson TabNine will still work on projects of 15MB or more, it will index the 15MB of files that are most relevant to the files you are editing (determined by distance in the directory tree).

The limit exists because otherwise latency or RAM usage might be too high.

<comment><USER29> A configuration option would indeed be nice. I have more than enough memory for tools providing a high value for my daily work. Kudos for setting same defaults!

</comment></comment></comment><comment><USER30> Nice. I had the same idea a while ago [1], but I didn't make it very far. Good to see that the concept of applying ML to intellisense can actually be useful.

[1]: [https://github.com/phiresky/deep- intellisense](https://github.com/phiresky/deep-intellisense) Video [https://www.reddit.com/r/programmerhumor/comments/8xrwr5/_/](https://www.reddit.com/r/programmerhumor/comments/8xrwr5/_/)

</comment><comment><USER31> Can't wait to see this for Intellij, looks really cool but I am fully bought in on IDEA and while I have used Atom/VS/Sublime/etc this isn't enough to give up everything else I get in IDEA.

<comment><USER32> +1 for intellij, I'm usually not into extensions, but this one seems worthy

</comment></comment><comment><USER33> Cool technology. Yet, no Emacs support yet... oops :(

<comment> jacob-jackson Sorry :( Emacs support is coming within a couple months. You can sign up at [https://tabnine.com/install](https://tabnine.com/install) to be notified when it's released.

<comment><USER34> I'll buy your tool immediately when the emacs support lands. Subscribed already to the email list.

</comment></comment></comment><comment><USER35> Looks neat, will give it a go. I think you may be in violation of the GPL for your vim plugin since you are creating a combined work but are not releasing the TabNine source code under GPLv3.

[https://github.com/zxqfl/tabnine- vim/blob/master/COPYING.txt](https://github.com/zxqfl/tabnine- vim/blob/master/COPYING.txt)

<comment><USER36> It looks like it is probably OK. The vim plugin it is based on seems to have already been designed to run using a client/server architecture. The plugin is the client, and it gets its completions from a server.

He just changed it so that it uses TabNine as that server.

<comment><USER37> Not cool in my book regardless of legality. Rebranding it to tabnine-vim alone is confusing, since none of the legwork for vim support belongs to TabNine. At the very least the original copyright notice should be left intact in the README (iiuc this is required by GPLv3).

<comment><USER36> It includes a copy of GPL. The README tells you what it applies to, and what it does not. It tells you where to find the original project it was forked from. And all the files that the TabNine guy did not write contain their original copyright notices from the YouCompleteMe authors.

</comment></comment></comment></comment><comment><USER38> Let me be not the first to say ... nice! You've ticked a lot of boxes for me, Rust to boot. And the price is reasonable. I echo some of the privacy concerns, but I am not a purist who will not use proprietary development tools -- many of which are from small shops. I had questions that I'm sure I'll get answered after I install the trial extension:

I noticed in some of the examples that the autocompletions were multi-word (for the language involved). This makes sense and I have no real problem with that it limited cases. What I wonder is have you found any issues with autocompletions resulting in less DRY code?

\- and -

Since it's not parsing, is it possible to tell it to not show autocompletions based on a pattern? This is no deal breaker, it just annoys me when code comments accidentally invoke the drop-down and I'd imagine that a similar problem could happen with strings.

</comment><comment><USER39> This is really, really cool and I thank you for this!

I'm seriously hyped, I just hope it works as well as it claims.

 _edit_ : Can you provide some help/FAQ on using it from the CLI? I'd like to add support for my own editor, but I'm not yet sure if that's possible.

Thanks!

<comment> jacob-jackson Thanks for the kind words! I'll write a guide within the next couple of days on how to write a client.

<comment><USER40> Awesome plugin Jacob. I have a question about the full version, is it per editor? Eg., I use Sublime Text most of the time, but occassionally vim, do I need to buy 2 licenses? Also are these licenses transferrable between machines (work vs home)?

<comment><USER41> It's per user/email. I just purchased and installed it on my VS Code, and two separate vim installations/instances and they all worked.

<comment><USER40> Thanks for the information!

</comment></comment></comment></comment></comment><comment><USER42> Why is there 15MB limit. I would love to use it on Linux kernel development. The tree is huge. Can it handle that?

<comment> jacob-jackson It should be able to handle it.

I just added a 30-day money back guarantee.

</comment></comment><comment><USER43> Do you have to give up existing specific-language-aware completions to use this?

Or are the editor plugins implemented in such a way that it gets mixed in to what you already have?

</comment><comment><USER44> I've been using TabNine for a couple months now and it's been really great. It "just works" and I don't ever have to worry about it even when opening large projects. It's always fast and high-quality. It really feels like it's just part of Sublime Text in a way that's very rare for a plugin.

</comment><comment><USER45> > TabNine builds an index of your project, reading your .gitignore so that > only source files are included.

Heads up, it's not necessarily uncommon for JS developers to include node_modules in their git repos. If you're developing something like an Electron project or a website instead of a library, it's even sometimes advised to do so -- there's a line of thought that your static dependencies should be tracked as part of your source control.

It might not be a terrible idea to have an alternate config for this that allows excluding other directories. Even if a developer doesn't include their dependencies, they might have old code that they don't want integrated into their suggestions if they're in the middle of a refactor or something.

<comment><USER46> > it's not necessarily uncommon for JS developers to include node_modules in > their git repos

It's highly uncommon, and I've never seen an active, maintained, or popular project with it.

<comment><USER17> to handle a static state of dependencies, usually a package-lock or a yarn.lock file is committed to the repo. That is the usual way to freeze the dependency tree.

<comment><USER45> Freezing a dependency tree isn't the point. The point is to avoid making a network request and to know that your dependencies will still be there 5 years from now.

Remember that one of the benefits of Git is that it's distributed. Even if you are hosting your own npm mirror, relying on it gets rid of that distributed advantage. It doesn't help you to be able to clone from the person next to you if you can't build without making a network request.

I'm not saying that this should be the norm for everyone. It obviously shouldn't be the norm for libraries. But it's not inherently a crazy or harmful idea.

</comment></comment></comment></comment><comment><USER47> Sounds like a great tool, I got two feature requests:

* make .gitignore logic optional, we always have the system we're working with ignored and only include our extension but we really need autocompletion from the whole project

* Emacs plugin

</comment><comment><USER48> How does TabNine work for all languages? Curious about implementation details and use with dynamic languages. I would HAPPILY pay $29 if it works well for Ruby.

<comment><USER14> I've been using it for Python mainly but I find it's really helpful. It can often infer arguments for functions or functions to use based on the variable names. I've used Ruby lots in the past and I think it would work just as well based on my experience. I would give the free version a try and see what you think.

</comment></comment><comment><USER49> > Why is it called TabNine?

> When using the Sublime Text client for TabNine, the keyboard shortcut to > select the ninth suggestion is Tab+9.

Before reading that I thought it was loosely named after the old T9 (Text on 9 keys) predictve system for mobile phones with numeric keypads only.

That being said, while I'm still passively learning to code and may not need a full license yet, it's a well-priced gift idea for friends who are full-time developers.

<comment><USER50> > .. predictve system for mobile phones with numeric keypads only

I'm curious if this explanation is needed on HN

</comment></comment><comment><USER51> I just installed it in Sublime Text 3, TabNine seems to expand the first autocompletion only if the character to the left of cursor is not a whitespace, i.e. if I'm typing "let v = |" (where | is a cursor) and TabNine shows me a list of autocompletions, I press Tab key and then \t is inputted instead of first suggestion.

</comment><comment><USER52> Congrats! Out of curiosity, is this fundamentally different/better than the one in vscode? Nice to see it's multi-lingual.

[https://marketplace.visualstudio.com/items?itemName=VisualSt...](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode)

</comment><comment><USER53> Just installed the Sublime Text version.

It seems to work as promised. Would be great if it could support unsaved files too.

</comment><comment><USER54> I was hoping there was a version that worked with Webstorm or Phpstorm. I can't wait to try this out.

</comment><comment><USER55> Any thoughts on how this performs vs deoplete? I've really enjoyed deoplete. It makes my coding quite a bit faster. However I've recently become pretty frustrated with all the gocode forks and go module interaction, so there's definitely room for improvement.

<comment><USER56> Tabnine and something like deoplete are not directly comparable in my opinion. Deoplete is a completion framework (with dictionary based language specific systems) and tabnine is an intelligent language-agnostic completion system. You could theoretically have Tabnine support deoplete (it is currently YCM based). As the author mentioned in an other reply, dictionary based completion systems are good for api exploration, while tabnine is for more contextual completion.

<comment><USER23> I wrote a Deoplete source for TabNine: [https://github.com/tbodt/deoplete- tabnine](https://github.com/tbodt/deoplete-tabnine)

</comment></comment></comment><comment><USER57> I must say that I never found a "clever" autocomplete that really suited me, I just ended up using a rather dumb "hippie-expand" in Emacs that basically tries to complete the word under the cursor using anything it finds in the current file or, failing that, any other open file. It's very dumb but it works regardless of language (including completing plain text in emails for instance) and it's predictable.

I'm pretty interested in your project, the way it seems to be able to learn from the way you type matches my workflow better than the usual "clever" auto- expander. I also have no issues paying for good tools (and $29 is really negligible as far as I'm concerned when it's for productivity tools, my keyboard alone costs an order of magnitude more).

However, and I know I'm probably in the minority here, I won't even consider using your program if I can't get the source. I'm not even asking for a FLOSS license or anything, even if it just came with a tarball that I can't redistribute I would consider it. But as it stands I would be completely relying on you maintaining the code and porting it to whatever platform I may want to use later. As it stands for instance it seems that you don't provide binaries for the BSDs: [https://github.com/zxqfl/tabnine- vim/tree/master/binaries/0....](https://github.com/zxqfl/tabnine- vim/tree/master/binaries/0.6.0) . I'm sure I could get it to work with Linux binary compatibily on FreeBSD but why even bother? What if Apple releases an ARM-based desktop a few years from now and you've stopped maintaining your project? Then I have to replace it with something else if I have to code on a Mac. The price is a non-issue but having to work around the closed source nature of the software is not something I want to bother with.

Again, I know that I'm probably in the minority and that many people on HN have no issues using mostly closed source development stacks but I genuinely wonder if you'd have much to lose if you kept the same business model but provided the source. I mean, if people want to pirate your program I'm sure they'll find a way even if it's just the binary, so I doubt you gain much from that. Then the risk is people stealing your code but is there really that much secret sauce in an autocomplete program? If people really care won't they just reverse-engineer it anyway? Aren't they even _more_ likely to try and reverse- engineer it if it's the only way to get an open source version that they control?

Maybe I'm overthinking this.

Anyway, I hope I don't appear too negative, that's just my opinion. I'm happy to see people working on improving our code editing experience in any way or form, sometimes it feels like we're still in the stone age with our dumb ASCII files and relatively primitive tooling.

<comment><USER58> As long as there is demand, he'd most probably maintain the project but it's not a disaster if he decides not to.

If there won't be any demand for this tool in a few years this could mean 2 things: Either people think it's not worth it (in this case, you don't lose anything by not using it) or there are better/cheaper alternatives (and you can use them)

<comment><USER59> > As long as there is demand, he'd most probably maintain the project but it's > not a disaster if he decides not to.

There is a lot of reason for someone to stop maintaining a project event if there is demand, they get bored, they change job and don't have time anymore, they get a new hobby…

</comment></comment></comment><comment><USER60> Apparently I see two drop downs for auto completion, Since I installed TabNine :/.

<comment><USER61> Disable your text editors default?

</comment></comment><comment><USER62> Really nice. Good job!

I tested it in Sublime Text, and it's a bit odd that i can tab after i first pressed the tab button and the autocomplete window disappeared, but i think i can work with that :)

</comment><comment><USER63> Awesome. Excellent work.

It seems to work with a small Ruby app, but not with a big Ruby on Rails application. Is it because it's too large? How can I check for errors or index status?

Using it with Sublime Text.

<comment><USER64> I suppose you are running into the index size limitation that is mentioned here: [https://tabnine.com/buy](https://tabnine.com/buy)

<comment><USER63> I suppose it's that. I wonder why I don't see any error messages tough. I don't want to buy it if it won't work for my project. It's more than 200kb _and_ 15mb but the .rb are way less.

[edit] Ok, it just took a bit before showing the tab competitions and the license message. Will be useful to know where the index process is at.

[edit2] Just bought a license. Keep up the good work!

<comment><USER65> I'm also interested in using it for a Rails application. Does it work well with the payed version?

</comment></comment></comment></comment><comment><USER66> I've had better luck with TernJS and deoplete in vim. I really like that this is much more responsive but it lacks the completion support that I have to expect with ternjs.

</comment><comment><USER67> I like the license registration process, so intuitive and simple.

</comment><comment><USER68> I'm trying it out for a bit now, I'm really intrigued. If I buy it, can I use it at work and at home?

Also how do you enter in VSCode that you purchased the pro extension?

<comment><USER69> Looks like you can: _License keys may be used on multiple computers and operating systems, provided the license key holder is the primary user._ [https://tabnine.com/eula](https://tabnine.com/eula)

<comment><USER68> Perfect, thank you!

</comment></comment></comment><comment><USER67> I wonder how can I disable it for certain file types, for example in SCSS I don't want those, because I already have a good auto suggester that I am used to.

</comment><comment><USER70> How does licensing work? Does this give me a file I put on my machine? I have my dotfiles checked into git, so I'd rather not commit the license publicly.

<comment><USER20> You get a license code that you paste into an editor with TabNine installed. The autocompletion engine sees it and completes the registration. Not sure where it gets saved ultimately.

</comment></comment><comment><USER71> What if it autocompletes bugs and vulnerabilities?

<comment><USER72> Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?

<comment><USER73> I find it interesting that this quote will become less and less absurd as technology continues to improve.

The confusion stems from the fact that a human can tolerate a certain amount of "wrong" and still give the "right answer". For example you don't need to speak with perfect grammar to be understood. Humans won't choke on syntax errors the same way a browser chokes on malformed html.

Machines are much more rigid and can't understand context and intent. But this is starting to slowly change in the age of machine learning. For example if I make a small typo, I expect an autocompleter to still understand what I was trying to type. It wouldn't be too absurd to believe that in a not too distant future, it would also be able to autocomplete away common/obvious bugs. Maybe it can even autocomplete/rewrite code from near pseudocode if the intent is clear enough.

</comment></comment></comment><comment><USER74> 200KB for the free version seems really small :(

<comment><USER75> Agreed. 200KB is far too small to effectively evaluate the offering.

A blank Ruby on Rails app is several times that amount, and the yarn.lock file alone is nearly 300KB.

<comment> jacob-jackson You can still evaluate it if your project is larger than 200KB. TabNine will choose files to index that are relevant to the files you are editing (determined by distance in the directory tree).

</comment></comment></comment><comment><USER76> This looks great. Giving it a try right now.

Also really awesome of you to provide premium features to the Rust ecosystem for free.

</comment><comment><USER77> tabnine-vim: YCM? Sorry to hear that...

<comment><USER78> Agreed. This was a deal breaker for me. It would be really great if it somehow implemented a standard protocol (like [https://langserver.org/](https://langserver.org/)) in order to integrate with existing completion plugins.

<comment><USER23> I wrote an alternative vim plugin as a deoplete source: [https://github.com/tbodt/deoplete-tabnine](https://github.com/tbodt/deoplete- tabnine)

</comment></comment></comment><comment><USER58> I tried the free version and immediately jumped to premium.

Very impressive work. Best software purchase in a long time.

</comment><comment><USER79> Very cool project. Did you also do the machine learning research and model development in Rust?

</comment><comment><USER80> I've been using this for the past 20 minutes in Sublime Text and, well, it's quite sublime.

Holy shit.

</comment><comment><USER81> Will it work with the existing autocomplete mechanism in vscode python extension?

</comment><comment><USER82> Any plans for WebStorm et al.?

</comment><comment><USER83> Is there any FLOSS alternative to this? Any good doc on the ML used?

</comment><comment><USER84> how would compare that to something like YouCompleteMe?

<comment> jacob-jackson YouCompleteMe will be better than TabNine for API exploration.

TabNine will be more reliable (it will work correctly with malformed, ill- typed, or half-written code) and it can find patterns in your code, like you can see in the pictures on the website.

</comment></comment><comment><USER85> will it work with youcompleteme on vim or should i remove youcompleteme and use tabnine only.

</comment><comment><USER86> This is amazing, thank you.

</comment><comment><USER87> This sounds like a cool idea for an open-source project. :-)

<comment><USER88> Looks neat! Is there a way to make the autocomplete popup in sublime text look like the original one? Mine looks terrible right now.

</comment></comment><comment><USER89> This is amazing!

</comment><comment><USER89> This is amazing

</comment><comment><USER90> Visual Studio support please :) This looks really good

</comment><comment><USER91> Why is there a premium version ?

<comment><USER92> To allow the person(s) who implemented it to get paid for their efforts and hard work?

<comment><USER39> It's also a very competitive price. $29 is excellent for a piece of software that helps my day to day. It's really a sweet spot between very reasonable, and a bit pricey. I'm so happy about this project, and hope it works well _(I 'll be trying it tonight after work)_

<comment><USER93> No craftsman of any kind would whine about a (good) tool that costs $29 and makes him more productive. I do not see why a progrommer should do that.

<comment><USER39> On that same note, I wish we were more willing to pay for our tools as a community. If we were, I think more neat and productive projects like this might exist. Yet, developers seem to be historically cheap, and our love for open source _(which I do love)_ seems to be mixed in with our willingness to spend money on our tooling.</comment></comment></comment></comment></comment>


Show HN: OneLiners.co – Crowdsource a new tagline for your company - <AUTHOR> http://oneliners.co

<comment><AUTHOR> We created OneLiners.co in just over a day to try and help people with coming up with a gorgeous tagline for their company, by allowing the public to submit suggestions, and vote on other peoples suggestions.

<comment><USER2> Well, will be great if you explain technologies that allow to create such tools.

</comment></comment><comment><USER3> "Log in with Twitter"

No thanks</comment>


A(nother) Plan for Spam - <AUTHOR>

Apologies in advance for the title.
One reason that Spam still exists is that it works -- people do respond to the messages.
We all assume (and this might be be incorrect), that if we could just educate folks that are responding, they'd stop.  And the even the crazily skewed economics of spam blasters would fall apart.
The question is: how do we reach them?
The answer is: Spam!
Here's the premise
- send spam to people that is even more tempting than what, um 'legitimate' spam looks like
- when clicked on, it takes them to an educational page talking about spam, and why not to use it
- link in horror stories of people dying from bad V!@6rA or having their credit sapped
- the user might also see a message warning them that clicking on this sort of thing might invalidate their account.
One would hope that ISPs and folks that have to manage mail servers would appreciate the reduction of the load.  And would pay to keep this service in effect.
 <comment><USER2> :( Um, think about it this way: if you are able to generate spam that is more effective than 'legit' spam, your technique would be copied in about 2 minutes.

<comment><USER3> I don't think it needs to be more effective than legit spam. Send regular spam but have the links take them to an anti-spam education page, something short that they would remember.

Like, "If this were a real spam you would now be prompted to buy X so that we can steal your identity and sell you fake products that could kill you. Good thing it isn't!"</comment></comment>


The Objective-C Runtime and Swift Dynamism - <AUTHOR> https://academy.realm.io/posts/mobilization-roy-marmelstein-objective-c-runtime-swift-dynamic/ <comment><USER2> This is particularly relevant right now. The swift-evolution mailing list is currently discussing adding a "dynamic member lookup" protocol to Swift to enhance interop with dynamic languages like Python, Ruby, and Perl. You can see the proposal here[0].

[0] [https://gist.github.com/lattner/b016e1cf86c43732c8d82f90e5ae...](https://gist.github.com/lattner/b016e1cf86c43732c8d82f90e5ae5438)

</comment><comment><USER3> I still like Objective-C even if it isn't my go-to language anymore. It's quite elegant compared to it's peers from the 80's, it's a very small language yet you can achieve everything with it, even if it means dipping into C(++) for the parts that need to be really performant. But on the other hand seeing a different programming language when there's some optimization going on and having another programming language for business logic is a great thing too.

How many times don't we see bugs, errors or security issues stemming from the fact that business logic gets implemented in C?

<comment><USER4> What is cross-platform development like?

Also, what about Objective-C prevents business logic bugs?

<comment><USER3> > What is cross-platform development like?

Sorry, never tried that.

> Also, what about Objective-C prevents business logic bugs?

Generically speaking C makes it easy to interact with the computer memory but harder to abstract things while OO languages have it reverse.

C has GOTO, Objective-C not.

Objective-C has objects that easily can encapsulate different aspects of your logic. Objective-C is very verbose and readable while most C API's aren't.

Obviously Swift is even better in that regard as it has better types and checks but it doesn't allow you to seamlessly use C.

</comment></comment></comment><comment><USER5> I'm getting the loading error, "An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details."

Not sure if there is a mirror, a write-up, or another example anyone might be able to pass along.

edit: this google cache version is working[0].

[0] [https://webcache.googleusercontent.com/search?q=cache:gXiqzW...](https://webcache.googleusercontent.com/search?q=cache:gXiqzW0OV04J:https://academy.realm.io/posts/mobilization- roy-marmelstein-objective-c-runtime-swift- dynamic+&cd=1&hl=en&ct=clnk&gl=us&lr=lang_de%7Clang_en)

<comment><USER6> You can watch the talk with google cache. It's from 2016.

Basically, Swift dynamism is coming, hopefully safer than ObjC

</comment></comment><comment><USER7> _> Before we start, Objective-C is a runtime-oriented language, which means that all of the links between your methods and variables and classes are deferred to the last moment possible to when your app is actually running, and this gives you great flexibility because you can change those links. The alternative, where Swift is most of the time, is compiletime-oriented languages. So in Swift everything is a bit more harder bound, and you get more safety, but it's less flexible._

 _> This is what this debate was all about._

Not just _safety_ , but also performance. Swift offers significant performance gains when you don't need the dynamism. Swift lets you opt into dynamic features (as he later explains), and you can seemlessly interact with Objective C on Mac platforms. But you don't have to pay the penalty for dynamism in the vast majority of your code that doesn't use these features.

Edited: I also pointed out some additional mistakes in the post, but removed that because this comment got too long.

<comment><USER8> > Not just safety, but also performance. Swift offers significant performance > gains

This is a common misconception. It is not true. Swift is slower than Objective-C, typically significantly so.

<comment><USER7> When arguing against a "common misconception," one typically provides a source.

You seem to be saying that Apple's claims are not only wrong, but ObjC is somehow faster despite having to do more work. Swift has no runtime method table lookups, no extra objc_msgSend calls, better ability to analyze and inline code, no retain/release dance for code with value semantics, etc. Every benchmark I've seen shows Swift faster for these reasons.

<comment><USER9> Do you have experience writing Swift or Obj-C programs? My experience is that Obj-C has predictable performance which is often "good enough", whereas Swift is either too slow (without optimizations) or takes a very long time to compile (with optimizations enabled).

As a concrete example, I took a Swift program I had lying around (8 files, 2854 lines total), compiled it without optimizations, and stress-tested it a bit. Here's what the "bottom-up" profile looks like: [https://i.imgur.com/ohlKQgx.png](https://i.imgur.com/ohlKQgx.png) \-- tons of time wasted in Swift runtime overhead. Compiling with optimizations removes most of the overhead, but a clean build of this (relatively small) program took almost 5 minutes with optimizations enabled.

<comment><USER10> Did you compare it to a roughly equivalent Objective-C program? The top four entries in your profile data show retain, release and objc_msgSend. You will have those in Objective-C too. Maybe to a different degree? That's also why I am asking whether you have similar Objective-C code to test. Or maybe it's just that unoptimized Swift code is slower and optimized code is faster?

Compile times are a related but different matter. There are -warn-long- function-bodies and recently -warn-long-expression-type-checking which are really helpful and can give you an idea where most of the compile time is spent. In my experience, the type checker can spend a _lot_ of time in mildly complex expressions involving overload resolution, which can be really annoying but there are often ways around it. With those culprits being eliminated, I have never encountered 5 minute build times for projects of this size or bigger, and I like to imagine that I write fairly generic code.

<comment><USER9> Thanks, I didn't know about those flags! I suspect there was a pathological expression somewhere, since most of that time was spent in a single file.

</comment></comment></comment></comment></comment></comment><comment><USER11> >"Before we start, Objective-C is a runtime-oriented language, which means that all of the links between your methods and variables and classes are deferred to the last moment possible to when your app is actually running, ..."

I had not heard the term "runtime-oriented language" before. Is this really just another term for "supports reflection"? If not what would be other examples of "runtime-oriented" languages?

<comment><USER12> I think it means "dynamic," in the sense that when you call a method, the object's class is looked up and the class's method list is looked up and the methods' implementations are looked up and the class is even given a chance to handle the lookup itself. It doesn't just support reflection, it reflects pervasively. This basically corresponds to what we usually mean when we say a "dynamic language."

<comment><USER13> Is that lookup done all the time (for each invocation of the same method):? Or is it done at a single point in time, like a JIT, but after that the method is "fixed"?

With the possibility to intercept/replace code at runtime (at any time, not just at a resolve/jit stage) it must be very hard for the runtime to optimize calls (i.e make direct calls instead of indirect via method pointer lookup)?

I'm not familiar with how this works in _any_ runtime (V8, Hotspot, ...) so I'm curious which runtimes actually pay one extra method pointer lookup forever and which don't. I'm guessing the answer for nearly all of them is "it depends".

<comment><USER14> Many languages use "inline method caching" \- that is, a "call_dynamic x_named_method" bytecode is replaced with a "guard_and_call_static 0xfffffff" once the callsite is evaluated. In some languages invalidating this cache by calling a method with polymorphic arguments or altering the receiving class can be extremely expensive, so there are usually second-order optimizations applied.

Objective-C: Takes one method pointer indirection / jmp trampoline forever, but caches "selectors" on the class so that they become a simple lookup rather than a full evaluation. See sibling comments for better write-ups than I could find.

Most JS runtimes: Trace JITs mean many method invocations are compiled into traces and become either inline instructions or native function calls. Also uses "hidden classes" to implement inline method caching, where the callsite is replaced with the specific address of the call once the dispatch is resolved. [https://github.com/sq/JSIL/wiki/Optimizing-dynamic- JavaScrip...](https://github.com/sq/JSIL/wiki/Optimizing-dynamic-JavaScript- with-inline-caches) , [https://blog.ghaiklor.com/optimizations-tricks- in-v8-d284b6c...](https://blog.ghaiklor.com/optimizations-tricks- in-v8-d284b6c8b183)

Ruby: Also uses inline method caching - when a method is resolved that callsite is replaced with a jump straight to the resolved method in the bytecode. Invalidation used to occur any time a class was modified in any way but has been made more specific over time: [https://github.com/charliesome/charlie.bz/blob/master/posts/...](https://github.com/charliesome/charlie.bz/blob/master/posts/things- that-clear-rubys-method-cache.md)

</comment></comment></comment></comment><comment><USER15> It's important to note that this talk is from 2016. Since then, Swift 4 has been released, that added KVO and key paths to the language.</comment>


Briefs.app - <AUTHOR> http://iphonedevelopment.blogspot.com/2010/08/briefsapp.html <comment><USER2> I'm not really sure of this history here, but I will say: I love the icon: <http://giveabrief.com/>.</comment>


Real-time infection and death numbers of Wuhan Virus - <AUTHOR> https://thewuhanvirus.com/ <comment><USER2> It's best to not call it the wuhan virus - it's no longer accepted to name a disease after a location or person, and 2019-ncov is the recommended name to use until an official one is announced

</comment><comment><USER3> Would be great if you include the number of cases that recovered.

</comment><comment><USER4> It would be good if you acknowledged that this is mostly based on data reported by the Chinese government, and that the data in question is likely fabricated or incomplete.

When sources outside China start reporting infection rates and mortality, then there'll be something to graph.

</comment><comment><USER5> There's a really neat visualisation from ArcGIS: [https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.h...](https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html%20%20%20#/bda7594740fd40299423467b48e9ecf6)

</comment><comment><USER6> Would be nice if this used a larger color gradient. The colors of red are too close together imho.

<comment><USER7> Indeed. It's not colour-blind friendly in the least. I have to stick my face up to the monitor to figure it out.

</comment></comment><comment><USER8> It would be good to have a day by day graph</comment>


Banks are getting back into the business of building mortgage bonds - <AUTHOR> https://www.wsj.com/articles/banks-warm-to-mortgage-bonds-that-burned-them-in-2008-11568626202?mod=rsswn <comment><USER2> These bonds are fine if they're rated properly. On the other hand, if your rating system is not functioning properly (as was true in 2008) then any product that needs rating is suspect, only investments whose provenance you can directly investigate yourself are safe in that case.

Maybe we can blind the rating system? If Standard & Poor can't tell whether this instrument they're rating was created by HSBC or me in my basement, they may take a few seconds more to consider whether the scent of shit is because it is in fact just shit in a thin paper shell.

And if you blind them but they still don't give true ratings you can trivially exploit that to fill the market with highly rated shit, destroying the market but leaving the real economy largely untouched. Rinse and repeat until all the dumb money is sucked into your pocket.

<comment><USER3> The rating system has been materially modified since 2008 to reduce the risk. In 2008, the designated rating companies (NRSROs) had explicit _legal immunity_ for the correctness of their ratings, which incentivized them to sell their ability to produce ratings that optimize for goals other than correct representation of risk. And they did.

The Dodd-Frank bill passed in 2010 removed this immunity, making them liable for bad faith ratings that did not represent the real risk. As some people may recall, this created a temporary problem in the market as many debt instruments were suddenly re-rated to eliminate this legal liability. This is also related to the downgrade of US Treasury debt from AAA status in 2011.

<comment><USER2> I'm doubtful that a liability for "bad faith ratings" is enough to get the job done.

Remember Arthur Anderson. They're gone, but the US Supreme Court concluded that they weren't guilty! They make O J Simpson look like the picture of innocence, and yet somehow the Supreme Court felt the need to grant certiorari and then decide actually people who do crimes aren't necessarily guilty of those crimes if they're rich old white men...

<comment> La-ang [http://www.business-superstar.com/words-of-wisdom/the- truth-...](http://www.business-superstar.com/words-of-wisdom/the-truth-about- the-death-of-arthur-andersen/)

<comment><USER2> Hilarious, one of the foxes (a partner at Arthur Anderson) writes an article explaining that those chickens actually wanted to be eaten really and anyway how can it be his fault when any responsible farmer would use stronger locks to keep him out. I particularly enjoyed:

> They were indicted for shredding documents. These documents were drafts and > other items that do not support the final product. All accounting firms > establish policies for routinely shredding such documents.

See - all routine. Sure, your routine might not include being "reminded" to arrange for piles of documents to be urgently shredded once you hear investigators are coming but that's why you might some day be found guilty of crimes, whereas Arthur Anderson were "not guilty" after all the evidence was destroyed and their chums in the US Supreme Court reached in and overturned verdicts against them for destroying the evidence.

Now, one of the nice things in overseeing the Web PKI is that I don't care whether the auditors are incompetent or crooked, it's the same either way to me. I don't expect even their own bosses to do as much as slap them on the wrist for enabling fraud. If I'm relying on audit then I know I might as well toss a coin, I'm always going to be digging deeper than that to understand what was actually going on regardless of whether the auditors "forgot" or deliberately chose not to look.

</comment></comment></comment></comment></comment><comment><USER4> Have any two financial crises happened for the same reasons ?

I'm in my early 30s and can recall the following in the US. All for different reasons which would lead me to believe that government regulation post crisis can be effective at avoiding the same crisis from repeating (while arguably could cause a new one):

\- mortgage crisis 07 \- dot com 00 \- savings and loans late 80s \- oil crisis late 70s

<comment><USER5> > Have any two financial crises happened for the same reasons ?

Yes, all of them for the same reason: FIAT currency instead of real money.

<comment><USER6> Fiat currency is one of the reasons society has had a lot more stability in the value of money in comparison to any other time in the past. Currencies tied to commodities such as gold, silver, etc have always been more volatile due to supply oscillation, business cycles and periodic bursts of 'pocket' recessions.

<comment><USER7> The problem with fiat currencies is that there is just a little too much temptation to print a truckload when there are "emergencies". This often causes hyperinflation or massive inequality leading to the rise of populism and democratic backsliding.

<comment><USER6> Printing a truckload of currency is often a byproduct of populism. Even without fiat currencies, governments would simply use other methods to debase the value of their coins [1]

[1] [https://en.wikipedia.org/wiki/Methods_of_coin_debasement](https://en.wikipedia.org/wiki/Methods_of_coin_debasement)

</comment></comment></comment></comment></comment><comment><USER8> And why wouldn't they? they lost some money but mostly got bailed out at the taxpayer's expense, and nobody went to jail.

If we haven't made the disincentives stronger (we haven't) and if they were inadequate the first time (they were), why are we expecting bankers to make different choices?

This is the expected outcome.

<comment><USER9> > And why wouldn't they? they lost some money but mostly got bailed out at the > taxpayer's expense, and nobody went to jail.

Let's just clarify - American citizens lost $12.8Bn. [0] That money didn't evaporate, it got funneled back into many of the banks and auto manufacturers as a hand out. Some banks that took risk had little to no downside and we know that there were a continuation of bonus payouts to executives by banks that took bailout trailing the debacle. The US had a chance to wipe out some of the hogs of the market but instead chose to feed them.

[0] [https://finance.yahoo.com/blogs/daily- ticker/2008-financial-...](https://finance.yahoo.com/blogs/daily- ticker/2008-financial-crisis-cost-americans-12-8-trillion-145432501.html)

<comment><USER10> While in principle I don't ever believe in bailouts of any kind, not bailing out the banks would have led to an apocalyptic situation probably worse than the Great Depression. Sometimes those in power have a responsibility to the people instead of some idealistic morality.

<comment><USER11> We could have bailed the companies out while tossing the executives who facilitated this crisis into the gulags.

<comment><USER12> Not that I dislike the idea of putting bankers into gulags, but I believe taking away all their wealth and seizing eveything they earn above poverty level for life would be more of an effective punishment.

Also, the shareholders of such banks should be held accountable - the banks in question should be dissolved and the assets distributed to the public/the state. If shareholders do not have to fear total loss as a consequence of managerial misconduct they will not have any incentive to put actual controllers instead of yes-men to the boards.

</comment></comment></comment></comment></comment><comment><USER13> There is nothing inherently wrong with mortgage bonds.

The principle is simple and fine, chop up a bunch of mortgages from all over, with the same risk profile and pool them together.

That way local environmental factors don't cause the whole investment to go south. Basically raid for investment

What is a problem, and one that still hasn't fully been tackled is the industrial scale fraud that sold delinquent, or knowingly under par mortgages as high quality instruments.

Through all the use of fancy words, every seems to have got the impression that commoditized mortgages investments are complex, using words like "tranche", "proprietary instruments" and blended risk.

its really not, get a bunch of mortgages, shove them in a blender and make mortgage sausage.

So long as there isn't widespread and systematic fraud, then everything will be fine.

However considering that there haven't been large scale arrests, I don't hold out much hope.

<comment><USER14> _> There is nothing inherently wrong with mortgage bonds._

If Bank X is sloppy about qualifying customers for mortgages but keeps the mortgages on their own books, the sloppy behaviour will bite them in the ass. Thus, they are incentivised to be careful with no external oversight needed.

The moment it's possible to sell the mortgages on, that incentive is removed.

<comment><USER15> > The moment it's possible to sell the mortgages on, that incentive is > removed.

It's not. Investors in the secondary market don't want to buy shitty subprime loans. The only reason lenders originate these awful loans is because the government incentivizes them to do so by guaranteeing to buy them via Fannie and Freddie. Fannie and Freddie buy half of all US mortgages, and in doing so dramatically distort interest rates and the amount of liquidity in the housing market. They also guarantee these loans, something a lender would never do, which is why mortgage-backed securities were considered "safe" leading up to the crash in 2008.

If Fannie and Freddie didn't exist, subprime loans would either not exist or would have dramatically higher interest rates in order to properly protect against the risk of default.

<comment><USER16> Fannie and Freddie do not buy subprime loans, subprime stays in the private market. If Fannie and Freddie didn't exist, prime rates would be closer to subprime rates since it's effectively those prime rates that are being subsidized.

<comment><USER15> > Fannie and Freddie do not buy subprime loans, subprime stays in the private > market.

I'm not sure where you got that idea. Fannie and Freddie exist for the explicit purpose of making mortgages more accessible to people who would otherwise be considered too risky to lend to (low down payments, low income, no assets, etc.). They do this by purchasing mortgages that are underwritten to lower standards and at lower interest rates than would be acceptable to private lenders, effectively shifting the risk from private lenders to the taxpayers.

Fannie and Freddie bought a tremendous amount of subprime loans. From page 454 of the Financial Crisis Inquiry Commission report[1]:

> "...on June 30, 2008, immediately prior to the onset of the financial > crisis, [Fannie and Freddie] held or had guaranteed 12 million subprime and > Alt-A loans. This was 37 percent of their total mortgage exposure of 32 > million loans, which in turn was approximately 58 percent of the 55 million > mortgages outstanding in the U.S. on that date. Fannie and Freddie, > accordingly, were by far the dominant players in the U.S. mortgage market > before the financial crisis and their underwriting standards largely set the > standards for the rest of the mortgage financing industry."

[1] [https://fcic-static.law.stanford.edu/cdn_media/fcic- reports/...](https://fcic-static.law.stanford.edu/cdn_media/fcic- reports/fcic_final_report_wallison_dissent.pdf#page=14)

<comment><USER16> What I meant to say is, Fannie and Freddie no longer purchase subprime mortgages (not since the crisis). You're citing numbers from 11 years ago, and the structure of the market has changed considerably since then. Subprime specifically refers to low credit scores (below 620), which is purely in the private market now since Fannie and Freddie no longer buy those.

Whether or not you agree with the risk assessment of lending to low income borrowers, it is strictly not the same thing as subprime lending.

</comment></comment></comment></comment></comment></comment><comment><USER17> > Banks today are buying both mortgages that are eligible to be sold to Fannie > and Freddie as well as ones that aren't because they are too large or they > are considered riskier—often because they use alternative documentation to > approve the borrower.

I'm really curious what this "alternative documentation" is. This was part of the problem leading up to 2008: banks did not verify people's information. Some people received mortgages after putting their pet's name on the paperwork.

We might not be there yet, but it's a slippery slope.

<comment><USER16> Alternative documentation tends to be for borrowers that don't have good verification of income (like tax returns or paystubs). Often self-employed borrowers, or borrowers with large amounts of assets but little income.

</comment></comment><comment><USER18> Of course they would. Lots of people made loads of money the last time, and no one went to prison. Seems like an obvious thing to try if you're a smart and low-empathy person.

</comment><comment><USER19> Chasing yields wherever they can find any. I read this in a tweet recently:

"Buying stocks for yield, bonds for capital gains".

</comment><comment><USER20> So what's the difference this time around?

I can't imagine they're going "remember that investment product that crashed? Please buy it again. "

<comment><USER21> They're probably going "remember that investment product that made you a fuck- ton of money right up until the crash? Please buy version 2.0"

<comment><USER22> and get in early, and cash out while the goings' good, and let the late suckers fall.

Even pyramid schemes are profitable at the beginning!

</comment></comment></comment><comment><USER23> Would banks be responsible if the Fed wasn't a lender of last resort?

I wonder if thousands of years from now people will look back on our economics like we did to the Romans- "how could they not understand inflation?"

</comment><comment><USER24> These banks have been at it awhile. They've spun off 'rating' companies to check these mortgage packages, private not their internal departments. They've used those companies to run their custom models against fannie mae packages (gs against fannie mae i'm 100% of was witness to), with out that other knowing, and other banks. Whatever is going on, they've been prepping to make sure it happens with high velocity.

</comment><comment><USER25> This time is different.

</comment><comment><USER26> Banks gotta make money somehow in a low interest world.

</comment><comment><USER27> For the people who thing that there is nothing inherently wrong about MBS. Unfortunately, that´s not the case.

When banks sell off their loans, which is what an MBS is, it fundamentally changes the ratio of money:debt originating from the banking system. In a non- MBS banking system, there is roughly the same amount of deposit money flowing around as there are loans. In an MBS using banking system, there are significantly more loans being created - unlike the initial creation of a loan by a bank, the sale of the MBS does not create any additional money.

So the underlying economy may or may not need the extra debt, but creating it this way is anything but side effect free. Granted neither is creating normal bank debt given the money supply side effects.

The evidence of history suggests that an economy can get away with small amounts of this, but at some point there is too big an imbalance of debt to money, and this causes solvency issues in paying back the debt. And that´s when everything all goes terribly wrong.

But it´s a $1 trillion a year industry in the USA, so perish the thought that minor issues like systemic stability should be allowed to interfere with that. On the plus side, China introduced them a few years ago as well, so it will be very interesting to see what happens there as things play out.

For a deeply depressing paper, considering when(2000) and where (US Federal Reserve) it was written, see:

[https://www.sciencedirect.com/science/article/pii/S037842669...](https://www.sciencedirect.com/science/article/pii/S0378426699000527)

<comment><USER28> > In a non-MBS banking system, there is roughly the same amount of deposit > money flowing around as there are loans.

Because when you take out a mortgage it gets deposited immediately in someone elses account. The mechanics are effectively the same as for non-intermediated (MBS) debt.

<comment><USER27> The double entry book keeping operation when a bank issues a new loan, is [debit loan, credit deposit account] creating deposit money.

When a loan is securitzed (sold) by the bank, the DBE operations are:

[credit loan, debit deposit account of purchaser]

and the purchaser now owns loan. At this point strictly money has been removed from the banking system, but in practice the bank then recreates that money with a new loan (as above) because they are now within their regulatory lending requirements, and can issue a new loan. They can continue this indefinitely until the market for securitized loans dries up, which is effectively what happened in 2008.</comment></comment></comment>


Building powerful image classification models using very little data - <AUTHOR> http://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html <comment><USER2> I am just starting to look into these corpuses of pretrained neural networks. Coes anyone know if there are any image corpora with pretrained wieghts that would be suitable for analysis of "high-resolution" images derived from LIDAR data (where in this case high resolution corresponds to a resolution limit of a few meters). In the not unlikely case that there is nothing so specific, can anyone comment on the same for optical satellite imagery?

<comment><USER3> With high resolution images you need large amount of layers to for the later layers to be able to 'see' the whole picture. But such a network would likely be unreasonably large for such large inputs, you'd have to look for distributed model solutions.

So it kind of depends on what you are trying to extract from such large images. If it's macroscopic features then you should just downsample your image to something reasonable and feed it into some pretrained network like Alexnet or VGGnet. If you want microscopic feature detection, but don't care about macro features, then you should use a shallower convnet.

If you insist on having both but the resulting network can't be stored in memory and distributed system is not an option, you might want to look into using recurrent networks with visual attention. These sort of look at manageable chunks of the image and decide where else to look based on what they've seen so far.

</comment></comment><comment><USER4> I love these blog posts. The timing is perfect for me too, I committed some code a week ago that said "I'm doing this manually because I can't figure out how to use `fit_generator`", thanks for the write-up Francois!

</comment><comment><USER5> Great post, fascinating and practical. Which is not something that happens a lot.

</comment><comment><USER6> Another great post. Thanks for awesome learning material !</comment>


Arresting the Unjustly Homeless while they Learn to Code - <AUTHOR> https://medium.com/weird-future/d19c8db85c2

<comment> mkr-hn This kind of story is incompatible with the ideology of meritocracy, so it's no surprise that it only got a handful of upvotes.

<comment><USER2> agreed. looks like using homeless people as props in a story is only interesting when that story is not happening in the real world.</comment></comment>


The Most Popular Stock Indicator Performs Worse Than Flipping a Coin - <AUTHOR> https://handsoffinvesting.com/an-analysis-of-the-macd-technical-indicator/ <comment><USER2> You need to stop using price data, it's worthless. Price is non-stationary and non-normal. Look at log returns instead.

But in general, I would advice you to take a more quantitative factor approach and stop looking at black magic technical indicators.

A good introductory book on equity strategies is Active Portfolio Management by Grinold and Khan. I think reading that book will change your entire approach.

Also, I would focus on market neutral factor strategies instead of your long only price analysis.

Not to be harsh, but what you're doing makes very little sense. It's great that you're interested in quantitative finance, but you gotta learn the fundamentals before publishing blog posts.</comment>


Did LIGO detect dark matter? - <AUTHOR> http://arxiv.org/abs/1603.00464 <comment><USER2> As a complete newbie about this stuff, I think that until we completely understand gravity we have no hope of understanding why the majority of universal mass is 'missing', if at all.</comment>


Point and click interactions are dead or soon will be - <AUTHOR> http://techli.com/2012/08/snag-gesture-control-kinesis/

<comment><AUTHOR> As touch is the paramount form of interaction for personal devices like smartphone and tablets gestures or motion-controlled apps will form the interaction layer for bigger screens

</comment><comment><USER2> This is going to change the way we interact.</comment>


How My Career in Tech Influenced My Fly Fishing Business - <AUTHOR> http://www.xconomy.com/seattle/2009/09/14/how-my-career-in-technology-influenced-my-fly-fishing-business/

<comment><USER2> Great article. "Your people are your product" is a brilliant insight and is really the highlight of the whole thing. I'd say that the employees of the respective places I might visit account for about 80% of my choice in where to go for lunch each day. Last time I bought a car, I'd say employees of the various dealers accounted for about an equal percent of my decision.</comment>


Please tell me how slow would employers consider me as a programmer? - <AUTHOR> I'm not seeking employment, but want to know how slow I am. I've been learning webprogramming for a few years. Now I implement a new feature in a few days if not complex, including the time to learn new things. Frameworks cut a lot of work but also take time; I also started to write more efficient code than those from whom I learn. But I didnt have time yet to write a stand alone app, I'm still a script newbie. Maybe you know how I could test slowlyness by comparing to others ? <comment><USER2> Really, the best way is to find employment (somehow), preferably in a highly collaborative environment, -- or perhaps with important, competently-managed volunteer project -- and you'll find out very quickly how you compare to others.

Another option (while not as fun) are the various coding portals (Hackerrank, etc).

BTW frameworks (while useful in the bigger picture sense) do _not_ necessarily make one produce "faster" (and in many cases can have exactly the opposite effect). It's really about _quality_ , after all -- especially in the sense of making one's code easily understandable by others. And that's a skill you can practice (and most likely, practice better) "in the small", i.e. within the core language you specialize in, even on fairly routine programming tasks.</comment>


Satellite Tax Idea Is Back to Earth - <AUTHOR> https://webcache.googleusercontent.com/search?q=cache:https%3A%2F%2Fwww.latimes.com%2Farchives%2Fla-xpm-2001-jul-11-me-20955-story.html <comment><USER2> > Auerbach figured Los Angeles County could tax the satellites in part because > no other government was doing so. The Board of Equalization's legal staff > agreed.

Is the Board of Equalization not aware of the terms of the Outer Space Treaty of 1967?</comment>


Let's Dial Down our Enthusiasm over the Billionare Giving Pledge - <AUTHOR> http://www.huffingtonpost.com/aaron-dorfman/the-giving-pledge_b_796159.html

<comment><USER2> There are a bunch of fine reasons to be low-to-medium excited about the Giving Pledge instead of totally amped, but Dorfman's argument - that they might not spend it that well- is a pretty stupid one.

First, Gates and Buffett are, in two very different ways, reinventing the rules of how to spend it: Gates by going all in and running his foundation full time, Buffett by saying "forget having my name on things" and giving it to the person he thinks can spend it best.

Zuckerberg is already in this category of smarter giving with his $100mm Newark gift. And there's lots of good reasons to think that the era of the $billion ballet gift is over.

Second, Dorfman runs a center that works to make philanthropy better, but for some reason, instead of being a leading voice in the best strategies for spending it effectively, he's become the leading voice in shitting all over the commitments. Smart. Not.

@dcaldwell's points about the significantly higher amount of annual philanthropy that comes from individuals of average means than from the ultra wealthy is a much better reason to have tempered excitement.

For my money, the most exciting part of this is the precedent that Moskovitz and Zuckerberg are setting to start this incredibly early in their lives. That means we get not only hundreds of millions and billions of dollars, but at least part of their time and attention for decades and decades.

</comment><comment><AUTHOR> Here are a couple other reasons why I don't think the Giving Pledge will have an enormous impact on philanthropy or nonprofits in general.

First, not every billionaire is going to make the pledge. I double that it will be more than a third of them. So, instead of the $15 billion given annually as the article suggest, it will probably be more like $5 billion.

Secondly, since 1957 giving to non-profits has increased all but about 3 years (2 of those being the last.) Some estimates say that in the next 5-10 years, annual giving will be at around $400 billion instead of the current $300 billion. So, the $5 billion in giving from the Giving Pledge will be a much smaller percentage of total giving than it currently would be.

I certainly applaud the generosity of these individuals and families but we need to maintain perspective. If we could get the average American to increase their giving by 1%, we would probably have a greater impact on total giving.

</comment><comment><USER3> I'd say that having _anyone_ pledge to donate _anything_ is something to be immensely enthusiastic about.

</comment><comment><USER4> Having recently worked in the nonprofit world (and for one that received Gates Foundation money), it's important to note that Gates shook up the philanthropy world when he started his foundation and again when Buffett committed to giving his billions to the Gates Foundation. Lots of smaller foundations began asking themselves why they were working in certain areas and if they could be as effective as Gates with Gates in that same space (e.g., malaria prevention).

Gates is not asking billionaires to do what he did, but he should have -- really get involved with the issues you care about and spend that money smartly to make a lasting impact.

</comment><comment><USER5> I'll say it -

This guy is a fucking jerk.

When confronted with something that conflicts with his worldview that the rich are bad, he cooks up a bunch of caveats and concerns so he can keep his current worldview.

Many of his arguments aren't even right -

> Wealthy donors don't tend to prioritize lower-income communities, > communities of color or other marginalized groups as beneficiaries of their > giving.

You mean, like, eradicating Malaria in Africa [1] or funding the USA's worst performing school districts [2]?

Jerks like this have been beating the "the rich are evil and don't care about poor people drum" for so long that they can't adapt now. What's this? In addition to building world changing companies, they're also giving the wealth they got personally to charity? Well, it's still not so good, because you know the rich are evil and don't care about poor people.

I'll say it - he's a jerk. When confronted with effective pragmatic people moving into his backwards-poorly-managed idealistic space, he complains and slings mud and adds doubt.

Screw him. We need less people doing stuff that he's doing, and more people doing entrepreneurship, taking strong pragmatic action to fix problems, and giving voluntarily.

[1] <http://www.gatesfoundation.org/topics/Pages/malaria.aspx>

[2] [http://techcrunch.com/2010/09/24/techcrunch-interview- with-m...](http://techcrunch.com/2010/09/24/techcrunch-interview-with-mark- zuckerberg-on-100-million-education-donation/)

<comment><USER6> Let me play devil's advocate.

Let's say you are bill gates. You own assets worth of 50 billion dollars. Assuming there is no capital gain or loss and that your return on investment is 5%, you should be making 2.5 billion USD annually. Half of that would normally need to be paid as income tax to government. That's around 1 billion dollars every year.

So what you do? You get the best financial advisors and they'll tell you... "move your assets into your own private foundation". this way you won't need to pay tax on your income although to retain tax exempt status, you will need to give away every year at least 5% of your assets. so you will end up paying your "taxes" anyway but it will make you look awesome because now you are doing _charity_ instead of just paying federal income tax like the rest of us.

And this is exactly what bill gates has been doing all these years. His foundation is worth 35 billion dollars and he is giving away exactly 5% every year. Up until now they gave away 24 billion dollars (around 1.5 billion a year).

I think it makes sense to avoid paying income tax and decide to spend your money elsewhere at your discretion.

so let's not pretend these billionaires are better than rest of us.

<comment><USER7> > Assuming that there is no capital gain or loss and that your return on > investment is 5%

That doesn't seem to make sense, as a return on an investment is a capital gain.

> Half of that would normally need to be paid as income tax to government.

How exactly do you figure that? You don't pay income taxes on investments, you pay a flat 15% capital gains tax on investment income. I don't see how you think he'd lose half to taxes, it'd be far far less than half.

Beyond that, giving away 5% of 35 billion (total wealth) costs a lot more than paying 15% of 2.5 billion (investment income that year), so it's not saving him money on taxes which would only be in the range of 350 million a year given your example.

Choosing to spend a billion and a half a year on charity to avoid paying 350 million in taxes doesn't make much sense as a motivation. So I highly doubt that's why he's doing it.

<comment><USER6> income from dividends or when your money sits in the bank earning interest is not capital gain. capital gain is when you buy shares, real-estate etc and market price of these assets increases while they are on your balance sheet. then it's unrealized capital gain and you don't pay any tax on it until you sell it and make it realized capital gain. for simplicity reasons to explain my point, I didn't want to overcomplicate it with capital gains and losses.

<comment><USER7> Yes, but dividends are basically taxed at the same rate or slightly higher 20% as capital gains; they aren't taxed as earned income using the progressive bracket system. So while they aren't technically capital gains, my point stands.

<comment><USER6> In 1994 when Bill Gates started his private foundation, income from dividends was taxed like regular income.

You're right it's 15% right now but don't forget there is new tax law coming into effect pretty much in two weeks that will tax dividends again like regular income.

<comment><USER7> I wasn't aware the new law did that, but I'm pleased to hear it. Now if only they'd do the same with capital gains.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> The cotton gin ended slavery. Any Billionaire who chooses to give money to charity is opting out of the quest for new innovations that will let people willingly free others from the bonds that hold them in poverty.

Imagine if Whitney had instead donated the capital he used to invent the cotton gin to the local orphanage.

I think it's an interesting commentary on the perception of capitalism that the world's richest view themselves as having been one-hit-wonders unlikely ever to eclipse their initial accomplishment with their own sweat and insight...

Instead, I'd prefer that these people follow in the steps of Gates himself, who has delved into asking the question of what the big problems are and how they're most effectively solved. His TED talk about power generation was incredibly inspiring, and assuming his wealth is $50B, he's not rich enough to self-fund it beyond the second stage.

<comment><USER9> Whitney _should_ have donated the capital he used to invent the cotton gin unsuccessfully defend his IP to the local orphanage.

Attributed to the Eli Whitney Museum site by Wikipedia: _"Whitney (who died in 1825) could not have foreseen the ways in which his invention would change society for the worse. The most significant of these was the growth of slavery. While it was true that the cotton gin reduced the labor of removing seeds, it did not reduce the need for slaves to grow and pick the cotton. In fact, the opposite occurred. Cotton growing became so profitable for the planters that it greatly increased their demand for both land and slave labor. In 1790 there were six slave states; in 1860 there were 15. From 1790 until Congress banned the importation of slaves from Africa in 1808, Southerners imported 80,000 Africans. By 1860 approximately one in three Southerners was a slave"_

So whilst there are many inventions driven by capitalist investment that have had a far more benign or positive impact on society than your unfortunate choice of example, I think it's fair to say that profit-driven innovation by the already wealthy is far from certain to liberate people from the bonds that hold them in poverty _even if it succeeds_. I also think it's absurd to suggest that charitable giving can't foster innovation. Imagine if the local orphanage had given some smart, self-sufficient kids a good education focused on entrepreneurial values...

</comment></comment><comment><USER10> Um...you're welcome?</comment>


Why Women Are Ditching STEM Careers – And How to Change It - <AUTHOR> http://www.fastcompany.com/3041381/strong-female-lead/why-women-are-ditching-stem-careers-and-how-to-change-it

<comment><USER2> > Since 1990, the number of women entering careers in science, technology, > engineering, and mathematics, or commonly known as STEM, has basically > remained stagnant.

That's inaccurate. The number of women since 1990 has increased in STEM. The ratio relative to men however has become worse or stagnated depending on whose data you wish to use.

People keep repeating the "women in STEM are decreasing" myth because others keep intentionally using misleading graphs that show % of women in STEM and then a nasty downward line. The reality is total numbers of people in STEM has increased, and so have the total number of women, men's participation just increased at a greater rate.

So the question is: What happened that made men's participation increase faster than women's participation? I don't see anyone asking that.</comment>


Ask HN:Beautiful Web UIs - how? - <AUTHOR>

I don't know about you lot, but I often hear programmers in general complaining that they can't design, yet many of the web site demo's I've seen recently are beautiful, and IE compatible.<p>Where are people getting their designs from? Do they have a designer on the team? How are they "just knocking out" good designs so quickly? Or are they paying some photoshop wiz to do it for them? <comment><USER2> I can't speak for all developers, but when I'm knocking up a quick and dirty demo, ThemeForest is my friend :)

</comment><comment><USER3> I think it is one of two:

1\. They hired a designer to work with them. 2\. They have become good at design themselves.

It's kinda obvious when you think about it.

<comment><AUTHOR> I'm looking for a consensus of experience. There is one other possibility, that out there in start-up land is a whole bunch of graphic designers not getting paid but just working with startups because that's what they're into.

</comment></comment><comment><USER4> Programmers in successful startups (like the ones producing the demos you mention) ignore what people tell them that they can't do. They just try and they get something done. Then they iterate as long as "the demo's ui sucks" is the number one problem.

Probably the designs are sourced from their experiences. Just like you, many of them have seen beautiful sites. It's not impossible to find a few you like and mix/match design elements plus some of your own originality to produce your own variant.

<comment><AUTHOR> This is a very interesting point well made. It's not what you said, it's what you didn't say: about prioritising work effort.

But surely most creative programmers are never happy to draw a line under the coding, to concentrate on the graphics. What's your experience? Sounds like you know...

</comment></comment><comment><USER5> Good design starts with good usability. There are no tech shortcuts (bootstrap or otherwise) to this. Your application's interactions are probably unique. There may be some design patterns (God, I hate the abuse of that phrase) that apply.

Bootstrap, etc are simply tools used to implement interfaces. They are not magic bullets. Design, like programming, takes time. It's not about gradients or drop shadows, but those are tools used in design.

It's often an iterative and collaborative process. It is not, however, "Agile". You can't design the interaction for a piece without looking at the whole.

Find someone who cares about interface, interaction, and usability. Ideally they can do graphics, html, and css. Ideally they've done some user testing before or are just really good at getting users. If you find someone like that, be prepared to pay. The good ones are few and far between and all that I know are gainfully employed or have hourly rates exceeding $200USD/hr.

If you want to learn more about this, there's a library of stuff out there. But just reading a bunch of books won't suddenly make your UIs prettier. But if you implement what you learn, it may improve their functionality. And that's far more important.

<comment><AUTHOR> This is a "form follows function" argument. Which of course has its supporters and I'm one, But there is an argument that "it's what you leave out that makes it good" which means you are thoughtfully not putting in elements - and this requires good judgement.

Maybe I'm getting old, but it is just quite amazing that engineering / CS graduates have this sense seemingly "built-in".

</comment></comment><comment><USER6> The Bootstrap CSS framework is a very good starting point:

<http://twitter.github.com/bootstrap/>

<comment><USER7> I implemented this yesterday into a project I had been working on. Admittedly, only one page and a pretty simple layout so far, but it's very quick to get benefits from it (especially grid layouts).

</comment></comment><comment><USER8> I'm in a similar situation to you. I've spent the past 2 hours browsing themeforest as recommended by others in the thread.

There are some gorgeous designs on there but they seem heavily geared toward blogs and admin interfaces...? Maybe I'm not looking in the right section but I can't seem to find anything suitable for consumer style web apps.

It would be really helpful if someone could post specific templates that they've used on their projects

<comment><AUTHOR> This is not going to help in the beauty department but as someone mentioned usability above you couldn't go far wrong with Balsamiq - it's actually fun to use, which you can't say for most design software.

</comment></comment><comment><USER9> Dribbble and PatternTap are my goto's for inspiration. I pretty much browse Dribbble everyday. Basically, a beautiful UI comes from iteration in my opinion. I feel it's counter-productive to immediately strive for a beautiful interface. Rather, start with something plain and grayscale and you'll soon discover ways to slowly make it more beautiful and usable just based on interfaces you encounter on a day-to-day basis.

</comment><comment><USER10> ThemeForest my friend. The pages come with a demo, then just use them as modular components. Worth every cent

</comment><comment><USER11> The best designers copy different things from different sites, combining them in a way to make it distinct and unique.

<comment><USER12> The best programmers copy from different sites, combining their code in a way to make it distinct and unique.

Do you see why this is inaccurate?

<comment><USER13> You are comparing apples to cantaloupes here.

He's talking about imitating or drawing inspiration from other websites for the visual elements of a particular website. Everyone does this.

<comment><USER12> Oh, is there a button in Photoshop that helps you "draw inspiration"? Or can that happen without Photoshop or any design tool whatsoever?

It is the exact same thing.

<comment><USER13> No it isn't. You can look at a visual element or style on another website and mimic it for your own.

You can't look at, say, Facebook and determine the exact code structure and replicate that.

<comment><USER12> Visual style != design. End of story.

<comment><USER11> Please, stop trying to make your specialty some special voodoo that only gifted, special people will know about. It's a commodity.

<comment><USER12> Ah, it only chafes when I apply your statements back to you about _your_ profession. I see.

Point of fact: I started as a visual designer when I was a teenager. Then I learned PHP, then Ruby, then JavaScript, off which I made lots and lots of money and no little fame. Then I got really interested in the way software WORKED and turned into an interface designer. Who designs and develops her own shit. Now I make and sell products directly to people who use them, nobody will "hire" me for anything ever again.

What is my profession exactly, that I am preciously trying to protect?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> themeforest.net - the design challenged programmer's best friend.

</comment><comment><USER12> Good design has nothing to do with being a "photoshop wiz."

Unless, of course, you as a developer describe your main skill as being "a text editor wiz."

<comment><USER15> Well Photoshop is a bit more complex software than a text editor; it's more of a deep toolset than just a frame. Being great at Photoshop means that at least the tool command is there to do great design work. It's probably more akin to a development platform, like saying someone is a "Ruby wiz." It still doesn't mean they'll do great work, but at least they CAN do great work. If someone sucks at Ruby (or Photoshop) they are going to have a hard time developing great products with it.

<comment><USER12> No, saying somebody can use Photoshop is not like saying they're a Ruby whiz.

Here's how you can tell:

"Oh, Bob! He's an Eclipse wiz!"

How much does that actually tell you about Bob's programming skill?

<comment><USER16> That definitely doesn't tell much about Bob's ability to craft beautiful code fast. However, in my experience, people who have mastered their tool-chains are most likely good developers too.</comment></comment></comment></comment>


Ask HN: How to handle user management for a SaaS without SAML support? - <AUTHOR> As a company the usage of various SaaS is quite common (e.g. DockerHub, Github, Google Analytics for techblogs, ...). Some of those services offer auth interfaces like SAML (LDAP, Active Directory). Github is one. Some services offer nothing in this direction. DockerHub is one.
Often the usage of a private account (eg in Github) make sense to keep history, resume and so on. Even google is doing this. See https://opensource.google.com/docs/github/#accounts The issue here: You are not able to get a mapping to the employee because their username, email or avatar can be quite wired/different.
The big issue appears when the employee is leaving the company. That is the main reason for this Ask HN.
I "dream" from a kind of engineers self service center. A web ui that has several "plugins". Each plugin related to one service (Github, Dockerhub, GA for techblog and so on). Every person who wants to see the analytics of the techblog requests access via this web ui. In the background a mapping between their google account and the company email / employee identifier is maintained. And the user is connected to your GA account via an API call to google. This could be done with various services. In the background a cronjob is running and asking the LDAP / Active Directory if this user is still active (i assume that when an employee is leaving that the AD account is disabled/deleted). If the user is not active anymore, access on all services will be revoked automatically.
I think that this problem is faced by many companies. Maybe this is a free startup idea.
How you deal with this in your company? Or what solution you use / suggest / refer to? Or is there already a open source version of my dream service center? Or any reason why this is a dumb idea and you have a better alternative in mind? <comment><USER2> The official terminology for this is "provisioning" and "deprovisioning" or overall "lifecycle management" and is a pain for lots of companies in lots of different contexts.

 _For example, when I left [then startup, now publicly traded] in Nov 2013, it took them 15+ months until they turned off my Github access.. in the meantime, I had access to all the private repositories. (Yes, I notified them multiple times.)_

SAML is pretty widely supported but yes, it's a pain. SCIM[0] is less painful approach for the provisioning side and maps to the API mindset better. Unfortunately, it hasn't seen mass adoption so far but I think we'll get there as more people understand it and/or realize that companies will pay for it. But you'll still need SAML or OIDC for the SSO piece.

I _do_ think there's a business need for this which is why I joined Okta in 2016, which does exactly this. I'll refrain from a sales pitch but you can explore it on your own[1].

0 - [https://en.wikipedia.org/wiki/System_for_Cross- domain_Identi...](https://en.wikipedia.org/wiki/System_for_Cross- domain_Identity_Management)

1 - [https://developer.okta.com/signup/](https://developer.okta.com/signup/)

edit: clarified SAML vs SCIM

<comment><USER3> Your product and pricing page are super confusing to me. You talk about "users" but don't you mean "employees".

The product I am looking for is one where I manage all of my employees access to all of our relevant SAAS applications. Employees log onto this 1 single service and then can log onto all of our tools federated by this 1 service. If an employee leaves, then I simply remove them from this 1 centralized service and they are removed from all of our SAAS services.

<comment><USER4> Note: I'm not connected with the GP in any way and do not have any financial or material interest in Okta.

Users don't necessarily have to be employees, although for many smaller companies the employees may be all the users. For example, say your company buys computers for your employees from a vendor and gives the vendor access to one of your applications to send invoices and manage orders (with appropriate controls and privileges). You would want to manage this external vendor user in a way similar to how you manage employees' access to applications. For a system like Okta, this external person is also a user, though not your employee.

For your use case described above, a system/platform like Okta may be a good fit — all your user identity management and application access management would be on Okta alone.

Keep in mind that individual applications may still have copies of user identity and profile records and their own (closed) mechanisms of storing user privilege information. Those cases would have to be managed separately anyway, even though it generally may not cause any harm as such to keep such "junk" around when the main user identification record has been purged from a central system like Okta (the same can be said of AD, LDAP, etc.).

<comment><USER5> Or consider the case of a university: users can be staff, students, contractors, alumni, and various other random categories. For example, at the university I used to work for, any member of the general public could purchase a library borrowing card, and that meant they had to have a login to the university library systems (to see what books they had borrowed).

</comment></comment></comment></comment><comment><USER6> I think you're trying to solve two problems:

1\. Single-Sign On (SSO) - Log in once for access to many services. SaaS with SAML and OpenID Connect support are ideal in this space, but services without support can be used with a browser plugin

2\. User/Lifecycle Mgmt - CRUD operations for users. SCIM support is ideal in this space, but many companies offer services beyond simple CRUD using bespoke APIs. Without support for either, it's very difficult to integrate a service. The bespoke APIs mean that you'll see varying depths of integration across services. For example, one service may allow you to control whether a user is in a group in Dropbox, while another won't.

There are several companies in this space (known as IDaaS), so I'll leave the Googling to you. Of those, some do User Mgmt. I'm not aware of any companies that do User Mgmt without SSO

</comment><comment><USER7> In a past life as a solutions engineer at a SaaS company, I'll address a couple points specific to a unified solution.

Problem 1: Not every SaaS platform has a company with an API to manage user accounts. Even then, I would be skeptical of a company that offered it and didn't offer it via oauth tokens.

Problem 2: Automating the task within the browser also fails when it comes to uniformity. Any company that lacks an API endpoint for user management means you need to interact with a browser or some other hacky nonsense. With that solution comes the problem of understanding the site structure, login forms, and action menus.

Problem 3: Even if you did the above 2, you now have additional points of failure within your offboarding. If a failure occurs in the automation process, is it silent? What if the API changes (not that it should) or the UI?

The best solution is to look for companies that offer the API option or that support SAML.

</comment><comment><USER8> From experience: after company grew to more than .. 200-300 people and user management/termination became a big burden we hired a person that would write tools to automate user management, and if something wasn't supporting SAML we did manage users via its API. If API was not available then we reverted to "Termination checklist" aka manual work.

Clarification: it wasn't that persons only responsibility, just one of many assignments to help automate Ops in the company.

</comment><comment><USER9> This is a common problem with more and more companies relying on SAML federation. A part of this problem is solved by using SCIM provided your IDP and service supports it. Ironically even though SCIM is a protocol, the implementations vary across different IDP,s.

A second common issue is ability of changing the email addresses in AD, this breaks the mapping cause most of the times email is primary identifier.

</comment><comment><USER10> The only way I could see you doing this is by automatically scanning an employee's email archive and producing a list of services.

I do not see how introducing yet another standard solves the problem. SAML and similar standards already solve this problem; just many SaaS do not support SAML.

</comment><comment><USER11> It sounds like something like Okta is what you're looking for to help with provisioning, authentication and deprovisioning

</comment><comment><USER12> BetterCloud does something like this.</comment>