HN user

heretoo

372 karma
Posts4
Comments112
View on HN

It sounds like you're making the mistake of thinking that TDD means writing the tests first.

Actually, Kent Beck, who coined the term TDD, has the following to say in his book "Test Driven Development":

"In Test-Driven Development, we Write new code only if an automated test has failed"

This implies that in TDD the test is written first.

Regardless of any definition, test-first and test-last are just two ends of a scale we can use.

It wouldn't surprise me if the original reason is the pervasive use of jupyter notebooks in ML, which don't adhere to normal python conventions, and are affected by slow imports only when those sections are explicitly evaluated.

Side-effects in imports are, in my opinion, unnecessary, losing some of the benefits of static analysis, running with different parameters during tests, compiling to native code (if those tools exist), slowing things down, and more.

Libraries could have an initializer function and the problem would go away.

What if the warrant canary is from the developers of the encryption software? See truecrypt -- assuming it was actually a warrant canary.

Where "cross your fingers" is equivalent to the "warrant canary has not been revoked" when encryption is involved.

So, if we followed this advice, none of these technologies should have ever been used in the first place, because popularity takes time to establish.

ClojureScript is just as leaky as Clojure

By leaky, I assume you are refering to the interop with the host platform. Overall, this seems like a benefit, simply for having access to many more libraries than would otherwise exist in Clojure(script).

Clojure brings all the XML pain of Java dependencies

Do you mean pom.xml?

better VM

The JVM seems extremely powerful with regards to performance and memory management, with 20+ years of backwards compatibility (mostly), and improvements still being made with GC and JIT.

I feel your frustration. Clojure, in my opinion, has always been niche, but is still effective and may actually be immortal? New things are always being tried by small groups of people leaving corpses strewn about.

I don't think it is the building, so much as the burying that needs more work, so that we know what libraries do or don't need tombstones.

To the best of my knowledge, Onyx and Cortex were both backed by companies which either needed to move onto more successful products, or in the case of Cortex, they closed up shop. It might be better to look at libraries that have stronger community support.

Onyx is an amazing library but it competes with other libraries like KafkaStreams which has community buy in, and commercial support if needed.

Cortex might be replaced with mxnet which got clojure bindings sometime in the last couple of years (see gigasquid). (Although libpython might make this redundant -- assuming language purity isn't a blocker to being pragmatic).

Others will have better examples, but here are some simple ones that are well maintained, but lets not forget that the java ecosystem is also available:

clojure clojurescript core.async mxnet integrant

Its good to remember that what might be considered "rot" in some ecosystems, is just a sign of maturity and of a library being finished. Many older libraries with no commits in years function as is, as documented.

That was aimed at everyone on this thread that feels comfortable with deleting databases that they don't own.

Vigilantes make their own choices, but professionals are judged by their reputation. As I've said elsewhere, I challenge anyone, especially professionals, to tweet "I will delete your data if you don't secure it" and to add it to your resume/CV as a strength.

You can't magically shoehorn types back into an untyped system when all the existing components assume untyped streams.

If this were true, then a typed system couldn't exist on top of machine code and random access memory, because the existing components (i.e. CPU + random access memory) have no knowledge of the types you are speaking of.

I think the assumption is false. Types can be shoehorned onto untyped data.

But that's not what an abstraction is! UNIX pipes are maximally low-level

To put a spin on it, maximally low-level within it's particular domain, perhaps, sitting on top of the transistors below them, sitting on top of quantum physics.

Thinking a bit further, an abstraction appears to be the mapping in both directions between two domains. That being said, the two domains themselves, are independent, and don't appear to be the abstraction.

The verb "abstract" would mean we are mapping from one domain to the other.

I think "homomorphism" is the mathematical term for what I'm describing.

What's my point? We can always go lower. :)

Are you saying that short term thinking has no utility? I am willing to bet that there are a multitude of circumstances in most peoples lives that require short term thinking, or their lively hood or lives will be destroyed.

In a threatening situation, you solve the short term problem in order to have an opportunity to think long term, which will help to prevent these problems subsequently.

If we were talking chess, you wouldn't ignore the immediate moves of your opponent, because their idea of how the game should be played doesn't fit with your long term desire of how you want the game to turn out.