HNHacker News
TopNewBestAskShowJobs

matthewadams

2 karma · joined August 27, 2014

submissionscomments
matthewadams··on Cancel ChatGPT AI boycott surges after OpenAI pentagon military deal
Nothing. And there’s nothing wrong with Anthropic sticking to their principles.

What is wrong, however, is that the retaliatory move to label Anthropic as a supply chain risk is not ok. Further, the timing of it all stinks.

Everyone smells a rat, not just me. Ever heard of “ask the audience”? The crowd is right a HUGE majority of the time.

matthewadams··on Ask HN: What are some unpopular technologies you wish people knew more about?
Aspect-oriented programming (AOP) using Aspectj: https://en.m.wikipedia.org/wiki/AspectJ https://eclipse.dev/aspectj/
matthewadams··on Ask HN: Solo-preneurs, how do you DevOps to save time?
When it comes to managing your git repo's support for releases, you might like our alternative to git-flow, which we jokingly call "git-ebb":

https://gitlab.com/northscaler-public/release-management

It's a fairly low-tech set of shell scripts that implement a release management strategy that is based on one release branch per minor version. All it does is manage version strings, release commits, release branches & release tags. You can hook your CI/CD into it whenever you're ready for that.

We've used it to great effect on many client projects.

The workflow is pretty simple for a new release (assume a Node.js project in this example):

0. Your main ("main", "master", "trunk", "dev") branch is where all new features go. Assume our next version is going to be "2.3.0", so the version in the main branch starts out at "2.3.0-pre.0". If you need dev prereleases, issue them any time you'd like with `./release nodejs pre`. This will bump the version to "2.3.0-pre.1", "2.3.0-pre.2", etc each time.

1. Ceremony: decide that you're feature complete for your next release.

2. Use the release script to cut a release candidate ("rc"), say, with `./release nodejs rc`. You'll end up with a new branch of the form vmajor.minor, so v2.3 in this example, and the version in that branch will be 2.3.0-rc.0. Appropriate git tags will also be created. The version in the main branch is bumped to 2.4.0-pre.0, for the next minor release.

3. Test your release candidate, releasing more release candidates to your heart's content with `./release nodejs rc`. Meanwhile, developers can start working on new features off of the main branch.

4. Ceremony: decide you're bug-free enough to perform a "generally available" (GA) release.

5. Perform a GA release with `./release nodejs ga`. This will tag a release commit as "2.3.0", push the tag, then bump the version in the release branch (v2.3) to "2.3.1-rc.0".

6. If you find a bug in production, fix it in the release branch, issue as many RCs as you need until it's fixed, then finally release your patch with `./release nodejs patch`. You'll get a release commit & tag "2.3.1", and the version will be bumped to "2.3.2-rc.0". Lastly, cherry pick, (often, literally "git cherry-pick -x <sha>") the change(s) back to the main branch if the bug still applies there; 99% of the time, it will.

7. Repeat ad nauseum.

This allows you at least manage your versions, branches & git tags in a sane & portable way that's low-tech enough for anyone to work on and understand. It's also got plenty of idiot-proofing in it so that it's hard to shoot yourself in the foot.

Further, it's very customizable. After years of use across lots & lots of projects, we recommend using "dev" as your main branch name and as your main branch's prerelease suffix, and using "qa" as your release branch's prerelease suffix. The defaults are "pre" & "rc", and too many folks are using these scripts nowadays for us to change the defaults.

matthewadams··on Ask HN: Essential skill needed to be a programmer?
Insatiable curiosity.
matthewadams··on Ask HN: Essential skill needed to be a programmer?
Insatiable curiosity. Period.