應用軟體開發是很容易遇到坑而做不好、做不快,容易犯下所謂的應用軟體開發七宗罪
- Software Spec - Event modeling method
- Evaluation - The four key metrics
- Frontend - htmx
- Backend - Clojure
- Database - Postgres
- Deploy - PaaS
- time
- event
- the interaction with other parties
- use cases
- explain the problems first, then the solutions
- Reduce the complexity
- Increase the responsiveness
- Maintain the Consistency & Style
- How to handle API Churn?
- GraphQL
- Separate two types of APIs: generic API & application API
- Types
- Assert
- Schema Validation & Constraints
- system input schema validation
- unit test
- dependency injection
- integration tests
- Legacty code change algorithm
- Testing SQL
- log level
- context
- make the errors evident
- rules of abstraction
- map/filter/reduce
- immutable collection & PLOP
- combinator
- variant
- tree walk interpreter
- Authentication & Authorization
- ngrok or other third party services
- web handler - sesssion & cookies
- Chrome debugger
- Web handler middleware
- query string & cookie
- formatting
- status code
- psql basics:
\dt
,\dv
,\dn
,\du
,\i
,\?
,\l
,\c
,\cd
,\!
- copy to/from CSV
- 4 種 SQL 的基礎語法:
select *, select columns, where, join
- group by, order by, aggregation functions
- 1Keydata SQL tutorial
- NULL, COALESCE, CASE
- created_time, updated_time & Trigger
- window function
- self-join
- Where to put business domain logic?
- Application Layer
- DB layer
- My answer: Split the domain logic into two part. Put fast changing part into application layer and slowly changing part into DB.
- Diagnosis Tools: top, SQL explain, logs
- IO problems
- threads vs event loop
- full page cache vs SQL index
- cronjob
- shell scripts
- byte code, JIT
- The utility of JVM
- monitoring memory
- specifiy arguments
- leverage the graalvm
- Monolithic vs Microservices
- dependency declaration & separation
- stateless process
- single git repo for monolithic app
- separate git repo for library
- environment variables & configuration files