├── .gitignore ├── Procfile ├── README.md ├── index.js ├── package.json └── screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: npm start -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Marvin 2 | "The brain the size of a planet, and all I hear is bad ideas" 3 | 4 | This is Marvin, a Slackbot that doesn't like any of your ideas. Inspired by this Hacker News Post: [Things to say when you're losing a technical argument][hn]. The list has been slightly modified to make it more generic and a little less hostile. 5 | 6 | ![screenshot](/screenshot.png "An example") 7 | ### Responses 8 | All of his reponses are in index.js, but here's some examples: 9 | * "Trying to build a team behind that technology would be a staffing nightmare." 10 | * "That can't be generalized to a cross-platform build." 11 | * "Unfortunately, the license would contaminate our product." 12 | * "Our support infrastructure simply can't handle the volume that change would involve." 13 | * "I had one of the interns try that approach for another project, and it was a disaster." 14 | * "Yes, well, that's just not the way things work in the real world.", 15 | * "I like your idea. Why don't you write up a white paper and we'll review it at the next staff meeting?" 16 | 17 | Changes are welcome, submit a PR. He is not listed on the Slack App Directory, since OAuth is not implemented. Set up to run on Heroku, but you can fork and host wherever. 18 | 19 | [hn]: https://news.ycombinator.com/item?id=29121714 -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const PORT = process.env.PORT || 5000; 3 | 4 | var textOptions = [ 5 | "That won't scale.", 6 | "That's been proven to be O(N^2) and we need a solution that's O(NlogN).", 7 | "The syntax is idiosyncratic.", 8 | "Trying to build a team behind that technology would be a staffing nightmare.", 9 | "That can't be generalized to a cross-platform build.", 10 | "Unfortunately, the license would contaminate our product.", 11 | "Our support infrastructure simply can't handle the volume that change would involve.", 12 | "I had one of the interns try that approach for another project, and it was a disaster.", 13 | "Yes, well, that's just not the way things work in the real world.", 14 | "I like your idea. Why don't you write up a white paper and we'll review it at the next staff meeting?", 15 | "I think you need to stop taking this so personally. We need to think about what's best for the project, not about our own little pet theories.", 16 | "Oh, I played with that approach back as an undergrad.", 17 | "I was reading about that on Hacker News yesterday too.", 18 | "That's totally inefficient on modern hardware.", 19 | "Well, yes, but it really reduces to the knapsack problem in that case. Do you have some kind of heuristic, or are we dealing with an NP-complete case?", 20 | "Have you Looked at the number of I/O requests that will create?", 21 | "We can't afford the transaction overhead.", 22 | "No, no, no. It's fairly important that the database be in Third Normal Form.", 23 | "No, that would break object encapsulation.", 24 | "Can you generate some use cases that would justify the change?", 25 | "How is that going to impact the schedule?", 26 | "It would probably be best if we deferred that until our next major version.", 27 | "If you make this change, I will fork the code.", 28 | "Yes, well, unfortunately the economy is going away from anything remotely like that. Our investors would kill us.", 29 | "You used to program in Pascal, didn't you?", 30 | "You've obviously ignored the various namespace issues.", 31 | "I don't think you're considering the performance trade-offs.", 32 | "What kind of benchmarks have you been running?", 33 | "Let's table this for now, and we'll talk about it one-on-one off-line.", 34 | "This really doesn't jibe with our core competency.", 35 | "This sort of thing should really be outsourced.", 36 | "Yes, but can this be embedded in a toaster, for example?", 37 | "We need something that my mom can use.", 38 | "Users won't want to click through that many layers of hierarchy.", 39 | "OK, but what about internationalization?", 40 | "Can you talk serious design with us?", 41 | "That's a good idea -- you should do that on your home page.", 42 | "That's great, but I thought that whole idea was discredited years ago.", 43 | "What you're not seeing is the difference between an 'is-a' and a 'has-a' relationship.", 44 | "Well, that's great if you have an AI running the thing. But if you're not, then you're not doing it right.", 45 | "That's a good idea, but I think it's going to be a long-term maintenance nightmare.", 46 | "I think you're doing a good job of thinking about the problem, but you're not thinking about the solution.", 47 | ] 48 | 49 | express() 50 | .post('/', (req, res) => res.send({"response_type": "in_channel", "text": textOptions[Math.floor(Math.random() * textOptions.length)]})) 51 | .listen(PORT, () => console.log(`Listening on ${ PORT }`)); 52 | 53 | 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tech-pessimist", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "dependencies": { 10 | "express" : "^4.16.3" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/keltrycroft/tech-pessimist.git" 15 | }, 16 | "keywords": [], 17 | "author": "", 18 | "license": "ISC", 19 | "bugs": { 20 | "url": "https://github.com/keltrycroft/tech-pessimist/issues" 21 | }, 22 | "homepage": "https://github.com/keltrycroft/tech-pessimist#readme" 23 | } 24 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keltrycroft/marvin/72e41b51ad8e176a033bf8cd22da7a8d35dff21b/screenshot.png --------------------------------------------------------------------------------