├── EVALUATE.md ├── README.md ├── WELCOME.md ├── art ├── Stellar_DDT.png ├── ddt-black-bg-800x800.png ├── ddt-card.ai ├── ddt-white-bg-800x800.png ├── ddt.ai ├── ddt.png ├── ddt.svg ├── k8s.svg ├── priciple.png └── stellar-training.png ├── raw ├── Dialogflow.svg ├── Elastic Search.svg ├── Firebase.svg ├── Go.svg ├── Google Cloud.png ├── GraphQL.svg ├── Jest.svg ├── Kubernetes.svg ├── NGiNX.svg ├── NextJS.svg ├── NodeJS.svg ├── Redis.svg ├── Tableau.svg ├── Tensorflow.svg └── mongoDB.svg ├── summit-2019 ├── api.md ├── code-convetion.md ├── database.md ├── design-pattern.md └── project-review.md └── summit-Q1-2020 ├── api.md ├── ci-cd.md ├── code-convetion.md ├── database.md ├── design-pattern.md ├── document.md ├── project-review.md └── testing.md /EVALUATE.md: -------------------------------------------------------------------------------- 1 | # Evaluation Guides 2 | 3 | ## Create Measuring Tools 4 | > Create blog on medium that reflect yourself about below topics 5 | 1. Frontend (maybe `React`, `js`, `HTML`, ...) 6 | 1. Backend (maybe `Golang`, `NodeJS`, `MongoDB`, `PostgreSQL`, ...) 7 | 1. DevOps (maybe `Kubernetes`, `Docker`, ...) 8 | 1. EdgeTech (maybe `Blockchain`, `AI/ML`, `IoT`, `Edge Computing`, `Quantum`, ...) 9 | 1. SoftSkill (`Communication`, `Team Player`, `Leadership`, `Time Management`, `Decision Making`) 10 | 11 | - - - 12 | ## Consensus Scoring by Measuring Tools 13 | ### Peer Reviews 14 | ![image](https://user-images.githubusercontent.com/97060/52560425-e5c66780-2e2a-11e9-8b79-bbcb9b720d42.png) 15 | 1. Score yourself (as `Alice`) 16 | 1. Select someone (as `Bob`) to score yourself 17 | 1. Randomly select someone (as `Cat`) to score yourself 18 | 1. Let `Cat` select someone (as `Dog`) to score yourself 19 | 20 | ### Full Peer Reviews 21 | 1. Score yourself (as `Alice`) 22 | 1. Let everyone (as `Bob`, `Cat`, `Dog`) to score yourself 23 | 24 | - - - 25 | ## Retrospectives via Google Docs with following topics. 26 | ### What I don't like from last year? 27 | // Things you don't liked go here ... 28 | 29 | ### What I like from last year? 30 | // Things you liked go here ... 31 | 32 | ### What I want to improve? 33 | // Things you plan to improve yourself ... 34 | 35 | ### What company should be improve? 36 | // Things you want company to adjustment ... 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://raw.githubusercontent.com/digithun/ddt/master/art/ddt.png) 2 | 3 | [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) 4 | 5 | # DDT - Digithun Developer Team 6 | Will contain jobs descriptions and what we love. 7 | 8 | ![stellar-ddt](https://github.com/digithun/ddt/blob/master/art/stellar-training.png?raw=true) 9 | ![ddt-stack-v1 5 1](https://user-images.githubusercontent.com/97060/38129156-f4d79eae-3427-11e8-9334-81ba1f3e5701.png) 10 | 11 | # Priciple 12 | ![](https://raw.githubusercontent.com/digithun/ddt/master/art/priciple.png) 13 | 14 | # Prerequisites 15 | - Feedly : https://hackernoon.com/ 16 | - Git, Gitflow, Github : https://danielkummer.github.io/git-flow-cheatsheet/ 17 | - Semantic Versioning via Commitizen https://github.com/commitizen/cz-cli 18 | - Bash CheatSheet : https://gist.github.com/LeCoupa/122b12050f5fb267e75f 19 | - Bash : https://github.com/Idnan/bash-guide 20 | - Network Performance : https://developers.google.com/speed/docs/insights/about 21 | - Web Performance : https://developers.google.com/web/fundamentals/performance/ 22 | - Web Security : https://developers.google.com/web/fundamentals/security/ 23 | - Test : https://medium.com/@talkol/redux-testing-step-by-step-a-simple-methodology-for-testing-business-logic-8901670756ce 24 | - Design Patterns : https://madhuraoakblog.wordpress.com/2017/03/01/design-patterns-revisiting-gang-of-four/ 25 | - Authentications : https://oauth.net/2/ 26 | - Docker : https://www.raywenderlich.com/9159-docker-on-macos-getting-started 27 | - The Architecture of Open Source Applications : http://aosabook.org/en/index.html 28 | 29 | # Coding Conventions 30 | - Lint : `eslint:recommended`, `plugin:react/recommended` 31 | - Standard JavaScript Format : https://marketplace.visualstudio.com/items?itemName=chenxsan.vscode-standard-format 32 | - Standard Style : https://marketplace.visualstudio.com/items?itemName=chenxsan.vscode-standardjs 33 | 34 | # Tools 35 | - VSCode : https://code.visualstudio.com/ 36 | - RoboMongo : https://robomongo.org/ 37 | - Medis : https://github.com/luin/medis 38 | - Docker linter : https://github.com/replicatedhq/dockerfilelint 39 | - Logs & Monitoring : https://github.com/influxdata/TICK-docker 40 | 41 | # Test Tools 42 | - Speed : https://developers.google.com/speed/pagespeed/insights/ 43 | - Secure : https://observatory.mozilla.org/ 44 | - SSL : https://www.ssllabs.com/ssltest/ 45 | - HTTP : https://securityheaders.io/ 46 | - Load Test : https://github.com/devth/alpine-bench 47 | 48 | # Full Stack JS Engineer 49 | - Feedly : https://dev-blog.apollodata.com/ 50 | - ES6 : [cheatsheet](https://github.com/DrkSephy/es6-cheatsheet), [uglovely-es6](https://github.com/smmoosavi/uglovely-es6) 51 | - ESLint : http://eslint.org/ 52 | - Jest : https://facebook.github.io/jest/ 53 | - Redux : http://redux.js.org/ 54 | - GraphQL : http://graphql.org/learn/ 55 | - Apollo : http://dev.apollodata.com/ 56 | - GraphQL Compose : https://github.com/nodkz/graphql-compose 57 | - MongoDB : [Mongoose](http://mongoosejs.com/) 58 | - PostgreSQL : https://www.postgresql.org/ 59 | - Prisma : https://www.prisma.io/ 60 | - Docker : Docker file, Docker Compose 3.1, ... 61 | - Development Environment : Development Server, HMR, ... 62 | - Production Environment : Secure, Speed, Scale, HA, ... 63 | - Functional Programming : [A Functional Programmer’s Introduction to JavaScript](https://medium.com/javascript-scene/a-functional-programmers-introduction-to-javascript-composing-software-d670d14ede30) 64 | - Functional Programming : [Functional Mixins](https://medium.com/javascript-scene/functional-mixins-composing-software-ffb66d5e731c) 65 | - Design Patterns : https://addyosmani.com/resources/essentialjsdesignpatterns/book/ 66 | 67 | # Full Stack + Web 68 | - Feedly : https://tympanus.net/codrops/ 69 | - Feedly : https://www.sitepoint.com/ 70 | - React : https://vasanthk.gitbooks.io/react-bits/ 71 | - TypeScript : https://www.typescriptlang.org/ 72 | - NextJS : https://github.com/zeit/next.js 73 | - Style : https://github.com/styled-components/styled-components 74 | - CDN : https://www.cloudflare.com/ 75 | 76 | # Full Stack + Mobile 77 | - Feedly : https://blog.prototypr.io/ 78 | - iOS - Swift and Android - Kotlin 79 | - Style : https://github.com/styled-components/styled-components 80 | - Offline First 81 | 82 | # Full Stack + Chatbot 83 | - Feedly : https://chatbotsmagazine.com/ 84 | - Awesome : https://github.com/BotCube/awesome-bots 85 | - Dialogflow : https://dialogflow.com/ 86 | - Natural Language APIs For Bots : https://medium.com/@Conversate/natural-language-apis-for-bots-e791f090e32f 87 | - wit.ai : https://wit.ai/ 88 | 89 | # Full Stack + Backend 90 | - Feedly : https://blog.risingstack.com/ , https://nodesource.com/blog 91 | - Digital Ocean : Domain Name Setup, EMail Setup, Floating IP, Block Storage 92 | - Google Cloud Services / Storage / Snapshots / Image Registry 93 | - NodeJS : pm2 94 | - ExpressJS 95 | - PassportJS 96 | - MongoDB : Mongoose, Pooling, Replication, Sharding, Capped Collections, ... 97 | - PostgreSQL : https://www.postgresql.org/ 98 | - Redis 99 | - Pub/Sub 100 | - Nginx : TLS (CertBot), Proxy Forward, Secure Header 101 | - Kubernetes / Helm / Chart 102 | - Docker : Docker Swarm Mode, Docker Machine, Docker Stacks, Docker Secret 103 | - Docker Driver : https://hackernoon.com/how-to-properly-run-docker-on-rhel-and-friends-d055754414e5#.1z2ps9ycr 104 | - Go : https://golang.org/ 105 | 106 | ![fee99542-microservices-hierarchy-of-needs](https://user-images.githubusercontent.com/97060/27008143-5898b092-4e94-11e7-9a4c-74c625562108.png) 107 | 108 | # Full Stack + DevOps 109 | - Feedly : http://rigor.com/blog 110 | - Feedly : https://thenewstack.io/ 111 | - Microservice Architecture : https://github.com/katopz/best-practices/blob/master/best-practices-for-building-a-microservice-architecture.md 112 | - CI/CD 113 | - Quality Assurance : Automate test 114 | - High Avalibility : Region Scale, Floatig IP, [Docker Flow Proxy](https://proxy.dockerflow.com/swarm-mode-stack/) 115 | - Security Assurance 116 | - Performance Assurance 117 | - Chaos Testing : http://blog.terranillius.com/post/pumba_docker_chaos_testing/ 118 | - Blue/Green Deployment : https://technologyconversations.com/2017/01/31/blue-green-deployments-with-docker-services-running-inside-a-swarm-cluster/ 119 | - Blue/Green Deployment : https://botleg.com/stories/blue-green-deployment-with-docker/ 120 | - cAdvisor/influxDB/Grafana : https://botleg.com/stories/monitoring-docker-swarm-with-cadvisor-influxdb-and-grafana/ 121 | - Monitoring : https://github.com/firehol/netdata 122 | 123 | # Data Analysis 124 | - BigQuery : https://cloud.google.com/bigquery/ 125 | - Tableau : https://www.tableau.com/ 126 | 127 | # Blockchain Developer 128 | - NodeJS : https://nodejs.org 129 | - Go : https://golang.org/ 130 | - Understatnd full node, chain data, mining 131 | - Stellar : https://www.stellar.org/ 132 | - IPFS : https://ipfs.io/ 133 | - Hyperledger : https://www.hyperledger.org/ 134 | - Paxos vs RAFT : https://blockonomi.com/paxos-raft-consensus-protocols/ 135 | 136 | # Playground 137 | - [Play with Kubernetes Classroom](https://training.play-with-kubernetes.com/) 138 | - [Blockchain for Business - An Introduction to Hyperledger Technologies](https://www.edx.org/course/blockchain-business-introduction-linuxfoundationx-lfs171x) 139 | -------------------------------------------------------------------------------- /WELCOME.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | ## Setup Mac OSX 4 | https://github.com/zapkub/environment-setup/blob/master/setup-mac.sh 5 | 6 | ## Tools 7 | - VSCode : https://code.visualstudio.com //*VSCode(Visual Studio Code) is source code editor developed.* 8 | **Installing Extensions** 9 | - Standard JavaScript Format : https://marketplace.visualstudio.com/items?itemName=chenxsan.vscode-standard-format //*This extension adds Standard format function to JavaScript.* 10 | - Standard Style : https://marketplace.visualstudio.com/items?itemName=chenxsan.vscode-standardjs //*This extension to integrate JavaScript Standard Style into VSCode.* 11 | - Git Lens : https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens //*This extension helps you to visualize code authorship at a glance via Git blame annotations and code lens.* 12 | - vscode-icons : https://marketplace.visualstudio.com/items?itemName=robertohuertasm.vscode-icons //*Bring icons to your Visual Studio Code.* 13 | 14 | - HomeBrew : https://brew.sh //*Software package management system that simplifies the installation of software on macOS operating system.* 15 | - Yarn : https://yarnpkg.com/en/docs/install //*Package manager for your code. It allows you to use and share code with other developers.* 16 | - Node.JS and NPM : https://www.dyclassroom.com/howto-mac/how-to-install-nodejs-and-npm-on-mac-using-homebrew //*Node.JS is an open source, cross-platform runtime environment for developing server-side and networking applications. NPM(Node Package Management)* 17 | - Docker : https://www.docker.com/get-docker //*Open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud.* 18 | - ESLint : http://eslint.org/ //*Tool for identifying and reporting on patterns found in ECMAScript/JavaScript code, with the goal of making code more consistent and avoiding bugs.* 19 | - Jest : https://facebook.github.io/jest/ //*For test all JavaScript code including React applications.* 20 | - Sourcetree : https://www.sourcetreeapp.com //*Git GUI* 21 | - Slack : https://slack.com //*Cloud-based set of proprietary team collaboration tools and services.* 22 | - iTerm2 : https://www.iterm2.com/ //*Terminal emulator for macOS* 23 | - Gogle Cloud SDK : https://cloud.google.com/sdk/docs/quickstart-macos //*Tools for Cloud Platform* 24 | - Kubernetes : https://kubernetes.io/docs/tasks/tools/install-kubectl/ //*Open-source system for automating deployment, scaling, and management of containerized applications.* 25 | - Helm : https://github.com/kubernetes/helm //*Tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes resources.* -------------------------------------------------------------------------------- /art/Stellar_DDT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/Stellar_DDT.png -------------------------------------------------------------------------------- /art/ddt-black-bg-800x800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/ddt-black-bg-800x800.png -------------------------------------------------------------------------------- /art/ddt-card.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/ddt-card.ai -------------------------------------------------------------------------------- /art/ddt-white-bg-800x800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/ddt-white-bg-800x800.png -------------------------------------------------------------------------------- /art/ddt.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/ddt.ai -------------------------------------------------------------------------------- /art/ddt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/ddt.png -------------------------------------------------------------------------------- /art/ddt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 79 | 80 | 81 | 82 | 83 | 105 | 106 | 107 | 108 | 109 | 118 | 119 | 120 | 121 | 122 | 131 | 132 | 133 | 134 | 135 | 144 | 145 | 146 | 147 | 148 | 161 | 162 | 163 | 164 | 165 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | -------------------------------------------------------------------------------- /art/k8s.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 65 | 73 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /art/priciple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/priciple.png -------------------------------------------------------------------------------- /art/stellar-training.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/art/stellar-training.png -------------------------------------------------------------------------------- /raw/Dialogflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /raw/Elastic Search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /raw/Firebase.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | logo_lockup_firebase_vertical 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /raw/Go.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 48 | 49 | 50 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /raw/Google Cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digithun/ddt/941bf0289a2e2a65af0ca69be388f3cdc1f837ad/raw/Google Cloud.png -------------------------------------------------------------------------------- /raw/GraphQL.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 72 | -------------------------------------------------------------------------------- /raw/Jest.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /raw/Kubernetes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 23 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 65 | 73 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /raw/NGiNX.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | 52 | 53 | 54 | 55 | 80 | 85 | 91 | 97 | 103 | 111 | 114 | 120 | 128 | 129 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /raw/NextJS.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /raw/NodeJS.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /raw/Redis.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /raw/Tableau.svg: -------------------------------------------------------------------------------- 1 | tableau -------------------------------------------------------------------------------- /raw/Tensorflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 32 | 37 | 42 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /raw/mongoDB.svg: -------------------------------------------------------------------------------- 1 | MongoDB-Logo-Reg -------------------------------------------------------------------------------- /summit-2019/api.md: -------------------------------------------------------------------------------- 1 | Application Program Interface (API) 2 | 3 | GRPC 4 | - prototool 5 | - linter 6 | - ไม่ต้องใส่ comment 7 | ``` 8 | service AdminAPI{ 9 | rpc GetUser(GetUserRequest) returns(GetUserResponse) 10 | rpc GetUserList(GetUserListRequest) returns(GetUserListResponse) 11 | 12 | } 13 | message GetUserRequest { string id = 200; string first_name = 202; last_name = 201; } 14 | message GetUserResponse { } 15 | 16 | message GetUserListResponse { repeated User records = 201; } 17 | ``` 18 | -------------------------------------------------------------------------------- /summit-2019/code-convetion.md: -------------------------------------------------------------------------------- 1 | ## Code convention 2 | - Typescript (เป็นทุกคน) 3 | - Golang (Primary lang, ตอนนี้ขาด Pair ที่ยังไม่เคยทำ) 4 | - CSS ( เป็นทุกคนแล้ว ) 5 | - Kotlin (Mike, Pair) 6 | - Swift (Pair, Aim) 7 | 8 | ## Package naming 9 | - Environment variable naming 10 | - ให้ใส่ชื่อ service ข้างน้าก่อนด้วยเช่น `REEEED_PORT` 11 | - Typescript 12 | - folder name ต้องเป้น lowercase เช่น `reeeed-admin` 13 | - ตัวแปร เป็น camelcase เช่น `userId` `userApi` 14 | - ตัวย่อ ก็ต้องเป็น Camelcase ด้วย เช่น `endpointUrl` 15 | - Abstract naming 16 | - Interface ต้องขึ้นชื่อด้วย `ICreetable` 17 | - Class Capitalize เช่น `AdminConsole`, "Icream" 18 | - Type alias ขึ้นด้วย T เช่น `TPaginationPropTypes` 19 | - method naming 20 | - camel case naming เช่น `getUserById` 21 | - public, private, protected จะใส่ strictly 22 | - method ที่จะ return collection 23 | - จะใช้ keyword list `เช่น getPaymentList` 24 | - method ที่จะ get 1 data 25 | - จะใช้ get เช่น `getPayment` 26 | - method ที่จะใช้สร้าง entity 27 | - สร้างเข้า database จะใช้ keyword คำว่า `create` 28 | - factory function สร้าง object ขึ้นมาใหม่ `new` 29 | - method ที่จะใช้ update entity ใช้ keyword `update` ( ถ้ามี upsert จะใช้ upsert ตรงๆ ) 30 | - delete ก็ใช้ delete เลย 31 | 32 | 33 | - Golang 34 | - folder name underscore + lower case เช่น `external_database` 35 | - package name ใช้คำเต็ม เช่น `database` , `luna_entity` 36 | - ชื่อ folder กับ ชื่อ package ไม่ต้องตรงกันก็ได้ 37 | - ตัวแปร 38 | - camelmase case 39 | - Enum ให้ใช้ Uppercase 40 | - convention ของการ ตั้งชื่อตัวย่อ Id , Url 41 | - Abstract 42 | - Interface จะต้องไม่มี Interface ข้างหลัง 43 | - ให้ใช้ `er` suffix เช่น `Stringer`, `XmlMarshaler` ( ไม่บังคับ ) 44 | - method naming เหมือน Typescript 45 | 46 | 47 | -------------------------------------------------------------------------------- /summit-2019/database.md: -------------------------------------------------------------------------------- 1 | # Database analysis 2 | 3 | 4 | ## Relational database 5 | ### Migration 6 | - เราจะไม่ใช้ ORM ในการ สร้าง schema เราจะเขียน SQL script เพื่อ initial database ไปเลย 7 | - Update script จะใช้ tools ในการทำ diff 8 | - Object relation mapping จะใช้เฉพาะใน code Create, Update, Delete, List 9 | 10 | ## Database analyisis 11 | - User management, Access Control อยากจะใช้ RDB เป็นหลัก 12 | - Primary เราจะใช้ SQL ใน production และ อาจจะใช้ mongo ใน MVP 13 | 14 | ### Analytic เราจะใช้ 15 | - NoSQL primary ที่ mongo 16 | -------------------------------------------------------------------------------- /summit-2019/design-pattern.md: -------------------------------------------------------------------------------- 1 | ## Front end 2 | ### Typescript 3 | - Unidirectional dataflow ( Tae, Mai ที่ยังไม่เคยทำจริงๆ ) 4 | - MobX, Hooks ( postpone ) 5 | - Declarative UI เราจะใช้เมื่อ 6 | - เพื่อทำ Interactive UI จริงๆที่มี Logic ซับซ้อน 7 | - ให้หลีกเลี่ยง การใช้ React เพื่อทำ static page 8 | 9 | ### Swift + Kotlin 10 | - Reactive programing ( มี Aim คนเดียวที่ใช้ แต่ยังไม่เคยใช้บน prod ) 11 | - ใช้กับการทำ mobile application 12 | - เราจะใช้เมื่อเราไม่สามารถ หา Unidirection tool ได้ 13 | - IOC ยังคงใช้ได้ดี 14 | 15 | ### CSS 16 | ##### Active 17 | - SASS 18 | - PostCSS 19 | ##### Deprecated 20 | - styled component 21 | 22 | 23 | ## Backend 24 | - IO 25 | - ใช้กับ Web service ที่เป็น NodeJS ( Inversify + tsoa ) 26 | - Clean architecture 27 | - ทุกครั้งที่ทำ Golang web service 28 | 29 | - MVVM (model view viewmodel) 30 | -------------------------------------------------------------------------------- /summit-2019/project-review.md: -------------------------------------------------------------------------------- 1 | ## Project review 2 | 3 | ## Shop2Pay 4 | #### Member 5 | - Everyone 6 | 7 | #### Summary 8 | ทำ Payment gateway proxy และทำ API Management ให้กับลูกค้า โดยจะเป็น Tree-pay ที่ใช้เป้น Proxy 9 | ### Experience 10 | - การทำ API Management 11 | - การทำ Payment portal, security ของ การทำ payment API 12 | 13 | ## Reeeed 14 | #### Member 15 | - Art ( Project Lead ) 16 | - Oe 17 | - Ball 18 | - Mike 19 | - Pair 20 | 21 | #### Summary 22 | โปรเจค แพลตฟอร์ม Digital content ของบริษัท Design เอง 23 | - ใน Reeeed เราใช้ Prisma on Postgres (Prisma 1.27) backing service ซึ่งผลปรากฎว่า พบปัญหาหลักคือ การ Aggregation ข้อมูลไม่มี กิน Resource เยอะพอสมควรเพื่อจะให้ทำงานได้ราบรื่นและ Migration ไม่ดี ( อ่านเพิ่มตรง Database analysis ) ( ทุกคน ) 24 | - มีส่วนหนึ่งที่ refactor เป็น clean แล้วรู้สึกพอใจ ( mike ) 25 | - UI ของ CMS ไม่ค่อยพอใจเรื่อง Spacing และรู้สึกพอใจการใช้ Opensource แบบ Ant มากกว่า 26 | - ของ Reeeed NodeJS ซึ่ง Build นานมากเพราะเป็น Monolithic 27 | - ชอบ SOA มากกว่าแบบ Jamplay ( oe ) 28 | - ไม่มี Submodule ( ball ) 29 | - ชอบความไม่มี Dependency ระหว่าง service ของ monolithic ( mike ) 30 | - Maintaining ยังง่ายอยู่ very good 31 | - Cloud SQL ดีมาก 32 | 33 | ### Future plan 34 | - MongoDB scaling 35 | 36 | ### Experience 37 | - Digital asset management 38 | - Close loop digital wallet 39 | - Content editor 40 | - Ecommerce digital payment 41 | 42 | 43 | ## Love 44 | - Tae 45 | - Aim 46 | - Mai 47 | 48 | #### Summary 49 | เราเข้าไปเป็น Web service developer outsource ของ Inception เพื่อทำ Wallet application + payment gateway + remittance โดยใช้ Stellar blockchain 50 | - Project outsource อันแรกของบริษัท 51 | - Process การเก็บ requirement แบบ outsource ต้องตกลงเรื่อง การออกแบบ requirement ให้ 52 | - Adopt Golang on production ครั้งแรก 53 | - Adopt GRPC ครั้งแรก ของ Production 54 | 55 | ### Experience 56 | - Stellar wallet engine และการออกแบบ payment gateway บน Stellar blockchain 57 | - Web service สำหรับ Mobile client 58 | - เรื่องการทำงานน กับทีมที่ไม่มี Process ที่ชัดเจน เราแก้ด้วยการ take process management เอง 59 | - Infrastructure การ deployment บน AWS 60 | - Networking design บน AWS Cloud 61 | - การ Setup Stellar node 62 | 63 | ## Major 64 | - Tae 65 | - Art 66 | - Ball 67 | - Oe 68 | 69 | ### Summary 70 | บริษัทได้มีบทบาทในการเข้าไปช่วย ระบบจัดการโปรโมชั่น และ Voucher ของโรงหนังในเครือ Major cineplex 71 | - ระบบจัดการโควต้าการใช้ Voucher ในจุดการใช้ Voucher ต่างๆ เช่น Kiosk, Mobile, Website, box office 72 | 73 | ### Experience 74 | - การทำงานกับ contact ที่ไม่สื่อสาร context เฉพาะออกมาครบถ้วน 75 | - การทำงานกับ requirement ที่ไม่ชัดเจนและ การทำงานกับการแก้ปัญหาของการไม่มีคน confirm requirement 76 | 77 | ## Major (outsource) 78 | - Oe 79 | 80 | ### Summary 81 | Implement report ของระบบที่เค้ามีอยู่แล้ว, requirement ไม่ชัดเจนเท่าไหร่ จากตอนแรก ที่จะทำ ระบบ report ทั้งหมดขึ้นมาใหม่ กลายเป็นเข้าไป implement report เพิ่มจากระบบเดิม 82 | 83 | ### Experience 84 | - Method of working ของ Major ไม่เข้าใจระบบการ Outsource แบบแยกโปรเจค 85 | - การทำงานกับ Culture ของพนักงาน Routine 86 | 87 | ## Chaiyo POC 88 | - Mai 89 | - Aim 90 | 91 | ### Summary 92 | เราต้องการทำตัวอย่างของ Lending management system ให้กับ Chaiyo เพื่อนำไปตัดสินใจการร่วมโปรเจคในอนาคต 93 | 94 | ### Experience 95 | - ตกลงการจ้าง vendor และการสื่อสาร ให้ตกลงช่องทางการสื่อสารให้ชัดเจน 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /summit-Q1-2020/api.md: -------------------------------------------------------------------------------- 1 | Application Program Interface (API) 2 | 3 | GRPC 4 | - server to server only 5 | - prototool 6 | - linter 7 | - ไม่ต้องใส่ comment 8 | - ทุก method ต้องมี Request & Response 9 | ``` 10 | service AdminAPI{ 11 | rpc GetUser(GetUserRequest) returns(GetUserResponse) 12 | rpc GetUserList(GetUserListRequest) returns(GetUserListResponse) 13 | 14 | } 15 | message GetUserRequest { string id = 200; string first_name = 202; last_name = 201; } 16 | message GetUserResponse { } 17 | 18 | message GetUserListResponse { repeated User records = 201; } 19 | ``` 20 | GraphQL 21 | - for frontend 22 | - convention 23 | - ชื่อเอาตาม code convention 24 | - พวก list ควรใช้ connection แทน pagination (เพราะมีปัญหาเรื่อง performance ถ้า row > 1M แล้ว offset เยอะๆ) 25 | -------------------------------------------------------------------------------- /summit-Q1-2020/ci-cd.md: -------------------------------------------------------------------------------- 1 | ### Staging [develop branch] 2 | - Bot check Coverage PR ตาม testing.md 3 | - Test 4 | - Build 5 | - Deploy to staging (mobile deploy to internal) 6 | 7 | ### Beta [release branch] 8 | - แตก Branch สำหรับ Release 9 | - Test 10 | - Build 11 | - Deploy ขึ่น Beta 12 | - Test Beta แบบคลิกๆ 13 | 14 | ### Production 15 | - tag version 16 | - merge into master 17 | - test 18 | - build 19 | - manual deploy 20 | -------------------------------------------------------------------------------- /summit-Q1-2020/code-convetion.md: -------------------------------------------------------------------------------- 1 | ## Code convention 2 | 3 | ### Langs 4 | - Typescript (เป็นทุกคน) 5 | - Golang (Primary lang, ตอนนี้ขาด Pair ที่ยังไม่เคยทำ) 6 | - CSS (เป็นทุกคนแล้ว) 7 | - Kotlin (Mike, Pair) 8 | - Swift (Pair, Aim) 9 | - Python (Mai, Oe, Tung) 10 | 11 | ## Package naming 12 | - Yaml 13 | - Follow your project 14 | - Environment variable naming 15 | - UPPER SNAKE CASE (ex. AUTH_KEY) 16 | - Optional add service name (ex. REEEED_AUTH_KEY) 17 | 18 | - Typescript 19 | - folder name ต้องเป็น lowercase เช่น `reeeed-admin` 20 | - ตัวแปร เป็น camelcase เช่น `userId` `userApi` 21 | - ตัวย่อ ก็ต้องเป็น Camelcase ด้วย เช่น `endpointUrl` 22 | - Abstract naming 23 | - Interface ต้องขึ้นชื่อด้วย `ICreetable` 24 | - Class Capitalize เช่น `AdminConsole`, "Icream" 25 | - Type alias ขึ้นด้วย T เช่น `TPaginationProps` 26 | - or Type alias แบบไม่มี T เช่น `PaginationProps` 27 | - method naming 28 | - camel case naming เช่น `getUserById` 29 | - public, private, protected จะใส่ strictly 30 | - method ที่จะ return collection 31 | - ใช้ keyword list `เช่น getPaymentList` 32 | - ใช้ keyword plural `เช่น getPayments` 33 | - ใช้ keyword list of `เช่น getListOfPayment` 34 | - ใช้ keyword list `เช่น find` 35 | - method ที่จะ get 1 data 36 | - `getPayment` 37 | - `findOne` 38 | - `find + entityName` ex. `findPayment` 39 | - filter on collection 40 | - ใช้ argument filter 41 | - ใช้ by ตามด้วยชื่อที่ต้องการ filter ex. `findPaymentByUsername`, `getPaymentsByCompany` 42 | - method ที่จะใช้สร้าง entity 43 | - สร้างเข้า database จะใช้ keyword คำว่า `create` 44 | - สร้างเข้า database หลาย entities ใช้ keyword ว่า `createMany` 45 | - soft delete ใช้ `remove` 46 | - hard delete ใช้ `delete` 47 | - class constructor สร้าง object ขึ้นมาใหม่ `new` ex. new Author({}) 48 | - method ที่จะใช้ update entity ใช้ keyword `update` ( ถ้ามี upsert จะใช้ upsert ตรงๆ ) 49 | ให้ใช้ id อย่างเดียวเท่านั้นห้าม upsert โดย unique key อื่น ex. upsert(doc: { id: "", name: "" }) 50 | 51 | - Golang 52 | - folder name underscore + lower case เช่น `external_database` 53 | - package name ใช้คำเต็ม เช่น `database` , `luna_entity` 54 | - ชื่อ folder กับ ชื่อ package ไม่ต้องตรงกันก็ได้ 55 | - ตัวแปร 56 | - camelmase case 57 | - Enum ให้ใช้ Uppercase 58 | - convention ของการ ตั้งชื่อตัวย่อ Id , Url 59 | - Abstract 60 | - Interface จะต้องไม่มี Interface ข้างหลัง 61 | - ให้ใช้ `er` suffix เช่น `Stringer`, `XmlMarshaler` ( ไม่บังคับ ) 62 | - method naming เหมือน Typescript 63 | - ให้ encapsulate struct ให้ Export ไปแค่ interface เท่านั้น (แต่พวก Entity ไม่ต้อง) 64 | ex. NewAuthorRepository(...) => interface AuthorRepository 65 | 66 | - CSS 67 | - tailwind for utility 68 | - naming BEM `ex. btn--is-active btn__label btn__label--hover` 69 | - StyledComponent / SCSS 70 | 71 | - UI Framework 72 | - Ant 73 | - Blueprint 74 | 75 | - Component Framwork 76 | - ไปหามา แล้วมาใส่ด้วย 77 | 78 | - Swift 79 | - ใช้ Swift Gen สำหรับ asset ex. string รูป สี คำ i81n 80 | -------------------------------------------------------------------------------- /summit-Q1-2020/database.md: -------------------------------------------------------------------------------- 1 | # Database analysis 2 | 3 | 4 | ## Relational database 5 | ### Migration 6 | - เราจะไม่ใช้ ORM ในการ สร้าง schema เราจะเขียน SQL script เพื่อ initial database ไปเลย 7 | - Update script จะใช้ tools ในการทำ diff 8 | - Object relation mapping จะใช้เฉพาะใน code Create, Update, Delete, List 9 | 10 | ### Mongo 11 | - เหมาะสำหรับ project ที่ขึ้นใหม่ที่ schema ยังไม่นิ่ง 12 | - transaction ไม่แน่ใจว่า ok รึเปล่า 13 | - Easy to scale 14 | 15 | ### Postgres 16 | - transaction ดีมากๆ 17 | - performance ดีกว่า mongodb 18 | - Horizon Scale is too hard 19 | 20 | ### สรุป 21 | - เลือกตาม Project ไป 22 | -------------------------------------------------------------------------------- /summit-Q1-2020/design-pattern.md: -------------------------------------------------------------------------------- 1 | ## Front end 2 | ### Typescript 3 | - Unidirectional dataflow 4 | - MobX 5 | - ใช้ Hooks แทน Class Component 6 | - Declarative UI เราจะใช้เมื่อ 7 | - เพื่อทำ Interactive UI จริงๆที่มี Logic ซับซ้อน 8 | - ให้หลีกเลี่ยง การใช้ React เพื่อทำ static page 9 | 10 | ### Swift 11 | - Storyboard 12 | - Reactive programing 13 | - ใช้งานยากถ้าใช้ร่วมกับ Storyboard ถ้า Project นั้นใช้ Storyboard ก็ไม่ต้องช้ Reactive programing 14 | - IOC very good but not good for view 15 | - อย่าใช้ MVVM โดยเพื่อนพี่แพร์ (ชื่อมันยาวจน build ไม่ผ่าน) 16 | 17 | ### CSS 18 | ##### Active 19 | - SASS 20 | - PostCSS 21 | - Styled Component 22 | 23 | 24 | ## Backend 25 | - IO 26 | - ใช้กับ Web service ที่เป็น NodeJS ( Inversify + tsoa ) 27 | - Clean architecture 28 | - ทุกครั้งที่ทำ Golang web service 29 | -------------------------------------------------------------------------------- /summit-Q1-2020/document.md: -------------------------------------------------------------------------------- 1 | - convention.md ของแต่ละ Project 2 | - software architecture 3 | - software requirement specification 4 | - requirement scope 5 | - functional requirement 6 | - non-functional requirement 7 | - architecture 8 | - timeline + cost คร่าวๆ 9 | - api doc 10 | - data dict 11 | - manual guide 12 | - deployment 13 | - how to use ? 14 | - ER 15 | - Role permission 16 | - UAT Test Cases 17 | -------------------------------------------------------------------------------- /summit-Q1-2020/project-review.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /summit-Q1-2020/testing.md: -------------------------------------------------------------------------------- 1 | - Frontend 2 | - Storybook for UI 3 | - Storyshot 4 | - Integration Test 5 | - อยากใช้ Storybook คู่กับ ui test runner (cypass, cucumber) [BDD] 6 | - Stateful Component 7 | - ให้ใช้ enzyme/React.render test state 8 | - Backend 9 | - Integration 10 | - test ตาม uat ได้ 11 | - Unit Test 12 | - test logic ตาม usecase, repository 13 | - Coverage minimum 50% [new project] 14 | - New code coverage ต้องห้ามลดลงน้อยกว่า 1% 15 | --------------------------------------------------------------------------------