HN user

michalc

807 karma

https://charemza.name/

Posts90
Comments92
View on HN
source-code-emoji.github.io 3mo ago

Source code emoji proposal [pdf]

michalc
4pts1
wonkhe.com 4mo ago

Playful leadership development in mid-career academic mentoring and coaching

michalc
1pts0
github.com 6mo ago

Show HN: stream-unzip – Python function to unZIP on the fly

michalc
8pts2
charemza.name 6mo ago

I don't use the term technical debt and neither should you

michalc
4pts2
charemza.name 9mo ago

It's not done if...

michalc
4pts0
digitaltrade.blog.gov.uk 9mo ago

Building better data platforms: Our open source approach to data infrastructure

michalc
1pts0
charemza.name 9mo ago

It's not a hack to satisfy known requirements

michalc
52pts58
charemza.name 9mo ago

Ordering work: a skill and culture gap

michalc
2pts0
github.com 11mo ago

Python backoff is now archived

michalc
1pts0
www.unicode.org 11mo ago

Mirror Ball Emoji Proposal (2018) [pdf]

michalc
53pts54
delivervaluedaily.dev 1y ago

"Deliver value daily" – A one-principle manifesto for agile software development

michalc
3pts5
delivervaluedaily.dev 1y ago

"Deliver value daily" – A one-principle manifesto for agile software development

michalc
2pts0
joss.theoj.org 1y ago

OpenTTDLab: A Python framework for reproducible experiments using OpenTTD

michalc
1pts0
github.com 1y ago

Show HN: pgarrow – A SQLAlchemy PostgreSQL dialect for ADBC

michalc
3pts0
en.wikipedia.org 1y ago

Fat Thursday

michalc
1pts0
play.elevatorsaga.com 1y ago

Elevator Saga

michalc
3pts0
github.com 2y ago

Show HN: pg-sync-roles – More easily manage PostgreSQL permissions from Python

michalc
1pts0
github.com 2y ago

Show HN: stream-unzip – now with an async interface

michalc
3pts0
github.com 2y ago

Show HN: stream-zip – Now with async support

michalc
2pts0
w3techs.com 2y ago

Historical trends in the usage statistics of Python version 3 for websites

michalc
1pts2
github.com 2y ago

Show HN: pg-bulk-ingest – Now with multi-table support

michalc
18pts6
github.com 2y ago

Show HN: OpenTTDLab – Run reproducible experiments using OpenTTD

michalc
11pts0
charemza.name 2y ago

Rules when making data dashboards

michalc
1pts0
github.com 2y ago

Show HN: sqlite-memory-vfs - Open a SQLite db in Python without hitting disk

michalc
17pts14
github.com 2y ago

Show HN: to-file-like-obj - the inverse of Python's two-argument iter function

michalc
2pts0
gist.github.com 2y ago

Show HN: Parallel bulk delete objects in S3 using Python

michalc
1pts0
theconversation.com 2y ago

Jellyfish: Our complex relationship with the oceans’ anti-heroes

michalc
2pts0
github.com 3y ago

Show HN: pg-bulk-ingest – Bulk ingest into PostgreSQL with high-watermarking

michalc
2pts0
twitter.com 3y ago

Portugal has a divorce rate of 94%

michalc
24pts25
github.com 3y ago

Show HN: pg-force-execute – Run a PostgreSQL query even if blocked

michalc
1pts0

the rest will soon follow

If you’re looking for requests ;-), I would love an ECS (and specifically Fargate) emulator that actually ran Docker containers locally as though they were in ECS

So my definition of big data was data so big it cannot be processed on a single machine in a reasonable amount of time.

I guess they’re using a different definition?

Short answer is no, not as far as I am aware/can reason about it

In more detail: so by my understanding there are two techniques in making zip bombs…

Firstly nested ZIPs that leverage the fact that some unZIP programs recursively extract member files. stream-unzip doesn’t do this (Although you could probably use stream-unzip as a component in a vulnerable recursive ZIP parser if you really wanted to… but that I would argue is not the responsibility of stream-unzip)

The second technique is overlapping member files, but this depends on them overlapping as defined by the central directory at the end of the ZIP, which stream-unzip does not use

But if you are accepting files from an untrusted source, then you should validate the size of the uncompressed data as you unZIP (which you can do as you validate along with any other properties of the data)

without regard for the maintenance burden 1, 2, 5, 10 years down the road.

To me software craftsmanship isn't just about the code, it's about engineering use of time.

In general shouldn't knowingly make choices that would result in pain in the future, but if you're increasing the chance of the project not making it to the future, then is that really the better option? Finding out enough information to make the judgement call between long term/far future pain and short term benefits is all part of the craftsmanship.

I don't blame agile. But I do kind of blame Agile™

(Loving the phrasing here! I think I'm right on board, especially if we're talking Scrum/Scum-ish)

why not remind people of the purpose?

To answer this, I suspect that trying to change what certain words/phrases mean to people en-masse is extremely difficult, to the point of impossibility in most cases. However, we each have the power to be clearer in the words we use so they are understood by the people we're communicating with.

engineering quality matters

But also, this to me suggests that there is some sort of absolute definition of quality, but it's much more nuanced. Nothing is inherently "bad quality", but instead has certain consequences, which may or may not happen or may or may not be acceptable in certain circumstances, and you might not even know what these are until the future. This I think is the point I'm trying to make - there is no absolute definition of engineering quality, and I suspect the term "technical debt" all too often suggests there is.

Have to admit the lazy thing threw me, but I can see how the “doing less” I’m arguing for could be taken that way. The “less” is not about avoiding handling edge cases that are possible now, but about avoiding putting in layers of code to handle cases possible only in some future versions of the code (with some limited exceptions that I mention at the bottom of the post)

In fact, it’s crossing my mind that people might not want to be accused of being lazy, and that is a motivation to over-engineer solutions.

I was actually thinking this is all from the developer point of view (or at the very least mine: a developer). I try to deliver some value every working day, and I have to say I pretty much love it. This principle really pushes me to make sure I understand the problems and engineer solutions to them appropriately. And from feedback I get, I am, apparently, very productive doing this. And I do encourage others to work this way (as I was myself encouraged), but I do emphasise the point made repeatedly in the manifesto: the increments can _really_ be extremely small. And to also emphasise another point in the manifesto here - it's not a concern if the aim isn't fulfilled every day. If most developers currently aim for value every 2 weeks say, and that's what they're used to, then of course every day won't always happen, certainly in the beginning of working this way. Or yes, there may be unexpected things along the way. And this is all completely fine.

(This last point was a late addition to the manifesto: but I _think_ made before your comment)

Can you give a bit more detail on the destructive aspects though? If you mean if an organisation follows this, then it ends up as a stick to beat developers with if they don't deliver value every day? I guess my counter to that is, if management is toxic, they will always find a stick to beat developers with, no matter what.

What the manifesto does, or at least tries to do, is encourage developers to think about how larger pieces of work are tackled - so they end up really understanding what the problems are, and so engineer solutions to them appropriately. Wherever possible getting feedback, and if possible on a cadence of at least daily, to me seems such a good way of doing this - but do you have a better suggestion?

Edit: I see https://github.com/rayfrankenstein/AITOW and have started to give it a read… and… wow. I certainly understand where you’re coming from, and I would hate to see “Deliver value daily” make all these situations worse.

I think I’ve been really lucky - only maybe experienced light versions of the worlds described, and in the past few years have worked in a very supportive environment and had a lot of autonomy. In this environment I/my team decide on a lot, including ways of working like how to tackle bigger pieces of work. And in such an environment, “Deliver value daily” I think can really work, and essentially has.

But I think I am sticking with my point - I suspect toxic management will find any excuse, and the three words “Deliver value daily”, will do little to change that.

Although - I am tempted to make it clearer up front that autonomy and a supportive environment (and maybe other things?) are crucial, to try to at least limit how it could be “misused”

For a while now some colleagues and I have been thinking about how to improve ways of working, and specifically around the limitations of Agile - especially how it's practiced. As has been suggested by others before us, Agile is all too often a cargo cult: surface level features - often ceremonies taken from Scrum - are prioritised over delivery and getting feedback. Our solution to this is a simplified manifesto with exactly one principle: "Deliver value daily", which we're hoping will reshape thinking, at least a little bit.

Full disclosure: I posted an earlier version here about a month ago, but have since refined it a bit, so hopefully it's appropriate to post it again.

If you use this, I owe you nothing.

Sure the legalese states I owe nothing, but if I’ve shared the code, written some documentation, and encouraged others to use it as I have on a few projects…

… I feel as though I do owe something. I feel like I’ve made a sort of social contract to provide a bit of support on what I’ve, er, “supplied”.

Not really sure why.

Ah the name - you're not the first to mention it! Do you (or anyone lurking...) have any suggestions as to what it might better be called?

On what it does/why it exists, we've kept the README quite light to avoid duplication, with the main bits of the docs at https://pg-bulk-ingest.docs.trade.gov.uk/

But to try to answer the question here:

A set of insert statements - there are lots of cases where this would be fine, so pg-bulk-ingest (/its future name ;-) would be unnecessary, and so you might as well use insert statements.

But there are lots of things that pg-bulk-ingest does that a set of insert statements don't:

- It uses COPY, which in many cases is (much?) faster than INSERT

- It creates the table if it doesn't exist

- It migrates an existing table to match the definition if it does exist (pg-bulk-ingest can't handle all possible changes, but enough to make it useful to us)

- And it migrates without holding a long ACCESS EXCLUSIVE lock on the table

- It offers a fairly structured way to do high-watermarked ingest - it stores and retrieves a high watermark so you can fetch the data "since" some previous ingest, with the exact meaning of "since" custom to each source you're ingesting from.

- And it (now) combines COPYs with multiple tables, without loading all incoming data into memory at once, and keeping the ingest within a single transaction, so other clients see all the data, or none of it.

(The high watermarking I think is maybe the least clear of these in the docs, while also one of the most important things. Would really like an example that is somehow standalone that also makes it clear what it does...)

OpenTTD 2 years ago

I thought it was time I got off my... and starting making an AI (https://github.com/michalc/SupplyChainLabAI - but it does nothing but log a debug message repeatedly at this point, I feel I have a long journey...)

But it makes me realise there is another use case for OpenTTDLab that I don't think I considered: regression tests for OpenTTD AIs?

Edit: And it has been mentioned to me separately that maybe it could be used as part of regression tests of OpenTTD itself https://github.com/OpenTTD/OpenTTD/discussions/11863#discuss...

OpenTTD 2 years ago

Short answer: yes, exactly

Long answer: trying to make it much easier to do simulation-based research using OpenTTD, and for any results found to be as reproducible as possible. There have been a few papers/dissertations that use OpenTTD, but it's tricky to do exactly what the authors did, or even in a few cases I suspect it was hard for them to repeat their own experiments or extract results from them. OpenTTDLab seeks to make these easier.

And, such research seems to often (/always?) use AIs, so that's the focus.

I also would like to be able to train an AI in some automated(/formal?) way, and maybe use OpenTTD to investigate something a bit more... supply-chain-y, but that's a work in progress (I've not even written an AI yet!)

But also a bit of a less formal "just run an AI/some AIs over some seeds and see" is also very much a use case. Am trying to strike that balance between something quite... exploratory, but still reproducible.