Notes

Tom Oliver's profile picture
Tom Oliver

Some lesser known nice things about Japan 🗾

  • Ambulances are loud, but not too loud.
  • When Police cars do unexpected things like making a U-turn suddenly, they politely inform everyone nearby with a megaphone.
  • When large vehicles make a turn near a pedestrian they play a vocal warning "Watch out! I'm about to turn left!"
  • Dog owners carry a bottle of water to wash away any pee the dog might do on a walk.
  • There are lots of outside gyms.
  • There are lots of summer festivals which aren't exclusively an excuse to get drunk.
  • Its not okay to be ugly.
    • You better look your best if you're thinking about leaving your home.
    • Foreigners usually get the benefit of the doubt.
  • Lots of stuff made in Japan for Japanese people only. (Films, cars, appliances...)
  • There is one and only one right way to do everything.
    • If you order something in a cafe or a restaurant, chances are they'll tell you the right way to consume it.
    • e.g. You order an iced coffee creamy thing from a local cafe.
      1. First taste the top and bottom layers independently before mixing them both together with the straw...
  • There is a lot of wildlife everywhere.
    • Probably more wildlife in Tokyo than in any National park in the UK.
  • There are dry ice machines in some supermarkets.
  • Some cars have a horn? that says in a polite voice "Please watch out, a car is passing by!" to unsuspecting pedestrians that haven't noticed.
  • Relaxing background music automatically starts playing the instant your skin comes into contact with the toilet seat.
  • Safety first
    • At petrol stations there is an "anti static electricity pad" for you to touch before filling up your car.
  • The sky is big. Power cables on a hot sunny dayPower cables on a hot sunny day
Tom Oliver's profile picture
Tom Oliver

Its been a while since I did any data modelling in typescript.

TS
// An example of a user management system
// Define user status type, just an enum
type UserAccountStatus = "ACTIVE" | "DORMANT" | "DELETED"
// Define a base type
type BaseUser = { name: string; status: UserAccountStatus }
// Create concrete types using the base type
type ActiveUser = BaseUser & { status: "ACTIVE" }
type DormantUser = BaseUser & { status: "DORMANT" }
type DeletedUser = BaseUser & { status: "DELETED" }
type User = ActiveUser | DormantUser | DeletedUser
// Create the type of function we want to implement
// Make return type a promise because we talk to the DB
type DeleteUser = (user: ActiveUser | DormantUser) => Promise<DeletedUser>
// do a temporary implementation of the function
const deleteUser: DeleteUser = (user) => {
const deletedUser: DeletedUser = { ...user, status: "DELETED" }
// define a helper that we haven't got yet
return writeUserToDB(deletedUser)
}
// declare the type of the helper like so:
declare function writeUserToDB<A extends User>(user: A): Promise<A>