Java's Monetary and Currency Operation - JSR 354 - java-money

I was just curious if anyone knew whether JSR 354 will have an official implementation as part of any future JDK.
JDK 11 JavaDocs
JSR354 Reference Implementation
When I search JDK 11 docs online - it doesn't look like Monetary and MonetaryAmount classes aren't included. But the implementation of JSR 354 exists in Github under jsr354-ri.
Does it mean that I can write my own implementation, if I don't want to follow the reference implementation? My purpose is to support additional currencies e.g. Chinese Yuan Renminbi (Offshore) CNH which has no official ISO recognition, but it's well known.
Thanks,

Thanks for the input so far. As one of the designated new Maintenance Leads (also see Transfer Ballot) allow me to give a more formal answer from our side.
As you may know, Oracle has removed many features from Java 11, JavaFX probably the most prominent "victim" which was released into an Open Source ecosystem backed by a couple of other companies, a few Oracle employees and other members of the community.
JavaMoney, the wider project behind JSR 354 and some of its extensions has always played a similar role. After the Transfer Ballot, there is one company (Trivadis) and 2 Individual EG Members as Maintenance Leads. Plus a lot of others contributed extensions including large names like Red Hat or Zalando.
So JSR 354 and a likely follow-up (aka JavaMoney 2.x) compliment Java SE similar to how OpenJFX, Apache NetBeans or other Open Community efforts do without being an integral part of the JDK. I spoke to an Oracle employee familiar with OpenJDK at Eclipse Community Day and he confirmed, this was also in Oracle's interest to focus on core features of the JDK while other vendors and communities provide additional features around it.
Plus with a future Money JSR under the "iterative" release plan developed for the JDK itself, but open to an other JSR we plan to offer regular releases at a pace that matches the needs of the community. Should say Italy or another country lose its place in the Eurozone due to excessive debt or another "Brexit" like situation happen, then currencies for those countries will change. And an independent Money JSR can immediately respond to that by providing the necessary changes without having to wait for the JDK.

Initially JavaMoney was targeted to be included into JDK but then it was decided to make it as JavaEE spec. As you may know starting from JDK11 the JavaEE classes aren't a part of JDK and they should be installed as any other usual dependency i.e. via Maven.
Yes, you can add any custom currencies and this is supported out of the box. You need to add an instance of CurrencyProviderSpi as described in the tutorial Registering Custom Currencies.

Related

What, if any, Is the difference between a software 'release' and a 'version'?

Title says it all. What, if any, Is the difference between a software 'release' and a 'version'?
Do these two definitions overlap? Is it the case that all releases, and release candidates are versions, but not all versions are releases?
Here's a simplistic explanation:
Build − executable or a library created by compiling source code.
Version − a software build. New version is a different build.
Release − (public release) a version intended for use by general population.
Build #465832567 is just the number of times the main developer compiled the program (or library). Sensible developers only release builds with meaningful and tested changes.
Version 2.1.5 means it's the second edition with at least 1 major difference from its 2.0.~ predecessors and 5 minor feature updates or bug fixes.
"Public release" usually means it's a version for normal users who are not involved in testing or development of the software.
Different release types example:
Firefox − browser version for simple users
Aurora − so called "alpha" version, which includes latest additions, some untested
Nightly − "beta" version for developers and enthusiasts who don't fear bugs and crashes
I am not sure if there is a very concrete on these two terms, and the definition seems also differs base on context.
Normally Release is more about the "action" to distribute the software to interested candidates, while "version" is an identifier of certain snapshot of the software (mostly a meaningful snapshot).
Therefore, in most case, as we need to identify certain release of the application, we will have a version assigned. (There are always exceptions anyway...)
Definition of version:
a particular form of something differing in certain respects from an earlier form or other forms of the same type of thing.
Think of it this way.
When you edit the code, depending apon what you consider a change (saving, publishing, or just editing), your code version changes (depending on how large of a difference you consider a version- also note that versioning systems can be whatever you decide). You might have a version of code where there is a bug, then you patch it, and you have another version. What you call your versions can be whatever you want (versioning system).
A release is commonly considered a version that is pretty stable, complete, tested and most likely having few known bugs and then made public, although more technically its ANY version made public. However, when you see the word release I feel it is safe to assume it is the first provided you cant figure it out by context.
This is my second post so I hope it was helpful!
A release describes more the process of publishing a software than a concrete material thing. Whereas a version is a concrete and specific software package. Because you won’t publish all software versions you build, only the software versions that you publish or deliver are called software releases. A build is the process of compiling and packaging of a software. Because you can build one and the same code more than once at different machines and with different compilers in different environments a build is the outcome of compile and packaging code and software parts.
Imagine you plan, design, develop, build and test a software. All this steps bring you towards a software release. Because you don’t exactly know how much fixes and versions your team has to build and your quality assurance rejects you must define an objective for you team and your customers. So a release is an objective your team develops towards.
So let’s say you plan your first release in November. The objective of your team is to create a “Halloween Release”. Towards this “Halloween Release” you think it’s clever to present it to our QA before delivering the first version to key users or customers. So the intermediate objective of your team is to create a QA-Release or Alpha-Release. After the 1001st build you present a first running version for example 1.0-alpha-build-1001 to your QA. But your QA rejects this version and the following version as well. So you further fix, improve and build to get a Beta Release that your QA accepts for presentation to key users. Then some builds after, your QA confirms so you can present 1.0-beta-build-4711 to your key users; your first Beta-Release. After some improvements you publish your “Halloween Release” at November with version 1.0 as final software version to your customers. But unfortunately some customers complain about minor issues and some users do complain about missing features. In consequence you decide to fix the issues on the one hand and to integrate new features on the other hand. So your team has two goals and objectives, first to fix and to work towards a “Bugfix release” and second to work for a “Christmas Release” with the new features.
So you fix and build a “Bugfix release”, maybe resulting in a version 1.1. In parallel your team creates new features, integrates, tests and builds a “Christmas release”, resulting in a version 2.0 you deliver at Christmas to your customers.
So in one sentence: A release is a challenge towards a version, you deliver to a particular addresse:
QA-Releases for your QA to examine your software.
Beta-Releases for your key users to introduce new features.
Customer releases for customers to satisfy customers and make money.
Seasonal releases and other releases for funny as serious objectives as well.

IBM Rational DOORS - should I deploy it myself, or is there something more appropriate?

I'm inheriting a project that has, until now, had all its artifacts maintained in CVS and FogBugz. There's a ton of old and new documentation in MS Office format that needs to be reconciled.
I've seen some presentations on IBM Rational DOORS and think it would solve the lack of traceability across all these different documents and systems. My (possibly incorrect) understanding is that I could, for example, highlight a phrase in a Word document and mark that as a requirement, then create bi-directional links between that phrase and other artifacts, such as tasks in a bug-tracking system or entries in the changelog and user guide, to show that the requirement has been satisfied.
Unfortunately, if I want to use DOORS, I would probably have to install and maintain it myself. I found an open-source product for requirements management called rmtoo, but it looks like it would require me to rewrite all the documents document into a bunch of specially-formatted text files--which, for me, defeats the whole purpose. If DOORs is overkill, are there any low-overhead alternatives to DOORS?
DOORS has bidirectional links, but they are only from "DOORS objects" in a "DOORS module" to another "DOORS object" in the same or another "DOORS module".
A DOORS object is a little like a row in a spreadsheet file, and a DOORS module is a little like a spreadsheet file.
You have to import all of your material into DOORS to work with it -- DOORS can't work with documents or generally communicate with the outside world very well. Importing and exporting Word documents into DOORS is incredibly breaky.
DOORS is really dated and limited.
Update 2022: As a commenter rightly pointed out, the answer is dated due to changes in the tool ecosystem.
One of my frustrations is that there are many expensive tools (the main players are DOORS Next, Jama Connect, Codebeamer and Polarion).
For developers with a low budget, I often recommend R4J, which is a Jira Plugin. I find the installation and configuration process a little cumbersome, but other than that, it provides basic functions, especially traceability. As of this writing, it was $100/year for up to 10 people.
Original Answer
Do I understand correctly that you're trying to trace elements in DOORS, Word, Tracker-entry, etc.? I don't think what you saw is possible with DOORS out of the box. I think you need a tool like agosense for that, and tons of customization for adapters to the tools you need. If you really want to know, I'd talk to an IBM Sales Rep. But a DOORS-based solution will be really expensive.
It's unclear from your description how much control you have over the tool chain. If you have full control and are looking for a cheap solution, you may want to check out something like Trac. It's free and integrates bug tracking and Wiki (so essentially, for this to work you'd have to migrate your documentation from Office to the Wiki, and bugs from FogBugz to Trac - not sure whether your users will accept this, and it creates the same problem that rmtoo does).
Last, you could look into Requisite Pro, an IBM product that is cheaper than DOORS. It has the advantage that your requirements are managed directly in Word.
Hope this helps!
If DOORs is overkill, are there any low-overhead alternatives to
DOORS?
From experience, there are easily over 20 software tools (often ALM) that support the means of 'Requirements Engineering'.
Here is a short list:
Siemens Polarion
Cradle by 3SL
Perforce ALM
Jama
Intland
...and further IBM DOORS NG "Next Gen", SAP, MKS/PTC Integrity with RE Addon, etc.
As for architecture, I'd recommend EA, Rhapsody, NoMagic, Visual Paradigm.
We have also projects that manage requirements with Confluence. Apparently Gitlab is planning a RE feature.
DOORS is still in actively in use depending on your industry. And there is good reason why.

Any Open Source Pregel like framework for distributed processing of large Graphs?

Google has described a novel framework for distributed processing on Massive Graphs.
http://portal.acm.org/citation.cfm?id=1582716.1582723
I wanted to know if similar to Hadoop (Map-Reduce) are there any open source implementations of this framework?
I am actually in process of writing a Pseudo distributed one using python and multiprocessing module and thus wanted to know if someone else has also tried implementing it.
Since public information about this framework is extremely scarce. (A link above and a blog post at Google Research)
Apache Giraph http://giraph.apache.org
Phoebus https://github.com/xslogic/phoebus
Bagel https://github.com/mesos/spark/pull/48
Hama http://hama.apache.org/
Signal-Collect http://code.google.com/p/signal-collect/
HipG http://www.cs.vu.nl/~ekr/hipg/
The main Hadoop project for distributed graph processing is the Hama project. Its still in incubation though.
The project has broken its work into two areas; a matrix package and a graph package.
Update:
A better option would be the Apache Giraph project which is based on Google Pregel.
Yes, a new project called Golden Orb, which is an open-source Pregel implementation written in Java that runs on both HBASE and Cassandra.
It has been submitted to Apache incubator for approval, and Ravel, the company behind Golden Orb, said they are releasing it this month (http://www.raveldata.com/goldenorb/).
See http://www.quora.com/Graph-Databases/What-open-source-graph-databases-support-horizontal-scaling
UPDATE: GraphX is GraphLab2 on Spark implemented by Joey Gonzalez, the creator of GraphLab2.
Spark's unique primitives make GraphX-Pregel the fastest JVM-based Pregel implementation. Spark is written in Scala, but Spark has a Java and Python API.
See...
GraphX: A Resilient Distributed Graph System on Spark (PDF)
Introduction to GraphX, by Joseph Gonzalez, Reynold Xin - UC Berkeley AmpLab 2013 (YouTube)
My Hacker News comment/overview on Spark.
P.S. There is also Bagel, which was the first cut at Pregel on Spark. It works; however, GraphX will be the way forward.
Two projects from Carnegie Mellon University provide Pregel-style computation
on graphs:
GraphLab http://graphlab.org
GraphChi http://graphchi.org
The programming model is not exactly same as Pregel, as they are not based on messaging but on modifying the graph (edge, vertex) data directly. Basically, it is easy to emulate Pregel in these framework.
There is also Signal/Collect a framework written in Scala and now using Akka
http://code.google.com/p/signal-collect/
https://github.com/uzh/signal-collect
From their website:
In Signal/Collect an algorithm is written from the perspective of vertices and edges. Once a graph has been specified the edges will signal and the vertices will collect. When an edge signals it computes a message based on the state of its source vertex. This message is then sent along the edge to the target vertex of the edge. When a vertex collects it uses the received messages to update its state. These operations happen in parallel all over the graph until all messages have been collected and all vertex states have converged.
Many algorithms have very simple and elegant implementations in Signal/Collect. You find more information about the programming model and features in the project wiki. Please take the time to explore some of the example algorithms below.
I create a framework called Phoebus. It is an implementation of Pregel written in Erlang. Checkout my blog entry for applying Pregel model to path finding as well..
Apache Giraph is currently in Incubator and under very active development, with committers from LinkedIn, Twitter, Facebook and academia looking to bring it up to production scale very quickly. It is pretty directly modeled on Pregel and was originally developed at Yahoo! Research. We're looking for new contributors and have several introductory JIRA issues to help people get started with the project. We'd love to have you get involved.
Stanford Students have developed an open Source implementation of Pregel.
http://infolab.stanford.edu/gps/

MySQL Connectors and Licensing [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
It occured to me that the MySQL Connectors(Java and .NET) are GPL licensed.
Does that mean vendors(not developing for inhouse apps) will have to purcase a commercial license for proprietary software talking to a MySQL database through these connectors
If you are linking to the MySQL connectors in your application then yes - your application is considered to be "work based on that Program" as per the GPL.
You have 2 options:
License your application under a GPL compatible license.
Become a MySQL Ready Partner (free) and get one of your applications MySQL approved. This grants you access to the Connectors under a dual license - which will allow you to use the Connectors with proprietary code. More info here : https://partner-portal.mysql.com/guide/overview.html
(Note that the Connectors grants exceptions to the GPL licensing for open source projects.)
Does that mean vendors(not developing for inhouse apps) will have to purcase a commercial license for proprietary software talking to a MySQL database through these connectors
I'm not a lawyer but, to me, the key part is not developing for inhouse use which means distributing or selling as closed source. In that case, vendors need to purchase a commercial license, indeed.
If you are not modifying MySQL connector and merely distributing MySQL connector along with your commercial program then your program is not "work based on the program" as clearly stated in section 2 of gplv2 which defines work based on the program as follows:
"You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program"
but you need to distribute gplv2 license agreement along with the mysql connector and you must inform your clients somehow that the mysql connector that is distributed with your commercial program comes with the gpl license.
Also note following part of gpl license
"mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License"
Since work based on the program is the work that modifies or copies from the sources of the gpl licensed program, merely distribution of the gpl licensed program with your commercial program comes under aggregation which is outside the scope of GPL license.
Since gpl licensed program is free to use it dose not matters weather a free open source or closed commercial program is using it.
Suppose you develop an accounting application that connects to database using MySQL connector this dose not makes your accounting application work based on the program because gpl license says that "work based on the program" is something that copies or modifies the source of the gpl licensed program. So in simpler terms your accounting application is merely using the gpl licensed program and is not the work based on it.
GPL allows the commercial distribution of protected work.
For example, if you distribute copies
of such a program, whether gratis or
for a fee, you must pass on to the
recipients the same freedoms that you
received. You must make sure that
they, too, receive or can get the
source code. And you must show them
these terms so they know their rights.
so you have to include a link to the mysql homepage or the source code somewhere in your programm (in the readme, maybe?)
[edit]
Conveying Non-Source Forms.
You may convey a covered work in
object code form under the terms of
sections 4 and 5, provided that you
also convey the machine-readable
Corresponding Source under the terms
of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
so a link, torrent, full copy of source are fine and it is not a derived work.
hope that answers your question.
At least that's what I get from reading the GPL. Though I'm no lawyer, so you might not want to take my word for it :)
oh and, taken from wikipedia:
Note that the copyleft applies only to the software and not to its output (unless that output is itself a derivative work of the program). For example, a public web portal running a modified derivative of a GPL'ed content management system is not required to distribute its changes to the underlying software because its output is not a derivative. A counter example is the GPL'ed GNU Bison: the parsers it outputs do contain parts of itself and are therefore derivatives which would fall under the GPL, if it were not for a special exception granted by GNU Bison.
wouldn't that mean that if you use the output of the connector in your program (which is basically what one does) that the license wouldn't apply in this case, other than distributing a copy of the connector and therefore providing a link to the homepage?

compilers for languages from 1950's and 1960's

i am trying to find the best compilers (if they are actually available) for the following languages:
ALGOL 60
TRAC
TELCOMP
Superplan
BACAIC
i don't know if any of these are still around, but it would be very helpful to get any feedback on where i could locate these.
Try Eric Raymond's retrocomputing museum. It at least has Algol 60 and Trac, along with other languages.
Of course, most of the original compilers ran on machines that are no longer in existence, but the museum also has a PDP-8 emulator.
David's post went in as mine was being written ... so vote him up!
--
ALGOL 60 and Trac (among many others - but not the other 3 on your list) can be found at The Retrocomputing Museum:
http://www.catb.org/retro/
You didn't mention any specific platforms but, there is an ALGOL 60 compiler for DOS available at the link below. A compiler, an interpreter, and the source are available.
http://www.angelfire.com/biz/rhaminisys/algol60.html
There is a free Algol 60 interpreter/compiler here.
TRAC was tricky because there's a newer CMS/bug tracker known as TRAC, but I did find one Trac compiler written in Perl.
I was unable to come up with any links for TELCOMP, superplan or BACAIC. Good luck :)
An extended version of Algol 60 is still used on the Clearpath line of computers from Unisys.
Many of the system utilities (including all the language compilers) are written in this extended version of Algol. The various variants of this language are the nearest thing these machine have to an assembler language! Here is a reference to the current manual.
Clearpath Enterprise Server Algol Programming Reference Manual
Burroughs Extended Algol for the B5500 is available as part of a complete B5500 emulator implemented in JavaScript, running in the Chrome browser. Project description and links to the code at http://www.retrocomputingtasmania.com/home/projects/burroughs-b5500