Skip to content

Instantly share code, notes, and snippets.

@scarf005
Last active December 11, 2023 07:30
Show Gist options
  • Save scarf005/74153ad3261f0905395ffaf2d1158012 to your computer and use it in GitHub Desktop.
Save scarf005/74153ad3261f0905395ffaf2d1158012 to your computer and use it in GitHub Desktop.
statistics

개선 지표

Vite

jiphyeonjeon-42/frontend#358

테스트 환경

OS : Ubuntu 22.04
CPU: Ryzen 4700u (8 threads)
Memory: 16GB

JavaScript -> TypeScript 이전

Note 이름 변경을 고려하지 않아 jsx -> tsx 이름 변경이어도 새 파일 추가로 집계되었습니다.

연관 커밋

$ git log --author='scarf005' --oneline -- 'src/**/*.ts' 'src/**/*.tsx'
466538f fix: 메인 페이지 이미지가 지나치게 큼 (#436)
23e1189 refactor: `proptypes` 패키지 제거 및 타입스크립트로 이전 (#430)
2f6543a fix: 도서검색시 특수문자 인코딩 (#431)
14b0d49 (origin/412-태그-상세-페이지) refactor: `prop types`를 타입스크립트로 이전 (#388)

전체 .ts.tsx 줄 수 변경

git log --author='scarf005' --numstat --pretty='%H'  -- 'src/**/*.ts' 'src/**/*.tsx' | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}' 
# +7146, -308

awk script 출: https://stackoverflow.com/a/2528129/13503626

image

페이지 조회수 52,800회, 다운로드 21,000건, 긍정적 평가 98%

기준점 측정 기간
begin 2022-11-25 2023-03-01
end 2023-03-01 2023-06-05
days 96 96

최근 배포 목록은 다음 명령어로 모았습니다:

git tag --list | grep 'cbn-experimental' | cut -d '-' --output-delimiter '-' -f 3-5 > tags.txt

# 또는
git tag --list | rg 'cbn-experimental' | choose -f '-' -o '-' 2:4 > tags.txt

productivity.hs 으로 측정한 커밋 증가량

Commits: 145 -> 392 (170% 개선)

release-cycle.hs 으로 측정한 배포 주기 증가 속도

2022-11-25/2023-03-01 : 60.0 releases
2023-03-01/2023-06-05 : 352.0 releases
number of releases increased by 487%
speed of release cycle improved by 83%

Deno v1.33.0 flat config 적용에 대한 개선 지표

deno의 설정 파일을 더 단순하게 쓸 수 있는 flat config를 구현해, 전체 deno 설정 파일의 31%에 해당하는 600개의 설정 파일을 단순하게 쓸 수 있도록 개선했습니다.

검색 기준: 2023-08-13

files

전체 기존 files 필드 포함
1.8k 1.1k

files에 대한 flat config 적용 비율: 38%

1.8k - 1.1k = 0.7k, 0.7 / 1.8 * 100 = 38

options

전체 기존 files 필드 포함
1.6k 1.1k

options에 대한 flat config 적용 비율: 31%

1.6k - 1.1k = 0.5k, 0.5 / 1.6 * 100 = 31

#!/usr/env/bin stack
-- stack --resolver lts-20.23 script
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE QuasiQuotes #-}
import Data.Time
import "text" Data.Text (Text, pack, unpack)
import PyF
import Turtle hiding (decimal)
targetBranch :: Text
targetBranch = "main"
targetDate :: Day
targetDate = fromGregorian 2023 3 1
main :: IO ()
main = do
(start, between, today) <- dateRanges
let commits = uncurry (commitsBetween targetBranch)
[begin, after] <- mapM commits [(start, between), (between, today)]
let growth = percentageInc begin after
putStrLn [fmt|Commits: {begin} -> {after} ({growth}% improvement)|]
percentageInc :: Int -> Int -> Int
percentageInc before after = (after - before) * 100 `div` before
dateRanges :: IO (Day, Day, Day)
dateRanges = do
today <- utctDay <$> getCurrentTime
let diff = diffDays targetDate today
start = addDays diff targetDate
pure (start, targetDate, today)
commitsBetween :: Text -> Day -> Day -> IO Int
commitsBetween branch since before = do
result <- strict $ inproc "git" ["rev-list", "--count", branch, "--since", s, "--before", b] empty
pure (toInt result)
where
[s, b] = map showText [since, before]
showText = pack . show
toInt = read . unpack
import outdent from "$outdent/mod.ts"
const targetBranch = "main"
const targetDate = new Date("2023-03-01")
const iso = (date: Date) => date.toISOString().split("T")[0]
type Range = readonly [Date, Date]
type Option = { range: Range; commits: number }
const display = ({ range: [begin, end], commits }: Option) =>
`${iso(begin)}/${iso(end)}: ${commits}`
const percentageInc = (x: number, y: number) => Math.floor((y - x) * 100 / x)
const dateRanges = (between: Date) => {
const today = new Date()
const diff = today.getTime() - between.getTime()
const start = new Date(between.getTime() - diff)
return { start, between, today }
}
const decoder = new TextDecoder()
const commitsBetween = (branch: string) => ([begin, end]: Range) =>
new Deno.Command("git", {
args: ["rev-list", "--count", branch, "--since", iso(begin), "--before", iso(end)],
})
.output()
.then(({ stdout }) => +decoder.decode(stdout))
if (import.meta.main) {
const { start, between, today } = dateRanges(targetDate)
const commits = commitsBetween(targetBranch)
const [begin, after] = await Promise.all(
([[start, between], [between, today]] as const).map(commits),
)
const growth = percentageInc(begin, after)
console.log(outdent`
${display({ range: [start, between], commits: begin })}
${display({ range: [between, today], commits: after })}
${growth}% improvement
`)
}
#!/usr/env/bin stack
-- stack --resolver lts-20.23 script
{-# LANGUAGE OverloadedStrings #-}
import Data.Time
parseDate :: String -> Day
parseDate = parseTimeOrError True defaultTimeLocale "%Y-%m-%d"
readDates :: String -> IO [Day]
readDates file = do
contents <- readFile file
return $ map parseDate $ lines contents
countDatesInRange :: Day -> Day -> [Day] -> Int
countDatesInRange start end = length . filter (\d -> d >= start && d <= end)
percentageDifference :: Float -> Float -> Float
percentageDifference x y = ( (y - x) / x) * 100
toFloat :: (Integral a, Num a) => a -> Float
toFloat x = fromIntegral x :: Float
main :: IO ()
main = do
dates <- readDates "tags.txt"
let [start, between, end] = parseDate <$> ["2022-11-25", "2023-03-01", "2023-06-05"]
firstPeriod = toFloat $ countDatesInRange start between dates
secondPeriod = toFloat $ countDatesInRange between end dates
old = toFloat (between `diffDays` start) / firstPeriod
new = toFloat (end `diffDays` between) / secondPeriod
releases = round $ percentageDifference firstPeriod secondPeriod
speedup = round $ (old - new) / old * 100
putStrLn $ concat [show start,"/", show between," : ", show firstPeriod, " releases"]
putStrLn $ concat [show between,"/", show end," : ", show secondPeriod, " releases"]
putStrLn $ unwords ["number of releases increased by", show releases <> "%"]
putStrLn $ unwords ["speed of release cycle improved by", show speedup <> "%"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment