Show HN: TaskBotJS – TypeScript and JavaScript background job processing - <AUTHOR> https://github.com/eropple/taskbotjs/ <comment><AUTHOR> Whee! My first Show HN. I've only been here, like, seven years and all.

But, yeah, I've been tooling away on TaskBotJS in my metaphorical garage for a while. I've found Kue and Bull really frustrating to use (no shade intended; they feel like they made a lot more sense in a pre-ES6 universe?) and `node- resque`, while scratching a little more of that itch, just made me miss the comfortable guardrails of Ruby offline job queues. So I made one.

As my day job is devops and devops accessories, making it easy to run and administer TaskBotJS was a big priority for me and I've tried to get the best of both worlds: mostly turn-key to run in simpler cases but less prescriptive and more pluggable at scale. TaskBotJS is pretty extensible and supports job middleware and event listeners; I have a Sentry plugin coming in the near future as an example (and also 'cause I like Sentry).

I also like to write documentation[0]. While it's not yet complete, what's there is pretty exhaustive and I try to explain my thinking as well as just "what it does"; capturing the whys is as important as the whats, to me, to better foster conversation around the project and to make for more constructive issues when systemic, design-focused concerns are raised.

It's running in at least two production environments (only one of which is mine; I dogfood but I wouldn't have released it as a "you should check this out" version if somebody else wasn't checking me) and is being rolled out to at least one more in the near-ish future.

Thanks for taking a peek, and I'd love to hear any actionable feedback that comes to mind.

[0] - [https://github.com/eropple/taskbotjs/wiki](https://github.com/eropple/taskbotjs/wiki)

<comment><USER3> sorry i don't get it. why would somebody use this over a rabbitmq.

<comment><USER4> I think it is a legit question... I poked a little around and I did not find an answer.

</comment></comment></comment><comment><USER5> After a few minutes I gave up on evaluating this tool. It looks interesting but there's no "hello world" or even a simple use-case explanation in the first few pages of docs. Couple that with the no-warning switching between JS & TS in the code examples, and it is too tedious to try to figure out.

I have no objections to TS, but if this is a "JS" library for consumption in JS, please write your example jobs in JS please! Don't make me try to translate TS to JS in my head–I don't care how easy you might consider it to be, I don't want to do it.

I like the idea and will revisit when docs improve. I recommend user testing your docs: put an unfamiliar JS dev in front of your README, set a timer for ~7 minutes, and when the timer dings ask if they think they'll use your library. If they're still confused after that time, your intro docs are not clear enough. That may seem like a small amount of time but there are 10,000 JS libs out there, 7 minutes is far more time than I can devote to developing an initial impression of each one.

<comment><AUTHOR> Thanks for checking it out and for the feedback! Agreed on intro docs--that's a big reason it's "0.9.0" instead of "1.0". ;) "1.0", to me, is "the API is stable" (though the current API should be) and "it's documented to the best of my ability for novice users." The current userbase is a little more willing to dig, as it's mostly friends and colleagues, and that'll change as it moves towards 1.0.

I'll look into a JS-based example job; I have never found the translation particularly onerous, but horses for courses, I guess. I'm not switching between JS and TS in the documentation, though, save for the definition of a configuration file--it's pretty silly, IMO, to transpile a config file, especially when you get 99% of the way there through something like VSCode's IntelliSense. I didn't make clear enough the distinction, apparently, but I didn't expect it to be a stumbling block. Lessons learned.

</comment></comment><comment><USER6> How about a language agnostic background processing framework with clients in multiple languages, including Javascript?

[https://github.com/contribsys/faktory](https://github.com/contribsys/faktory)

<comment><AUTHOR> I like Mike a lot and I think Sidekiq is _awesome_ \--not having it in Node was largely why I wrote TaskBotJS. And I evaluated Faktory before writing it, because hey, this has been a lot of work, buy instead of build when you can!

As it stands, and things could change in the future, but I think a dedicated ecosystem-specific system is a better bet for the 90th, 95th, and probably 98th percentile of products and projects. I don't feel that centralizing background processes makes a lot of sense in a service-oriented architecture and that takes away a lot of Faktory's benefits of agnosticism. The embedded use of RocksDB also makes me itchy; Redis--while by no means perfect--is, IMO, more understood as a backing store, and it's separate from the runner itself. (TaskBotJS is also likely to eventually grow a Postgres backend. I've also got a good chunk of one written using SQS/DynamoDB, but that's further out for sure.)

All that said: Mike is crazy smart and I wouldn't begrudge anybody who wanted to use Faktory. When I write Ruby, I will continue to use Sidekiq. ;)

</comment></comment><comment><USER7> Very nice job! I'll definitely be trying this out in a personal project.

How's your experience been with TypeScript and oao? I've got a very large monorepo (using yarn workspaces) of TypeScript modules and it's been sort of a PITA. For instance, a typical yarn install will unnecessarily duplicate some dependencies across packages causing tsc to complain about duplicate identifiers. Running yarn --check-files fixes this, but it's still annoying. Also, following symbols with yarn workspaces is sometimes annoying since linked packages will use "main" and "types" fields in the package.json, thus following a symbol takes you to the generated type definition. I have a generated tsconfig.json that sets paths to their appropriate package paths to fix that. Again annoying.

<comment><AUTHOR> Thanks for the kind words. =) And, good question! I...probably use `oao` wrong, to be honest, or at least not as fully as it could be; my main use of it is to power a workspace-wide `yarn watch`. I have had a lot of problems trying to use its more advanced feature set and, tbh, if you look in `packaging` I am certain there are functions in there that `oao` totally does, especially around version bumping.

100% agreed with regards to yarn workspaces and linked packages. Symbol navigation is Not Great, and I also have to be careful using VSCode's quick import feature because sometimes it will just go wild and import "../../../../dist/client/foo" or whatever instead of using the package import. Once done correctly in a given file it's fine, though.

But converting TaskBotJS to TypeScript was really easy, and it catches a lot of issues, so I think the future's bright on the tooling front. I found TypeScript unusable, like, six months ago. I wrote a couple React projects and a fairly large React Native app[0] in ES6 (which I Do Not Recommend Doing...ow) because getting TypeScript working was just way too much work. Still kind of is with regards to React, to be honest; the web panel for TaskBotJS is just a create-react-app app because of it. But--progress.

[0]: [https://bit.ly/buymyapp](https://bit.ly/buymyapp)

</comment></comment><comment><USER8> I don't get it. I'm primarily a Python developer, so this looks like Celery to me. I've never understood why I'd want to tie myself to a particular library, rather than encode messages to an agreed encoding, then write workers in the technology most appropriate for the job?

</comment><comment><USER9> Does it run the tasks in the same or a different process? Why is redis necessary? Can it pick up where it left off if the server restarts? Why so much boilerplate (still) for simple use cases?

</comment><comment><USER10> I love seeing projects with a docker-compose.yml, so I can check it out quickly. However, yours only spins up redis - wouldn't it make sense to spin up TaskBotJS in a separate container? Yes, I know the proper answer is "PRs accepted", but just curious about the rationale.

<comment><AUTHOR> Hey, awesome feedback! The root docker-compose file is for development; it stands up Redis and the example config files, unless overridden, look for a Redis on the port specified in that file.

TaskBotJS does have an integration environment, though. Take a look in `packaging`. When I do a release I use the functionality in there to spin up `@taskbotjs/example` and the associated functionality. On that it does some very basic smoke tests to make sure nothing's obviously broken, but it spins up a set of producers, consumers, and the webapi/web panel.

If you run `NO_CLEANUP=1 ./packaging/build-and-integrate.bash`, it'll stand up the integration environment and you can play around with an active producer/consumer/web panel system.

I should definitely break that out and make it easier to play with right off the bat. Thanks for the idea.

<comment><USER10> I'd definitely try to go with docker-compose - it's nice to be able to try something out without having to install it in your dev environment. Perhaps example/docker-compose.yml.

<comment><AUTHOR> That's a really good point, and I can still use it during packaging. Will see what I can do. Thanks.

</comment></comment></comment></comment><comment><USER11> Trying to solve something like this always puzzled me: how to make job publishing transactional? There are no simple way to do transaction across redis and, say, postgres. If you wish to make thing reliable, you will have to put job to an sql first and then pull (or subscribe) from database to a worker queue.

Am i right or there are another option?

<comment><USER12> Yes, this is a major problem most people simply ignore and deal with in a one- off manner when it fails. The only way to do this safely that is practical is to create a jobs table which is written to in a transaction with the other writes. Another process reads the table and writes the job data into the queueing system.

For example, the process starts up, reads the highest ID it has written from Redis, then starts reading the table for jobs with IDs higher than that. The job itself is written to Redis in a transaction along with the ID from the database. Ignoring the fact that Redis can lose data during failover, you're pretty safe and duplicates will be minimal. You can add some idempotency on top if desired.

Attempting to write to both a queue system and a relational database at the same time _will fail_ at some point and you will be left to pick up the pieces of inconsistent state.

If the write to the queue is to send an email, maybe you don't care care. If it is to calculate a very important value that happens to be expensive to compute and needs to be done outside the request... good luck.

<comment><AUTHOR> I think calling it a "major problem" is overblown for the 90/95/98th percentile use cases. It certainly exists, and given a long enough time horizon it _will_ happen, but I have never worked on a system where datastore non-transactionality has caused issues that need to be resolved with more than, as you say, a one-off fix.

I tend to implement what you suggest with _absolutely critical_ jobs, but the level of juggling it requires is a little much for, again, the 90/95/98th percentile jobs. Few things are so critical that you can only do them once _and_ don't have significant visibility into them that retry logic can't bail you out--though, I hasten to note, I do explicitly advise the use of idempotent job logic with this or any other task-running solution.

<comment><USER12> 99.99% of the time at small scale it will work fine. That is completely accurate. But random network hiccups are so common in today's cloud environments that, even at medium scale, a few minutes of partition between your app server and Redis, while still allowing access to the database, will result in a huge number of dropped jobs.

The fix is so tiny I don't see why it would be an issue for a team to implement. It uses one new database table and a long lived process for writing to Redis, which could be just running a script on the same node as Redis polling the database. The rest of the code can be the same outside of that.

<comment><AUTHOR> Yeah, that's a fair criticism. For me, why I'm not comfortable with that approach for everything is that--if I'm understanding you correctly--means storing a lot of state with the job (state which can then go stale).

<comment><USER12> That would depend on the application's needs, but isn't a part of the approach itself. It is only guaranteeing delivery of the job to a worker at some point in the future, on average half the duration of the polling interval reading from the database. You can still use the strategy of only encoding object IDs in the job to avoid stale data.

If the worker can't reach the database, the job will just fail as it would at any other time and retry later.

This is changing an at-most once delivery of the job into the queue into at- least once. Combine with idempotency you can get "exactly once semantics."

</comment></comment></comment></comment></comment></comment><comment><USER13> Not criticizing, but just curious what was the reasoning behind picking Redis rather than something like sqlite, which would keep the application a little bit more self-contained so to speak?

<comment><USER14> I am in no way affiliated with this project, but my assumption is that since this uses workers(separate servers) to process the background jobs - <USER2> could be on completely separate machines. If you use redis for job storage, they can all communicate without having to talk back to the master server.

<comment><USER15> You can also do that with sqlite: have workers query for data and lock records when they are working on it. (people have been implementing job queues in SQL based environments for decades). The point of using sqlite is that it's not something you need to install and manage separately, or something that acts as a broker. (sqlite would be very slow as the workers need to poll for jobs).

<comment><AUTHOR> Polling is not the worst thing in the world; when using reliable queueing and BRPOPLPUSH TaskBotJS does poll, and Redis handles it okay. SQLite is more just emphatically Not A Good Network Database, and the developers themselves say so.

</comment></comment></comment></comment><comment><USER16> Not a fan of this sort of "open core" offering, and it's heavy on the marketing. Recurring jobs are an "Enterprise" feature? Hard pass. That's a core feature of Celery and readily available for Resqueue, latter of which seems to be your project inspiration? Pro/Enterprise should be tool offerings that depend on your hosting and support. Arbitrary feature gating isn't encouraging for a project like this.

<comment><AUTHOR> Celery requires the system administrator to ensure that there's only a single scheduler in the cluster at a time; the documentation specifically calls that out. This additional administrative load is not a requirement of TaskBotJS. Because of that recurring jobs requires underlying, distributed-environment infrastructural features I'm not prepared to open source right now. Past that? TaskBotJS is LGPL. If you'd like to write and maintain your own cron-type scheduler, I would be happy to link to it as a plugin, and you can own the difficulty of maintaining it when users come yelling. ;)

That last bit is important, IMO. The best way to keep software maintained is to create a financial incentive for its maintenance. The pro/enterprise feature set is borne out of actual use, and to signal the very strong intent to maintain this as unsurprising software that will be there and be supported for the long haul.

<comment><USER16> > Because of that recurring jobs requires underlying, distributed-environment > infrastructural features I'm not prepared to open source right now.

I don't see how that follows. Dedicating a single node is trivial. If you're talking about redundancy, nobody's going to steal your leader election code. That's why the feature gating feels arbitrary.

<comment><AUTHOR> Sorry, maybe I was unclear. I don't want to have to support it in the open- source version ("I tried to run it on three DigitalOcean droplets and I didn't read the instructions and it's all sad" is just a time sink) and I do want feature incentives, in addition to support guarantees, to encourage corporate users to support the project.

I want to align the financial incentives to maintain this software; features are part of how that can be done. At commercial scales, companies do need support. But support is hard to quantify by itself and feature gates provide additional arguments for buying the software and helping to ensure that the project survives and is maintained.

</comment></comment></comment></comment><comment><USER16> Off topic, is it normal now to include a "Code of Conduct" in new, single- contributor projects? I thought it was more of a reactive thing.

<comment><AUTHOR> I don't know what's "normal", but I believe very strongly in specifying acceptable behaviors from the jump when trying to build a community.

Thanks for taking a look.

<comment><USER17> @eropple Sort of a nitpick, but you might want to replace "[INSERT EMAIL ADDRESS]" with your actual email address. :-)

[https://github.com/eropple/taskbotjs/blob/master/CODE-OF- CON...](https://github.com/eropple/taskbotjs/blob/master/CODE-OF-CONDUCT.md)

<comment><AUTHOR> I just hit my forehead hard enough to wake the dog.

Thanks. :)

</comment></comment></comment></comment><comment><USER18> Great logo!

</comment><comment><USER19> This is great!

</comment><comment><USER20> How can "The best TypeScript and JavaScript background job processing on the planet" only have 8 stars on GH ? :o

<comment><USER21> How can you measure a project by the amount of github stars?

<comment><USER22> I think given the size of the potential user base for such a thing that a low number like 8 would be a contrary indicator of the claims being made.

But in general I'd agree that stars can be a deceptive metric.

<comment><AUTHOR> I mean...there are 102 as of this writing.

The project has not, I stress, changed in the interim. ;)</comment></comment></comment></comment>


ShamWow: A jerk you'll want to buy rags from. - <AUTHOR> http://www.slate.com/id/2190658 <comment><USER2> I think I was too busy trying to figure out who in their right mind would try to sell something named Sham-anything to actually pay attention to the pitch.

I just can't shake the feeling that the name is intentional and a big joke on the consumers.

</comment><comment><USER3> The ad looked fake to me. There is no way it soaked up all that cola that quickly; I think he preloaded the rag with cola.

A google search reveals that these things don't work at all.

Sometimes I think I'm too cynical ... but I haven't found this to ever be the case ;)

<comment><USER4> The trick is the almost-invisible edit as they zoom into the underside view of the cola-stained rug.

<comment><USER3> Exactly.

</comment></comment></comment><comment><USER5> When Seth Godin talks about how companies should be remarkable, he usually focuses on industrial sectors that are currently en vogue (technology), or boutique premium services/goods. He excludes about 95% of businesses, which sell mundane goods like vacuum cleaners.

I guess guys like this are the answer to how you should go about selling vacuums, rags, and industrial pipe fittings?

<comment><USER6> Dyson, instead of crazy late night marketing, just plain built a technologically better vacuum and marketed it as a Ferrari of vacuums. There's plenty of ways to sell household goods without resorting to the infomercial style of ads.

<comment><USER7> I briefly had a job repairing vacuum cleaners years ago.

Dyson vacuums are seriously overpriced pieces of junk, but few people realize it because they don't see them broken in the same ways all the time. A few notable points on their really shoddy engineering:

\- The power cord was not a heavy enough gauge for the current the motor was pulling. I was amazed to find that the cord itself got hot -- not warm, but hot -- while running the vacuum. This happened on every one I worked on, so it wasn't a random bad motor.

\- Instead of a plain ol' belt-driven brush, Dysons use a belt-driven brush with a NEW! FANCY! CLUTCH! at the other end. To save you the trouble of ever having to replace a two-dollar belt, they added in an 80-dollar part that cost an hours' technician labor to replace when it (inevitably) failed.

\- Everything was plastic. Notably, the plastic rotating brush rode directly on a set of plastic rails in the front housing piece. Why is this bad? Well, it works OK so long as everything is perfectly aligned, but if for some reason the brush catches something and comes out of alignment while spinning, then it eats right through the plastic carriage. The replacement cost for a new front nose piece, plus brush, including labor, was around two hundred bucks if I remember right.

I will grant the Dyson uses a clever filter system that I wish more vacuums used. For example, its motor is guarded by a spongy HEPA filter which prevents it from falling victim to all the fine-grained dust that destroys the bearings in everyone else's vacuums.

The downside is, we had more than one customer that didn't wait long enough before reinstalling the sponge that they had just rinsed, and so completely destroyed their motor. Dyson specifically refuses to cover that particular error in their warranty.

...And that's more than you ever wanted to know about Dyson vacuums. :-)

<comment><USER8> I'll add a quick rebut: my wife exclusively used Dyson vacuums in her housecleaning business. Sure they cost more, but they were so much faster than standard vacuums, (and still much cheaper than say the Hoover industrial vacs) that the cleaning crew could get out of a house and on to the next job that much quicker. On average they lasted about a year before needing to be replaced. That's a year of heavy daily use, being wrestled in and out of vehicles and used by people who didn't pay for them.

We use a Dyson Animal at home (2 large, shedding dogs and 2 cats) -- the only remaining one from the business and the thing is phenomenal!

</comment></comment></comment></comment><comment><USER9> ShomWow was the first commercial where I ever had to slap myself afterwards for even thinking about buying a product shown on TV. I even looked it up online because it looked far beyond "too good to be true" and off into "miraculous"...

<comment><USER10> I saw this ad on TV and had a similar response. (Didn't actually seriously consider buying it, but it's the first time I've ever been impressed by something on a late night infomercial.) I didn't realize so many others felt the same way. This guy must be really good.

</comment></comment><comment><USER11> He's a skinnier version of Billy Mays. They are both loaded (Mays almost unfathomably so, he drives around in a Rolls).

</comment><comment><USER12> must...not...produce...credit card...from...wallet</comment>


Concept for Browser running Java/C# programs in VM sandbox - Feedback wanted - <AUTHOR> http://i.imgur.com/tJsKeU9.png

<comment><USER2> The problem I see there is the resources necessary when you have multiple tabs open. If you are forking the web browser, it would make sense to provide a HAL as part of the sandbox and run in a different process.

<comment><AUTHOR> Yes, I think the VM overhead wouldn't be as big a deal as the programs themselves though. People would have to realize that applications are "heavyweight." Not sure if HAL would introduce security issues, the VM is to keep things as secure as possible.

<comment><USER2> HALs will always introduce security issues. I believe Microsoft Research has been working on that particular problem with Singularity, it would pay to take a look at what they did there.

</comment></comment></comment><comment><USER3> Isn't usual Java(not sure about C# model) sandbox enough?

<comment><AUTHOR> Java applets are either greatly limited in capability or have full access to the underlying system. This is circumventing the applet/plugin paradigm and allowing full Java programs without security being an issue, as they only have access to the virtual system.</comment></comment>


The time before Mathematica (2013) - <AUTHOR> http://blog.stephenwolfram.com/2013/06/there-was-a-time-before-mathematica/ <comment><USER2> I like Mathematica quite a bit (the Front End/Kernel makes a lot of sense), but I don't really like Wolfram after he left Physics. The way he downplays Reduce, Macsyma (Maxima), the pioneering work that was Veltman's Schoonschip and then FORM... He doesn't even mention the folks at Maple. Computer Algebra was a well established field way before Mathematica appeared in 1988[1]. He's smart and very good at selling his product, that's fine, and for a long time his company has had the resources to hire a lot of good people and you can tell/take advantage of it when using Mathematica. But honestly, I think we could do without.

Personally, I find more interesting David R. Stoutmeyer, who made the first CAS for microcomputers in the late 70s, muMath for CP/M, and then the tiny PICOMATH-80 for the TRS-80. He went on to write Derive, that was much loved in the early 90s, because it was very good and you could afford it while Mathematica has always been expensive and for some years (until version 2.2 really) you needed either a souped- up Macintosh or a workstation to run it. Then Texas Instruments hired him in order to develop the Derive-based TI-92/89 (Derive was written in Lisp, its version for those in C BTW) and ended up buying Soft Warehouse and shutting Derive for good... which is just sad and nobody cares.

I'd like to ask for some love for Reduce, now open sourced and hosted at SourceForge -not cool any more, but it lives there-. It still makes a few calculations easier than Mathematica.

[1] See for instance this very interesting review of the early Mathematica: [http://www.cs.berkeley.edu/~fateman/papers/mma.review.pdf](http://www.cs.berkeley.edu/~fateman/papers/mma.review.pdf)

<comment><USER3> He was much the same about his scientific work as I recall, it's standard Wolfram M.O. : discount, ignore, or attempt to outright claim credit for the fundamental work of others (preferably without mentioning them by name) while puffing up your own contributions.

It's an unfortunate and deep character flaw, but he still has made some interesting contributions that are worth evaluating on their own merits (neither as fundamental nor as impactful as he would suggest, typically)

<comment><USER4> I do not have a personal grouse against Wolfram, but it takes a level of self- importance to (re)name every product of your company after yourself, even if you might be coming up with some key ideas and the vision. Eg: Wolfram Alpha, Mathematica --> Wolfram Language, etc.

It seems wrong for him to take sole credit for what I'm guessing a talented and hard-working team at Mathematica has achieved together, over the years.

</comment></comment></comment><comment><USER5> Modesty is not his strong point, but if you've never played with Mathematica, have a play with it - the way it works is very interesting.

<comment><USER6> Mathematica / Wolfram Language I would describe as you take the idea of M-expressions from John Mccarthy's paper and program nearly every single Mathematical algorithm that you can think of.

For instance you can do these things without calling an external library or datasource:

Classify some data using the examples. Oh yea the text is included in the program or automatically downloaded. Also you don't have to choose a model for this classification step it just attempts to classify based on the preprogrammed models. Accept user input to classify the unknown. (Yea it has its own UI code).Deploy to the cloud (this is sort of in beta but it works). Export your notebook to latex / a slideshow once you have submitted your work to someone so you can explain it.

</comment></comment><comment><USER7> In the time before Mathematica, mathermatics was non-proprietary and open source.

<comment><USER8> No so in the case of Macsyma and Wolfram's own SMP ([https://en.wikipedia.org/wiki/Stephen_Wolfram#Symbolic_Manip...](https://en.wikipedia.org/wiki/Stephen_Wolfram#Symbolic_Manipulation_Program)): " _Wolfram led the development of the computer algebra system SMP (Symbolic Manipulation Program) in the Caltech physics department during 1979–1981. A dispute with the administration over the intellectual property rights regarding SMP—patents, copyright, and faculty involvement in commercial ventures—eventually caused him to resign from Caltech._

It's not infamous enough, but Symbolics managed to arrange to solely license Macsyma, as far as we could tell to keep it out of everyone else's hands. Wikipedia seems to be accurate in this section: [https://en.wikipedia.org/wiki/Macsyma#Commercialization](https://en.wikipedia.org/wiki/Macsyma#Commercialization) based on my communications with Danny Hillis after the sole licencing when I was working for LMI (which also was selling SMP), working for Gold Hill in 1984, and working for Joel Moses in the late '80s (he was indeed none too happy about how MIT had treated him WRT to Macsyma).

</comment></comment><comment><USER9> At this point, I'm pretty sure a list of Stephen Wolfram's favorite pie recipes would begin with a history of his childhood academic accomplishments. It's almost nauseating reading this crap.

</comment><comment><USER10> There's an invitation to solve a puzzle hidden in this text. Has it been solved yet?

<comment><USER11> I hope nobody solves it "just for fun" without a promise from Wolfram to free the decrypted SMP source code.</comment></comment>


Risk Management & Electronic Trading 101 - <AUTHOR> http://www.zerohedge.com/sites/default/files/CUNY_algo_2008.pdf

<comment><AUTHOR> I used to work at GS doing this stuff. It's like an algorithm on algorithm poker game among the big banks and hedge funds. Really fascinating. And really hard to regulate.</comment>


I Have an Idea - <AUTHOR> http://sproutlet.io/2011/10/09/i-have-an-idea/ <comment><USER2> Your team looks great! Just wondering, what's a typical quote you give for a project? I'm not looking to have anything built at the moment, but possibly in the future!

<comment><AUTHOR> Hi,

We have a standard rate per iteration, and a project MVP will usually be around 20 - 30k, depending on a number of factors. If you ever want to chat feel free to hit me up at 609.309.7089 x702.

-Jay</comment></comment>


Jerry Ting, Founder of Evisort, How to Transform the Legal Industry with AI - <AUTHOR> https://www.humainpodcast.com/jerryting-apple <comment><AUTHOR> Jerry Ting, Founder & CEO of Evisort, an AI-powered contract analytics platform that automates contract review and management, shares on the HumAIn Podcast the changes in the legal tech industry.

\- Jerry Ting is a Lawyer by background from Silicon Valley

\- Document Review can be automated in the Legal Tech industry

\- Corporate Law can be improved in-house with Artificial Intelligence

\- Evisort received its Series A funding by M12 and Vertex

\- Contract Law powered by AI can accelerate deals, close contracts, and improve automation

\- Vendor management can be improved with Evisort

\- Scanned contracts with AI and machine learning can improve workstreams with Salesforce, WorkDay and SAP

\- From Harvard Law School to Evisort, Jerry Ting is focused on practical ai that delivers value to law firms.

\- Jerry Ting is selected for Forbes 30 Under 30

\- An increase in verticalized AI applications will augment human jobs at work.</comment>


Show HN: BundleFoo - iPhone app bundles, delivered OTA - <AUTHOR> https://www.bundlefoo.com

<comment><USER2> That's pretty sweet. Its like a daily deals site meets the App Store. Any plans on doing iPad bundles?

<comment><AUTHOR> Thanks! Yes - we are going to do iPad bundles soon. Just wanted to lead with iPhone then add iPad support and different types of bundles.</comment></comment>


Ask HN: RESTful API Pagination Strategies - <AUTHOR> Hi HN,
I'm hoping to start a discussion on the topic of paging/pagination as there seems to a hole in most implementations that I'm only seeing addressed by some API's.
The example is pretty simple:
GET /some_resource/
Returns: 2,000 results (200 per page)
Loop 10 times to get all results(GET page=1; GET page=2, etc, etc...)
If any record is updated on page 1 while I'm on page 9 (just an example), I will miss it unless I go back and do a reconciliation.
Facebook's Graph API (https://developers.facebook.com/docs/graph-api/using-graph-api -> go to Cursor-based Pagination) tries to address this with a Cursor-based Pagination approach, where they lock a given data set to be within two hashed id's.  I don't fully grok the implementation of this strategy though at first glance - [it] seems vast.
Stripe's API tries to do the same https://stripe.com/docs/api#pagination .  I don't work with Stripe's API but it appears they want you to specify an "object ID", which I'm guessing is some hashed id + timestamp.
 Then if a record was updated on page 1 (per my example above), a new hashed ID is generated and would likely be returned on a subsequent page (say page 11 in my example above).
I might be interpreting those implementations incorrectly (by all means correct me here) but I would love to hear from some HN members who have dealt with this issue.
Immediate questions:
- Is there an API out there that solves this really well? - Any further reading folks here might recommend? <comment><USER2> We follow the github approach and put it all in the headers:

        < HTTP/1.1 200 OK
        * Server nginx/1.9.11 is not blacklisted
        < Server: nginx/1.9.11
        < Date: Thu, 10 Mar 2016 03:19:48 GMT
        < Content-Type: application/json
        < Content-Length: 247620
        < Connection: keep-alive
        < Count: 120
        < X-Frame-Options: SAMEORIGIN
        < Vary: Cookie
        < Link: <https://xxx.com/api/someresource/?limit=50&offset=50; rel="next">
        < Allow: GET, POST, HEAD, OPTIONS
        < X-Server: zzz
        < X-Frame-Options: SAMEORIGIN
        <

</comment><comment><USER3> Twitter has some good points on the problem with paging and uses a "max_id" & "since_id" instead.

[https://dev.twitter.com/rest/public/timelines](https://dev.twitter.com/rest/public/timelines)

</comment><comment><USER4> You don't need to know of changes unless the user is on that page.

You can use websockets to broadcast/listen for changed data and updated the DOM accordingly (if you're on the web).

</comment><comment><USER5> [http://jsonapi.org/format/#fetching- pagination](http://jsonapi.org/format/#fetching-pagination)</comment>


Show HN: Android Password Store - <AUTHOR> https://github.com/zeapo/Android-Password-Store

<comment><AUTHOR> That is my first android application ever. I am not a java guru either.

Suggestions, issues, and pull requests are welcome.</comment>


The Quantum Leap into Computing and Communication: A Chinese Perspective - <AUTHOR> http://www.eurasiareview.com/05042015-the-quantum-leap-into-computing-and-communication-a-chinese-perspective-analysis/ <comment><USER2> Its very interesting the see so many governments back quantum technologies. It seems the risk of being left behind is far worse than the cost of a few research grants, which will if all else fails produce decent cross-diciplinary scientists for their countries.

The benefits are currently distant and esoteric, I think to get into this field and enjoy it you should simply be interested creating new, never seen before quantum systems and doing physics.</comment>


The NASA Collection - <AUTHOR> https://www.levelframes.com/collections/the-nasa-collection

<comment><USER2> This is cool but does NASA get a licensing fee? If not then I'm thinking U.S. taxpayers should be getting the other 75% of the profit. The reason I ask is that I am doing a similar thing in my home except that the photographs I'm using don't come from the government - they come from commercial photographers and I'm pretty sure if I sold them in this manner there wouldn't be any profit left for me. If I'm missing something please set me straight.

<comment><USER3> Any of those tax payers are free to print them, frame them and sell them. So no they should not be getting the other 75% of the profit if they don't choose to do the work.

<comment><USER2> Agreed.

</comment></comment></comment><comment><USER4> This is kind of light on the 'how'. Is it possible to do it with other images? If so, what are the minimum specs needed? I imagine there are many great photos in the NASA archives that people would love to get framed.

<comment><AUTHOR> Good point. If you want to have other NASA photos printed and framed, we have a great tool to do this: [https://www.levelframes.com/photos](https://www.levelframes.com/photos)

Just upload the photo and we will provide you with a suitable size range to choose from for a great print quality (based on resolution of your upload). We then print, frame and ship it to your door in a week.</comment></comment>


Introduction to Angular JS [video] - <AUTHOR> http://www.youtube.com/watch?v=8ILQOFAgaXE

<comment><USER2> Source code also available on github: <https://github.com/davemo/intro-to- angularjs>

Topics covered:

angular.module

angular.controller

angular.directive

angular.$routeProvider

angular.factory

ng-app, ng-model, ng-submit, ng-click

$scope, inheritance, and its relationship with the DOM

contrasting some of angular w/ jQuery/Backbone</comment>


See what your Chrome apps and extensions have been up to - <AUTHOR> http://blog.chromium.org/2014/06/see-what-your-apps-extensions-have-been.html

<comment><USER2> Wow, it seems I can no longer install Chromium extensions without logging in with Google. What a crappy decision! I just spent half an hour trying to do just that.</comment>


How an "investor" from Silicon Valley almost kills our company - <AUTHOR> https://medium.com/@javier_dev/how-an-investor-from-silicon-valley-almost-kills-our-company-1f4348407e65

<comment><USER2> Ha Ha, we dodged the bullet :)

We at RailsFactory first contacted in December 2012.

Been to the same apartment, same cat, got the walmart reference, and some Jonathan, for the same project.

Did a code review, estimated a API for mobile.

But having operated our business for longer we did some background checks. Some of the story checked out while others did not.

He was not willing to sign a contract and make the advance payment we needed to start the project.

He suggested he can help us by referring us projects with his influence in valley and SF, but we had to pay X thousand dollars per month .

Also he was going for vacation to India.

I requested him to visit our India development centre as Sales & Contracting was not my speciality. He made a condition as he was doing us a favor, we need to host him, so we ended paying for him to visit chennai(to and fro flight tickets from Delhi to Chennai and for the luxury hotel stay).

Feedback I got from India team, we cannot manage him or trust him for the sales end, even development head was sceptical for working with him for amount of profanity he used in his general speech.

I did meet him couple of more times.

Then I was aware of the apartment sale discussions. Then we backed off fully in March 2013.

<comment><USER3> Wow, this is interesting.

Do you have an email? It would be interesting to talk about this.

By the way, how did you find this post? Was it just a random coincide?

<comment><USER2> My colleague from chennai mailed it to me. senthil at RailsFactory dot com

</comment></comment></comment><comment><USER4> Thank you for your post. This behaviour is surprisingly common (something similar albeit less expensive happened to me twice just in 2014, although in both cases I was stupid enough to do work before the contract was signed).

On the upside, nothing like enlightening a friend doing a reference check.

<comment><USER3> Author of the post here.

Yes, you're right however, as I explained in the post, it was a friend of ours who introduced us to this guy. Our friend would haver never foreseen this outcome.

In other words, all his references seemed to be ok.

</comment></comment><comment><USER5> Thanks for your post. We should try to get this out to the major news outlets too. This guy is so f*cked up...why is it that rich people are always so stingy

</comment><comment><USER6> Lacking knowledge . And Looser people they believe as if they know everything.Eod he is a zero person . GO AND DIE SOMEWHERE.

</comment><comment><USER5> You guys deserve your money

</comment><comment><USER5> fuck i hate this investor guy</comment>


Programming languages that are actively developed on GitHub - <AUTHOR> https://github.com/showcases/programming-languages <comment><USER2> Interesting to note that Julia comes in at #9 on the list, ahead of Scala, Clojure, and Erlang. I still think it's the most underrated programming language of the decade and hope that its usage continues to grow. I know it's touted as a language for numerical computing and scientific research, but I believe it would make a great general purpose language, perhaps even better than Python.

Other than a few minor nitpicks, Julia is genuinely a joy to program in, and the depth of its feature goes very far (multiple dispatch, homoiconicity, genuine macros, sophisticated type system, runtime compilation via LLVM, clean interfacing with C code). I can't say the same for other languages. You can tell the language was _designed_ and not cobbled together in an ad hoc fashion.

<comment><USER3> Does it still not have a decent charting library in the stdlib? I look at it every now and then (always looking for a good successor language for Python) and last I recall you had to use MatPlotLib? Is that accurate? This is stupidly simple in Matlab and should be here as well.

<comment><USER2> "Other than a few minor nitpicks"

That would be a nope. Gadfly doesn't meet my needs and seems to have stalled in development, so I use Matplotlib via PyPlot, but Matplotlib is a bit maddening to work with. I heavily considered attempting my own plotting library during grad school but couldn't find the time for it :/

(Although I will say that Convex.jl makes up for all the pain of not having a good plotting library...)

<comment><USER3> Thanks for the reply. I agree that Matplotlib is too complex. I'd abandon Python today if Julia had simple charting in stdlib, but practically nothing does outside .NET (sadly, I'm not a fan).

</comment></comment></comment></comment><comment><USER4> Which of these projects has a truly open development process that takes place in public and on Github?

Are most (or some) of these developed internally by whichever enterprise is behind the language where developers at those companies "bake" commits and then push them up after going through an internal code review process?

<comment><USER5> Rust is one that's developed in the open. Commits to Rust's master branch must be done through pull requests on Github. All PRs must be approved and reviewed before being merged, and the approver cannot be the same person who submitted the PR. Furthermore, major changes to the language must undergo an RFC process, which is also coordinated via a Github repo: [https://github.com/rust-lang/rfcs/](https://github.com/rust-lang/rfcs/) .

<comment><USER6> >Commits to Rust's master branch must be done through pull requests on Github. All PRs must be approved and reviewed before being merged, and the approver cannot be the same person who submitted the PR.

Any company that puts half an effort into open washing will follow these same procedures, so they aren't safe indicators that the real decisions aren't made behind closed doors ahead of time.

Paying close attention to things like the rfc process and approval process for commit rights and whatnot usually tell the real story.

</comment></comment></comment><comment><USER7> In the Top 10 there are only two languages which are not self-hosted. Swift with C++ and PHP with C.

I know the reasoning for Swift being that it's just not practical at this point reimplementing everything in Swift, but looking at the others it seems to be the norm to self-host your language at some point at least. Is there a reason for this? Is it just a rite of passage or do the maintainers obviously enjoy using the language itself as well?

Some languages chose to go this route right from the start (see Crystal for example), others might (hopefully) pick this up later (I'd love for Swift to be). Does anyone have any insight on this?

<comment><USER8> > In the Top 10 there are only two languages which are not self-hosted.

I don't think that is true. Ruby is written in C, Elixir is built on Erlang and Clojure is built-on Java. In fact the only two I know for sure that are fully self-hosted are Crystal and Julia.

<comment><USER9> Elixir has a little bit of Erlang in the compiler but at this point it would be fairly trivial to replace it with pure elixir, and most of the compiler is elixir already. However, Elixir does compile down to the EVM/BEAM (Erlang Virtual Machine) without using Erlang as a go-through. I'd argue that Elixir is 'mostly self-hosted'.

<comment><USER10> Actually the Elixir compiler does NOT compile directly down to the BEAM, it generates Erlang AST which is then passed into the Erlang compiler which then generates the BEAM code. So most of the compiler is in Erlang. It also uses a significant amount of the Erlang libraries as a base for its own libraries. So calling it 'mostly self-hosted' is stretching a bit.

</comment></comment></comment></comment><comment><USER11> Ruby's main repository is on a subversion server at svn.ruby-lang.or and GitHub is a mirror. See [https://www.ruby-lang.org/en/community/ruby- core/](https://www.ruby-lang.org/en/community/ruby-core/)

The wiki and the issues are also lacking from GitHub because they are on a Redmine server at [https://bugs.ruby-lang.org/](https://bugs.ruby-lang.org/)

GitHub was written in Ruby (and Rails) so the issue tracker already existed and they felt it wasn't worth migrating it. I can understand why they don't feel like hosting all of their knowledge base on an external server when their one works well and their main repository uses a different technology.

I don't understand why they're still on subversion. Maybe some custom build tools they don't want to migrate to git?

<comment><USER12> The core team indicated they quite like the sequential numbering that SVN gives them. I'm considering building it into GitLab as an option if they would use it to host ruby :)

<comment><USER13> Inspired by Mercurial, we built such functionality for GIT backend in RhodeCode. So the numeric identifiers are used now for all 3 backends we support. Kallithea has it also implemented for GIT.

I personally never like the meaningless hashes. Those numbers act as good identifier of project size and progress. It quickly shows what kind of ranges we're taking when doing a compare, or simply looking at files and seeing those numbers.

It gives a lot of context. Just look how much more useful information a compare shows r1808:39334bf35fdf...r1819:3e8df3a82397 vs 39334bf35fdf...3e8df3a82397

<comment><USER12> Cool! How do you deal with the issues raised in [https://news.ycombinator.com/item?id=13310271](https://news.ycombinator.com/item?id=13310271) ?

</comment></comment></comment></comment><comment><USER14> FWIW I recently got Lua up onto github, though development does _not_ happen on github. [https://github.com/lua/lua](https://github.com/lua/lua)

See [http://daurnimator.com/post/153864402074/githubcomlua](http://daurnimator.com/post/153864402074/githubcomlua) for more info

<comment><USER15> Also, Moonscript which compiles to Lua is developed on GitHub.

[https://github.com/leafo/moonscript](https://github.com/leafo/moonscript)

</comment></comment><comment><USER16> Go is not developed on github. It is mirrored to github.

<comment><USER17> Ditto for Perl - [https://github.com/Perl/perl5](https://github.com/Perl/perl5)

</comment></comment><comment><USER18> Haxe was so promising but it remains largely ignored by the community.

[https://www.google.com/trends/explore?date=all&q=%2Fm%2F0dbj...](https://www.google.com/trends/explore?date=all&q=%2Fm%2F0dbjtf)

<comment><USER19> I'd love to know why haxe never caught on mainstream and what it's primary drawbacks are.

<comment><USER20> When I first learned about and took a look at haxe, there was no good documentation.

Granted, this was six years ago, so it's probably better now.

<comment><USER21> It's better now: [https://haxe.org/manual/introduction.html](https://haxe.org/manual/introduction.html)

It can still be improved, but it's miles better than it was years ago.

</comment></comment></comment></comment><comment><USER22> Is CoffeScript still used much? I used it a bit a few years back when I was more interested in webdev and I liked it a lot, but I haven't really heard anything about it for a while. The only CoffeScript code I've seen lately is when I looked into finding the cause of a bug in a package for Atom several months backend back; I don't think I know of anything besides the Atom ecosystem that uses it nowadays, although I might just not be aware of other projects using it.

<comment><USER23> It remains very popular amongst Ruby/Rails users, presumably due to less switching overhead between Ruby and CoffeeScript vs JavaScript.

ES6 has provided a lot of the features that people were hoping for in JS, and CoffeeScript doesn't seem to be worth the effort transpiling from anymore. It used to be the game in town for "better" JS, but TypeScript seems to have taken that position firmly.

<comment><USER11> CoffeScript is endorsed by DHH and so it's more of a first class citizen than JavaScript in Rails. However it's not something you have to use. I never really liked using it and I easily managed to keep using JavaScript in all these years since Rails 3.1. I hope it's going to the deprecation bin soon but I believe that Basecamp is using it a lot. DHH won't have added it to Rails if that was not the case.

</comment></comment></comment><comment><USER24> They forgot to include JavaScript which is at [https://github.com/tc39/ecma262](https://github.com/tc39/ecma262)

</comment><comment><USER25> Golo [1][2] caught my eye given its French provenance -- they usually have a fresh/interesting perspective in engineering.

[1]: [http://golo-lang.org/](http://golo-lang.org/)

[2]: [https://www.eclipse.org/community/eclipse_newsletter/2016/oc...](https://www.eclipse.org/community/eclipse_newsletter/2016/october/article2.php)

<comment><USER3> OCaml is industrial strength, but golo looks just like a fun research project. I guess OCaml started that way though.

</comment></comment><comment><USER26> Missing: Imba, with 1,750 stars. Can't do a PR because stuck on an iPad right now. [https://github.com/somebee/imba](https://github.com/somebee/imba)

</comment><comment><USER27> I'm surprised that Coffeescript is still actively developed. Either there are still lots of legacy code out there to work on or some people just really love the language.

<comment><USER28> My last full time job was coffeescript. I could take or leave most of it, but returning to C# for a hobby project has made me really miss the null soak ? operator.

I'm sure the craving will go away with a few more days of messing.

<comment><USER29> Rename it to "Null-conditional Operator" and you're good to go: [https://msdn.microsoft.com/en- us/library/dn986595.aspx?f=255...](https://msdn.microsoft.com/en- us/library/dn986595.aspx?f=255&MSPPError=-2147217396)

<comment><USER28> Hey that's awesome! Thank you. I normally shield my eyes from the fancy new C# things like PLINQ and others because my hobby projects tend to sit in the Unity3d ghetto. Really cool to know they adopted that though.

</comment></comment></comment></comment><comment><USER30> I've used Crystal a bit and like it a lot. It's a little rough around the edges, but I hope it gains more traction. It isn't just for Rubyists either.

</comment><comment><USER6> No offense, but this list is stupid in its current ordering if the order is meant to imply anything. I heavily use rust, python, and go and have not starred any of the repos because I have faith the current contributors and don't need to helicopter over current issues/PRs.

Stars are for following a project because you need to pay attention to breaking changes, bugs, and major feature releases. If you need to do that for a programming language, the language is immature, garbage, or both IMO.

Also, stars!=contributors, so an entire team of 1000 devs (!) could use github to fully develop a language and look worse off than many of these other examples that hardly use github at all.

<comment><USER31> GitHub has a distinction between 'Starring' and 'Watching' a repo.

A star is a far lesser commitment than you imply - it's a glorified browser bookmark / facebook-thumbs-up.

</comment></comment><comment><USER32> Typical node being ninja stealth. I guess not technically a language on it's own. [https://github.com/nodejs/node](https://github.com/nodejs/node)

<comment><USER33> Not quite the same but nix[0] and the nix expression language [1] is also missing from the list.

[0] [https://github.com/NixOS/nix](https://github.com/NixOS/nix) [1] [https://nixos.org/nix/manual/#ch-expression- language](https://nixos.org/nix/manual/#ch-expression-language)

<comment><USER32> Sure, why not. Give us a master list with all the things.

</comment></comment></comment><comment><USER34> Also missing: Ceylon - currently with 191 stars

[https://github.com/ceylon/ceylon](https://github.com/ceylon/ceylon)

<comment><USER35> It has a nice homepage and good examples but what would a language like this provide over something like Kotlin? Also, I had to dig down into the homepage to find out that it compiled down to JVM byte code.

<comment><USER36> Well, you could turn it around since Ceylon is older than Kotlin ;)

There's not a huge difference between the syntaxes, but IMHO Ceylon integrates better with the general JVM ecosystem. It has an excellent module system and works well with OSGi too. Ceylon + Vert.x is a powerful combo.

<comment><USER35> I should have done my research. I assumed since Kotlin has large support it has been around longer. Thanks!

<comment><USER36> I think Ceylon is about a year older, so it's not much. Both arose out of dissatisfaction with Java 7 and below. Whether Java 8 has done enough to stem that, idk. IMHO, nice though they are, there's not enough in the other languages to justify changing ... yet. Javac must be one of the most battle- hardened, mission-critical bits of code in existence.

</comment></comment></comment></comment></comment><comment><USER37> Wow Go has really gained traction. Coming from a Python, PHP, JavaScript background I have been contemplating learning Go or Elixir this year. I am drawn to Elixir because of the functional approach which is different than what I am used to.

<comment><USER38> I have very similar background after playing with both decided to focus on Elixir very pleasant language and all the power of BEAM/OTP.

<comment><USER37> Good to hear. I am looking forwarding to diving into it.

</comment></comment></comment><comment><USER39> Missing Scheme Requests for Implementation (SRFI). We do standards work for the many Scheme implementations in public using 151 Github repos and counting. The home page is at srfi.schemers.org.

</comment><comment><USER40> Also soon, Python: [https://www.python.org/dev/peps/pep-0512/](https://www.python.org/dev/peps/pep-0512/)

</comment><comment><USER41> Idea for gh: It will be a nice feature categories or even tags for repos. I would like to see a similar list for databases for example, or even relational database, blog engines, etc.

<comment><USER42> these are curated lists, here's one for nosql: [https://github.com/showcases/nosql- databases](https://github.com/showcases/nosql-databases)

edit: big list of lists: [https://github.com/sindresorhus/awesome](https://github.com/sindresorhus/awesome)

</comment></comment><comment><USER43> Missing [https://github.com/lucee/lucee](https://github.com/lucee/lucee) (open source version of ColdFusion)

</comment><comment><USER44> Missing: Reason ([https://facebook.github.io/reason/](https://facebook.github.io/reason/))

<comment><USER35> It's kind of an ocaml wrapper though but good point.

</comment></comment><comment><USER45> Most of these languages are also bootstrapped!

I wonder when we'll see Swift written in Swift. And I wonder what kind of monstrosity a PHP written in PHP would look like.

<comment> ben-schaaf You can't practically bootstrap an interpreted language. That being said, I'd be intrigued to see PHP run using multiple nested interpreters from different language versions.

<comment><USER46> PyPy is Python implemented largely in Python, and it supposedly is faster than python's C implementation.

<comment><USER47> Depends on what you define as interpreter, as RPython, the language that PyPy uses, actually has a VirtualMachine, turning PyPy more into a bytecode interpreted language... Which some people argue isn't a straight interpreted language.

</comment></comment></comment></comment><comment><USER48> On a side note, I found it more useful that the Weekly/Monthly trending repositories are finally working again.

[https://github.com/trending?since=monthly](https://github.com/trending?since=monthly)

[https://github.com/trending?since=weekly](https://github.com/trending?since=weekly)

</comment><comment><USER49> Nim is very underrated. It's among the fastest, has a python-like syntax and can compile to C, JavaScript and other languages.

</comment><comment><USER50> Some of these languages (ponyc) are still...prototypes. Yeah you can get them working for a limited set of "working" and with very specific setup->configurations. If every language included a Docker or VM with it already set up for some level of demo, I think a rate for adoption/learning them would uptick.

<comment><USER47> I've used Pony in production. Not a language I would describe as just a prototype, when the compiler is almost as advanced as Rust's.

As to the ease of compiling it... I've always compiled it from source, to track some bleeding-edge features, and compiling ponyc is a breeze.

</comment></comment><comment><USER51> Swift gets a lot of traction, good to see that. I hope they manage to get the ABI and core language features stable in the next release. Updating a large project always makes me a bit nervous and I'm tempted to blame problems on the migration even when it often turns out they don't.

<comment><USER52> The benefit of first class platform languages is that it doesn't matter how well devs like them.

Anyone that wishes to use the platform needs to either cope with it, or face the extra level of pain of development effort by not using tools supported by the OS vendor.

So with time at least Apple platforms will be a bit more safer, and enjoy an ML inspired language.

<comment><USER51> I program in a lot of languages that also have different styles (JavaScript, F#, C#, Objective-C, Python and PHP) and I find Swift pretty much ticking all the boxes that make it a nice language to me for the majority of tasks I like to do. I would probably use it also if I could pick other languages outside of Apple's choices.

So far from what I've tried F#, Swift and Python are my favorites depending on the task at hand. C# and F# are valid options for iOS and macOS development but I wouldn't take the extra complexity of another layer just to use a different language.

</comment></comment></comment><comment><USER53> One of the missing languages is Opa, which has more than 1k stars and has been on GitHub for years.

[https://github.com/mlstate/opalang](https://github.com/mlstate/opalang)

</comment><comment><USER54> C++: [https://github.com/cplusplus/draft](https://github.com/cplusplus/draft)

(maybe omitted because they were only listing reference implementations?)

</comment><comment><USER55> I dont think groovy should be on this list. It seems actively developed but is migrated to apache's archive and not apparently mirrored on github.

<comment><USER56> the page has been updated to point to the mirrored repo

</comment></comment><comment><USER57> Funny github doesn't recognise swift as an language, but shows it as c++. Same for PHP, that is shown as C.

Anyone know why ?

<comment><USER58> It's showing what language most of the implementation is in.

</comment></comment><comment><USER59> No ClojureScript, seriously?

</comment><comment><USER60> Missing Node.js which has 30k stars and 5.4k forks... Second to Swift.

[https://github.com/nodejs/node](https://github.com/nodejs/node)

<comment><USER61> Probably, because Node.js is a runtime environment for Javascript and not a programming language?

<comment><USER60> You probably may be right. ;-)

</comment></comment></comment><comment><USER62> There must be more. They forgot mine!

[https://github.com/jul/confined](https://github.com/jul/confined)

Intended use? A safe PHP and a safe container for remote execution of code.

Leaving your computer used by customers arbitrarily within bounded predictable resources making you less stressed and able to do capacity planning.

Lol. I am playing out of my league I hadn't spent much time on it and havent much perspective for valuing it :)

Much more a POC. But if I found a sponsor, I can finish it in 1 month :)

I still need to document the syntax of the FORTH I made, and create storage (~ vars and functions). But after that, my roadmap is handling the concept of integrity/units that will prove more efficient than typing.

Ex : if c is $/unit then comparing/adding it with something in €/l will abort.</comment>


An Honest Apology - <AUTHOR> http://shirls.me/post/41790389190/shirley-hornstein-no-more-lies

<comment><USER2> I don't want to stake this girl up, but honestly, she should produce something that anyone cares about or shut up and go away.

There's qualified people out there she basically stole from. Stole jobs that should have been theirs, stole attention that could have been directed to something legitimate...

You don't get to apologize for stuff like this and have anyone care, you only get to overcome it. So until she has something to show us, I'd prefer not see her around.

<comment><USER3> > Stole jobs that should have been theirs, stole attention that could have > been directed to something legitimate...

You really hit the nail on the head here. Her pathological addiction to lies deprived hard-working people of opportunities. And it's a blackhole situation – had those opportunities gone to legitimate people, they could have advanced.

Instead, by sucking up all this value, Hornstein destroyed it. Everything she touched had a taint to it. Because everything about her was built on lies, everything she took, everything she accomplished, went nowhere. Good things that could have grown people's businesses or careers instead evaporated forever.

What a poison.

<comment><USER4> Anything she accomplished went nowhere? One has to be complete fucking career whore to entertain that thought for a second, otherwise it's a non-sequitur; anything she accomplished was accomplished, _period_ , and the only loss you can complain about is that she can't stick it in her resume now, like someone else could have done. Hence career whore, and I know this is going to be killed or worse but I don't care. The fucking nerve of your post, really, to call a person a poison without a second thought. The irony of it, actually.

You have NO idea where she is going. Fucking up and learning from it gives you insights and even strengths you cannot have from not fucking up. Who knows, she might one day help people in similar situations, whatever.

 _had those opportunities gone to legitimate people, they could have advanced._

Right, and because of her, they are now stuck forever. Is that what you're arguing? Because it has to be either that, or that "any penny matters, time is money".. either way, this is a human talking about human stuff, what makes you think you even are competent to reply? You could have used the time you used to write that post to further your career, and now that moment evaporated forever. Better get hustling.

<comment><USER5> Thanks for your nice take on the situation, no "let's-stone-the-bitch-and- lynch-her" or any other holier-than-thou comments.

I had a discussion just some hours ago about the same kind of person in France (my frog says hi) and Entertainment. A young woman called Zahia Dehar, who went from underage (17) escort-girl for national soccer players to the Princess of her very own fairytale, working for Karl Lagerfeld, working with renowned brands, getting a documentary about her coming soon,... And of course, with all our morals and stuff, we'll be quick to judge her as "she's just a whore, why care?", and still, she's now more popular than most of us.

"Don't hate the player, play the game."

Be it Zahia, Kim Kardashian, Shirley Hornstein,...aren't they just the female versions of Frank Abagnale, or even a twisted (as in "I do stuff for me, not for curiosity's sake") version our very own Kevin Mitnick? Like it or not, these persons are "hacking" their way to fame. Do they use the right methods? We're enclined to think "no" but it's a matter of personal view.

These three girls never stole anything. They cheated they way, yes: they used the system, the system WE built. One used fake credentials and network because some people value "who-you-know" more than "what-you-can-do", one went on to have a show about her to get simple minds addicted to her private life and the last one sold her body to make more money in her prime than most of us will do in a lifetime.

Now what about us, are we accomplishing anything by wasting time here bitching about it or are we just complaining that we didn't take those "opportunities" ourselves?

<comment><USER3> > These three girls never stole anything.

...What are you talking about? She stole money from multiple people and companies. She took someone's credit card _out of their hotel room_ and used it for her own purposes.

Moreover, Abagnale went to prison. As he deserved to. He was a thief.

Just like Hornstein.

</comment></comment></comment></comment></comment><comment><USER6> Forgive. Half of Americans think it's okay to imprison suspects for life without evidence, to kill suspects and their families in drone strikes, and many well-respected tech companies do all sorts of grievous harm. No apologies. So maybe with that in mind we shouldn't judge this individual so harshly.

<comment><USER7> Exactly, and if you read the Betabeat article (linked in the TC article above), her crimes were 99% social offenses. The whole thing reads like a bunch of high school cheerleader bullshit. Moreso, the damage appears exclusively limited to her own reputation.

<comment><USER3> She stole people's money and resources, dude. Hardly a social offense.

<comment><USER7> "99%"

<comment><USER3> That's a completely baseless and arbitrary estimation. If I choose to quantify her crimes in civil terms, I can say 99% of it was theft. Don't give her a pass just because sometimes she _didn't_ steal. Thieves who are good liars are dangerous indeed.

<comment><USER7> She's not being prosecuted, and we all know people who have flaked on credit cards.

<comment><USER3> No.

 _She physically removed a credit card from someone else's hotel room._ Read.

[http://betabeat.com/2012/08/shirley-hornstein-shirls- credit-...](http://betabeat.com/2012/08/shirley-hornstein-shirls-credit-card- fraud-records/)

<comment><USER7> That's the no-prosecution part, the story also mentions that she flaked on her own card(s). Regardless, the stories are focusing more on her deceptions.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Context: <http://techcrunch.com/2012/08/28/talented-shirley-hornstein/>

<comment><USER9> huh, so why apologise now, 4 months later?

<comment><USER7> As the post says, she's been going to therapy. I'm guessing this post is part of that as a first step in being honest.

<comment><USER10> Hmmm... What if she's not going to therapy?

<comment><USER7> Then who gives an F? This is just a bunch of cheerleaders butthurt that someone was going around saying they were friends with her, with the school newspaper writers (TC/Betabeat) getting in on it because, hey, they want to be friends with the cool kids too.

</comment></comment></comment></comment></comment><comment><USER11> So I'm honestly a bit confused here. She pretended to be friends with a bunch of Silicon Valley celebrities through Photoshop, and people threw money at her because of that, and people are mad at her because she was lying and wasting their money?

It would be an incredibly boring story of overly rich people who should know better being scammed, except insofar as it shows some unsavory aspects of how Silicon Valley is set up.

<comment><USER12> I'm confused as to how anyone could think those weren't Photoshopped to begin with, they're pretty awful.

</comment></comment><comment><USER13> "I'm not upset that you lied to me, I'm upset that from now on I can't believe you." - Friedrich Nietzsche

<comment><USER14> Heh, good quote.

I dumped a girlfriend about two months ago for this reason, after finding several lies (for example, I searched for resumes she had sent, and found three different age of births... why lie your age of birth on a resume?) I figured that there are no way to know what parts are true and what are not, I found no pattern, it is impossible to know when she lies and when she don't.

And after reading about Ms. Shirley, I felt like I was reading about my ex- girlfriend (including stuff in the comments, like people that DO like her, but did not knew she lied so much), I am upset that I cannot believe her anymore. I am upset that I don't know if the good moments were actually good, or acting. If the praises were sincere, or manipulation...

<comment><USER15> Why ever put your date of birth on a resume? It just opens you up to discrimination.

<comment><USER16> It's customary and expected in some countries.

<comment><USER14> Yes, I am from Brazil, here you are supposed to place many personal details on your resume (even if you are married or not).

I am not sure why though.

</comment></comment></comment></comment></comment><comment><USER17> It's terribly sad that even in her process of reformation, she is still seeking approval and validation externally. The only person she needs to prove her worth to is herself.

</comment><comment> guard-of-terra I don't understand why would anyone care or make a big deal of it.

There's no difference between someone with a fake photo near Justin Timberlake and a real one. It's not an achivement. It's not a sign of success. It's nothing. The whole idea of "startup cred" gained by having photos of you around important people disgusts me to no end.

Fruitful interactions matter. Posing in photos does not. If you infer something from someone being on a same photo with someone else, you are the problem, not Shirley.

I see this as a sign that most people in the "Scene" are empty extroverts too busy making impressions to make any real things happen. So you measure each other by a number of "important" people you talked to.

<comment> guard-of-terra To paraphrase: There's a russian word тусовщик denoting a person who hangs around some people famous for what they do (artists, musicians, writers), knows all their gossip, has a load of stories featuring famous people, but does nothing else. Does nothing creative. Does nothing, just kind of hangs up.

And that's a totally not a good thing. It's okay for teenagers if they're lucky, but grown up тусовщик is a kind of miserable lifestyle.

And now you propose there are good, real тусовщики and bad, fake тусовщики. This is extremelly strange to my ear. It's like having fake alcoholics blamed for being fake.

</comment></comment><comment><USER18> I truly despise that attitude of "it worked for me for so long, why not keep doing it?". Pushing boundaries is one thing, maybe "hacking" your way to a single opportunity can be viewed in the light of experimentation, but being a serial deceiver is no way to live a life.

I hesitate something like that to be instantly apologized away. We all fall down, we all make mistakes. Learn from those mistakes instead of trying to just get by.

<comment><USER4> _I hesitate something like that to be instantly apologized away. We all fall down, we all make mistakes. Learn from those mistakes instead of trying to just get by._

Have you even read the article? Here's a quote:

"please know this is not an excuse — because there is none."

and

"My focus now is to embrace my true self, seek forgiveness from those I have wronged, repair any outstanding damage, and learn to speak honestly from my heart. I hope I get the chance to prove this to you."

Doesn't sound like someone is looking for an easy way to sweep this under the carpet to me, at all. So some reactions here are kinda curious to me. I mean sure, I don't care either: I wasn't emotionally involved with the fact that this stranger lied to other strangers, so I don't care about the apology either, it's just not something that concerns me. But I assume it didn't really affect anyone who is now being a hard-ass about her public apology, either.

 _being a serial deceiver is no way to live a life._

You say that as if that is not exactly what she wrote, too. wtf?

I say good for her, and good luck. Having had relationships with chronical liars, I often thought, as much as all of that sucked and hurt, that I would MUCH rather be lied to, than be addicted to telling lies, because I'm sure that hurts, too.

You know, I'd even go so far to say that usually(!), it hurts the chronical liar much more than the people they're lying to, especially when it's to be loved or respected; they really _do_ want that respect, so desperately so that they're willing to lie for it; but what is respected is an image they made up, a lie they told. To me this is like a junkie robbing someone; yeah, that sucks, but being a junkie sucks so much more.

Mind you, I am merely arguing for compassion, not justifying lies. But one thing is sure, unless you were directly affected by any of this, it's simply not your place to accept or reject this apology.

<comment><USER18> I never knew about Shirley until I read her apology today, though I have encountered many chronic liars over the course of time.

It would be wrong of me to judge someone I've never met before, though I believe her behavior speaks for itself. She may very well be seeking to change her behaviors, but given the reason for which she felt it necessary to write an apology, I will wait to see what Shirley is up to in a few months.

To repent is one thing, but to demonstrate positive steps forward is another.

<comment><USER19> It'd be good to see both, but it all takes time.

I wish her well.

</comment></comment></comment></comment><comment><USER20> This is interesting to me for one reason: the need to apologize.

My, perhaps heavily biased, impression is that this is a typical American thing. I mean, what are the odds that all those people who did bad things (or things considered as bad) feel truly sorry? E.g. Lance Armstrong.

Why not be honest and say "I lied"/"I cheated", "deal with it"? That would garner more respect from me than an apology that is going to sound false.

</comment><comment><USER21> Narcissists don't feel guilt, only shame

From TLP:

"But I want to change, I want to get better."

Narcissism says: I, me. Never you, them.

No one ever asks me, ever, "I think I'm a narcissist, and I'm worried I'm hurting my family." No one ever asks me, "I think I'm too controlling, I'm trying to subtly manipulate my girlfriend not to notice other people's qualities." No one ever, ever, ever asks me, "I am often consumed by irrational rage, I am unable to feel guilt, only shame, and when I am caught, found out, exposed, I try to break down those around me so they feel worse than I do, so they are too miserable to look down on me."

If that was what they asked, I would tell them them change is within grasp. But.

"So all is lost?"

Describe yourself: your traits, qualities, both good and bad.

Do not use the word "am."

Practice this."

\- [http://thelastpsychiatrist.com/2009/01/can_narcissism_be_cur...](http://thelastpsychiatrist.com/2009/01/can_narcissism_be_cured.html)

<comment><USER4> Armchair psychiatrists without any reading comprehension whatsoever on the other hand, those have all the answers..</comment></comment>


Yahoo Officially Acquires Tumblr - <AUTHOR> http://yahoo.tumblr.com/post/53441093826/tumblr-yahoo-its-officially-official

<comment><USER2> Looks like they're unveiling some of their new "in-house" Tumblrs:

[http://yahoosearch.tumblr.com/](http://yahoosearch.tumblr.com/)

[http://yahoomessenger.tumblr.com/](http://yahoomessenger.tumblr.com/)

[http://yahoomail.tumblr.com/](http://yahoomail.tumblr.com/)

[http://yahoosports.tumblr.com/](http://yahoosports.tumblr.com/)

[http://yahooanswers.tumblr.com/](http://yahooanswers.tumblr.com/)

[http://flickr.tumblr.com/](http://flickr.tumblr.com/)

If these are used as "corporate blogs" for the various services, it seems like an appropriate use of Tumblr.

However, I worry that it'll turn into a misguided attempt at "synergizing" their properties, and that it might just be a cringe-fest.</comment>


Ask HN: Resources for acquiring customers? - <AUTHOR>

Hi HN,
I'm looking for good resources (books, links, services, advice, etc) on acquiring customers.  We all know that even with an exceptional product and a market that wants it, sometimes its hard to get people/companies to fork over cash.
Lists of services you use to manage customer acquisition would be great, as well as anything you've found that works particularly great (Adsense -vs- Facebook ads, etc).
Thanks! <comment><USER2> Book: Check out the just-released Traction Book by Justin Mares & Gabriel Weinberg

Link: [http://www.coelevate.com/essays/5-steps-to-choose-your- custo...](http://www.coelevate.com/essays/5-steps-to-choose-your-customer- acquisition-channel)</comment>


'Bacontrepreneurs' Building Bacon Empire - <AUTHOR> http://abcnews.go.com/WN/story?id=7391205&pa

<comment><USER2> At a recent stag night I attended, the $450 bottle of wine (which was, alas, about $445 above our budget) included 'Bacon' in its list of flavours.

We spent the night wondering if that was kosher?

</comment><comment><USER3> I just have to say that 'bacontrepreneur' is the best word I've ever heard.

Though it might not work quite the same with some pronunciations :(

</comment><comment><USER4>
       They're experimenting with a bacon-scented body spray

Now you too can smell like you just got off your shift at McDonald

</comment><comment><USER5> Kosher bacon salt?

</comment><comment><USER6> The thought that so many people find such novelty in the carcases pigs sickens me. Given the way many pigs are 'farmed' I'd say a more accurate description would be 'Tortureprenuers'. One day, within our lifetimes, this will seem about as funny as slavery or child molestation and the stench of it will never be removed from those who promoted it.

<comment><USER7> The thing about slavery/child molestation? They're offenses against human beings. Animals are different.

We can argue about animal rights at some point, sure, but let's have the argument when you're not comparing human pain to animal pain and when you're not making up stupid words like "torturepreneur."

<comment><USER6> It was not a statement of direct equivalence and I stand by the comparison. Do you believe that animals have a lesser capacity for feeling than children? Their is intellectual capacity is at a similar level. Doesn't it make sense that they have the same capacity to feel pain as a child? Where do you draw the line at being OK with causing extreme pain to other beings?

We where surprised to find that we shared so much DNA with other animals and it seems likely that we will find that the neural processes have a lot in common as well. My guess is that we will find that animal consciousness is much like our own with an obviously reduced inferential capacity.

The comparison with slavery is valid in the sense something that was once considered normal (or more likely 'unpleasant but convenient/necessary') can become abhorrent. There were probably a lot of people who knew deep down that it wasn't right but it was so convenient. In the history books those that promoted slavery don't tend to come off so well. The difference now is that the pace of change is faster and our lifespan may also grow considerably.

As for the term 'torturepreneur', I thought was an apt response to the title.

<comment><USER5> By your comparison you think you are increasing the status of animals, but really you are decreasing the status of humans.

And once you make humans into animals humans no longer care about such things - animals sure don't.

There is a massive and fundamental difference between animals and humans that no amount of comparing "DNA similarity or neural processes" is going to bridge.

When peta runs ads about humans also being meat, then think people will stop eating animals. But actually what happens is that people think about eating humans.

Do not try to increase animals to the level of humans - it does not work, and it's incorrect.

Instead increase the level of humans even higher, and emphasize the difference to animals even more.

<comment><USER6> I am stating reality as I see it and then deriving my morals from that view of reality. Your argument starts from a desired result (the 'elevation of humans') and works back toward reality from there.

Humans are meat. That is reality. Even if the consequences of realising this was rampant cannibalism it wouldn't change that fact.

To me the thing that separates humans from animals is also the thing that would make us not want to torture them. We are able to model reality in more detail and to do this we need to be able to consider each situation from all perspectives. Considering reality from the view of an animal in pain would cause any empathetic being some degree of pain. Those that block this or just can't see this part of reality have a second rate existence in my view and are frankly little better than animals.

<comment><USER5> Leaving aside for the moment your assumption that eating animals is equal to torturing them (which is not true).

Your request is to view the world from the point of view of the animal. Well animals do not care in the slightest about the pain of another animal.

So I reject that idea. I prefer to view the world from the point of view of a human. And humans do care, but to a human an animal is food, and a human is not.

To an animal everything is food, there is no category "not food". So by saying humans are meat (and therefor food), you are basically advocating for humans to act as animals.

<comment><USER6> > Leaving aside for the moment your assumption that eating animals is equal to > torturing them

I don't assume or believe this. What I referred to was modern factory farming or feedlots. Pigs in particular are subject to some of the most horrific living circumstances.

But you have had enough opportunities to state that you believe the torture of animals is in any way wrong. Since you have failed to do so I think it is reasonable to proceed with the view that you believe it to be OK if there is even a small utility value in it.

> Your request is to view the world from the point of view of the animal. Well > animals do not care in the slightest about the pain of another animal.

So now you are arguing that we should be taking our moral cues from animals? This is somewhat akin to the argument about the terrorist being so evil that we need to resort to their tactics - except the 'terrorists' here are defenceless animals.

The second sentence here is almost certainly untrue. Such broad statement should require at least some evidence.

> I prefer to view the world from the point of view of a human.

The more angles you can view a situation from, the better your model of reality is. In chess you need to view the game from your opponent's perspective and in relationships you need to try to understand how your partner feels. Similarly in interactions with animals it makes sense to try to model their behaviour by taking their perspective. This is the case if you have a pet, are hunting or are being hunted. I believe this is an advantageous and natural human trait. Because we have more surplus brain power we can do it better than other animals.

A necessary part of running this model accurately is to glimpse at some of the likely/obvious feelings of the animal being modelled. Those who don't feel any discomfort at the extreme pain of an animal are either censoring their view or they simply don't have the mental capacity to construct an accurate model. Either way I believe it is an impoverished way of viewing reality.

Hopefully this extend description has at least allowed you to understand my argument.

> To an animal everything is food, there is no category "not food".

This is an obviously incorrect statement. Koala bears only eat Eucalyptus leaves. In percentage terms roughly 90% the of animal biomass is necessarily formed through eating plants. Carnivorous animals are by necessity a small minority.

> So by saying humans are meat (and therefor food), you are basically > advocating for humans to act as animals.

This is a silly argument that doesn't follow from anything I have said. Even under your logic there is another option - don't eat meat. But that is a different argument.</comment></comment></comment></comment></comment></comment></comment>


Our Data – FiveThirtyEight - <AUTHOR> https://data.fivethirtyeight.com/ <comment><USER2> I'm glad that 538 share their data. At the end of their articles and ones like them, I'm often left with questions or little threads that just having the data would help me explore.

Case in point: after their discussion of the bechdel test, I was able to explore follow on questions of my own:

[https://28mm.github.io/notes/bechdel- test](https://28mm.github.io/notes/bechdel-test)

Without their data, I probably wouldn't have bothered, or thought much about it.</comment>


Survivorship Bias: The Tale of Forgotten Failures - <AUTHOR> https://fs.blog/2019/12/survivorship-bias/ <comment><USER2> I've stopped reading books and blogs from company founders who have never had to weather a storm. If I hear on a podcast intro that "Company X has been profitable since day 1 and have grown 100% per year for the past decade" then I usually skip to the next podcast.

I'd rather hear from company founders who have faced months of living on ramen, and had days of not being able to make payroll, or who have had to deal with a PR nightmare or a valued staff member having to leave at an inopportune time.

These are the situations that are part and parcel of most company's day to day struggles, and people who have never experienced those things (or don't talk about them at all) really don't have anything to say that I would take time to listen to.

<comment><USER3> According to what I read, all "Company X has been profitable since day 1 and have grown 100% per year for the past decade" are actually what the press made of it, and behind the scenes took years of hard work with lots of setbacks and near death experiences.

</comment></comment><comment><USER4> This is most especially true in sports. For every tennis, soccer, NBA players that became professional, thousands of others had failed despite the fact they all started at a very young age and went through the same rigorous training throughout their lives.

Simply being better did not guarantee that they would make it. Example: Cesc Fabregas, the former Arsenal captain soccer player, often wondered how he could even made it into a professional soccer team. He still did not understand why many of his peers from La Masia Academy back in the days, despite having more talents and being so much better players than him, just could not succeed in the end.

Meritocracy is truly a false belief.

<comment><USER5> Because natural talent alone is not sufficient to be the best at something. It takes time and work. Fans only see the end result, and miss the life dedication to achieving that result. When genetic talent plus insane work ethic collide you get people like Michael Jordan, Kobe Bryant, and LeBron James. Without a work ethic they all may have made it to the NBA, but I doubt we would have known their names. You also have people like Steph Curry, who at least on the surface isn't a genetic freak, but has been practicing basketball since before he could walk.

 _Knowing he's ordinary, he's always trying to improve himself. No one appreciates the agonizing effort he's had to make. Now that his years of training have yielded such spectacular results, everybody's talking about his 'god-given talent.' That's how men who don't try very hard comfort themselves."_ -Musashi

<comment><USER6> Hard work and talent isn't enough either. We often say that you have to work smart, and work on the right thing.

People often don't know what to work on, so it's left up to chance. Some will simply luck into the right way to train.

And this is a good parallel to successful companies: many succeed just because they're lucky.

</comment></comment></comment><comment><USER7> > Examining the lives of successful entrepreneurs teaches us very little. We > would do far better to analyze the causes of failure, then act accordingly. > Even better would be learning from both failures and successes.

Any recommendations (books, blogs etc.) on material that actually does this? The one business book that comes to mind is "Business Adventures" by John Brooks [1], which ironically might be as popular as it is because it's one of Bill Gates' favourite business books.

[1]: [https://www.amazon.com/Business-Adventures-Twelve-Classic- St...](https://www.amazon.com/Business-Adventures-Twelve-Classic- Street/dp/1497644895)

<comment><USER8> I've suggested for years, on this site no less, that people share their failure stories and we could compile them somewhere into a book.

However nobody wants to share them because they are worried that they will be seen...as failures - a reasonable position to take honestly.

The only people that seem to be happy to share failures are currently successful people, and they generally don't have either the time or inclination to wax poetic about their failures.

<comment><USER9> I recollect there was a website that did this [1]. Can't vouch for it. Not affiliated. Didn't read more than a couple startups.

[1]: [https://getautopsy.wixsite.com/failed- startups](https://getautopsy.wixsite.com/failed-startups)

<comment><USER8> There are certainly the graveyard sites out there, but I'm talking about first person stories from founders that detail why they think they failed.

<comment><USER9> Gotcha.

</comment></comment></comment></comment></comment><comment><USER10> This is something I work hard to mitigate. For systems I'm trying to improve I keep records of every decision and outcome in an effort to get a better picture of which ones helped and which ones didn't. For many I also write down what I'm thinking and why I'm making that decision that way. This allows 'future me' to reconstruct the mental model of 'past me' and more clearly see what I missed but could have seen, and what I missed and I could not have seen.

It takes time and it can be boring but it can also be amazingly insightful too.

</comment><comment> mark-r I was happy to see mention of the airplane reinforcing story, because this whole article reminded me of it. Paying attention to the failures is essential.</comment>