17 karma · joined August 25, 2020
* 40 inch 21:9 aspect ratio. 34 is too small and 43 and above are too big
* QHD i.e. 3440 X 1440 resolution - why? Because it renders the programming fonts perfectly - many will complain about pixelation but for me it just seems perfect. This translates to a PPI of approx. 93 which is the same as for a 24 inch FHD monitor. Scaling spoils it for me
* Curve - not too less nor too aggressive - LG OLED is 800R which is way too much - on the other hand 2300R is too less - I think 1800 is ideal
* 60 Hz or more refresh rate
* Accurate color reproduction
* Matte finish / antiglare
Sadly, a curved monitor with the above specs does not exist. The only one as I mentioned is the LG OLED which has a far too aggressive a curve. There are some lesser known brands which come as flat which I currently use but I wish there was one that met all of the above.
On a side note, you will at some point in time have to deal with multi version workflows. I know that this is one feature that limits wide adoption of an orchestrator.
> The trend seems to be in the opposite direction. People became frustrated with the lack of types in Python and JavaScript, hence we get Python with typing and TypeScript.
Regarding typing, what I have tried to achieve is the best of both worlds. In unify-jdocs, we have the concept of typed document. This is a document that defines the structure of the JSON document. It defines what the "type" of a leaf node is i.e. integer, string etc. The validation / determination against this type is however done at runtime. This, I feel is acceptable because whenever we add a JSON path to a document, the first thing we would do is to test the read / write of that path. And any type mismatch would get caught there immediately. And so, from the point of view of being able to read / write / validate in a single line of code (even though dynamically) provides much simplicity and ease of use as compared to using POJOs. Plus we always know the exact JSON path we are dealing with.
Usually, I would prefer static typing but, in a scenario, where we can have hundreds of JSON document types (we deal with more than 500 in the same application), complex JSON document (ours go down more than ten levels deep with hundreds of JSON paths) and where the document structures may undergo change over project lifetime, the use of read / writing using a single line of code has many benefits. I shudder to think of hundreds (if not thousands) of POJO classes, the writing of accessor methods (null / empty handling, namespace etc.) and what it would take to refactor in the face of change. Just my opinion based on my experience in the past.
> I think you will find less traction with this method of posting to HN. People want a clickable link to look at the project
The clickable link to the repo / documentation is actually in the text (https://github.com/americanexpress/unify-jdocs). In the case of this post, I felt it more important for people to read the text rather than be directly pointed to the contents of the link and hence this approach.
I made something similar in Java - unify-jdocs - https://github.com/americanexpress/unify-jdocs - though this is not for parsing - it is more for reading and writing when the structure of the document is known - read and write any JSONPath in one line of code and use model documents to define the structure of the data document (instead of using JSONSchema which I found very unwieldy to use) - no POJOs or model classes - along with many other features. Posting here as the topic is relevant and it may help people in the Java world. We have used it intensively within Amex for a very large complex project and it has worked great for us.
You may wonder – why another orchestration engine when there are already so many. We have off the shelf commercial “heavyweights”, the open source frameworks like AWS step functions / Uber Cadence / Netflix Conductor and a host of others. They why another one?
Simple, simplicity! Most of the orchestration engines I worked with or evaluated were too heavy weight or too cumbersome or too complex. Some you could build your entire careers on and some required complex DSLs, some required hacks to do parallel processing, many required their own separate server setup etc. I wanted something really simple which had all the features to create a complex workflow and yet was simple and no more. So I present unify-flowret.
Unify-flowret is a lightweight Java orchestration engine which gives you all features to implement your workflow. It is a small JAR file which can be embedded in your applications. Below is a feature summary:
1. True technical parallel processing
2. “Resume from where you left off” functionality
3. Support for any data store / database
4. Can be run and tested stand alone on a laptop without the steps being implemented (mocked)
5. Allows steps to specify “execute next on resume” or “execute self on resume” in case of non-error pends
6. Special persist step to tell the application to persist data (if not persisting at each step)
7. Comprehensive audit logging
8. Crash proof – resumes from where the information was last recorded without any manual intervention
9. Ticket management – a “go to” feature for a process
10. Support for process variables – available to each step and route to reference and update
11. Support for handling in flight applications by locking the process definition to a process instance
12. Application call back events for house keeping
13. SLA milestone framework and work basket management
At American Express, we use it to power many of our workflows and it has been able to meet all complex requirements thrown up till date. I hope this work will help many who have experienced working with orchestration engines difficult in the first place. I look forward to comments and feedback from the community. Thanks to American Express for open sourcing this piece of work which i truly think has the potential to help a lot of people in the wider Java development community.
Read more about it on https://github.com/americanexpress/unify-flowret.
Disclaimer -> #ViewsMyOwn.
The background behind writing this library is that we have a large number of JSON document types and many of them are quite complex in terms of structure (many paths and many nested levels). I did not want to create POJO / model classes and write read and write accessor methods for manipulating data in these documents as these can be quite challenging to maintain in the face of changing document structures. I also did not want to use JSON schema validations as they tend to get quite verbose, do not mirror the JSON data document structure and can be unwieldy to use. What I did want was 1) have the ability to read and write any JSON path in a document and know metadata information (like the number of elements in an array, index of a specific element etc.) using a single line of code, 2) the ability to do fast, accurate and exhaustive impact analysis on the usage of JSON paths over the whole code base and be able to refactor quickly in case positions of JSON paths changed in the document structure and 3) the ability to conform to predefined document structures and specify field validations which would automatically get done in the background. This library does all this and more.
Before starting work on this library, I did look around to see if something similar existed. I did find some which could be used to read and write simple JSON paths but could not handle the complex scenarios which we wanted to address. I am happy to report that the use of this library in our project has made working with JSON documents an order of magnitude easier, reduced boilerplate lines of code by nearly 90% (primarily due to no POJO / model classes, accessor methods and validations) and made it extremely easy to refactor code in case paths are updated in the document. For reference, we have over 250 JSON document types, more than 2000 JSON paths nested more than 10 levels deep in multiple documents which we have been successfully able to manage using this library.
I hope this work will help many who have experienced working with POJO / model classes and JSON schema validations to be far too tedious and challenging to maintain in the long run. This is my first creation on open source (better late than never) and I look forward to comments and feedback from the community. Thanks to my employer American Express for open sourcing this piece of work which i truly think has the potential to help a lot of people in the wider Java development community.
Disclaimer -> #ViewsMyOwn.