このメモは、私(@ymmt2005)が長年にわたってソフトウェアプロダクト開発に関わってきて 2022年現在こうしたほうが良いと考えているベストプラクティスです。
科学的な分析等に基づくわけではない経験則であるため、今後も随時見直すことがありますし、 ここに書いてあることが常に正しいわけでもあらゆるソフトウェア開発に適するわけでもありません。
しかしながら、実務経験が豊富で、モダンな技術スタックに明るいエンジニアの経験則は一定の 役に立つのではないかと考えて記します。
cask_args appdir: "~/Applications" | |
tap "ktr0731/evans" | |
tap "homebrew/cask-fonts" | |
brew "awscli" | |
brew "evans" | |
brew "ghq" | |
brew "peco" | |
brew "vim" |
primary = #213547 | |
secondary = # | |
background = #f9f9f9 |
font: | |
normal: | |
family: monospace | |
size: 12.0 | |
window: | |
opacity: 0.8 | |
padding: | |
x: 16 | |
y: 16 |
curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json | jq '.[].Labels."com.docker.compose.project.config_files"' | uniq |
import "reflect-metadata" | |
import { container, inject, injectable } from "tsyringe" | |
@injectable() | |
class A { | |
constructor() { | |
console.log("class A instantiated!") | |
} | |
} |
type Currying<F extends (...args: any[]) => any> = F extends (...args: infer Params) => infer Returned | |
? Params extends [infer H, ...infer R] | |
? (h: H) => Currying<(...rests: R) => Returned> | |
: Params extends [infer L] | |
? (l: L) => Returned | |
: Returned | |
: never |
type RecursiveReadonly<T> = { | |
readonly [K in keyof T]: RecursiveReadonly<T[K]> | |
} |
<?php | |
echo urldecode("%E2%80%AE"); |
/9j/4AAQSkZJRgABAQAASABIAAD/4QFQRXhpZgAATU0AKgAAAAgABQEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAAEyAAIAAAAUAAAAWodpAAQAAAABAAAAbgAAAAAAAABIAAAAAQAAAEgAAAABMjAyMDowOToyMiAxMzozOToyOQAADZAAAAcAAAAEMDIyMZADAAIAAAAUAAABEJAEAAIAAAAUAAABJJARAAIAAAAHAAABOJASAAIAAAAHAAABQJEBAAcAAAAEAQIDAJKRAAIAAAAENDc5AJKSAAIAAAAENDc5AKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKACAAQAAAABAAADd6ADAAQAAAABAAADdqQGAAMAAAABAAAAAAAAAAAyMDIwOjA5OjIyIDEzOjM5OjI5ADIwMjA6MDk6MjIgMTM6Mzk6MjkAKzA5OjAwAAArMDk6MDAAAP/AABEIA3YDdwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 |