
We are pleased to announce the release of mORMot 2.1.
The download link is available on github.
The mORMot family is growing up.
2023-08-24
2023-08-24. Open Source › mORMot Framework
We are pleased to announce the release of mORMot 2.1.
The download link is available on github.
The mORMot family is growing up.
2023-07-20
2023-07-20. Open Source › mORMot Framework
Since its earliest days, our mORMot framework did offer extensive regression tests. In fact, it is fully test-driven, and almost 78 million individual tests are performed to cover all its abilities:
We just integrated those tests to the TranquilIT build farm, and its great LUTI tool. So we have now continuous integration tests over several versions of Windows, Linux, and even Mac!
LUTI is the best mORMot's friends these days.
2023-05-05
2023-05-05. Open Source › mORMot Framework
DNS and LDAP are the two protocols on which the Internet and the Intranet are built.
Most of the time, you don't have to care about them. But sometimes, you need to access them directly, especially in a corporate environment.
We just introduced in our Open Source mORMot 2 framework two client units to access DNS and LDAP/CLDAP servers.
You can resolve IP addresses and services using DNS, and ask for information about your IT infrastructure using LDAP.
2023-04-19
2023-04-19. Open Source › mORMot Framework
For most projects, we want to be able to pass some custom values when starting it.
The command line is then used to add this additional information.
We have ParamStr
and ParamCount
global functions, enough to retrieve the information. You may also use FindCmdLineSwitch
for something more easy to work with.
The Lazarus RTL offers some additional methods like hasOption
or getOptionValue
or checkOptions
in its TCustomApplication
class. Their are better, but not so easy to use, and not available on Delphi.
We just committed a new command line parser to our Open Source mORMot 2 framework, which works on both Delphi and FPC, follows both Windows and POSIX/Linux conventions, and has much more features (like automated generation of the help message), in an innovative and easy workflow.
2023-01-10
2023-01-10. Open Source › mORMot Framework
The mORMot 2 framework is about to be released as its first 2.0 stable version.
The framework feature set should now be considered as sealed for this release.
There is no issue reported still open at github or in the forum.
Please test it, and give here some feedback to fix any problem before the actual release!
We enter a framework code-freeze phase until then.
2022-12-28
2022-12-28. Open Source › mORMot Framework
This is perhaps the last new feature of mORMot 2 before its first stable release: a very efficient custom URI routing for our HTTP/HTTPS servers.
At ORM and SOA level, there is by-convention routing of the URI, depending on the ORM table, SOA interface and method, and TOrmModel.Root
value. Even for our MVC web part, we rely on a /root/
URI prefix, which may not be always needed.
Relying on convention is perfect between mORMot clients and servers, but in some cases, it may be handy to have something smoother, e.g. to publish a truly REST scheme.
We introduced two routing abilities to mORMot 2, with amazing performance (6-12 million parsings per CPU core), via a new THttpServerGeneric.Route
property:
/root/interface.method
layout, or to a MVC web page;Article edited on 28th December:
Fixed performance numbers (much higher than reported), and introduced latest source changes.
2022-08-12
2022-08-12. Open Source › mORMot Framework
Starting with its version 5.1, MongoDB disabled the legacy protocol used for communication since its beginning.
As a consequence, our mORMot client was not able to communicate any more with the latest versions of MongoDB instances.
Last week, we made a deep rewrite of mormot.db.nosql.mongodb.pas, which changed the default protocol to use the new layout on the wire. Now messages use regular MongoDB Database Commands, with automated compression if needed.
No change is needed in your end-user MongoDB or ORM/ODM code. The upgrade is as simple as update your mORMot 2 source, then recompile.
2022-07-09
2022-07-09. Open Source › mORMot Framework
Since the beginning, we delegated the TLS encryption support to a reverse proxy server, mainly Nginx. Under Windows, you could setup the http.sys HTTPS layer as usual, as a native - even a bit complicated - solution.
Nginx has several advantages, the first being a proven and efficient technology, with plenty of documentation and configuration tips. It interfaces nicely with Let's Encrypt, and is very good for any regular website, using static content and PHP. This very blog and the Synopse web site is hosted via Ngnix on a small Linux server.
But in mORMot 2, we introduced a new set of asynchronous web server classes. So stability and performance are not a problem any more. Some benchmarks even consider this server to be faster than nginx (the stability issue mentioned in this post has been fixed in-between).
We just introduced TLS support of our socket-based servers, both the blocking and asynchronous classes. It would use OpenSSL if available, or the SChannel API layer of Windows. Serving HTTPS or WSS with a self-signed certificate is just a matter of a single parameter now, and performance seems pretty good, especially with OpenSSL.
2022-05-21
2022-05-21. Open Source › mORMot Framework
The HTTP server is one main part of any SOA/REST service, by design.
It is the main entry point of all incoming requests. So it should better be stable and efficient. And should be able to scale in the future, if needed.
There have always been several HTTP servers in mORMot. You can use the HTTP server class you need.
In mORMot 2, we added two new server classes, one for publishing over HTTP, another able to upgrade to WebSockets. The main difference is that they are fully event-driven, so their thread pool is able to scale with thousands of concurrent connections, with a fixed number of threads. They are a response to the limitations of our previous socket server.
2022-02-15
2022-02-15. Open Source › mORMot Framework
The official release of mORMot 2 is around the edge. It may be the occasion to show some data persistence performance numbers, in respect to mORMot 1.
For the version 2 of our framework, its ORM feature has been enhanced and tuned in several aspects: REST routing optimization, ORM/JSON serialization, and in-memory and SQL engines tuning.
Numbers are talking. You could compare with any other solution, and compile and run the tests by yourself for both framework, and see how it goes on your own computer or server.
In a nutshell, we almost reach 1 million inserts per second on SQLite3, and are above the million inserts in our in-memory engine. Reading speed is 1.2 million and 1.7 million respectively. From the object to the storage, and back. And forcing AES-CTR encryption on disk almost don't change anything. Now we are talking.
2022-01-22
2022-01-22. Open Source › mORMot Framework
To ensure thread-safety, especially on server side, we usually protect code with critical sections, or locks. In recent Delphi revisions, we have the TMonitor
feature, but I would rather trust the OS for locks, which are implemented using Windows Critical Sections, or POSIX futex/mutex.
But all locks are not born equal. Most of the time, the overhead of a Critical Section WinAPI or the pthread
library is not needed.
So, in mORMot 2, we introduced several native locks in addition to those OS locks, with multi-read/single-write abilities, or re-entrancy.
2021-12-19
2021-12-19. Open Source › mORMot Framework
Generics are a clever way of writing some code once, then reuse it for several types.
They are like templates, or compiler-time shortcuts for type definitions.
In the last weeks, we added a new mormot.core.collections.pas unit, which features:
IList<>
List Storage;IKeyValue<>
Dictionary Storage.In respect to Delphi or FPC RTL generics.collections
, this unit uses interfaces as variable holders, and leverage them to reduce the generated code as much as possible, as the Spring4D 2.0 framework does, but for both Delphi and FPC. It publishes TDynArray
and TSynDictionary
high-level features like indexing, sorting, JSON/binary serialization or thread safety as Generics strong typing.
Resulting performance is great, especially for its enumerators, and your resulting executable size won't blow up as with the regular RTL unit.
2021-11-16
2021-11-16. Open Source › mORMot Framework
EKON 25 at Düsseldorf was a great conference (konference?).
At last, a physical gathering of Delphi developers, mostly from Germany, but also from Europe - and even some from USA! No more virtual meetings, which may trigger the well known 'Abstract Error' on modern pascal coders.
There were some happy FPC users too - as I am now.
I have published the slides of my conferences, mostly about mORMot 2.
By the way, I wish we would be able to release officially mORMot 2 in December, before Christmas. I think it starts to be stabilized and already known to be used on production. We expect no more breaking change in the next weeks.
2021-09-21
2021-09-21. Open Source › mORMot Framework
The latest revision of Delphi, named Delphi 11 Alexandria, is out.
A lot of new features, some enhanced platforms. Nice!
But it is also for us the opportunity to come back to some breaking changes, which appeared in Delphi 10.4 earlier this year, and are now "officially" part of Delphi 11.
The main breaking change of Delphi 10.4 and later, as reported by mORMot users, is the new lifetime of local variables.
TL&LR: a local variable which is not explicitly declared, but returned by a function may be released as soon as it is not used any more, whereas in the original implementation, it was allocated as a regular local variable, and we could expect its lifetime to remain active up to the end of the function. With Delphi 10.4, it is not the case any more: the compiler could release/clear the local variable sooner, to reduce the allocation pressure.
Idea behind this change is that it may have better register allocation within the function, so it "may" theoretically result in faster code. Not convinced about it, anyway - we will discuss that.
The main thing is that it could break existing code, because it breaks the Delphi compiler expectation since decades.
Some perfectly fine working code would end to work as expected. We have identified several use cases with mORMot which are affected by this change. Since it seems there will be no coming back from Delphi point of view, it is worth a blog article.
2021-08-17
2021-08-17. Open Source › mORMot Framework
Last weeks, we have enhanced mORMot support to one of the more powerful AARM64 CPU available: the Ampere Altra CPU, as made available on the Oracle Cloud Infrastructure.
Long story short, this is an amazing hardware to run on server side, with performance close to what Intel/AMD offers, but with almost linear multi-core scalability. The FPC compiler is able to run good code on it, and our mORMot 2 library is able to use the hardware accelerated opcodes for AES, SHA2, and crc32/crc32c.
2021-06-26
2021-06-26. Open Source › mORMot Framework
Debug information can be generated by compilers, to contain symbols and source code lines. This is very handy to have a meaningful stack trace on any problems like exceptions, at runtime.
The problem is that debug information can be huge. New code style with generics tends to increase this size into a bloated way...
On Delphi, mormot2tests generates a 4MB .map file;
on FPC, mormot2tests outputs a 20MB .dbg file in DWARF.
For Delphi, we propose our own binary .mab format which reduces this 4MB .map file into a 290KB .mab file since mORMot 1.
Now mORMot 2 can reduce a FPC debug file of 20MB into a 322KB .mab file!
And this .mab information can just be appended to the executable for single-file distribution, if needed, during the build. No need to distribute two files, potentially with synchronization issues.
2021-05-14
2021-05-14. Open Source › mORMot Framework
HTTP(S) is the main protocol of the Internet.
We enhanced the mORMot 2 socket client to push its implementation into more use cases. The main new feature is perhaps WGET-like processing, with hashing, resuming, console feedback, and direct file download.
2021-05-08
2021-05-08. Open Source › mORMot Framework
The .zip
format is from last century, back to the early DOS days, but can still be found everywhere. It is even hidden when you run a .docx
document, a .jar
application, or any Android app!
It is therefore (ab)used not only as archive format, but as application file format / container - even if in this respect using SQLite3 may have much more sense.
We recently enhanced our mormot.core.zip.pas unit:
.zip
read/write,2021-02-22
2021-02-22. Open Source › mORMot Framework
Why OpenSSL? OpenSSL is the reference library for cryptography and secure TLS/HTTPS communication. It is part of most Linux/BSD systems, and covers a lot of use cases and algorithms. Even if it had some vulnerabilities in the past, it has been audited and validated for business use. Some algorithms […]
2021-02-13
2021-02-13. Open Source › mORMot Framework
Last week, I committed new ASM implementations of our AES-PRNG, AES-CTR and AES-GCM for mORMot 2.
They handle eight 128-bit at once in an interleaved fashion, as permitted by the CTR chaining mode. The aes-ni opcodes (aesenc aesenclast
) are used for AES process, and the GMAC of the AES-GCM mode is computed using the pclmulqdq
opcode.
Resulting performance is amazing: on my simple Core i3, I reach 2.6 GB/s for aes-128-ctr
, and 1.5 GB/s for aes-128-gcm
for instance - the first being actually faster than OpenSSL!
« previous entries - page 1 of 12