Skip to main content

Goodbye 2024

· 5 min read

Overview

MonthProject
01Assistant System for Government Cloud Management
02-12WebRTC PaaS
  • entered new company and joined new project
    • webrtc paas
    • about 30 members
      • kind, skilled, talented and passionate
  • learned a lot of new things
    • webrtc
    • service maintenance
    • typescript

WebRTC

  • webrtc is a protocol stack to achieve real-time communication, mainly using media such as audio and video via p2p
    • tutorial is easy
      • browsers provide simple apis for webrtc so app developers can easily use them in javascript and implement real-time communication apps if they are simple just like sample apps
    • the protocol stack is very complex
      • webrtc is not a just single protocol, but a protocol stack; consisting of many existing protocols like srtp, sctp, ice, udp, etc.
      • these protocols were not tailored only for webrtc, and webrtc just uses part of them
      • but to master webrtc, understanding those specification and actual working in detail can't be avoided
      • i know that making my hands dirty and implementing something by my self is an important step to understand and satisfy my curious
        • actually i started to write stun/turn server in ts
        • it was for the first time to me to implement something following a specification like RFC
        • and was good for study about networking
      • but at the same time i feel that implementing webrtc from the bottom of the protocol stack could be kinda waste of time because webrtc is not using those protocol fully
        • it would be good to touch only the part of those protocols on which webrtc depends if can...
        • at least i wanna understand how rtp works for real-time media connection
      • also knowledge about audio/video encoding is necessary
    • just trying webrtc is easy, but controlling, optimizing and maintaining the service using webrtc is super hard
      • webrtc itself is complex
      • characteristics like real-time, asynchronous and of networking make the service more complicated
  • i often watch game streams on youtube or twitch so am interested in vod or real-time content delivery
    • there are other protocols such as hls, rtmp, moqt, etc.
    • i wanna get closer to it
    • also i have a lot of benefit from remote working
    • glad to enter such a field which is challenging but interesting

twada-juku

  • entered to a study course mainly for tdd by t-wada
    • i was already familiar with tdd but i got more confidence and structured knowledge thought the course
    • developed a simple crud web app
      • frontend
      • backend
        • fastify
        • kysely
          • tried a query builder
          • good to write sql type-safely
          • converting rows to object or vice versa was rough than i unexpected
    • deployed it onto cloud run
  • test size
    • problem is that words like unit, integration, e2e have ambiguity
    • define test size and name them like small, middle and large; the number of tests should shape pyramid

TypeScript

  • improved developer experience of dev team
    • update obsoleted packages
    • fixed type errors and reduced suppressed type errors like using @ts-ignore, any or so on
      • defined correct and flexible types
    • replaced eslint with biome
      • eslint v9 introduced new config format called flat config
      • migration from >= v8 seemed not easy
      • biome is much faster than eslint
    • enabled to run app without source code build leveraging type inference and conditional exports
    • introduced pnpm
    • introduced zod
      • modern and ts-community standard schema validation library
      • there were many complex type guards written manually in our codebase
        • writing complicated type guards manually is error-prone
    • introduced changesets
      • publish js-sdk packages on ci/cd; reduce the operation time to a half of it

WASM

  • learned what wasm is
    • wasm seems to be thought like the next tech of container?
  • developed a ts library that loads wasm
    • used vite

Scrum

  • struggled team management
    • our team has responsibility for develop and operation (not only deployment and server operation but also user's dev support)
    • unexpected incidents and tech supports had made our planning difficult and taken away the time for development
      • => calculated velocity and introduced buffer to time we can use for the sprint based on it
  • utilized my knowledge and experience on scrum
    • make scrum events smooth
      • they had surly applied scrum framework but the development was not agile at all
      • they've taken so much time for daily scrum, retrospective, and planning
        • 2 hours daily scrum, 2 days retrospective and planning, or so...
      • => set time box and shortened the time taken for events
        • had them focus on the topic of discussion
        • if discussion prolong and it's not about team management, schedule an isolated meeting about it
    • had them focus on the sprint goal
      • i think it's important for team to work together to achieve one important thing
      • velocity had been low
      • => set sprint goal like "make A enable to B" (define who is A and what is B explicitly)
        • led team to more like "we're creating/committing to good product!"
        • encouraged mob working e.g. mob-programming
        • => the number of in-progress tasks decreased and the number of done tasks increased (burn-down chart became to decrease constantly)

Books

Log: 202401-05

· 2 min read

Job

  • finally i got a new job and am working since Feb!
    • about paas for real-time communication apps/services
      • sdk
      • serverless
    • tech stack
      • webrtc
      • websocket
      • node
      • js/ts
      • gcp
      • redis
  • missions
    • develop de-facto standard paas for real-time communication apps/services
  • my current contributions
    • develop and maintain systems and library
    • improve developer experience
      • both ours and users
  • i'm happy now
    • to contribute to products for developers
    • to work with good project members in good team culture
    • to make use of things i've learned hard until now
      • js/ts
      • web
      • software design/architecture
      • system design/architecture
    • to experience interesting development
      • to develop/maintain real-time and async system is difficult but worth to challenge
      • to develop systems and library for developers needs deep technical knowledge and skills

Others

Music

  • YURAMEKI / DIR EN GREY

Goodbye 2023

· 6 min read

Summary

  • struggled to improve software development and my career as a software engineer
    • engaged in development as a almost tech-lead
    • sought for a new job
  • consequently got higher point of view to think of software development
    • domain
    • project
    • software/system design/architecture
  • finally got a next new job
    • onboarding from Febuary

My 2023

MonthProject
01-03Education Support System for Elementary & Junior High School
04-12Assistant System for Government Cloud Management

Struggled to Move a Project Forward

  • project members had been divided into a tech-lead and others; a project manager and other engineers
    • we wanted to make our team more proactive
      • frequent communication
      • sharing technical knowledge and enhancing not only individual skills but also entire team's skills
    • on the other hand, the tech-lead has passive and defensive personality but pride as a tech-lead
    • consequently, our team had so many clashes over every decision
  • i learned
    • just to insist on correct opinions was not a way to improve software development
    • need to make good atomosphere and giving team members motivation first to move forward the same goal
  • under the circumustance, i guessed changing the human mind and the environment are more challenging
    • i felt this suppressed or indifferent atomosphere is charastaristic of my company, not only of my current project
      • in fact most of the team members of the next project are like that too
    • tended to seek a new environment to work as a software engineer

Sought the Next Job

  • i began to seek for environment where i can experience and involve in more technical work, also a company encourages me to so that
  • but i was rejected over and over again
    • i felt down, there seemed a gap between knowledge i had and experience companies required for me
    • especially i found that i focused on micro area in software development such as how to write clean and efficient code, but more macro perspective was required; system design
    • i began to study system design and platform services
    • many companies require Golang knowledge or experience
  • it's been so long time but finally i got a next job; provide platform such as libraries for developers and infrastructure for services; fortunately which really fits what i hoped from the first motivation for job-change

Importance of Domain Knowledge

  • while i'd attempted to design a system over and over, one day i found that it's so important for software engineers to get involved themselves into domain problem
    • good software/system architecture/design is robust to change
    • but how do we anticipate to direction to which our software/system will change?
    • it's impossible to build software/system flexible to change without domain knowledge
    • this fact intrinsically leads us to think about the product value of the software that we're creating, communicating with not only technical persons but also UI/UX design teams, sales department, stakeholders and end users
  • i began to study DDD from fundamentals by reading Domain-Driven Design: Tackling Complexity in the Heart of Software
    • i've felt no need to learn DDD until i noticed importance of involving domain because i've thought it's just one of design patterns of OOP
    • i think the most important part of DDD is how to model/abstract things we want to implement through the common understanding about a domain; ubiquitous language

Joined a New Profject

  • i left the project of the education support system then joined a new project which develops a system to assist government cloud management from April
    • scrum framework
    • there is no tech-lead position in the team but implicitly i was almost that
      • dedicated to decisions about from what languages, libraries and development tools to use, to coding guidelines and software/system design/architecture
      • proactively participated in meetings, including such as for operators and for UI/UX design team, to collect and make use of domain knowledge for design and implementation
      • document knowledge and decisions to share with team members
      • setup CI/CD
  • i learned a lot of new things from infrastructure and backend to frontend
    • scrum
      • i've experienced scrum development but strictly following the framework under scrum coaches is for the first time
    • GCP
    • Terraform
      • CDKTF (TypeScript)
    • monorepo using Turborepo
    • Node.js
    • Next.js
      • React Server Components
    • Figma
    • ADRs

Advent of Code

  • joined for the first time
  • fun but hard work to solve a problem everyday
  • couldn't solve 5, 6 or so problems
  • given motivation to study algorithms again

2024 Resolutions

  • good luck and have fun!
    • honestly i'm hopeful but also very nervous at the same time
    • don't forget having fun; everything follows that!

Books

Done Reading Newly

Done Reading Again

Reading

Stacked

Music

  • Kimi ni Kaikisen / inabakumori

Log: 202304-05

· 4 min read

Job

  • Scrum

    • joined scrum training
      • i had once but i had forgot many elemental things
  • TypeScript

    • i have really good development experience
    • strong static analysis
      • type errors, suggestions, etc.
    • structual typing
      • flexble to use
    • functional style
      • i wish JS supports more functional features
        • lazy evaluation on functions such as map() and filter()
        • if expression, switch expression
  • GCP

    • Firebase
      • i hadn't touch it although i knew the name
      • seems easier to use for simple web apps than using aws
    • i feel it is simpler than aws
      • i don't know that is beacuse i've used aws or aws is complex
  • GitHub Actions

    • parallelized jobs to shorten elapsed time
  • GraphQL

    • tried tutorials of Apollo
    • can we get better development experience using GraphQL with TS?
      • typing by TS and GraphQL is duplicate
      • i feel TS might be enough for type validation
        • after all we have to runtime-validations for values too
      • at least i feel introducing GraphQL doesn't match the cost for the current system

Others

  • i wanna change my job soon
    • i had no offers still now...
    • i wanna develop softwares more technically difficult
      • bored now
    • recently also interested in infrastructures
      • IaC, system architectures

In Progress

  • Go Programming Language

    • started learning golang because there are many company adopt golang
    • workspace repo: https://github.com/e5pe0n/gpl
    • Chapter 1 - 7
      • done!
    • for me
      • golang is not simple at all as others say so
        • pointers
        • goroutines and channels
      • i've thought that golang was a low-layer language like C/C++ but was made more easier to treat, but that was wrong; it's high-level language than i think so, truly general perpose language
        • standard library looks large and enough to develop web app
      • one of the good candidates in static typed languages for web app
        • prep to dev is easy; batteries included
          • package manager, linter, formatter, etc.
        • ecosystem and support from vendors is sufficient
          • libraries, cdk, sdk, etc
        • performance
        • compiled to executable binary
          • no need something like JVM
        • good compatible to docker containers
      • i hadn't liked golang, and i don't like it now too even my perspective for golang was changed
        • there are too many places side-effects occur
          • hard to track procedures correctly
            • the more i learn golang, the more i wanna use rust
  • Computer Systems: A Programmer's Perspective

    • Chapter 3 - 8
      • done reading!
      • it seams more clearer about low layer than before
        • processor architectures
        • memory systems
          • registers
          • L1-L3 cache
        • exceptions
    • Chapter 9. Virtual Memory
      • very important but also too difficult
      • mechanism of translation from virtual memory to physical memory is too complicated

Push onto the Stack

honestly i don't wanna push these onto the stack but skills to be able to use instantly needed now for recruit.

Stack

Music

  • Kanojo Wa Tabinideru / Sana

Log: 202303

· 2 min read

Others

  • System Design Interview
    • done reading!
    • recently i've watched ByteByteGo's videos
      • systems, architectures and algorithms used internally are insteresting
      • the videos also give some real use cases
    • interested to know how real companies design and devise systems
    • increased ideas of system design

In Progress

Pop from Stack

Push onto Stack

Stack

Music

  • Karakara / kessoku band

Log: 202302

· 4 min read

Job

  • implemented technically difficult features
    • write script to tokenize python code then remove parts of code temporally when migrating the database using postgres_fdw
    • read the public form from the excel file then render as a form on web page
    • using opencv-python to align the preview image of the public form
  • reviewed PRs from team members
    • i committed as both main implementer and main reviewer, but this was bad idea
    • because the workload overflowed my capacity and i myself didn't have the right to determine specification
  • deployed new features to staging environment
    • a lot of bugs found when integrating frontend and backend

Others

  • i couldn't do self-education enough in January and February, my job was too busy for release

    • i'm really tired, on both physically and mentally
  • current my team is not a team, just a black company

    • current tech lead is a client, and other implementers are just labor to deliver any product from code to documentations to him
    • i wanted to share technical knowledge and talk about it more, make effective our development more, and have fun more above all
    • i'm sure that i did my best; i implemented technically difficult parts, helped my team members develop, and that actually committed to the release. but why i have such a sad feeling...
  • determined move me to other project

    • i agreed to that because it didn't seem that i can learn anything more, leverage my skill, and enjoy the development in the current team
    • also i feel stuck, the experience in other project might be need for me to extend my perspective
  • i'm seeking the next job

    • applied for about 15 company, but i haven't have any offers now...
      • almost all of them were dropped at screening process
      • i'm really feeling that i'm inexperienced, unskilled, behind, indifferent, and ignorant...
      • but it was worth to apply for recruitments, i could know current my actual values
    • first of all i haven't been able to find jobs i interested in at all
      • business/services
        • i wanna work in the field such as science and technology
        • recruitments of companies in these fields are really less and require high education and skills
      • techs
        • languages used by almost all web company are Java, PHP, Ruby and Go
        • i can't have interest on them at all...
  • A Philosophy of Software Design

    • done reading!
  • Shell Scripting

In Progress

i'm being stuck and confused about what i should learn or what i wanna learn.
should list up and put priority them.

Pop from Stack

Push onto Stack

Stack

Music

  • Karakara / kessoku band

Log: 202212

· 3 min read

Achievement

  • Implementation and Review

    • managed to both implement for assigned tasks to me and review PRs at the same time!
    • felt like surely this is the ideal form for team development
      • respect the programs we write, got some new things from them and develop us each other
  • Learned infrastructure and services

    • using these below somehow but I understood exactly what these are doing at last
      • AWS copilot
      • serverless
        • serveless-next.js
    • learned details to improve our development environment
      • docker
      • docker compose
  • React

    • got to care about rendering count in these days
      • considering trade off between benefits of declarative (functional) style and performance
    • after all we just treat DOMs somehow
    • react is a great library but not being always the best choice for the project
      • i had been depending on and stick to react
      • need thinking beyond libraries/frameworks
        • like considering programming languages about not only syntax and built-in functions for easiness to write programs but also performance and implementation details
  • Essentials of Programming Languages

    • Chapter 5. Continuation-Passing Interpreter
      • 5.3 An Imperative Interpreter done!
      • 5.4 Exceptions done!
  • A Book of Abstract Algebra

    • Chapter 7. Groups of Permutations done!
  • Jeol on Software

    • started reading due to hearing that an engineer I respect read and have been influenced by this book
      • this book is old a bit so some things said may be token for granted in these day
      • but foundation, the bottom of thinking how to solve the problems on software development is still alive, there are many things I should reap to develop me
    • 1/3 done reading!
  • Computer Systems: A Programmer's Perspective

    • maybe mostly reviewing the basics for programming
      • the phrase programmer's perspective fascinated me
      • there may be some new discoveries
    • Chapter 1 done reading!
      • learned abstraction/concept of computer systems

In Progreess

  • Essentials of Programming Languages

    • Chapter 5. Continuation-Passing Interpreter
  • A Book of Abstract Algebra

    • Chapter 8. Permutations of Finite Sets
  • Jeol on Software

  • Computer Systems: A Programmer's Perspective

Stack

  • todo list

    • practice rust
    • i wanna use macro to implement command line arguments parser just by defining command options
  • Programming in Haskell

  • SQL Antipatterns: Avoiding the Pitfalls of Database Programming

  • Database Internals

  • Computer Organization and Design MIPS Edition: The Hardware/Software Interface (6th ed.)

  • The Architecture of Open Source Applications

Music

  • Lagtraing / INABAKUMORI

Goodbye 2022

· 5 min read

Review

  • implemented over and over

    • got speed up to implement
      • built patterns of how to implement in my mind
    • implemented technically difficult parts
      • made use of writing scheme to implement algorithms that recursion is needed
      • improve implementation considering the time complexity and the number of rendering
    • reviewed PRs at the same time
      • led the team in terms of implementation
  • thought team development

    • reviewed PRs
      • thinking not only how to correct implementation but also how to keep motivation of team members
      • just pointing out the causes and solutions of the problem is not enough to solve the problem
    • writing docs for team members
      • implementation guides
        • patterns/recipes
        • pitfalls/points to care
        • tips
        • about
          • python
          • ts/js
          • react
  • wrote raw sqls

    • data migration
      • optimized sqls written by other teammate
    • query too complex to write in ORM query
      • made implementation more efficient, solved lazy reponse problem
  • considered compatibility

    • fixed bugs that occur on only some browsers or devices
    • browsers
      • Chrome, Edge or Safari?
    • devices
      • iPad or Surfface?
  • wrote a lot of tests

    • struggled writing tests
      • took much more time than implementing the feature
    • writing tests was hard work but it gave me deeper understanding of the using language, framework, library and developing the system
    • keep tests as simple and less as possible
      • maintaining tests is one of costs of development
  • thought about the gap between ideal and real

    • compromise as much as you can
      • obey the KISS principle
      • don't make features more rich than requirements
      • maybe implmenting them would be fun and get clients happy, but otherwise you have to write more tests and maintain the features and implementations work correctly considering compatibility to other features
  • encountered N + 1 problem

    • i had just hear the name, not understood what it is but finally i realized the problem along with experience of my failure
    • swear never cause it again!

Libraries/Frameworks

Frontend

Chakra UI

  • simpler and easier to use than MUI

SWR

  • make data fetching and state managiment easy
  • graduated from fetching in useEffect()

React Hook Form

  • make implementation of forms in React easy
  • good performance
    • suppress re-rendering as less as possible

React Testing Library

  • tools to test react components basically at point of view of UX, not implementation details
  • learned how to use correctly

Tanstack Table (React Table)

  • headless UI
    • does not touch the appearance/design of table component
    • just attaches useful features such as sort and filter
  • learned how to implement tables with search form

Next.js

  • honestly not understanding deeper yet

serverless-next.js

  • make deploying next.js using AWS resources easy
    • automatically build a stack including S3, Lambda@Edge, and CloudFront

Zod

  • TypeScript-first data validation library
  • i wanna use Zod as form validation too but Zod doesn't provide kind of label or alias feature

yup

  • Schema-base form validation library
  • type inference is weaker than Zod
  • providing labeling feature to replace property name with the label in error message
    • more useful for form validation than Zod

Backend

Django

  • monolithic web app framework
  • i don't like monolithic
    • especially ORM query
      • why do i have to write raw sqls then struggle to rewrite them in ORM query?
    • i wanna combine simple and useful tools in my favor

FastAPI

  • light and fast web app framework
  • i prefer this to Django
    • simpler and i can use SQLAlchemy for query
    • but i don't like to use python to implement web app in the first place
  • using FastAPI instead of Django doesn't give me big improvement for development experience
  • i feel like implementing web app is verbose somehow

SQLAlchemy

  • database toolkit for python
  • query API is similar to raw sql

pydantic

  • data validation and serializer using type annotations
  • using type annotations is kinda hucky
    • actually python 3.10 and 3.11 didn't standardize __future__.annotation mainly due to FastAPI and pydantic
    • personally i think it's difficult to use type strictly in python

pandas

  • library to manipulate table data
  • used to process excel files possibly having numerous data
  • i could manage to implement although it was long time since i had used last

Others

Playwright

  • E2E test library
  • writing and maintaining E2E tests are too hard
    • after all i neglected them and they obsoleted

Docker

  • understood detail more

Languages

Rust

  • learned what language it is at last
  • difficult to learn and use
    • ownership rule and borrow checker
      • invisible so hard to track them
      • preventing declarative implementaion

Books

Done Reading

  • The Pragmatic Programmer (20th Anniversary Ed.)
  • The Unix Philosophy (1st Ed.)
    • Tenet1. Small is beautiful
      Tenet2. Make each program do one thing well
      Tenet9. Make every program a filter

    • "Software is never finished. It is only released."

  • Hacking: The Art of Exploitation (2nd Ed.)
  • Fluent Python (2nd Ed.)
  • The Rust Programming Language
  • Debugging Teams
    • HRT
      • Humility
      • Respect
      • Trust
    • Fail fast and iterate

Still Reading

  • Essentials of Programming Languages (3rd Ed.)
  • A Book of Abstract Algebra
  • Joel on Software
  • Computer Systems: A Programmer's Perspective (3rd Ed.)

Log: 202211

· 2 min read

Achievement

  • impl batch process

    • django user defined command
    • boto3
    • pandas
  • Essentials of Programming Languages

    • Chapter 5. Continuation-Passing Interpreter
      • 5.2 Trampolined Interpreter done!
  • A Book of Abstract Algebra

    • Chapter 6. Functions done!
  • Debugging Teams

    • done reading!
    • important core concept: HRT
      • Humility
      • Respect
      • Trust

In Progreess

  • Essentials of Programming Languages

    • Chapter 5. Continuation-Passing Interpreter
      • 5.3 An Imperative Interpreter
  • A Book of Abstract Algebra

    • Chapter 7. Groups of Permutations
  • Jeol on Software

Stack

  • todo list

    • practice rust
    • i wanna use macro to implement command line arguments parser just by defining command options
  • Programming in Haskell

  • SQL Antipatterns: Avoiding the Pitfalls of Database Programming

  • Database Internals

  • Computer Organization and Design MIPS Edition: The Hardware/Software Interface (6th ed.)

  • The Architecture of Open Source Applications

Something

  • tooooooo busy this month
    • woke up at 6:00 then worked from 7:00 to 23:00
    • tight schedule made me increase the speed and concentration to implement
    • but couldn't progress my study and programming other than work for job
    • i'm already tired and hard to keep motivation
      • only hope is my PM; he is a really good PM, manages to reschedule as much as possible and encourages me
  • i'm wondering it's good for me to spend such time in my life on working at current company

Music

  • Capsule / Sana

Log: 202210

· One min read

Achievement

In Progreess

  • todo list

    • practice rust
    • i wanna use macro to implement command line arguments parser just by defining command options
  • Essentials of Programming Languages

    • Chapter 5. Continuation-Passing Interpreter
  • A Book of Abstract Algebra

    • Chapter 6. Functions
  • Debugging Teams

    • Introduction - Every Boat Needs a Captain

Stack

  • Programming in Haskell
  • SQL Antipatterns: Avoiding the Pitfalls of Database Programming
  • Database Internals
  • Computer Organization and Design MIPS Edition: The Hardware/Software Interface (6th ed.)
  • The Architecture of Open Source Applications

Music

  • Simple and Clean (Ray Of Hope Mix) / Utada Hikaru