HN user

strictfp

2,733 karma
Posts20
Comments742
View on HN
news.ycombinator.com 4y ago

Reddit Down?

strictfp
7pts4
en.wikipedia.org 5y ago

Supergalactic Coordinate System

strictfp
4pts0
youtrack.jetbrains.com 5y ago

13 YO IntelliJ “Comment Line” Keyboard Shortcut Bug

strictfp
1pts1
news.ycombinator.com 9y ago

Ask HN: Libs between teams or not?

strictfp
4pts1
dl.acm.org 9y ago

Effects of Test-Driven Development Using a Multi-Site Blind Analysis Approach

strictfp
2pts0
durat.io 11y ago

Show HN: Durat.io

strictfp
119pts39
durat.io 11y ago

Duratio – An Evaluator of Time Expressions

strictfp
7pts2
github.com 11y ago

Bychan – A Pratt (TDOP) Expression Parser Library for Java

strictfp
1pts0
gridstylesheets.org 12y ago

Constraint CSS

strictfp
142pts55
news.ycombinator.com 12y ago

Ask HN: Make HN website purely functional?

strictfp
1pts0
baach.de 12y ago

Neo4j Performance Compared to MySql

strictfp
2pts0
www.paulgraham.com 12y ago

Why Nerds are Unpopular

strictfp
3pts1
www.dn.se 12y ago

Swedish network operator Telia CEO inspired by Comcast Netflix deal

strictfp
2pts0
wakeupandsmellthejavaee.blogspot.se 12y ago

Leader Election in a Cluster using Hazelcast

strictfp
1pts0
blog.ircmaxell.com 12y ago

Framework Fixation - An Anti Pattern

strictfp
1pts0
news.ycombinator.com 12y ago

Ask HN: Any Js lib with pan and zoom of normal DOM elements?

strictfp
1pts0
news.ycombinator.com 12y ago

Android shuffling letters in input

strictfp
3pts6
mindref.blogspot.se 12y ago

Python Web Framework Performance Comparison (2012)

strictfp
3pts0
windows.microsoft.com 13y ago

Windows 7 Gadgets Removed from Microsoft.com

strictfp
2pts0
news.ycombinator.com 14y ago

Ask HN: What was that article on designing as a team?

strictfp
1pts0

I've seen work environments that are chaotic, and people are expected to deliver things that they can't deliver without navigating and taming the chaos to do their bidding.

If course that's stressful. You can't expect individuals to tame the organization.

I think some parts of IT have deteriorated into anarchy with tyrannic leadership.

Sure, you can have anarchy. But then don't expect any particular timelines.

You can hire armies of people. But then don't expect one corner of the org to be able to deliver something that involves talking to everyone.

You can't have the cake and eat it too.

That's true. But that's only really a concert if you're building an SPA. If you're not, having multiple pages is generally faster than running some js framework to reload parts of the page. Plus that you get the benefit of every state combination having it's own URL. You don't need to write any custom state reconstruction code.

This was the original design of REST as applied to the web. It was explicitly designed in such a way that it was forbidden to reload parts of the page. This makes it so that every state has it's own URL and you therefore can link to every state. Deep linking if you wish, for all of the web.

My tip for this is Node.js and some stream processing lib like Highland. You can get ridiculous IO parallelism with a very little code and a nice API.

Python just scales terribly, no matter if you use multi-process or not. Java can get pretty good perf, but you'll need some libs or quite a bit of code to get nonblocking IO sending working well, or you're going to eat huge amounts of resources for moderate returns.

Node really excels at this use case. You can saturate the lines pretty easily.

Maybe. But that specific overabstraction is in the implementation of the framework. It's trying to proxy all the method calls to objects to perform logic around them. It is true that Spring wants the developer to configure auxiliary logic that gets applied around the written code, instead of actually calling that logic. So perhaps that's what the author was getting at.

I disagree with the problem statement; that the framework is trying to solve a meta-problem.

The problem with frameworks is instead that they assume that they're in control. They're the program, you're just writing a plugin.

This makes it unnecessarily hard to use them in all but the most straight-forward use cases. And they're usually also trying to do too much; config for starting, special way of testing, incompatible with other frameworks and libs etc.

Contrary to that, a library does one thing and one thing well. Like a Unix tool. Much easier to use, better coverage, and usually easy to combine. And you can plug them in anywhere.

Frameworks are overreaching, but not in the way that the article paints it.

I'm working with an ECS at $dayjob. But I'm starting to question one aspect of them. Composition of functionality makes sense. And systems acting independently and only on objects with related components makes sense.

But dynamically updating the set of components for an entity in order to "send it" to some other system, and relying on the ECS as a query database to coordinate all this, seems like questionable practice to me. I'm seeing more and more of that in our systems.

I think ECSes are becoming too dynamic, and will start to eat perf, and hide relations. Like some message bus.

Anyone else with the same gut feeling?

Yes. If you design a distributed system you need to consider the network traffic very carefully, and choose your segmentation in such a way that you minimize traffic and still achieve good scalability.

For this reason, I've been trying to push for building a monolithic app first, then splitting into components, and introducing libs for common functionality. Only when this is all done, you think about the communication patterns and discuss how to scale the app.

Most microservice shops I've been in have instead done the naïve thing; just come up with random functionally separate things and put them in different micro services; "voting service", "login service", "user service" etc. This can come with a very very high price. Not only in terms of network traffic, but also in debuggability, having a high amount of code duplication, and getting locked into the existing architecture, cementing the design and functionality.

This has been my major criticism of them; you cement the design of the app by creating an organizational structure around your software components.

What happens if you need to redesign the architecture to meet new needs? That's right; it's not going to happen, because people will fight it tooth and nail.

You also cannot produce any meaningful end-user value without involving several teams.

Microservices is just "backend, frontend, and database team" reincarnated.

My take: do Microservices all you want, but don't organize teams around the services!

Yup. If you consider that a simple int can have billions of states, and that you can have 100% test coverage while testing just one of those, 100% really doesn't mean much. And with several variables, the total state space quickly becomes almost infinite.

The Perfect Commit 4 years ago

I've been following your school of thought as well as the one proposed by the author.

I would argue that your model is a lot freer and will lead to better code quality in the long run, since you're not feeling so restricted when working.

Meticulously crafting commits feel like one of those "good in theory" approaches that feels good but hurts you more than you realize. They're good for workflows where you move commits between lots of (release) branches, sure, but if you're doing trunk-based development I'm going to call it a bit formalistic.

I would love it if some language would implement a segmented heap, where each part could be GCed separately.

Erlang has this model with it's lightweight processes. And it's a great model that helps not only with GC, but also guaranteeing no shared state between different parts of the code.

Aside from Trello and friends, Azure boards is actually also pretty OK, if you disregard their very confusing naming and weird menus. It's fast and easy to use in the board view.

The harsh truth is that you need to think about every single case of failure, and decide what to do when things go south.

If you look at how POSIX does it, pretty much every single function has error codes, signaling everything from lost connections, to running out of memory, entropy or whatnot. Failures are hard to abstract away. Unless you have some real viable fallback to use, you're going to have to tell the user that something went wrong and leave it up to them to decide what the application can best do in this case.

So in your case, I would return Result<T>, and encode the errors in that. Simply expose the problem to the caller.

Interesting. I'm not arguing, but I'm very interested in this history, because I was personally bit by Java EE.

The EJB wikipedia page says that IBM developed the first version

The EJB specification was originally developed in 1997 by IBM and later adopted by Sun Microsystems

, and there's also some other references online about "San Francisco" being folded into EJB;

The San Francisco Project (SFP) basically failed, with much of the technology being folded into other efforts, notably Enterprise Java Beans (EJB) in 1998.

https://redmonk.com/jgovernor/2005/11/07/time-for-ibm-to-res...

https://en.m.wikipedia.org/wiki/Jakarta_Enterprise_Beans

Might it have been a combination of both?

In a sense this is about the fundamental difference between frameworks and libraries. So to a certain extent, you're right. But there's extra complexity in not knowing why some annotation was picked up. With any API call you know you're trying to register something and can debug into it. With an annotation project you're sometimes stuck at "nothing happens".

Which is also true for node projects I guess :D

And the metaprogramming comment stands IMO.

This is why I left Java. Everything "looks nice" on the surface with annotations, but you loose the flexibility of code and a lot of the available tooling. Plus you need to be a real expert to debug issues and solve problems; understand framework architecture and read reflection code. You can't just put a breakpoint in there and start debugging. It's optimizing for the wrong thing.

The bad news is; this culture is permeating somewhat into Rust now that more Java devs are moving over.

This whole attitude is IBMs fault. They tried to get into the Java market by applying their big iron terminal thinking to create Java EE.

Java under Suns management was a lot more like golang today; pragmatism, fewer language features, and focus on writing code.