├── .gitbook └── assets │ ├── img_7128.jpg │ ├── img_7218.PNG │ ├── three-set-venn-diagram-ux-communication.png │ ├── touch-bar-shot-2019-03-27-at-10.49.05-pm.png │ └── unadjustednonraw_thumb_2f90.jpg ├── LICENSE ├── README.md ├── SUMMARY.md ├── contacting-me.md ├── daily-drivers.md ├── engineering-code ├── README.md ├── best-engineers.md ├── best-engineers │ └── README.md ├── commit-messages.md ├── communication.md ├── configuration-files.md ├── different-types-of-coding.md ├── engineering-code-1.md ├── engineering-data.md ├── naming.md ├── pipelines.md ├── reviewing-code │ ├── README.md │ └── requesting-changes.md ├── site-reliability-engineering-sre.md └── writing-code │ ├── 80-character-limit.md │ ├── README.md │ ├── bad-practices.md │ ├── be-careful-about-chaining-conditions.md │ ├── becareful-of-chains-of-ternary-operators.md │ ├── becareful-of-enum-in-switch-statements.md │ ├── commenting │ ├── README.md │ └── dont-commit-commented-code.md │ ├── consistency.md │ ├── dont-commit-commented-code.md │ ├── exit-early.md │ ├── hacks.md │ ├── logs.md │ ├── make-it-easy-to-reproduce.md │ ├── naming │ ├── README.md │ ├── create-searchable-names.md │ └── versioning.md │ ├── other-rules.md │ ├── scripts.md │ ├── time.md │ ├── write-code-knowing-it-will-be-refactored.md │ ├── write-code-knowing-you-will-be-blamed.md │ └── writing-for-a-code-base-of-1-000-000+-lines.md ├── engineering-management ├── 1-1s │ ├── README.md │ ├── calibration.md │ ├── expectations.md │ ├── mentorship-learning-growing.md │ ├── task-management.md │ └── teams.md ├── README.md ├── hiring.md ├── interviewing-candidates.md ├── messenger-groups.md ├── new-reports.md └── resources.md ├── getting-into-tech ├── README.md └── terminology.md ├── interview-guide ├── README.md ├── choosing-a-company.md ├── faq.md ├── interview-process │ ├── README.md │ ├── accepting.md │ ├── coding.md │ ├── negotiation.md │ ├── questions-to-ask.md │ ├── rejection.md │ └── soft-skills.md ├── job-boards.md ├── practice.md └── technical-interview-cheatsheet.md ├── notes ├── archive │ ├── README.md │ ├── amazon-echo-dot-3rd-gen-with-clock.md │ ├── apple │ │ ├── README.md │ │ ├── airpods.md │ │ ├── apple-notes.md │ │ ├── apple-watch.md │ │ ├── ipad-pro.md │ │ ├── macbook-pro.md │ │ └── new-mac.md │ ├── audible.md │ ├── b2b-b2c.md │ ├── bags.md │ ├── balance │ │ ├── README.md │ │ ├── growth-vs-contentment.md │ │ ├── leading-vs-following.md │ │ ├── mindful-vs-mindless.md │ │ └── new-vs-old.md │ ├── bandwidth-requirements.md │ ├── blockchain.md │ ├── board-games.md │ ├── board-games │ │ ├── README.md │ │ └── bang.md │ ├── broadway.md │ ├── cheap-good-fast.md │ ├── cli │ │ ├── README.md │ │ ├── git.md │ │ ├── ufw.md │ │ └── xargs.md │ ├── cloud-providers │ │ ├── README.md │ │ └── gcp.md │ ├── communication.md │ ├── communication │ │ ├── README.md │ │ ├── asks-making-requests.md │ │ ├── change-management.md │ │ ├── making-edits.md │ │ ├── problem-definition.md │ │ └── synchronous-vs-asynchronous.md │ ├── company │ │ ├── README.md │ │ ├── all-hands.md │ │ ├── organizational-structure.md │ │ └── the-problematic-cto.md │ ├── content-creation.md │ ├── corona-virus.md │ ├── coworking-spaces.md │ ├── daily-routine.md │ ├── dating.md │ ├── displays-monitors.md │ ├── dns.md │ ├── domain-registrars.md │ ├── driving.md │ ├── ecommerce.md │ ├── empire-building.md │ ├── facebook-for-developers.md │ ├── fever.md │ ├── fiverr.md │ ├── flights.md │ ├── gaming-tablet.md │ ├── github.md │ ├── go-lang.md │ ├── gtd.md │ ├── headsets.md │ ├── hiking │ │ ├── README.md │ │ ├── chamang-waterfalls.md │ │ ├── kanching-waterfalls.md │ │ ├── kota-damansara-community-forest-reserve.md │ │ └── sungai-chilling.md │ ├── home-device-calling.md │ ├── icalendar.md │ ├── keyboards │ │ ├── README.md │ │ └── ergodox-ez.md │ ├── malaysia-insurance.md │ ├── mental-health-malaysia.md │ ├── mouse.md │ ├── movies.md │ ├── multiroom-wireless-speaker-system.md │ ├── musicals.md │ ├── old-hardware │ │ ├── README.md │ │ └── netgear-r7000p.md │ ├── password-managers.md │ ├── phabricator.md │ ├── physical-health │ │ ├── README.md │ │ └── cardio.md │ ├── podcasts.md │ ├── productivity │ │ ├── README.md │ │ └── note-taking.md │ ├── programming-bootcamps.md │ ├── property.md │ ├── redang.md │ ├── referral-codes.md │ ├── relationships.md │ ├── remote-calls.md │ ├── remote-work.md │ ├── remote-work │ │ ├── README.md │ │ └── comparison.md │ ├── road-trips.md │ ├── ruby.md │ ├── scraping.md │ ├── singapore.md │ ├── slack.md │ ├── software-engineering │ │ ├── README.md │ │ ├── repository-management.md │ │ └── software-architectures │ │ │ ├── README.md │ │ │ ├── monolithic.md │ │ │ └── non-monolithic │ │ │ ├── README.md │ │ │ ├── faas-functions-as-a-service-or-serverless.md │ │ │ └── microservice.md │ ├── stripe.md │ ├── ux.md │ ├── venture-builder.md │ ├── video-games.md │ ├── virtual-personal-assistant.md │ ├── vpn.md │ ├── web-development │ │ ├── README.md │ │ ├── react.md │ │ └── sso-providers.md │ ├── webdav-caldav.md │ ├── websocket.md │ ├── withings.md │ └── xiaomi-roborock-mijia.md ├── javascript │ ├── README.md │ ├── array.md │ ├── async-and-await-promises.md │ ├── booleans.md │ ├── collections.md │ ├── cons-dislikes.md │ ├── fetch.md │ ├── map.md │ ├── modules.md │ ├── object.md │ ├── regex.md │ ├── set.md │ ├── style-guides.md │ └── versions.md ├── node.js │ ├── README.md │ ├── best-practices.md │ ├── draftjs.md │ ├── eslint.md │ ├── graphql.md │ ├── hapi.md │ ├── knex.md │ ├── koa.md │ ├── relay.md │ ├── typescript.md │ └── webservers.md ├── software-engineering │ └── software-architectures │ │ └── microservice.md └── technical-due-diligence.md ├── personal-goals.md ├── projects-tools-toys.md ├── table-of-contents.md └── why-gitbook.md /.gitbook/assets/img_7128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aizatto/gitbook-public/5d34788995c07908d34aef6247d929a2043d540a/.gitbook/assets/img_7128.jpg -------------------------------------------------------------------------------- /.gitbook/assets/img_7218.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aizatto/gitbook-public/5d34788995c07908d34aef6247d929a2043d540a/.gitbook/assets/img_7218.PNG -------------------------------------------------------------------------------- /.gitbook/assets/three-set-venn-diagram-ux-communication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aizatto/gitbook-public/5d34788995c07908d34aef6247d929a2043d540a/.gitbook/assets/three-set-venn-diagram-ux-communication.png -------------------------------------------------------------------------------- /.gitbook/assets/touch-bar-shot-2019-03-27-at-10.49.05-pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aizatto/gitbook-public/5d34788995c07908d34aef6247d929a2043d540a/.gitbook/assets/touch-bar-shot-2019-03-27-at-10.49.05-pm.png -------------------------------------------------------------------------------- /.gitbook/assets/unadjustednonraw_thumb_2f90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aizatto/gitbook-public/5d34788995c07908d34aef6247d929a2043d540a/.gitbook/assets/unadjustednonraw_thumb_2f90.jpg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # aizatto.com 2 | 3 | This is a public braindump of all my thoughts. 4 | 5 | Every page here is a [living document](https://en.wikipedia.org/wiki/Living_document) \(see my [commit history](https://github.com/aizatto/gitbook-public/commits/master)\) and is not written in stone. Expect content to be updated, reorganized, shuffled, archived, whatever it is, based on any learnings or life experiences that I may go through. 6 | 7 | If you are reading this from GitHub, for a better user experience visit [https://www.aizatto.com/](https://www.aizatto.com/) 8 | 9 | View the [Table of Contents](table-of-contents.md) to quickly see all available documents and the directory structure of this GitBook. Hopefully this can help you find something relevant to you faster. 10 | 11 | Part of the purpose of this site is to provide quick references for myself, and other people. Document the knowledge I know, so that I can scale myself. 12 | 13 | I also keep other public notes in [Notion](https://www.notion.so/aizatto/Public-Notes-fbcb9e6b66784c5c96b8e2a5613927b9). 14 | 15 | ## Services I Offer 16 | 17 | * Technical Due Diligence 18 | * Startup Consulting, on Software Engineering 19 | 20 | ## Recent Portfolio 21 | 22 | Visit the [Portfolio, Projects, Tools, Toys](projects-tools-toys.md) page for more. 23 | 24 | * [GitHub](https://www.github.com/aizatto/) 25 | * [LinkedIn](https://www.linkedin.com/in/aizatto) 26 | 27 | ### Deep Thought 28 | 29 | A place for me to reflect on my thoughts, and hopefully learn from others as well. 30 | 31 | [https://www.deepthoughtapp.com/](https://www.deepthoughtapp.com/) 32 | 33 | ### build.my 34 | 35 | Various tools I created to solve my own problems 36 | 37 | [https://build.my/](https://build.my/) 38 | 39 | #### Logbook 40 | 41 | A note taking tool to help organize notes by tags. 42 | 43 | [https://logbook.build.my/](https://log.booktools.app/) 44 | 45 | #### Taskbook 46 | 47 | Routine/task management tool 48 | 49 | {% embed url="https://taskbook.build.my/" %} 50 | 51 | #### Cashbook 52 | 53 | Personal finance tracker. 54 | 55 | [https://cashbook.build.my/](https://cashbook.build.my/) 56 | 57 | #### Meetups 58 | 59 | Malaysian event aggregator for technology and startup communities. 60 | 61 | * [https://meetups.build.my/](https://build.my/) 62 | * [https://github.com/aizatto/build.my](https://github.com/aizatto/build.my) 63 | 64 | -------------------------------------------------------------------------------- /contacting-me.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: or how to cold message me. 3 | --- 4 | 5 | # Contacting Me 6 | 7 | I write this for people who: 8 | 9 | * Want to reach out to me 10 | * Send me a LinkedIn request without a note 11 | 12 | I don't mind connecting, but I'd like to know: 13 | 14 | * who I'm connecting with 15 | * that my connections are of a higher quality 16 | 17 | My recommendations for reaching out to me: 18 | 19 | * Please be kind, courteous. 20 | * Introduce yourself. Tell me who you are and a bit of background about you. 21 | * Tell me how you found me. 22 | * Tell me directly what you want. Be it help, advice, internship, etc. Please do not beat around the bush. 23 | * You don't need to be formal. 24 | * If you email me, do share your phone number, or preferred way of texting you so that we can keep conversations casual. \(WhatsApp, Messenger, Telegram\) 25 | 26 | I apologize if this appears curt, or intimidating but it helps both of us. 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /daily-drivers.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | I keep this page updated to help people make better purchase decisions. Do ask 4 | me if you have any questions about why I choose these devices. 5 | --- 6 | 7 | # Daily Drivers 8 | 9 | Last updated: Monday May 3rd 2021 10 | 11 | My Daily Drivers 12 | 13 | * PC 14 | * AMD Ryzen 5 5600X 15 | * Nvidia GTX 2060S 16 | * MacBook Air M1 17 | * iPhone 11 Pro 256GB 18 | 19 | Monitor: 20 | 21 | * Dell S3221QS 22 | * Dell S2721QS 23 | * Dell S2415Q 24 | 25 | Hardware: 26 | 27 | * Keyboard: 28 | * Logitech G913 TKL Lightspeed 29 | * Code Keyboard 30 | * Mouse: 31 | * Logitech MX Anywhere 3 \(for work\) 32 | * Logitech G Pro X Superlight \(for gaming\) 33 | * Webcam: 34 | * Logitech Brio 35 | 36 | Headsets: 37 | 38 | * Bose NC 700 39 | * Powerbeats Pro 40 | * Corsair Virtuoso RGB 41 | 42 | Misc: 43 | 44 | * iPad Pro 10.9" 2018 45 | * Synology DS218+ 46 | * 6TB Seagate Ironwolf 47 | * Awair Element 48 | 49 | Programming Languages / Frameworks: 50 | 51 | * Go Lang 52 | * TypeScript / JavaScript 53 | * GraphQL 54 | * Relay 55 | * React 56 | 57 | Software: 58 | 59 | * IDE: 60 | * Visual Studio Code 61 | * vim 62 | 63 | -------------------------------------------------------------------------------- /engineering-code/README.md: -------------------------------------------------------------------------------- 1 | # Engineering Code 2 | 3 | This is a series of articles on software engineering. 4 | 5 | Software Engineering is different than hacking, coding, or programming. It is about taking the time to properly engineer code, and not hack/code/patch/program it together. 6 | 7 | As it currently stands, I believe writing software is focused on the ability to program, code, patch, and hack a "working" solution to a problem. This is reasonable for short term solutions, but not long term ones. 8 | 9 | The goal is to make the trade closer to other disciplines of engineering. 10 | 11 | > The creative application of scientific principles to design or develop structures, machines, apparatus, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation or safety to life and property. 12 | 13 | 1. [https://en.wikipedia.org/wiki/Engineering](https://en.wikipedia.org/wiki/Engineering) 14 | 2. [http://www.worldcat.org/title/canons-of-ethics-for-engineers/oclc/26393909?referer=brief\_results](http://www.worldcat.org/title/canons-of-ethics-for-engineers/oclc/26393909?referer=brief_results) 15 | 16 | This is an ever evolving document, things will change, words will be added or removed. 17 | 18 | ## Why "Code"? 19 | 20 | Code is what we deal with everyday. 21 | 22 | We write "code". We try to figure out the right syntax, semantics, and grammar. It is the smallest unit thta we as software engineers tweak and play around with. 23 | 24 | ## Principles 25 | 26 | * Clarity 27 | * Review for clarity. 28 | * Write for clarity. 29 | * Reading 30 | * Review knowing that it will be read later. 31 | * Write knowing that it will be read later. 32 | * Easy to Reproduce 33 | 34 | Becareful of death by a thousand cuts/commits/diffs. 35 | 36 | ## Articles 37 | 38 | The hardest part about writing code, is reviewing it. 39 | 40 | -------------------------------------------------------------------------------- /engineering-code/best-engineers.md: -------------------------------------------------------------------------------- 1 | # Best Engineers 2 | 3 | I think the best engineers are those that can properly balance: 4 | 5 | * Speed of development 6 | * Maintainability 7 | * Quality 8 | * Demands of the short term, and the long term 9 | * Understand how code complexity can increase/decrease problems 10 | * Complex code may be good for the short term, terrible for the long term 11 | * Doesn't over engineer, doesn't under engineer 12 | * Understand the necessity of technical debt, and when to clean it 13 | * Understand what fires to let burn, and which ones to put out 14 | * Have developed a philosophy of engineering with answers that goes "it depends" 15 | * Know when to implement hacks and exceptions, and when to architect larger solutions 16 | * Good software engineers are able to deconstruct programs. Building is easy. Deconstructing/reconstructing/refactor programs are harder. 17 | * They have some product sense 18 | 19 | They realize that all code will be refactored eventually, so you need to write code that delivers a product ASAP but with just enough abstractions that allow it to be easily refactored in the future. 20 | 21 | This is only learned through experience. 22 | 23 | You need to have lived with code base for a long time to know how code evolves and the mistakes people normally make in a code base. 24 | 25 | You want to optimize just enough, but don't want to pre-optimize too early. 26 | 27 | Generalization: This doesn't favor people who enjoy prototyping, or building multiple apps as it doesn't give them the deep experience with how to build a product for the long term. They only know how to build a product for the short term. 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /engineering-code/best-engineers/README.md: -------------------------------------------------------------------------------- 1 | # Best Engineers 2 | 3 | I think the best engineers are those that can properly balance: 4 | 5 | * Speed of development 6 | * Maintainability 7 | * Quality 8 | * Demands of the short term, and the long term 9 | * Understand how code complexity can increase/decrease problems 10 | * Complex code may be good for the short term, terrible for the long term 11 | * Doesn't over engineer, doesn't under engineer 12 | * Understand the necessity of technical debt, and when to clean it 13 | * Understand what fires to let burn, and which ones to put out 14 | * Have developed a philosophy of engineering with answers that goes "it depends" 15 | 16 | They realize that all code will be refactored eventually, so you need to write code that delivers a product ASAP but with just enough abstractions that allow it to be easily refactored in the future. 17 | 18 | This is only learned through experience. 19 | 20 | You need to have lived with code base for a long time to know how code evolves and the mistakes people normally make in a code base. 21 | 22 | You want to optimize just enough, but don't want to pre-optimize too early. 23 | 24 | Generalization: This doesn't favor people who enjoy prototyping, or building multiple apps as it doesn't give them the deep experience with how to build a product for the long term. They only know how to build a product for the short term. 25 | 26 | -------------------------------------------------------------------------------- /engineering-code/communication.md: -------------------------------------------------------------------------------- 1 | # Communication 2 | 3 | The goal of this page is to provide template messages you can use to operate faster. By knowing how to communicate, one can move faster 4 | 5 | Things to have a discussion on: 6 | 7 | * Architecture 8 | * Data Structures 9 | * Things which can create technical debt 10 | * When we break rules/conventions 11 | * Hacks 12 | * Exception/niche cases 13 | 14 | Things to not have a discussion on: 15 | 16 | * Things which can be automatically fixed 17 | * ie: styles 18 | * Technical debt that is easy to fix 19 | * using prettiers/linters/formatting tools 20 | 21 | ## Communication Templates 22 | 23 | ### Commit first, then make changes 24 | 25 | Message: 26 | 27 | > Will commit this first, and make follow up PRs as comments are made. 28 | 29 | Used when: 30 | 31 | * Feeling blocked, but wanting to move fast 32 | 33 | -------------------------------------------------------------------------------- /engineering-code/configuration-files.md: -------------------------------------------------------------------------------- 1 | # Configuration Files 2 | 3 | ## Formats 4 | 5 | ### .env 6 | 7 | [https://www.npmjs.com/package/dotenv](https://www.npmjs.com/package/dotenv) 8 | 9 | Properties: 10 | 11 | * Simple configuration 12 | * Values can only be a string or a number 13 | * No complicated values 14 | * Useful when making minor flags or changes 15 | * Human readable 16 | 17 | Example: 18 | 19 | {% code title=".env" %} 20 | ```bash 21 | NODE_ENV=production 22 | PORT=3001 23 | ``` 24 | {% endcode %} 25 | 26 | ### JSON or JSON5 27 | 28 | If possible use JSON5 over JSON. 29 | 30 | From [https://github.com/json5/json5](https://github.com/json5/json5) 31 | 32 | > The JSON5 Data Interchange Format \(JSON5\) is a superset of [JSON](https://tools.ietf.org/html/rfc7159) that aims to alleviate some of the limitations of JSON by expanding its syntax to include some productions from [ECMAScript 5.1](https://www.ecma-international.org/ecma-262/5.1/). 33 | 34 | Properties: 35 | 36 | * Nested configuration 37 | * Uses an already familiar programming paradigm 38 | * Human readable 39 | 40 | Example: 41 | 42 | {% code title="example.json5" %} 43 | ```javascript 44 | { 45 | // comments 46 | unquoted: 'and you can quote me on that', 47 | singleQuotes: 'I can use "double quotes" here', 48 | lineBreaks: "Look, Mom! \ 49 | No \\n's!", 50 | hexadecimal: 0xdecaf, 51 | leadingDecimalPoint: .8675309, andTrailing: 8675309., 52 | positiveSign: +1, 53 | trailingComma: 'in objects', andIn: ['arrays',], 54 | "backwardsCompatible": "with JSON", 55 | } 56 | ``` 57 | {% endcode %} 58 | 59 | ### XML 60 | 61 | Properties: 62 | 63 | * Complicated 64 | * Overly verbose 65 | * Useful for computers interfacing with each other 66 | 67 | ### YAML \(YAML Ain't Markup Language or Yet Another Markup Language\) 68 | 69 | [https://yaml.org/](https://yaml.org/) 70 | 71 | Properties: 72 | 73 | * Can get complex with the "repeated nodes" syntax 74 | * Spacing is important, which can throw off the configuration 75 | * Isn't immediately obvious when something is a list/array or a map 76 | 77 | ### INI 78 | 79 | [https://en.wikipedia.org/wiki/INI\_file](https://en.wikipedia.org/wiki/INI_file) 80 | 81 | Properties: 82 | 83 | * Cannot be deeply nested 84 | 85 | ```text 86 | ; last modified 1 April 2001 by John Doe 87 | [owner] 88 | name=John Doe 89 | organization=Acme Widgets Inc. 90 | 91 | [database] 92 | ; use IP address in case network name resolution is not working 93 | server=192.0.2.62 94 | port=143 95 | file="payroll.dat" 96 | ``` 97 | 98 | ## Should you mix formats? 99 | 100 | ### Reasons to mix: Yes 101 | 102 | Example: mixing .env and JSON5 103 | 104 | When you need a mix of simple and complex data structures? 105 | 106 | JSON objects should only be read once. 107 | 108 | Environment variables can be read multiple times in the system. 109 | 110 | Limit it to just two. 111 | 112 | ### Reasons not to mix: No 113 | 114 | Don't mix too many formats. Too many different rules to remember. Or use different format for communication between services \(ie: JSON, or XML files\) 115 | 116 | ## Should you create your own? 117 | 118 | No. Unless you have a really good reason. 119 | 120 | You have to create a parser. 121 | 122 | -------------------------------------------------------------------------------- /engineering-code/engineering-code-1.md: -------------------------------------------------------------------------------- 1 | # Engineering Code 2 | 3 | ## Engineers make complex systems simple 4 | 5 | * Reduce complexity 6 | * Becareful about increasing/introducing complexity 7 | 8 | ## Identify the funnel 9 | 10 | ## Identify each step in the funnel 11 | 12 | ## Within each step, identify the inputs, processes, and outputs 13 | 14 | ## See if the process can be broken down 15 | 16 | ## See if the process can be done in parallel 17 | 18 | ## Build tools to measure the funnel 19 | 20 | If you can't measure it. You can't improve it. 21 | 22 | Build it into a chart. 23 | 24 | See [Pipelines](https://app.gitbook.com/engineering-code/pipelines/) 25 | 26 | ### Funnel Data Structure 27 | 28 | #### Table 29 | 30 | | Source | Destination | Time | 31 | | ------ | ----------- | ------------------- | 32 | | 1 | 2 | 2015-11-05 12:33:41 | 33 | | 1a | 2 | | 34 | | 1b | 2 | | 35 | | 2 | 3 | | 36 | | 2 | 4 | | 37 | 38 | Having such a table means you can generate a graph. 39 | 40 | Search online: Representing a graph in a database 41 | 42 | ## Steps can change, moved, and removed 43 | 44 | ## Steps can be parallized 45 | 46 | ## Tests, Monitoring, Alerts 47 | 48 | Build these in. 49 | 50 | Make it easy to do so. 51 | 52 | ## Reduce Technical Debt 53 | 54 | Cons of Technical Debt 55 | 56 | * Slows you down 57 | * Slows down the team 58 | * Harder to clean up the longer it exists 59 | * Frustrating 60 | * Burns out people 61 | 62 | Introduced as: 63 | 64 | * Complexities 65 | * Inconsistencies 66 | * Non standardization 67 | * Gotchas 68 | * Surprises 69 | * Patches 70 | * Death by a thousand commits 71 | * Poor foresight 72 | * Poor encapsulation 73 | 74 | > The road to hell is paved with good intentions 75 | 76 | ## Maintaining/Managing States is a PITA 77 | 78 | Maintaining/managing states is a PITA. When there are more states to maintain, it increases the complexity of the project. 79 | 80 | ## What slows down momentum 81 | 82 | * Processes 83 | * We should engineer the processes out. Automate them. That is what engineering does best. 84 | * Communication Overhead 85 | * We should engineer reducing communication overhead. 86 | * Non Reproducible Steps 87 | * We should engineer reproducible steps. 88 | * Synchronous Knowledge Sharing 89 | * We should engineer asynchronous knowledge sharing. 90 | -------------------------------------------------------------------------------- /engineering-code/engineering-data.md: -------------------------------------------------------------------------------- 1 | # Engineering Data 2 | 3 | Data about Data 4 | 5 | ## Audit Trail 6 | 7 | Maintain history about how this particular data set is being manipulated. 8 | 9 | Answer CRUD questions. 10 | 11 | * When was it created? 12 | * When was it updated? 13 | * When was it deleted? 14 | 15 | ## Production and Staging 16 | 17 | * Would you ever need to "test" your data model somewhere? 18 | * How would you build a staging environment? 19 | 20 | ## Data about Data 21 | 22 | * How many are created/updated/deleted over a certain time period? 23 | 24 | ## Monitoring/Alerts 25 | 26 | * How big is your data? 27 | * At what rate is your data growing? 28 | * What are your backup plans? 29 | 30 | -------------------------------------------------------------------------------- /engineering-code/naming.md: -------------------------------------------------------------------------------- 1 | # Naming 2 | 3 | > There are only two hard things in Computer Science: cache invalidation, naming things, and off by one errors. 4 | 5 | Naming is hard. The goal of this document is to help with naming. 6 | 7 | ## Dates 8 | 9 | ### Year Month Day 10 | 11 | Allows to sort way easier 12 | 13 | [https://timestamps.aizatto.com/](https://timestamps.aizatto.com/) 14 | 15 | ## Versioning 16 | 17 | ### String 18 | 19 | ```text 20 | $product-$stage-$name 21 | ``` 22 | 23 | ### Semantic Versioning \(Numeric\) 24 | 25 | [https://semver.org/](https://semver.org/) 26 | 27 | ```bash 28 | $major.$minor.$patch 29 | ``` 30 | 31 | #### Calendar Versioning \(CalVer\) 32 | 33 | [https://calver.org/](https://calver.org/) 34 | 35 | ```bash 36 | YYYY.MM.DD 37 | ``` 38 | 39 | Mix: 40 | 41 | ```bash 42 | $major.$minor.YYYYMMDD.$patch 43 | ``` 44 | 45 | ## Common Names 46 | 47 | #### content 48 | 49 | Used for user stuff like user generated content, or the content of blog posts 50 | 51 | #### title 52 | 53 | Used for documents, or posts. 54 | 55 | -------------------------------------------------------------------------------- /engineering-code/pipelines.md: -------------------------------------------------------------------------------- 1 | # Pipelines 2 | 3 | * Create an `id`/`record` for each batch uploaded into the pipeline. 4 | * Manage `state` inside the record 5 | 6 | ## Monitoring/Alerts 7 | 8 | * How are you measurign the pipeline? 9 | * How many units are going through the pipeline? 10 | * How long does it take to go through the pipeline? 11 | * Can you easily test/validate a single part of the pipeline? 12 | 13 | -------------------------------------------------------------------------------- /engineering-code/reviewing-code/requesting-changes.md: -------------------------------------------------------------------------------- 1 | # Requesting Changes 2 | 3 | Levels: 4 | 5 | * "non blocker" 6 | * "for suggestion" 7 | * "minor blocker" 8 | * "major blocker" 9 | 10 | ## Notes 11 | 12 | [https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/](https://www.netlify.com/blog/2020/03/05/feedback-ladders-how-we-encode-code-reviews-at-netlify/) 13 | 14 | * Dust: "Take it or leave it" 15 | * Sand "Future consideration" 16 | * Pebble "Future action" 17 | * Boulder "Blocking" 18 | * Mountain "Blocking + Immediate Action" 19 | 20 | -------------------------------------------------------------------------------- /engineering-code/site-reliability-engineering-sre.md: -------------------------------------------------------------------------------- 1 | # Site Reliability Engineering \(SRE\) 2 | 3 | SRE at Dropbox [https://www.youtube.com/watch?v=ggizCjUCCqE](https://www.youtube.com/watch?v=ggizCjUCCqE) 4 | 5 | -------------------------------------------------------------------------------- /engineering-code/writing-code/80-character-limit.md: -------------------------------------------------------------------------------- 1 | # 80 character limit 2 | 3 | Pros: 4 | 5 | * Forces you to focus on legibility. 6 | * Emphasis on short. 7 | * Encourages preserving source control blame 8 | * Long lines raises concerns on naming 9 | 10 | Cons: 11 | 12 | * Some languages may not be suitable for 80 characters. 13 | * Can make some functions or conditions longer 14 | * When writing conditions, consider breaking them into multiple conditions. See below for reasoning. 15 | * The focus on short may may become bad. 16 | * Example: Bad variable names. 17 | * Example: Too many small functions. Makes it difficult to understand flow. 18 | * Aim for balance. 19 | 20 | Considerations: 21 | 22 | * Not everyone has the same screen size as you 23 | * Choose the lowest common denominator 24 | * How many characters can comfortably in the tools you use? 25 | * GitHub [split diff views](https://github.com/aizatto/character-length/commit/bae8f00feda5b832aa6fe162460968d8eaf040a5) 26 | * 13" MacBookPro on "More Space" Resolution \(1680x1050\) can only comfortably show 104 characters 27 | * 1280px width can comfortably show 87 characters. 28 | * General width of my windows when tiled on a [desktop monitor](../../notes/archive/displays-monitors.md) 29 | * See my [testing](https://github.com/aizatto/character-length) 30 | 31 | Exceptions: 32 | 33 | * URLs. Always try to use full URLs as much as possible as it helps the reader to intuit the purpose of the URL. 34 | 35 | Notes: 36 | 37 | * Python recommends [79 characters](https://www.python.org/dev/peps/pep-0008/#maximum-line-length) 38 | * I've [tested out character length](https://github.com/aizatto/character-length) on different sites 39 | * AirBNB 40 | * [JavaScript](https://github.com/airbnb/javascript#strings--line-length): 100 characters 41 | * [Ruby](https://github.com/airbnb/ruby/blob/master/rationales.md#line-length): 100 characters 42 | * Google 43 | * [C++](https://google.github.io/styleguide/cppguide.html#Line_Length): 80 characters 44 | * [Java](https://google.github.io/styleguide/javaguide.html#s4.4-column-limit): 100 characters 45 | * [JavaScript](https://google.github.io/styleguide/jsguide.html#formatting-column-limit): 80 characters 46 | * [Python](https://google.github.io/styleguide/pyguide.html#32-line-length): 80 characters 47 | * [Swift](https://google.github.io/swift/#column-limit): 100 characters 48 | 49 | -------------------------------------------------------------------------------- /engineering-code/writing-code/README.md: -------------------------------------------------------------------------------- 1 | # Writing Code 2 | 3 | * The moment you write code, it is already technical debt. 4 | * Every new line of code is an investment 5 | * How do you manage your investment? 6 | 7 | ## Goals for writing code 8 | 9 | Balance writing for longevity. 10 | 11 | * How long will your code last? 12 | 13 | Write for clarity. 14 | 15 | Write for simplicity. 16 | 17 | * For the long term: simplicity out lives complexity. 18 | 19 | Write knowing that it will be read later. 20 | 21 | More time will be spent reading and understanding code, than writing it. Reading to writing ratio is really high. 22 | 23 | Write so that it is easy to understand. 24 | 25 | Write to reduce "WTFs/minute". source: [WTFs/minute is the only valid measurement of code quality](http://www.osnews.com/story/19266/WTFs\_m) 26 | 27 | Write with the aim to reduce surprises. 28 | 29 | Write code that is easy to test and reproduce. 30 | 31 | Write code that is meant to be read, and not meant to solve a problem. 32 | 33 | Don't write complex code. Write simple code. 34 | 35 | Becareful of death by a thousand cuts/commits/diffs. It is very easy to lose track of the architecture. 36 | 37 | Reduce create technical debt. 38 | 39 | See [Reviewing Code](https://app.gitbook.com/engineering-code/reviewing-code/). 40 | 41 | ## What is clarity? 42 | 43 | * Easy to read 44 | * Consistency 45 | * Naming 46 | * Conventions 47 | * Trust 48 | 49 | Goals: 50 | 51 | * Increase signal. Reduce noise. 52 | * Reduce petty philsophical disagreements. Avoid bike shed problems. 53 | * Save time, energy and resources for the larger technical problems. 54 | 55 | Examples: 56 | 57 | * You should not be wasting time, energy, and resource discussing style. Quickly come to an agreement and stick with it. Use a linter. Don't increase noise. 58 | -------------------------------------------------------------------------------- /engineering-code/writing-code/bad-practices.md: -------------------------------------------------------------------------------- 1 | # Bad Practices 2 | 3 | This is a list of things I look out for in a codebase. 4 | 5 | ## Bad Practices 6 | 7 | General list of bad practices. You may see the points duplicated else where. 8 | 9 | * Not being consistent 10 | * Not paying attention to commit history 11 | * Not isolating work into separate commits 12 | * Not following style guides 13 | * Committing commented code 14 | * Long functions 15 | * Spaghetti code 16 | * Bad naming 17 | * Magic constants 18 | * Skipping pre commit hooks 19 | * Skipping already existing tests without good reasons 20 | 21 | ## Code smells 22 | 23 | * A lot of conditions \("if" statements, or "switch" statements\) 24 | * Logic is not properly structured 25 | * Should consider a factory 26 | * See [Be careful of enum in switch statements](becareful-of-enum-in-switch-statements.md) 27 | * A lot of hacks 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /engineering-code/writing-code/be-careful-about-chaining-conditions.md: -------------------------------------------------------------------------------- 1 | # Be careful about chaining conditions 2 | 3 | This may dangerous, because it's harder to debug. 4 | 5 | For example: 6 | 7 | ```javascript 8 | return 9 | expected.key === actual.key && 10 | expected.value === actual.value && 11 | expected.concern === actual.concern; 12 | ``` 13 | 14 | If we broke it down to multiple `if` conditions it makes it easier to debug. 15 | 16 | ```javascript 17 | if (expected.key === actual.key) { 18 | return false; 19 | } 20 | 21 | if (expected.value === actual.value) { 22 | return false; 23 | } 24 | 25 | if (expected.concern === actual.concern) { 26 | return false; 27 | } 28 | 29 | return true; 30 | ``` 31 | 32 | Pros for using multiple conditions: 33 | 34 | * If you use `Exception`s instead of `return` statements, you can easily get a stack trace which is extremly useful. 35 | * Easier usage of `print` style debugging. 36 | 37 | Cons for using multiple `if` conditions: 38 | 39 | * Longer function statements. 40 | 41 | -------------------------------------------------------------------------------- /engineering-code/writing-code/becareful-of-chains-of-ternary-operators.md: -------------------------------------------------------------------------------- 1 | # Be careful of chaining ternary operators 2 | 3 | A chain of ternary operators make it hard to judge what is happening. 4 | 5 | Do not do this: 6 | 7 | ```text 8 | $size = $button === 'submit' ? 'big : 'small'; 9 | $text = $button === 'submit' 10 | ? $l10n->getBigText() 11 | : $l10n->getSmallText(); 12 | $action = $button === 'submit' 13 | ? '/submit' 14 | : '/reset' 15 | ``` 16 | 17 | Do this: 18 | 19 | ```text 20 | if ($button === 'submit') { 21 | $size = 'big'; 22 | $text = $l10n->getBigText(); 23 | $action = '/submit'; 24 | } else { 25 | $size = 'small'; 26 | $text = $l10n->getSmallText(); 27 | $action = '/reset'; 28 | } 29 | ``` 30 | 31 | ## 32 | 33 | -------------------------------------------------------------------------------- /engineering-code/writing-code/becareful-of-enum-in-switch-statements.md: -------------------------------------------------------------------------------- 1 | # Be careful of enum in switch statements 2 | 3 | If an `enum` is in more than one `switch` statement. Consider making a factory class which returns singleton class for the enum value. 4 | 5 | For example, if you only have one instance of this, its ok: 6 | 7 | ```text 8 | function getName(Color $color) { 9 | switch($color) { 10 | case Color::RED: 11 | return 'Red'; 12 | 13 | case Color::BLUE: 14 | return 'Blue'; 15 | } 16 | } 17 | ``` 18 | 19 | But if you add another function, then make a factory class which returns an instance. 20 | 21 | ```text 22 | function getRGB(Color $color) { 23 | switch($color) { 24 | case Color::RED: 25 | return '#FF0000'; 26 | 27 | case Color::BLUE: 28 | return '#0000FF'; 29 | } 30 | } 31 | ``` 32 | 33 | Do this instead: 34 | 35 | ```text 36 | class ColorFactory { 37 | public static function get(ColorEnum $color) { 38 | switch ($color) { 39 | case ColorEnum::RED: 40 | return ColorRed::get(); 41 | 42 | case ColorEnum::Blue: 43 | return ColorBlue::get(); 44 | } 45 | } 46 | } 47 | 48 | class Color extends Color { 49 | public function get(ColorEnum $color) { 50 | switch ($color) { 51 | case ColorEnum::RED: 52 | return ColorRed::get(); 53 | 54 | case ColorEnum::Blue: 55 | return ColorBlue::get(); 56 | } 57 | } 58 | } 59 | 60 | abstract class ColorBase extends Color { 61 | public function getName(): string; 62 | public function getRGB(): string; 63 | } 64 | 65 | final class ColorRed extends Color { 66 | public function getID(): Color { 67 | return Color::RED; 68 | } 69 | 70 | public function getName(): string { 71 | return 'Red'; 72 | } 73 | 74 | public function getRGB(): string { 75 | return '#FF0000'; 76 | } 77 | } 78 | 79 | final class ColorBlue extends Color { 80 | public function getID(): Color { 81 | return Color::Blue; 82 | } 83 | 84 | public function getName(): string { 85 | return 'Blue'; 86 | } 87 | 88 | public function getRGB(): string { 89 | return '#0000FF'; 90 | } 91 | } 92 | 93 | function main() { 94 | $color = ColorFactory::get($color) 95 | return $color->getName(); 96 | } 97 | ``` 98 | 99 | Yes there is more code, but its easier to manage the code. When adding a new Enum you are not required to remember which files to update, the compiler will catch any undefined functions. 100 | 101 | -------------------------------------------------------------------------------- /engineering-code/writing-code/commenting/README.md: -------------------------------------------------------------------------------- 1 | # Commenting 2 | 3 | Comments increase cognitive load. Comments are a form of technical debt. 4 | 5 | There can be both good and bad comments. 6 | 7 | Comment on the "why" things work the way they are. 8 | 9 | Good comments: 10 | 11 | * Legal/regulatory explanations on why it does what it does 12 | 13 | Leave links to other resources: 14 | 15 | * Wikis 16 | * GitHub Issues or Pull Requests 17 | * Documentation 18 | 19 | If comments are long and are not critical to be in the code, create a linkable resource, and use the link instead. 20 | 21 | Dangers of bad comments: 22 | 23 | * Comments can be outdated and wrong 24 | 25 | -------------------------------------------------------------------------------- /engineering-code/writing-code/commenting/dont-commit-commented-code.md: -------------------------------------------------------------------------------- 1 | # Don't commit commented code 2 | 3 | Always delete commented code. It can be easily accessible via your source control. 4 | 5 | Commented code increase cognitive load. 6 | 7 | If old code needs to be accessed, it can be referenced via source control. 8 | 9 | Reasons for removing: 10 | 11 | * Increases cognitive load 12 | * Commented code maybe outdated 13 | * Old code can be accessed via source 14 | 15 | References: 16 | 17 | * [https://kentcdodds.com/blog/please-dont-commit-commented-out-code](https://kentcdodds.com/blog/please-dont-commit-commented-out-code) 18 | * [https://softwareengineering.stackexchange.com/questions/377186/why-is-it-wrong-to-comment-out-code-and-then-gradually-remove-it-to-keep-track-o](https://softwareengineering.stackexchange.com/questions/377186/why-is-it-wrong-to-comment-out-code-and-then-gradually-remove-it-to-keep-track-o) 19 | 20 | -------------------------------------------------------------------------------- /engineering-code/writing-code/consistency.md: -------------------------------------------------------------------------------- 1 | # Consistency 2 | 3 | Consistency helps to aid the reading and writing process. 4 | 5 | To aid with consistency: 6 | 7 | * precommit hooks 8 | * Use style guides 9 | 10 | ## PreCommit Hooks 11 | 12 | * [https://githooks.com/](https://githooks.com/) 13 | 14 | Tools: 15 | 16 | * [https://pre-commit.com/](https://pre-commit.com/) 17 | * JavaScript 18 | * Husky 19 | * [https://github.com/typicode/husky](https://github.com/typicode/husky) 20 | * [https://www.npmjs.com/package/husky](https://www.npmjs.com/package/husky) 21 | * Ruby 22 | * Overcommit 23 | * [https://github.com/sds/overcommit](https://github.com/sds/overcommit) 24 | 25 | ## Style Guides 26 | 27 | #### JavaScript 28 | 29 | Linter 30 | 31 | * [https://eslint.org/](https://eslint.org/) 32 | * [https://eslint.org/docs/rules/](https://eslint.org/docs/rules/) 33 | * [https://prettier.io/](https://prettier.io/) 34 | 35 | Style Guide 36 | 37 | * [https://github.com/airbnb/javascript](https://github.com/airbnb/javascript) 38 | 39 | -------------------------------------------------------------------------------- /engineering-code/writing-code/dont-commit-commented-code.md: -------------------------------------------------------------------------------- 1 | # Don't commit commented code 2 | 3 | Always delete commented code. It can be easily accessible via your source control. 4 | 5 | Commented code increase cognitive load. 6 | 7 | If old code needs to be accessed, it can be referenced via source control. 8 | 9 | Reasons for removing: 10 | 11 | * Increases cognitive load 12 | * Commented code maybe outdated 13 | * Old code can be accessed via source 14 | 15 | References: 16 | 17 | * [https://kentcdodds.com/blog/please-dont-commit-commented-out-code](https://kentcdodds.com/blog/please-dont-commit-commented-out-code) 18 | * [https://softwareengineering.stackexchange.com/questions/377186/why-is-it-wrong-to-comment-out-code-and-then-gradually-remove-it-to-keep-track-o](https://softwareengineering.stackexchange.com/questions/377186/why-is-it-wrong-to-comment-out-code-and-then-gradually-remove-it-to-keep-track-o) 19 | 20 | -------------------------------------------------------------------------------- /engineering-code/writing-code/exit-early.md: -------------------------------------------------------------------------------- 1 | # Exit Early 2 | 3 | Discourage: 4 | 5 | ```javascript 6 | if () { 7 | ... 8 | return false; 9 | } else { 10 | ... 11 | return true; 12 | } 13 | ``` 14 | 15 | Encourage: 16 | 17 | ```javascript 18 | if () { 19 | ... 20 | return false; 21 | } 22 | 23 | ... 24 | 25 | return true; 26 | ``` 27 | 28 | Reasons to exit early: 29 | 30 | * Process of elimination 31 | * Reduces cognitive load 32 | * Reduces indents 33 | * We know success will always be at the end 34 | * Structures your functions: 35 | * Validation/error handling at the beginning 36 | * Successful at the end 37 | 38 | Resources 39 | 40 | * [https://news.ycombinator.com/item?id=16678209](https://news.ycombinator.com/item?id=16678209) 41 | * [https://www.itamarweiss.com/personal/2018/02/28/return-early-pattern.html](https://www.itamarweiss.com/personal/2018/02/28/return-early-pattern.html) 42 | * [https://softwareengineering.stackexchange.com/questions/18454/should-i-return-from-a-function-early-or-use-an-if-statement](https://softwareengineering.stackexchange.com/questions/18454/should-i-return-from-a-function-early-or-use-an-if-statement) 43 | * [https://blog.timoxley.com/post/47041269194/avoid-else-return-early](https://blog.timoxley.com/post/47041269194/avoid-else-return-early) 44 | 45 | Arguments against: 46 | 47 | * single exit point 48 | * [https://www.tomdalling.com/blog/coding-tips/coding-tip-have-a-single-exit-point/](https://www.tomdalling.com/blog/coding-tips/coding-tip-have-a-single-exit-point/) 49 | 50 | -------------------------------------------------------------------------------- /engineering-code/writing-code/hacks.md: -------------------------------------------------------------------------------- 1 | # Hacks 2 | 3 | Hacks are referring to edge cases which are handled pretty much inline. Hacks are a bandaid. They can't be used to solve a larger problem. 4 | 5 | It's ok to have one or two hacks, as long as they are commented, and documented about why they are needed. 6 | 7 | Hacks are convenient when used appropriately. Hacks help to work around minor edge cases, and should be applied with some restraint. 8 | 9 | But when hacks multiply, and the edge cases are handled in many places, then it gets messy. Be careful of too many hacks. Then it becomes technical debt. 10 | 11 | When there are too many hacks, you are most likely required to reimplement the architecture. 12 | 13 | -------------------------------------------------------------------------------- /engineering-code/writing-code/logs.md: -------------------------------------------------------------------------------- 1 | # Logs 2 | 3 | Also applies to: 4 | 5 | * Deployment History 6 | * Audit Logs 7 | * Paper trails 8 | 9 | Consider including: 10 | 11 | * Time 12 | * Script used to fire the log 13 | * Server/Hostname the log was created 14 | * Where this log was fired 15 | * Things that make it easy to find the source of the log 16 | 17 | -------------------------------------------------------------------------------- /engineering-code/writing-code/make-it-easy-to-reproduce.md: -------------------------------------------------------------------------------- 1 | # Make It Easy To Reproduce 2 | 3 | Write code that is easy to reproduce the output. If it's easy to reproduce the output, it's easy to test. 4 | 5 | * The easier it is to reproduce. 6 | * The easier it is to test. 7 | * The easier it is to test. 8 | * The more you will test it. 9 | 10 | -------------------------------------------------------------------------------- /engineering-code/writing-code/naming/README.md: -------------------------------------------------------------------------------- 1 | # Naming 2 | 3 | > There are only two hard things in Computer Science: cache invalidation, naming things, and off by one errors. 4 | 5 | Naming is hard. The goal of this document is to help with naming. 6 | 7 | ## Dates 8 | 9 | ### Year Month Day 10 | 11 | Allows to sort way easier 12 | 13 | [https://timestamps.aizatto.com/](https://timestamps.aizatto.com/) 14 | 15 | ## Common Names 16 | 17 | #### content 18 | 19 | Used for user stuff like user generated content, or the content of blog posts 20 | 21 | #### title 22 | 23 | Used for documents, or posts. 24 | 25 | -------------------------------------------------------------------------------- /engineering-code/writing-code/naming/create-searchable-names.md: -------------------------------------------------------------------------------- 1 | # Create Searchable Names 2 | 3 | You will always use tools to do code lookup \(grep, ack, GitHub\). 4 | 5 | Making them easier to find, increases their visibility. 6 | 7 | ## Example: "unshareable" vs "unsharable" 8 | 9 | Neither "unshareable" or "unsharable" are real English words. 10 | 11 | unshareable: 12 | 13 | * google \(define:unshareable\), nothing 14 | * [https://www.dictionary.com/browse/unshareable](https://www.dictionary.com/browse/unshareable) exists 15 | * [https://www.yourdictionary.com/unshareable](https://www.yourdictionary.com/unshareable) Impossible to share. 16 | * [https://www.oxfordlearnersdictionaries.com/spellcheck/english/?q=unshareable](https://www.oxfordlearnersdictionaries.com/spellcheck/english/?q=unshareable) does not exist 17 | * [https://www.definitions.net/definition/unshareable](https://www.definitions.net/definition/unshareable) Impossible to share. 18 | * my macOS says "unshareable" is a spelling mistake, without a good suggestion 19 | * does not exist in `/usr/share/dict/words` 20 | 21 | unsharable: 22 | 23 | * google \(define:unsharable\), nothing 24 | * [https://www.dictionary.com/browse/unsharable](https://www.dictionary.com/browse/unsharable) exists 25 | * [https://www.yourdictionary.com/unsharable](https://www.yourdictionary.com/unsharable) fails 26 | * [https://www.definitions.net/definition/unsharable](https://www.definitions.net/definition/unsharable) does not exist 27 | * my macOS says "unsharable" is legit, but if you right-click and do "Look up in Dictionary" it doesn't pull out anything 28 | * exists in `/usr/share/dict/words` 29 | 30 | Resolution: chose "unshareable" 31 | 32 | * Visually looks correct 33 | * Can be found when searching for "share" 34 | 35 | ## References 36 | 37 | * [Clean Code](https://amzn.to/2EG7ypq): Meaningful Names > Use Searchable Names 38 | 39 | -------------------------------------------------------------------------------- /engineering-code/writing-code/naming/versioning.md: -------------------------------------------------------------------------------- 1 | # Versioning 2 | 3 | ### String 4 | 5 | ```text 6 | $product-$stage-$name 7 | ``` 8 | 9 | ### Semantic Versioning \(Numeric\) 10 | 11 | [https://semver.org/](https://semver.org/) 12 | 13 | ```bash 14 | $major.$minor.$patch 15 | ``` 16 | 17 | #### Calendar Versioning \(CalVer\) 18 | 19 | [https://calver.org/](https://calver.org/) 20 | 21 | ```bash 22 | YYYY.MM.DD 23 | ``` 24 | 25 | Mix: 26 | 27 | ```bash 28 | $major.$minor.YYYYMMDD.$patch 29 | ``` 30 | 31 | -------------------------------------------------------------------------------- /engineering-code/writing-code/other-rules.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Rules I haven't formatted properly 3 | --- 4 | 5 | # Other rules 6 | 7 | ## 2 biggest problems in programming 8 | 9 | * Naming 10 | * Caching 11 | * Off By One Errors 12 | 13 | ### Naming Good Names \(files, directories, classes, methods\) 14 | 15 | #### Avoid Single Letter Variable Names 16 | 17 | ## Leave It Better Than You Left It 18 | 19 | ## Small Functions 20 | 21 | ## Input > Process > Output 22 | 23 | ### Output can be an Input for another step 24 | 25 | ### Measure Input > Process > Output 26 | 27 | What to Measure: 28 | 29 | Input/Output: 30 | 31 | * Number of Units 32 | * Before/After state of the process 33 | 34 | Process: 35 | 36 | * How long did it take 37 | * How much processing time is used 38 | * How much memory did it use 39 | * How much bandwidth was used 40 | 41 | Output: 42 | 43 | * How many were successful 44 | * How many failed 45 | * Why did they fail 46 | * Which failed 47 | 48 | ### Funnels 49 | 50 | When there are many Input > Process > Output, then you have a funnel. 51 | 52 | ### Break down a Proces 53 | 54 | ## Handling Errors 55 | 56 | ### Silent Errors vs Fataling 57 | 58 | ### Always print IDs 59 | 60 | ```php 61 | if ($ent === null) { 62 | printf("Unable to load ent %d", $ent_id); 63 | exit(1); 64 | } 65 | ``` 66 | 67 | ## Write code knowing you will be blamed 68 | 69 | ## 70 | 71 | ## Tuples 72 | 73 | Sometimes we need to pair two variables together to represent a single datatype. For example `tuple(MetricID, Partner)` which tells us that this represents the `MetricID` for a given `Partner`. 74 | 75 | You may want to consider 2 data structures for this: 76 | 77 | * `Metric(MetricID)` 78 | * `MetricPartner(Metric/MetricID, Partner)` 79 | 80 | It is easier moving from a data structure that manages one data type, to a data structure that manages 2. 81 | 82 | Consider having a function in `Metric` which takes in a `Partner` and returns a `MetricPartner`. For example: 83 | 84 | ```text 85 | $metric = new Metric($metric_id); 86 | $metric_partner = $metric->withPartner($partner); 87 | ``` 88 | 89 | ## Deep inheritance trees are bad 90 | 91 | ## Be careful of parameter bags 92 | 93 | ## Single Responsibility Principle \(SRP\) 94 | 95 | ## Use intention revealing names 96 | 97 | ## 2 hardest parts of programming 98 | 99 | ## Write code that is meant to be read, and not meant to solve a problem 100 | 101 | ## Duplicating calls is ok. 102 | 103 | ## Monitoring/Alerts 104 | 105 | * How many lines of code are being added? 106 | * Are there alerts on highly sensitive parts of the codebase? 107 | 108 | ## For user input: consider using Regexes instead of String comparisons 109 | 110 | Pros: 111 | 112 | * More flexibility in matching strings 113 | * Regexes don't require precise string matching 114 | * Can easily match more than one string, for example to match all branches where `node8` work is done: `/\.*node8/` 115 | 116 | Cons: 117 | 118 | * Regexes are slightly more time consuming 119 | 120 | For example: 121 | 122 | ```javascript 123 | regex.matches(input) 124 | ``` 125 | 126 | vs 127 | 128 | ```text 129 | inputs.split(',').some((input) => input === expected); 130 | ``` 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /engineering-code/writing-code/scripts.md: -------------------------------------------------------------------------------- 1 | # Scripts 2 | 3 | When writing scripts, always leave a file header about what the script does, or link to a proper resource. 4 | 5 | Add context on: 6 | 7 | * How this script is used 8 | * Why this script is needed 9 | * How to run this script 10 | 11 | Generally standalone scripts may leave out a lot of context. 12 | 13 | Example of a decent script: 14 | 15 | ```bash 16 | !/bin/sh 17 | # Reencrypts the keys in our database. 18 | # This is necessary because .... 19 | # http://www.example.com/wiki/details 20 | ``` 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /engineering-code/writing-code/time.md: -------------------------------------------------------------------------------- 1 | # Time 2 | 3 | I have a preference to use ISO8601 because it's more human readable than unix time. Especially if we are transferring over the web/JSON, it doesn't really matter. 4 | 5 | ```typescript 6 | 2020-03-06T03:05:32.760Z 7 | 1583463932760 8 | ``` 9 | 10 | ```javascript 11 | new Date().toISOString().length // 24 12 | Date().now().toString().length // 13 13 | ``` 14 | 15 | -------------------------------------------------------------------------------- /engineering-code/writing-code/write-code-knowing-it-will-be-refactored.md: -------------------------------------------------------------------------------- 1 | # Write Code Knowing It Will Be Refactored 2 | 3 | Code will always be refactored. Accept this. 4 | 5 | When you know that code will be refactored, it's best to balance writing it so that it will be easy to be refactored. 6 | 7 | -------------------------------------------------------------------------------- /engineering-code/writing-code/write-code-knowing-you-will-be-blamed.md: -------------------------------------------------------------------------------- 1 | # Write Code Knowing You Will be Blamed 2 | 3 | Otherwise known as "maintain line history as much as possible". 4 | 5 | This is bad because if you wanted to change an argument you would have to change the line history. 6 | 7 | ```text 8 | printf("Uknown Cop %s %s %s %s", $a, $b, $c, $d); 9 | ``` 10 | 11 | This is better 12 | 13 | ```text 14 | printf( 15 | "Unkown Cop %s %s %s %s", 16 | $a, 17 | $b, 18 | $c, 19 | $d, 20 | ); 21 | ``` 22 | 23 | Resolution: 24 | 25 | * Always leave trailing commas 26 | * For long arguments, consider splitting them over multiple lines 27 | 28 | -------------------------------------------------------------------------------- /engineering-code/writing-code/writing-for-a-code-base-of-1-000-000+-lines.md: -------------------------------------------------------------------------------- 1 | # Writing for a code base of 1,000,000+ Lines 2 | 3 | Writing code for a 1,000 line application is very different from writing for 1,000,000 line application. 4 | 5 | When the codebase becomes so large, you simply cannot remember everything. 6 | 7 | You rely on naming, conventions, and trust. 8 | 9 | ### Conventions 10 | 11 | Understand the conventions already used, and stick to them. It makes it easier to read the code, and get it reviewed. 12 | 13 | In a large code base, coding conventions may be different from team to team. 14 | 15 | ### Consistency 16 | 17 | Use linters. 18 | 19 | ### Don't waste time discussing style 20 | 21 | Use linters. 22 | 23 | If a discussion about style comes up, quickly agree on something, and implement it in your linter. 24 | 25 | ### Trust in the code base 26 | 27 | You will always be using a library written by someone else. You have to trust that it says it does what it does. If it doesn't, then you have to dive deeper down the rabbit hole. 28 | 29 | -------------------------------------------------------------------------------- /engineering-management/1-1s/README.md: -------------------------------------------------------------------------------- 1 | # 1:1s 2 | 3 | Also called: 4 | 5 | * 1 on 1s 6 | 7 | ## Purpose 8 | 9 | Purposes: 10 | 11 | * Create human connection between you and your manager 12 | * Regular opportunity for you to speak privately with your manager about whatever needs discussing 13 | 14 | Great managers notice when your normal energy level changes, and will hopefully care enough to ask you about it 15 | 16 | * Report has to take responsibility for good 1:1s as well 17 | * Try to take it out of normal working behavior 18 | * Have Skip-Level Meetings 19 | * Meet with your managers manager 20 | * Meet with your reports report 21 | 22 | ## My Personal 1:1 Practice 23 | 24 | * Keep notes about each 1:1 25 | * I personally use my own tool Logbook 26 | * Timestamp with [https://timestamps.aizatto.com/](https://timestamps.aizatto.com/) 27 | * You can use Google Docs 28 | * I share discussion points before hand 29 | * I share some of my notes of our meeting in our private direct messages 30 | * Currently a private message in Slack 31 | 32 | Goals: 33 | 34 | * Create actionable items 35 | * Review past actionable items 36 | 37 | ## List of running 1:1 Themes 38 | 39 | * Calibration 40 | * Expectations 41 | * Task Management 42 | * Mentorship / Learning / Growing 43 | * Teams 44 | * Leadership 45 | * Career 46 | 47 | ## Resources 48 | 49 | * HackerNews 50 | * Search 51 | * [https://hn.algolia.com/?q=1+on+1](https://hn.algolia.com/?q=1+on+1) 52 | * VGraupera / 1on1-questions 53 | * [https://news.ycombinator.com/item?id=22341138](https://news.ycombinator.com/item?id=22341138) 54 | * [https://github.com/VGraupera/1on1-questions](https://github.com/VGraupera/1on1-questions) 55 | * [Ask HN: What do you do in your 1-on-1s with your direct reports?](https://news.ycombinator.com/item?id=18264245) 56 | * [Ask HN: What do you talk about in 1-on-1 with manager?](https://news.ycombinator.com/item?id=18715351) 57 | * [https://getlighthouse.com/blog/effective-1-on-1-meetings/](https://getlighthouse.com/blog/effective-1-on-1-meetings/) 58 | 59 | Tools: 60 | 61 | * Asana 62 | * [https://asana.com/guide/examples/exec/one-on-ones](https://asana.com/guide/examples/exec/one-on-ones) 63 | * [https://blog.asana.com/2017/12/one-on-one-meeting-agenda/](https://blog.asana.com/2017/12/one-on-one-meeting-agenda/) 64 | * [https://wavelength.asana.com/workstyle-what-is-a-1-1/](https://wavelength.asana.com/workstyle-what-is-a-1-1/) 65 | * [https://academy.asana.com/one-on-ones-meetings](https://academy.asana.com/one-on-ones-meetings) 66 | * Lattice 67 | * [https://lattice.com/one-on-ones](https://lattice.com/one-on-ones) 68 | 69 | -------------------------------------------------------------------------------- /engineering-management/1-1s/calibration.md: -------------------------------------------------------------------------------- 1 | # Calibration 2 | 3 | * First 6 months is calibrating 4 | * Calibration is used for expectations 5 | * Line chart 6 | * Axis of time vs ability 7 | * Collect data points over the 6 months 8 | * Calibrating 9 | * Ability to deliver 10 | * Quality of delivery 11 | * Ability to take leadership/ownership 12 | 13 | -------------------------------------------------------------------------------- /engineering-management/1-1s/expectations.md: -------------------------------------------------------------------------------- 1 | # Expectations 2 | 3 | 4 | 5 | * Competency Matrix 6 | * [https://github.com/meetup/engineering-roles/](https://github.com/meetup/engineering-roles/) 7 | * [https://duo.com/assets/pdf/engineering-career-ladder.pdf](https://duo.com/assets/pdf/engineering-career-ladder.pdf) 8 | * [https://levels.patreon.com](https://levels.patreon.com/) 9 | * [https://ladder.glossier.io](https://ladder.glossier.io/) 10 | 11 | -------------------------------------------------------------------------------- /engineering-management/1-1s/mentorship-learning-growing.md: -------------------------------------------------------------------------------- 1 | # Mentorship / Learning / Growing 2 | 3 | * What are their sources of learning 4 | * "Challenge Donut" 5 | * [https://logbook.build.my/entries/8d0a5616-156c-4a65-ba0c-36f259a1386d/](https://logbook.build.my/entries/8d0a5616-156c-4a65-ba0c-36f259a1386d/) 6 | * Comfort Zone 7 | * Challenge Zone 8 | * Panic Zone 9 | 10 | -------------------------------------------------------------------------------- /engineering-management/1-1s/task-management.md: -------------------------------------------------------------------------------- 1 | # Task Management 2 | 3 | SMART 4 | 5 | * Specific 6 | * Measurable 7 | * Achievable 8 | * Realistic 9 | * Time Sensitive 10 | 11 | [https://en.wikipedia.org/wiki/SMART\_criteria](https://en.wikipedia.org/wiki/SMART_criteria)[https://personalmba.com/most-important-tasks/](https://personalmba.com/most-important-tasks/)[https://personalmba.com/4-methods-of-completion/](https://personalmba.com/4-methods-of-completion/) 12 | 13 | -------------------------------------------------------------------------------- /engineering-management/1-1s/teams.md: -------------------------------------------------------------------------------- 1 | # Teams 2 | 3 | ### Tuckman's stages of group development 4 | 5 | [https://en.wikipedia.org/wiki/Tuckman%27s\_stages\_of\_group\_development](https://en.wikipedia.org/wiki/Tuckman%27s_stages_of_group_development) 6 | 7 | 1. Forming 8 | 2. Storming 9 | 3. Norming 10 | 4. Performing 11 | 12 | Optional: 13 | 14 | 1. Swarming 15 | 16 | ### Staying on the path to high performing teams. 17 | 18 | [https://lethain.com/durably-excellent-teams](https://lethain.com/durably-excellent-teams) 19 | 20 | 1. falling behind 21 | 2. treading water 22 | 3. repaying debt 23 | 4. innovating 24 | 25 | -------------------------------------------------------------------------------- /engineering-management/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | For both managers and people being managed. Help me make it perfect. Work In 4 | Progress. 5 | --- 6 | 7 | # Engineering Management 8 | 9 | Disclaimer: 10 | 11 | * My Personal Bias 12 | 13 | {% embed url="https://docs.google.com/presentation/d/1mJfFzPHwfa8gDkmOFnPQJWxt4d9wzSfV6-dqlwF5SW4/edit#slide=id.g44b684c36d_0_0" %} 14 | 15 | ## How do we make this a success? 16 | 17 | This is a key question I ask with everyone I work with: 18 | 19 | > How do we make this a success? 20 | 21 | ## Define expectations 22 | 23 | * [What do you expect from a manager?](https://www.deepthoughtapp.com/en/questions/what-do-you-expect-from-a-manager/) 24 | * [What do you not expect from a manager?](https://www.deepthoughtapp.com/en/questions/what-do-you-not-expect-from-a-manager/) 25 | * [What do you expect from a leader?](https://www.deepthoughtapp.com/en/questions/what-do-you-expect-from-a-leader/) 26 | * [What do you not expect from a leader?](https://www.deepthoughtapp.com/en/questions/what-do-you-not-expect-from-a-leader/) 27 | * [How do you want to be managed?](https://www.deepthoughtapp.com/en/questions/how-do-you-want-to-be-managed/) 28 | 29 | #### What do you expect from a manager? 30 | 31 | 1. Listen, read between the lines 32 | 1. Sounding Board 33 | 2. Help reinterpret my thoughts 34 | 2. Growth Mindset 35 | 3. Feedback 36 | 1. Provides Growth Opportunities 37 | 4. Look Out For My Blind Spots 38 | 5. Have Each Others Back 39 | 6. Dependability 40 | 7. Show Appreciation 41 | 8. Provide Inspiration 42 | 9. Provide Larger Picture View 43 | 10. Leadership 44 | 11. Some life mentorship/coaching 45 | -------------------------------------------------------------------------------- /engineering-management/hiring.md: -------------------------------------------------------------------------------- 1 | # Hiring 2 | 3 | ## Assessing an individual 4 | 5 | Goal: Assessing wether they can deliver results 6 | 7 | Two kinds of assessment: 8 | 9 | 1. Technical Assessment 10 | 2. Soft Skills / Personality / Culture 11 | 12 | ### Technical Assessment 13 | 14 | Assess, can they do the job. 15 | 16 | There are many styles of interviewing: 17 | 18 | * Algorithms 19 | * Architecture 20 | * Take home assignment 21 | 22 | #### Algorithms 23 | 24 | Benefits people who are familiar with algorithms \(recent grads\) 25 | 26 | #### Take Home Assignment 27 | 28 | Benefits people who have the time. 29 | 30 | Should be time limited. 31 | 32 | #### Trial 33 | 34 | ### Soft Skills / Personality / Cultural 35 | 36 | Assess, how do they do the job. 37 | 38 | * What is their personality like, can you work with the person? 39 | 40 | -------------------------------------------------------------------------------- /engineering-management/interviewing-candidates.md: -------------------------------------------------------------------------------- 1 | # Interviewing Candidates 2 | 3 | General Questions to ask them: 4 | 5 | * Why are you leaving your job? 6 | * What are you looking for in your new job? 7 | * What would you like to learn? 8 | * How did you work as a team? 9 | * What work are you most proud of? 10 | * What is your most technically challenging work? 11 | * What is your largest impactful work? 12 | 13 | If Senior: 14 | 15 | * What are your responsibilities as a senior engineer? 16 | * What makes a person a senior engineer? 17 | 18 | -------------------------------------------------------------------------------- /engineering-management/messenger-groups.md: -------------------------------------------------------------------------------- 1 | # Messenger Groups 2 | 3 | * 1 messenger group for serious discussions, asking questions, etc 4 | * 1 messenger group for FYI/announcements 5 | * 1 messenger group for social/random 6 | 7 | -------------------------------------------------------------------------------- /engineering-management/new-reports.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: What to do when working with new reports. 3 | --- 4 | 5 | # New Reports 6 | 7 | What to do when working with new reports. 8 | 9 | * Context Sharing 10 | * Sharing Context 11 | * Sharing Purpose 12 | * Sharing Mission 13 | * Sharing Standards, and Expectations 14 | * Build Trust and Rapport 15 | * Important in first 1:1 16 | * Create a 30/60/90-Day Plan 17 | * Encourage Participation By Updating The New Hire Documentation 18 | * Communicate Your Style and Expectations 19 | * Get Feedback From Your New Hire 20 | * Identifying Knowledge That They Need To Learn 21 | * Look for their blind spots 22 | * Required to bring them up to speed 23 | * Show them tools, tips and tricks 24 | * “Fresh pair of eyes” 25 | * Look for my blind spots 26 | * Ask them suggestions for new tools 27 | 28 | ## The First 1:1 Getting To Know Them 29 | 30 | * Get to know them as a person 31 | * Family 32 | * Hobbies, Interests, Passions 33 | * History 34 | * What motivates them? 35 | * Why did they join the company? 36 | * How long ago did they join the company? 37 | * Are they achieving the goals they set out when the joined? 38 | * Purpose? 39 | * What keeps them in the company? 40 | * What keeps them in the team? 41 | * What would they change about the company? 42 | * Career goals? 43 | * Ask for feedback on company 44 | * Track problems 45 | * Track possible improvements 46 | * Ask to provide solutions 47 | * “Fresh pair of eyes” 48 | 49 | ## **30/60/90 Day Plan** 50 | 51 | 30 Day Plan 52 | 53 | * Identify any issues with them in the company 54 | * Be familiar with the existence of tools and standards 55 | * They should know how to commit code by now 56 | * On boarding session conducted 57 | * Teaching them the “unknown unknowns” 58 | 59 | 90 Day Plan 60 | 61 | * Should have no problems with 62 | * Coding 63 | * Tools 64 | * Fully familiar with frameworks 65 | * Majority of uncertainty removed 66 | * Performance Review should be “Meeting Expectations” 67 | 68 | Review the Employee 69 | 70 | * Is this person creating more problems? 71 | * Is your time spent with this person better spent on other things? 72 | 73 | Review Yourself 74 | 75 | * Are you giving proper mentorship 76 | 77 | -------------------------------------------------------------------------------- /engineering-management/resources.md: -------------------------------------------------------------------------------- 1 | # Resources 2 | 3 | Google’s: The Five Keys to a Successful Team 4 | 5 | * [https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/](https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/ 6 | ) 7 | * [https://www.deepthoughtapp.com/packages/the-five-keys-to-a-successful-google-team-59/](https://www.deepthoughtapp.com/packages/the-five-keys-to-a-successful-google-team-59/ 8 | ) 9 | 10 | Raylene’s Eng Team Handbook 11 | 12 | * [https://github.com/raylene/eng-handbook/blob/master/README.md](https://github.com/raylene/eng-handbook/blob/master/README.md 13 | ) 14 | 15 | reWork: With Google 16 | 17 | The Manager’s Path 18 | 19 | * [https://amzn.to/2ND0tVU](https://amzn.to/2ND0tVU) 20 | * [https://www.deepthoughtapp.com/packages/the-managers-path-a-guide-for-tech-leaders-navigating-growth-and-change-354/](https://www.deepthoughtapp.com/packages/the-managers-path-a-guide-for-tech-leaders-navigating-growth-and-change-354/ 21 | ) 22 | 23 | HBR’s 10 Must Reads For New Managers 24 | 25 | * [https://amzn.to/2q4W4S7](https://amzn.to/2q4W4S7) 26 | * [https://www.deepthoughtapp.com/packages/hbrs-10-must-reads-for-new-managers-363/](https://www.deepthoughtapp.com/packages/hbrs-10-must-reads-for-new-managers-363/ 27 | ) 28 | 29 | High Output Management 30 | 31 | * [https://amzn.to/2Ow008v](https://amzn.to/2Ow008v) 32 | * [https://www.deepthoughtapp.com/packages/high-output-management-364/](https://www.deepthoughtapp.com/packages/high-output-management-364/) 33 | 34 | The Making of a Manager 35 | 36 | * [https://amzn.to/2P6oFUI](https://amzn.to/2P6oFUI) 37 | 38 | An Elegant Puzzle: Systems of Engineering Management 39 | 40 | * [https://amzn.to/35U7Ilw](https://amzn.to/35U7Ilw) 41 | 42 | Random: 43 | 44 | * [https://github.com/charlax/engineering-management](https://github.com/charlax/engineering-management) 45 | 46 | -------------------------------------------------------------------------------- /getting-into-tech/README.md: -------------------------------------------------------------------------------- 1 | # Getting into Tech 2 | 3 | ## How do you want to get involved? 4 | 5 | * Just Technical? 6 | * Front end? 7 | * Back end? 8 | * Mixed with Soft Skills? 9 | * Engineering Manager? 10 | * Product Manager? 11 | * Technical Program Manager? 12 | 13 | Join meetups 14 | 15 | * Talk with people 16 | * [https://build.my/](https://build.my/) 17 | 18 | ## If you are a woman: 19 | 20 | * It's a good time to be in tech 21 | * Lots of focus to get more women in tech 22 | * Talk to other women 23 | * Join women meetup focused groups 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /getting-into-tech/terminology.md: -------------------------------------------------------------------------------- 1 | # Terminology 2 | 3 | | Terminology | | 4 | | :--- | :--- | 5 | | SWE | Software Engineer | 6 | 7 | -------------------------------------------------------------------------------- /interview-guide/README.md: -------------------------------------------------------------------------------- 1 | # Interview Guide 2 | 3 | Define your expectations, know yourself: 4 | 5 | * What kind of job do you want? 6 | * How much time do you want to spend on your job? 7 | * How much do you want to make? 8 | * Do you want mentorship? 9 | * What are you optimizing for? 10 | * What would you like to work on? 11 | * Industry? 12 | * Skills? 13 | * Do you have a company in mind you want to work for? 14 | * How much risk are you willing to take? 15 | * What company culture do you want? 16 | * How do you want to work? 17 | * What are your criterias? 18 | * What do you want to achieve in your career? 19 | * Do you enjoy building one thing, or many things? 20 | 21 | ## Work Arrangements 22 | 23 | | | Full Time | Part Time | 24 | | :--- | :--- | :--- | 25 | | Onsite | Full Time Onsite | Part Time Onsite | 26 | | Remote | Full Time Remote | Part Time Remote | 27 | 28 | ## Career Advice 29 | 30 | * [https://breakoutcareers.com/\#step-0](https://breakoutcareers.com/#step-0) 31 | * [weatlhfront Silicon Valley Career Guide](https://info.wealthfront.com/SiliconValleyCareerGuide.html) 32 | 33 | ## Random / Unsorted 34 | 35 | * What are the philosophies of interviewing? 36 | * What is the goal of the interview process? 37 | * Is the goal to make the candidate feel like a failure? 38 | * Is the goal to make the candidate feel like a success? 39 | * Is the goal to make the candidate feel like a success? 40 | * Will this interviewee be impactful? 41 | * Are you hiring for their strengths? 42 | * Are you not hiring for their weaknesses? 43 | * For more senior/experienced people, they will have a multitude of experiences. 44 | * What are the interviewee's strengths, and where can they be applied? where can the interviewee belong? 45 | * What other critierias do you interview for? Tardiness? Earliness? 46 | * What tools do they use? 47 | * Will they bring up the average? What average will they drop? 48 | * Take your power trip else where 49 | * Do you know how to interview senior people? 50 | * How do you think your interview process/grading is broken? 51 | * How do you set up your interviewees up for success? 52 | * Can't see the forest for the trees. 53 | * What can 100 lines of code make up for 1,000,000 lines of code? 54 | * [http://blog.triplebyte.com/how-to-pass-a-programming-interview](http://blog.triplebyte.com/how-to-pass-a-programming-interview) 55 | * Not living in the area? 56 | * Ask if you can use someones address 57 | 58 | -------------------------------------------------------------------------------- /interview-guide/faq.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | ## It is ok to decline a recruiter 4 | 5 | It is ok to decline a recruiter. You can't take all opportunities, and are going to have to decide which one to take. 6 | 7 | There will always be opportunities, as long as you keep working on yourself. 8 | 9 | * Thank them for their time. 10 | * Leave it open, that this opportunity doesn't interest you right now, and that you might reach out to them in the future. 11 | 12 | ### South East Asia 13 | 14 | * At the moment \(March 2019\), the growth is really happening in Indonesia 15 | * Easier to find rocketship companies there 16 | 17 | ### Advice for Malaysians 18 | 19 | * If you want a better salary, and better opportunities, go to Singapore 20 | 21 | -------------------------------------------------------------------------------- /interview-guide/interview-process/accepting.md: -------------------------------------------------------------------------------- 1 | # Accepting, Joining 2 | 3 | ## After Joining / Accepting / Acceptance 4 | 5 | * [https://notes.breakoutlist.com/how-to-get-the-most-out-of-working-at-a-startup-5e29b8f5f7a1](https://notes.breakoutlist.com/how-to-get-the-most-out-of-working-at-a-startup-5e29b8f5f7a1) 6 | * Define your expectations for joining the company. 7 | * Ask how you can be able to do your best? 8 | * How can I set myself up for success? 9 | * What expectations does your manager have? 10 | * It takes about 3 weeks to normalize. 11 | 12 | -------------------------------------------------------------------------------- /interview-guide/interview-process/coding.md: -------------------------------------------------------------------------------- 1 | # Coding 2 | 3 | Example Question: 4 | 5 | * Make assumptions 6 | * If they tell you are taking input from STDIN, start by just taking input from a string. 7 | * Write example cases as comments, or part of the code execution. This gives discussion points. 8 | * Explain assumptions about validity of input 9 | * Create an `assert` function, which takes in the `expected` result given an `input`. See [PHP](https://app.gitbook.com/php#simple-assert) or [JS](https://app.gitbook.com/js#simple-assert) 10 | 11 | ```javascript 12 | input = "a b c d e"; 13 | 14 | main(input) { 15 | ... 16 | } 17 | 18 | assert(expected, input) { 19 | console.log(input); 20 | actual = main(input); 21 | result = expected === actual; 22 | console.log(result); 23 | if (!result) { 24 | console.log(actual); 25 | console.log(expected); 26 | } 27 | } 28 | 29 | // Case 1 30 | assert(expected, input); 31 | 32 | // Case 2 33 | assert(expected2, input2); 34 | 35 | // Case 3 36 | assert(expected3, input3); 37 | ``` 38 | 39 | ## 40 | -------------------------------------------------------------------------------- /interview-guide/interview-process/questions-to-ask.md: -------------------------------------------------------------------------------- 1 | # Questions to Ask 2 | 3 | ### Questions to ask Recruiters 4 | 5 | * What skills are you looking for? 6 | * What roles are you looking to fill? 7 | 8 | Ask questions that would make it easier for you to figure out how to craft your message to land that job. 9 | 10 | ### Questions to ask Interviewers 11 | 12 | _All of the above_ 13 | 14 | * What would you change about your company? 15 | * What do you dislike about your company? 16 | * How has your career been transformed by working at your company? 17 | * What advice would you have to offer me? 18 | * Who are you learning from? 19 | * What makes a good leader? 20 | * How have you handled disagreements with your managers, or leaders? 21 | * How much do you work overtime? 22 | * How has the company invested in its people? 23 | * How has the company set you up for success? 24 | * How did you select the company? 25 | * [https://notes.breakoutlist.com/guide-to-interviewing-your-future-manager-before-deciding-where-to-work-3b2eb3326793\#.k2n39h35i](https://notes.breakoutlist.com/guide-to-interviewing-your-future-manager-before-deciding-where-to-work-3b2eb3326793#.k2n39h35i) 26 | * [https://smalldata.tech/blog/2017/03/27/questions-to-ask-at-the-end-of-a-technical-interview](https://smalldata.tech/blog/2017/03/27/questions-to-ask-at-the-end-of-a-technical-interview) 27 | 28 | ### Questions to ask Founders 29 | 30 | _All of the above_ 31 | 32 | [SWOT](https://en.wikipedia.org/wiki/SWOT_analysis): 33 | 34 | * What are your company's strengths? 35 | * What are your company's weaknesses? 36 | * What are your company's opportunities? 37 | * What are your company's threats? 38 | 39 | -------------------------------------------------------------------------------- /interview-guide/interview-process/rejection.md: -------------------------------------------------------------------------------- 1 | # Rejection 2 | 3 | * Always ask for feedback. 4 | * If you really like the company, ask how you could work together. 5 | 6 | -------------------------------------------------------------------------------- /interview-guide/interview-process/soft-skills.md: -------------------------------------------------------------------------------- 1 | # Soft Skills 2 | 3 | | Themes | Job 1 | Job 2 | 4 | | :--- | :--- | :--- | 5 | | Leadership & Influence | story | | 6 | | Mistakes & Failures | | story | 7 | | Challenges | story | | 8 | | Teamwork | story | story | 9 | | Successess | | story | 10 | 11 | From [http://www.crackingthetechcareer.com/uploads/6/5/2/8/6528028/\_handout\_-\_cracking\_the\_soft\_skills.png](http://www.crackingthetechcareer.com/uploads/6/5/2/8/6528028/_handout_-_cracking_the_soft_skills.png) 12 | 13 | * What stories do you have on leadership and influence? 14 | * What stories do you have about mistakes and failures? 15 | * What stories do you have on challenges? 16 | * What stories do you have on teamwork? 17 | * What stories do you have on successes? 18 | 19 | ### Keywords: 20 | 21 | * Constraints 22 | * Feasibility 23 | * Limitations 24 | * Technical Challenges 25 | * Organizational Challenges 26 | * Fail Overs 27 | * Distribute 28 | 29 | ### Product Management 30 | 31 | If you have worked with multiple product/project managers, and each have had a different style of work, describe each way that you've worked. 32 | 33 | For example: 34 | 35 | * Quarterly goals assigned by upper management, which your program manager managed 36 | * Weekly Sprints 37 | * Cowboy Style \(daily reprioritizing of tasks\) 38 | 39 | ### Others 40 | 41 | * Describe a time when you took technical feedback from a peer, and how you handled it. 42 | 43 | -------------------------------------------------------------------------------- /interview-guide/job-boards.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Useful if you don't know what company you'd like to join. 3 | --- 4 | 5 | # Job Boards 6 | 7 | ## General 8 | 9 | * [https://whoishiring.io](https://whoishiring.io) 10 | * [https://kennytilton.github.io/whoishiring/](https://kennytilton.github.io/whoishiring/) 11 | * [https://jobs.github.com](https://jobs.github.com) 12 | 13 | ## Remote Work 14 | 15 | * [https://remotebase.io](https://remotebase.io) 16 | * [https://weworkremotely.com](https://weworkremotely.com) 17 | * [https://remote.co/qa-leading-remote-companies/](https://remote.co/qa-leading-remote-companies/) 18 | * [https://remoteok.io/remote-dev-jobs](https://remoteok.io/remote-dev-jobs) 19 | * [https://www.workingnomads.co/jobs](https://www.workingnomads.co/jobs) 20 | * [https://news.ycombinator.com/item?id=14842684](https://news.ycombinator.com/item?id=14842684) 21 | * [https://hn.algolia.com/](https://hn.algolia.com/?query=remote&sort=byPopularity&prefix&page=0&dateRange=pastMonth&type=story) 22 | 23 | ## Job Application Sites 24 | 25 | These sites will help you get a job. 26 | 27 | Be careful about enabling each of these sites at once. It can get intense, I got 70+ recruiters reaching out to me. 28 | 29 | Some links may include referral codes. 30 | 31 | * United States: 32 | * [A-List](https://alist.co/) 33 | * [Hired](https://hired.com/x/1ffao) 34 | * [Triplebyte](https://triplebyte.com/iv/Sl7BZEg) 35 | 36 | ### Other 37 | 38 | * Malaysia: 39 | * JobStreet 40 | * Wobb 41 | * Tribe Hired 42 | 43 | -------------------------------------------------------------------------------- /interview-guide/practice.md: -------------------------------------------------------------------------------- 1 | # Practice 2 | 3 | ## I Hate Programming Questions 4 | 5 | * They usually require a special "trick" to solve correctly 6 | 7 | ## GitHub Repositories 8 | 9 | * [https://github.com/aizatto/interview-preparation](https://github.com/aizatto/interview-preparation) 10 | * [https://github.com/trekhleb/javascript-algorithms](https://github.com/trekhleb/javascript-algorithms) 11 | * [https://github.com/basarat/algorithms](https://github.com/basarat/algorithms) 12 | 13 | ## Online Practice 14 | 15 | * [HackerRank](https://www.hackerrank.com/) 16 | * [LeetCode](https://leetcode.com) 17 | * [CareerCup](https://careercup.com/) 18 | * [Interview Cake](https://www.interviewcake.com) 19 | * [InterviewBit](https://www.interviewbit.com/) 20 | * [http://www.reddit.com/r/cscareerquestions/](http://www.reddit.com/r/cscareerquestions/) 21 | * [https://www.quora.com/HackerRank-What-are-the-coding-contests-sites-where-companies-hire-from](https://www.quora.com/HackerRank-What-are-the-coding-contests-sites-where-companies-hire-from) 22 | 23 | ### InterviewBit 24 | 25 | * JavaScript seems to be using ES5 \(2009\) 26 | * No use of const/let 27 | 28 | ## Offline Practice 29 | 30 | Go to [meetups](https://www.meetup.com) 31 | 32 | ## Books/PDFs 33 | 34 | * [Cracking the Coding Interview: 189 Programming Questions and Solutions 6th Edition](http://amzn.to/2nO0UDe) 35 | * [Wealthfront Silicon Valley Career Guide](http://info.wealthfront.com/rs/wealthfront/images/2013_Silicon_Valley_Career_Guide.pdf?mkt_tok=3RkMMJWWfF9wsRonu67OZKXonjHpfsX57eolX7Hr08Yy0EZ5VunJEUWy2YMGSNQ%2FcOedCQkZHblFnVsAS62nVrUNqaQF) 36 | 37 | ## Live Programming Environment 38 | 39 | * [coderpad.io](https://coderpad.io) 40 | * [collabedit](http://collabedit.com) 41 | * karak.io 42 | 43 | When using these, ask wether the interviewer if they are comfortable with pseudo code, or is correct syntax/semantics important. 44 | 45 | -------------------------------------------------------------------------------- /interview-guide/technical-interview-cheatsheet.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | The purpose of this page so that it can be used easily when doing a technical 4 | interview. These are my own personal notes and reminders. 5 | --- 6 | 7 | # Technical Interview Cheatsheet 8 | 9 | * [https://github.com/aizatto/interview-preparation](https://github.com/aizatto/interview-preparation) 10 | * [https://github.com/trekhleb/javascript-algorithms](https://github.com/trekhleb/javascript-algorithms) 11 | * [https://github.com/basarat/algorithms](https://github.com/basarat/algorithms) 12 | 13 | ## Soft skills 14 | 15 | * Maintain composure 16 | * Slow down 17 | * Control your excitement. 18 | * Carefully read the full question 19 | 20 | ## Technical / Tricks 21 | 22 | ### Data structures: 23 | 24 | Consider using one of: 25 | 26 | * Array 27 | * Linked Lists / Doubly Linked Lists 28 | * Maps / Hashes 29 | * Sets 30 | * Binary Tree 31 | 32 | ### Algorithms: 33 | 34 | * Binary Search 35 | * Recursive 36 | 37 | -------------------------------------------------------------------------------- /notes/archive/README.md: -------------------------------------------------------------------------------- 1 | # Archive 2 | 3 | This includes: 4 | 5 | * Archived Notes 6 | * Notes used infrequently 7 | * Random thoughts that I'm developing 8 | 9 | Purpose: 10 | 11 | * Reduce the number of immediate visible notes on the left hand side 12 | 13 | -------------------------------------------------------------------------------- /notes/archive/amazon-echo-dot-3rd-gen-with-clock.md: -------------------------------------------------------------------------------- 1 | # Amazon Echo Dot \(3rd Gen\) with clock 2 | 3 | * Device: [https://amzn.to/2Q4dzjK](https://amzn.to/2Q4dzjK) 4 | 5 | Cons: 6 | 7 | * Clock doesn't automatically detect it's location to set the time 8 | * You have to manually set the time and location 9 | * You set the location to have it figure out the weather 10 | * Makes it annoying to use for travel, you'll have to keep setting the location 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /notes/archive/apple/README.md: -------------------------------------------------------------------------------- 1 | # Apple 2 | 3 | I've been using Apple devices since 2001, but I'm curious about exploring Windows for its Windows Subsystem for Linux \(WSL\) and how Satya Nadella is now leading the direction of Microsoft. 4 | 5 | I enjoy the Apple ecosystem for its integration. I won't say I'm an Apple enthusiast, but I really enjoy the integration across devices. 6 | 7 | Pros: 8 | 9 | * Integration across devices 10 | * Easy to switch devices which your AirPods are connected to 11 | * Copy/pasting works seamlessly across devices 12 | * Handover is nice 13 | * Airdrop is convenient 14 | * Devices retains value 15 | * Thieves nowadays are less inclined to steal Apple devices as they hard more difficult to unlock 16 | * Apple Health integration 17 | * Tracking of devices 18 | * Family support 19 | * Family sharing 20 | * Purchase Sharing 21 | * iCloud Storage 22 | * I don't use: 23 | * Apple Music 24 | * Location Sharing 25 | * Screen Time 26 | * Seamless migration between devices 27 | * For example: 28 | * iPhone 6S to iPhone X 29 | * iPad Pro 2017" to iPad Pro 2018" 30 | * Support by iCloud 31 | 32 | Cons: 33 | 34 | * Apple ecosystem has gotten expensive 35 | * Devices 36 | * MacBook Pro 15": $1,999 37 | * Apple Watch Series 4: $399 38 | * iPhone X 256GB: $1149 39 | * iPad 2018 256GB: $949 40 | * AirPods: $159 41 | * Total: $4,655 42 | * Subscriptions 43 | * Apple Family: $2.99/month for 200GB 44 | * I personally think this is reasonable 45 | 46 | Wants: 47 | 48 | * Cheaper devices 49 | * AirPower 50 | * Apple Health app for iPad, and macOS 51 | * I want to be able to view my Apple Health information on my different devices 52 | * MacBook Air 15" 53 | 54 | ## Buying a Device 55 | 56 | * Check [MacRumor's Buyer's Guide](https://buyersguide.macrumors.com/) on when to best buy one 57 | * Ideally soon after launch 58 | * Apple doesn't releases devices often, so this is the best way to maximize the value of the latest device 59 | 60 | ### Options to buying cheaper: 61 | 62 | * Buy refurbished: 63 | * [Apple US](http://www.apple.com/us_epp_5000027/shop) 64 | * [Amazon](https://www.amazon.com/stores/node/2528944011) 65 | * BHPhotoVideo offers discounts once in a while 66 | * No taxes if shipping to states outside of California 67 | * After the launch of a new device 68 | * Wait till sales periods 69 | * Black Friday and Cyber Monday, late Nov 70 | * Christmas sales 71 | 72 | ## Yearly Schedule 73 | 74 | ### March: 75 | 76 | * Spring refresh in late march 77 | 78 | ### June: 79 | 80 | * WWDC 81 | * Announcement of new macOS 82 | * Announcement of new iOS 83 | 84 | ### July: 85 | 86 | * New MacBooks 87 | 88 | ### August: 89 | 90 | * Announcement of new iPhones 91 | 92 | ### September: 93 | 94 | * New iPhone launches 95 | * new iOS launch 96 | * new macOS launch 97 | 98 | ### October: 99 | 100 | * Announcement of new iPad Pros 101 | 102 | ### November: 103 | 104 | * New iPad Pros 105 | * Black Friday and Cyber Monday sales 106 | 107 | ### December: 108 | 109 | * Christmas sales 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /notes/archive/apple/airpods.md: -------------------------------------------------------------------------------- 1 | # AirPods Pro 2 | 3 | I've owned: 4 | 5 | * 1st Gen AirPods 6 | * Powerbeats Pro 7 | * AirPods Pro 8 | 9 | ## Powerbeats Pro vs AirPods Pro 10 | 11 | Powerbeats Pro: 12 | 13 | * I like the hooks, because I feel like I won't lose them 14 | * Feels more durable, and less fragile \(in a good way\) 15 | * I feel more comfortable with them being out of their case 16 | * I am comfortable with them being randomly in my pocket 17 | * Because they feel more durable, I may not need to carry the case with me 18 | 19 | AirPods Pro 20 | 21 | * Active Noise Cancellation 22 | * Wireless Charging 23 | * Much smaller case \(comfortably fits in my pocket\) 24 | * Still feels like they can pop out of your ear 25 | * Because the stem is smaller than the AirPods, it feels less fragile 26 | 27 | ## AirPods 1st Gen 28 | 29 | I used to own the first generation 2016 model. 30 | 31 | Pros: 32 | 33 | * Convenient. 34 | * Small pill shape means I can carry it around with me everywhere. 35 | * No tangled wires. 36 | * iCloud integration. 37 | * Easy switching between devices. 38 | 39 | I don't mind the battery life, though some people seem to have problems with it. 40 | 41 | The Apple headsets have always fit me fine. They don't come out when I'm running on the treadmill, or on the elliptical. 42 | 43 | I sometimes only get one headset to connect. 44 | 45 | -------------------------------------------------------------------------------- /notes/archive/apple/apple-notes.md: -------------------------------------------------------------------------------- 1 | # Apple Notes 2 | 3 | I use Apple Notes for quick note taking and brain dumping, but it's terrible for archiving. It's great for keeping things quickly in sync across Apple devices, and for short term notes. 4 | 5 | When you have 1000+ notes, Apple Notes gets huge, messy and unwieldly. 6 | 7 | I prefer to quickly jot with Apple Notes, but migrate the thoughts to Google Docs. 8 | 9 | Pros: 10 | 11 | * Pin notes 12 | 13 | Cons: 14 | 15 | * No nested folders 16 | * Can get disorganized with large number of notes or folders 17 | 18 | -------------------------------------------------------------------------------- /notes/archive/apple/apple-watch.md: -------------------------------------------------------------------------------- 1 | # Apple Watch Series 4 2 | 3 | I own the Apple Watch Series 4 44mm Aluminum. 4 | 5 | Overall review: 6 | 7 | * It's just a watch. Nothing fancy, and nice to have. 8 | * Most things you can already do on your phone 9 | * But my phone is already a distracting device, so let's limit me even accessing it 10 | 11 | Common Uses: 12 | 13 | * Finding my phone 14 | * Now that I'm not attached to my phone, I misplace my phone more often, but I'm ok with that 15 | 16 | Pros: 17 | 18 | * Removes me from the addiction/distraction of my phone 19 | * Easy access to a timer 20 | * I usually set timers so that I can help focus for a certain period of time 21 | * Notify myself when I need to do something in X minutes 22 | * For example: Remind me that I need to leave in 40 minutes 23 | * Health tracking keeps me accountable when used with exercise 24 | 25 | Cons: 26 | 27 | * Requires an iPhone 28 | * Enabling DND in watch, also enable it on phone. Alternative is to use Airplane mode 29 | * Airplane mode doesn’t have similar DND feature if “Turn off in 1 hour” 30 | * Glass seems to get easily scratched 31 | 32 | Others Uses: 33 | 34 | * Airplane mode 35 | * For when I want my watch on to track my health, but not be distracted by notifications 36 | 37 | ![](../../../.gitbook/assets/unadjustednonraw_thumb_2f90.jpg) 38 | 39 | #### Apple Watch Series 4 vs Apple Watch Series 3 40 | 41 | Apple Watch Series 4 44m: 42 | 43 | * Larger screen size 44 | * Can fit more text on screen 45 | * Easier to read notifications 46 | * Thinner, and personally I find it more aesthetically better looking 47 | 48 | -------------------------------------------------------------------------------- /notes/archive/apple/ipad-pro.md: -------------------------------------------------------------------------------- 1 | # iPad Pro 11" 2018 2 | 3 | My main note taking device. For anything serious, I go to my MacBook Pro 15", for its larger screen, and mouse support. 4 | 5 | What I like about a tablet/iPad: 6 | 7 | * Can casually bring to meetings 8 | * Less serious than a laptop 9 | * Because I can do less on the iPad, it forces me to focus 10 | * The lack of good multi-tasking is a positive for me. I get less distracted. 11 | 12 | Wants: 13 | 14 | * Apple Health app for iPad 15 | * I want to be able to view my Apple Health information on my iPad 16 | 17 | ### iPad Pro 11" 2018 vs iPad Pro 10.9" 2017 18 | 19 | Overall: It's still an iPad 20 | 21 | Pro: 22 | 23 | * I like the USB-C, "universal" charger everywhere 24 | * Larger screen 25 | * Apple case protects the full iPad 26 | 27 | ### iPad Pro 12.9" 2017 28 | 29 | I used to own the larger iPad Pro 12.9" 2017 model. It's big. It feels like a great laptop replacement, but it's big and not entirely practical to carry around with me everywhere, hence why I like the smaller model. 30 | 31 | -------------------------------------------------------------------------------- /notes/archive/apple/macbook-pro.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Anything about Apple Laptops 3 | --- 4 | 5 | # MacBook Pro 15" 2017 6 | 7 | My main workhorse when I need to do anything serious. 8 | 9 | I go for the 15" for the ability to put two windows side by side. Unfortunately more and more UI is not being friendly to this layout style. 10 | 11 | I use my iPad Pro 11" 2018 primarily for note taking and doing something I need to focus on. 12 | 13 | The laptop can be very distracting as I can easily switch between applications. The laptop is designed for multitasking, and unfortunately allows me to do it seamlessly. 14 | 15 | The iPad doesn't do multitasking as well, and thus forces me to focus. 16 | 17 | ## MacBook Pro 15" 2017 18 | 19 | Note: This is the USB-C MacBook Pros 20 | 21 | Pros: 22 | 23 | * Lighter than the previous \(non USB-C\) builds 24 | * 500grams lighter 25 | * "Universal" charger; via USB-C 26 | 27 | Cons: 28 | 29 | * Escape key is not a physical button \(uses TouchBar\) 30 | * I'm a VIM user, and I think a physical escape key would make a huge different even on other apps. 31 | 32 | Notes: 33 | 34 | * I don't mind USB-C 35 | * Personally, I don't use accessories much 36 | * So I enjoy the weight savings 37 | * Pushing 4K@60hz to an external monitor 38 | * Works with a USB-C to DisplayPort cable 39 | * None of the USB-C to HDMI adapters dont seem to work for me 40 | 41 | ## MacBook Air 15" 42 | 43 | I want a MacBook Air 15". 44 | 45 | * I like the bigger screen of the MacBook Pro 15" 46 | * I like the weight/size of the MacBook Air 47 | 48 | -------------------------------------------------------------------------------- /notes/archive/audible.md: -------------------------------------------------------------------------------- 1 | # Audible 2 | 3 | I love audiobooks narrated by their authors, it feels like you are in the room with them. I mostly listen to them when I drive, so it feels like I'm in the car with them. 4 | 5 | ## Trevor Noah's Born a Crime 6 | 7 | * [Audible](https://www.audible.com/pd/Born-a-Crime-Audiobook/B01IW9TQPK?qid=1553014383&sr=1-1&ref=a_search_c3_lProduct_1_1&pf_rd_p=e81b7c27-6880-467a-b5a7-13cef5d729fe&pf_rd_r=DHC5SCDZGG3956J593WZ&) 8 | 9 | My number one audiobook. Read by Trevor Noah himself. If you had to listen to anything, listen to this. Hear about how Trevor Noah had to hustle in South Africa. I learned so much about South Africa and how bad apartheid was. Some great laughs, and even better when Trevor Noah brings out his mastery of accents. 10 | 11 | ## Tony Hsieh's Delivering Happiness 12 | 13 | * [Audible](https://www.audible.com/pd/Delivering-Happiness-Audiobook/B003O5FNTG?qid=1553014506&sr=1-2&ref=a_search_c3_lProduct_1_2&pf_rd_p=e81b7c27-6880-467a-b5a7-13cef5d729fe&pf_rd_r=HTH4X73H5SXQM4D85H4V&) 14 | 15 | ## Chris Hadifeld's An Astronaut's Guide to Life on Earth 16 | 17 | * [Audible](https://www.audible.com/pd/An-Astronauts-Guide-to-Life-on-Earth-Audiobook/B00G9QR048?qid=1553014555&sr=1-1&ref=a_search_c3_lProduct_1_1&pf_rd_p=e81b7c27-6880-467a-b5a7-13cef5d729fe&pf_rd_r=WKJY48KT8R5ZKRTACJP1&) 18 | 19 | ## Phil Knights' Shoedog 20 | 21 | * [Audible](https://amzn.to/2XyPaU0) 22 | 23 | Phil Knight is the founder of Nike. Unfortunately not spoken by Phil Knight himself, but a great book nonetheless. Because Nike was founded in 1964 you can really hear how different business was back then. 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /notes/archive/b2b-b2c.md: -------------------------------------------------------------------------------- 1 | # B2B/B2C 2 | 3 | B2C 4 | 5 | * Requires VC pump to create customer base 6 | * Have to create a community 7 | * Smaller sale size, more customers 8 | 9 | B2B 10 | 11 | * Longer lead time 12 | * Larger sale size, less customers 13 | 14 | B2B2C 15 | 16 | * Offer businesses something they can give their customers 17 | 18 | -------------------------------------------------------------------------------- /notes/archive/balance/README.md: -------------------------------------------------------------------------------- 1 | # Balance 2 | 3 | Carl Jung: 4 | 5 | > Only the paradox comes anywhere near to comprehending the fullness of life. 6 | 7 | [https://www.deepthoughtapp.com/answers/what-lifes-paradox-are-you-trying-to-balance-1250/](https://www.deepthoughtapp.com/answers/what-lifes-paradox-are-you-trying-to-balance-1250/#) 8 | 9 | -------------------------------------------------------------------------------- /notes/archive/balance/growth-vs-contentment.md: -------------------------------------------------------------------------------- 1 | # Growth vs Contentment 2 | 3 | ## Growth 4 | 5 | ## Contentment 6 | 7 | -------------------------------------------------------------------------------- /notes/archive/balance/leading-vs-following.md: -------------------------------------------------------------------------------- 1 | # Leading vs Following 2 | 3 | ## Leaders, Leading 4 | 5 | * Provides mission, vision, and direction 6 | * Requires conviction 7 | * Have to give followers security 8 | 9 | ## Followers, Following 10 | 11 | * Follows the mission 12 | * Should not be skeptical of leader 13 | * Some followers have to be leaders 14 | * When the organization grows 15 | 16 | -------------------------------------------------------------------------------- /notes/archive/balance/mindful-vs-mindless.md: -------------------------------------------------------------------------------- 1 | # Mindful vs Mindless 2 | 3 | ## Mindful 4 | 5 | Properties: 6 | 7 | * Uses more mental energy and capacity 8 | * Being mindful all the time can be draining 9 | * Move behaviors into habits or routines 10 | * Learning something new requires being mindful 11 | 12 | Activities which are mindful and take up more mental energy and capacity: 13 | 14 | * Decision making 15 | * Programming 16 | * Creating something new 17 | 18 | ## Mindless 19 | 20 | Properties: 21 | 22 | * Uses less mental energy and capacity 23 | 24 | You can make mindful activities into mindless one through routine, perseverance, and practice 25 | 26 | Benefits: 27 | 28 | * Doesn't require anything of you 29 | 30 | Cons: 31 | 32 | * You can get complacent 33 | 34 | ## Mindfulness 35 | 36 | Taking stock of the moment, and knowing how to react appropriately. 37 | 38 | * Can either take or drain more energy depending on the outcome you desire 39 | 40 | -------------------------------------------------------------------------------- /notes/archive/balance/new-vs-old.md: -------------------------------------------------------------------------------- 1 | # New vs Old 2 | 3 | ## New 4 | 5 | Doing something new 6 | 7 | * Requires being in a state of mind for openness 8 | * Requires mental capacity to explore new things 9 | * Requires being mindful 10 | * Requires patience, can be frustrating with a different and new set of expectations 11 | * Staying at the edge of new requires perseverance, discipline, and faith 12 | * No guidance at the edge of new 13 | * No documentation 14 | * No other experience to learn from 15 | * No guides, no mentors 16 | * Uncharted territory 17 | * Exploring uncharted territories is itself a skill 18 | * Staying at the edge of everything new can thin you out 19 | 20 | #### Pros: 21 | 22 | * Can provide more leverage 23 | * Provides variety 24 | * Potentially high reward \(at the cons of high risk\) 25 | 26 | #### Cons: 27 | 28 | * Uncertain 29 | * Untested 30 | * Can be frustrating, requires patience 31 | * High risk \(at the pros of a potentially high reward\) 32 | 33 | ## Old 34 | 35 | Doing something old 36 | 37 | * Requires practice, routine, familiarity 38 | * Provides comparison when doing new things 39 | * Provides wisdom when handling uncertainty 40 | * Familiar set of expectations 41 | * Can develop deep skills 42 | 43 | #### Pros: 44 | 45 | * Can ground, anchor, and center you 46 | * Low risk \(at the cons of low reward\) 47 | * Safe bets 48 | * Familiar, don't have to learn anything new 49 | * Can be mindless and rely on old habits and routines 50 | 51 | #### Cons: 52 | 53 | * Can hold you back 54 | * Low reward \(at the pros of low risk\) 55 | * Can leave you complacent and lazy 56 | 57 | -------------------------------------------------------------------------------- /notes/archive/bandwidth-requirements.md: -------------------------------------------------------------------------------- 1 | # Bandwidth Requirements 2 | 3 | Test with: 4 | 5 | * [https://fast.com/](https://fast.com/) 6 | * [https://www.speedtest.net/](https://www.speedtest.net/) 7 | 8 | ## Services 9 | 10 | | Service | Speed | 11 | | :--- | :--- | 12 | | Netflix Ultra HD 4K | 25 Megabits/second | 13 | 14 | [https://help.netflix.com/en/node/306](https://help.netflix.com/en/node/306) 15 | 16 | -------------------------------------------------------------------------------- /notes/archive/blockchain.md: -------------------------------------------------------------------------------- 1 | # Blockchain 2 | 3 | ## **Use cases** 4 | 5 | * Event tracking 6 | 7 | ## **Different implementations:** 8 | 9 | * Proof of work 10 | * Proof of state 11 | 12 | ## Concerns: 13 | 14 | * No customer service 15 | * Losing private key 16 | * Linking transactions 17 | * Not instantaneous 18 | * Writes Transaction speed 19 | * Data that is stored off the chain 20 | * If so few things are on chain, why even have blockchain. 21 | * Size of the chain 22 | * Benefits of blockchain requires decentralization. In order for decentralization, other people need to be incentivized for hosting. 23 | * I don't think people would be incentivized to host. 24 | * Scaling challenges of blockchain 25 | * transactions per second 26 | * size of the chain \(in Gigabytes\) 27 | * Introduces complexity without reducing it 28 | * Financial cost of Proof of Work 29 | 30 | | Chain | Transactions per Second | Size | 31 | | :--- | :--- | :--- | 32 | | Bitcoin | 7 tx/s | 197 GB \(Jan 2019\) | 33 | | Etherium | 25 tx/s | 670 GB \(Jan 2019\) or 20 GB ... | 34 | | Ripple | 40,000 tx/s | | 35 | 36 | * [http://bc.daniel.net.nz/](http://bc.daniel.net.nz/) 37 | * [https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a](https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a) 38 | 39 | ## **Thoughts:** 40 | 41 | Block chain is a distributed social enterprise . 42 | 43 | Block chain is about people wanting control. But they don’t realize how much control they have let go. 44 | 45 | Individual vs group. 46 | 47 | Requires good actors in all environment factors. 48 | 49 | Blockchain is not used in the porn industry. 50 | 51 | ### Implementing Blockchain 52 | 53 | Requires you to think of: 54 | 55 | * what is on chain, and what is off chain 56 | 57 | ### Questions: 58 | 59 | What can you prototype faster with blockchain? 60 | 61 | When is trust broken? 62 | 63 | * When one actor has more than 33% or 50% \(depending on implementation\) of the nodes 64 | * Forks; Bitcoin Cash, Ethereum Classic, etc 65 | * Requires adoption by all parties 66 | * Including competitors, which will most likely not adopt your solution 67 | * This is so new and complex, how can you be an expert at this? 68 | 69 | -------------------------------------------------------------------------------- /notes/archive/board-games.md: -------------------------------------------------------------------------------- 1 | # Board Games 2 | 3 | ## Games 4 | 5 | * Catan 6 | * Citadels 7 | * Dixit 8 | * Exploding Kittens 9 | * King of Tokyo 10 | * King of New York 11 | * Saboteur 12 | * Takenoko 13 | * Pandemic 14 | * Power Grid 15 | * Code names 16 | * Ghost blitz 17 | 18 | ## Board Games in General 19 | 20 | I like playing card/board games, they teach: 21 | 22 | * strategy 23 | * putting your opponents at a disadvantage 24 | * risk / reward 25 | * resource management 26 | * faith / hope 27 | 28 | They don’t have the pressure of a video game and Fast reflexes 29 | 30 | ## Learning Rules 31 | 32 | * Search for YouTube instructions 33 | * Search for digital copies of instructions manual 34 | 35 | ## Teaching other people the rules 36 | 37 | Begin by explaining the winning condition first. 38 | 39 | For example: 40 | 41 | * Win by scoring 10 points, here is how you score the points 42 | 43 | -------------------------------------------------------------------------------- /notes/archive/board-games/README.md: -------------------------------------------------------------------------------- 1 | # Board Games 2 | 3 | ## Games 4 | 5 | * Catan 6 | * Citadels 7 | * Dixit 8 | * Exploding Kittens 9 | * King of Tokyo 10 | * King of New York 11 | * Saboteur 12 | * Takenoko 13 | * Pandemic 14 | * Power Grid 15 | * Code names 16 | * Ghost blitz 17 | 18 | ## Board Games in General 19 | 20 | I like playing card/board games, they teach: 21 | 22 | * strategy 23 | * putting your opponents at a disadvantage 24 | * risk / reward 25 | * resource management 26 | * faith / hope 27 | 28 | They don’t have the pressure of a video game and Fast reflexes 29 | 30 | ## Learning Rules 31 | 32 | * Search for YouTube instructions 33 | * Search for digital copies of instructions manual 34 | 35 | ## Teaching other people the rules 36 | 37 | Begin by explaining the winning condition first. 38 | 39 | For example: 40 | 41 | * Win by scoring 10 points, here is how you score the points 42 | 43 | -------------------------------------------------------------------------------- /notes/archive/broadway.md: -------------------------------------------------------------------------------- 1 | # Broadway 2 | 3 | ## Where to buy: 4 | 5 | * \$$$: Online at ticket master 6 | * TicketMaster charges a “convenience fee” of 15-20% on top of the box office price 7 | * Allows you to book in advance 8 | * Nice interface to choose seats 9 | * \$$: At the box office itself 10 | * Saves on TicketMaster fees 11 | * $: Resellers (TodayTix) 12 | * Use my referral code [http://todaytix.com/refer/TQMWN](http://todaytix.com/refer/TQMWN) 13 | 14 | Broadway, 1 seat to another can be overly priced. But the view may actually not be too different. 15 | 16 | Is the price worth the difference? 17 | 18 | Find closest seat to the upper price. 19 | 20 | I’ve gotten great cheap seats in a small theater. In small theater prices matter less. 21 | 22 | What determines if it’s a small theater? 23 | 24 | Number of seats per row. 25 | 26 | Number of sears from stage 27 | 28 | Size of seats 29 | 30 | Sears are usually small 31 | 32 | They try to pack as many people in the theater as possible 33 | 34 | 12th row: about 10 meters only. 35 | 36 | One seat is about 3 feet tall. 37 | 38 | My preference is front mezzanine. 39 | 40 | If you get mezzanine seats you can see the “depth” of the theater, and the different performers in back. I feel like I experience the “magic” of broadway the most here. 41 | 42 | Front row, you are right under the performers. I don’t think it’s worth it. I don’t like being so close, because I like to see the “whole” performance. 43 | 44 | Sitting in the rear back nosebleed seats, I don’t really experience the “magic”. 45 | -------------------------------------------------------------------------------- /notes/archive/cheap-good-fast.md: -------------------------------------------------------------------------------- 1 | # Cheap, Good, Fast 2 | 3 | * How can you make something cheaper? 4 | * How can you make something faster? 5 | * How can you make things better?\ 6 | -------------------------------------------------------------------------------- /notes/archive/cli/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'CLI: Command Line Interface' 3 | --- 4 | 5 | # CLI 6 | 7 | Different CLI tools I use. 8 | 9 | See my bash\_profile for some tips. 10 | 11 | [https://github.com/aizatto/dotfiles/blob/master/bash\_profile](https://github.com/aizatto/dotfiles/blob/master/bash_profile) 12 | 13 | -------------------------------------------------------------------------------- /notes/archive/cli/ufw.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Uncomplicated Firewall 3 | --- 4 | 5 | # ufw 6 | 7 | ```bash 8 | sudo ufw status 9 | cat /etc/default/ufw 10 | ufo show raw | less 11 | ufo allow 22 12 | 13 | ufw allow 60000:61000/udp # mosh 14 | ufw app list 15 | ufw app info mosh 16 | ufw allow mosh 17 | ``` 18 | 19 | -------------------------------------------------------------------------------- /notes/archive/cli/xargs.md: -------------------------------------------------------------------------------- 1 | # xargs 2 | 3 | Run `xargs` command on each file found 4 | 5 | ```bash 6 | find . -iname *.ts | xargs -n1 ts-node 7 | ``` 8 | 9 | -------------------------------------------------------------------------------- /notes/archive/cloud-providers/README.md: -------------------------------------------------------------------------------- 1 | # Cloud Providers 2 | 3 | | AWS | GCP | Azure | Tencent | Alibaba | 4 | | :--- | :--- | :--- | :--- | :--- | 5 | | | | | [https://intl.cloud.tencent.com/](https://intl.cloud.tencent.com/) | [https://my.alibabacloud.com/](https://my.alibabacloud.com/) | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /notes/archive/cloud-providers/gcp.md: -------------------------------------------------------------------------------- 1 | # GCP 2 | 3 | * [Mapping AWS to GCP](https://cloud.google.com/free/docs/map-aws-google-cloud-platform) 4 | 5 | ## Datastore 6 | 7 | Being deprecated for Firestore 8 | 9 | > [Cloud Firestore](https://cloud.google.com/firestore/) is the next generation of Cloud Datastore. 10 | 11 | ## Comparisons with AWS 12 | 13 | * API Gateway 14 | * No GCP Equivalent 15 | * Custom domains have to go through Firebase Hosting 16 | * GCP Cloud Functions can be automatically deployed to an endpoint with a flag 17 | * Firestore has better free rates 18 | * No on-demand/provisioned limitations 19 | * Lambda 20 | * Need to test async/await 21 | * Seems you launch individual functions than a group of functions 22 | * Lambda has "Applications", GCP doesn't seem to have an equivalent way to group 23 | * Potentially more name clashing 24 | * Distinct difference between HTTP Triggers and Event Triggers 25 | 26 | -------------------------------------------------------------------------------- /notes/archive/communication.md: -------------------------------------------------------------------------------- 1 | # Communication 2 | 3 | Different dimensions 4 | 5 | * Synchronous vs Asynchronous 6 | * Private \(1 to 1\) vs Group \(1 to many\) 7 | 8 | | | Synchronous | Asynchronous | 9 | | :--- | :--- | :--- | 10 | | Private \(1 to 1\) | Synchronous and Private | Asynchronous and Private | 11 | | Group \(1 to many\) | Synchronous and Group | Asynchronous and Group | 12 | 13 | Deep Thought Keywords: 14 | 15 | * [Communication](http://deepthoughtapp.com/en/keywords/communication/) 16 | 17 | ## Synchronous vs Asynchronous 18 | 19 | ### Synchronous 20 | 21 | Can be active or passive. 22 | 23 | Can only provide for a single thread of communication. 24 | 25 | #### Active 26 | 27 | Direct communication with someone. 28 | 29 | May include voice and video calls. 30 | 31 | Examples: 32 | 33 | * Being in an engaged conversation with someone. 34 | 35 | #### Passive 36 | 37 | Can provide a passive form of intimacy and connection. Can be describe as "non verbal intimacy". 38 | 39 | Does not require active effort of energy or attention. 40 | 41 | Requires just the physical presence of the other person around, and being in the same room or nearby, and doing their own thing. 42 | 43 | Examples: 44 | 45 | * Being in a nearby space as someone else. 46 | 47 | ### Asynchronous 48 | 49 | Not in person. 50 | 51 | Requires more active effort. There is no "Asynchronous Passive" communication similar to the "Synchronous Passive". All Asynchronous communication is active. If you are a lurker you are non contributing. This is ok if there are no expectations of contribution. 52 | 53 | Allows you to edit your words before sending it. 54 | 55 | Can be better for long form. 56 | 57 | Can provide multiple threads of conversation. 58 | 59 | Can be used to return to "past conversations". 60 | 61 | #### Non Written 62 | 63 | Examples: 64 | 65 | * Speaker to a large audience \(Group, or Conference\) 66 | 67 | #### Written or Recorded Form 68 | 69 | * Doesn’t allow for immediate questions or feedback. 70 | * Easier to distribute \(copy, paste, forward\). 71 | * Easier for computers to parse. 72 | * Easier to dissect. 73 | * May not contain tone, so may require being more explicit with providing context. 74 | * May make it easier to misinterpret. 75 | 76 | Examples: 77 | 78 | * Email 79 | * Messages 80 | * Social Media 81 | * Tasks 82 | 83 | ## Private \(1 to 1\) vs Group \(1 to many\) 84 | 85 | ### Private \(1 to 1\) 86 | 87 | Can be more personal. 88 | 89 | ### Group \(1 to many\) 90 | 91 | Have to cater to the interests of the group. 92 | 93 | ## Combinations 94 | 95 | ### Synchronous and Private \(1 to 1\) 96 | 97 | ### Synchronous and Group \(1 to many\) 98 | 99 | ### Asynchronous and Private \(1 to 1\) 100 | 101 | Contribution from both parties is most likely expected. 102 | 103 | ### Asynchronous and Group \(1 to many\) 104 | 105 | Minor contribution from the group is expected. 106 | 107 | -------------------------------------------------------------------------------- /notes/archive/communication/README.md: -------------------------------------------------------------------------------- 1 | # Communication 2 | 3 | Communication is about alignment. 4 | 5 | -------------------------------------------------------------------------------- /notes/archive/communication/asks-making-requests.md: -------------------------------------------------------------------------------- 1 | # Asking Questions / Making Requests 2 | 3 | * Be specific about what you are asking for 4 | * If there is a priority, state it 5 | * Ask in the right channel 6 | 7 | ## Examples 8 | 9 | ### Example of a bad request: 10 | 11 | > Could you get me that? 12 | 13 | What is "that"? 14 | 15 | ### Example good question: 16 | 17 | > Hi, may I get access to X? 18 | > I need access to X to do Y to achieve Z purpose. 19 | 20 | -------------------------------------------------------------------------------- /notes/archive/communication/change-management.md: -------------------------------------------------------------------------------- 1 | # Change Management 2 | 3 | * Describe previous/current state 4 | * Describe next/expected state 5 | 6 | -------------------------------------------------------------------------------- /notes/archive/communication/making-edits.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Editing some one elses work 3 | --- 4 | 5 | # Making Edits 6 | 7 | For minor \(easily revertable\) edits, I think it's ok to make the edits inline. 8 | 9 | ## Larger Edits 10 | 11 | For larger edits, before making an edit, ask the owner if you can. Larger edits are harder to revert \(even with history\). 12 | 13 | State what you'd like to change. 14 | 15 | Sometimes it's easier to make a copy of the original, and then edit. 16 | 17 | -------------------------------------------------------------------------------- /notes/archive/communication/problem-definition.md: -------------------------------------------------------------------------------- 1 | # Problem Definition 2 | 3 | 4 | 5 | 1. State the problem 6 | 2. State the context 7 | 3. State the research 8 | 4. State possible solutions/options 9 | 1. State pros/cons to each solutions 10 | 2. State in detail what needs to be changed 11 | 5. State the decided solution, and reasoning why it was chosen 12 | 13 | This leaves a paper trail which can help others, and your future self to remember your past decisions 14 | 15 | -------------------------------------------------------------------------------- /notes/archive/communication/synchronous-vs-asynchronous.md: -------------------------------------------------------------------------------- 1 | # Synchronous vs Asynchronous 2 | 3 | Different dimensions 4 | 5 | * Synchronous vs Asynchronous 6 | * Private \(1 to 1\) vs Group \(1 to many\) 7 | 8 | | | Synchronous | Asynchronous | 9 | | :--- | :--- | :--- | 10 | | Private \(1 to 1\) | Synchronous and Private | Asynchronous and Private | 11 | | Group \(1 to many\) | Synchronous and Group | Asynchronous and Group | 12 | 13 | Deep Thought Keywords: 14 | 15 | * [Communication](http://deepthoughtapp.com/en/keywords/communication/) 16 | 17 | ## Synchronous vs Asynchronous 18 | 19 | ### Synchronous 20 | 21 | Can be active or passive. 22 | 23 | Can only provide for a single thread of communication. 24 | 25 | #### Active 26 | 27 | Direct communication with someone. 28 | 29 | May include voice and video calls. 30 | 31 | Examples: 32 | 33 | * Being in an engaged conversation with someone. 34 | 35 | #### Passive 36 | 37 | Can provide a passive form of intimacy and connection. Can be describe as "non verbal intimacy". 38 | 39 | Does not require active effort of energy or attention. 40 | 41 | Requires just the physical presence of the other person around, and being in the same room or nearby, and doing their own thing. 42 | 43 | Examples: 44 | 45 | * Being in a nearby space as someone else. 46 | 47 | ### Asynchronous 48 | 49 | Not in person. 50 | 51 | Requires more active effort. There is no "Asynchronous Passive" communication similar to the "Synchronous Passive". All Asynchronous communication is active. If you are a lurker you are non contributing. This is ok if there are no expectations of contribution. 52 | 53 | Allows you to edit your words before sending it. 54 | 55 | Can be better for long form. 56 | 57 | Can provide multiple threads of conversation. 58 | 59 | Can be used to return to "past conversations". 60 | 61 | #### Non Written 62 | 63 | Examples: 64 | 65 | * Speaker to a large audience \(Group, or Conference\) 66 | 67 | #### Written or Recorded Form 68 | 69 | * Doesn’t allow for immediate questions or feedback. 70 | * Easier to distribute \(copy, paste, forward\). 71 | * Easier for computers to parse. 72 | * Easier to dissect. 73 | * May not contain tone, so may require being more explicit with providing context. 74 | * May make it easier to misinterpret. 75 | 76 | Examples: 77 | 78 | * Email 79 | * Messages 80 | * Social Media 81 | * Tasks 82 | 83 | ## Private \(1 to 1\) vs Group \(1 to many\) 84 | 85 | ### Private \(1 to 1\) 86 | 87 | Can be more personal. 88 | 89 | ### Group \(1 to many\) 90 | 91 | Have to cater to the interests of the group. 92 | 93 | ## Combinations 94 | 95 | ### Synchronous and Private \(1 to 1\) 96 | 97 | ### Synchronous and Group \(1 to many\) 98 | 99 | ### Asynchronous and Private \(1 to 1\) 100 | 101 | Contribution from both parties is most likely expected. 102 | 103 | ### Asynchronous and Group \(1 to many\) 104 | 105 | Minor contribution from the group is expected. 106 | 107 | -------------------------------------------------------------------------------- /notes/archive/company/README.md: -------------------------------------------------------------------------------- 1 | # Company 2 | 3 | \ 4 | p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}\ 5 | p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px}\ 6 | 7 | 8 | WRT to that discussion about the product defining company structure, this was from a Microservices book: 9 | 10 | \> Conway's Law asserts that organizations are constrained to produce application designs which are copies of their communication structures. This often leads to unintended friction points. The 'Inverse Conway Maneuver' recommends evolving your team and organizational structure to promote your desired architecture. Ideally your technology architecture will display isomorphism with your business architecture. 11 | 12 | http://shop.oreilly.com/product/0636920053675.do 13 | -------------------------------------------------------------------------------- /notes/archive/company/all-hands.md: -------------------------------------------------------------------------------- 1 | # All Hands 2 | 3 | Purpose: 4 | 5 | * Set direction of the company 6 | * Reflective moment 7 | * Opportunity to steer the company 8 | 9 | -------------------------------------------------------------------------------- /notes/archive/company/organizational-structure.md: -------------------------------------------------------------------------------- 1 | # Organizational Structure 2 | 3 | Source [Bonkers World](http://bonkersworld.net/organizational-charts): 4 | 5 | ![](http://bonkersworld.net/img/2011.06.27_organizational_charts.png) 6 | 7 | ## Conway's Law 8 | 9 | * [Wikipedia](https://en.wikipedia.org/wiki/Conway%27s_law) 10 | 11 | From [Production-Ready Microservices](http://shop.oreilly.com/product/0636920053675.do): 12 | 13 | > Conway's Law asserts that organizations are constrained to produce application designs which are copies of their communication structures. This often leads to unintended friction points. The 'Inverse Conway Maneuver' recommends evolving your team and organizational structure to promote your desired architecture. Ideally your technology architecture will display isomorphism with your business architecture. 14 | 15 | ### Inverse Conway's Law 16 | 17 | From [Production-Ready Microservices](http://shop.oreilly.com/product/0636920053675.do): 18 | 19 | > The inverse of Conway's Law \(which we'll call the Inverse Conway's Law\) is also valid and is especially relevant to the microservice ecosystem: the organization structure of a company is determined by the architecture of its product. 20 | 21 | -------------------------------------------------------------------------------- /notes/archive/content-creation.md: -------------------------------------------------------------------------------- 1 | # Content Creation 2 | 3 | Many kinds of written content: 4 | 5 | * Notes 6 | * Short Form 7 | * Long Form 8 | 9 | ## Notes 10 | 11 | Notes are not digestable content. 12 | 13 | * Who is the target audience for your content? 14 | * Do they like your content? 15 | * Who consumes your content? 16 | * How can you make your content more digestable? 17 | 18 | -------------------------------------------------------------------------------- /notes/archive/corona-virus.md: -------------------------------------------------------------------------------- 1 | # COVID 19/Corona Virus 2 | 3 | ## Stay at Home Recommendations 4 | 5 | * Knowing this is long term, I've rearranged my furniture making it more comfortable to move around, preparing for long term 6 | * I've made my balcony more comfortable, I haven't spent as much time on it as I have now 7 | * Shipments from China take much longer now, this means online deliveries may take longer. If possibly can order locally 8 | * Order things knowing they may 1-2+ weeks to arrive 9 | * Prices for non essential has gone up. Nintendo Switches have increased in price in Malaysia 10 | * Great time to learn something! I've been learning DevOps, Docker, Kubernetes, Helm, GoCD 11 | * Great time to learn cooking! 12 | * It's a great time to rearrange your house~ 13 | * Exercise at home, lots of people doing online fitness exercises 14 | * Online delivery of food is fully booked for the week+ 15 | * You’ll eat more, since there is nothing else to do 16 | 17 | Boyfriends/husbands, don't know what grocery is what? These guide may help you out 18 | 19 | * [https://www.facebook.com/TescoMY/posts/3021709417866945](https://www.facebook.com/TescoMY/posts/3021709417866945) 20 | * [https://www.facebook.com/TescoMY/posts/3030061550365065](https://www.facebook.com/TescoMY/posts/3030061550365065) 21 | 22 | There are a lot of learning resources available online for free now~That's all I remember for now, will share more as I remember 23 | 24 | ## FAQ 25 | 26 | Wearing a mask 27 | 28 | * You should a mask only if you are sick. 29 | * The mask protects other people from yourself 30 | * It doesn't protect you from others 31 | * Unfortunately, requires sick people to wear the mask 32 | 33 | Quarantine Games 34 | 35 | * [https://docs.google.com/document/d/10iOD7Wy\_YU4NmkPU7ZH7YTrq11qJAANjZZ0PAotKhR8/preview?fbclid=IwAR3E011IDjQ--tkrSPh1SRXHBN\_yaGINld93RqM1\_FAHl4i4Tkoa3QQKmFA](https://docs.google.com/document/d/10iOD7Wy_YU4NmkPU7ZH7YTrq11qJAANjZZ0PAotKhR8/preview?fbclid=IwAR3E011IDjQ--tkrSPh1SRXHBN_yaGINld93RqM1_FAHl4i4Tkoa3QQKmFA) 36 | 37 | Resources 38 | 39 | * TheStar: 40 | * [https://www.facebook.com/100394606686948/posts/2814534845272897/?vh=e](https://www.facebook.com/100394606686948/posts/2814534845272897/?vh=e) 41 | * [https://thewuhanvirus.com/](https://thewuhanvirus.com/) 42 | * [https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html\#/bda7594740fd40299423467b48e9ecf6](https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6) 43 | * Wikipedia 44 | * [https://en.wikipedia.org/wiki/Coronavirus](https://en.wikipedia.org/wiki/Coronavirus) 45 | * [https://en.wikipedia.org/wiki/2019\_novel\_coronavirus](https://en.wikipedia.org/wiki/2019_novel_coronavirus) 46 | * [https://en.wikipedia.org/wiki/2019%E2%80%9320\_Wuhan\_coronavirus\_outbreak](https://en.wikipedia.org/wiki/2019%E2%80%9320_Wuhan_coronavirus_outbreak) 47 | 48 | -------------------------------------------------------------------------------- /notes/archive/coworking-spaces.md: -------------------------------------------------------------------------------- 1 | # Coworking Spaces 2 | 3 | Why I wouldn’t pay as a single individual: 4 | 5 | * Primary concerns are as a single individual 6 | * I would only spend a 1-2 hours there a day 7 | * I could potentially go to a coffee shop instead 8 | * I like physically moving around 9 | 10 | When I would pay: 11 | 12 | * Central location for a team to come together for a few hours at a time 13 | 14 | -------------------------------------------------------------------------------- /notes/archive/daily-routine.md: -------------------------------------------------------------------------------- 1 | # Daily Routine 2 | 3 | ## Morning Routine 4 | 5 | ### Purpose: 6 | 7 | * Gratitude 8 | * Orienting Direction 9 | * Planning 10 | * Aligning focus 11 | * Start small, small easy tasks and work your way to increased difficulty 12 | * Start slow 13 | * Slow down 14 | * Keywords: 15 | * [Connection](https://www.deepthoughtapp.com/en/keywords/connection/) 16 | * [Consistency](https://www.deepthoughtapp.com/en/keywords/consistency/) 17 | * [Habit](https://www.deepthoughtapp.com/en/keywords/habit/) 18 | * [Momentum](https://www.deepthoughtapp.com/en/keywords/momentum/) 19 | * [Rhythm](https://www.deepthoughtapp.com/en/keywords/rhythm/) 20 | * [Routine](https://www.deepthoughtapp.com/en/keywords/routine/) 21 | * [Persistence](https://www.deepthoughtapp.com/en/keywords/persistence/) 22 | * [Progress](https://www.deepthoughtapp.com/en/keywords/progress/) 23 | 24 | ### Routine: 25 | 26 | * [Facebook Memories](https://www.facebook.com/memories/) 27 | * Day One 28 | * Daily Stoic 29 | * [Deep Thought: On This Day](https://www.deepthoughtapp.com/answers/onthisday/) 30 | * [Deep Thought: Routines](https://www.deepthoughtapp.com/en/keywords/routines/) 31 | * [Calendar](https://calendar.google.com/calendar/r/day) 32 | * Confirm Meetings Today, and tomorrow 33 | * Plan ahead 34 | 35 | ## Night Routine 36 | 37 | ### Purpose: 38 | 39 | * Calm myself 40 | * Close the day, chapter 41 | * Reflection 42 | 43 | -------------------------------------------------------------------------------- /notes/archive/dating.md: -------------------------------------------------------------------------------- 1 | # Dating 2 | 3 | This is all "in theory" but may not necessarily be true. 4 | 5 | ## Age 6 | 7 | ### Someone Younger 8 | 9 | * Less wisdom 10 | * Should be less mature 11 | * Expected to be less responsible 12 | 13 | ### Someone Older 14 | 15 | * More wisdom 16 | * Can be able to support you better financially, emotionally 17 | * Should be more mature 18 | * Expected to be more responsible 19 | 20 | ## Distance 21 | 22 | ### Short Distance 23 | 24 | * More opportunities to meet each other regularly 25 | * More chances for passive intimacy 26 | 27 | ### Long Distance 28 | 29 | * Meet more infrequently 30 | * More expectations each time you meet 31 | * Allows and requires you to be more independent 32 | * Harder to physically support each other 33 | * Naturally gives yourself space from your partner 34 | * Requires more asynchronous communication 35 | * Less chances for passive intimacy 36 | 37 | -------------------------------------------------------------------------------- /notes/archive/dns.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Domain Name System (DNS) 3 | --- 4 | 5 | # DNS 6 | 7 | Also see: 8 | 9 | * [VPN](vpn.md) 10 | 11 | macOS clear DNS cache. \(macOS 10.10.4 and above\) 12 | 13 | Option 1: 14 | 15 | ```bash 16 | sudo killall -HUP mDNSResponder 17 | ``` 18 | 19 | Option 2: 20 | 21 | ```bash 22 | dscacheutil -fluscache 23 | ``` 24 | 25 | ### Test 26 | 27 | ```bash 28 | host -t ns aizatto.com 29 | ``` 30 | 31 | -------------------------------------------------------------------------------- /notes/archive/domain-registrars.md: -------------------------------------------------------------------------------- 1 | # Domain Registrars 2 | 3 | ### Cloudflare 4 | 5 | [https://www.cloudflare.com/](https://www.cloudflare.com/) 6 | 7 | Pros: 8 | 9 | * Does SSL certificates 10 | 11 | ### Google Domain 12 | 13 | [https://domains.google.com/](https://domains.google.com/) 14 | 15 | Cons: 16 | 17 | * Doesn't do SSL certificates 18 | 19 | ## Purchasing .my Domains 20 | 21 | * [Exabytes](https://www.exabytes.my/) 22 | 23 | [mynic](https://www.mynic.my/en/) is absolute crap. 24 | 25 | * Terrible interface 26 | * Hard to search 27 | * Slow 28 | 29 | -------------------------------------------------------------------------------- /notes/archive/driving.md: -------------------------------------------------------------------------------- 1 | # Driving 2 | 3 | The assumptions written here are for right hand drive cars. Please apply to the appropriate country you are in. 4 | 5 | ## Right Hand Drive Cars 6 | 7 | Language for Right Hand Drive Cars. 8 | 9 | Includes: Malaysia, Singapore, Hong Kong, UK. 10 | 11 | * Don't be inconsiderate 12 | * Don't drive inconsiderately 13 | * Don't park inconsiderately 14 | * Always use your turn signals 15 | 16 | * Even if there are no cars there, it is a good habit to use them. 17 | * Be intentional about your direction. 18 | 19 | Never cruise in the fast lane \(right most lane\). 20 | 21 | * If you are planning to cruise, do it in the middle lane. 22 | 23 | * Never change direction in the last second 24 | * This can cause an accident 25 | * If you are going to possibly miss a turn, just miss it instead of quickly serving to try to make your turn 26 | 27 | Scenario: 28 | 29 | * If you need to make an immediate left after a right turn, stay on the left side \(outside turn\). 30 | 31 | -------------------------------------------------------------------------------- /notes/archive/facebook-for-developers.md: -------------------------------------------------------------------------------- 1 | # Facebook for Developers 2 | 3 | ## Limitations 4 | 5 | * Restrictions on getting access to Groups and Pages 6 | * Have to request access and go through an "App Review" 7 | 8 | -------------------------------------------------------------------------------- /notes/archive/fever.md: -------------------------------------------------------------------------------- 1 | # Fever 2 | 3 | Temperature Scale 4 | 5 | | F | C | | 6 | | ---: | ---: | :--- | 7 | | 98 - 98.6 | 36.67-37 | Average / Normal / Expected | 8 | | >99.5 | 37.5 | Considered a fever | 9 | | 102 | 38.9 | fight body infection | 10 | | 103-104 | 39.4-40 | Tolerable for short periods | 11 | | 104-107 | 40-41.67 | Dangerous | 12 | 13 | * [https://www.healthlinkbc.ca/health-topics/fevr4](https://www.healthlinkbc.ca/health-topics/fevr4) 14 | * [https://share.upmc.com/2016/10/fever-treatment-guidelines/](https://share.upmc.com/2016/10/fever-treatment-guidelines/) 15 | 16 | -------------------------------------------------------------------------------- /notes/archive/fiverr.md: -------------------------------------------------------------------------------- 1 | # Fiverr 2 | 3 | Sign up using my [Referral Code](http://www.fiverr.com/s2/9440968136), you get $100 and so do I. 4 | 5 | Tips: 6 | 7 | * Feel free to communicate with the sellers first. 8 | * Save your favorites 9 | * Do trial runs 10 | * [iOS App](https://itunes.apple.com/us/app/fiverr-freelance-services/id346080608?mt=8) 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /notes/archive/flights.md: -------------------------------------------------------------------------------- 1 | # Flights 2 | 3 | Which seat? 4 | 5 | * Find a seat viewable to the toilet 6 | * So you can see if there is a queue while sitting down 7 | * Not so close to the baby chair 8 | * Incase of crying babies 9 | 10 | Traveling longer than 5hrs+ \(International\) 11 | 12 | * You may want a power point 13 | * Bumping to premium economy 14 | 15 | -------------------------------------------------------------------------------- /notes/archive/gaming-tablet.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Gaming on the go. Gaming convenience. 3 | --- 4 | 5 | # Gaming Tablet 6 | 7 | I like my Nintendo Switch for its form factor, and making gaming more "casual", but it doesn't have all the games I want to play. 8 | 9 | * Form factor of Nintendo Switch \(with controllers by the side\) 10 | * Plays Windows/Steam games 11 | * I want to "Pick up and Play" 12 | * Play from the coach/bed 13 | * Quick success or failure 14 | * Some sort of satisfaction within 15 minutes that makes me feel like I have progress, or am progressing 15 | 16 | Options: 17 | 18 | * [GPD WIN 2](https://www.indiegogo.com/projects/gpd-win-2-handheld-game-console-for-aaa-games--2#/) 19 | * Pros: 20 | * Full Windows Support 21 | * Android Tablet, with Shell for JoyCons 22 | * VNC into a Windows PC 23 | * [Shadow](https://shadow.tech/int) 24 | * Cons: 25 | * No support in Malaysia 26 | * No official iOS App, they have a Beta though 27 | * [Stadia](https://stadia.dev/) 28 | * [https://stadia.dev/](https://stadia.dev/) 29 | * Cons: 30 | * Not officially launched 31 | * Apple Arcade 32 | * [https://www.apple.com/my/apple-arcade/](https://www.apple.com/my/apple-arcade/) 33 | * Cons: 34 | * I want to play old games available on Steam 35 | * PS4 Remote Play 36 | * Works on iPhone / iPad 37 | * Limited to PS4 games 38 | * [https://remoteplay.dl.playstation.net/remoteplay/lang/en/index.html](https://remoteplay.dl.playstation.net/remoteplay/lang/en/index.html) 39 | * [https://itunes.apple.com/us/app/ps4-remote-play/id1436192460?mt=8](https://itunes.apple.com/us/app/ps4-remote-play/id1436192460?mt=8) 40 | * Steamlink 41 | * Requires: 42 | * Windows Pc 43 | * Android Tablet 44 | * [https://play.google.com/store/apps/details?id=com.valvesoftware.steamlink](https://play.google.com/store/apps/details?id=com.valvesoftware.steamlink) 45 | * Doesn't work on iPhone / iPad 46 | * [https://store.steampowered.com/steamlink/about/](https://store.steampowered.com/steamlink/about/) 47 | 48 | Games I want to play: 49 | 50 | * Old school games, emulator 51 | * Final Fantasy VII 52 | * Final Fantasy VI 53 | * Simple games, for a simpler time 54 | * Nostalgia 55 | 56 | Concerns: 57 | 58 | * iPad Controllers 59 | 60 | * Need an MFI controller 61 | * [https://www.macworld.co.uk/feature/ipad/best-ios-controllers-mfi-3621760/](https://www.macworld.co.uk/feature/ipad/best-ios-controllers-mfi-3621760/) 62 | * Steel Series Nimbus $49.95 63 | * 8Bitdo Controllers work 64 | * JoyCons don't natively work on iPads 65 | 66 | * I don't have the time or focus to play video games 67 | 68 | -------------------------------------------------------------------------------- /notes/archive/github.md: -------------------------------------------------------------------------------- 1 | # GitHub 2 | 3 | * See [character-length](https://github.com/aizatto/character-length) 4 | * Learn more about GitHub UI limitations 5 | * See [git](cli/git.md) 6 | 7 | ## Notifications 8 | 9 | Important to configure this when joining a company 10 | 11 | * Add your "other" email to GitHub emails 12 | * [https://github.com/settings/emails](https://github.com/settings/emails) 13 | * Notifications 14 | * [https://github.com/settings/notifications](https://github.com/settings/notifications) 15 | * Automatic watching: disable 16 | * Automatically watch repositories 17 | * Change notification custom routing to your "other" email 18 | 19 | ## GitHub Pros 20 | 21 | * Searching [https://help.github.com/articles/searching-code/](https://help.github.com/articles/searching-code/) 22 | 23 | ## GitHub Cons 24 | 25 | * On the "Pull Requests" page, it doesn't show size of pull requests 26 | * Makes it easier to quickly gauge which PRs to review 27 | * Pull Requests 28 | * Code comments don't span multiple lines 29 | * You cannot comment on files outside modified lines \(within a window\), this is useful for pointing out other errors in the file. 30 | * Commit Message is not prefilled with 1st comment. You can have Pull Request Templates, but it's not the same. That is a "post" event. we should be able to edit the message before merging. 31 | * Styling. The Headers \(h1\) make it feel like such a heavy code. 32 | * Can't compare with the last commit in a PR 33 | * Hard to see fixes between commits in a PR 34 | * Conversations can be "resolved", hiding conversations, no way to prevent this from happening 35 | * Comments can't be made on branch comparisons 36 | * You have to make a PR first 37 | * [https://github.com/aizatto/git-mv/compare/compare\#diff-c3d57eb88086a04b1e04d06a9b6188e5R3](https://github.com/aizatto/git-mv/compare/compare#diff-c3d57eb88086a04b1e04d06a9b6188e5R3) 38 | * Personal email address can leak into repositories via merges 39 | * [https://github.com/isaacs/github/issues/95](https://github.com/isaacs/github/issues/95) 40 | * [https://github.com/isaacs/github](https://github.com/isaacs/github) 41 | * [https://github.com/dear-github/dear-github](https://github.com/dear-github/dear-github) 42 | * [https://www.reddit.com/r/golang/comments/71g6c8/proposal\_just\_use\_github\_issue\_21956\_golanggo/](https://www.reddit.com/r/golang/comments/71g6c8/proposal_just_use_github_issue_21956_golanggo/) 43 | 44 | ## Notes 45 | 46 | * Go is on GitHub, but they use Gerrit for code review 47 | 48 | ### Alternatives 49 | 50 | * GitLab 51 | * Upsource 52 | * Phabricator 53 | * Critque \(Used at Google\) 54 | 55 | ## Tooling 56 | 57 | ### [Hub](https://github.com/github/hub) 58 | 59 | ```bash 60 | brew install hub 61 | ``` 62 | 63 | [https://github.com/github/hub/issues/435](https://github.com/github/hub/issues/435) 64 | 65 | Disable 2factor temporarily 66 | 67 | Open current repository in your browser 68 | 69 | ```bash 70 | hub browse 71 | ``` 72 | 73 | -------------------------------------------------------------------------------- /notes/archive/go-lang.md: -------------------------------------------------------------------------------- 1 | # Go Lang 2 | 3 | * [https://golang.org/](https://golang.org/) 4 | * [https://golang.org/doc/code.html](https://golang.org/doc/code.html) 5 | * [https://golang.org/doc/effective\_go.html](https://golang.org/doc/effective_go.html) 6 | * [https://github.com/golang/go/wiki/Learn](https://github.com/golang/go/wiki/Learn) 7 | * [https://github.com/golang/go/wiki/CodeReviewComments](https://github.com/golang/go/wiki/CodeReviewComments) 8 | * Git [pre-commit hook](https://golang.org/misc/git/pre-commit) 9 | 10 | ## Set up 11 | 12 | ```bash 13 | brew install go 14 | mkdir -p ~/src/go 15 | ln -s ~/src/go ~/go 16 | ``` 17 | 18 | ## Inside .bash\_profile 19 | 20 | ```bash 21 | [[ -d $HOME/src/go/ ]] && export GOPATH=$HOME/src/go/ 22 | ``` 23 | 24 | ## Others 25 | 26 | ```bash 27 | export GOPATH=$(go env GOPATH) 28 | export PATH=$PATH:$(go env GOPATH)/bin 29 | ``` 30 | 31 | ## Pros 32 | 33 | * `gofmt` 34 | 35 | ## Cons 36 | 37 | * Uses tabs for identation 38 | 39 | ## Editorconfig 40 | 41 | [https://github.com/editorconfig/editorconfig-core-go/blob/master/.editorconfig](https://github.com/editorconfig/editorconfig-core-go/blob/master/.editorconfig) 42 | 43 | ## GraphQL 44 | 45 | [https://github.com/neelance/graphql-go](https://github.com/neelance/graphql-go) [https://github.com/graphql-go/graphql](https://github.com/graphql-go/graphql) [https://github.com/graphql-go/relay](https://github.com/graphql-go/relay) 46 | 47 | ## length 48 | 49 | ```go 50 | len("/view/") 51 | ``` 52 | 53 | ## Best Practices 54 | 55 | [https://talks.golang.org/2013/bestpractices.slide\#1](https://talks.golang.org/2013/bestpractices.slide#1) [https://peter.bourgon.org/go-best-practices-2016/\#development-environment](https://peter.bourgon.org/go-best-practices-2016/#development-environment) [https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1](https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1) [https://devhints.io/go](https://devhints.io/go) 56 | 57 | ## Examples 58 | 59 | ### Wiki 60 | 61 | [https://golang.org/doc/articles/wiki/](https://golang.org/doc/articles/wiki/) [https://golang.org/doc/articles/wiki/final.go](https://golang.org/doc/articles/wiki/final.go) 62 | 63 | -------------------------------------------------------------------------------- /notes/archive/headsets.md: -------------------------------------------------------------------------------- 1 | # Headsets 2 | 3 | ## AirPods 4 | 5 | After 2 years they seem to be dying. 6 | 7 | ## Bose QuickComfort 35 \(version 1\) 8 | 9 | * Still working great after 2 years 10 | * I love the detachable and replaceable audio cable. 11 | * Incident of someone breaking my cable because it was plugged into the airplane seat and they crushed it when moving 12 | * I love that the ear cuffs are also replaceable. 13 | * They got worn out after the first year, probably because of heavy use of it with my sunglasses during commuting 14 | 15 | Cons: 16 | 17 | * Micro USB 18 | 19 | ## I’m eyeing: 20 | 21 | ### Sony WH-1000XM3 22 | 23 | Pros: 24 | 25 | * USB -C 26 | 27 | -------------------------------------------------------------------------------- /notes/archive/hiking/README.md: -------------------------------------------------------------------------------- 1 | # Hiking 2 | 3 | Bring: 4 | 5 | * Water 6 | * Snacks 7 | * Plastic Bag 8 | * Dirty Shoes 9 | * Pick up trash people have left behind 10 | * Spare slippers/shoes 11 | * Spare clothes 12 | 13 | Apple Watch: 14 | 15 | * Choose "Hiking" 16 | 17 | Gotchas: 18 | 19 | * 1km can be very different depending on the terrain 20 | * If its rainy season it can be more dangerous 21 | * Muddy and slippery 22 | 23 | Apps: 24 | 25 | * All Trails 26 | * https://www.alltrails.com/ 27 | * https://apps.apple.com/us/app/alltrails-hike-bike-run/id405075943 28 | * [Maps.me](http://maps.me/) 29 | * https://maps.me/ 30 | * https://apps.apple.com/us/app/maps-me-offline-map-nav/id510623322 31 | * Not dedicate to hiking 32 | * Strava 33 | * https://app.logbook.my/tags/strava 34 | 35 | Also see: 36 | 37 | * [Road Trips](../road-trips.md) 38 | 39 | -------------------------------------------------------------------------------- /notes/archive/hiking/chamang-waterfalls.md: -------------------------------------------------------------------------------- 1 | # Chamang Waterfalls 2 | 3 | {% hint style="danger" %} 4 | Closed from 1st November 2019 to 31st January 2020 5 | {% endhint %} 6 | 7 | Links: 8 | 9 | * [https://maps.google.com/?cid=18191218778365894205](https://maps.google.com/?cid=18191218778365894205) 10 | * Approx 1h19min from KL 11 | 12 | Resources: 13 | 14 | * [http://www.gobentong.com/en/attraction/attraction/chamang-waterfall](http://www.gobentong.com/en/attraction/attraction/chamang-waterfall)[https://www.tripadvisor.com.my/Attraction\_Review-g2301861-d2462371-Reviews-Chamang\_Waterfall-Bentong\_Pahang.html](https://www.tripadvisor.com.my/Attraction\_Review-g2301861-d2462371-Reviews-Chamang\_Waterfall-Bentong\_Pahang.html) 15 | * [http://www.waterfallsofmalaysia.com/25chamang.php](http://www.waterfallsofmalaysia.com/25chamang.php)[https://www.inspirock.com/malaysia/bentong/chamang-waterfall-a893571467](https://www.inspirock.com/malaysia/bentong/chamang-waterfall-a893571467) 16 | * [https://www.google.com/maps/place/Chamang+Waterfall/@3.509595,101.8556234,17z/data=!4m5!3m4!1s0x31cc0fd9789e2543:0xfc74311903ea1e3d!8m2!3d3.509595!4d101.8578121](https://www.google.com/maps/place/Chamang+Waterfall/@3.509595,101.8556234,17z/data=!4m5!3m4!1s0x31cc0fd9789e2543:0xfc74311903ea1e3d!8m2!3d3.509595!4d101.8578121) 17 | * [https://www.alltrails.com/trail/malaysia/pahang/chamang-waterfalls](https://www.alltrails.com/trail/malaysia/pahang/chamang-waterfalls) 18 | * [https://www.instagram.com/explore/locations/484840824868875/chamang-waterfall/](https://www.instagram.com/explore/locations/484840824868875/chamang-waterfall/) 19 | * [https://www.instagram.com/explore/locations/739684676/chamang-waterfall/](https://www.instagram.com/explore/locations/739684676/chamang-waterfall/) 20 | * [https://www.instagram.com/explore/tags/chamangwaterfall/](https://www.instagram.com/explore/tags/chamangwaterfall/) 21 | * \ 22 | [https://www.youtube.com/results?search\_query=chamang+waterfall](https://www.youtube.com/results?search\_query=chamang+waterfall) 23 | -------------------------------------------------------------------------------- /notes/archive/hiking/kanching-waterfalls.md: -------------------------------------------------------------------------------- 1 | # Kanching Waterfalls 2 | 3 | Location: 4 | 5 | * [https://goo.gl/maps/3azHaaERdboqNooo7](https://goo.gl/maps/3azHaaERdboqNooo7) 6 | * Distance from KL: 30mins 7 | 8 | Hiking to the top: Less than 1hour 9 | 10 | * Two different sections: Paved, and unpaved 11 | * Paved: 12 | * Cement stairs 13 | * Unpaved: 14 | * Jungle and mossy rocks 15 | 16 | Entrance fee \(paid at parking entrance\): 17 | 18 | * RM2/car 19 | * RM2/person 20 | 21 | Resources: 22 | 23 | * [http://waterfallsofmalaysia.com/01kanching.php](http://waterfallsofmalaysia.com/01kanching.php) 24 | * [https://www.malaysia-traveller.com/kanching.html](https://www.malaysia-traveller.com/kanching.html) 25 | * [https://thewanderinglinguist.com/2018/06/27/kanching-falls/](https://thewanderinglinguist.com/2018/06/27/kanching-falls/) 26 | * [https://www.tripadvisor.com.my/Attraction\_Review-g298570-d1438257-Reviews-Kanching\_Rainforest\_Waterfall-Kuala\_Lumpur\_Wilayah\_Persekutuan.html](https://www.tripadvisor.com.my/Attraction_Review-g298570-d1438257-Reviews-Kanching_Rainforest_Waterfall-Kuala_Lumpur_Wilayah_Persekutuan.html) 27 | * [https://www.alltrails.com/trail/malaysia/selangor/kanching-waterfalls](https://www.alltrails.com/trail/malaysia/selangor/kanching-waterfalls) 28 | * Instagram 29 | * [https://www.instagram.com/explore/locations/983695748/kanching-falls/](https://www.instagram.com/explore/locations/983695748/kanching-falls/) 30 | * [https://www.instagram.com/explore/tags/kanchingfalls/](https://www.instagram.com/explore/tags/kanchingfalls/) 31 | * YouTube 32 | * [https://www.youtube.com/results?search\_query=kanching+falls](https://www.youtube.com/results?search_query=kanching+falls) 33 | 34 | ![](../../../.gitbook/assets/img_7218.PNG) 35 | 36 | -------------------------------------------------------------------------------- /notes/archive/hiking/kota-damansara-community-forest-reserve.md: -------------------------------------------------------------------------------- 1 | # Kota Damansara Community Forest Reserve 2 | 3 | Kota Damansara Community Forest Reserve 4 | 5 | Jalan Merbah 10/1, Seksyen 10 Kota Damansara, 47810 Petaling Jaya, Selangor 012-352 0215 6 | 7 | [https://goo.gl/maps/i8izzCtrWbSZAKxW6](https://goo.gl/maps/i8izzCtrWbSZAKxW6) 8 | 9 | Many trails and paths. 10 | 11 | * [https://www.alltrails.com/parks/malaysia/selangor/kota-damansara-community-forest-reserve](https://www.alltrails.com/parks/malaysia/selangor/kota-damansara-community-forest-reserve) 12 | 13 | -------------------------------------------------------------------------------- /notes/archive/home-device-calling.md: -------------------------------------------------------------------------------- 1 | # Home Device Calling 2 | 3 | **Wants** 4 | 5 | * Easy drop in 6 | * Display photos 7 | * Ideally from google Photos 8 | * Voltage 9 | 10 | **Lenovo Home Device** 11 | 12 | Lenovo 13 | 14 | **Facebook Portal** 15 | 16 | [https://portal.facebook.com/](https://portal.facebook.com/) 17 | 18 | Pros: 19 | 20 | * Camera focusing on an individual 21 | * Focus on calling 22 | 23 | concern: 24 | 25 | * Only tied to one account 26 | * I want a generic “home” account that is dialed 27 | * Who are the photos displayed from? 28 | 29 | **Echo Show** 30 | 31 | [https://www.androidcentral.com/thrifter-deal-woot-1st-gen-echo-show-used](https://www.androidcentral.com/thrifter-deal-woot-1st-gen-echo-show-used) 32 | 33 | All-new Echo Show \(2nd Gen\) – Premium sound and a vibrant 10.1” HD screen - Charcoal https://www.amazon.com/dp/B077SXWSRP/ref=cm\_sw\_r\_cp\_api\_i\_QDOpCb6C2AHQR 34 | 35 | Echo Show makes it easy to stay in touch. Make video calls to friends and family who have Skype, the Alexa app, an Echo Spot, or Echo Show. You can also make voice calls, send messages, or instantly connect to other devices in your home to make a quick announcement or check in on the kids. Plus, now with Skype calling stay in touch with friends and family in over 150 countries. 36 | 37 | **DIY** 38 | 39 | Concerns: 40 | 41 | * Home sharing device 42 | * Possibly used between multiple people 43 | 44 | Product: 45 | 46 | * Speaker 47 | * Camera is in position for horizontal layout 48 | * Each device should get a UUID 49 | * You can call a device based on its UUID 50 | * Photos for photoframe are stored directly on the device 51 | * Photos can be “pushed” to the device 52 | * Send to the UUID a picture 53 | * Photos can be polled from a feed, or social media 54 | * Can be an android tablet with the camera on top 55 | * “Drop in” feature 56 | * “Automatic pickup” 57 | 58 | Tablets: 59 | 60 | * Lenovo Tab 10, 10-Inch Android Tablet, Qualcomm Snapdragon 210 Quad-Core 1.3 GHz Processor, 2GB RAM, 16 GB Storage, Slate Black - Lenovo TB-X103F https://www.amazon.com/dp/B01MR3FS4F/ref=cm\_sw\_r\_cp\_tai\_hzRpCb8FVG1F6 61 | 62 | Could ideally just be an android software nicely put together with the correct hardware 63 | 64 | -------------------------------------------------------------------------------- /notes/archive/icalendar.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | This is regarding the: Internet Calendaring and Scheduling Core Object 4 | Specification (iCalendar) 5 | --- 6 | 7 | # iCalendar 8 | 9 | * [https://tools.ietf.org/html/rfc5545](https://tools.ietf.org/html/rfc5545) 10 | * [https://en.wikipedia.org/wiki/ICalendar](https://en.wikipedia.org/wiki/ICalendar) 11 | * [https://icalendar.org/](https://icalendar.org/) 12 | * [https://github.com/aizatto/ical-debugger](https://github.com/aizatto/ical-debugger) 13 | * [https://aizatto.github.io/ical-debugger/](https://aizatto.github.io/ical-debugger/) 14 | 15 | ## Best Practices 16 | 17 | Use VALARMs to set reminders \( 3.6.6, page 70\) 18 | 19 | > A "VALARM" calendar component is a grouping of component properties that is a reminder or alarm for an event or a to-do. For example, it may be used to define a reminder for a pending event or an overdue to-do. 20 | 21 | Example: 22 | 23 | ```text 24 | BEGIN:VALARM 25 | ACTION:DISPLAY 26 | TRIGGER:-PT5M 27 | DESCRIPTION:This is an event reminder 28 | END:VALARM 29 | ``` 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /notes/archive/keyboards/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: A personal self reminder about keyboards available in the market 3 | --- 4 | 5 | # Keyboards 6 | 7 | ## Wants: 8 | 9 | * USB C 10 | 11 | ## Own 12 | 13 | * [WASD Code Keyboard](https://amzn.to/2TPIWww) 87key Cheerry MX Blue 14 | * [Official Page](http://www.wasdkeyboards.com/index.php/products/code-keyboard/code-87-key-mechanical-keyboard-2620.html) 15 | * [Logitech K811](https://www.amazon.com/gp/product/B0099SMFP2/ref=oh_aui_search_asin_title?ie=UTF8&psc=1) 16 | * Pros: 17 | * I like the design and style 18 | * Rechargeable battery 19 | * Cons: 20 | * Micro USB 21 | 22 | ## Curious: 23 | 24 | * Microsoft Universal Foldable Keyboard 25 | * [Amazon Link](https://amzn.to/2WzO1Lc) 26 | * Pros: 27 | * Slim 28 | * Cons: 29 | * Micro USB 30 | 31 | -------------------------------------------------------------------------------- /notes/archive/keyboards/ergodox-ez.md: -------------------------------------------------------------------------------- 1 | # Ergodox Ez 2 | 3 | * [https://ergodox-ez.com/](https://ergodox-ez.com/) 4 | * [Layout ](https://configure.ergodox-ez.com/ergodox-ez/layouts/9wKPo/latest/0) 5 | 6 | Thoughts: 7 | 8 | * Require rewiring your muscle memory 9 | * Wish there was an FN row 10 | * Maybe custom qwerty layout, with customizable keys 11 | * Keys feel a little rough, not polished 12 | * Also key caps feel a little soft 13 | * Need a larger desktop resolution than 1280 to modify keys 14 | * Tilt kit can be of higher quality 15 | * I feel in general it be higher quality 16 | * Expected LED to be brighter 17 | * Wished it was USB-C 18 | * Wish the USB Port was on the left side. 19 | * Status LEDs are super bright, can't seem to dim them 20 | * Not all keys are lit up 21 | * Chonky 22 | * Ortholinear 23 | 24 | ## Costs to Malaysia 25 | 26 | | Item | Cost \(USD\) | Cost \(MYR\) | 27 | | :--- | :--- | :--- | 28 | | ErgoDox EZ Glow Standalone | 299 | 1,279.72 | 29 | | Tilt/Tent Kit | 25 | 107 | 30 | | The Wing | 30 | 128.40 | 31 | | Customs Tax | 21.76 | 93.15 | 32 | | Total | 375.76 | 1608.27 | 33 | 34 | ## Timing 35 | 36 | | | | 37 | | :--- | :--- | 38 | | Purchased | Monday June 8th 2020 | 39 | | Arrived | Monday June 15th 2020 | 40 | 41 | -------------------------------------------------------------------------------- /notes/archive/mental-health-malaysia.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Resource on Mental Health in Malaysia 3 | --- 4 | 5 | # Mental Health Malaysia 6 | 7 | Mental Illness Awareness & Support Association \(MIASA\) 8 | 9 | * [http://miasa.org.my/](http://miasa.org.my/) 10 | * [miasa.malaysia@gmail.com](mailto:miasa.malaysia@gmail.com) 11 | * 03-7732 2414 / 013-878 1322 12 | * 014-223 6938 / 019-236 2423 13 | 14 | Malaysian Mental Health Association 15 | 16 | * [https://mmha.org.my/](https://mmha.org.my/) 17 | * [https://mmha.org.my/find-help/psychological-support-services/](https://mmha.org.my/find-help/psychological-support-services/) 18 | * [https://mmha.org.my/contacts/](https://mmha.org.my/contacts/) 19 | * [https://www.facebook.com/MMHAOfficial/](https://www.facebook.com/MMHAOfficial/) 20 | * 03-2780 6803 21 | * [admin@mmha.org.my](mailto:admin@mmha.org.my) 22 | 23 | UM Specialist Center 24 | 25 | * [https://umsc.my/?page\_id=2844115](https://umsc.my/?page_id=2844115) 26 | 27 | Befrienders 28 | 29 | * [https://www.befrienders.org.my/](https://www.befrienders.org.my/) 30 | * +603 7956 8145 31 | 32 | Naluri 33 | 34 | * [https://www.naluri.life/](https://www.naluri.life/) 35 | 36 | "Naluri will get you there. Through personalized multidisciplinary and professional coaching, you’ll be at your best and healthiest – not just “trying.”" 37 | 38 | Thoughtfull 39 | 40 | * [https://www.thoughtfull.world/](https://www.thoughtfull.world/) 41 | * [https://www.facebook.com/athoughtfullworld](https://www.facebook.com/athoughtfullworld) 42 | * [https://www.linkedin.com/company/thoughtfullworld/](https://www.linkedin.com/company/thoughtfullworld/ 43 | ) 44 | 45 | -------------------------------------------------------------------------------- /notes/archive/mouse.md: -------------------------------------------------------------------------------- 1 | # Mouse 2 | 3 | ## Mouses 4 | 5 | ### Logitech G502 Lightspeed Wireless 6 | 7 | Software: Logitech G Hub 8 | 9 | Pros: 10 | 11 | * 11 Buttons 12 | 13 | Cons: 14 | 15 | * Logitech G Hub software can't invert the mouse scroll on Windows 16 | * Micro USB in 2020 17 | * Can't dim the LED 18 | * Wheel seems too sensitive; or when on the non smooth mode, too rigid 19 | 20 | ### Logitech MX Master 3 21 | 22 | Software: Logitech Options 23 | 24 | Great work mouse 25 | 26 | ## Software 27 | 28 | ### Logitech G Hub 29 | 30 | * What is G-SHIFT? 31 | * Another mode? 32 | 33 | ### Logitech Options 34 | 35 | * Invert scroll wheel 36 | * Don't have to create macros, ie to do Ctrl Space 37 | * Can add additional programs 38 | * Don't have to click back and forth to switch between viewing side buttons 39 | 40 | -------------------------------------------------------------------------------- /notes/archive/multiroom-wireless-speaker-system.md: -------------------------------------------------------------------------------- 1 | # Multiroom Wireless Speaker System 2 | 3 | [https://thewirecutter.com/reviews/sonos-player/](https://thewirecutter.com/reviews/sonos-player/) 4 | 5 | Pros of a system: 6 | 7 | * Not linked to Bluetooth 8 | * You don't hear your phone notifications 9 | * Great to fill the house with music 10 | * Can walk room to room with music 11 | 12 | ## Bose Soundtouch 13 | 14 | ### Bose SoundTouch 10 15 | 16 | Pros: 17 | 18 | * Has bluetooth and aux in 19 | * Has 6 preset buttons 20 | 21 | ## Sonos 22 | 23 | [https://www.sonos.com/en-us/shop](https://www.sonos.com/en-us/shop) 24 | 25 | Cons: 26 | 27 | * No Bluetooth 28 | * No easy analog audio in 29 | 30 | ### One, Play:1 31 | 32 | Cons: 33 | 34 | * Equivalent to Bose Soundtouch 10 35 | * Sonos One has no audio in 36 | * Sonos One has no aux in 37 | 38 | ### Playbase 39 | 40 | Cons: 41 | 42 | * Doesn't have HDMI in, so it's not so future proof 43 | * Use optical in instead 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /notes/archive/musicals.md: -------------------------------------------------------------------------------- 1 | # Musicals 2 | 3 | * Hamilton 4 | * Aladdin 5 | * Wicked 6 | 7 | #### Hamilton 8 | 9 | This is a must go. 10 | 11 | -------------------------------------------------------------------------------- /notes/archive/old-hardware/README.md: -------------------------------------------------------------------------------- 1 | # Old Hardware 2 | 3 | -------------------------------------------------------------------------------- /notes/archive/old-hardware/netgear-r7000p.md: -------------------------------------------------------------------------------- 1 | # Netgear R7000P 2 | 3 | ## Setting up VPN on a Netgear R7000P Nighthawk 4 | 5 | ### Access Router 6 | 7 | Access your router (either): 8 | 9 | * [http://192.168.1.1/ ](http://192.168.1.1/) 10 | * http://www.routerlogin.net/ 11 | 12 | Default password ([Google query](https://www.google.com/search?q=default+password+Netgear+R7000P)) 13 | 14 | * default user: admin 15 | * default password: password 16 | 17 | So maybe one of these would work: 18 | 19 | * [http://admin:password@192.168.1.1/](http://admin:password@192.168.1.1/) 20 | * [http://admin:password@www.routerlogin.net/](http://admin:password@www.routerlogin.net/) 21 | 22 | ### Enable Dynamic DNS 23 | 24 | Go to: Advanced > Advanced Setup > Dynamic DNS 25 | 26 | ### Enable VPN 27 | 28 | Go to: Advanced > Advanced Setup > VPN Service 29 | 30 | Change setting: 31 | 32 | Clients will use this VPN connection to access All sites on the Internet & Home Network 33 | 34 | ### Download VPN Certificate 35 | 36 | Download: "OpenVPN configuration package download" "For Smart Phone" 37 | 38 | * Downloads a [smartphone.zip](http://smartphone.zip/) 39 | * Unzip file 40 | * Locate client3.ovpn 41 | 42 | ### Download VPN Client 43 | 44 | ### Download OpenVPN Client for Desktop 45 | 46 | * [https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-macos/](https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-macos/) 47 | * [https://tunnelblick.net/](https://tunnelblick.net/) 48 | 49 | Official Open VPN client 50 | 51 | * Install client 52 | * Open it in Applications > OpenVPN > OpenVPN Connect 53 | * Find it in the menu bar in the top right 54 | * Click it, then "Import" > "From local file..." 55 | * Select client3.ovpn 56 | * Test vpn setup 57 | -------------------------------------------------------------------------------- /notes/archive/password-managers.md: -------------------------------------------------------------------------------- 1 | # Password Managers 2 | 3 | I personally use [1Password](https://1password.com/). 4 | 5 | Alternatives: 6 | 7 | * [LassPass](https://www.lastpass.com/) 8 | * [DashLane](https://www.dashlane.com/) 9 | * [Apple's iCloud KeyChain](https://support.apple.com/en-us/HT204085) 10 | 11 | [The WireCutter: The Best Password Manager](https://thewirecutter.com/reviews/best-password-managers/) 12 | 13 | #### 1Password 14 | 15 | Can store other secure information \(Credit Card numbers, SSNs, WiFi Routers\). 16 | 17 | Dislikes: 18 | 19 | * Subscription Service 20 | 21 | #### Apple's iCloud KeyChain 22 | 23 | I dislike the desktop support. Only works in Safari. I only use it to store hotspot passwords. 24 | 25 | #### Have I Been Pwned? 26 | 27 | Test wether your data has been compromised, and sign up for alerts. 28 | 29 | [https://haveibeenpwned.com/](https://haveibeenpwned.com/) 30 | 31 | -------------------------------------------------------------------------------- /notes/archive/phabricator.md: -------------------------------------------------------------------------------- 1 | # Phabricator 2 | 3 | Personal changes: 4 | 5 | * [https://secure.phabricator.com/differential/query/mg0aqfQRM6Lk/\#R](https://secure.phabricator.com/differential/query/mg0aqfQRM6Lk/#R) 6 | 7 | Users: 8 | 9 | * [Mozilla](https://phabricator.services.mozilla.com/) 10 | 11 | -------------------------------------------------------------------------------- /notes/archive/physical-health/README.md: -------------------------------------------------------------------------------- 1 | # Physical Health 2 | 3 | There are three ways to lose weight: 4 | 5 | * Diet 6 | * Cardio 7 | * Physical Training 8 | 9 | ![](../../../.gitbook/assets/three-set-venn-diagram-ux-communication.png) 10 | 11 | ## Diet 12 | 13 | Just doing a diet alone doesn't strengthen any of your muscles. 14 | 15 | Pros: 16 | 17 | * Get the correct nutrition your body needs 18 | * Can reduce weight without physical effort 19 | 20 | Cons: 21 | 22 | * Doesn't build your heart muscle 23 | * Doesn't strengthen your muscles 24 | 25 | ## Cardio 26 | 27 | * Great for long term \(decades\) health 28 | 29 | Pros: 30 | 31 | * Great short term boost to reducing weight 32 | * Builds your heart muscle 33 | 34 | Cons: 35 | 36 | * Doesn't strengthen your other muscles 37 | 38 | Examples: 39 | 40 | * Elliptical 41 | * Running 42 | 43 | ## Muscle Training Exercises 44 | 45 | Also known as: 46 | 47 | * Strength Training 48 | 49 | Properties: 50 | 51 | * Great for short term \(months or years\) health 52 | 53 | Pros: 54 | 55 | * Builds muscles 56 | * Muscles burn more calories at rest 57 | * Longer term burn of calories 58 | 59 | Cons: 60 | 61 | * Doesn't strengthen heart 62 | 63 | -------------------------------------------------------------------------------- /notes/archive/physical-health/cardio.md: -------------------------------------------------------------------------------- 1 | # Cardio 2 | 3 | ## Non Stationary 4 | 5 | ## Stationary 6 | 7 | Pros: 8 | 9 | * Great opportunity to catch up on [Podcasts](../podcasts.md) 10 | 11 | Cons: 12 | 13 | * Can get boring as hell 14 | 15 | ### Elliptical 16 | 17 | Properties: 18 | 19 | * You can go at your own speed, if you need to gradual slow down \(or speed up\) its easier 20 | * Easier on the knees 21 | 22 | ### Treadmill 23 | 24 | Properties: 25 | 26 | * You have to go at the speed of the treadmill 27 | * Yes you can change the speed, but requires you to push the button 28 | * For better, allows you to test yourself going at a consistent speed 29 | 30 | -------------------------------------------------------------------------------- /notes/archive/podcasts.md: -------------------------------------------------------------------------------- 1 | # Podcasts 2 | 3 | ## Player 4 | 5 | Ditch the Apple podcast app. It sucks. I'm using [Castbox](https://castbox.fm/) for now. 6 | 7 | * Apple Podcast 8 | * Crap app 9 | * [Castbox](https://castbox.fm/) 10 | * My current player 11 | * [Spotify Podcasts](https://open.spotify.com/genre/podcasts-page) 12 | * Doesn't have all players 13 | * Even with Spotify Premium, podcasts may have their own ads 14 | * I don't blame Spotify Premium or the Podcast, it's sad because I expect having "Spotify Premium" there should be no ads whatsoever 15 | 16 | ## Podcasts 17 | 18 | * Product Radio Hunt 19 | * ETL: Entrepneurial Thought Leaders 20 | * npr: Hidden Brain 21 | * npr: How I Built This 22 | * [Castbox](https://castbox.fm/channel/How-I-Built-This-with-Guy-Raz-id431970) 23 | * npr: Planet Money 24 | * 99% Invisible 25 | * BusinessWars 26 | * the Indie hackers 27 | * a16z 28 | * Startup School 29 | * Masters of Scale with Reed Hoffman 30 | * [Castbox](https://castbox.fm/channel/Masters-of-Scale-with-Reid-Hoffman-id532469) 31 | * 36 Questions - The Podcast Musical 32 | * [Castbox](https://castbox.fm/channel/id932883) 33 | * [Spotify](https://open.spotify.com/show/0E7Js81KkQ0CWzfROJh04n?si=ZXw1NTzxR-KfH0ZUVocInA) 34 | 35 | -------------------------------------------------------------------------------- /notes/archive/productivity/README.md: -------------------------------------------------------------------------------- 1 | # Productivity 2 | 3 | * [Deep Thought: Productivity](https://www.deepthoughtapp.com/en/keywords/productivity/) 4 | * [Deep Thought: Tools](https://www.deepthoughtapp.com/en/keywords/tools/) 5 | 6 | ## Note Taking 7 | 8 | See [Note Taking](note-taking.md) for more details 9 | 10 | * [Apple Notes](../apple/apple-notes.md) 11 | * Deep Thought 12 | * GitBook 13 | * Google Docs 14 | * Notational Velocity 15 | 16 | Apple notes for quick short form writing that I may want to sync across my Apple devices. Terrible for archiving or long term notes. 17 | 18 | Google Docs for long term note taking. Used in combination with my [Timestamps](https://timestamps.aizatto.com/) tool. 19 | 20 | GitBook for summarized notes and quick public references I want to share with other people. 21 | 22 | Deep Thought for my contemplations. 23 | 24 | I've been using Notational Velocity less and less. 25 | 26 | I have my own ideas for a note taking app. 27 | 28 | ## Tasks 29 | 30 | * [Deep Thought: Tasks](https://www.deepthoughtapp.com/en/keywords/tasks/) 31 | 32 | ### Asana 33 | 34 | I currently use Asana, and set recurring monthly, quarterly, or yearly tasks. I use it as a reminder system as well. 35 | 36 | -------------------------------------------------------------------------------- /notes/archive/productivity/note-taking.md: -------------------------------------------------------------------------------- 1 | # Note Taking 2 | 3 | Note taking serves a different purpose than writing documents. This is just to jot down information. 4 | 5 | Also see [Productivity](./) 6 | 7 | ## What I Wish For: 8 | 9 | * Tags / Taxonomy 10 | * Automatic Entering of Timestamps 11 | 12 | ## Requirements for Note Taking 13 | 14 | * Has to handle a lot of notes, think 1000s of notes 15 | * Decent styling 16 | 17 | ## Apple Notes 18 | 19 | Used for: 20 | 21 | * Basic note taking. 22 | * Short term notes. 23 | 24 | Pros: 25 | 26 | * Sync across Apple devices 27 | 28 | Cons: 29 | 30 | * Doesn't scale when you have 1000s of notes 31 | 32 | ## Evernote 33 | 34 | Feels clumsy 35 | 36 | ## Google Docs 37 | 38 | I use this with my [Timestamps ](https://timestamps.aizatto.com/)tool. 39 | 40 | Method of use: 41 | 42 | * Single document per topic 43 | * Timestamp the time of entering note 44 | 45 | Used for: 46 | 47 | * Notes I know I want to keep long term/archive 48 | 49 | ## nvAlt / Notational Velocity 50 | 51 | This used to be my power horse, but I've stopped using it once syncing with other products worked decently. 52 | 53 | [https://brettterpstra.com/projects/nvalt/](https://brettterpstra.com/projects/nvalt/) 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /notes/archive/programming-bootcamps.md: -------------------------------------------------------------------------------- 1 | # Programming Bootcamps 2 | 3 | In summary: I'm very skeptical of them, but then again I'm skeptical of everything. 4 | 5 | What can someone learn in 9 weeks? 6 | 7 | You are what you put into it, I've seen it shine for people, and I've seen it do nothing. 8 | 9 | Concerns (mostly with the Individuals): 10 | 11 | * An individual leaves a decent paying job (MYR 5,000), expecting the same salary after the bootcamp. Your level of experience in programming can't give you the same salary rate. Junior programming rates in Malaysia are (MYR 2,500). 12 | * If you do a Ruby on Rails Bootcamp, you are most likely a "Ruby on Rails" programmer, not a "Ruby programmer". Likewise same thing for other languages/frameworks. 13 | 14 | -------------------------------------------------------------------------------- /notes/archive/property.md: -------------------------------------------------------------------------------- 1 | # Property 2 | 3 | What contributes to the high price of a place? 4 | 5 | * Convenience to necessities \(work, school\) 6 | * This problem is caused by centralization 7 | * To some extent you need centralization 8 | * Centralization increases efficiency to an extent 9 | * Solved with cheap decentralization? 10 | * Public transport 11 | * Marketing 12 | * Parental pressure 13 | 14 | What creates demand for a property? 15 | 16 | * Marketing 17 | * Parental pressure/expectations 18 | * Societal pressure/expectations 19 | 20 | -------------------------------------------------------------------------------- /notes/archive/redang.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Last updated: July 2020' 3 | --- 4 | 5 | # Redang 6 | 7 | ## About Redang 8 | 9 | The island is split into two sections: 10 | 11 | 1. Village Jetty / Kampung Jetty 12 | 2. Long Beach 13 | 14 | Each section is only accessible via Water Taxi / Ferry 15 | 16 | ## How Long? 17 | 18 | * Recommended: 4 days, 3 nights 19 | * Optional: : 5 days, 4 nights. Spend a night in Kuala Terengganu 20 | 21 | ## Getting There 22 | 23 | ### Fly 24 | 25 | Fly to: 26 | 27 | * Kuala Terengganu Airport / Sultan Mahmud Airport 28 | * Get transport to the ferry, then take ferry 29 | * Redang Airport 30 | * Only supports Berjaya Air 31 | * Extremely expensive 32 | * On the Village Jetty section 33 | 34 | ### Drive 35 | 36 | Drive and take the ferry at either: 37 | 38 | * Shahbandar Jetty 39 | * Merang Jetty 40 | 41 | ### Ferry 42 | 43 | #### [Shahbandar Jetty](https://maps.google.com/?cid=4928973722589136690) 44 | 45 | Cannot book online. 46 | 47 | Sejahterra Ferry Services 48 | 49 | Times: 8.30am and 10.30am 50 | 51 | Arrive 30 minutes early 52 | 53 | Price RM 55 Adult 54 | 55 | #### [Merang Jetty](https://maps.google.com/?cid=18423667183007647679) 56 | 57 | Can book online: [https://www.merangjetty.com/](https://www.merangjetty.com/) 58 | 59 | ## Resorts in Redang 60 | 61 | My recommendation: [Laguna Island Resort](https://www.lagunaredang.com.my/) 62 | 63 | | Laguna Island Resort | The Taraas | 64 | | :--- | :--- | 65 | | Beach was clean | Beach was dirty. Whisky box and other stuff. | 66 | | Atmosphere was better | Atmosphere is pretentious and exclusive. | 67 | | Coastline is shared with other resorts | Private beach | 68 | | Staff is friendlier | | 69 | | Value for money | Expected more from the price | 70 | | Reasonable prices for additional food, drinks, activities, snacks | Meals are expensive | 71 | | Beach is shared with other people | Beach is not as accessible to the rest of the visitors | 72 | | Fishes were by the seashore, can snorkel by the beach and see fishes | | 73 | | Price is inclusive of ferry | Price is exclusive of ferry | 74 | | Beach is easily accessible from all rooms | Beach is not as easily accessible from all rooms | 75 | | Other guests were mostly local | Other guests were mostly westerners | 76 | | | I found a roach in the cafeteria | 77 | | [Website](https://www.lagunaredang.com.my/) | [Website](https://www.thetaaras.com/) | 78 | 79 | ## Eating in Redang 80 | 81 | Village Jetty Section 82 | 83 | * [Redang De' Rimba](https://maps.google.com/?cid=16713781312032130414) 84 | * Order Crab \(Butter Fried\) 85 | 86 | ## Kuala Terengganu 87 | 88 | Their weekends are: Friday and Saturday 89 | 90 | ### Getting Around Kuala Terengganu 91 | 92 | * Grab \(Ride hailing\) from Kuala Terengganu \(Sultan Mahmud\) Airport \(KTT\) to Shahbandar Jetty: RM13 93 | * Grab around town: RM5-6 94 | 95 | ### Staying in Kuala Terengganu 96 | 97 | Recommended: Arena Boutique Hotel 98 | 99 | ### Eating in Kuala Terengganu 100 | 101 | * [Mak Ngah Nasi Dagang](https://maps.google.com/?cid=2142133214227182570) 102 | * [Fauzi Nasi Kerabu](https://maps.google.com/?cid=321866952740435630) 103 | 104 | ## Advisory 105 | 106 | * Bring Oral Rehydration Salts \(ORS\) 107 | * Bring "Water Shoes" 108 | 109 | -------------------------------------------------------------------------------- /notes/archive/referral-codes.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'You win, I win. We all win!' 3 | --- 4 | 5 | # Referral Codes 6 | 7 | For some of these you may have to enter the referral codes yourself. 8 | 9 | For some you can just click on the link. 10 | 11 | | Company | Code | Details | 12 | | :--- | :--- | :--- | 13 | | [23andme](https://refer.23andme.com/s/t4wp7) | | | 14 | | [AirBNB](http://www.airbnb.com/c/afaiz12?s=8) | afaiz12 | | 15 | | [BigPay](http://bigpay.link/referrals) | G62KOTYKA9 | We both get $10 | 16 | | [BloomThis](http://i.refs.cc/UGK4M73C?smile_ref=eyJzbWlsZV9zb3VyY2UiOiJzbWlsZV91aSIsInNtaWxlX21lZGl1bSI6IiIsInNtaWxlX2NhbXBhaWduIjoicmVmZXJyYWxfcHJvZ3JhbSIsInNtaWxlX2N1c3RvbWVyX2lkIjozNjcwODUxNjN9) | | | 17 | | [Digital Ocean](https://m.do.co/c/001ed2c46f75) | | You get $100; I get $25 | 18 | | [Fiverr](http://www.fiverr.com/s2/9440968136) | [9440968136](http://tinker.kiwicrate.com/Refer?i=AizatF) | | 19 | | Grab | GRABK3SPDBV9 | | 20 | | [Hired](https://hired.com/x/1ffao) | | | 21 | | [HotelTonight](https://www.hoteltonight.com/?utm_campaign=google_desktop_us-english_brand_exact_t1&utm_source=google&utm_medium=cpc&utm_campaign_id=1867548372&utm_adgroup=70054292855&utm_targetid=kwd-45375732234&utm_feeditemid=&utm_creative=hotel%20tonight%20promo%20code&utm_matchtype=e&utm_loc_physical_ms=9002000&utm_loc_interest_ms=&utm_adposition=1t1&utm_ad_id=291748073219&utm_device=c&utm_network=g&gclid=CjwKCAjwiN_mBRBBEiwA9N-e_q8Fh0ADeZN1G1GZKw4AWmnklDam_KtKFzQdQgsRmqwNlW28NClyEBoCeDQQAvD_BwE) | EABDULLAHFAIZ | You get $25, I get $25 | 22 | | [Tinker Crate](../node.js/) | [AizatF](http://tinker.kiwicrate.com/Refer?i=AizatF) | | 23 | | [Today Tix](http://todaytix.com/refer/TQMWN) | [TQMWN](http://todaytix.com/refer/TQMWN) | | 24 | | [Transferwise](https://transferwise.com/u/ezwana) | ezwana | I get $75 off, you save on your first transfer | 25 | | [Triplebyte](https://triplebyte.com/iv/Sl7BZEg) | Sl7BZEg | | 26 | | [Wealthfront](http://wlth.fr/1M0ZHOh) | | You get an extra $5000 managed for free, I also get | 27 | 28 | Companies I wish that had referral codes: 29 | 30 | * Audible 31 | * 1Password 32 | 33 | My [Google Spreadsheet](https://docs.google.com/spreadsheets/d/11E51C9-1qliVV0P1Pl6myxNWHpfwfe1z3ussTwD5vX8/edit#gid=0) 34 | 35 | -------------------------------------------------------------------------------- /notes/archive/remote-calls.md: -------------------------------------------------------------------------------- 1 | # Remote Calls 2 | 3 | Now that we are all WFH, some remote video meetings tips: 4 | 5 | * Try to use a microphone 6 | * Turn on your webcam 7 | * Let's be comfortable with everyone in their home clothes and no makeup. No judgement here~ 8 | * Check your microphone source is correct 9 | * Mine sometimes messes up when I connect/disconnect to my webcam/mic 10 | * Join meetings a bit early \(mute your audio/video, lower your volume\) so that you don't miss a meeting. 11 | * Also drop the URL in a slack channel so that other people can easily join 12 | * Ask people to join early as well, so that you can socialize as well 13 | * In a meeting, and no one there? When pinging people, drop the URL in the message 14 | * Have a recurring meeting? Use a slackbot reminder to send the meeting URL early to a meeting 15 | * For example, meeting is at 11am, set a slackbot reminder to go at 10.55am 16 | * [https://slack.com/intl/en-my/help/articles/208423427-Set-a-reminder](https://slack.com/intl/en-my/help/articles/208423427-Set-a-reminder) 17 | 18 | ```text 19 | /remind #channel "Standup $URL" at 10.55am every Monday 20 | ``` 21 | 22 | * Can't hear someone? Try to use visual cues to get their attention \(thumbs up/ thumbs down\) 23 | * Waiting for people? 24 | * Use a timer, and share it on screen so that everyone is in sync, an overlay would be nice 25 | 26 | Any other tips/suggestions I missed out? 27 | 28 | -------------------------------------------------------------------------------- /notes/archive/remote-work.md: -------------------------------------------------------------------------------- 1 | # Remote Work 2 | 3 | ## Onsite Work 4 | 5 | What is best done onsite: 6 | 7 | * Brainstorming 8 | * Bumping into each othe rfor casual quick conversations 9 | * Rubbing shoulders 10 | * Easier to spark ideas 11 | * Meetings 12 | * Quick clarification 13 | 14 | What is best not done onsite: 15 | 16 | * Sometimes focus 17 | * Taking a break 18 | 19 | Helps with: 20 | 21 | * Focus 22 | * Sometimes it helps to be around other poeple to work 23 | * Especialy if you need the motivation and focus of others 24 | 25 | Benefits of working onsite: 26 | 27 | * Socializing 28 | * Brainstorming 29 | * Easier to ask questions 30 | * Easier to achieve breadth and depth 31 | * Learning good habits from other people 32 | * Peer pressure from other people 33 | 34 | Problems with working onsite: 35 | 36 | * Have to share a location and schedule with other people 37 | * Peer pressure from other people 38 | * Can be intense 39 | * Need to defuse once in a while 40 | 41 | ## Remote Work 42 | 43 | What is best done remotely: 44 | 45 | * Research 46 | * Exploration 47 | 48 | What is best not done remotely: 49 | 50 | * Brainstorming 51 | * Meetings 52 | 53 | What can be done remotely: 54 | 55 | * Quick clarification 56 | * Research 57 | * Execution 58 | 59 | What can not be done remotely: 60 | 61 | * Brainstorming 62 | * Meeting 63 | 64 | Requires: 65 | 66 | * Independence 67 | * Self Driven 68 | * Self accountable 69 | * Good habits 70 | 71 | Benefits of working remotely: 72 | 73 | * Work whenever or wherever I want 74 | * Time/schedule 75 | * Location 76 | * Isolation 77 | * No peer pressure from other people 78 | 79 | Problems with working remotely: 80 | 81 | * Socializing 82 | * Isolation 83 | * I can't carry the equipment that I work best on 84 | * Can only achieve either breadth or depth 85 | * Harder to learn from others 86 | * Slave to your bad habits 87 | * No peer pressure from other people 88 | 89 | What questions can be asked remotely: 90 | 91 | * Quick yes/no answers. 92 | * Solutions which can be copied or pasted 93 | 94 | -------------------------------------------------------------------------------- /notes/archive/remote-work/README.md: -------------------------------------------------------------------------------- 1 | # Remote Work 2 | 3 | ## Culture for remote work 4 | 5 | * Asynchronous 6 | * Knowledge Sharing 7 | 8 | ## Making remote work effective 9 | 10 | * We have to be asynchronous 11 | * We have to think about how to share knowledge 12 | * Writing 13 | * Videos 14 | 15 | -------------------------------------------------------------------------------- /notes/archive/remote-work/comparison.md: -------------------------------------------------------------------------------- 1 | # Comparison 2 | 3 | 4 | 5 | ## Onsite Work 6 | 7 | What is best done onsite: 8 | 9 | * Brainstorming 10 | * Bumping into each othe rfor casual quick conversations 11 | * Rubbing shoulders 12 | * Easier to spark ideas 13 | * Meetings 14 | * Quick clarification 15 | 16 | What is best not done onsite: 17 | 18 | * Sometimes focus 19 | * Taking a break 20 | 21 | Helps with: 22 | 23 | * Focus 24 | * Sometimes it helps to be around other poeple to work 25 | * Especialy if you need the motivation and focus of others 26 | 27 | Benefits of working onsite: 28 | 29 | * Socializing 30 | * Brainstorming 31 | * Easier to ask questions 32 | * Easier to achieve breadth and depth 33 | * Learning good habits from other people 34 | * Peer pressure from other people 35 | 36 | Problems with working onsite: 37 | 38 | * Have to share a location and schedule with other people 39 | * Peer pressure from other people 40 | * Can be intense 41 | * Need to defuse once in a while 42 | 43 | ## Remote Work 44 | 45 | What is best done remotely: 46 | 47 | * Research 48 | * Exploration 49 | 50 | What is best not done remotely: 51 | 52 | * Brainstorming 53 | * Meetings 54 | 55 | What can be done remotely: 56 | 57 | * Quick clarification 58 | * Research 59 | * Execution 60 | 61 | What can not be done remotely: 62 | 63 | * Brainstorming 64 | * Meeting 65 | 66 | Requires: 67 | 68 | * Independence 69 | * Self Driven 70 | * Self accountable 71 | * Good habits 72 | 73 | Benefits of working remotely: 74 | 75 | * Work whenever or wherever I want 76 | * Time/schedule 77 | * Location 78 | * Isolation 79 | * No peer pressure from other people 80 | 81 | Problems with working remotely: 82 | 83 | * Socializing 84 | * Isolation 85 | * I can't carry the equipment that I work best on 86 | * Can only achieve either breadth or depth 87 | * Harder to learn from others 88 | * Slave to your bad habits 89 | * No peer pressure from other people 90 | 91 | What questions can be asked remotely: 92 | 93 | * Quick yes/no answers. 94 | * Solutions which can be copied or pasted 95 | 96 | -------------------------------------------------------------------------------- /notes/archive/road-trips.md: -------------------------------------------------------------------------------- 1 | # Road Trips 2 | 3 | Bring: 4 | 5 | * Disposable Water 6 | * Tissue Paper / Kitchen Roll 7 | * Tools for the car 8 | * Phone charger 9 | 10 | -------------------------------------------------------------------------------- /notes/archive/ruby.md: -------------------------------------------------------------------------------- 1 | # Ruby / Ruby on Rails 2 | 3 | Cons 4 | 5 | * Rails is blocking, can't do asynchronous 6 | * Blocks other requests 7 | * No types 8 | * Alternative [Sorbet](https://sorbet.org/) 9 | * No native Enum support 10 | * Alternative [https://github.com/dblock/ruby-enum](https://github.com/dblock/ruby-enum) 11 | 12 | -------------------------------------------------------------------------------- /notes/archive/scraping.md: -------------------------------------------------------------------------------- 1 | # Scraping 2 | 3 | Scraping Limitations / Road Blockers: 4 | 5 | * How many requests can their server take 6 | * How long does it take for the server to handle a request 7 | * Request/second 8 | * How many requests can you parallelise: 9 | * From a single process 10 | * From multiple process 11 | * How do you track what needs to be scraped 12 | * Authentication 13 | * Watch out for 14 | * Password change reminders 15 | * Account being locked out 16 | * If the page uses JavaScript 17 | 18 | Goals: 19 | 20 | * Maximize number of requests/sec 21 | * Less compute resources used 22 | 23 | Tools: 24 | 25 | * Database 26 | * Queue 27 | 28 | Database: 29 | 30 | * Avoid nosql 31 | * Use a SQL database from the start, since you’ll most likely be exporting/querying it 32 | * Easier to change field names 33 | * Run SQL queries to fix 34 | * One table per “type” of page 35 | * One table for the pagination results 36 | * Another table for page results 37 | * Another table for consolidated results 38 | * This can be the source of truth 39 | * Hard part may be figuring out what should exist in the consolidated table, but doesn’t 40 | 41 | Log to the console: 42 | 43 | * page/id scraped 44 | * time scraped 45 | * Time it took to scrape page 46 | 47 | -------------------------------------------------------------------------------- /notes/archive/singapore.md: -------------------------------------------------------------------------------- 1 | # Singapore 2 | 3 | [https://docs.google.com/spreadsheets/d/1RxCnvroAGoyagMxNK5JbrJNWYMdAoVlsM2xM\_UZAC2g/edit?ouid=115389871367026542635&usp=sheets\_home&ths=true](https://docs.google.com/spreadsheets/d/1RxCnvroAGoyagMxNK5JbrJNWYMdAoVlsM2xM_UZAC2g/edit?ouid=115389871367026542635&usp=sheets_home&ths=true) 4 | 5 | ## Public Transport 6 | 7 | You don't need a local public transportation card. 8 | 9 | Feel free to use: 10 | 11 | * PayWave \(Mastercard or Visa\) 12 | * Just tap and go 13 | * Apple Watch 14 | * Apple Pay needs to be enabled 15 | * Steps \(for entering and exiting\): 16 | * Double click the side button to activate "Apple Pay" 17 | * Tap your watch on the "card reader" 18 | * View transactions: 19 | * Go to the "Watch" App 20 | * Scroll to "Wallet & Apple Pay" 21 | * Click the card you use 22 | * Click "Transactions" 23 | * It took me about 12hrs for the transaction to appear 24 | * iPhone 25 | * Apple Pay needs to be enabled 26 | * It's easier if you enable "double click to pay" 27 | * Steps \(for entering and exiting\): 28 | * Double click the side button to activate "Apple Pay" 29 | * If this is not enabled, you need to open your "Wallet" app 30 | * This can be done from the "Control Center" or the App itself 31 | * Remember to authenticate with Face ID or Fingerprint reader 32 | * Tap your phone on the "card reader" 33 | 34 | Notes: 35 | 36 | I you get the TransitLink SimplyGo app you can see your transactions used on the MRT card or Credit Card \(need to add your card to the app before it can track\) 37 | 38 | [https://apps.apple.com/us/app/transitlink-simplygo/id667933103](https://apps.apple.com/us/app/transitlink-simplygo/id667933103) 39 | 40 | -------------------------------------------------------------------------------- /notes/archive/slack.md: -------------------------------------------------------------------------------- 1 | # Slack 2 | 3 | Plugins 4 | 5 | * [Hangout](https://xfers.slack.com/services/B011RK43YJZ) 6 | 7 | Leaving / Archiving channels 8 | 9 | 10 | 11 | Reminders: 12 | 13 | ```text 14 | /remind #channel "@here Daily Standup @ 12pm SGT / 11am JKT XXX" every weekday at 11.00am 15 | ``` 16 | 17 | ## Archiving 18 | 19 | > Archiving this channel, please see URL for more information. Will unarchive as needed. 20 | 21 | ## Leaving 22 | 23 | > Hey everyone, I'm cleaning up my Slack channels. Please re-add me to this channel if necessary. 24 | 25 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/README.md: -------------------------------------------------------------------------------- 1 | # Software Engineering 2 | 3 | Just because you write code, doesn't mean you are a software engineer. 4 | 5 | See [Different Types of Coding](../../../engineering-code/different-types-of-coding.md) 6 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/repository-management.md: -------------------------------------------------------------------------------- 1 | # Repository Management 2 | 3 | ## Single Repository \(Monorepo\) 4 | 5 | Pros: 6 | 7 | * Knowledge Sharing 8 | * Common styles and themes 9 | * Easier for team members to switch projects 10 | * Easier to track dependencies between projects 11 | * Example: I don't have to find the repository where a particular service lives 12 | * Engineers can see work and progress of other people 13 | * Engineers are not siloed 14 | 15 | Cons: 16 | 17 | * Possibility of a lot of noise/overheads 18 | 19 | Examples: 20 | 21 | * Angular 22 | * Babel 23 | * Ember 24 | * Jest 25 | * React 26 | 27 | Tools: 28 | 29 | * For JavaScript/Node.js: [Lerna](https://github.com/lerna/lerna) 30 | 31 | Alternatives: 32 | 33 | * Consider having fewer repos, but larger 34 | 35 | Examples: 36 | 37 | * Facebook 38 | * Actually has many repos, but few \(say less than 10\) 39 | * Google 40 | * One huge repository built by Google 41 | * [Microsoft's Azure](https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/use-git-microsoft) 42 | * Twitter 43 | 44 | ## Multiple Repositories \(Multirepo\) 45 | 46 | Pros: 47 | 48 | * Independent teams and styles 49 | 50 | Cons: 51 | 52 | * Problems with coordination 53 | * Limits knowledge sharing across repositories 54 | * Context switching between work across repositories 55 | * Hard to enforce styles 56 | * Smaller repos, but many 57 | * Engineers can be siloed 58 | * Hard to track depedency management 59 | 60 | Common in: 61 | 62 | * Microservices 63 | * FaaS / Serverless 64 | 65 | Examples: 66 | 67 | * Amazon 68 | * Skype 69 | 70 | Also known as: 71 | 72 | * Polyrepo 73 | 74 | ## Comparison Matrix \(Software Architectures vs Repository Styles\) 75 | 76 | | | Monolithic | Non Monolithic | 77 | | :--- | :--- | :--- | 78 | | Monorepo | Option A | Option B | 79 | | Multirepo | Option C | Option D | 80 | 81 | ### A: Monolithic and Monorepo 82 | 83 | Pros: 84 | 85 | * Knowledge sharing 86 | 87 | ### B: Non Monolithic and Monorepo 88 | 89 | ### C: Monolithic and Multirepo 90 | 91 | ### D: Non Monolithic and Multirepo 92 | 93 | Cons: 94 | 95 | * Increased operaitonal complexity and cognitive load 96 | 97 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/software-architectures/README.md: -------------------------------------------------------------------------------- 1 | # Software Architectures 2 | 3 | See: 4 | 5 | * [Monolithic](monolithic.md) 6 | * [Non-Monolithic](non-monolithic/) 7 | * [Microservice](non-monolithic/microservice.md) 8 | * [FaaS \(Functions as a Service\) or Serverless](non-monolithic/faas-functions-as-a-service-or-serverless.md) 9 | 10 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/software-architectures/monolithic.md: -------------------------------------------------------------------------------- 1 | # Monolithic 2 | 3 | Notes: 4 | 5 | * A company may have more than one monolith 6 | * A monolith means a big heavy app 7 | 8 | Pros: 9 | 10 | * Knowledge Sharing 11 | * Easier dependency management 12 | * Easier version management 13 | * Easier to track breakages across different projects 14 | * Easier to know what team is doing at a glance 15 | 16 | Cons: 17 | 18 | * Harder to split code ownership 19 | * Harder to define responsibilities 20 | * Monolithic codebases can easily become a mess 21 | * No strong conventions 22 | * Can be harder to deploy 23 | * Increased complexity on codebase 24 | * Harder to distinguish responsibility of the codebase 25 | * A single release cycle where all components are released togther 26 | 27 | Examples: 28 | 29 | * Facebook 30 | * Only WWW is a monolithic app 31 | 32 | Questions: 33 | 34 | * When should you break down a monolithic app? 35 | * When should you unbundle a monolith? 36 | 37 | Resources: 38 | 39 | * [David R. Maclver: Why you should use a single repository for all your company’s projects](https://www.drmaciver.com/2016/10/why-you-should-use-a-single-repository-for-all-your-companys-projects/) 40 | * It is impossible for your code to get out of sync with itself 41 | * Any change can be considered and reviewed as a single atomic unit 42 | * Refactoring to modularity becomes cheap 43 | 44 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/software-architectures/non-monolithic/README.md: -------------------------------------------------------------------------------- 1 | # Non-Monolithic 2 | 3 | Examples: 4 | 5 | * Amazon 6 | * Lots of data duplication 7 | 8 | Common in: 9 | 10 | * Microservices \(typically\) 11 | * FaaS / Serverless 12 | 13 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/software-architectures/non-monolithic/faas-functions-as-a-service-or-serverless.md: -------------------------------------------------------------------------------- 1 | # FaaS (Functions as a Service) or Serverless 2 | 3 | Pros: 4 | 5 | * DevOps is not required 6 | * Reduce security footprint 7 | * Isolated 8 | * Pay for what you use 9 | 10 | Cons: 11 | 12 | * Harder debugging 13 | * Increased complexity on infrastructure 14 | 15 | Good for: 16 | 17 | * Teams with poor devops 18 | 19 | When to use FaaS? 20 | 21 | * Unpredictable demands 22 | * Competing products (Ec2) can leveraged auto scaling 23 | * Small work loads that don’t require an always on machine 24 | * Isolated processes 25 | 26 | Examples: 27 | 28 | * Low traffic url shortener\ 29 | [https://github.com/aizatto/url-shortener/](https://github.com/aizatto/url-shortener/) 30 | -------------------------------------------------------------------------------- /notes/archive/software-engineering/software-architectures/non-monolithic/microservice.md: -------------------------------------------------------------------------------- 1 | # Microservice 2 | 3 | Pros: 4 | 5 | * Lighter weight deployments 6 | * Can mix usage different programming languages 7 | 8 | Cons: 9 | 10 | * Many repositories 11 | * Complex 12 | * Poor knowledge sharing 13 | * Orchestration 14 | * Understanding orchestration across multiple services/repositories is difficult, especially when thing are inconsistent 15 | * Exchanging ownership 16 | * Imagine all members of a team leaves, who manages ownership? 17 | * Each team needs to know devops \(to a certain extent\) 18 | 19 | Requires: 20 | 21 | * Service Discovery 22 | * Event Bus 23 | * Pub/Sub 24 | 25 | Good for: 26 | 27 | * Services that can't exist in a FaaS environment 28 | * AWS Lambda Limitations 29 | * * Execution time. AWS has a limit of 15 minutes 30 | * Storage space 31 | * Uploads of 50mb zip 32 | * [https://docs.aws.amazon.com/lambda/latest/dg/limits.html](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) 33 | * Migrating a serivce to a different programming language 34 | * Migrating bits and pieces 35 | 36 | When should you use microservices? 37 | 38 | * A functionality or component that is bottlenecked 39 | * Would be easier to scale if it was separate 40 | * Reusable functionality across different services 41 | * Can exist as a library; or micro service 42 | * Isolate small piece of code for: 43 | * Improved quality 44 | * Predictable/different release cycles 45 | * Security 46 | * When you want to create a black box 47 | * Reduce transparency 48 | * If it can exist as it’s own product 49 | * Things which can’t exist in a FaaS 50 | 51 | When should you not use a microservice? 52 | 53 | * When you have a small team 54 | 55 | Questions to ask: 56 | 57 | * When should you bundle a microservice? 58 | * When should you unbundle a microservice? 59 | * When should you break down a monolothic app into a microservice? 60 | * When does a microservice become a monolithic app? 61 | * If your goal is to keep it as a Single Responsiblity Principle 62 | * Why not just use a FaaS architecture? 63 | 64 | Resources: 65 | 66 | * [Susan Fowler: Production-Ready Microservices](https://amzn.to/2tdH6OA) 67 | 68 | -------------------------------------------------------------------------------- /notes/archive/stripe.md: -------------------------------------------------------------------------------- 1 | # Stripe 2 | 3 | ## Atlas 4 | 5 | * [https://stripe.com/atlas](https://stripe.com/atlas) 6 | 7 | Costs: 8 | 9 | * $500 setup 10 | * Min $400/year costs \(taxes, renewal, etc\) 11 | 12 | Ideal: 13 | 14 | * Setup start of year 15 | 16 | -------------------------------------------------------------------------------- /notes/archive/ux.md: -------------------------------------------------------------------------------- 1 | # UX 2 | 3 | ## UX I like: 4 | 5 | * Keyboard shortcuts. 6 | * Plus points if it follows vim scrolling 7 | * Plus points if it reuses familiar shortcuts 8 | 9 | ## UX I hate: 10 | 11 | * Over use of Modal dialogs 12 | * Some Modal dialogs should be pages 13 | * Some Modal dialogs should rewrite browser url to a page that can load it 14 | * Modal dialogs are great for small interstitials, not whole pages 15 | * Don't block my screen with a modal dialog asking me to subscribe 16 | * URLs that don't return back to a useful page 17 | * Making websites that don't fit in a resolution of width of`960x600` 18 | * This is the resolution of half my laptop screen \(`1920x1200`\) 19 | * Worse is if you don't make it fit within width of `1280x720` 20 | * [https://github.com/aizatto/character-length](https://github.com/aizatto/character-length) 21 | * Clickbait 22 | * Don't ask me to download your mobile app 23 | * When asking people to enter something difficult \(ie, short urls\) and not using base58 24 | * [https://en.wikipedia.org/wiki/Base58](https://en.wikipedia.org/wiki/Base58) 25 | * Preventing me from using the back/forward button 26 | * Stupid password limits 27 | * Making it difficult to unsubscribe 28 | 29 | #### Phone Notifications 30 | 31 | Don't spam my phone with marketing notifications. I know you can't get my attention via email spam, so don't spam me unless I ask for it. 32 | 33 | #### Region Locking 34 | 35 | Apps that restrict you to a particular country, with no good reason 36 | 37 | For example, I am on the US Apple App Store, but I can't download the Starbucks Malaysia App. 38 | 39 | Malaysia Culprits: 40 | 41 | * [Starbucks](https://itunes.apple.com/my/app/starbucks-malaysia/id888509698?mt=8) \(Both [iOS](https://itunes.apple.com/my/app/starbucks-malaysia/id888509698?mt=8) and Android\) 42 | * I don't understand why they can't use the US App itself 43 | * [Speedrent](https://itunes.apple.com/my/app/speedrent-property-rental/id998232868?mt=8) 44 | * [Uniqlo](https://itunes.apple.com/app/apple-store/id867492228?pt=80202&ct=website_appinstall_page&mt=8) 45 | 46 | -------------------------------------------------------------------------------- /notes/archive/venture-builder.md: -------------------------------------------------------------------------------- 1 | # Venture Builder 2 | 3 | Pros 4 | 5 | * Lots of experiments 6 | 7 | Cons 8 | 9 | * Lots of experiments 10 | * Handing over to someone new 11 | * Finding someone to drive it 12 | * Ensure prototype can be taken to production 13 | 14 | Requirements: 15 | 16 | * Need to be able to prototype quickly 17 | * Tools to prototype 18 | 19 | -------------------------------------------------------------------------------- /notes/archive/video-games.md: -------------------------------------------------------------------------------- 1 | # Video Games 2 | 3 | I primarily like the Nintendo platform for their exclusives. 4 | 5 | I like: 6 | 7 | * Strategy games 8 | * RPGs \(mostly Japanese\) 9 | 10 | ## Blizzard 11 | 12 | ### Diablo II 13 | 14 | I spent many hours in Diablo II, and some in Diablo III. It's nice to just mindlessly hack and slash. 15 | 16 | ### Starcraft 17 | 18 | I love the strategy elements of Starcraft. It's WarCraft in space, what could go wrong? I didn't get much into Starcraft II though. 19 | 20 | ## The Legend of Zelda 21 | 22 | * [Deep Thought](https://www.deepthoughtapp.com/packages/the-legend-of-zelda-123/) 23 | 24 | ### Breathe of the Wild 25 | 26 | What a refreshing video game. Literally a breath of fresh air. 27 | 28 | Got at your own pace. Do your own thing. The world can wait. 29 | 30 | So much to explore, and every part of the world looks distinct and different. 31 | 32 | Oh and it has durian's in it too. 33 | 34 | ### Wind Waker 35 | 36 | I love the art direction, and how much more emotive Link is. Sea faring can be a bit dull. 37 | 38 | ## Super Smash Brothers 39 | 40 | Be it the N64, Wii, Wii U, 3DS, or Switch, it's fun beating up people and seeing characters from different worlds fight it out. 41 | 42 | -------------------------------------------------------------------------------- /notes/archive/virtual-personal-assistant.md: -------------------------------------------------------------------------------- 1 | # Virtual Personal Assistant 2 | 3 | Current Opinion: 4 | 5 | * I don't really understand the need or craze for this 6 | 7 | What I use it for: 8 | 9 | * Setting a timer 10 | * Asking what time it is 11 | * Stopping current song 12 | * Asking for measurement conversion 13 | * CM to Feet 14 | * Asking for currency conversion 15 | * Asking what time it is in another country 16 | 17 | Currently used with: 18 | 19 | * Apple's Siri 20 | * Amazon's Alexa 21 | 22 | ## Potential of a Virtual Personal Assistant 23 | 24 | * People with disabilities 25 | * Assistive devices 26 | 27 | -------------------------------------------------------------------------------- /notes/archive/vpn.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Virtual Private Networks 3 | --- 4 | 5 | # VPN 6 | 7 | Also see: 8 | 9 | * [DNS](dns.md) 10 | 11 | 12 | 13 | * [https://github.com/StreisandEffect/streisand](https://github.com/StreisandEffect/streisand) 14 | * [https://getoutline.org/en/home](https://getoutline.org/en/home) 15 | 16 | ## Services 17 | 18 | ### From Wirecutter 19 | 20 | [https://thewirecutter.com/reviews/best-vpn-service/](https://thewirecutter.com/reviews/best-vpn-service/) 21 | 22 | * Our Pick: IVPN $70/year 23 | * [https://wclink.co/link/26127/137912/4/74300?merchant=IVPN](https://wclink.co/link/26127/137912/4/74300?merchant=IVPN) 24 | * Budget pick: TorGuard $60/year 25 | * [https://wclink.co/link/26128/137913/4/74301?merchant=TorGuard](https://wclink.co/link/26128/137913/4/74301?merchant=TorGuard) 26 | 27 | -------------------------------------------------------------------------------- /notes/archive/web-development/README.md: -------------------------------------------------------------------------------- 1 | # Web Development 2 | 3 | Standard expectations of a modern site: 4 | 5 | * Search 6 | * With filters 7 | * Taxonomy 8 | * Email Subscriptions 9 | * Recommendation engine 10 | * SSO 11 | * Notifications 12 | 13 | -------------------------------------------------------------------------------- /notes/archive/web-development/react.md: -------------------------------------------------------------------------------- 1 | # React 2 | 3 | ## Glossary 4 | 5 | | Name | Definition | | 6 | | :--- | :--- | :--- | 7 | | [function component](https://reactjs.org/docs/components-and-props.html#function-and-class-components) | React components created with a function\(\) | | 8 | 9 | ## Create React App 10 | 11 | * TypeScript support 12 | 13 | Cons: 14 | 15 | * No SEO 16 | 17 | ### Default 18 | 19 | * Change `public/index.html`: `` 20 | * Change `public/mainfest.json` 21 | 22 | ### Relay 23 | 24 | Difficult and heavy 25 | 26 | * Requires `relay-compiler` 27 | * Requires exporting a schema from your graphql endpoint 28 | 29 | ### SEO 30 | 31 | ### TypeScript 32 | 33 | [https://github.com/sw-yx/react-typescript-cheatsheet](https://github.com/sw-yx/react-typescript-cheatsheet) 34 | 35 | #### Creating 36 | 37 | ```text 38 | yarn create react-app my-app --typescript 39 | ``` 40 | 41 | #### Adding 42 | 43 | [https://facebook.github.io/create-react-app/docs/adding-typescript](https://facebook.github.io/create-react-app/docs/adding-typescript) 44 | 45 | #### Does Not Support 46 | 47 | * No `const enum` 48 | 49 | ### Directory Structure 50 | 51 | ```bash 52 | src/components 53 | src/containers 54 | src/routes/EntriesRoute.tsx 55 | ``` 56 | 57 | ## useEffect with async/await 58 | 59 | {% code title="await-useEffect.tsx" %} 60 | ```typescript 61 | function Render() { 62 | const [data, setData] = useState(null); 63 | const fetchData = async() => { 64 | const response = await fetch(`https://www.example.com/`); 65 | const json = await response.json(); 66 | setData(json); 67 | }; 68 | useEffect(() => { fetchData() }); 69 | return <div>Test</div> 70 | } 71 | ``` 72 | {% endcode %} 73 | 74 | ## useRef\(null\) 75 | 76 | Error: 77 | 78 | ```text 79 | Type error: Cannot assign to 'current' because it is a read-only property. TS2540 80 | ``` 81 | 82 | From [GitHub comment](https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-453841404) 83 | 84 | > By default if you create a ref with a `null` default value and specify its generic parameter you're signaling your intent to have React "own" the reference. If you want to be able to mutate a ref that you own you should declare it like so: 85 | 86 | Solution: 87 | 88 | * Change `useRef<T | null>(null)` to `useRef<T>()` 89 | 90 | ## Bootstrap 91 | 92 | Use `reactstrap` 93 | 94 | * [https://npmcompare.com/compare/react-bootstrap,reactstrap](https://npmcompare.com/compare/react-bootstrap,reactstrap) 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /notes/archive/web-development/sso-providers.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: SSO (Single Sign On) Providers 3 | --- 4 | 5 | # SSO Providers 6 | 7 | ## Providers 8 | 9 | * Auth0 10 | * [https://auth0.com/](https://auth0.com/) 11 | * AWS Cognito 12 | * [http://aws.amazon.com/cognito](http://aws.amazon.com/cognito) 13 | 14 | Pros: 15 | 16 | * Have someone manage your user accounts for you 17 | * \(Security, balancing, availability\) 18 | * They take care of the CRUD 19 | 20 | ### Auth0 21 | 22 | * Prettier interface 23 | * Better documentation 24 | 25 | Options 26 | 27 | * [https://auth0.com/docs/quickstart/webapp/nodejs](https://auth0.com/docs/quickstart/webapp/nodejs) 28 | * [https://auth0.com/docs/quickstart/backend/hapi/01-authorization](https://auth0.com/docs/quickstart/backend/hapi/01-authorization) 29 | 30 | ### AWS Cognito 31 | 32 | * Cheaper 33 | * "Drier" / Bleak interface 34 | * Confusing as hell 35 | * You can give individual users IAM roles 36 | * Can be configured with serverless 37 | * But not all configuration options 38 | 39 | Cons: 40 | 41 | * You may only be able to log in to one SSO at a time. 42 | * This is bad if you want to attache one user account to multiple providers 43 | 44 | -------------------------------------------------------------------------------- /notes/archive/webdav-caldav.md: -------------------------------------------------------------------------------- 1 | # WebDAV / CalDAV 2 | 3 | * [https://en.wikipedia.org/wiki/WebDAV](https://en.wikipedia.org/wiki/WebDAV) 4 | * [https://en.wikipedia.org/wiki/CalDAV](https://en.wikipedia.org/wiki/CalDAV) 5 | 6 | -------------------------------------------------------------------------------- /notes/archive/withings.md: -------------------------------------------------------------------------------- 1 | # Withings 2 | 3 | I bought this brand for: 4 | 5 | * Recording data of my and my family's health for the long term 6 | * Apple Health integration 7 | * Exporting of data 8 | 9 | [https://www.withings.com/us/en/](https://www.withings.com/us/en/) 10 | 11 | Pros: 12 | 13 | * Integration with Apple Health 14 | * Weight 15 | * Fat % 16 | * BMI 17 | * Blood Pressure Monitor 18 | * Multi user support 19 | * Family Support 20 | * [Data is exportable](https://support.withings.com/hc/en-us/articles/201491377-Health-Mate-Online-Dashboard-Exporting-my-data) 21 | * Measures body composition 22 | 23 | #### IFTT 24 | 25 | Use IFTT to track body measurements in a Google Spreadsheet 26 | 27 | [https://ifttt.com/applets/149254p](https://ifttt.com/applets/149254p) 28 | 29 | ## Body Cardio 30 | 31 | [https://www.withings.com/us/en/body-cardio](https://www.withings.com/us/en/body-cardio) 32 | 33 | Pros: 34 | 35 | * Measures: 36 | * Weight 37 | * Fat Mass 38 | * Muscle mass 39 | * Water 40 | * Bone mass 41 | * Rechargeable battery 42 | 43 | Cons: 44 | 45 | * Accuracy is subjective, but if you do many of them, you can just average it out 46 | 47 | I upgraded from Fitbit Aria, as I wanted to track more statistics. 48 | 49 | -------------------------------------------------------------------------------- /notes/archive/xiaomi-roborock-mijia.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Roborock Mijia 2 | 3 | * [English Manual](https://files.miot-global.com/files/vacuum_cleaner/vacuum_cleaner-EN.pdf) 4 | 5 | Before running: 6 | 7 | * Fill in water tank 8 | * move/remove: 9 | * Cables 10 | * iPhone cable 11 | * Apple Watch cable 12 | * Chairs 13 | * Plastic bags on the floor 14 | 15 | Regularly: 16 | 17 | * Clean main tool 18 | * Clean dust bin 19 | * Change filter 20 | * Wash 21 | * Let it dry for 24 hours 22 | * Wipe sensors of the main unit, soft, dry cloth 23 | * Four cliff sensor 24 | * Wall sensor 25 | * Charging contacts 26 | * pg 12, pg 13 27 | 28 | Once a month: 29 | 30 | * Replace water tank filter 31 | * Clean wheel 32 | * Dock charger: wipe with soft dry cloth 33 | 34 | 35 | 36 | * [Lazada](https://www.lazada.com.my/products/xiaomi-mi-robot-vacuum-cleaner-i420254066-s610772936.html?spm=a2o6s.10415192.0.0.72e049d7HGyCWl&mp=3): RM 1,199 37 | 38 | ## FAQ: 39 | 40 | Problem: Cannot receive invite 41 | 42 | You must be in the same region 43 | 44 | -------------------------------------------------------------------------------- /notes/javascript/array.md: -------------------------------------------------------------------------------- 1 | # Array 2 | 3 | * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) 4 | 5 | ## Test Array 6 | 7 | ```javascript 8 | Array.isArray(array) 9 | ``` 10 | 11 | This does not work to test if its an array. 12 | 13 | ```javascript 14 | if (array) { 15 | // empty arrays evaluate as false 16 | } 17 | 18 | if (array && array.length > 0) { 19 | // you may still want to capture the array 20 | } 21 | ``` 22 | 23 | ## Clone an array 24 | 25 | ```javascript 26 | const clone = array.slice(0); 27 | ``` 28 | 29 | ## Iterate keys in an array `(for...in)` 30 | 31 | ```javascript 32 | const array = ['x', 'y', 'z']; 33 | for (const key in array) { 34 | console.log(key); 35 | } 36 | ``` 37 | 38 | ```text 39 | 0 40 | 1 41 | 2 42 | ``` 43 | 44 | [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 45 | 46 | ## Iterate values in an array `(for...of)` 47 | 48 | ```javascript 49 | const array = ['x', 'y', 'z']; 50 | for (const value of array) { 51 | console.log(value); 52 | } 53 | ``` 54 | 55 | ```text 56 | x 57 | y 58 | z 59 | ``` 60 | 61 | [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) 62 | 63 | ## Appending/merging arrays together 64 | 65 | Reuse Array: 66 | 67 | ```javascript 68 | array1.push(...array2); 69 | ``` 70 | 71 | New Array: 72 | 73 | ```javascript 74 | const array3 = array1.concat(array2); 75 | ``` 76 | 77 | -------------------------------------------------------------------------------- /notes/javascript/async-and-await-promises.md: -------------------------------------------------------------------------------- 1 | # Async & Await / Promises 2 | 3 | ## Async 4 | 5 | ### Main function 6 | 7 | ```typescript 8 | (async () => { 9 | throw new Error('Hello World'); 10 | })().catch((err) => console.error(err)); 11 | ``` 12 | 13 | ### With Promises 14 | 15 | * [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async\_function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) 16 | 17 | ```javascript 18 | async () => { 19 | await new Promise(...); 20 | const [ 21 | result1, 22 | result2, 23 | ] = await Promise.all([ 24 | new Promise(), 25 | new Promise(...)], 26 | ); 27 | return value; 28 | } 29 | ``` 30 | 31 | ## `Promise`s 32 | 33 | * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) 34 | * [https://github.com/wbinnssmith/awesome-promises](https://github.com/wbinnssmith/awesome-promises) 35 | * [http://bluebirdjs.com/docs/why-promises.html](http://bluebirdjs.com/docs/why-promises.html) 36 | 37 | When you start chaining a lot of promises and passing variables around, consider usings `aysnc` instead. 38 | 39 | Pay attention to the style, because it's really stupid. 40 | 41 | ```javascript 42 | const start = new Promise((resolve, reject) => { 43 | xhr.get(url) 44 | .success((result) => resolve(result)) 45 | .failure((error) => reject(error)); 46 | }); 47 | 48 | const afterStart = (startResult) => new Promise((resolve, reject) => { 49 | }); 50 | 51 | start 52 | .then(afterStart) 53 | // Always start on a new line, its easier to catch 54 | // Always use a Promise or only { Promise.all([]) }, its eaiser to catch 55 | .then() => new Promise((resolve, reject) => { 56 | }) 57 | .catch((error) => { 58 | console.log(error); 59 | }); 60 | ``` 61 | 62 | * Always have a `catch()` to ensure you can see all errors. 63 | 64 | ## Promise.all 65 | 66 | Gotcha: 67 | 68 | * You have to call `.catch()` on each of the promises 69 | * You should only catch things which are idempotent; for example: 70 | * Sending emails 71 | 72 | ```typescript 73 | await Promise.all([ 74 | ..., 75 | ..., 76 | ].map((promise) => promise.catch(error => console.error(error)))); 77 | ``` 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /notes/javascript/booleans.md: -------------------------------------------------------------------------------- 1 | # Booleans 2 | 3 | 4 | 5 | ```javascript 6 | assert([] == false) 7 | assert([].length == false) 8 | assert("" == false) 9 | asesert(" " == false) 10 | assert(null != false) // null is not false 11 | assert(null != true) // null is not true either 12 | assert(!null == true) // not null is true 13 | ``` 14 | 15 | -------------------------------------------------------------------------------- /notes/javascript/collections.md: -------------------------------------------------------------------------------- 1 | # Collections 2 | 3 | | [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) | [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) | [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) | 4 | | :--- | :--- | :--- | 5 | | `push(value)` / `unshift(value)` | `set(key, value)` | `add(value)` | 6 | | `length` | `size` | `size` | 7 | | `delete array[index]` | `delete(key)` | `delete(value)` | 8 | | `find(...)` or `findIndex(...)` | `has(key)` | `has(value)` | 9 | 10 | -------------------------------------------------------------------------------- /notes/javascript/fetch.md: -------------------------------------------------------------------------------- 1 | # fetch 2 | 3 | > The Fetch API provides an interface for fetching resources \(including across the network\). It will seem familiar to anyone who has used [`XMLHttpRequest`](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest), but the new API provides a more powerful and flexible feature set. 4 | 5 | * [https://developer.mozilla.org/en-US/docs/Web/API/Fetch\_API/Using\_Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) 6 | 7 | ## **Using in Browsers** 8 | 9 | Not supported on all browsers. You can polyfill using `watchwg-fetch` 10 | 11 | [https://npmcompare.com/compare/node-fetch,whatwg-fetch](https://npmcompare.com/compare/node-fetch,whatwg-fetch) 12 | 13 | ## Using in Node.js 14 | 15 | * [https://www.npmjs.com/package/node-fetch](https://www.npmjs.com/package/node-fetch) 16 | 17 | ```bash 18 | yarn add node-fetch 19 | ``` 20 | 21 | Importing: 22 | 23 | {% code title="fetch-import-success.ts" %} 24 | ```typescript 25 | import fetch from 'node-fetch'; 26 | ``` 27 | {% endcode %} 28 | 29 | If you use webpack, the following will work locally, but fail when deployed in webpack. 30 | 31 | {% code title="fetch-webpack-import-fail.ts" %} 32 | ```typescript 33 | import * as fetch from 'node-fetch'; 34 | ``` 35 | {% endcode %} 36 | 37 | ## Text: 38 | 39 | {% code title="fetch-text.ts" %} 40 | ```typescript 41 | const response = await fetch(url); 42 | console.log(response); 43 | const text = await response.text(); 44 | ``` 45 | {% endcode %} 46 | 47 | `response`: 48 | 49 | {% code title="fetch-text-response.ts" %} 50 | ```javascript 51 | { 52 | ok true, 53 | status: 200, 54 | ... 55 | } 56 | ``` 57 | {% endcode %} 58 | 59 | ## JSON: 60 | 61 | {% code title="fetch-json.ts" %} 62 | ```javascript 63 | const response = await fetch(url); 64 | const json = await response.json(); 65 | ``` 66 | {% endcode %} 67 | 68 | ## Errors Handling 69 | 70 | * No errors are thrown. 71 | * No need for try/catch 72 | 73 | {% code title="fetch-error.ts" %} 74 | ```typescript 75 | const response = await fetch(url); 76 | console.log(response); 77 | if (!response.ok) { 78 | ... 79 | } 80 | ``` 81 | {% endcode %} 82 | 83 | `response`: 84 | 85 | {% code title="fetch-error-response.json" %} 86 | ```javascript 87 | { 88 | ok false, 89 | status: 404, 90 | } 91 | ``` 92 | {% endcode %} 93 | 94 | -------------------------------------------------------------------------------- /notes/javascript/map.md: -------------------------------------------------------------------------------- 1 | # Map 2 | 3 | [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) 4 | 5 | Examples are in TypeScript. 6 | 7 | ## Use function setters and getters 8 | 9 | ```typescript 10 | const map: Map<string, string> = new Map(); 11 | // Do not use [] 12 | // This is bad 13 | map["key"] = "value"; 14 | 15 | // Do this instead 16 | map.get(key, value); 17 | ``` 18 | 19 | ## Iterating `Map` with `for..of` 20 | 21 | Taken from [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/Map\#Iterating\_Map\_with\_for..of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Iterating_Map_with_for..of) 22 | 23 | ```javascript 24 | var myMap = new Map(); 25 | myMap.set(0, 'zero'); 26 | myMap.set(1, 'one'); 27 | for (var [key, value] of myMap) { 28 | console.log(key + ' = ' + value); 29 | } 30 | // 0 = zero 31 | // 1 = one 32 | 33 | for (var key of myMap.keys()) { 34 | console.log(key); 35 | } 36 | // 0 37 | // 1 38 | 39 | for (var value of myMap.values()) { 40 | console.log(value); 41 | } 42 | // zero 43 | // one 44 | 45 | for (var [key, value] of myMap.entries()) { 46 | console.log(key + ' = ' + value); 47 | } 48 | // 0 = zero 49 | // 1 = one 50 | ``` 51 | 52 | -------------------------------------------------------------------------------- /notes/javascript/modules.md: -------------------------------------------------------------------------------- 1 | # Modules 2 | 3 | * [AirBNB JavaScript Style Guide: Modules](https://github.com/airbnb/javascript#modules) 4 | * 10.1 Always use modules \(import/export\) over a non-standard module system. 5 | * 10.2 Do not use wildcard imports. 6 | * 10.6 In modules with a single export, prefer default export over named export. 7 | * Interpretation: multiple exports allowed 8 | * Confusing as hell 9 | * ESM vs CommonJS vs ES6 10 | 11 | If using `export default` use `import var from module`: 12 | 13 | ```javascript 14 | export const foo = 42 15 | export default 21; 16 | ``` 17 | 18 | If you want the `21`, use `import bar from './input';` 19 | 20 | ```javascript 21 | import barImport from './input'; 22 | console.log(barImport); // 21 23 | 24 | const barRequire = require('./input'); 25 | console.log(barRequire); 26 | /* 27 | { 28 | foo: 42, 29 | default: 21, 30 | } 31 | */ 32 | ``` 33 | 34 | #### Notes 35 | 36 | ```javascript 37 | export const types = () => {} 38 | ``` 39 | 40 | is different from 41 | 42 | ```javascript 43 | export function types() { } 44 | ``` 45 | 46 | * [https://nodejs.org/api/modules.html](https://nodejs.org/api/modules.html) 47 | * [http://2ality.com/2014/09/es6-modules-final.html](http://2ality.com/2014/09/es6-modules-final.html) 48 | * [https://stackoverflow.com/questions/40294870/module-exports-vs-export-default-in-node-js-and-es6](https://stackoverflow.com/questions/40294870/module-exports-vs-export-default-in-node-js-and-es6) 49 | 50 | #### Clearing Confusing 51 | 52 | | | | | Goals | | 53 | | :--- | :--- | :--- | :--- | :--- | 54 | | CommonJs | `module.exports = ...` | `var module = require('module')` | | | 55 | | AMD | | define\(\['dependency1'\], function\(dependency1 | Load synchronously | Asynchronous Module Definition | 56 | | UMD | | | | Universal Module Definition | 57 | | ESM | | | | | 58 | 59 | * [https://medium.freecodecamp.org/javascript-modules-a-beginner-s-guide-783f7d7a5fcc](https://medium.freecodecamp.org/javascript-modules-a-beginner-s-guide-783f7d7a5fcc) 60 | 61 | ## 62 | 63 | -------------------------------------------------------------------------------- /notes/javascript/object.md: -------------------------------------------------------------------------------- 1 | # Object 2 | 3 | ## Clone an object 4 | 5 | ```javascript 6 | const clone = Object.assign({}, original); 7 | ``` 8 | 9 | Note: Doesn't do deep cloning. Use `lodash` or `underscore` 10 | 11 | ## Iterate keys in an object `(for...in)` 12 | 13 | ```javascript 14 | const object = {x: 'a', y: 'b', z: 'c'} 15 | for (const key in object) { 16 | console.log(`${key}: ${object[key]}`); 17 | } 18 | ``` 19 | 20 | Result: 21 | 22 | ```text 23 | x: a 24 | y: b 25 | z: c 26 | ``` 27 | 28 | [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) 29 | 30 | ## Iterate values in an object `(for...of)` 31 | 32 | Do not use \`\(for...of\)\` with \`objects\`. This will fatal with: 33 | 34 | Safari: 35 | 36 | ```text 37 | TypeError: page[Symbol.iterator] is not a function. (In 'page[Symbol.iterator]()', 'page[Symbol.iterator]' is undefined) 38 | ``` 39 | 40 | Chrome: 41 | 42 | ```text 43 | Uncaught TypeError: page[Symbol.iterator] is not a function 44 | ``` 45 | 46 | ## 47 | 48 | -------------------------------------------------------------------------------- /notes/javascript/regex.md: -------------------------------------------------------------------------------- 1 | # Regex 2 | 3 | * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) 4 | 5 | ## Matching one string 6 | 7 | ```javascript 8 | "aaaa".match(/[a]/) 9 | ``` 10 | 11 | Result: 12 | 13 | ```text 14 | ["a"] 15 | ``` 16 | 17 | ## Matching multiple substrings 18 | 19 | ```javascript 20 | "a a123a a123a b123b c".match(/a(123)a/g) 21 | ``` 22 | 23 | Result: 24 | 25 | ```text 26 | ["a123", "a123"] 27 | ``` 28 | 29 | Note the trailing `/g` 30 | 31 | * You cannot select individual groups while using `g` 32 | 33 | -------------------------------------------------------------------------------- /notes/javascript/set.md: -------------------------------------------------------------------------------- 1 | # Set 2 | 3 | * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) 4 | 5 | ## Notes: 6 | 7 | * Use `Set.add` vs `Map.set` 8 | * Use `Set.size` vs `Array.length` 9 | * To remove/delete: use `delete` 10 | 11 | ## Set Cloning 12 | 13 | ```javascript 14 | const new = new Set(old); 15 | ``` 16 | 17 | Or if enabled: 18 | 19 | ```javascript 20 | const new = ...old 21 | ``` 22 | 23 | ## Set Iteration 24 | 25 | ```javascript 26 | for (let value of set.values()) { 27 | ... 28 | } 29 | ``` 30 | 31 | ## To Array 32 | 33 | ```javascript 34 | Array.from(new Set()) 35 | ``` 36 | 37 | ## Differences 38 | 39 | [https://github.com/aizatto/nodejs/blob/master/src/fn.js\#L42](https://github.com/aizatto/nodejs/blob/master/src/fn.js#L42) 40 | 41 | ```javascript 42 | function setMath<T>(a: Set<T>, b: Set<T>) { 43 | return { 44 | remove: [...a].filter(x => !b.has(x)), 45 | add: [...b].filter(x => !a.has(x)), 46 | }; 47 | } 48 | ``` 49 | 50 | ## 51 | 52 | -------------------------------------------------------------------------------- /notes/javascript/versions.md: -------------------------------------------------------------------------------- 1 | # Versions 2 | 3 | This is a mess 4 | 5 | | Version | Year | Name | | 6 | | :--- | :--- | :--- | :--- | 7 | | ES5 | | ECMAScript 2009 | ECMAScript 5 | 8 | | ES6 | ES2015 | ECMAScript 2015 | | 9 | | ES7 | ES2016 | ECMAScript 2016 | | 10 | | ES8 | ES2017 | | | 11 | 12 | * [https://node.green/](https://node.green/) 13 | * [https://babeljs.io/docs/en/babel-preset-env](https://babeljs.io/docs/en/babel-preset-env) 14 | * [https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c) 15 | * [https://benmccormick.org/2015/09/14/es5-es6-es2016-es-next-whats-going-on-with-javascript-versioning](https://benmccormick.org/2015/09/14/es5-es6-es2016-es-next-whats-going-on-with-javascript-versioning) 16 | * [https://en.wikipedia.org/wiki/ECMAScript](https://en.wikipedia.org/wiki/ECMAScript) 17 | 18 | -------------------------------------------------------------------------------- /notes/node.js/draftjs.md: -------------------------------------------------------------------------------- 1 | # DraftJS 2 | 3 | ## Decorators 4 | 5 | Make sure to apply decorators before the content 6 | 7 | ```typescript 8 | const [editorState, setEditorState] = useState(() => 9 | EditorState.createWithContent( 10 | props.defaultContent, 11 | decorators 12 | ) 13 | ); 14 | 15 | return ( 16 | <Editor 17 | editorState={editorState} 18 | /> 19 | ); 20 | ``` 21 | 22 | ## draft-js-plugins 23 | 24 | [https://github.com/draft-js-plugins/draft-js-plugins](https://github.com/draft-js-plugins/draft-js-plugins) 25 | 26 | #### draft-js-side-toolbar-plugin 27 | 28 | Cons: 29 | 30 | * You can't optionally change one of style of theme. 31 | * You have to change them all. 32 | * You can reuse the css if you go into the package and find the class names. 33 | 34 | ## Code Reference 35 | 36 | Main Site 37 | 38 | * [EditorState](https://draftjs.org/docs/api-reference-editor-state) 39 | 40 | ### GitHub 41 | 42 | * [getDefaultKeyBinding](https://github.com/facebook/draft-js/blob/585af35c3a8c31fefb64bc884d4001faa96544d3/src/component/utils/getDefaultKeyBinding.js#L61) 43 | * [KeyBindingUtil](https://github.com/facebook/draft-js/blob/585af35c3a8c31fefb64bc884d4001faa96544d3/src/component/utils/KeyBindingUtil.js#L18) 44 | * [RichTextEditorUtil.handleKeyCommand](https://github.com/facebook/draft-js/blob/585af35c3a8c31fefb64bc884d4001faa96544d3/src/model/modifier/RichTextEditorUtil.js#L54) 45 | 46 | ## Keyboard 47 | 48 | [https://keycode.info/](https://keycode.info/) 49 | 50 | -------------------------------------------------------------------------------- /notes/node.js/eslint.md: -------------------------------------------------------------------------------- 1 | # eslint 2 | 3 | * [Configuring](https://eslint.org/docs/user-guide/configuring) 4 | 5 | ```typescript 6 | /* eslint-disable */ 7 | // eslint-disable-next-line no-unused-vars 8 | // eslint-disable-line 9 | ``` 10 | 11 | ## Typescript 12 | 13 | Use [`@typescript-eslint/eslint-plugin`](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin) 14 | 15 | * Package [`eslint-plugin-typescript`](https://www.npmjs.com/package/eslint-plugin-typescript) is deprecated 16 | 17 | `Enum` 's don't work well, use 18 | 19 | ```typescript 20 | /* eslint-disable no-unused-vars */ 21 | const enum PackageManager { 22 | NPM = 'npm', 23 | YARN = 'yarn', 24 | } 25 | /* eslint-enable no-unused-vars */ 26 | ``` 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /notes/node.js/hapi.md: -------------------------------------------------------------------------------- 1 | # Hapi 2 | 3 | * [https://hapijs.com/](https://hapijs.com/) 4 | * [https://npmcompare.com/compare/hapi-lambda,serverless-hapi](https://npmcompare.com/compare/hapi-lambda,serverless-hapi) 5 | 6 | ## Sessions 7 | 8 | Use `yar` [https://github.com/hapijs/yar/](https://github.com/hapijs/yar/) 9 | 10 | -------------------------------------------------------------------------------- /notes/node.js/knex.md: -------------------------------------------------------------------------------- 1 | # Knex 2 | 3 | [https://knexjs.org/](https://knexjs.org/) 4 | 5 | ## CLI 6 | 7 | ```bash 8 | yarn run knex migrate:make $NAME 9 | yarn run knex migrate:latest 10 | yarn run knex migrate:rollback 11 | ``` 12 | 13 | ## Convenience Scripts 14 | 15 | Update your `package.json`: 16 | 17 | {% code title="package.json" %} 18 | ```javascript 19 | { 20 | "scripts": { 21 | "latest": "yarn run knex migrate:latest", 22 | "rollback": "yarn run knex migrate:rollback" 23 | }, 24 | } 25 | ``` 26 | {% endcode %} 27 | 28 | ## Migrations 29 | 30 | ### Naming 31 | 32 | ```bash 33 | yarn run knex migrate:make $verb_table 34 | ``` 35 | 36 | Examples: 37 | 38 | ```bash 39 | yarn run knex migrate:make createTable_users 40 | yarn run knex migrate:make alterTable_users_add_createdBy 41 | ``` 42 | 43 | Sticks to the knex function names `createTable` and `alterTable` 44 | 45 | Avoid an "`init`" file. 46 | 47 | {% hint style="warning" %} 48 | Avoid an "init" file. 49 | 50 | For example, do not have a: `20190424135724_init.js` 51 | 52 | Instead just do: `20190424135724_create_entries.js` 53 | 54 | This explains what the file does. 55 | {% endhint %} 56 | 57 | * Tables should be plural 58 | * Fields should be in `camelCase` 59 | * Follows [JavaScript Style Guides](../javascript/style-guides.md) for local variables 60 | * Exception relational id, for example: `entryID` 61 | 62 | Also see [Engineering Code > Naming](../../engineering-code/writing-code/naming/#common-names) 63 | 64 | ### Promises: 65 | 66 | {% code title="20190424104046_createTable_users.js" %} 67 | ```javascript 68 | exports.up = function(knex, Promise) { 69 | return knex.schema 70 | .createTable('users', table => { 71 | table 72 | .uuid('uuid') 73 | .primary(); 74 | table 75 | .datetime('createdAt') 76 | .defaultTo(knex.fn.now()) 77 | .index(); 78 | table 79 | .datetime('updatedAt') 80 | .defaultTo(knex.fn.now()) 81 | .index(); 82 | table 83 | .string('name') 84 | .collate('utf8mb4_unicode_ci') 85 | .defaultTo('') 86 | .notNullable(); 87 | table 88 | .string('email') 89 | .collate('utf8mb4_unicode_ci') 90 | .unique() 91 | .defaultTo('') 92 | .notNullable(); 93 | }) 94 | }; 95 | 96 | exports.down = function(knex, Promise) { 97 | return knex.schema 98 | .dropTable('users'); 99 | }; 100 | ``` 101 | {% endcode %} 102 | -------------------------------------------------------------------------------- /notes/node.js/koa.md: -------------------------------------------------------------------------------- 1 | # Koa 2 | 3 | [https://npmcompare.com/compare/connect,express,hapi,koa](https://npmcompare.com/compare/connect,express,hapi,koa) 4 | 5 | | Feature | Koa | Express | Hapi | 6 | | :--- | :--- | :--- | :--- | 7 | | async/await | yes | no | yes | 8 | | Routing | no | yes | yes | 9 | | Templating | no | yes | | 10 | | Typescript | yes | yes | `@types/hapi` | 11 | | Runs easily on AWS Lambda | | yes | | 12 | 13 | * Koa vs Express 14 | * [https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md](https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md) 15 | * Koa has async/await support 16 | * Express is supposed to have it in v5 17 | * v5 was first mentioned in July 2014 18 | * [https://github.com/expressjs/express/pull/2237](https://github.com/expressjs/express/pull/2237) 19 | * Alternatives 20 | * [https://www.npmjs.com/package/@awaitjs/express](https://www.npmjs.com/package/@awaitjs/express) 21 | * Koa does not have 22 | * routes, use a plugin instead 23 | * templating 24 | * sending files 25 | * Koa vs Hapi 26 | * Hapi does not have async/await support 27 | * [https://github.com/hapijs/hapi/issues/3429](https://github.com/hapijs/hapi/issues/3429) 28 | * [https://github.com/hapijs/hapi/pull/3486](https://github.com/hapijs/hapi/pull/3486) 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /notes/node.js/relay.md: -------------------------------------------------------------------------------- 1 | # Relay 2 | 3 | ### Cons: 4 | 5 | * Can't pass props through fragment container to other properties 6 | * Can potentially use `Context` 7 | 8 | -------------------------------------------------------------------------------- /notes/node.js/webservers.md: -------------------------------------------------------------------------------- 1 | # Webservers 2 | 3 | 4 | 5 | | | Express | Koa | Hapi | 6 | | :--- | :--- | :--- | :--- | 7 | | | "augments node" | "Fix and replace node" | | 8 | | | "batteries included" | | "batteries included" | 9 | | | | "barebones" | | 10 | | Routing Provided | Yes | No | Yes | 11 | | Native use of promises | | Yes | Yes | 12 | | | | Less reliance on middleware | | 13 | | "lightweight" | middle | most | heaviest | 14 | | | "middleware" | "middleware" | "plugins" | 15 | 16 | * [https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md](https://github.com/koajs/koa/blob/master/docs/koa-vs-express.md) 17 | * [https://www.sitepoint.com/express-koa-hapi/](https://www.sitepoint.com/express-koa-hapi/) 18 | * [https://medium.com/@grantminer/why-you-should-use-koa-with-node-js-7c231a8174fa](https://medium.com/@grantminer/why-you-should-use-koa-with-node-js-7c231a8174fa) 19 | 20 | How to get GraphQL working with Hapi? 21 | 22 | ## Routing 23 | 24 | * Express: `/users/:user/` 25 | * Hapi: `/users/{user}/` 26 | * Reactrouter: `/users/:user/` 27 | 28 | Links 29 | 30 | * [https://expressjs.com/en/guide/routing.html](https://expressjs.com/en/guide/routing.html) 31 | * [https://reacttraining.com/react-router/web/api/Route/route-props](https://reacttraining.com/react-router/web/api/Route/route-props) 32 | * [https://hapijs.com/tutorials/routing?lang=en\_US\#path](https://hapijs.com/tutorials/routing?lang=en_US#path) 33 | 34 | -------------------------------------------------------------------------------- /notes/software-engineering/software-architectures/microservice.md: -------------------------------------------------------------------------------- 1 | # Microservice 2 | 3 | Pros: 4 | 5 | * Lighter weight deployments 6 | 7 | Cons: 8 | 9 | * Many repositories 10 | * Complex 11 | * Poor knowledge sharing 12 | * Orchestration 13 | 14 | Requires: 15 | 16 | * Service Discovery 17 | * Event Bus 18 | * Pub/Sub 19 | 20 | Good for: 21 | 22 | * Services that can't exist in a FaaS environment 23 | * AWS Lambda Limitations 24 | * * Execution time. AWS has a limit of 15 minutes 25 | * Storage space 26 | * Uploads of 50mb zip 27 | * [https://docs.aws.amazon.com/lambda/latest/dg/limits.html](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) 28 | 29 | When to use microservices? 30 | 31 | * A functionality or component that is bottlenecked 32 | * Would be easier to scale if it was separate 33 | * Reusable functionality across different services 34 | * Can exist as a library; or micro service 35 | * Isolate small piece of code for: 36 | * Improved quality 37 | * Predictable releases 38 | * Security 39 | * When you want to create a black box 40 | * Reduce transparency 41 | * If it can exist as it’s own product 42 | * Things which can’t exist in a FaaS 43 | 44 | Questions to ask: 45 | 46 | * When should you bundle a microservice? 47 | * When should you unbundle a microservice? 48 | * When should you break down a monolothic app into a microservice? 49 | * When does a microservice become a monolithic app? 50 | * If your goal is to keep it as a Single Responsiblity Principle 51 | * Why not just use a FaaS architecture? 52 | 53 | -------------------------------------------------------------------------------- /personal-goals.md: -------------------------------------------------------------------------------- 1 | # Personal Goals 2 | 3 | I share this so that I have a place to discuss with people goal setting. 4 | 5 | Also see: 6 | 7 | * [https://www.deepthoughtapp.com/en/keywords/goals/](https://www.deepthoughtapp.com/en/keywords/goals/) 8 | 9 | ## Health Goals 10 | 11 | ### Mental Health Goals 12 | 13 | * Be at peace with myself 14 | * Not irritated at everything around me 15 | * To center myself 16 | 17 | ### Physical Health Goals 18 | 19 | * Be healthy to travel 20 | * No problem going up and down stairs 21 | * My physical health isn't a burden to people 22 | * Being able to travel and not have my health burden people 23 | 24 | ## Financial Goals 25 | 26 | * Develop enough passive income to cover my lifestyle 27 | * Creates more time for myself 28 | * Don't have to worry about money 29 | * Make enough money where 30 | * I have freedom of time 31 | * I don't have to worry about money 32 | * Whats most important is money after taxes 33 | 34 | 35 | 36 | * I want to make money to center myself 37 | * I want to make money to travel more comfortably 38 | * Nicer hotels, with a working desk 39 | * Pay for better flights 40 | * I want to make money to imbalance the income disparity 41 | * In my head, I feel that I know better how to distribute the money 42 | 43 | ## Retirement Goals 44 | 45 | * Surround myself with people I enjoy being with 46 | * Be able to keep myself at a happy busy 47 | 48 | ## "Before I Die" Goals 49 | 50 | * Set up a will 51 | 52 | Share as much knowledge as I have 53 | 54 | * Share my list of best practices and gotchas 55 | 56 | ## "Larger than me" Goals 57 | 58 | * Making the world a fairer place 59 | * Reducing income disparity 60 | 61 | ## "Good Enough" Goals 62 | 63 | I just want to be good enough at this, I don’t need to be the best 64 | 65 | * Play an instrument 66 | * Speak multiple languages 67 | * Cooking 68 | * Physical Health 69 | 70 | --------------------------------------------------------------------------------