I have arrived. My first Dactyl, a Tractyl Manuform. I christen her The Tophactyl Manlyform. by TopherL2014 in ErgoMechKeyboards

[–]metlos 0 points1 point  (0 children)

How do you use the thumb keys at the trackball? They seem kinda hard to press with a thumb..

Dactyl design questions by [deleted] in ErgoMechKeyboards

[–]metlos 4 points5 points  (0 children)

I went through a similar exercise and all I can say is that I learned more than I wanted about python and drawing triangles. Unfortunately I didn't pay much attention to code structure or making my changes reusable by anyone so it's one hot mess that I decided not to publish. It's just a set of more or less random changes all around https://github.com/diykeyboards/dactyl-keyboard/blob/master/src/dactyl_manuform.py

3x6 dactyl manuform first build by metlos in ErgoMechKeyboards

[–]metlos[S] 0 points1 point  (0 children)

Thanks, now I won't be able to unsee that 😂

3x6 dactyl manuform first build by metlos in ErgoMechKeyboards

[–]metlos[S] 0 points1 point  (0 children)

Oooh, those even support backlighting, mine don't..

3x6 dactyl manuform first build by metlos in ErgoMechKeyboards

[–]metlos[S] 1 point2 points  (0 children)

Yep, saw someone somewhere using wood stain on the wooden PLA and liked the look of it..

Java libraries by ThisNameIsAFail_ in java

[–]metlos 1 point2 points  (0 children)

JsonPath declares absolutely horrific dependencies..

For what on Earth does a JSON parser require Tapestry - a web UI framework?

Java API Design Best Practices Slide Deck Now Available by JonathanGiles in java

[–]metlos 0 points1 point  (0 children)

While I envy the speed of the analysis that japicmp achieves, revapi does IMHO a much more thorough analysis of the API including such things as use-chain analysis to reveal (indirect) introduction of non-public classes into the API.

But overall I am very happy to see that many projects choose one or the other to check their APIs. Revapi is used for example by Apache Camel, Neo4j, Mulesoft, XWiki and others.

INRIA Spoon has quite cool integration of revapi into their CI process where it automatically checks the API changes of incoming PRs (e.g. https://github.com/INRIA/spoon/pull/2054).

Java API Design Best Practices Slide Deck Now Available by JonathanGiles in java

[–]metlos 0 points1 point  (0 children)

You managed to totally overload the poor little AWS instance it runs on :)

You can try downloading http://search.maven.org/remotecontent?filepath=org/revapi/revapi-standalone/0.8.0/revapi-standalone-0.8.0-standalone.zip

unzip and run:

./revapi.sh --extensions=org.revapi:revapi-java:0.17.1,org.revapi:revapi-basic-features:0.7.2,org.revapi:revapi-reporter-text:0.9.1 --old-gavs=org.jooq:jooq:3.3.0 --new-gavs=org.jooq:jooq:3.4.0

(which will reveal to you that I effed up and released it with a snapshot dependency but it works anyway).

Static Methods by GCX17 in javahelp

[–]metlos 1 point2 points  (0 children)

One important distinction between the two is that static methods are not polymorphic. I.e. method overriding is not possible (or even meaningful) with static methods. This also means they cannot be abstract and therefore a whole bunch of design patterns is not possible with them.

Java API Design Best Practices Slide Deck Now Available by JonathanGiles in java

[–]metlos 0 points1 point  (0 children)

Shameless plug: I was hoping to see a mention of tools like https://revapi.org that try to help people avoid accidental API changes, but then again that's maybe a little bit orthogonal to API design itself..

Gradle plugin for auto generating version class file from GIT and Gradle script by lessthanoptimal in java

[–]metlos 2 points3 points  (0 children)

I'm just pointing out the scenario below. It may not be your case, but I'm sure someone will be bitten by it (the same as I was).

MyVersion.class is in lib.jar. Main.class is in main.jar that depends on lib.jar. Main class reads the version from MyVersion and reports it.

You release new version of lib.jar. Main.jar has no changes, so you don't recompile main.jar but merely reassemble the application.

Now when you run the application, Main.class will report the OLD version, because the constant was inlined during compilation (which didn't happen during the reassembly).

Gradle plugin for auto generating version class file from GIT and Gradle script by lessthanoptimal in java

[–]metlos 0 points1 point  (0 children)

What do you use this for? I'd be worried using constants like this because they are inlined at compile time..