Annotation File Utilities Changelog
This is the changelog for the
Annotation File Utilities.
-
Version 3.38.0 (released September 1, 2023):
-
Version 3.37.0 (released August 1, 2023):
-
Version 3.36.0 (released July 3, 2020):
- Minor bug fixes and improvements.
- Fixed issues
#582.
-
Version 3.35.0 (released June 1, 2023):
- Runs under JDK 20 -- that is, it runs on a version 20 JVM.
-
Version 3.34.0 (released May 2, 2023):
-
Version 3.33.0 (released April 3, 2023):
- Requires JDK 11 to build. Still runs on JDK 8 or later.
- Command-line option
--comments
is no longer supported.
-
Version 3.32.0 (released March 2, 2023):
-
Version 3.31.0 (released February 17, 2023):
-
Version 3.30.0 (released February 2, 2023):
-
Version 3.29.0 (released January 5, 2023):
-
Version 3.28.0 (released December 1, 2022):
-
Version 3.27.0 (released November 1, 2022):
-
Version 3.26.0 (released October 3, 2022):
- Runs under Java 18.
- Renamed all
annotator*
packages to
org.checkerframework.afu.annotator*
, and
renamed all scenelib*
packages to
org.checkerframework.afu.scenelib*
.
- Code is now formatted with Spotless; use
./gradlew spotlessCheck
or
./gradlew spotlessCheck
.
-
Version 3.25.0 (released September 1, 2022):
-
Version 3.24.0 (released August 3, 2022):
- Performance improvements.
-
Version 3.23.0 (released July 11, 2022):
-
Version 3.22.2 (released June 14, 2022):
-
Version 3.22.1 (released June 1, 2022):
- Minor bug fixes and improvements.
-
Version 3.22.0 (released May 2, 2022):
- Minor bug fixes and improvements.
-
Version 3.21.4 (released April 1, 2022):
- Minor bug fixes and improvements.
-
Version 3.21.3 (released March 1, 2022):
- Minor bug fixes and improvements.
-
Version 3.21.2 (released February 1, 2022):
- Minor bug fixes and improvements.
-
Version 3.21.1 (released January 7, 2022):
- Minor bug fixes and improvements.
-
Version 3.21.0 (released December 17, 2021):
- Minor bug fixes and improvements.
-
Version 3.20.0 (released December 6, 2021):
- Minor bug fixes and improvements.
-
Version 3.19.0 (released November 1, 2021):
- Added support for JDK 17, dropped support for JDK 16.
-
Version 3.18.1 (released October 4, 2021):
- Minor bug fixes and improvements.
-
Version 3.18.0 (released September 1, 2021):
- Minor bug fixes and improvements.
-
Version 3.17.0 (released August 2, 2021):
- Minor bug fixes and improvements.
-
Version 3.16.0 (released July 13, 2021):
- Added support for JDK 16.
-
Version 3.15.0 (released June 18, 2021):
- Minor bug fixes and improvements.
-
Version 3.14.0 (released June 1, 2021):
- Minor bug fixes and improvements.
-
Version 3.13.0 (released May 3, 2021):
-
Improved handling of implicit default constructors.
-
Version 3.12.0 (released April 1, 2021):
- Minor bug fixes and improvements.
-
Version 3.11.0 (released March 1, 2021):
- Minor bug fixes and improvements.
-
Version 3.10.0 (released February 1, 2021):
- Implementation detail: Uses real ASM rather than ASMX.
-
Version 3.9.17 (released January 13, 2021):
- Minor bug fixes and improvements.
-
Version 3.9.16 (released January 4, 2021):
- Minor bug fixes and improvements.
-
Version 3.9.15 (released December 1, 2020):
-
Better checking of annotation validity. This may require you to pass a classpath.
- Minor bug fixes and improvements.
-
Version 3.9.14 (released November 2, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.13 (released October 1, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.12 (released September 1, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.11 (released August 3, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.10 (released July 1, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.9 (released June 1, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.8 (released May 3, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.7 (released April 1, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.6 (released March 2, 2020):
- Minor bug fixes and improvements.
- Fixed issues
#269.
-
Version 3.9.5 (released February 3, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.4 (released January 3, 2020):
- Minor bug fixes and improvements.
-
Version 3.9.3 (released December 2, 2019):
- Minor bug fixes and improvements.
-
Version 3.9.2 (released November 1, 2019):
- Minor bug fixes and improvements.
-
Version 3.9.1 (released October 1, 2019):
- Minor bug fixes and improvements.
-
Version 3.9.0 (released August 30, 2019):
- Now uses the Java 9 javac API. The manual describes how to
satisfy this dependency, in a way that works on a Java 8 JVM. Running the AFU on
a Java 9+ JVM is also supported.
- Minor bug fixes and improvements.
-
Version 3.8.11 (released August 22, 2019):
- Minor bug fixes and improvements.
-
Version 3.8.10 (released August 1, 2019):
- Minor bug fixes and improvements.
-
Version 3.8.9 (released July 3, 2019):
- Minor bug fixes and improvements.
- Fixed issues
#216 and
#220.
-
Version 3.8.8 (released June 3, 2019):
- Added command-line arguments
-cp
and -classpath
to extract-annotations
.
- Added command-line argument
--verbose
to
extract-annotations
and insert-annotations
.
- Removed command-line argument
-v
from
extract-annotations
; use --version
instead.
insert-annotations-to-source
does a better check
for existing annotations, to avoid inserting a duplicate annotation.
- Fixed issues
#200 and
#201.
-
Version 3.8.7 (released May 1, 2019):
-
Version 3.8.6 (released April 3, 2019):
- Minor bug fixes and improvements.
-
Version 3.8.5 (released March 1, 2019):
- Minor bug fixes and improvements.
-
Version 3.8.4 (released February 3, 2019):
- Fix bug in which imports were not added for annotations on constructor invocations.
- Documentation clarifies that insert-annotations[-to-source] modifies its target.
-
Version 3.8.3 (released December 5, 2018):
- Minor bug fixes and improvements.
-
Version 3.8.2 (released November 4, 2018):
- Minor bug fixes and improvements.
-
Version 3.8.1 (released October 3, 2018):
- Minor bug fixes and improvements.
-
Version 3.8.0 (released August 30, 2018):
- Requires a Java 8 JVM to execute.
annotation-file-utilities.jar
is now a skinny jar.
annotation-file-utilities-all.jar
is a fat jar.
- Implementation detail: ASMX now uses package
org.objectweb.asmx
,
rather than org.objectweb.asm
.
- Fixed issues
#168
and
#174.
-
Version 3.6.55 (released July 2, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.54 (released June 1, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.53 (released May 2, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.52 (released April 2, 2018):
-
Version 3.6.51 (released March 1, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.50 (released February 1, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.49 (released January 2, 2018):
- Minor bug fixes and improvements.
-
Version 3.6.48 (released December 1, 2017):
- Moved scene-lib classes into package
scenelib
(fixes issue
#121).
- Fixed issues
#144
and
#145.
-
Version 3.6.47 (released November 2, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.46 (released September 29, 2017):
-
Version 3.6.45 (released September 5, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.44 (released August 3, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.43 (released July 3, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.42 (released June 1, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.41 (released May 1, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.40 (released April 3, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.39 (released March 1, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.38 (released Jan 20, 2017):
-
Version 3.6.37 (released Jan 3, 2017):
- Minor bug fixes and improvements.
-
Version 3.6.36 (released Dec 1, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.35 (released Nov 2, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.34 (released Oct 3, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.33 (released Sep 16, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.32 (released Sep 1, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.31 (released August 1, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.30 (released July 1, 2016):
- Minor bug fixes and improvements.
-
Version 3.6.29 (released Jun 1, 2016):
-
extract-annotations no longer puts package annotations on non-existent class,
fixing issue #117.
-
Closes issue #120.
Version 3.6.28 (released May 1, 2016):
-
AScene
now has a copy constructor and implements
Cloneable
.
-
Version 3.6.27 (released Apr 1, 2016):
-
The annotation file format permits use of a class name, in addition to
<init>
, to specify a constructor.
-
Closes issues
#70
and
#88.
-
Version 3.6.26 (released Mar 1, 2016):
- Avoids reinserting an annotation that already exists in comments, fixing Issue
#114.
-
Version 3.6.25 (released Feb 1, 2016):
- Uses system javac to compile the executable program, thus enabling Java 7 execution.
- Clears set of required imports after processing each source file, fixing Issue
#111.
- Escapes String fields of annotations, fixing Issue
#112.
-
Version 3.6.24 (released Jan 4, 2016):
- Fixes Issue
#108
by adding a
LICENSE.txt
file.
- Fixes offset calculation for wide JVM instructions.
- Makes minor improvements to build process.
-
Version 3.6.23 (released Dec 1, 2015):
- Fixes Issue
#106.
- Makes minor improvements to documentation and build process.
-
Version 3.6.22 (released Nov 9, 2015):
- Minor bug fixes and improvements.
-
Version 3.6.21 (released Oct 24, 2015):
- Minor bug fixes and improvements.
-
Version 3.6.20 (released Oct 8, 2015):
- Minor bug fixes and improvements.
-
Version 3.6.19 (released Sep 1, 2015):
- Avoids importing the same annotation name from multiple packages (Issue
#101).
- Fixes some bugs (including Issues
#100 and
#102)
pertaining to
extends
clause generation.
-
Version 3.6.18 (released Aug 4, 2015):
-
Version 3.6.17 (released July 1, 2015):
-
Minor bug fixes and improvements.
-
Version 3.6.16 (released June 1, 2015):
-
Fixes multiple crash-causing bugs in
insert-annotations-to-source
.
-
Version 3.6.15 (released May 1, 2015):
-
Allows annotations on constituents of an intersection type cast without the use of the AST path format.
-
Fixes assorted bugs in
insert-annotations
.
-
Version 3.6.14 (released April 17, 2015):
-
Fixes numerous minor bugs in
insert-annotations
and insert-annotations-to-source
.
-
Version 3.6.13 (released March 2, 2015):
-
Extends support for lambda expressions, member references, and type arguments of static method calls and member references to
extract-annotations
and insert-annotations
.
-
Slightly changes JAIF format for the new features. (See file format documentation for details.)
-
Version 3.6.12 (released January 30, 2015):
-
Adds support for lambda expressions, member references, and type arguments of static method calls and member references to
insert-annotations-to-source
.
-
Version 3.6.11 (released December 19, 2014):
-
Fixes more insertion logic bugs, including errors in handling generic arrays.
-
Version 3.6.10 (released November 26, 2014):
-
Fixes many bugs, mostly in AST path-based insertion logic.
-
Version 3.6.9 (released October 30, 2014):
-
Minor bug fixes and improvements.
-
Version 3.6.8 (released September 24, 2014):
-
Fixes numerous bugs in AST path-based insertion logic.
-
Version 3.6.7 (released August 1, 2014):
-
Improves Java 9 support.
-
Fills in some previously missing cases for AST path-based insertion specifications.
-
Version 3.6.6 (released July 1, 2014):
-
Fixes bug affecting inner array types of new[] expressions in the AST path-based insertion logic.
-
Fixes JAIF generation bugs involving insert-annotation and insert typecast within methods and fields.
-
Version 3.6.5 (released June 2, 2014):
-
Generates extends bounds when necessary for annotation insertion.
-
Fixes assorted bugs in the AST path-based insertion logic.
-
Version 3.6.4 (released May 1, 2014):
-
Expands AST path support to cover every AST node within a class declaration.
-
Abbreviates enum tags for annotations if
--abbreviate
is selected.
-
Generates explicit default constructors when necessary for annotation insertion.
-
Version 3.6.3 (released Apr 2, 2014):
-
Eliminates insert-annotation problems with handling Java 8 class files.
-
Corrects annotation placement within a qualified type name.
-
Fills in gaps in AST Path API. All (Java 7) non-declaration nodes can now be identified by a path from an enclosing declaration.
-
Expands scene-lib API with visitor framework and new class
APIIndex
, which provides a cache that maps Java abstract syntax tree nodes to AST paths as defined in the annotation file format specification.
-
Version 3.6.2 (released Mar 5, 2014):
-
Expands scene-lib API with visitor framework and new class
APIIndex
, which provides a cache that maps Java abstract syntax tree nodes to AST paths as defined in the annotation file format specification.
-
Version 3.6.1 (released Feb 19, 2014):
-
Adds missing cases for AST path-based annotation/cast insertion.
-
Version 3.5.9 (released Jan 2, 2014):
-
Fixes assorted minor bugs.
-
Version 3.5.8 (released Dec 9, 2013):
-
Creates output directory in current working directory (by default), rather than relative to input pathname.
-
Recognizes "instanceinit" keyword in JAIF for adding annotations inside instance initializers.
-
Corrects syntax of results of inserting annotations on bare array literals.
-
More fully treats enum, interface, and annotation declarations in accordance with the rules for class declarations.
-
Version 3.5.7 (released Nov 15, 2013):
-
Handles type paths with INNER_TYPE.
-
Disallows annotations on generic array type bounds and on wildcard bounds in "instanceof" expressions, since Java 8 prohibits type bounds in those locations.
-
Vastly improves performance when index file covers numerous source files, by filtering out irrelevant insertions at an earlier stage.
-
Avoids stack overflow during regex matching.
-
Version 3.5.6 (released Oct 23, 2013):
-
Adds "insert-annotation" to JAIF format, allowing the use of AST paths to specify source locations for annotation insertion (which previously was possible only for typecast insertions).
-
For consistency with
extract-annotations
, insert-annotations-to-source
now matches generic method types in the source with JAIF specifications for their least upper bounds.
-
Allows annotations on inner type declarations of parameterized types.
-
Avoids spurious code location matches on anonymous inner subclasses of an outer class.
-
Works around Java regex bug that on some input causes an infinite loop in the Matcher.
-
Fixes many other bugs, most involving receiver insertions.
-
No longer aborts on (non-fatal) warnings found during the
javac
type-checking phase of insert-annotations-to-source
.
-
Version 3.5.5 (released Aug 28, 2013):
-
Allows annotation insertion at constructor "return type" as per the specification.
-
Fixes assorted bugs dealing with type qualification, inner classes, and receiver insertion.
-
Version 3.5.4 (released Aug 1, 2013):
-
Allow the use of command-line argument files. Argument file rules are identical to those of javac.
-
The Annotation File Utilities now appropriately handles vararg parameters.
-
Minor documentation improvements.
-
Version 3.5.3 (released May 1, 2013):
-
Don't depend on bootstrap javac files.
-
Other minor improvements.
-
Version 3.5.2 (released April 4, 2013):
-
Allow annotations on compound types of a cast insertion.
-
Added
--print_error_stack
command-line option to
insert-annotations-to-source
tool to print a stack trace on
an error.
-
Various bug fixes.
-
Improvements to the Annotation File Format manual.
-
Clarified "Grammar" section by reordering and adding more details.
-
Added "Design and Implementation Details" section.
-
Version 3.5.1 (released March 1, 2013):
-
Small improvements to error messages when parsing JAIF files and for
illegal source code insertions.
-
Installation instruction and manual improvements.
-
Better handling of source code insertions in anonymous and local
classes.
-
Allow source code insertions in a local class (a class defined
within a method).
-
Bug fixes for anonymous and local class indexes.
-
Don't traverse into nested classes when calculating a source code
index.
-
Improved support for source code method declaration receiver parameter
insertions.
-
Use the full type name (Outer.Inner1.Inner2) for receiver insertions
in inner classes.
-
Allow annotation insertions on compound types of method declaration
receiver parameters.
-
Insert source code annotations in the semantically correct place for
qualified types.
-
For bytecode annotation extraction and insertion read and put "local"
type annotations in the Code attribute, not the Method attribute.
-
Version 3.5 (released February 1, 2013):
-
Updated to JSR308 bytecode representation and receiver parameter syntax.
-
Support source code insertion of annotated casts.
-
Support adding annotations to bytecode for type casts with intersection
types.
-
Version 3.4 (released September 11, 2012):
-
Adapted to underlying changes in JSR 308.
-
Support .class literals as annotation attributes.
-
Version 3.3 (released September 20, 2011):
-
Improved support for annotations on array creation expressions.
-
Small tweaks to the code and documentation.
-
Version 3.2 (released June 18, 2011):
-
Support source code indexes, in contrast to the bytecode
centric indexes supported so far, which makes it easier for
source code centric tools to emit AFU files.
See Section "Support for source code indexes" in the
manual.
-
Support annotating the bounds of class and method type
parameters and of wildcards, in particular also support
implicit bounds and make them explicit.
Also support adding declaration annotations on type parameters.
-
Better support for anonymous inner classes.
-
Improve handling of already existing annotations, in
particular for generic types.
-
Consistently do matching on methods using the erased signature.
-
Specify annotations on extends and implements clauses.
-
Handle interfaces, enums, etc. like classes.
-
Numerous small bug fixes and improvements.
-
Version 3.1 (released September 18, 2010):
-
Don't duplicate annotations that are in the source already.
-
Add
--omit-annotation
option to omit a given annotation
(example: @ThisMutable
, which is the default and need not be
inserted in source files).
-
Bug fixes related to inner classes, array levels, multiple methods
with same signature but different return type (impossible in Java
code, but can occur in class files), parameter indices.
-
Switch from utilMDE library to
plume-lib.
-
Version 3.0 (released December 21, 2009):
-
Handle meta-annotations.
Previously, the Annotation File Utilities didn't handle meta-annotations
(annotations that are written on an annotation type declaration); in fact,
AFU simply fabricated retention information. Now, meta-annotations are
handled uniformly with other annotations.
-
Distinguish type annotations from declaration annotations.
Previously, AFU assumed that all annotations were type annotations. Now,
this information is looked up from the meta-annotations and is
distinguished in the file format (see below).
-
Read annotations from classfiles.
Previously, AFU created partial information for annotations in an ad hoc
way, and classfile reading did not work. (The focus was on inserting
annotations in class files, not reading annotations from class files.)
Now, classfile reading is operational, and it is often not necessary to
declare annotations in an annotation file. However, if the annotation is
declared in the annotation file, it should be consistent with its
declaration in the class file.
- Changes to annotation file format.
- Indicating meta-annotations
annotation visible @Nullable:
becomes
annotation @Nullable: @Retention(value=RUNTIME)
and if it's a type annotation, it should be
annotation @Nullable: @Retention(value=RUNTIME) @java.lang.annotation.Target(value={TYPE_USE})
- Locations for type and declaration annotations.
If p2.B is a declaration annotation on a method, it is written as before:
method foo(Ljava/util/Set;)V: @p2.B
If p2.B is a type annotation on a method return type, it is written in a
new location:
method foo(Ljava/util/Set;)V:
return: @p2.B
Fields and method parameters are treated similarly, but with
type
marker instead of return
. So if p2.A is a
declaration annotation targeting the field, while p2.B is a type
annotation on the field, the field would be declared as:
field s: @p2.A
type: @p2.B
Furthermore, inner-type:
is permitted only after a keyword
that introduces a type, such as type
, return
, and
receiver
, to prevent confusion (though the file format
becomes slightly more verbose).
- Permit qualified names in several places that only identifiers were
permitted before. This enables use of names that contain periods, such
as inner classes, and also fully-qualified names.
- Permit two shorthands in annotation uses, as in Java. If there is a
single field named "value", then its name may be omitted: @A(1) instead
of @A(value=1). If an array has only one element, the braces may be
omitted: @B(value=1) instead of @B(value={1}). Both
shorthands may be combined: @B(1) instead of @B(value={1}).
-
Version 2.3.3 (released August 18, 2009):
-
Version 2.3.2 (released August 14, 2009):
- Relax file format: receiver may precede parameters (in spec &
implementation), parameters may omit "#" (in implementation only)
-
Version 2.3.1 (released August 12, 2009):
-
Version 2.3 (released July 29, 2009):
- Support
-i --in-place
argument.
- Fix incorrect array brackets in tests.
- Fix inserting annotations on receivers.
- Improve documentation.
- Improve error handling.
-
Version 2.2 (released December 7, 2008):
- Permit Main to process multiple files at a time.
- Don't re-insert annotations that are already present.
- Add a space before annotation if there isn't one there.
- Fix problems with array syntax; now adheres to the current JSR
308 syntax.
- Improve error handling.
- Code reorganization: remove subdirectories and classes that
added complexity without commensurate functionality.
-
Version 2.1.2 (released April 28, 2008):
Minor updates to the “Annotation File Format Specification” (PDF, HTML).
-
Version 2.1.1 (released May 31, 2007):
Added support for two new annotation target_types; consult the
classfile specification (PDF,
HTML).
-
Version 2.1 (released May 4, 2007):
Modified overall setup of distribution to be easier to understand.
-
Version 2.0 (released May 1, 2007):
Initial public release.
-
Version 1.0 (released March 19, 2007):
Preliminary release.
The
insert-to-annotations-source
tool only
operates on class, field and method signatures.
The original developer (through version 2.1.2) was Jaime Quinonez.


Tooling Examples
Showcasing common use cases for
@microsoft/fast-tooling
and
@microsoft/fast-tooling-react
The examples in this site serve to better illustrate:
- How to use the message system
- How to use the available React components
Additionally each example is encapsulated in its own folder which can be copied as used as a starting point.


A no-way ticket
For the time in-between leaving Bulgaria and finding permanent(ish) accommodation in Berlin, we’ve been grappling with the wondrous intricacies of German bureaucracy. One of the more delightful episodes involves figures out how to successfully catch the metro.
In the UK there seems to be a general perception of Germany that it is a very efficient and punctual place, and therefore the metro services must be inefficient and punctual. But not so.
Germany opts for a metro system which has no ticket barriers, unlike the London and New York metros, where barriers and transport staff stop you from skipping the fare. The barrierless German platforms ask you to buy a ticket — stamp the ticket to validate it at a separate location — before getting on the metro.
Highlight
In the UK there seems to be a general perception of Germany that it is a very efficient and punctual place, and therefore the metro services must be inefficient and punctual. But not so.
The ticket people (called “controllers” by the locals, in appropriately authoritarian undertones) are dressed in plain clothes, and can only be identified once they begin wielding ticket machines.
This leads to a constant state of paranoia, with the rarity of inspectors egging you on to risk the fine and become a criminal for your short twenty-minute journey. But then you nervously eye up different commuters with extreme suspicion as might in a John le Carré, where Russian spies are replaced by well-disguised ticket inspectors.
On one occasion, we overheard a very intense conversation between a Pakistani-looking woman and what appeared to be two burly German citizens asking very loudly if the woman could show her residency card. It wasn’t until they took out a machine to fine her that we realised they weren’t ordinary citizens.
The fine is only €60, though, and with a €2.90 single ticket it doesn’t take you long to work out how much you’d save if you only got, say, a fine every month and managed to dodge it the rest of the time.
We found out that time how frustrating, and seemingly pointless German bureaucracy could be. We since found ourselves dealing with an abundance of contradictory advice, ranging from tax issues to Covid tests.
One piece of advice we got was to make very clear we were "not a part of the church" because admiting you are a member of a church, any kind of church anywhere, will land you an extra 20% tax in Geramny. Like, forever. Unless you say you've nothing to do with the church, in which case you avoid it forever. But when we turned up, we heard no word of it. Were we a defect member of the church? We may never find out.


Kumalasari Pamer Bibir Dower, Nia Ramadhani Bicara Bujet Shoping 19 Nov 2019, 16:20 by Denny Related Videos


10.56. Release 0.75
Hive Changes
- The Hive S3 file system has a new configuration option, hive.s3.max-connections, which sets the maximum number of connections to S3. The default has been increased from 50 to 500.
- The Hive connector now supports renaming tables. By default, this feature is not enabled. To enable it, set hive.allow-rename-table=true in your Hive catalog properties file.
General Changes
- Optimize count() with a constant to execute as the much faster count(*)
- Add support for binary types to the JDBC driver
- The legacy byte code compiler has been removed
- New aggregation framework (~10% faster)
- Added max_by() aggregation function
- The approx_avg() function has been removed. Use avg() instead.
- Fixed parsing of UNION queries that use both DISTINCT and ALL
- Fixed cross join planning error for certain query shapes
- Added hex and base64 conversion functions for varbinary
- Fix the LIKE operator to correctly match against values that contain multiple lines. Previously, it would stop matching at the first newline.
- Add support for renaming tables using the ALTER TABLE statement.
- Add basic support for inserting data using the INSERT statement. This is currently only supported for the Raptor connector.
JSON Function Changes
The json_extract() and json_extract_scalar() functions now support the square bracket syntax:
SELECT json_extract(json, '$.store[book]');
SELECT json_extract(json, '$.store["book name"]');
As part of this change, the set of characters allowed in a non-bracketed path segment has been restricted to alphanumeric, underscores and colons. Additionally, colons cannot be used in a un-quoted bracketed path segment. Use the new bracket syntax with quotes to match elements that contain special characters.
Scheduler Changes
The scheduler now assigns splits to a node based on the current load on the node across all queries. Previously, the scheduler load balanced splits across nodes on a per query level. Every node can have node-scheduler.max-splits-per-node splits scheduled on it. To avoid starvation of small queries, when the node already has the maximum allowable splits, every task can schedule at most node-scheduler.max-pending-splits-per-node-per-task splits on the node.
Row Number Optimizations
Queries that use the row_number() function are substantially faster and can run on larger result sets for two types of queries.
Performing a partitioned limit that choses N arbitrary rows per partition is a streaming operation. The following query selects five arbitrary rows from orders for each orderstatus:
SELECT * FROM (
SELECT row_number() OVER (PARTITION BY orderstatus) AS rn,
custkey, orderdate, orderstatus
FROM orders
) WHERE rn <= 5;
Performing a partitioned top-N that chooses the maximum or minimum N rows from each partition now uses significantly less memory. The following query selects the five oldest rows based on orderdate from orders for each orderstatus:
SELECT * FROM (
SELECT row_number() OVER (PARTITION BY orderstatus ORDER BY orderdate) AS rn,
custkey, orderdate, orderstatus
FROM orders
) WHERE rn <= 5;
Use the EXPLAIN statement to see if any of these optimizations have been applied to your query.
SPI Changes
The core Presto engine no longer automatically adds a column for count(*) queries. Instead, the RecordCursorProvider will receive an empty list of column handles.
The Type and Block APIs have gone through a major refactoring in this release. The main focus of the refactoring was to consolidate all type specific encoding logic in the type itself, which makes types much easier to implement. You should consider Type and Block to be a beta API as we expect further changes in the near future.
To simplify the API, ConnectorOutputHandleResolver has been merged into ConnectorHandleResolver. Additionally, ConnectorHandleResolver, ConnectorRecordSinkProvider and ConnectorMetadata were modified to support inserts.
Note
This is a backwards incompatible change with the previous connector and type SPI, so if you have written a connector or type, you will need to update your code before deploying this release. In particular, make sure your connector can handle an empty column handles list (this can be verified by running SELECT count(*) on a table from your connector).


'Thomas Cook crash almost ruined my marriage proposal'
It could have been a double blow for Corryn Banham and boyfriend Jordon Parkinson. He planned a surprise proposal to Corryn, 24, during a holiday to Crete, but this had to be abandoned after Thomas Cook collapsed in September.
Luckily Corryn's mum and dad, who were in on the plan, stepped in to pay for a holiday to Majorca and Jordon, 27, was able to pop the question. "It could have ruined everything," said Corryn, a sales assistant who lives in Stroud, Kent.
Now they want to repay the hundreds of pounds back to Corryn's parents, but face more months of delay until the refund is processed. "We couldn't afford another holiday, but my parents said we could pay them back when our refund arrives," she said.
Like thousands of other disappointed Thomas Cook customers, she registered for a refund on 7 October, the first day the process opened. Travel regulator the Civil Aviation Authority (CAA) - which has vowed to refund all Atol-protected payments - had told those customers to expect their money within 60 days.
But last week the CAA warned thousands of customers that payment would be delayed while further details are collected - and Corryn and Jordon are among them.
She said: "I was contacted on the 59th day after submitting my claim, advising that because our package flights were with EasyJet, I have to declare either: 1) I have no plans to fly on my future flights (even though our holiday was 2 October), or 2) I did not fly on my past flight.
"They've sent us two identical forms. I emailed the claims company asking for the correct form and they've got back to say it takes 60 working days for a response to an email.
"So by the time I get a response, fill the correct form out, and send it back. We're looking at nine months total time for my refund to be correctly processed.
 I am stressed, having panic attacks, and now my parents have been left short before Christmas when we should have received our refund."
On Monday, the CAA said about 40,000 customers owed money had been paid within the 60-day period, but that some 27,000 faced delay.
Last week CAA boss Richard Moriarty thanked consumers for their patience, saying the regulator was working through "the UK travel industry's largest ever refunds programme".
He added that the refunds operation had been challenging due to the potential for fraudulent claims.
"I appreciate that this is a concerning time for Thomas Cook customers who are waiting for their refunds, particularly at this time of the year," Mr Moriarty said.
'High call volumes'
While the CAA said it had paid all first-day claims not requiring extra verification, some told the BBC they had still not received their money on Monday.
Billy Latham said: "I contacted the CAA on Saturday and was told my money was paid on Friday and if it did not hit my bank account on Monday to call back.
"Well Monday is here and no payments whatsoever, no one at the CAA is picking up the phones and even putting an answer message on stating they are too busy to speak with me due to high call volumes.
"The only question on my lips and the thousands of others with valid claims is 'when will we get our money back?'"
Some 300,000 Thomas Cook claims have been received so far, 215,000 of which have been confirmed as valid. However, this figure includes about 90,000 direct debit customers in October whose money was automatically returned.
The CAA says about 40,000 of the cancelled holidays eligible for a refund have still not been claimed for. Customers have until September next year to submit the online form.
Thomas Cook collapsed on 23 September, after failing to obtain rescue funds from its banks. Some 150,000 travellers had to be repatriated back to the UK during a two-week operation run by the CAA.


com.jme3.animation
package contains various classes
for managing animation inside a jME3 application. Currently, the majority
of classes are for handling skeletal animation. The primary control class is
the {@link com.jme3.animation.AnimControl}, through which animations can be played,
looped, combined, transitioned, etc.
// Create or load a model with skeletal animation:
Spatial model = assetManager.loadModel("...");
// Retrieve the AnimControl.
AnimControl animCtrl = model.getControl(AnimControl.class);
// Create an animation channel, by default assigned to all bones.
AnimChannel animChan = animCtrl.createChannel();
// Play an animation
animChan.setAnim("MyAnim");
jME3 uses a system of bone-weights: A vertex is assigned up to 4 bones by which
it is influenced and 4 weights that describe how much the bone influences the
vertex. The maximum weight value being 1.0, and the requirement that all 4 weights
for a given vertex must sum to 1.0. This data is specified
for each skin/mesh that is influenced by the animation control via the
{link com.jme3.scene.VertexBuffer}s BoneWeight
and BoneIndex
.
The BoneIndex buffer must be of the format UnsignedByte
, thus
placing the limit of up to 256 bones for a skeleton. The BoneWeight buffer
should be of the format Float
. Both buffers should reference 4
bones, even if the maximum number of bones any vertex is influenced is less or more
than 4.
If a vertex is influenced by less than 4 bones, the indices following the last
valid bone should be 0 and the weights following the last valid bone should be 0.0.
The buffers are designed in such a way so as to permit hardware skinning.
The {@link com.jme3.animation.Skeleton} class describes a bone heirarchy with one
or more root bones having children, thus containing all bones of the skeleton.
In addition to accessing the bones in the skeleton via the tree heirarchy, it
is also possible to access bones via index. The index for any given bone is
arbitrary and does not depend on the bone's location in the tree hierarchy.
It is this index that is specified in the BoneIndex VertexBuffer mentioned above
, and is also used to apply transformations to the bones through the animations.
Every bone has a local and model space transformation. The local space
transformation is relative to its parent, if it has one, otherwise it is relative
to the model. The model space transformation is relative to model space.
The bones additionally have a bind pose transformation, which describes
the transformations for bones when no animated pose is applied to the skeleton.
All bones must have a bind pose transformation before they can be
animated. To set the bind pose for the skeleton, set the local (relative
to parent) transformations for all the bones using the call
{@link com.jme3.animation.Bone#setBindTransforms(com.jme3.math.Vector3f, com.jme3.math.Quaternion, com.jme3.math.Vector3f) }.
Then call {@link com.jme3.animation.Skeleton#updateWorldVectors() } followed by
{@link com.jme3.animation.Skeleton#setBindingPose() }.
Animations are stored in a HashMap object, accessed by name. An animation
is simply a list of tracks, each track describes a timeline with each keyframe
having a transformation. For bone animations, every track is assigned to a bone,
while for morph animations, every track is assigned to a mesh.


{% trans "Please complete the following information in order to submit your order." %}
{% if form.errors %}
{% blocktrans count form.errors|length as count %}Please correct the following error:{% plural %}Please correct the following errors:{% endblocktrans %}


You can find interactive demonstration pages when scroll down. The following interactive demos are built with Twitter bootstrap framework and AngularJS. More will be coming soon ...
When I found the original source from codepen and it was using a hard coded Array data and filter directive for filtering the data. Then I decided to make it little challenging and to learn something from it. First step I made was read the data from attached JSON data file. It worked well. Still didn't satisfied what have done. I needed something more interesting that I don't need to write a hard coded data. So I decided to attach a external JSON data from someones server. In the process I have learnt about JSON type difference on Angularjs. started with 10 lines of code then it shrinked into one line code. It was pretty awesome practice.
Twitter bootstrap, Angularjs, HTML5, CSS3
ng- directives and ng- basics like app module, controller, templating etc
I've done two step improvement done on this example. First I've converted the hard coded array data into json file and then implement into the code by following method:
$http.get({'file.json'})
.success(function(data) {...}
After this step I needed to pull data from different server. Therefore needed a little change one this line
$http.jsonp('URL.json?callback=JSON_CALLBACK' )
.then( function ( response ) {..}
One of my AngularJS experiment , practicing with ngRouting and template(ing). This is a interactive Single Page Application demonstration that can provide the most common AngularJS functions.
Twitter bootstrap, Angularjs, Firebase, HTML5, CSS3
ng- directives and ng- basics like app module, controller, templating etc
I've created simple SPA with ng- routing. It worked well the I started adding more functional
$http.get({'file.json'})
.success(function(data) {...}
After this step I needed to pull data from different server. Therefore needed a little change one this line
$http.jsonp('URL.json?callback=JSON_CALLBACK' )
.then( function ( response ) {..}


new Base()
Extends: mi2JS(core).NodeWrapper
Base class for all components. Goes beyond simple NodeWrapper to add parent/child/children relationship. Also adding other functionalities needed for component based composition of an application.
Base class for all components. Goes beyond simple NodeWrapper to add parent/child/children relationship. Also adding other functionalities needed for component based composition of an application.
Methods
-
__init()
-
initialize the compoenent if not initialized already. Can be called more than once, but only executes the first time. Subsequent calls are ignored.
If not initialized does this in sequence:- initTemplate - apply template2
- parseChildren - parse DOM nodes (recusrsion stops when a child component is foud)
- initChildren - initialize child components (here the recursion continues again)
- Fire init event via fireEvent (on_init will be called actually)
-
addListener(object)
-
Parameters:
Name Type Description object
Object -
expandVars(data)
-
Expand data expressions in the component and the children. If you need to hide the expressions before the data is set first time call this.loadExpander(); during component initialization.
Parameters:
Name Type Description data
Object -
expandVars(data)
-
By default setValue calls this.expandVars. Input components for example override setValue for purpose of setting input values
Parameters:
Name Type Description data
Object -
expandVars(data)
-
Expand data expressions in the component and the children. If you need to hide the expressions before the data is set first time call this.loadExpander(); during component initialization.
Parameters:
Name Type Description data
Object -
find(object)
-
Call the static mi2JS(core).find using the component's HTML node and provided search critria.
Parameters:
Name Type Description object
Object -
findAll(object)
-
Call the static mi2JS(core).findAll using the component's HTML node and provided search critria.
Parameters:
Name Type Description object
Object -
fireEvent(evt)
-
Fire event in desired direction in component tree (the component itself, to children, to parent)
Parameters:
Name Type Description evt
String | EventObject event or just event name Example
// version when there is no additional data with event this.someComp.fireEvent('reload'); // tell child component to reload this.someComp.fireEvent({name:'reload'}); // tell all children components to reload this.fireEvent({name:'reload', fireTo:'children'}); // tell parent you want to submit (inputs can fire this) this.fireEvent({name:'submit', fireTo:'parent'}); // if the event is caused by domEvent, pass it along as domEvent property this.fireEvent({name:'submit', fireTo:'parent', domEvent:evt});
-
getCompName(object)
-
Parameters:
Name Type Description object
Object -
initChildren(object)
-
Parameters:
Name Type Description object
Object -
initTemplate(object)
-
Parameters:
Name Type Description object
Object -
isTransitive(object)
-
Implement this to return true for transitive components (example: base/Loop). Transitive component will forward events meant for parent.
base/Button inside a base/Loop will fire the event when clicked, but base/Loop will forward it to it's parent. This is desirable in this case as the loop is usually used inside an application component, and that component will want to catch the event from the button like it is usual when the button is a direct child.Parameters:
Name Type Description object
Object -
isVisibleTruly()
-
Check visibility, but only report visible if the compoentn itself is visible, and all of it's parents.
-
listen(object)
-
listener shortcut that by default binds callback function to current object/component so you can use this in callback without extra bloat otherwise needed
Parameters:
Name Type Description object
Object -
on_init(object)
-
Parameters:
Name Type Description object
Object -
parseChildren(object)
-
Parameters:
Name Type Description object
Object -
replaceTag(el, tag)
-
Useful when the tag on which the component is defined should be replaced. Copies all the attributes and child nodes to the new node with specified tag name.
Parameters:
Name Type Description el
Element node tag
Object tag name -
requestAnimationFrame(object)
-
requestAnimationFrame shortcut that by default binds callback function to current object, so you can use this in callback without extra bloat otherwise needed
Parameters:
Name Type Description object
Object -
setInterval(object)
-
setInterval shortcut that by default binds callback function to current object, so you can use this in callback without extra bloat otherwise needed
Parameters:
Name Type Description object
Object -
setTimeout(object)
-
setTimeout shortcut that by default binds callback function to current object, so you can use this in callback without extra bloat otherwise needed
Parameters:
Name Type Description object
Object -
setVisible(visible)
-
Change visibility of the component. It is reliant on the css used, and by default uses 'hidden' HMTL attribute.
Parameters:
Name Type Description visible
boolean -
updateContent(object)
-
Update component content by calling all collected updaters. in case initTemplate returns definitions for HTML that contain updaters.
Parameters:
Name Type Description object
Object


Performance test: Data for the graph is getting updated every 0.5 ms.
Tests to perform
-
Observe the console timer to determine the time taken for appending.
-
Take heap snapshot and check for memory leaks.
-
Collect JavaScript CPU profile.
-
Open the Task Manager in Chrome and watch the memory/cpu when data gets appended components