git-of-theseus
timbre
git-of-theseus | timbre | |
---|---|---|
13 | 5 | |
2,354 | 1,432 | |
- | 0.1% | |
4.3 | 7.6 | |
5 months ago | 9 days ago | |
Python | Clojure | |
Apache License 2.0 | Eclipse Public License 1.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
git-of-theseus
-
I Parsed Git Statistics
https://github.com/erikbern/git-of-theseus
- The half-life of code and the ship of Theseus
-
Show HN: Visualize the Entropy of a Codebase with a 3D Force-Directed Graph
A tangentially related tool you can use to look at a repo over time is Git of Theseus[1]. It shows things like "what percentage of the code in this repo survives 6 months.
[1]https://erikbern.com/2016/12/05/the-half-life-of-code.html
-
The Road to 128 bit Linux
There're some more in the presentation article: https://erikbern.com/2016/12/05/the-half-life-of-code.html#:...
A kernel line has half-life 6.6 years.
-
How to look at familiar codebase with “fresh” eyes again
Look at the codebase with Git of Theseus or Codescene
-
Rich Hickey – open-source is Not About You
I guess one good example (that was mentioned just yesterday here on HN) would be Flask vs FastAPI: https://news.ycombinator.com/item?id=31953470 - "There are no open issues or pull requests on Flask "
Quick count finds that FastAPI has 48422 lines of code, while Flask has 9995. Flask just achieved "Zero standing issues/PRs" while FastAPI has 1.1K open issues and ~500 open PRs.
Large surface area/API quickly leads to be overwhelmed when you're trying to maintain it. Adding new features/fixing existing ones becomes harder as well.
Best bet to make sure something is maintainable over time is to add as little as possible to it, and if you really have to, make sure you're also removing something at the same time.
Otherwise you need a massive team just to be able to "survive" and not making things rot.
There is this blogpost as well about the "half-life of code": https://erikbern.com/2016/12/05/the-half-life-of-code.html
Someone run that tool on the Clojure codebase as well, and it really shows how well the Clojure codebase has been written, as most code that was initially written is still there and does what it needs, without having to be rewritten.
- Show HN: Git Timeline Generator – Visualize contributions to any Git project
-
Do you think it's possible to automatically detect Technical Debt from the source code?
Some parts of technical debt, you can find with https://github.com/erikbern/git-of-theseus or https://codescene.com/
- Git-of-Theseus – Analyze how a Git repo grows over time
timbre
-
Tracing: Structured Logging, but better in every way
There are logging libraries that include syntactically scoped timers, such as mulog (https://github.com/BrunoBonacci/mulog). While a great library, we preferred timbre (https://github.com/taoensso/timbre) and rolled our own logging timer macro that interoperates with it. More convenient to have such niceties in a Lisp of course.
-
A History of Clojure (2020) [pdf]
Mentioning μ/log and no mention of timbre (https://github.com/taoensso/timbre), that is an odd omission. Malli is a great mention, but there ought to be a mention of clojure.spec (https://github.com/clojure/spec.alpha) which has much more mindshare.
-
Rich Hickey – open-source is Not About You
If you're not familiar with lisps in general, it might be hard to grok the differences between lisp-macros (as used in Clojure) and "normal" macros you see in other languages.
But, if you are familiar already, and just wanna see examples of neat macros that makes the API nicer than what a function could provide, here are a few:
- https://github.com/clojure/core.async/blob/master/examples/w...
- https://github.com/weavejester/compojure
- https://github.com/ptaoussanis/timbre
- https://github.com/krisajenkins/yesql
-
Build and run Clojure projects. CLI, tools.deps and deps.edn guide
When clj is invoked, two libraries will be available in our code: timbre logging library which artifacts taken from Maven, and test-runner, taken from GitHub.
-
Tour of our 250k line Clojure codebase
No, I don't think they were hyped at any point.
They are used in certain libraries like https://github.com/ptaoussanis/timbre but for things that are simply not possible without macros, for example (timbre/spy (+ 1 1)) will actually print both the expression and the result:
DEBUG [ss.experimental.scratch:1] - (+ 1 1) => 2
Perhaps if the macros are "simple" they can be unpacked relatively easily. I do understand how mentally challenging that can be for somebody who's just starting with Clojure. I've been using Clojure for ~8 years and only just recently became more comfortable with macros after I made a conscious effort in that direction. I'm still far from an "expert" in them.
What are some alternatives?
Gource - software version control visualization
mulog - μ/log is a micro-logging library that logs events and data, not words!
pre-commit - A framework for managing and maintaining multi-language pre-commit hooks.
integrant - Micro-framework for data-driven architecture
compojure - A concise routing library for Ring/Clojure
clj-new - Generate new projects based on clj, Boot, or Leiningen Templates!
pre-commit-hooks - Some out-of-the-box hooks for pre-commit
rlwrap - A readline wrapper
ts-macros - A typescript transformer / plugin that allows you to write macros for typescript!
clip - Light structure and support for dependency injection
yesql - A Clojure library for using SQL.
test-runner - A test runner for clojure.test