Our Project has been using iText 2.17 for a long time. Now we would like to add digital signature to our pdfs and we prefer to use iText7. Can both iText < 5.3 and 5.3+ libraries used together? Will there be a problem in class loader or all the packages different from its predecessor?
Your question starts well, but then gets confusing.
You can use iText 2 in combination with iText 5.
You can use iText 2 in combination with iText 7.
You can use iText 5 in combination with iText 7.
One can't state that you can use versions < 5.3 and versions >= 5.3 together. For instance: you can't use 5.0.0 and 5.5.9 together because they have the same major version number. You will have clashes in package names.
Summarized: all major versions have different package names, so that you can use major versions next to each other without clashes.
Related
Our team's project is entirely es6 modules (ESM) internally, but has dependencies that have not yet made esm versions.
We've created various solutions, but they are definitely not modern, mainstream solutions. By this I mean Rollup workflows which convert legacy formats to esm. Or equivalent.
So here's the question: are there now Rollup converters/plugins which can let us bundle all, or at least most, legacy formats into esm? I.e. convert commonJS, iife, umd, amd, (and other) library formats into esm, or can at least be bundled into an esm bundle?
There are plugins that are designed to do this:
https://github.com/rollup/rollup-plugin-commonjs
https://github.com/rollup/rollup-plugin-legacy
https://github.com/piuccio/rollup-plugin-amd
The CommonJS plugin should cover UMD as well. They're not caveat-free — AMD is very hard to convert to ESM in some cases, and you can do some fairly nasty stuff with CommonJS that is hard to recreate (bundlers like webpack get around it by effectively simulating a Node environment), but they handle the common cases.
For the rest, if the maintainers won't accept PRs that add an ESM build alongside the default one (some won't, frustratingly), you might have to fork — depends on what you depend on :)
Is there any type of list of what features the babel-polyfill supports? We just started using babel and i'm wondering if some of the dependencies we currently rely on can be eliminated like es6-promises & whatwg-fetch. If babel-polyfill supported promises of course there would be no need to include es6-promises.
I think after some research i figured it out. Babel-Polyfill is pretty much core.js + Regenerator Runtime . Look at those projects individually to see what features will be polyfilled. For example, at the time of this writing core.js:
Fetch:
window.fetch is not a cross-platform feature, in some environments it
makes no sense. For this reason, I don't think it should be in
core-js. Looking at a large number of requests it may be added in the
future. Now you can use, for example, this polyfill.
Promises:
Modular standard library for JavaScript. Includes polyfills for
ECMAScript 5, ECMAScript 6: promises, symbols, collections, iterators,
typed arrays, ECMAScript 7+ proposals, setImmediate, etc.
So i need whatwg-fetch but i don't need es6-promises. Tested in IE11 (which doesn't have promises) so it appears to be working.
For example, netbeans has versions like 6.9.1; 7.0.0; 7.1.1 etc. Does the second number in the hierarchy mean improvement and the first is more about introducing new functionality, which makes it more likely to have bugs. So how do I interpret these version numbers, especially if I am willing to get the most stable version?
In the general case, version numbers have no fixed semantics. A common convention is to use a "major" version number to signify major changes, and "minor" version numbers to signify small changes, but this is not cast in stone. The recent release of Linux 3.0 is a good illustration -- the major version number was incremented purely for PR value; the release was no more significant than earlier releases in the 2.xx series.
Some projects have a stable / unstable convention; odd-numbered minor version numbers are development versions, and the even-numbered minor versions are release versions. The Linux project uses this convention, as do Gnome and various other open source projects.
TeX has a playful version numbering convention of its own; it goes from 3.14, to 3.141, to 3.1415, to 3.14159 etc. (Hint: pi.)
See also http://en.wikipedia.org/wiki/Software_versioning
Each product has to describe its own version number policy.
For instance, Netbeans allude to it in its Guidelines
Usually:
the third number means: "bug fix only, no API evolution", and you can see it when checking API changes for 7.1.1, or for 7.1.2
the second number means "API changes, but still backward compatible": see 7.1 release
the first number is for "API changes, possibly not compatible with the previous versions": see 7.0 release.
You can have deprecated API fully removed, existing API modified, ...
A migration guide is involved.
Lots of other versioning policies exist out there.
See:
"Code version change “rules”")
"What version numbering scheme do you recommend?"
The official document on such policies is in semver.org: Semantic versioning.
Why don't you use the Label feature? You can add comments to this specific version and it's easy for you to find and get it in the future.
Does anyone here try to adopt xtext2 and migrate from xtext1.x to xtext2.0?
It seems xtext2 brings many new atractive features. Such as A Reusable Expression Language and Xtend: A Code Generation Language . Many performance enhancement is made to the Xtext workbench and rename capability. So any one tell you experence about xtext2? Probably this is a bit early question. But I just wait and see.
xtext2 homepage
I updated an existing, not too complex language from Xtext 1 to Xtext 2, and tried to develop a new one using Xtext2 and XBase. I had to re-run the code generation step, and also had to modify the hand-written validators, because the error and warnings locations are to be specified using literals instead of integers. E.g.
error("File does not exist with path: " + path, fileReference, ViatraTestDslPackage.FILE__PATH);
is to be replaced with
error("File does not exist with path: " + path, ViatraTestDslPackage.Literals.FILE__PATH);
Similarly, the workflow has to be changed as well to incorporate some new features: the outline API uses different fragments (outline.OutlineTreeProviderFragment and outline.QuickOutlineFragment), for rename and compare support new fragments are to be added (refactoring.RefactorElementNameFragment and compare.CompareFragment).
With my experiments of XBase it seems, that adding that to a language that already supported some kind of expressions can be labour-intensive, because either old expressions has to be replaced with XBase expressions (or at least altered in a way to make them available in XBase expressions), otherwise you have to maintain two kind of expression support in your code generator or interpreter.
To conclude my answer, I believe, if you have a simple Xtext 1.0 editor, where you mostly relied on the automatically generated features, migrating to Xtext 2.0 seems easy and recommended; however, if you customized a lot of things in manually written code, be careful, because the migration might not be straight-forward, and I have found no real migration guide.
http://www.eclipse.org/Xtext/documentation/2_0_0/213-migrating-from-1.0.php#migrating_from_1_0_x_5_4
I just find this useful link.
Also I do meet some problem especially in serialization module. Luckily in mwe2 file, it leaves a version 1.0 serialization, i use that and fix the problem when using version 2.0 serialization module. Not knowing why..
Another problem is there is a strange bug in the xtext validation. It always complain about ClassCastException. cast from String to QualifiedName error.
It is still early considering the recent release date:
The team have just presented/demo'ed XTend2 in democamps during last month (June 2011).
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
I know that there are no fixed rules about software version control but I have several questions.
1) How to upgrade versions correctly
I have a small software that I started a while ago and since i started from scratch I started with version 0.1.
As I added more functionality I have been upgrading the minor number. Now I'm in v0.5.7 (minor (.5) for new functions and revision (.7) for bug fixes and minor changes), the thing is that the program is almost complete for distribution, but now I'm "missing" several minor versions, how do you guys handle that situation? do you simply just jump the numbers?
That brings me to the second question.
2) Which is a good starting version number
I am about to start a new project. This time is not that small of a project and is going to be public and free for modifying, I do not want to have the issues mentioned above. So which would be a good starting point?
Bonus question:
3) Is it ok to make numbers above 10? like v1.25 or v2.2.30?
I haven't seen software with that kind of numbering (probably they show it only in the help section or in their web-page), again I am aware that there are no rules for that but it seems to be that there is a general consent on how to keep the version numbers.
Version numbering policies can be a bit crazy at times (see Version numbers and JSR277, or Oracle, with its Oracle Database 11g Release 2: 11.2.0.1.0.
See also Software Versioning is Ridiculous).
But you can start by looking et the Eclipse Version Number policy as a good start.
If you really think you need more than three digits, this V.R.M.F. Maintenance Stream Delivery Vehicle terminology explanation is also interesting, but more so for post 1.0 softwares, where fix pack and interim fixes are in order.
1/ "Ship it already": 1.0.0
Also known as the "1.oh-oh" version. At least, it is out there and you can begin to get feedback and iterate fast.
2/ 0.x if major features are still missing; 1.0.0 if the major features are there.
3/ Yes, but I would say only for large projects with a lifespan over several years (a decade usually)
Note that "correctly" (while being described at lenght in Semantic Versioning 2.0.0) can also be guided by more pragmatic factors:
See the announcement for Git 1.9 (Januaury 2014):
A release candidate Git v1.9-rc2 is now available for testing at the usual places.
I've heard rumours that various third-party tools do not like the two-digit version numbers (e.g. "Git 2.0") and started barfing left and right when the users install v1.9-rc1.
While it is tempting to laugh at them for their sloppy assumption, I am also practical and
do not mind calling the upcoming release v1.9.0 to help them.
If we go that route (and I am inclined to go that route at this moment), the versioning scheme will be:
The next release candidate will be v1.9.0-rc3, not v1.9-rc3;
The first maintenance release for v1.9.0 will be v1.9.1 (and Nth one be v1.9.N); and
The feature release after v1.9.0 will be either v1.10.0 or v2.0.0, depending on how big the feature jump we are looking at.
Update Feb. 2019: semver itself is about to evolve (again, after semver2).
See "What’s next for SemVer", and semver/semver/CONTRIBUTING.
At our company, we are using four token versioning concept. It's something like a.b.c.d kind:
(major).(feature).(revision).(bug/refactoring)
It's related with issue types which we use in our development life cycle. We can track what has done or changed between two following versions at a glance. By comparing two following version numbers you can identify number and types of issues done.
For more information, full documentation is here.
Even i faced this problem with defining the version number while developing with CRM, since i wanted to deploy the same build across all the systems. I found a way to resolve it with System value + Manual + randoms.
The version information for an assembly consists of four values:
Major Version . Minor Version . Build Number . Revision
Which makes the initial Version 1.0.0.0 by default. To make more sense i replace it with
TFS Release . TFS Sprint . Change Number . Incremented build number
Suppose in your TFS a single release consists 30 sprints and after that the release becomes 2, so the values for the first release will be:
TFS Release : 1
If the current sprint is 4, the TFS Sprint will have
TFS Sprint : 4
Now the third part is managed by the developer, for a initial version we can have 0 which can be incremented +1 for each ChangeRequest or BugFix.
Change Number: 0 -- represent initial version
Change Number: 1 -- represent change
Change Number: 2 -- represent bugfix
Although for every bugfix there might be a change in code, so it represents the code change as default. But to more more sense you can have the odd number to represent the change and even number to represent the bugfix.
The last part was the default number, thankfully .Net allows us to put * to put a default build number. It keeps on increment with every compile/build which provides a signature stamp, if someone else rebuilds it changes.
How to Implement:
Open the AssemblyInfo.cs in the Properties folder and Comment the AssemblyFileVersion, this will make the AssemblyFileVersion & AssemblyVersion same.
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.4.2.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
So the final version will come out as: 1.4.2.4512 or something
The benefits of this approach is that you can track the Task for which the code is generated. Just by looking at the version number i can say, "Hey its the release 1 for sprint 4 and with some code change.
Semantic Versioning is pretty much de facto nowadays.
I'm "missing" several minor versions, how do you guys handle that situation?
You're not missing versions. It's perfectly acceptable to… (see next answer)
Which is a good starting version number
Depends if people are using your code in production. If it's already used in production jump straight to v1.0.0. But since you said your code is alpha, beta, or rc (release candidate) quality but you're planning to move to production quickly consider starting with v1.0.0-[alpha].N where [alpha] is the software grade and N is a build number or other enumerable value.
Is it ok to make numbers above 10? like v1.25 or v2.2.30?
That's the idea. Lexicographical sorting may not work but that's okay.