kbmMW Professional and Enterprise Edition v. 5.01.00 released!

We are happy to announce v5.01.00 of our popular middleware for Delphi
and C++Builder.

Yet again kbmMW continues to set the bar for what an n-tier product must
be capable of in the real world!

We hope you will take the time to test this Beta release in your setup
and report back regression errors to us by email at
kbm@components4developers.com

Keywords for this release:

– RAD Studio 10.2 Tokyo support including Linux support (in beta).

– Huge number of new features and improvements!
– New Smart services and clients for very easy
publication of functionality and use from clients
and REST aware systems without any boilerplate
code.
– New ORM OPF (Object Relational Model Object Persistence Framework)
to easy storage and retrieval of objects from/to databases.
– New high quality random functions.
– New high quality pronouncable password generators.
– New support for YAML, BSON, Messagepack in addition to
JSON and XML.
– New Object Notation framework which JSON, YAML, BSON and
Messagepack is directly based on, making very easy
conversion between these formats and also XML which now
also supports the object notation framework.
– Lots of new object marshalling improvements, including
support for marshalling native Delphi objects to and from
YAML, BSON and Messagepack in addition to JSON and XML.
– New LogFormatter support making it possible to customize
actual logoutput format.
– CORS support in REST/HTML services.
– High performance HTTPSys transport for Windows.
– Focus on central performance improvements.
– Pre XE2 compilers no longer officially supported.
– Bug fixes

Look at end of post for detailed list of additions, changes and fixes.

Professional and Enterprise Edition is available for all with a current
active SAU.
If your SAU has run out, please visit our shop to extend it with another
12 months.

CodeGear Edition is available for free, but only supports a specific
Delphi/Win32 SKU, contains a limited feature set and do not include source.

Please visit https://portal.components4developers.com to download.

—-

kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC
on .Net, Win32, Win64, Linux, Java, PHP, Android, IOS, embedded devices,
websites, mainframes and more.

Please visit http://www.components4developers.com for more information about kbmMW.

—-

Components4Developers is a company established in 1999 with the purpose
of providing high quality development tools for developers and
enterprises. The primary focus is on SOA, EAI and systems integration
via our flagship product kbmMW.

kbmMW is a portable, highly scalable, high end application server and
enterprise architecture integration (EAI) development framework for
Win32, ..Net and Linux with clients residing on Win32, .Net, Linux,
Unix, Mainframes, Minis, Embedded and many other places.
It is currently used as the backbone in hundreds of central systems, in
hospitals, courts, private, industries, offshore industry, finance,
telecom, governements, schools, laboratories, rentals, culture
institutions, FDA approved medical devices, military and more.

—-

5.00.00 Beta Feb 19 2017

Important notes (changes that may break existing code)
======================================================
* Officially now only supporting XE2 and forward. Support for pre XE2
may not be complete.

New stuff
=========
– Added support for RAD Studio 10.2 Tokyo, including Linux support
(currently in beta)
Include new sample simpleinvocation LinuxServer demo.
– Officially now only supporting XE2 and forward. Support for pre XE2
may not be complete.
– Added RemoteLocationsPrimaryPart to
TkbmMWAuthorizationTransportConstraint (default false).
If set to true, will only compare primary part of
clientidentity.remotelocation.
Primary part is defined by everything up til the last ‘:’. In most cases
that will mean the IP address without the port number.
– Added IkbmMWLogFormatter interface to kbmMWLog.
– Added TkbmMWStandardLogFormatter to kbmMWLog. It contains vastly
improved features for
controlling the look and layout of the log output. Its the default
used log formatter.
– Added TkbmMWSimpleLogFormatter to kbmMWLog. It outputs a log with only
datetime,
type (info/warning/error/fatal etc) and log string.
– Added LogFormatter property to IkbmMWLogManager. It can be set to a
custom log formatter.
– Added mwldtRaw log data type and methods LogRaw to IkbmMWLog. It
allows for logging
bytes or strings without interpretation/reformatting.
– Added global SystemLog instance which will always output to system log
outputs.
It is used as a fallback in case the regular log system excepts.
– Added support for marshalling/unmarshalling named enum values via the
new kbmMW_Enum
attribute.
Its useful when an enum value cant be used as an identifier or its
value should be different
from its presented name.
– Added ExceptOnUnknownType to TkbmMWCustomRTTIMarshal. It controls if
to throw an exception
if an unknown type is accessed or not (default true).
– Added support for marshalling/unmarshalling TDictionary<K,V> types.
– Added support for correctly instantiating classes in unmarshalling
that contains a capacity
constructor argument.
– Added Run methods to TkbmMWScheduler. It allows for one time run and
forget scheduled async
code. They are used in the same way as the Schedule methods, but sets
Occurs to mwsoRun.
The job will be automatically unscheduled after the run.
– Added overloaded DelayInitial(const AInitialDelaySecs:double) to
IkbmMWScheduledEvent.
It allows for directly giving an initial delay in seconds. It supports
fractional second
values.
– Added Clear to TkbmMWScheduledEvents (scheduler.Events) to allow for
clearing all scheduled
events. Running events will be allowed to finish.
– Added GetNameSpaceByURI, DefaultNameSpace, DefaultNameSpaceURI to
TkbmMWDOMXMLNameSpaceList.
– Added SearchRelNodeByID, SearchNodeByID, SearchRelNodeByGivenName,
SearchNodeByGivenName
to IkbmMWDOMXMLParser.
– Added ExpandNameSpace, GivenName, ChildrenByGivenName, ChildByGivenName,
CheckChildByGivenName to TkbmMWDOMXMLNode.
– Added CheckNodeByGivenName, NodeByGivenName to TkbmMWXMLNodeList.
– Added missing ADSDBF support to kbmMWReg.
– Added
mwrtoOptionalInsert,mwrtoKeyNotNullInsert,mwrtoOptionalModify,mwrtoKeyNotNullModify,
mwrtoOptionalDelete,mwrtoKeyNotNullDelete and table modifier flags
OIM/OMI (optional insert/modify), OID/ODI (optional insert/delete),
OMD/ODM (optional modify/delete), OI (optional insert),
OD (optional delete), OM (optional modify),
KIM/KMI (insert/modify on key not null), KID/KDI (insert/delete on key
not null),
KMD/KDM (modify(delete on key not null), KI (insert on key not null),
KM (modify on key not null), KD (delete on key no null)
to TkbmMWResolverTableOption
They allow for more finegrained definition on when
insert/update/delete should happen.
If one of the optional (OIM,OMD,OID,OI,OD,OM) is given, no exception
will be raised for
the table when an operation did not succeed, and resolving will continue.
If one of the key (KIM,KMD,KID,KI,KM,KD) is given, record resolve
operation will be skipped
for the specific record if key is null.
– Added ReadBOM overloaded methods with default TEncoding option to
TkbmMWPlatformMarshal.
– Added overloaded kbmMWTextToString, kbmMWExpectText,
kbmMWStringRightPad, kbmMWStringLeftPad,
kbmMWGetComputerName functions to kbmMWGlobal.pas.
– Added optional ACallback anonymous function to SendAsyncRequest and
SendAsyncRequestEx in
kbmMWClient.pas (WIB only).
It allows for providing an anonymous function that should be called
when an async response
is returned. The function must follow this type:
function(Sender:TObject;
TransportStream:IkbmMWCustomTransportStream):boolean;
– Added LOB blob/clob support (user fix) to DOA adapter.
– Vastly improved XSD importer.
– Added generic Object Notation framework for building virtual object
trees consisting of
TkbmMWONNative, TkbmMWONArray and TkbmMWONObject which all are based
on TkbmMWONCustomObject.
– Added YAML parser/generator based on object notation framework.
– Added Messagepack parser/generator based on object notation framework.
– Added BSON parser/generator based on object notation framework.
– Added support for converting XML to and from object notation format via
LoadFromObjectNotation and SaveToObjectNotation functions.
– Added new TkbmMWCustomSmartService and TkbmMWCustomHTTPSmartService
services, which
can be selected in the service wizard to create smart services. Smart
services
supports tagging any function to be exported to a smart client or a
REST client
(TkbmMWCustomHTTPSmartService required).
– Updated transports to support marshalling objects via the transport.
– Added several near lock free features to kbmMWGlobal, including
TkbmMWLockFreeStack,
more interlocked functions, lock free array GC fixes, optional
TkbmMWREWLock statistics,
support for TkbmMWMREWLock can switch to TMonitor for reader/writer
fair support.
– Optimized many algorithms like TkbmMWStringBuilder, TkbmMWGenerateGUID,
TkbmMWGenerateShortGUID and many more to improve performance overall.
– Added many new general purpose functions to kbmMWGlobal.
– Added direct support for salt in hash functions deriving from
TkbmMWCustomHash.
– Added support for anonymous functions in async kbmMWClient requests (WIB)
– Added new kbmMWRTTI unit with loads of RTTI functionality.
– Added YAML stream format for kbmMemTable and descendants.
– Added Messagepack stream format for kbmMemTable and descendants.
– Added BSON stream format for kbmMemTable and descendants.
– Added object marshalling to and from YAML.
– Added object marshalling to and from Messagepack.
– Added object marshalling to and from BSON.
– Added ServicePath property to TkbmMWClientIdentity.
– Added MaxLogins to TkbmMWAuthorizationManager which is default 100 to
prevent
potential login spam.
– Added support for HTTPSys based transport for Windows. Its specially
useful
for high performance RESTful applications.
– Added AutoRegisterServices method to TkbmMWServer which can be used
for automatically
locating and registering any service that has the kbmMW_Service
attribute defined.
It makes use of the old RegisterService and RegisterServiceByName
optional.
– Added LocalSinceEpochMS, UTCSinceEpochMS, Temporenc to TkbmMWDateTime.
Temporenc
is a very compact binary encoding of a datetime value.
– Added FastSetUTC method to TkbmMWDateTime to threadsafely very fast
setting
the UTC value of an already defined TkbmMWDateTime record. The record
MUST be initialized before using FastSetUTC, for example by
dt:=TkbmMWDateTime.Now;
– Added ValueToStream, ValueFromStream, ValueToBytes and ValueFromBytes in
TkbmMWCustomRTTIMarshal. Allows for easy marshalling objects to and
from bytes and streams.
– Added ExceptOnUnknownType boolean property to TkbmMWCustomRTTIMarshal.
Controls if an exception should be thrown in case a type cant be
marshalled or
unmarshalled, or it should be silently skipped.
– Added Devart MyDAC support (DMYDAC).
– Added CORS support (Cross Origin-Resource Sharing) in
TkbmMWCustomHTTPService and
descendants. (OnCORS event).
– Added PerformOPTIONS and PerformPATCH support to TkbmMWCestomHTTPService.
(OnOptions and OnPatch in TkbmMWEventHTTPService).
– Added REST transport stream format which must be used if non HTTPSys
transport
is used for smart services.
– Added TkbmMWSmartClient which allows simple and easy access to server
side smart functions.
Check simpleinvocation sample.
– Added high quality random functions in new kbmMWRandom unit.
TkbmMWRandomDelphi (32 bit non high quality ramdom!),
TkbmMWRandomSplitMix (64 bit)
TkbmMWRandomXoroshiro128Plus (64 bit), TkbmMWRandomXoroshiro1024 (64 bit),
TkbmMWRandomPCGUInt32 (32 bit), TkbmMWRandomMersenneTwisterUInt32 (32
bit),
TkbmMWRandomMersenneTwisterUInt64 (64 bit)
– Added high quality pronouncable password generators in new unit
kbmMWPassword.
TkbmMWMixerPasswordGen, TkbmMWKoremutakePasswordGen
– Added support for ExchangeType in TkbmMWAMQPClient.
– Added new GC and CloseAndGC methods in TkbmMWAMQPChannel to force
getting rid of
defunct/cached but unused AMQP channels.
– Added IPVersion property to TkbmMWCustomTCPIPIndyClientTransport.
– Split out all lockfree algorithms from kbmMWGlobal to kbmMWLockFree unit
to make kbmMWGlobal smaller, partly due to internal compiler errors.
– Fixed to default not inlining kbmMWMREWLock methods on 32 bit CPUs due to
unstable compiler which can result in F2084/C2491 error combinations.
– Moved all lockfree code to new kbmMWLockFree.pas unit.
– Added TkbmMWLockfreeStack.
– Changed so XE6/XE7 SKU’s do not compile in new kbmMWLockFree contents
due to compiler errors.
– Added kbmMW ORM OPF (Object Relational Modelling Object Persistence
Framework)
in unit kbmMWORM.pas. Compiles with XE5 and higher. Check new ORM demos.
Currently in beta.
– Added TkbmMWBinaryPasswordGen to kbmMWPassword.pas. Generates random
binary keys
of any length, suitable for cryptographic use.
– Added functions Year(ADateTime:TDateTime=Math.NaN):word;
function Month(ADateTime:TDateTime=Math.NaN):byte;
function DayOfMonth(ADateTime:TDateTime=Math.NaN):byte;
function HourOfDay(ADateTime:TDateTime=Math.NaN):byte;
function MinuteOfHour(ADateTime:TDateTime=Math.NaN):byte;
function SecondOfMinute(ADateTime:TDateTime=Math.NaN):byte;
to TkbmMWDateTime.
– Improved Null handling in kbmMWNullable and TkbmMWDateTime.
– Improved Modified support in kbmMWNullable and TkbmMWDateTime.
– Added functions function OutputToFile(const
AFileName:string=”):IkbmMWLocalFileLogManager;
procedure OutputToDefault;
function OutputToStrings(const AStrings:TStrings; const
ASynchronized:boolean = true):IkbmMWStringsLogManager;
function OutputToStringsAndFile(const AStrings:TStrings; const
ASynchronized:boolean = true; const
AFileName:string=”):IkbmMWTeeLogManager;
function OutputToTee:IkbmMWTeeLogManager;
procedure OutputToNull;
to IkbmMWLog to make it easier to redirect output to some standard
destinations.
– Added mwddLog to kbmMWGlobal, as a new output destination for kbmMW
lowlevel debugging.
Will output to the default logger.
– Fixed and improved TkbmMWCircularBuffer.
– Added kbmMWSmartUtils.pas containing Use class with easy to use
methods to convert arguments and results.

Changes/minor additions
=======================
– Removed (mwloProcessThreadInfo,mwloThreadName from TkbmMWLogOption
since its now controlled
by the log formatter.
– Changed Activate method of IkbmMWScheduledEvent to have true as
default argument AValue.
– Changed SetAsDuration and GetAsDuration to use TkbmMWDuration instead
of TkbmMWDateTime.
– Added support for checking if path is accessible in
TkbmMWBufferedFileStream.Create.
– Changed JSON parser/generator to be based on the object notation
framework.
– Improved scalability of FastCGI services to better spread load accross
multiple instances.

Fixes
=====
– Fixed A/V when attempting to use audit file.
– Fixed missing clearing of TkbmMWDuration when parsing duration
strings, resulting in
an incorrect duration value (instead of null) on invalid duration strings.
– Fixed TDuration.Passed(const ADuration:TkbmMWDuration) which didnt
return correct value.
– Fixed deactivating precise scheduled events.
– Fixed events scheduled to start on day, month, week or year boundaries.
– Fixed issues to initial delay in scheduled events.
– Fixed parsing tags crossing line boundaries in XML parser.
– Fixed various namespace issues in XML parser.
– Fixed WIB compilation issue for XE.
– Fixed TkbmMWStreamStore offset bug when writing first segment.
– Fixed potential shutdown issue in Indy10 transports due to Indy10 bug.
– Fixed kbmMWDependency non accumulating memory leaks.
– Fixed NexusDB transport compilation.
– Fixed Autoinc field detection in EDB (ElevateDB) adapter.

kbmMemTable v. 7.75 Pro/Std released

We are happy to announce the latest and greatest release of our memory
table.

Whats new in 7.75.00 Apr 22 2017
--------------------------------

  - Fixed bug in TkbmSQLTables.Delete.
  - Fixed support for AutoUpdateFieldVariables, and ensured that
    CreateTable will auto remove persistant fields.
  - Added RecordID:TkbmNativeInt and UniqueRecordID:TkbmNativeInt to
    TkbmCustomMemTable.
  - Fixed loading ftByte field data in binary streamformatter.
  - Added GetRecordFieldModified and SetRecordFieldModified
    which manages new record field level modified flag.
  - Added support for parsing anonymous parameters in SQL parser.
  - Added support for Delphi 10.2 Tokyo including full Linux support.
  - Added function GetAllFields:TkbmFieldArray to TkbmCustomDeltaHandler.

Standard Edition is released with source to holders of an active
kbmMemTable Service and Update subscription (SAU).

Professional Edition is released with source and additional performance
enhancement features to holders of an active kbmMW Pro/Ent Service and
Update subscription (SAU).

A free CodeGear Edition can be found bundled with kbmMW CodeGear Edition
for specific Delphi versions.

kbmMemTable supports the following development environments:

Delphi 2009
Delphi 2010
RAD Studio Delphi/C++ XE2
RAD Studio Delphi/C++ XE3
RAD Studio Delphi/C++ XE4
RAD Studio Delphi/C++ XE5
RAD Studio Delphi/C++ XE6
RAD Studio Delphi/C++ XE7
RAD Studio Delphi/C++ XE8
RAD Studio Delphi/C++ 10 Seattle
RAD Studio Delphi/C++ 10.1 Berlin
RAD Studio Delphi/C++ 10.2 Tokyo
Lazarus 1.2.4 with FPC 2.6.4

kbmMemTable is the premier high performance, high functionality in
memory dataset for Delphi and C++Builder with kbmMemTable Professional
topping the scales as being the worlds fastest!

If you have an up to date Service and Update (SAU) subscription, then
you can immediately visit https://portal.components4developers.com to
download the latest kbmMemTable release.

If not, please visit our shop at http://www.components4developers.com
and extend your SAU with another 12 months.

We are not dead :)

But we are working hard on kbmMW v5 final release.

In addition to all the cool stuff unique to v5:

  • like the object notation framework and YAML, BSON, MessagePack support
  • like the smart services and smart clients
  • like the new much improved logging and logformatters
  • like the much improved object marshalling to and from XML, JSON, YAML, BSON and MessagePack
  • like the much improved XSD importer
  • like the hundreds of new features and fixes in existing code

we also want to add one new essential major brick to ensure that YOU can develop applications faster, cleaner, cooler and more intuitive with kbmMW than with any other similar tool!

We expect to release v5 Professional/Enterprise Edition final (with the new feature in beta), supporting Tokyo within the next week.

kbmMemTable Standard and Professional Edition supporting Tokyo will be released at the same time.

best regards
Kim/C4D

Android logcat tool

People developing for Android knows that checking it’s logfiles is a must, debugging any new application.

One can do it directly using adb.exe with the logcat command, but it outputs data to the console and is generally not really very useful due to the typical high amount of data produced by it.

Android Studio contains a log viewer application, but alas that requires installation of the complete Android Studio, which perhaps is overkill to check the contents of the log.

Some 3rdparty options also exists. Unfortunately they typically require Java or .Net to be available, and most of them are trials or limited commercials.

So when nothing exists that fulfills the requirements, the option is to make it yourself.

Thats what I did.

May I present kbmLogCat!

kbmLogCatIt is free and available for download from the C4D portal at https://portal.components4developers.com. if you do not have a login, please register and you will get immediate access to it.

kbmLogCat supports the various log buffers provided in Android, and contains advanced capture filter and live filter, storage and retrieval of log to/from a CSV file and sorting on the various columns.

It does not require Java or .Net to be installed.

When starting it first time, it will ask you for the path to the Android SDK.

If you have installed Delphi 10.1 Berlin with Android development option, you will typically find the SDK here:
C:\Users\Public\Documents\Embarcadero\Studio\18.0\CatalogRepository\AndroidSDK-2433_18.0.24468.8770

You can use any Android SDK that contains adb.exe in the platform-tools subdirectory.

If it stops logging, it may be because adb.exe has gotten confused. Simply stop and restart the kbmLogCat application.

Happy logging and debugging on Android!

 

DIRT CHEAP!!

As a tribute to Delphi’s 22 years birthday, and our own release of our Delphi and C++Builder middleware kbmMW v. 5.00.01 Beta, we have decided to go deep and dirty!

For a very limited time, until March 5 2017, you can get a new license of kbmMW Enterprise Edition, which is our flagship product with a whopping 75% discount!

What do you get with kbmMW Enterprise Edition?

The most complete n-tier product in existence for Delphi and C++Builder. Period!

  • Complete SOA native client support
  • Complete caching SOA server with loadbalancing, failover and proxying support.
  • Complete support for building your own application server.
  • Support for 36+ database API’s
  • Complete native and performant XML, JSON, YAML, BSON, Messagepack support.
  • Complete support for serializing and deserializing native Delphi objects to any of the above formats.
  • Native XSD importer which generates Delphi objects that can be serialized as described above.
  • Complete REST support with 5 lines of code. Spring boot inspired on steroids!
  • Native clients in PHP, Java, C#, K&R C, Apache Flex and more
  • Native extremely complete transactional queue based publish/subscribe messaging support with high performance memory and file based queues with auto healing functionality.
  • Native AMQP (eg. RabbitMQ and others) support
  • Native bundled support for numerous crypto technologies, like 3DES, Blowfish, Cast128, Cast256, DES, Ice, Ice2, IDEA, Mars, Misty1, RC2, RC4, RC5, RC6, Rijndael / AES, Serpent, ThinIce, Twofish
  • Native bundled support for numerous hashing technologies, like FNV1a, Haval, MD4, MD5, Murmur3, Ripe MD128, Ripe MD160, Ripe MD160, SHA-256, SHA-384, SHA-512, SHA1, Tiger, XX
  • Native bunled support for numerous compression technologies, like JPEG, LZH, LZ4, ZIP
  • Native high performance multi monitor Remote Desktop server and client code included, allowing creation of products like GotoMyPC, TeamViewer etc.
  • Complete authorization support based on resources, roles and actors.
  • Complete logging support.
  • Complete scheduler support for both high precision scheduling of very frequent tasks and scheduling of relaxed precision tasks on minutes, hours, day, monthly or yearly basis.
  • High performance dataset and data storage support
  • Support for automatic resolving of data changes from clients and other sources

Actually the bullets are of less importance… what is of importance is that you can build absolutely any product requiring a multi tier setup using kbmMW!

REST functionality? Takes 5 minutes to have a server running exposing even complex functionality.

Native clients? Takes 10 seconds to give them access to the same functionality as above, and you can add more specialized functionality as you need.

Cross platform clients? Again… 10 seconds then they are up and running!

Add more features while supporting older clients? Complete versioning of functionality is supported!

Need secure communication? Implemented in less than a minute, server and client side.

Need compression of data over slow lines? Again one minute.

You can do it all, and now you can do it DIRT CHEAP!

Visit http://www.components4developers.com to find the link to purchase DIRT CHEAP and to read more about kbmMW.

 

kbmMW v. 5.00.01 Beta released

We are happy to announce v5 of our popular middleware for Delphi and
C++Builder.

Yet again kbmMW continues to set the bar for what an n-tier product must be capable of in the real world!

We hope you will take the time to test this Beta release in your setup and report back regression errors to us by email at kbm@components4developers.com

Keywords for this release:

  • Huge number of new features and improvements!
  • New Smart services and clients for very easy publication of functionality and use from clients and REST aware systems without any boilerplate code.
  • New high quality random functions.
  • New high quality pronouncable password generators.
  • New support for YAML, BSON, Messagepack in addition to JSON and XML.
  • New Object Notation framework which JSON, YAML, BSON and Messagepack is directly based on, making very easy conversion between these formats and also XML which now also supports the object notation framework.
  • Lots of new object marshalling improvements, including support for marshalling native Delphi objects to and from YAML, BSON and Messagepack in addition to JSON and XML.
  • New LogFormatter support making it possible to customize actual logoutput format.
  • CORS support in REST/HTML services.
  • Focus on central performance improvements.
  • Pre XE2 compilers no longer officially supported.
  • Bug fixes

Look at end of post for detailed list of additions, changes and fixes.

Professional and Enterprise Edition is available for all with a current active SAU.
If your SAU has run out, please visit our shop to extend it with another 12 months.

CodeGear Edition is available for free, but only supports a specific Delphi/Win32 SKU, contains a limited feature set and do not include source.

Please visit https://portal.components4developers.com to download.

—-

kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC on .Net, Win32, Win64, Linux, Java, PHP, Android, IOS, embedded devices, websites, mainframes and more.

Please visit http://www.components4developers.com for more information about kbmMW.

—-

Components4Developers is a company established in 1999 with the purpose of providing high quality development tools for developers and enterprises. The primary focus is on SOA, EAI and systems integration via our flagship product kbmMW.

kbmMW is a portable, highly scalable, high end application server and enterprise architecture integration (EAI) development framework for Win32, ..Net and Linux with clients residing on Win32, .Net, Linux, Unix, Mainframes, Minis, Embedded and many other places. It is currently used as the backbone in hundreds of central systems, in
hospitals, courts, private, industries, offshore industry, finance, telecom, governements, schools, laboratories, rentals, culture institutions, FDA approved medical devices, military and more.

5.00.00 Beta Feb 19 2017

Important notes (changes that may break existing code)
======================================================
* Officially now only supporting XE2 and forward. Support for pre XE2 may not be complete.

New stuff
=========
– Officially now only supporting XE2 and forward. Support for
pre XE2 may not be complete.
– Added RemoteLocationsPrimaryPart to
TkbmMWAuthorizationTransportConstraint (default false).
If set to true, will only compare primary part of
clientidentity.remotelocation.
Primary part is defined by everything up til the last ‘:’. In most
cases that will mean the IP address without the port number.
– Added IkbmMWLogFormatter interface to kbmMWLog.
– Added TkbmMWStandardLogFormatter to kbmMWLog. It contains vastly
improved features for controlling the look and layout of the log
output. Its the default used log formatter.
– Added TkbmMWSimpleLogFormatter to kbmMWLog. It outputs a log with
only datetime, type (info/warning/error/fatal etc) and log string.
– Added LogFormatter property to IkbmMWLogManager. It can be set to a
custom log formatter.
– Added mwldtRaw log data type and methods LogRaw to IkbmMWLog. It
allows for logging bytes or strings without
interpretation/reformatting.
– Added global SystemLog instance which will always output to system
log outputs. It is used as a fallback in case the regular log system
excepts.
– Added support for marshalling/unmarshalling named enum values via
the new kbmMW_Enum attribute.
Its useful when an enum value cant be used as an identifier or its
value should be different from its presented name.
– Added ExceptOnUnknownType to TkbmMWCustomRTTIMarshal. It controls if
to throw an exception if an unknown type is accessed or not
(default true).
– Added support for marshalling/unmarshalling TDictionary<K,V> types.
– Added support for correctly instantiating classes in unmarshalling
that contains a capacity constructor argument.
– Added Run methods to TkbmMWScheduler. It allows for one time run and
forget scheduled async code. They are used in the same way as the
Schedule methods, but sets Occurs to mwsoRun.
The job will be automatically unscheduled after the run.
– Added overloaded DelayInitial(const AInitialDelaySecs:double) to
IkbmMWScheduledEvent.
It allows for directly giving an initial delay in seconds. It
supports fractional second values.
– Added Clear to TkbmMWScheduledEvents (scheduler.Events) to allow for
clearing all scheduled events. Running events will be allowed to
finish.
– Added GetNameSpaceByURI, DefaultNameSpace, DefaultNameSpaceURI to
TkbmMWDOMXMLNameSpaceList.
– Added SearchRelNodeByID, SearchNodeByID, SearchRelNodeByGivenName,
SearchNodeByGivenName to IkbmMWDOMXMLParser.
– Added ExpandNameSpace, GivenName, ChildrenByGivenName,
ChildByGivenName, CheckChildByGivenName to TkbmMWDOMXMLNode.
– Added CheckNodeByGivenName, NodeByGivenName to TkbmMWXMLNodeList.
– Added missing ADSDBF support to kbmMWReg.
– Added mwrtoOptionalInsert,mwrtoKeyNotNullInsert,
mwrtoOptionalModify,mwrtoKeyNotNullModify,
mwrtoOptionalDelete,mwrtoKeyNotNullDelete and table modifier flags
OIM/OMI (optional insert/modify), OID/ODI (optional insert/delete),
OMD/ODM (optional modify/delete), OI (optional insert),
OD (optional delete), OM (optional modify),
KIM/KMI (insert/modify on key not null), KID/KDI (insert/delete on
key not null),
KMD/KDM (modify(delete on key not null), KI (insert on key not null),
KM (modify on key not null), KD (delete on key no null)
to TkbmMWResolverTableOption
They allow for more finegrained definition on when insert/update
/delete should happen.
If one of the optional (OIM,OMD,OID,OI,OD,OM) is given, no exception
will be raised for the table when an operation did not succeed, and
resolving will continue. If one of the key (KIM,KMD,KID,KI,KM,KD) is
given, record resolve operation will be skipped for the specific
record if key is null.
– Added ReadBOM overloaded methods with default TEncoding option to
TkbmMWPlatformMarshal.
– Added overloaded kbmMWTextToString, kbmMWExpectText,
kbmMWStringRightPad, kbmMWStringLeftPad,
kbmMWGetComputerName functions to kbmMWGlobal.pas.
– Added optional ACallback anonymous function to SendAsyncRequest and
SendAsyncRequestEx in kbmMWClient.pas (WIB only).
It allows for providing an anonymous function that should be called
when an async response is returned. The function must follow this
type:
function(Sender:TObject;
TransportStream:IkbmMWCustomTransportStream):boolean;
– Added LOB blob/clob support (user fix) to DOA adapter.
– Vastly improved XSD importer.
– Added generic Object Notation framework for building virtual object
trees consisting of TkbmMWONNative, TkbmMWONArray and TkbmMWONObject
which all are based on TkbmMWONCustomObject.
– Added YAML parser/generator based on object notation framework.
– Added Messagepack parser/generator based on object notation
framework.
– Added BSON parser/generator based on object notation framework.
– Added support for converting XML to and from object notation format
via LoadFromObjectNotation and SaveToObjectNotation functions.
– Added new TkbmMWCustomSmartService and TkbmMWCustomHTTPSmartService
services, which can be selected in the service wizard to create
smart services. Smart services supports tagging any function to be
exported to a smart client or a REST client
(TkbmMWCustomHTTPSmartService required).
– Updated transports to support marshalling objects via the transport.
– Added several near lock free features to kbmMWGlobal, including
TkbmMWLockFreeStack, more interlocked functions, lock free array GC
fixes, optional TkbmMWREWLock statistics, support for TkbmMWMREWLock
can switch to TMonitor for reader/writer fair support.
– Optimized many algorithms like TkbmMWStringBuilder,
TkbmMWGenerateGUID, TkbmMWGenerateShortGUID and many more to improve
performance overall.
– Added many new general purpose functions to kbmMWGlobal.
– Added direct support for salt in hash functions deriving from
TkbmMWCustomHash.
– Added support for anonymous functions in async kbmMWClient requests
(WIB)
– Added new kbmMWRTTI unit with loads of RTTI functionality.
– Added YAML stream format for kbmMemTable and descendants.
– Added Messagepack stream format for kbmMemTable and descendants.
– Added BSON stream format for kbmMemTable and descendants.
– Added object marshalling to and from YAML.
– Added object marshalling to and from Messagepack.
– Added object marshalling to and from BSON.
– Added ServicePath property to TkbmMWClientIdentity.
– Added MaxLogins to TkbmMWAuthorizationManager which is default 100
to prevent potential login spam.
– Added support for HTTPSys based transport for Windows. Its specially
useful for high performance RESTful applications.
– Added AutoRegisterServices method to TkbmMWServer which can be used
for automatically locating and registering any service that has the
kbmMW_Service attribute defined. It makes use of the old
RegisterService and RegisterServiceByName optional.
– Added LocalSinceEpochMS, UTCSinceEpochMS, Temporenc to
TkbmMWDateTime. Temporenc is a very compact binary encoding of a
datetime value.
– Added FastSetUTC method to TkbmMWDateTime to threadsafely very fast
setting the UTC value of an already defined TkbmMWDateTime record.
The record MUST be initialized before using FastSetUTC, for example
by dt:=TkbmMWDateTime.Now;
– Added ValueToStream, ValueFromStream, ValueToBytes and
ValueFromBytes in
TkbmMWCustomRTTIMarshal. Allows for easy marshalling objects to and
from bytes and streams.
– Added ExceptOnUnknownType boolean property to
TkbmMWCustomRTTIMarshal.
Controls if an exception should be thrown in case a type cant be
marshalled or unmarshalled, or it should be silently skipped.
– Added Devart MyDAC support (DMYDAC).
– Added CORS support (Cross Origin-Resource Sharing) in
TkbmMWCustomHTTPService and descendants. (OnCORS event).
– Added PerformOPTIONS and PerformPATCH support to
TkbmMWCestomHTTPService.
(OnOptions and OnPatch in TkbmMWEventHTTPService).
– Added REST transport stream format which must be used if non HTTPSys
transport is used for smart services.
– Added TkbmMWSmartClient which allows simple and easy access to
server side smart functions.
Check simpleinvocation sample.
– Added high quality random functions in new kbmMWRandom unit.
TkbmMWRandomDelphi (32 bit non high quality ramdom!),
TkbmMWRandomSplitMix (64 bit)
TkbmMWRandomXoroshiro128Plus (64 bit),
TkbmMWRandomXoroshiro1024 (64 bit),
TkbmMWRandomPCGUInt32 (32 bit),
TkbmMWRandomMersenneTwisterUInt32 (32 bit),
TkbmMWRandomMersenneTwisterUInt64 (64 bit)
– Added high quality pronouncable password generators in new unit
kbmMWPassword.
TkbmMWMixerPasswordGen, TkbmMWKoremutakePasswordGen
– Added support for ExchangeType in TkbmMWAMQPClient.
– Added new GC and CloseAndGC methods in TkbmMWAMQPChannel to force
getting rid of defunct/cached but unused AMQP channels.
– Added IPVersion property to TkbmMWCustomTCPIPIndyClientTransport.

Changes/minor additions
=======================
– Removed (mwloProcessThreadInfo,mwloThreadName from TkbmMWLogOption
since its now controlled by the log formatter.
– Changed Activate method of IkbmMWScheduledEvent to have true as
default argument AValue.
– Changed SetAsDuration and GetAsDuration to use TkbmMWDuration
instead of TkbmMWDateTime.
– Added support for checking if path is accessible in
TkbmMWBufferedFileStream.Create.
– Changed JSON parser/generator to be based on the object notation
framework.
– Improved scalability of FastCGI services to better spread load
accross multiple instances.

Fixes
=====
– Fixed A/V when attempting to use audit file.
– Fixed missing clearing of TkbmMWDuration when parsing duration
strings, resulting in an incorrect duration value (instead of null)
on invalid duration strings.
– Fixed TDuration.Passed(const ADuration:TkbmMWDuration) which didnt
return correct value.
– Fixed deactivating precise scheduled events.
– Fixed events scheduled to start on day, month, week or year
boundaries.
– Fixed issues to initial delay in scheduled events.
– Fixed parsing tags crossing line boundaries in XML parser.
– Fixed various namespace issues in XML parser.
– Fixed WIB compilation issue for XE.
– Fixed TkbmMWStreamStore offset bug when writing first segment.
– Fixed potential shutdown issue in Indy10 transports due to Indy10
bug.
– Fixed kbmMWDependency non accumulating memory leaks.
– Fixed NexusDB transport compilation.
– Fixed Autoinc field detection in EDB (ElevateDB) adapter.

Teaser: kbmMW safety first… Random numbers and great passwords!

Usually Delphi’s built in 32 bit random generator is sufficient for most tasks, like generating random numbers for some tests, or a game or something similar. However the random generator is, if one focus on security, not strong enough to be used for cryptographic uses, like password generation.

Random numbers

In next version of kbmMW, a set of random number generators has been added for generating 32bit and 64bit random values in addition to supporting the standard Delphi Randon method.

32 bit random generators in kbmMW:

  • TkbmMWRandomDelphi
  • TkbmMWRandomPCGUInt32
  • TkbmMWRandomMersenneTwisterUInt32

64 bit random generators in kbmMW:

  • TkbmMWRandomSplitMix
  • TkbmMWRandomXoroshiro128Plus
  • TkbmMWRandomXoroshiro1024
  • TkbmMWRandomMersenneTwisterUInt64

They all follow the same principle, and it’s easy to replace one with another, or even add another custom random generator.

To see the randomness of the generators, one can make a lot of random X and Y values and plot them in a fine masked grid. A perfectly random function (in reality that does not exist in current computers) ought to spread the numbers fairly evenly across the grid.

2017-02-01-01_46_40-xbox
The 32 bit standard Delphi random plot

2017-02-01-01_48_03-xbox
The 32 bit PCG random plot

2017-02-01-01_49_17-xbox
The 32 bit Mersenne Twister random plot

2017-02-01-01_50_42-xbox
The 64 bit split mix random plot

2017-02-01-01_52_53-xbox
The 64 bit Xoroshiro 128+ random plot

2017-02-01-02_14_37-xbox
The 64 bit Xoroshiro1024 random plot

2017-02-01-02_17_03-xbox
The 64 bit Mersenne Twister random plot

As can be seen, the Delphi random generator is pretty bad in producing values across the entire value space, while the others show a much more even spread as would be expected by a fair random generator.

Choosing a random number generator for a particular purpose can be difficult. One has to weigh in speed vs randomness vs full cycle time and other factors. Basically the perfect randon number generator do not exist at this time for regular computers.

These pages explains a bit about their weaknesses and strengths:
http://xoroshiro.di.unimi.it/
http://www.pcg-random.org/

But at least now you have a better choice. And in fact this brings us to the next section. Generation of strong passwords.

Strong passwords

Most software today supports some sort of user login, where a password is required. kbmMW certainly supports that, through for example the authorization manager.

But the challenge is to force users to use some good passwords, which they still have a chance to remember without writing down.

As a first for Delphi, kbmMW now also supports multiple password generator algorithms to encourage use of strong passwords.

kbmMW comes with two password generators and a framework on which new custom password generators can be built:

  • TkbmMWMixerPasswordGen
  • TkbmMWKoremutakePasswordGen

The Mixer password generator supports selecting the minimum and maximum number of digits, minimum and maximum number of punctuation characters, unicase or mixed case, and minimum length of a generated password.

The Koremutake password generator generates a random 64 bit value, and converts that 64 bit value into a string consisting of two and three character character groups, forming a semi pronounceable password.

Using the password generators is very simple:

var
   pg:TkbmMWMixerPasswordGen;
begin
     pg:=TkbmMWMixerPasswordGen.Create;
     try
        // Optionally set length, digits, punctuation and case settings.
        // Default a password will be minimum 8 characters long,
        // contain from 1 to 4 digits, no punctuation characters
        // and use mixed case alpha characters.
        Memo1.Lines.Add(pg.Generate);
     finally
        pg.Free;
     end;
end;

This could output: 69vcRPhw

var
   pg:TkbmMWKoremutakePasswordGen;
begin
     pg:=TkbmMWKoremutakePasswordGen.Create;
     try
        Memo1.Lines.Add(pg.Generate);
     finally
        pg.Free;
     end;
end;

This could output: GUMIPAVYGRYTIFOFYSI

We will continue to monitor the various options for password generators, and provide support for them as we find them interesting.