├── 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 | 
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 | 
2 |
3 | [](http://commitizen.github.io/cz-cli/)
4 |
5 | # DDT - Digithun Developer Team
6 | Will contain jobs descriptions and what we love.
7 |
8 | 
9 | 
10 |
11 | # Priciple
12 | 
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 | 
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 |
459 |
--------------------------------------------------------------------------------
/art/k8s.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
18 |
--------------------------------------------------------------------------------
/raw/Elastic Search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/raw/Firebase.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/raw/Go.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------
/raw/Kubernetes.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
85 |
--------------------------------------------------------------------------------
/raw/NGiNX.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
137 |
--------------------------------------------------------------------------------
/raw/NextJS.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/raw/NodeJS.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/raw/Redis.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/raw/Tableau.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/raw/Tensorflow.svg:
--------------------------------------------------------------------------------
1 |
2 |
50 |
--------------------------------------------------------------------------------
/raw/mongoDB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------