Hacker Newsnew | past | comments | ask | show | jobs | submit | pabl0rg's commentslogin

It says she “Led the push for the Domestic Workers Bill of Rights Act, federal worker unionization”. Federal worker unionization is very undemocratic b/c federal employees essentially blackmail voters. They become untouchable.


In most countries in the world, unionization doesn't mean "get everything you want", it means collective bargaining. It's an approach that cuts both ways, creating stable employment terms, which benefits both employer and employee.


Indeed. It's crazy to me that unionizing is seen as a bad thing by exactly the people that would benefit from them, these days.

They're only bad for big companies that prey on and abuse their workers.


Government-employee unions are bad for their employer, the government.

They’re particularly bad when politicians can take money from taxpayers, give it to union members, who are then forced to give it to their unions, which then turn around and donate it to the politicians’ campaigns.


Again, this feels like multiple problems that are problems regardless of whether unions are in the picture. Most of the world doesn't work like that.


Adobe used to have an app called Fireworks that was great for non-artists. They got it when they bought Macromedia. Too bad they killed it. I hope Graphite will replace it.


Fireworks was the closest thing to figma we got before figma. It was the very best webdev design tool before adobe bought and murdered it.

I remember being excited that Photoshop was going to start to work more like fireworks when they bought it. What a naive dummy I was.


Adobe killed almost everything they bought from Macromedia.


I remember it. Fireworks was intended for UI design (like Figma or XD). It had both vector and raster tools, but they were quite basic.

Graphite looks like it could become the jack-of-all-trades app, since its foundation looks very flexible (i.e. the node graph). But, it is in its early development phase and adding necessary features is going to take many years.


Mn bc b n bn bn Ng bn v


When i read the title, I thought they were finally going to fix gradle or improve maven. Those are the real on-ramps and they are a much bigger barrier to entry than main().

A cleaner/simpler alternative was Kobalt, but it’s now abandoned. A simple, official build tool would make the ecosystem easier to learn.

https://github.com/cbeust/kobalt


Maybe you will appreciate https://github.com/sormuras/bach/ ?


Thanks! That is very interesting.

They’ve had great tools along these lines in the Clojure world where the repl/shell has been around longer (deps.edn+repl and boot).


There are a bunch of different problems better described as "off-cliffs" than on-ramps; initial syntax / conceptual complexity is one, build systems are another. Not that other ecosystems are necessarily better. Modern web dev is pretty damn confusing for beginners as well. I helped an ex-girlfriend as she went through a coding bootcamp. Very little of the material stuck and it wasn't her fault. The whole stack is just far too complicated.

The biggest issue for teaching Java is IMHO not really the syntax of hello world - as Brian says, teachers can handwave this by saying they'll explain it later. It's worth improving mostly because it helps regular programmers who want to use Java in a scripting-like way. The more fundamental difficulty that newbies have is showing other people what they've done.

In the old JRE days it was easy - just send them a fat JAR that opens up a window with Swing and does some cool stuff. Your friends/parents/teachers/etc would probably have a JRE installed already and it'd all just work. In recent years they've abandoned the idea of a JRE and JARs as an app format. You can still open up a window with Swing or JavaFX and get scribbling, but now to show anyone what you did they want you to bundle the JVM and make a more 'native' style app with it. There's a lot to recommend that approach overall, but it's unquestionably harder for learners.

Last year I was discussing this problem with Dmitry Jemerov (product manager for IntelliJ). He sees this issue directly - learners download IntelliJ, get some cool pixels on screen with Swing or JavaFX and then hit a brick wall when they want to send their program to other people. They ask around and it becomes "oh why aren't you learning web dev?" and then they balk when they realize that involves learning 3 new languages and maybe server sysadmin stuff. App stores don't help here because Apple/MS don't like their nice discovery system being gunked up with "my first code" stuff. Even if they stick with Java and try to learn jpackage they quickly realize they need Windows, and a Mac, and maybe Linux just to make packages that their friends can run at all, and then having done all that there's no way to push updates!

We were discussing this problem in the context of maybe doing integrating IntelliJ together with Conveyor [1], a tool my company has been writing that makes desktop app distribution drastically simpler. Actually if you are OK with self-signing it's no harder than compiling Markdown to HTML is, the workflow is very similar. Even if you want to sign it's still very easy; the hardest part is just the general bureaucracy involved with buying the certs. It works for any kind of app including Electron or native apps, but of course with a JVM app you don't have to cross-build anything and Java GUI toolkits are a bit easier to learn than web dev.

There's more work to do here, for instance drawing icons is tedious and when learning a distraction, so we've got a feature in development that draws icons for you. And whilst you can upload the resulting package repository to GitHub Releases, that's not automated and it could be.

I think we're pretty close now to basically abolishing this on-ramp/off-cliff, at least if your users are willing to copy/paste commands to the terminal (due to the self-signing; if you supply real code signing certs the UX is obviously much nicer). Getting rid of the code signing requirements means sandboxing but that's a bigger lift.

BTW - Conveyor is actually implemented as a parallel incremental task-caching build system, internally. We've generalized it and are currently experimenting with that for some of our own build needs. We're some way from being able to replace Maven/Gradle but totally agree that usability of existing build tools is very poor. Usability is in fact the primary ground on which this experimental build system differentiates.

[1] https://conveyor.hydraulic.dev/


> Even if they stick with Java and try to learn jpackage they quickly realize they need Windows, and a Mac, and maybe Linux just to make packages that their friends can run at all

And when they test it on Windows they'll realize that the launcher that jpackage creates does something weird on startup (possibly involving relaunching itself? [1]) that makes Windows display a busy cursor for a while after the program has launched, so they'll have to forget about jpackage and redo it all with something like Packr [2] and Wix# [3]...

[1] https://github.com/openjdk/jdk/blob/fe45835f7cebfccd4544ae19...

[2] https://github.com/libgdx/packr

[3] https://github.com/oleg-shilo/wixsharp


I’ve been looking forward to this since the nimbella acq, but now I feel betrayed by the new pricing and probably won’t even try it.


Sorry to hear that, I welcome a chance to understand this feedback further.


I'd guess this is a difference in usage based vs per-user pricing, but that's wild speculation


Are there any non-chinese suppliers of gsm gateways?


Sysmocom sell devices with the Osmocom open source GSM stacks:

https://osmocom.org/ https://www.sysmocom.de/


Teltonika 4G routers can be used as gateways at least for SMS. They run OpenWRT and you get shell access out of the box so you could potentially get voice working too.


If you’re on Kotlin, consider http4k

It can use netty, undertow, and others under the hood


That’s the idea in Proof of time and space used by chia.net

You probably haven’t heard of this coin/network (invented by the inventor of bittorrent) b/c it doesn’t aim to be a speculative asset, but it does have a very sane programming model (in lisp)


Yes. But in the move to java 9 they broke java’s customary backward compatibility and left behind a lot of users.

It doesn’t help that there is no good, clear and complete guide on how to upgrade SOAP clients.

I went through this recently and learned that because jakarta uses multi-release jars, we have to do the regular dependency changes and also change our fat-jar based build/release to Docker images. In other words, they decided to throw out decades of users’ investment in learning the ecosystem.

I’m not surprised that people seem to be leaving the ecosystem.


> But in the move to java 9 they broke java’s customary backward compatibility and left behind a lot of users.

The main backward incompatible changes between 8 and 9 were the changing of the version string to remove the "1." prefix, and the removal of a handful of methods hardly anyone had used. In other words, the chances of spec-compliant code that ran on 8 failing on 9 were slim. What happened was that in the long 8 timeframe, many libraries -- for various reasons, some reasonable -- have circumvented the Java spec and hacked into JDK internals, making themselves tightly coupled to 8. When internal classes changed in 9, those non-portable libraries broke, and so did their clients. Now that strong encapsulation is finally turned on (as of JDK 16), this shouldn't happen again.

There were some significant breaking changes to the spec in 11, but those comprised separating modules from the JDK into external dependencies, and didn't require any code change.


I remember there were a lot of libraries that were part of the jdk that got decoupled and no longer included in the move from java8 to java9. I specifically remember this impacting anyone who parsed xml or json. I vaguely remember it being something in the javax.validation package.

My company migrated from 8 to 11 but we had a lot of headaches around those libraries that were pulled out of the jdk.

To be fair, those should not have been coupled to the jdk in the first place, but it did break backwards compatibility which was a cardinal sin for java.


For a lot of people, Java is mainly used to turn XML files into stack traces, so breaking backwards compatibility in XML parsing is a big deal!

Although, if it gives you a stack trace even faster than before, I guess it could be considered a performance improvement...


XML parsing works just fine. It's SOAP and some other classes that were dropped.

I'm not sure if that's a real problem. All it takes is to add few dependencies to pom.xml.


It mattered to us. Our team owned over 50 microservices that all had to have their pom.xml files updated.

But it was worth it. Got us access to the java flight recorder which is an awesome debugging tool.


things like jaxb were removed, which i'm guessing plays a part in the soap discussion above. Not that it is difficult to fix, but...


Unfortunately, the only explanation I found for my troubles with SOAP and java 11 is found in the comments to this answer in StackOverflow: https://stackoverflow.com/questions/58319199/java-lang-class...


> the removal of a handful of methods hardly anyone had used

when we moved from java 7/8 to java 11 two years ago, we didn't had any issue with our third-party libraries, but we had a few pieces of code, mostly related to encryption libraries, that failed to compile with the newest JDK


The way to upgrade SOAP clients is to generously pour the office with gasoline and set it on fire.


It's a SOAP so flush down the toilet should do the trick.


What are your gripes with SOAP? Genuinely interested. I've used it once professionally, and while there was an initial learning curve, it seemed to have some nice properties once you got past that.



That was exactly my sentiments back in 2000s. I had to use SOAP a few times, then switched to a semi-proprietary binary protocol called Hessian [1] (and its XML based sister, Burlap [2]) and it saved my day.

[1] http://hessian.caucho.com/

[2] http://hessian.caucho.com/doc/burlap.xtp


This is a ridiculous website:

http://harmful.cat-v.org/software/

They should be using rocks instead of a computer with this mindset.


What does the content on the rest of the site have to do with the link I posted? This is literally ad hominem - disregarding an argument because you dislike the author.


I dislike the author based on his/her writings.

Why would it be ad hominem (which is not even that)? Also, the link I posted is even about the same topic, not unrelated - so a logical flow in that one (and it has plenty) will easily apply just as well to an elaboration of one of the listed contenders on this page.


dismissing the argument based on your feelings about the author is literally ad hominem.


thank you for this


Just like with XML, it's suffers from being about 300x more complicated than is proper for what is does


I really like Java the language but I feel everything involved in working in Java is 300x more complex than it needs to be. (Even with a IDE)

Just getting code updates on our old java websites makes me realize why all the new stuff is arguably slower php and python..


SOAP isn't a Java tech.


My experience:

It's very easy to overengineer. Both the SOAP WS-* extensions, and the underlying XML.

The tooling and ecosystem suck. I found it a lot more difficult to use clients like soapUI as opposed to just banging on a REST API with curl. The libraries are mostly java, with at least one c/c++ implementation. I had a lot of trouble getting different libraries to work together. And that's literally the entire point of SOAP. It's supposed to be the enterprise grade interoperability (of course, a huge oxymoron) compared to REST.


SOAP is fine if you're talking to yourself or otherwise confined to a single dialect. But that's not saying much since that's true of any data format. SOAP falls down when trying to get systems all developed by n different companies all talking to one another which was/is the whole point of the stupid thing.


Word.

As long as you're running the same code on both ends it sort of works. It's still over engineered to the moon and back, and a major pita to deal with, but at least the damn thing works.

Anything beyond that fails in spectacular ways.

It will not be missed.


The people responsible for inflicting SOAP upon us should suffer.


Was there a lot of competing standards in SOAP, leading to incompatibility between libraries? That would indeed seem to defeat the point, if true.


But SOAP endpoints can be autogenerated (as opposed to REST), which basically makes this much less of an issue.


SOAP and its XML schema and result is 100x more complicated than JSON. The problems outweighed the benefits.

I spent a few years working on SOAP for a telecom. Not pleasant.


>SOAP and its XML schema and result is 100x more complicated than JSON. The problems outweighed the benefits.

Please mention a few of these problems, I'm curious to hear.

The problem I see with REST/JSON-APIs is that they lack features that have to be tacked on after, creating an endless bikeshedding nightmare and instead of having one well-thought out solution, you get three or four solutions sloppily hacked together. Schemas are a prime example, actually: SOAP appears to come with them out of the box, while REST/JSON-APIs either lack them (just about as bad as not having any type system in your language, i.e. really bad) or tack them on after the fact with something like OpenAPI, which is honestly not great as far as schema languages go.

Again, I say this as someone who has professionally used SOAP only once, and very briefly at that. Not advocating that we should re-adopt SOAP - I think that ship has sailed since long ago - but I really want to understand its opponents opposition to the positive qualities it appears to have.


I used it for about 3-4 years at a major telecom and a large retailer a while back.

> Schemas are a prime example, actually: SOAP appears to come with them out of the box, while REST/JSON-APIs either lack them (just about as bad as not having any type system in your language)

The problem with SOAP is that it seemed to be designed by multiple committees with different agendas. From my imperfect memory, it's not just different versions of SOAP you have to contend with, but also different variants of schema flavors. Consequently, different languages and even libraries would have implementations that might support x but not y schema feature. It was an annoying compatibility nightmare, where you needed an additional complicated tool to verify it all.

Yes, JSON/REST have their own issues, but it's nothing that good documentation can't solve, and it's supported across most if not all major programming languages. Simplicity is often very underrated.


This is from 10+ years ago, but my biggest gripe with SOAP was that if you didn't have the exact same library on both ends then you have problems. Apache Axis vs CSF vs soap-ws, and that's just Java. Java to .NET was almost impossible to pass around.


That would indeed be a huge downside - the point of a specifiation would be to have interoperability be entirely seamless. If SOAP failed on that account, then it deserves its fate.


If you use the "Simple Object" abstraction, it's just fine.

Delving under the XML hood can be painful.


Publishing some flavor of SOAP services seems to be easy and common in companies that live in the Microsoft ecosystem.

I’m no fan of that, but unfortunately we are forced to use some such SOAP services.


Hmm, fat jars still work OK in latest Javas. What is the issue is with Jakarta multi-release JARs? A MR JAR is just a regular JAR with files in different directories. They should fat-jar together OK.

There's certainly no requirement to start using Docker images!


The problem I've run into with mrjars is that they tend to break libraries that do a bunch of classpath scanning. Mrjars add some stuff to the classpath that the older tools didn't understand and would choke on.

It's one of those things I would personally argue is a naughty hack that should be avoided if at all possible, but it's also something that's historically been ubiquitous within the Java ecosystem. It's frequently how convention-over-configuration dependency injection (as found in Spring Boot or Jersey) tends to be done, for example.


Specifically, I was unable to find the gradle shadow/maven shade rules needed to use the jdk9+ version of the multi-release dependency "com.sun.xml.ws:jaxws-rt:2.3.5".

The reply I got on Stackoverflow from the person I think is the maintainer is "don't use fat jars", which is probably the correct solution, although most people use fat jars.

Lately, I've been reading that layered docker images should be a faster way to build and deploy java apps that have many tens of MB of dependencies that never change. It only works if you don't use fat jars.


> It doesn’t help that there is no good, clear and complete guide on how to upgrade SOAP clients.

> I went through this recently and learned that because jakarta uses multi-release jars, we have to do the regular dependency changes and also change our fat-jar based build/release to Docker images. In other words, they decided to throw out decades of users’ investment in learning the ecosystem.

Could you clarify what you ran into? Why docker? I'll have to do this soon.


Specifically, a ton of used-to-be-included in the standard JDK things like nearly all XML processing are now broken out into modules or require maven dependencies, etc.

So it's not "turn-key" to upgrade to jdk 9 or above, like say, 6 -> 7 -> 8 was.

Sounds simple... "just add it to your maven deps!" - but in practice it's more complicated than that and requires careful planning and testing. Some things might even surprise you and run for a while before a classloader can't find something and explodes in runtime.

Java 9 created quite a mess. Once you finish that upgrade though, moving into Java 11 or anything newer is basically turn-key like it was before. But, this had the effect of many companies staying with Java 8 until forced to upgrade.


from OP > Could you clarify what you ran into? Why docker?

Not sure I follow why you had to turn to docker

> Some things might even surprise you and run for a while before a classloader can't find something and explodes in runtime.

The JVM is deterministic - I don't follow this statement?


> Not sure I follow why you had to turn to docker

I didn't, and OP could have stuck with Java8 since it's LTS. So I'm not sure either where Docker comes into play. It seems the parent was deploying fat jars, and now due to the complications of all the various deps, they opted to use Docker images as a new "fat jar". Perhaps it simplified their build process, but that's just a guess.

> The JVM is deterministic - I don't follow this statement?

Custom classloading simply requires a string path and FQN of the class to attempt to load it from disk. Compile time checking doesn't validate the actual existence of the class, which is the point of runtime custom class loaders.

A lot of plugin loaders are done this way, etc. So... your program might be humming along just fine until it classloads in a plugin (or whatever) that depends on Jaxb for example, then everything explodes since Jaxb is now a dep instead of built into the jdk.


Sure but that's always been the case.

Anyways, I had read your comment as: ~"Classloader loads class X fine one moment and then suddenly can't" which is why I mentioned deterministic.


> Sure but that's always been the case.

Well, no it hasn't. Things like Jaxb, for example, have always existed in the JDK since they were introduced (java 1.2 in Jaxb's case). XML processing code compiled with jdk5 (circa 2004) still worked fine on java8, for example, with zero code or dep changes. Suddenly that assumption is broken with java9.

> Anyways, I had read your comment as...

It was just an admittedly contrived scenario where the upgrade path to jdk9+ wasn't as straight forward as just adding deps to maven and calling it a day, since you may not be aware of all code interactions, depending on the system you're upgrading.

Your program might even have a dep on some jar that was compiled under jdk4 and the author and source are nowhere to be found (or went out of business a decade ago)... and suddenly it breaks under java9. Things like that are largely what prevented mass adoption of jdk9 immediately.


Simple Object Access Protocol...

Simple: by the end I was dealing with self-signed bodies and validation, version hell, framework hell, and namespace super-hell.

Object: um, not really. It was request/response. Nothing really "OOP" about it at all.

Access: didn't really help much with access, that was all HTTP

Protocol: There were so many protocols and frameworks attached to those protocols and versions of the protocols that ... in the end of the day, it had no protocol.


The best thing about SOAP is that it drove industry-wide REST adoption. That had its own problems, but at least they were largely due to a failure of implementers to understand what using HTTP as an application rather than a transport protocol meant. And now we have GraphQL, which while it has its own faults[1] is far less unnecessarily complicated than SOAP and provides considerably more value.

[1] Oh crap I’d forgotten about SOAP faults until I wrote that word. Please help me I’m having traumatic flashbacks.


Can you give any concrete examples of what broke?


A lot of bcel/aspect code had to be rewritten. I've had to patch a couple transitive dependencies to bring a 2018 platform from Java 1.8 into Java 12 land, and it's stuck there forever since after 12 something else it depended on was removed. We're migrating to a simpler, saner runtime, but still, stuff takes time.


> A lot of bcel/aspect code had to be rewritten.

But why? What changed in the spec that forced a rewrite?


Typical reason for this is that JVM changed bytecode parsing in a backwards-incompatible way (yes this happens frequently e.g. to fix validation bugs) and the fix for this was then only rolled into a new version of the bytecode manipulation library, but that in turn had its own set of API changes, regressions and bugfixes, meaning that now whatever code sits on top has to be changed, etc.

Also most of the breaking changes from Java 8-11 are/were not spec changes. The spec leaves out many aspects of the Java platform that real apps rely on.

This idea that only apps that used JVM internals broke is totally wrong. I think the guys who work on Java think this because they don't actually use or work on any Java apps themselves beyond the ones that are a part of the JDK itself.


Thanks. Have you got any example issues that are public on GitHub or something? I can't imagine changes in byte-code parsing for example that you'd hit if you were following the spec from the start.


e.g. the validation of invokeinterface changed at some point in ways that broke common tools, if I recall correctly. I don't have bug links to hand right now. The JVM previously accepted something that it was later changed to reject. This often happens including in cases where it doesn't matter. See the Java 17 release notes about the change to validation of agentmain entry points for an example of the sort of thing that is done constantly, even where it isn't actually required by any other change.

People don't execute specs, they execute implementations. In the end whether something is or is not fully compliant with the spec doesn't change the costs involved in fixing it.


Exactly, it's not always easy to replace a transitive dependency and we're dismissing the platform anyway


They removed webstart - which is fundamental to how the apps we use are distributed. I believe that reason alone is why the distributor has stuck to Java 8/OpenWebStart.


Where are they going to? I've been out of the Java loop for a few years, maybe they landed where I did.


Which one of those has the best hardware?


The Dell hardware has gotten amazing and for most users Linux will run great on it. Look for models that ship OEM with Ubuntu.

Lenovo ThinkPads are also fantastic, and very repairable. They're certainly not eye candy but Linux is a first class citizen.

I'm stoked about the frame.work laptop also. Haven't gotten one yet, but I will.


The reality is that the M1 beats pretty much all Intel-based laptops when it comes to getting the sweet spot on performance, battery life and silent operation.

Yes it's costly, restrictive, the hardware still has some flaws and you can't replace parts but most Apple users, myself included, are happily paying the price.

I have an M1 Macbook Pro for a few months now and it's blazingly fast, the battery lasts for 15-20 hours and I've only heard the fan for a few minutes so far while stressing it with heavy compilation. Under normal circumstances it's entirely silent. I wouldn't trade it for anything else at this point.


You're not "happily paying the price". That assumes you've had to go through the genious bar destroying your monitor, or losing all your data, or having to buy a whole new macbook because a $1 component died and Apple prevents it from being replaced.

Again, it's just advocating against yourself. Nobody cares until it happens to them, and then they wonder how things have gotten this bad.


It's unfortunate Dell laptops are limited by Software. Their hardware is pretty good otherwise. And linux runs flawlessly for the most part.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: