Mark Needham
markhneedham.com · Personal blog · on HN since 2009
Mark Needham, a software developer, writes about programming, data tools such as Neo4j, ClickHouse and Wikidata, and lessons from his work.
What HN saysHN commenters link it as a reference for microtypes, querying Wikidata, ClickHouse column summing, and a UTF-8 byte order mark bug.
26HN people shared it
11linked it in comments
23stories submitted
37story points
3 years agolast shared
2009people per year2026
Most-shared posts
- 1Oo micro types2 people · first shared 2019
- 2Newbie guide querying wikidata2 people · first shared 2021
- 3Domain driven design anti corruption layer2 people · first shared 2015
- 4Think a little, code a little...1 people · 5 points · first shared 2009 · 1 comments on HN
- 5Neo4j: Graphing the ThoughtWorks Technology Radar1 people · 4 points · first shared 2016 · discussion on HN
- 6Tcpdump: Learning how to read UDP packets1 people · 2 points · first shared 2012 · discussion on HN
- 7A new year’s idea: Share what you learn1 people · 2 points · first shared 2013 · discussion on HN
- 8Vim: Copying to and retrieving from the clipboard1 people · 2 points · first shared 2011 · 1 comments on HN
- 9Pair Programming: The disadvantages of 100% pairing1 people · 2 points · first shared 2011 · discussion on HN
- 10Python: Creating a skewed random discrete distribution1 people · 2 points · first shared 2015 · discussion on HN
- 11Gamification applied to software1 people · 2 points · first shared 2012 · discussion on HN
- 12The Curse Of Knowledge1 people · 2 points · first shared 2012 · discussion on HN
- 13PostgreSQL: ERROR: column does not exist1 people · 1 points · first shared 2014 · discussion on HN
- 14Parsing an RSS feed using Clojure1 people · 1 points · first shared 2009 · discussion on HN
- 15Ferengi Programmer and the Dreyfus Model1 people · 1 points · first shared 2009 · discussion on HN
What HN people wrote when they linked it
OJFord · 2021-08-18
Well, it's worth noting that it's not intending to be specifically for publications, it's not like Google Scholar or ORCID for example.
The reason it's interesting / useful for things like 'knowledge panel' is perhaps clearer if you look at a more complete entry, such as for 'apple': https://www.wikidata.org/wiki/Q89 and something on using the SPARQL API, such as https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial or https://www.markhneedham.com/blog/2020/01/29/newbie-guide-querying-wik…
As I say, I haven't actually got around to using it at all myself, but that's why I hold it in higher regard than 'not great'. :)
richraposa · 2023-11-15
ClickHouse just reads the values from the one column being summed: https://www.markhneedham.com/blog/2023/11/15/clickhouse-summing-column…
foobarian · 2021-11-19
Maybe there is a dollar sign or backslash or something in the title/description. Or a rogue UTF8 byte order mark [1] throwing off some comparison :-)
[1] https://www.markhneedham.com/blog/2012/09/03/a-rogue-357273277-utf-8-b…
kaba0 · 2021-05-31
What about running a freely query-able database https://www.markhneedham.com/blog/2020/01/29/newbie-guide-querying-wik…
Or hosting all the images? Or paying developers, devops, managers? Like sure, some middle manager may be unnecessary but a big company will have inefficiencies. Also, it is a good decision to not stop accepting funds once a monthly quota is reached since donations are fickle. An article like this may suddenly cause an outage in donations, they have to have reserves for such cases.
dmux · 2021-05-15
Similar to the idea of "microtypes" (I've most often seen it used in Java circles):
https://www.markhneedham.com/blog/2009/03/10/oo-micro-types/
vbernat · 2020-04-25
There were some serious complains around upstart. Notably, jobs may get stuck in a bad state, difficult to recover. This was never fixed. See https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/964207, https://bugs.launchpad.net/upstart/+bug/406397 and http://www.markhneedham.com/blog/2012/09/29/upstart-job-getting-stuck-…
rzzzt · 2019-11-08
I've heard "micro-types" being mentioned in this context: https://markhneedham.com/blog/2009/03/10/oo-micro-types/
bonesss · 2018-01-18
Kubernetes, along with an architecture informed by the salient points the GP, also provides cloud provider mobility while opening up an on-premise story to match.
As with all dependencies, though, you either manage them or they manage you...
My systems generally wrap their usage of third-party components with internal facades -- an interface that I control that provides a clear contract for replacing the component, generally as part of an AntiCorruption Layer [0]. The more costly the replacement, the more need for abstraction, so I can't imagine why I would treat multi-system communication with Googles or Microsofts cloud-ESB as something less prone to change, replacement, or parallel requirements than whatever PDF-generator we're using this week.
-
[0] - http://www.markhneedham.com/blog/2009/07/07/domain-driven-design-anti-…
maxdemarzi · 2012-04-20
I wrote one of the Ruby bindings (Neography Gem) and write about Neo4j on my blog http://maxdemarzi.com .
Also ThoughtWorks is using it and writing about it: http://www.markhneedham.com/blog/2012/04/20/neo4j-searching-for-nodes-…
utnick · 2009-04-07
Found the blog post I was referring to:
http://www.markhneedham.com/blog/2009/04/04/functional-c-the-hole-in-t…
Also has a link to buy a pre-release version of the book
ArtB · 2015-12-30
> Some validation only makes sense on a specific operation. The object you constructed, due to some business rule, may be invalid to delete but valid to update for instance.
These are two different concepts I feel you are mixing up. An object may be valid, but that doesn't mean it's valid for all operations. For example there is basic validation that a file object is valid if it exists, but if you only have read access to it .append("foo") will fail on it. But it's still a valid file. Your constructor should be checking for the first kind of validity, and your methods for the second.
> What if you receive, from a webservice or something, a valid object format-wise but invalid from the business rule perspective?
That is what you need an [anti-corruption layer](http://www.markhneedham.com/blog/2009/07/07/domain-driven-design-anti-… for. The object makes sense within that other services domain but not within yours. That domain may be closely related to yours, but it isn't you. You need a separate object for that (a simple struct ought to suffice usually). Then you act as a gatekeeper only allowing conforming objects into your system. Basically filter out the shit, and make sure if it makes it past your gate it is clean. Otherwise you might want to use the [state pattern](https://en.wikipedia.org/wiki/State_pattern) to allow for different validation rules of the same object (eg legacy accounts might not have an email address but all new ones must).
> What if…