-
mrluigi2017 started the topic kbmMWGlobal in DLL hangs in when DLL is unloaded 5.23 in the forum kbmMW 11 months ago
Hi Kim,
We noticed that when the kbmMWGlobal is included in the uses of a DLL the application that uses the DLL will hang when it tries to unload it.
DLL Code:
library DllWithKbmMw;{KbmMw source folder is in search path of project}
uses
kbmMWGlobal;{$R *.res}
begin
end.Exe Code:
unit Main;{
Unloading DllWithKbmMw.dll is…[Read more]
-
mrluigi2017 started the topic kbmMWSecurity bug: DoOnLogin never called 5.23 in the forum kbmMW 11 months ago
Hi,
Looks like the line 3222 in kbmMWSecurity contains a bug which results that DoOnLogin is never called.
if (ctx.Actor<>nil) and (not ctx.Actor.Internal) then
Should be:
if (ctx.Actor=nil) and (not ctx.Actor.Internal) thenKind regards!
-
mrluigi2017 started the topic Bug in kbmMWGlobal kbmMWGetFileVersionInfo in the forum kbmMW 1 year, 2 months ago
Hi,
It looks like there is a bug in kbmMWGlobal’s kbmMWGetFileVersionInfo function.
Current code 5.23.00:
ADebug:=(FI.dwFileFlags and VS_FF_PRERELEASE)=VS_FF_DEBUG;[Read more]
ASpecialBuild:=(FI.dwFileFlags and VS_FF_PRERELEASE)=VS_FF_SPECIALBUILD;
APrivateBuild:=(FI.dwFileFlags and… -
mrluigi2017 started the topic in the forum kbmMW 1 year, 2 months ago
Hi,
It looks like there is a bug in the kbmMWGetFileVersionInfo function in kbmMWGlobal.
Current code 5.23.00:
ADebug:=(FI.dwFileFlags and VS_FF_PRERELEASE)=VS_FF_DEBUG;[Read more]
ASpecialBuild:=(FI.dwFileFlags and VS_FF_PRERELEASE)=VS_FF_SPECIALBUILD;
APrivateBuild:=(FI.dwFileFlags and… -
mrluigi2017 started the topic SmartService version in the forum kbmMW 1 year, 2 months ago
Hi, I noticed that if I use a version string in a smart service but I don’t provide a version in the TkbmMWSmartRemoteClientFactory.GetClient it still works. I don’t know if this is intentional or not. AFAIK the version is part of the fully qualified service name, so if there is a mismatch between client and server it shouldn’t find work.
For…[Read more]
-
mrluigi2017 started the topic Looks like the C4D shop has some issues in the forum kbmMW 1 year, 4 months ago
Hi Kim,
When I try to reach the C4D Shop http://www.components4developers.com/shop.html I get an internal server error 500.
Kind regards,
Luigi
-
mrluigi2017 replied to the topic TkbmMWI18NLanguage language name property in the forum kbmMW 2 years, 6 months ago
Hi Kim,
It looks like this one is reintroduced in version 5.21 (and still there in 5.22)
Kind regards,
Luigi
-
mrluigi2017 started the topic ORM and preventing memory leaks in the forum kbmMW 2 years, 8 months ago
Hi,
In my application I have the following code:
Requirement := TPMRequirement.Create;
tryRequirement.PMItem := Orm.FromDataset<TPMItem>(FItemTable, True, True);
Requirement.RequirementItem := Orm.FromDataset<TPMRequirementItem>(FDetailTable, True, True);…
Because the constructor of the TPMRequirement instanciates both PMItem and…[Read more]
-
mrluigi2017 replied to the topic ORM Update – Tablename gets quoted 3 times instead of 1 in the forum kbmMW 2 years, 11 months ago
I have written al little test application and I noticed that the tripple quotes only appear when quotes are used when creating tables. Since this is a new project I have decided to use uppercase and no quotes for tables names (and other identifiers).
-
mrluigi2017 replied to the topic ORM Update – Tablename gets quoted 3 times instead of 1 in the forum kbmMW 2 years, 11 months ago
Never mind. I just wrote a little demo application and the update works fine. I screwed up something else šĀ Sorry
-
mrluigi2017 replied to the topic ORM Update – Tablename gets quoted 3 times instead of 1 in the forum kbmMW 2 years, 11 months ago
The connection pool is a TkbmMWUNIDACConnectionPool with a kbmMWInterbaseMetaData and a kbmMWInterbaseSQLRewriter.
-
mrluigi2017 started the topic ORM Update – Tablename gets quoted 3 times instead of 1 in the forum kbmMW 2 years, 11 months ago
Hi,
When I do an ORM.Update I get a dynamic SQL error. In Devart’s DBMonitor tool I see that for some reason the table name in the where clause is quoted 3 times instead of 1:
UPDATE “Person” SET “FirstName” = :FirstName,”LastName” = :LastName,”Notes” = :Notes WHERE “””Person”””.”PersonID” = :KBMMW_KEY_PersonID
The strange thing is that when I…[Read more]
-
mrluigi2017 replied to the topic TkbmMWDatastoreSequencer.GetValue UpperCase issue in the forum kbmMW 3 years ago
We use Pascal case for our database including the sequences. I have change the sequences to upper case now š
-
mrluigi2017 started the topic TkbmMWDatastoreSequencer.GetValue UpperCase issue in the forum kbmMW 3 years ago
Hi,
I noticed that the TkbmMWDatastoreSequencer.GetValue always make the sequence name an uppercase . I think it would be better if this was a setting(perhaps in the MetaData component).
Kind regards,
Luigi
-
mrluigi2017 replied to the topic REST HTTP StatusCode without raising an error in the forum kbmMW 3 years, 1 month ago
Sorry that š I am using kbmMWHTTPSysServerTransport. I have tested it with kbmMWTCPServerTransport and kbmMWTCPIPIndyServerTransport and that seems to works fine.
-
mrluigi2017 replied to the topic REST HTTP StatusCode without raising an error in the forum kbmMW 3 years, 1 month ago
It looks like that in unit kbmMWHTTPSysServerTransport (didn’t check other transports yet) on line 579 the status code that is set is overwritten by this line of code:
reshlp.HTTPStatusCode:=reshlp.HTTPStatusCodeFromServerStatusCode(res.StatusCode);
-
mrluigi2017 replied to the topic REST HTTP StatusCode without raising an error in the forum kbmMW 3 years, 1 month ago
In Fiddler and Postman I still get a 200 status code instead of 201. Are you sure that this should work?
-
mrluigi2017 started the topic REST HTTP StatusCode without raising an error in the forum kbmMW 3 years, 1 month ago
Hi,
I want to control the what http status code is returned to the client. I know you can do this with
kbmMWRaiseHTTPError(407,’….’)
or
raise EkbmMWHTTPException.Create(407,’…’)
But it seems a bit odd to use an error if it isn’t for instance if you want to return a 201 Create status code.
I have to set the status code like this, but it…[Read more]
-
mrluigi2017 started the topic What kind of path type is used for i18n? in the forum kbmMW 3 years, 1 month ago
Hi,
What kind of path type is used in the example below? Does it have a name?
i18n.Save(”, ‘json’, ‘file:..\..\Translations.json’);
Thanks in advance!
Kind regards,
Luigi
-
mrluigi2017 started the topic TkbmMWI18NLanguage language name property in the forum kbmMW 3 years, 2 months ago
Hi,
I am writing a small application that reads translations from a database and converts it to a i18n yaml file, this works fine except that I didnāt figure out a way to set the TkbmMWI18NLanguage name property since itās read only. For now I have just modified the TkbmMWI18N source and added a write to the name property and this works fine. I a…[Read more]
- Load More
2 thoughts on “mrluigi2017”
Comments are closed.

[…] Source: kbmMW v. 5.00.01 Beta released […]
Detlef,
I new you would be always alive…
Hope we can use this new stuff asap.
We unfortunately forgot messed up a digit when we made the download available on our portal, resulting in some people downloading v. 7.50.00 instead of 7.75.00. This has been corrected. Please redownload.
The images should be a little bigger, can hardly read them…
Hi. They are 850×450 or so. Just need to zoom in
[…] on the “REST easy with kbmMW #1” article, I will now show one way to interact with data from a […]
ęčÆęäŗäøęļ¼
http://blog.sina.com.cn/s/blog_44fa172f0102wlbf.html
[…] a user. The logout may happen automatically due to the user being idle for too long. Refer to the previous blog post for more […]
Go have a couple of beers and as you down them, you will start to “feel better”!
Hope you feel better soon!
Wow, windows crash caused by loosing 2 wisdom teeth. I think even for MS that is a first š
This is really sad day, but everything will be fine, not always the case.
Shane, beer wonāt do it. He needs to move up to Bourbon!
!
We will help you through the dayā¦..(Danvaegt)
[…] REST easy with kbmMW #2 ā Database […]
[…] REST easy with kbmMW #3 ā SSL […]
[…] REST easy with kbmMW #4 ā Access management […]
[…] REST easy with kbmMW #5 ā Logging […]
[…] REST easy with kbmMW #3 ā SSL […]
[…] REST easy with kbmMW #4 ā Access management […]
[…] REST easy with kbmMW #5 ā Logging […]
[…] REST easy with kbmMW #1 […]
[…] REST easy with kbmMW #2 ā Database […]
[…] REST easy with kbmMW #4 ā Access management […]
[…] REST easy with kbmMW #5 ā Logging […]
[…] REST easy with kbmMW #1 […]
[…] REST easy with kbmMW #2 ā Database […]
[…] REST easy with kbmMW #3 ā SSL […]
[…] REST easy with kbmMW #5 ā Logging […]
[…] REST easy with kbmMW #1 […]
[…] REST easy with kbmMW #2 ā Database […]
[…] REST easy with kbmMW #3 ā SSL […]
[…] kbmMW Scheduler Tidbits #2 […]
[…] kbmMW Scheduler Tidbits #3 […]
[…] kbmMW Scheduler Tidbits #4 […]
[…] kbmMW Scheduler Tidbits #1 ā Async methods […]
[…] kbmMW Scheduler Tidbits #3 […]
[…] kbmMW Scheduler Tidbits #4 […]
[…] kbmMW Scheduler Tidbits #1 ā Async methods […]
[…] kbmMW Scheduler Tidbits #2 ā CRON […]
[…] kbmMW Scheduler Tidbits #4 […]
[…] kbmMW Scheduler Tidbits #1 ā Async methods […]
[…] kbmMW Scheduler Tidbits #2 ā CRON […]
[…] kbmMW Scheduler Tidbits #3 ā Handling delays […]
Is this/these method(s) thread safe? Must this approach be executed in the Client/Server main thread? Or can it function safely in a threaded session environment?
Hi, It is safe to use the cipher and hashing classes within threads. However only one thread at a time can use the instance. So if you have multiple threads running, give each thread its own instance of the cipher component and it will be able to use it without problems..
[ā¦] Adding an additional table for new info is easy, as its done the same way as shown inĀ REST easy with kbmMW #2 ā Database [ā¦]
If kbmMW can automatically generate this TContact unit according to the definition of the table of database, it would be a wonderful thing!
Is this plan?
That is the plan.
For those who plan to use ORM, this is definitely a happy plan! Such as the early realization of this function, so I prompted the use of kbmMW ORM in my project .
The foundation is there now with 5.03.00. Next release will contain the schema import feature.
Kim:
myConfig1:=TkbmMWConfiguration.Create(‘myconfiguration1’);
myConfig2:=TkbmMWConfiguration.Create(‘myconfiguration2’);
TkbmMWConfiguration.Create method not have a param in 5.03 version.
You are right. The example was incorrect. I have updated the blog with the correct sample.
Great Post Kim, Really like Kbmmw tools, But do you have a tools to generate the ORM classes from an existing database?
Its on its way for next release.
WithObject(AObject:TObject) and WithInterface(AInterface:IInterface) has a example code is a good…
Hi,
Basically:
Scheduler.Run(
procedure (const AEvent:IkbmMWScheduledEvent)
begin
…:=AEvent.&Object.Someproperty; // But accessing Someproperty must be threadsafe.
end).WithObject(yourobject).Activate;
best regards
Kim/C4D
This means YOU, personally, really should weight your words SERIOUSLY z j z, and I strongly advice you to delete this written defamation x f l g of both characters and a huge group of people who do not take slander and character assassination like this easily n s k p h. I do not know which organization you have got to back you up, but if you do not care about lawsuits in the multi-million dollar range, fine, just keep on what you are doing b d d m v. If you DO care about spending x-amounts of money to try and defend this CLEARLY written libel, then take my DELETE-advice. Your “Post” is now officially taken both copies and screen-shots of and digitally stored for later use and evidence. This is just a warning. We are antifa, we do not forget. alexis.bourquard@outlook.fr
Reeeeallly š You need a chill pill. Im happy though that you decide to put a print out of my drawing on your fridge š Im happy to inspire.
Can I have a dozen boxes of those?
Kim wondering what Socrates is thinking about?
Please notice that emergency release 5.04.32 has been made available. It fixes two bugs. One related to compiling for NextGen and the other has to do with TkbmMWCustomSimpleClient exception handling, which unfortunately broke in 5.04.30. It is strongly recommended to immediately upgrade from 5.04.30 to 5.04.32.
HI Kim. Very Usefull Feature you have made. You’re converting kbMMW , not only in a the best SOA framework for delphi, but also in a developement framework for making easier tasks and prevent creating boiler plates every time we need to do advanced tasks like this. I personally liked the feature of parsing the XML.
Great JOB!!
Hi Francisco,
My goal has always to make complex things easy with kbmMW. From release of v5, core RTTI functionality in kbmMW expanded so much, that these syntactical sugar things is possible in a consistent way. Good things do come from working with other environments from time to time… things can inspire… Java Spring Bootstrap did. Both in what is terrible in Spring Bootstrap, and what is actually very nice features. Those I have attempted to reinvent in a kbmMW relevant way. Im happy that it works for other people than myself š
I really can’t wait for the new stuff you’re telling, its getting very interesting.
Best regards
Great Post. I’m waiting for next release.
WOW Hi Kim Great News and congrats, after some weeks of silence it worth the wait,
Hope next release will come soon.
Just a little request: Is there a way you can add an extra parameter to the primary Field definition,
so we can define a Custom Generator Class or Anonimous Procedure, wich you can assign/pass the current ORM Object content and the ORM context, in this case the TAccount
Ex:
—
…
…
[kbmMW_Field(‘name:id, primary:true, generator:custom’,ftString,40, TkbmMWCustomGIDGenerator )]
[kbmMW_NotNull]
property ID:kbmMWNullable read FID write FID;
or
[kbmMW_Field(‘name:id, primary:true, generator:custom’,ftString,40,
procedure (AORMRecordObject: TObject; AORMContext: TkbmMWORM; AResultType: TFieldType; AResultValue: Variant )
begin
…
Use a custom procedure or Stored procedure to genearte a new UID
For example in Mysql there is no Generators, but here is way to create a stored procedure to generate
concurrent Thread-safe UIDs based o a sequence name or curent record values (Consecutive numbers base on the Year of the date of creation of the account, and generate something like ‘2018000099’). Or if you have Comming MariaDB 10.3.x, there will be Sequence generators
…
end;)
]
[kbmMW_NotNull]
property ID:kbmMWNullable read FID write FID;
Hi,
I most probably wont be able to put that feature into the release right now, since Im attempting to actually getting it released sooner rather than later. However kbmMW already supports falling back to a non native sequencer/generator when a database do not support it. Then kbmMW will automatically generate a pivot table, which, under transactional control, is hosting all sequencers. It is also threadsafe.
Thank for th replya KIM. No problem, I know there are things first, the main usage for this proposal is to generate sequences based on
some record field values or otehr kind of input, like a unique ID pero Year, generated by concateaning the year and the sequence:
2018000001, 2018000002, 2017000001.. (at that time in 2017 when the record was created), the year value can come from a field value of the current record or get it by calling YearOF(Date()) at delphi side before posting. So we manage many sequences pero table base on a Field or combination of fields.
Wow That wa s a Huge update š
—-
Added support for adding dynamically created TkbmMWORMTable which are not
related to a specific class or record
—-
Does this mean I can Build a TkbmMWORMTable object with definition and query them with the ORM?
For example define a table at client side, and use it to query records from the server, so the server doesnt need to have the table class definition anymore.
Yes and perhaps š
The “yes” is for the statement that you can create a TkbmMWORMTable instance and populate it with field info and attribute settings at runtime. Whoever holds the TkbmMWORMTable instance will be able to use it to generate/upgrade datastorages, query, insert/delete/update and so forth, but obviously not via a class (since you decided in this case not to have one), but instead via object notation or TDataset data.
The “perhaps” is because as long as you can get the appropriate settings from the client to a server side instance of a TkbmMWORMTable, you can essentially let the client manipulate the datastorage via the ORM.
In kbmMemTable v. 7.80.00 this not working
kbmMemSQL.ExecSql(‘SELECT * FROM A ORDER BY Field1, Field2’)
Gives exeption
Exception.Create(‘Order field not a selection field: A_Field1);
kbmMemSQL.ExecSql(‘SELECT * FROM A ORDER BY 1,2’) is fine
When I try this, the TObjectList comes back with data, but the only JSON I get back is:
{“Value”:{},”SafeValue”:{},”Weak”:{},”IsWeak”:true,”RefCount”:3}
Have I missed a step somewhere?
Have you registered TContact with kbmMWRegisterKnownClasses?
Yes I did:
implementation
initialization
kbmMWRegisterKnownClasses([TContact,TObjectList]);
For some reason when I pasted in my code, TObjectList became TObjectList. Guess the site sees the as an html tag…
Can’t seem to paste in the openBracketTContactcloseBracket code, it’s getting stripped off. But it’s in the code! š
kbmMWRegisterKnownClasses([TContact,TObjectList<TContact>])
Below is a portion of the code that I implemented to test the capabilities of the Authorization Manager etc.:
[kbmMW_Service(‘name:MyREST, flags:[listed]’)]
[kbmMW_Rest(‘path:/myrest’)]
TRESTFunctionsService = class(TkbmMWCustomSmartService)
public
[kbmMW_Auth(‘role:[WRITER], grant:true’)]
[kbmMW_Method(‘EchoString’)]
[kbmMW_Rest(‘method:get, ‘ + ‘path: [ “echostring/{AString}”,”myechostring/{AString}” ]’)]
function EchoString([kbmMW_Rest(‘value: “{AString}”‘)] const AString: String): String;
…
var
FAuthMan: TkbmMWAuthorizationManager;
…
begin
FAuthMan := TkbmMWAuthorizationManager.Create(Self);
FAuthMan.Options := [mwaoAutoLogin];
FAuthMan.AddRole(‘READER’);
FAuthMan.AddRole(‘WRITER’);
FAuthMan.AddActor(‘JOEBLOW’,’joeblow’,’READER’);
FAuthMan.AddActor(‘ALLIEBACK’,’allieback’,’WRITER’);
kServer.AuthorizationManager := FAuthMan;
…
end;
function TRESTFunctionsService.EchoString(const AString: String): String;
begin
Result := AString;
end;
When I run the server and open firefox to navigate to the url, I get the login dialog, but when I enter the defined usernames and passwords, I continually get prompted to login again.
I even tried this:
procedure TWSMobileServer.AuthLogin(Sender: TObject; const AActorName, ARoleName: string; var APassPhrase: string;
var AActor: TkbmMWAuthorizationActor; var ARole: TkbmMWAuthorizationRole; var AMessage: string);
begin
// Use this event in Wellsoft to follow traditional authentication logic
if Assigned(AActor) then
begin
LogEntry(‘Actor Name: ‘ + AActor.Name);
LogEntry(‘Role Name: ‘ + AActor.DefaultRole);
LogEntry(‘Pass Phrase: ‘ + AActor.PassPhrase);
AMessage := ‘200’;
LogEntry(‘Message: ‘ + AMessage);
LogEntry(‘Count of Authorizations: ‘ + IntToStr(FAuthMan.Authorizations.Count));
end;
end;
…to test if the necessary authorization classes for actor and role were being created and populated properly, and they are. Authorizations count is always -0-.
If I cancel the repeating login dialog – even after entering valid credentials – the servers sends back ‘Anonymous user not authorized’.
One thing that I noticed in stepping through your code, is that this method:
function TkbmMWAuthorizationResources.Get(const AName:string):TkbmMWAuthorizationResource;
var
i:integer;
s:string;
begin
s:=UpperCase(AName);
for i:=0 to FResources.Count-1 do
begin
Result:=FResources.Items[i];
if Result.FName=s then
exit;
end;
Result:=nil;
end;
… has an FResources.Count of -0-.
So even though I’m using a ‘smart’ service and defining resources inline in the declaration using attributes, it appears that the problem could possibly lie in the fact that kbmMW doesn’t see any resources as being defined.
As you can see from the previously provided code, I’ve defined 2 actors and 2 roles. They both show up in your code. But no resources show up.
Anything that I might have missed?
Since I couldn’t get the smart service to generate a resource simply by supplying the following declarations in the service interface:
[kbmMW_Auth(‘role:[READER,READWRITER], grant:true’)]
[kbmMW_Rest(‘method:get, path:helloworld, anonymousResult:true’)]
[kbmMW_Method]
function HelloWorld:TMyResult;
…I decided to try explicitly creating a resource this way:
FAuthMan := TkbmMWAuthorizationManager.Create(Self);
FAuthMan.Options := [mwaoAutoLogin];
FAuthMan.DefaultMaxIdleTime := 0;
FAuthMan.AddResource(‘helloworld’);
FAuthMan.AddRole(‘READER’);
FAuthMan.AddActor(‘JOEBLOW’,’joeblow’,’READER’);
FAuthMan.Actors.Get(‘JOEBLOW’).MaxIdleTime := -1;
I then traced the creation of AddResource into the constructor of TkbmMWAuthorizatonResource, where my new resource ‘helloworld’ was uppercased and assigned to the FName field.
When tracing the authorization process I discovered in TkbmMWAuthorizationResources.Get – in the comparison
if Result.FName=s then
…Result.FName contains the value of ‘READER’ – a role name, while s contains the value of ‘MyRest.1.0.HelloWorld’, a comparison that will never evaluate to true.
Hi,
Please use our normal support channels for support, since they are monitored more closely. (nntp://news.components4developers.com)
With the kbmMW Enterprise Edition installation you also get a host of demo apps. Look in .\Demo\AuthRESTFishFact for one showing how to use authorization along with REST.
It probably will clear up the confusion.
Are you missing:
kbmMWSecurity and kbmMWSmartServiceUtils in your service units uses clause in the initialization section?
If so, the kbmMW_…. attributes are never read and understood by Delphi.
But please move the diskussion to our news server.
Thats a good solution. Maybe that behaviour should be reported to EMB?
Regards, how are your vacations? š
Vacations?… what is that š
https://www.cnblogs.com/kinglandsoft/p/9814502.html
Looks great!!, Is this also also Capable to Count() XML nodes that has certain attribute value? I was thinking to have something like XQuery/XPath does. ĀæAlso SUM, Max, MIN?
Yes. Use the subset to select nodes to look for and the whereclause to match attribute values via the xmlattr helper function.
Thanks kim, is this already in latest kbMMW release? or it will be comming soon?
It is already in the latest kbmMW version, except for the VALUES(..) syntax which comes with the next release.
Greetings,
We are an educational agency and we use the KBMmem table free edition(XE6 – 7.70.00 CodeGear Edition)
It looks like the article indicates that there should be a download for Delphi 10.2
I only see up to 10.1 available.
Can you please assist us in getting this version?
Thanks,
Hi, Last CG edition were for 10.1. Since then we have not made a CG release.
Can there be a way to output code using kbmMWORMTable instead of defining a delphi class?
I was thinking for example, to use that code generated in a script, so instead of recompiling an exe or dll, just sending the script and running that in a pascal-language scripter ie. TMS Scripter, DWS, PaxCompiler, etc
I suppose it is possible but it would probably require some additional code to serialize and deserialize the class for communication with the kbmmw server
Well Maybe I didn’t explain well, Instead of streaming a class, I can stream a script text, then the upgrade can be done at server side. so instead of output a class definition, maybe it can also output something like:
———————-
var
tbl:TkbmMWORMTable;
fld: TkbmMWORMField;
begin
tbl.TkbmMWORMTable.create;
tbl.fields.add( TkbmMWORMField.Create(xxx, xxx ,…) );
tbl.fields.add( TkbmMWORMField.Create(xxx, xxx ,…) );
tbl.indexes.add (TkbmMWORMIndex.Create(xxx, …) );
end
—————————
Or at least if you can declare a delegate class for the source generator (or overridable methods like ProcessTableName, processFields, etc), so we can generate out own custom output and delegate it:
i.e.
MyORM.GenerateSourceCode(tbl…, TkbmMWSourceCodeDelphiClass ); // (TkbmMWSourceCodeDelphiClass can be a class or object instance)
or
MyORM.GenerateSourceCode(tbl…, TkbmMWSourceCustom); (can be a class that generates custom Delphi code like the first example, or any other custom scripting language that we can run at server side)
Regards
Hi,
Im a bit unsure about why you would do that. You can simply use SQL statements from your script. It should be an easier way to define a table than dedicated script code?
Perhaps Im completely overlooking something, so please explain your use case so I can understand.
Hi Kim, well it is more for updating a database/table, rather than creating a new one.
yes for a fresh new database a SQL script is better.
I was thinking a way to make this process ‘scriptable’, so intead of embedding hte table definitions in an exe, store it via a script (using kbmMMWORMTable sentences intead of class definitions), and that can be executed by the host when starting, if there are changes they will be aplied. My doubt comes if I later can consume that kbmMWORMTable to query stuff (this can be done via scripting, using PaxCompiler or DWScript, which are able to define classes or connect Delphi classes with scripts), or do I still the My Table Class definition (class with rtti attributes) to query stuff?.
Hope I have explained it well, or maybe Im complicating things and can be done easier. Your opinion is always important to me.
Regards
Hi,
kbmMW’s ORM encompass two types of SQL… its own generic SQL and translated SQL. The generic SQL is IMO what you would use as the definition in the “script”. Send the generic SQL to the kbmMW server, and let the ORM rewrite the statements to translated SQL and execute those. Then surface the table (a kbmMW ORM method), and you will have access to it via a number of ORM methods taking a TkbmMWORMTable as argument instead of a class instance. Next minor release will add additional Query methods that can operate directly on TkbmMWORMTable.
I dont think its possible to directly define classes in PaxCompiler or DWScript and use those for direct ORM use. You should define the class in Delphi code, and then refer to the class from PaxCompiler/DWScript. The reason is that neither of those (afaik) has Delphi compatible extended RTTI support which kbmMW ORM require.
Non-breaking spaces wreak havoc in JavaScript, too. I think it happens sometimes when people copy code from web sites.
I have a static checker that runs as part of a build process to pick these up. I think Iāll need to check my Delphi files, too.
Seems to be required at times…. just funny it only happens in few places, and not generally.
Nice Christmas Gift!!
But I read this:
āāāāāā-
ā Added support for UPSERT SQL statement which works like an UPDATE or INSERT
combined statement. If the UPDATE succeeds, no INSERT is made otherwis
records are INSERTed.
āāāāāāā
Isnt The other way? āIf the INSERT succeeds, no UPDATE is made otherwise
records are UPDATEDā
This is recalling MySQL āInsert ā¦.. On Duplicate Key Updateā¦.ā
Hi, yes and no. It depends on the database what happens. Using pure ANSI92, it will rewrite to a special INSERT combined with a SELECT followed by UPDATE. On Oracle it will either use UPDATE followed by conditional INSERT, or MERGE. On MSSQL it will convert to MERGE. In SQLite it will do an UPDATE that may fail silently followed by a special INSERT/SELECT combo.
Basically there are no one perfect way to do an UPSERT. Each database has its “best practice” regarding that.
Done :). Hope the newsgroups can be recovered or at leats migrated to a new platform.
Regards
I havnt given up on them… will see if they can be imported in here somehow.
Ok, so for example in Mysql, will it be translated to ‘Insert .. on Duplicate Key Update….’?
No, currently MySQL will be rewritten to ANSI SQL compliant code for UPSERT that will work with older versions of ANSI SQL.
Eg.
upsert table1 (fld1,fld2) VALUES (10,20) WHERE fld3>10
MySQL, Interbase and PostgreSQL:
INSERT INTO table1 ( fld1,fld2 ) SELECT 10,20 FROM (SELECT 0 as i) AS mutex LEFT JOIN table1 ON (fld3 > 10) WHERE i=0 AND fld3 IS NULL;
UPDATE table1 SET fld1=10,fld2=20 WHERE (fld3 > 10)
Oracle:
MERGE INTO ‘table1’ USING ( SELECT 10,20 FROM DUAL) ON (fld3 > 10) WHEN MATCHED THEN UPDATE SET fld1=10,fld2=20 WHEN NOT MATCHED THEN INSERT ( fld1,fld2 ) VALUES ( 10,20 );
MSSQL:
MERGE INTO table1 USING ( SELECT 10,20 ) AS __src(_fld1,_fld2) ON (fld3 > 10) WHEN MATCHED THEN UPDATE SET fld1=10,fld2=20 WHEN NOT MATCHED THEN INSERT ( fld1,fld2 ) VALUES ( 10,20 );
SQLite:
UPDATE table1 SET fld1=10,fld2=20 WHERE (fld3 > 10);
INSERT INTO table1 ( fld1,fld2 ) SELECT 10,20 WHERE (SELECT Changes()=0);
You can try the ORM sample “Standalone” and type in various statements and have them rewritten.
Great news. Hope it works for you…
Me too š
I canāt receive an activation email
@Tom YU – I have activated you.
Cool functions Kim
Is there one that you can live receiving the console output fo a process?, not the resulting when the process has ended, but receiving strings while process is executing, like a log viwer.
Also can you add a ‘Forgot password’ option to your Blog Login?, because I forgot Mine š
Hi,
“live console output” : Good idea. I will make it available as a variant of the ExecuteProcess method.
“forgot password” : If you dont type in anything in the login and just click the login button you will be placed on a page where you can handle forgotten passwords.
Kim/C4D
—
ālive console outputā : Good idea. I will make it available as a variant of the ExecuteProcess method.
—
Yes like when running a console app and you can get the current progress, etc
—-
āforgot passwordā : If you dont type in anything in the login and just click the login button you will be placed on a page where you can handle forgotten passwords.
—
Sorry to use this post to tell you this, but when I try to login, or click on the Login button with empty user and password, it sends me to the wordpress site, and seems my account doesnt exists, when when I try to subscribe again it seems like is to create a new Blog intead of recovering my old password.
Hi,
Ive updated the site, so you should be able to click Forgot password now.
The code in the OpenAPI function is pretty simple. It just calls the GenerateOpenAPI method of the OpenAPI stub generator with the service to be āOpenAPIāifiedā and optionally a settings string. The settings string can be empty
with the service to be āOpenAPIāifiedā ??
Yes
Thanks Kim. Just some observations a have seen there are two version published in customer portal with the same name ‘kbmMW Enterprise Edition ‘ but one seems to be the Pro and the other the Enterpise version.
Regards
Hi Francisco… yeh… noticed it… By accident had the Pro version along with the Ent version customer page. Its fixed.
Totally agree.
Nice offer too.
Best Regards
Is it possible create index on two fields?
CREATE INDEX idx5 ON table1 (fld2, fld3)
I tried but error occurs āfield not found āfld2,fld3ā²ā
Hi,
Yes… however there is a minor bug preventing it.
Open kbmSQLMemTableAPI.pas, locate line 452 which looks like this:
a:=’,’;
and replace it with
a:=’;’;
Then rebuild.
I also do not understand the vilification of the EU.
It is not the EU forcing the UK to leave but the other way round.
The EU is not perfect but they seem to have a better political system when
I compare it to the quality of our politicians.
Let’s hope that when I wake up it was all just a terrible nightmare.
Wow really cool feature makes reading XML, and create XMl bindings a lot easier withotu having to create an XSD.
What about offers for renewal? š
The offer is also working for 1.st year renewal (thus for a new subscription).
This is really cool stuff! I love you š
Thank you thank you thank you… I need all the love I can get š
Great stuff, howp to see it soon.
BTW Im having prblem login into the forum and blog. it send me to wordpress site
Great!
It can be a product at it’s own!
KbmmW is more cool now than ever!
https://www.cnblogs.com/kinglandsoft/p/10766911.html
å®ęäŗäøęēę¬ļ¼
Thank U
Wow!
I don’t develope “prof” Fmx applications because Livebinding is a true problem, don’t permits us to convert vcl forms that have a lot of components…
I think you have found a true (and comfortable) solution!
It’s part of KbmMemtable or KbmMW?
I want try it…
Hi Stefano,
I hope its at least a good path for a true solution if not the solution already.
It is part of kbmMW Enterprise Edition when I release… which Im attempting to get done every day now…. There will be more interesting news on that front after the Enterprise Edition release.
best regards
Kim/C4D
Hi Kim,
I have buyed KbmMW several times (always KbmMemtable) in last years , but for different reason, I have always used another Delphi library tool for remoting/services.
With smartbinding I can reconsider KbmMW, but I need to test latest features, especially on high performance Rest, Services, Data remoting for a large number of concurrent users (now I have under stress Xdata and Mormot for test…).
How I can test it (after study latest upgrades and features)?
Hi,
I hope all the features stacked up in kbmMW in the end will make it a more interesting choice for you. I know you have sent me an email too…. stay tuned….. more is coming!
best regards
Kim/C4D
I have been playing with smartbinds and I have to say that it’s really powerfull and simple in use. It’s a verry elegant solution! Thank you!
I hope that kbmMW SmartBind supports fmx Listview.
My app GUI uses a lot of Listview,
Is there a plan for implementation?
Hi,
Currently I did not make direct support for ListView….. But I will have a look at it when Im dome with SmartBinding v2 to be released shortly š
Thanks for the tips,
I have a lot of problems in my Android apps regarding this matter, Hope this tip solve’s them.
https://www.cnblogs.com/kinglandsoft/p/smartbinding-with-kbmmw-3.html
Looking forward to supporting Listviewļ¼
Looking forward kbmMW SmartBind supports fmx Listviewļ¼It’s Very useful In App
It turns out that not only I need it alone.
Hi,
Two things:
1) Tyop: immeIDately –> immeDIately
2) āProperty Disable := false;ā ā shouldn’t that be āDisableDā? To disablE something is what you do, a method; whether something is disableD or not is an attribute or property.
Otherwise: Dang, that looks cool! OK, so maybe I’ll get around to looking at this newfangled FireMonkey sh…tuff one of these years. š
Sounds like a tight coupled house to me ā¹ Maybe you can teach those Danish contractors some OOP principles š
Probably too late….. it needs refactoring.
I would like further clarification and examples regarding the proper use of DevArt / PostgreSql Provider Connection Pull.
I would like further clarification and examples regarding the proper use of DevArt / PostgreSql Provider Connections Pool.
WIB on android (and WIB in general)
SmartBinding
REST
ORM
Scheduler
Examples, best practices not just theory. thanks and best regards
Best Practices with kbMMW server
how to:
Using FireDAC+KbmMW
Create a RESTFull service
ORM principles
JSON and XML object marshalling (including classes that hold datasets)
How to:
Best practices with Security/Encryption (REST, ORM)
smartservices (rest + classic), combined with orm using both your own queries / table struct and also the kbmmw orm table approach.
Hi,
An intro to kbMMW for a complete newbie.
No intermediate or advanced demo. Just a basic hiwyo get started with little assumption that the viewer ‘just knows’.
Thanks.
August 14? Is this a message from the past?
LOL
Nope… very current š Where do you see Aug. 14?
In the first sentence:
āThe Delphi / C4D World Wide Webinar continues full speed ahead, this saturday August 14. 2019, again at 15:30 (3:30PM) CEST (UTC+2).ā
Best Regards
Ooops… corrected š
Hej igen,
Two more things:
1) Now youāre talking about a āDisableDā property, so please disregard my comment about that on the previous post in this series. Maybe that was also just a tyop. š
2) Am I right in surmising that if one wants to use Smart Bindings with ordinary Controls but canāt decide which property to put the binding string into, one can just subclass any TControl and add oneās own String property, calling it āBindStringā or something (or whatever one likes, since apparently the Binder uses RTTI to go through all String properties looking for validly formatted binding strings)?
2) Yup… any string property can be used, also your own.
Thank you to Boian Mitov for his great show of OpenWire, Visioino, a preview of the “secret” LightLab which is being worked on and allot more stuff that was shown.
Unfortunately I had massive technical issues with my mic(s) (tried several), which makes me deduce its probably not the mics, but rather Zoom that is acting up. For that reason I had to postpone the presentation of SmartBinding….
If/when will this be available on youtube?
It will be available this weekend. Was supposed to be online last weekend but went sick (flu) and occupied
Hi. is there a chance you can show how to implment an authentication mecvhanish for other languages to acces a KBMMW rest service?
Let say if we can develope an OAuth 2.0 auth frameowrk so any other app (not delphi) can authenticate and use a REST service.
Hi,
Ill look into it.
Thanks KIM, I have this kind of request every time and I still use a normal service for sending user/password and return a custom Token. But it should be great to show how to implement those frameworks. Including a Pure Restful Web Service. I knot it should not be difficult, but lack of knowledge on some of there topics make me difficult to implement
Hi Kim, I know I have already mentioned it in a Blog Post but Good ideas to show sould be:
1) Implement authentication standards like OAuth 2.0, JWT (JSON web tokens), etc to communicate with other
languages rather than delphi.
Could be example in Javascript or even with using Delphi but with an App that will not use KBMMW on client side (latest TRestClient or TOauth2Authenticator).
2) How to implement RESTful services (DataSnap replacement) and how to communicate other NON KBMMW apps (Delphi-TRestClient, Javascript, PHP).
3) Scriptable services using PascalScript, DWScript.
4) Possible Dates for next release š
Greatļ¼ļ¼ļ¼
I donāt know when to release it.
I second that, looks great!!, But when but will this be released?
Regards
I translated into Chineseļ¼
https://www.cnblogs.com/kinglandsoft/p/11713426.html
Great Work. Tom YU!!
hi,kim
Can you release a version that supports smartbind for listview. I am looking forward every day.
thanks!
Kim,
Some questions:
1. When I have a service derived from TkbmMWCustomQueryService how can I make it multi-threaded? I.e. when there are multiple users and threads requesting TkbmMWClientQueries how can I make them run in different threads so that one long query of one user would not make everybody wait? Where can I read more on that subject?
2. Is it possible to have TkbmMWClientQuery on a client side but on a server side to have a procedure that would construct the dataset āmanuallyā instead of using pre-made query components? Is there any documentation or sample code?
Thanks in advance,
Alex Liberov
Hi Alex, I will try to answer you with the things I have already learned.
1) Any KbmmwXXService is Multithreaded, the only thing you need to set the service flags that is if there will be a Pool for a limited number of instances of a service:
—-
// Return the maximum number of instances that is allowed to run.
{$IFNDEF CPP}class{$ENDIF} function TkbmMWCustomServiceXXXX.GetMaxInstances:integer;
begin
Result:=-1; //unlimited
end;
—
or you must create an instance per thread/session (stateful). In the kbmmw service wizard, select ‘stateful’ service.
——-
{$IFNDEF CPP}class{$ENDIF} function TkbmMWCustomQueryServiceXXXX.GetFlags:TkbmMWServiceFlags;
begin
Result:=[mwsfListed,mwsfStateful];
end;
——
check demo: Demo\Basic\Stateful
2) Dont understand exactly your question, do you mean to use a clientside query like ‘select * from XXxxxx’ , withotu having to have a corresponding Server side qury object for that select? the queyr servcie is for that, ti create a new TkbmMWXXXquery (FireDAC, ODAC, ADO, Etc) on the fly when a sql query is submitted via kbmMWClientQuery.
check demo:
Demo\Basic\Client (Coomont client demo)
Demo\Basic\SQLiteServer (serve side demo using SQLite database)
Running the installer will generate an error
Thank you for the bug report. I have just updated the installer and also fixing an Android compilation error. New release is 5.10.01 which replaces 5.10.00
Hi,Kim;
When I use kbmMW 5.9+Unidac 7.4.12,I can use the fileds.Origin to update a database view. When update the Unidac to 8.0.1, all the fields.Origin is null.the code like this:
for I := 0 to qry1.Fields.Count – 1 do //qry1:Tkbmmwclientquery;
begin
lst1.Items.Add(qry1.Fields[I].Origin);
//the lst1.text like dbo.A1.Name;dbo.A1.Age… when I use Unidac 8.01,the lst1.text is ”
end;
I’m Sorry for my poor English,I hope you can understand what I said.
Best regard.
Hi Alex,
regarding your second question, there are several ways to do this.
1. Put a kbmMemtable on the service. You can populate that e.g. using the before open event. On your client you simply call the memtable (using named queries, the @NAME in SQL on client) to get that data on your client.
2. Call a custom service (the first part of Kim’s presentation) to receive a streamed dataset to your client. At your client you can then populate a kbmMemtable to present that data.
Both have the disadvantage of not automatically resolving (not 100% sure in case of option 1). But you can keep track of the changes on the client using a custom delta handler to transfer the changes back to the server.
I often use these techniques to present data in a screen or on a report that needs some work to make, e.g. a lot of calculations, or a query that would become very complex any other way.
When I need to transfer a delta back to the server to resolve, I often “abuse” the way Kim has made it. I place a normal query (often a Firedac server query) on my service, that has a sql to produce an empty result set (eg using where 1=0). It will return all the fields I need to be able to resolve to. If needed I also create the origins (needed when you use joined tables). Then I open this query on the server and resolve my delta stuff line by line to this dataset.
kbmMW also has the onInsert, onUpdate and onDelete events where you can plug in code on the server to handle code using different ways than the standard.
Hope this helps. kbmMW takes some time to learn but once you do it is very flexible and powerfull.
What are the steps to get the 50% Black Friday discount on new kbmMW Enterprise Edition?
Carlos
Hi. Simply get the discount coupon from the Blaise Pascal magazine which has just been released.
I have purchased issue 83. I have found your article and in page 57 I read “HERE IS YOUR BLACK FRIDAY COUPON CODE” but no code appears. I press on the text, go to components 4developers.com, login and nothing special happens.
What can I do?
Carlos
Check the next line.. thats the code. (Do not publish it here).
Next line is empty
No it is not. Look for next not empty line.
Yes, you are right
Hi, can I have a trial license for kbmMemTable?
Thanks,
Ahsin
Please check our new kbmMW Community Edition. It includes kbmMemTable which can be used same license.
Hello,
kbmMemTable does seem to install in kbmMW CE
Yes,
kbmMemTable CE is included in kbmMW CE.
kbmMemTable is a prerequisite for kbmMW, so needs to be there.
Hi,
Happy New Year!
Can you publish a TOC (Table of Contents) on the Blog site?
I trying to get an archive your articles as old kbmMW docs seems to disappeared. A ToC would be a valuable reference to all articles, specially for the series like “REST easy…”
If I want to read the REST easy series right now i have a hard time to found them.
Best Regards
I had that earlier on, on the previous look… it was not used much because it also is difficult to navigate.
I had an archive too, also not really a good way to find stuff.
Right now I have a large search field at the top. Type REST and search and it will find lots of articles.
If you want the REST easy articles, type REST easy.
best regards
Kim
Hi
the Site Map (I think you just switched on) totally enough!
Thanks for this.
BTW there is no #23 article in the Rest Easy serial.
Best Regards
“BTW there is no #23 article in the Rest Easy serial.”
Nope… it is a topic started long time ago, that I never finished. I’ll see if I can get it done at some point š
Hi,
Any hope to restore the old Docs repo ie the Academy?
Right now the server says for the Docs and Articles menu: “Internal Server Error”
The plan is to have the docs rewritten and updated to WordPress format as a new article series.
Until then, there is a place to download them:
https://components4developers.blog/2018/11/09/directaccesstodocumentationkbmmw/
Actually the documents are now again available directly on:
http://www.components4developers.com
best regards
Kim/C4D
Hi,
Thank You! I start downloading them right away!
Regards
Sandor
Same here. There was a time I really only knew Delphi, so I used it by default. But I’ve been around the blocks a few times, and used, know, and taught a lot of other languages and tools, and still prefer Delphi. It isn’t perfect, but it is my preference. So glad to see it growing and expanding.
Kim,
Including these libraries helped me to build kbmMW:
requires
IndyCore,
IndySystem,
rtl,
kbmMemRunD103Pro,
vcl,
FIBPLUS_D26,
dclib,
dclie,
FMX,
DbxCommonDriver,
dbexpress,
vclFireDAC,
FireDAC,
FireDACCommonDriver,
FireDACCommon,
dac260,
ibdac260,
vcldesigner,
adortl,
ibxpress;
Some are probably overkill.
Looking in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Embarcadero\BDS\20.0\Known Packages helped me find exact package names.
Hi,
Thank you for the list. I have extracted and added support for FIB and IBDAC, MYDAC and UNIDAC from your example.
Keep them coming š
best regards
Kim/C4D
Seeing you appear is the happiest thing in my recent time
š
Im not going anywhere…. just busy š
Where can we download the compile tool? Iām finally updating to RIO, and I tried to leave everything default (paths Delphi uses) this time regarding where Delphi places everything (bpl, dcu, etc). kgmMemTable installed without any issues. kbmMW, fails miserably with 100s of imports that shouldnāt be imported. The error I ultimately get is ā[dcc32 Error] E2621 Export table in output file too large: exceeds 65536 limits]. Very frustrating. It seems so un-related to what Iām actually trying to accomplish. I get a few of these: [dcc32 Hint] H2161 Warning: Duplicate resource: Type 12 (CURSOR GROUP), ID 32761; File c:\program files (x86)\embarcadero\studio\20.0\lib\Win32\release\FMX.Controls.Win.res resource kept; file c:\program files (x86)\embarcadero\studio\20.0\lib\Win32\release\Controls.res resource discarded.
If Embarcadero needs to work on anything, they need to work on this. Adding third party components should be a no-brainer, but every vendor puts their code in different places, modifies library paths, modifies environment paths, one has a batch file, on and on. Just so frustrating. Iām hoping your compiler tool will help. Can it be downloaded yet or am I missing the obvious and itās here and Iām not seeing it?
Hi, I feel your pain.. .literally š
The “exceeds 65536 limits” is because the linker imports all requirements, that are not in the requires section, as internal entrypoints in the BPL it is about to create. A BPL is just a DLL, and MS has defined a max of 65536 exports in a DLL.
This link explains some of the things you can add as requirements:
https://stackoverflow.com/questions/61061554/compiling-kbmmw-design-package-in-delphi-10-3-vcl-conflict-error-e2199
If you are using ReportBuilder, it also adds a huge amounts of exports to the DLL. Make sure you have all ReportBuilder bpl’s listed in the requires section of the kbmMW runtime package. (If you indeed are using ReportBuilder, let me know what you have added, so I can add that knowledge to the Compile Tool)
The Compile Tool needs a few minor updates in the kbmMemTable and kbmMW sources, so it will be released along with the next kbmMemTable and kbmMW release.
best regards
Kim/C4D
hi,kim
When will kbmMW release the new version?
best regards
Tom yu.
Now š
Hi,
I tried to use the CompileTool but always getting build errors, while the IDE can build the packages and install just fine.
The error which I got:
“f:\work\Delphi\pkg\kbmMW\Source\kbmMWRunD103Ent.dproj” (Build cl) (1) ->
(_PasCoreCompile cl) ->
kbmMWRunD103Ent.dpk(33): error E2202: Required package ‘vcldb’ not found [f:\work\Delphi\pkg\kbmMW\Source\kbmMWRunD103Ent.dproj]
which is strange because the Runtime package does not require the vcldb package, but the build system wants it and fail.
BTW
NEXUSDB v4.5 = NexusDB450ll260;NexusDB450sr260;NexusDB450sd260;NexusDB450db260;NexusDB450se260
DBISAM4 = dbisamr
Best Regards
Hi,
I have seen that behaviour on my 10.2 installation, where I suspect unusual long search path’s to be the reason… but I have not found a solution as of yet.
Thank you for the info about some 3rdparty package names. The NexusDB one is one of the tricky ones, as it changes with each version released as far as I know?
I have altered the compile tool so its valid to have question marks in the middle of requirements to indicate that something needs to be filled out by the user.
Hence for NexusDB, this would be the default requirement string:
NexusDB???ll[!–IDEPACKAGEVERSION–!];NexusDB???sr[!–IDEPACKAGEVERSION–!];NexusDB???sd[!–IDEPACKAGEVERSION–!];NexusDB???db[!–IDEPACKAGEVERSION–!];NexusDB???se[!–IDEPACKAGEVERSION–!]
Hi,
I think the new/latest version is not compiled with sqldir. I tried to use compiletool but it also gives error. When I just want to re-create the projects, newly prepared projects cannot be compiled. Does anyone have any suggestions?
What error do you get?
If you support android, it will be more perfectļ¼
Updating Android applications outside Google Play is imo not recommended, and in most cases it would require having a rooted device.
Will it be able to also update Windows Services?
Yes indirectly by using an executable.
It is possible to specify in the manifest file that an installer executable should be transferred and then run.
Stopping and installing service stuff, usually require the installer to be running in an elevated state, why the installer most likely will ask if it is ok to run it elevated.
Hi Kim when do you plan to release this new feature?
Expect release today.
ĀæAny celebration discount for renewals? š
The currecny exchange rate of country Vs dollar is killing me
Hi. unfortunately not.
Could you check your email and your portal? I have ordered license and send email. No any reply.
I have not received any email. I have replied to you by email. The license has been extended.
best regards
Kim/C4D
Do we already have tests and benchmarks with metrics of KbmMW performance gains with FastMM5?
Hi,
I have not made any formal benchmarks or tests of it as of yet. However Pierre do claim a 30% higher performance on highly threaded applications, in which category kbmMW easily can end up in on large setups.
But since you can download FastMM5 for free for testing it out, you can try it out on your own known setup before making a buy decision.
Just remember to live up to the license agreement for FastMM5.
Hi All,
I read your article in Blaise Magazine. Iām not a C4D user/customer and Iām wondering if itās possible to try and test your compile tool. In case of, than you to provide me an download link.
Best regards,
Laurent
Hi,
Thank you for your interest in the compile tool. It is currently only bundled with source versions of kbmMemTable and kbmMW. What specifically would you like to test?
best regards
Kim/C4D
Can I use Method = sslvTLS1.2 at server with these 2 crt and key files created by cmd: “openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt”
Im not an SSL expert myself, but I see no reason why you should not be able to require TLS 1.2 with that certificate file.
Thank you.
Hi Kim
I hate to be pain in the neck. I did EXACTLY what this article says (triple checked it) and my client cannot connect to the server (message ‘Connection lost.’).
I guess my .cnf file has some wrong settings. In your .cnf example file I just changed [ req_distinguished_name ] section to reflect my settings. I generated .crt and .key files on my VPS Win Server 2019 machine in the cloud where my kbm server is. All openssl.exe files and .dll files are in my kbm server folder. Server starts ok, but from my client (there are ssl dll’s in client folder) I get this Connection lost message.
Is there anything you can suggest me to do? On my Win Server 2019 I don’t have IIS installed. Could that be a problem?
IIS is not a requirement for using HTTP.sys.
Please read these blogs post too for more details:
https://components4developers.blog/2018/03/29/rest-easy-with-kbmmw-12-fishfact-demo-using-http-sys-transport/
https://components4developers.blog/2018/10/18/rest-easy-with-kbmmw-16-multiple-servers-using-http-sys-transport/
Hi, Kim
We followed your above instructions, and we also get āConnection Lostā from client, we have checked all the source codes, nothing is missing. At this point, we donāt know how to implement this new feature. Please advice
First of try to run them on the same computer to rule out any intermediate filtering.
Secondly check that the demo server and client application here in your kbmMW installation (\Demo\Other\OpenSSL) works untouched.
If it works for you, then progress from there to figure out where the difference is.
Just tried the demo, Start SrvDemo first, Click Listen, no error, then start CliDemo, Click Connect button, no error, switch to Query services tab, click Query button, got ‘Connection Lost’.
Also tried the āQuery allā and āQuery selectedā buttons at Named query services tab, got āConnection Lostā error too, even though I assigned SimpleClient1 to the Client property of query components.
Hi Kim,
Long time customer (~2002). Iāve asked about this before a few times, and something always comes up that pulls me away;
Iām wanting to use one open port/ip address and combine the WIB and standard message processing. I looked at the demo that is in the samples/demos folder, and it doesnāt have much depth. Can you create a demo with some depth, say a service that has 2 or 3 RPC services and handles WIB on the sever, then on the client, call the RPC services and publish subscribe a message from a client form, and on the same form call one of the services that returns a dataset?
Iām not wrapping my head around how I can selectively subscribe to a service (or publish a subscription on the client, say a chat app for example), and then also send and RPC request. I guess Iām wondering how to get a message from the server to a specific form. Server side, pick off the requests, route the messages to the message handlers/queues, and then route the RPC correctly (preferably not in a single thread, so the requests donāt become a bottle neck).
How about Security? How do you secure the WIB? Is just using SSL going to do it? I thought I read somewhere that due to the routing, the message have to be clear text? Maybe an example of securing messaging?
Thanks Kim,
Long time kbmMW customer
Regards,
Curt
I am working on a screen cast + source code showing a multitier WIB driven rolodex which should incorporate most of the questions you have.
However to answer your questions.
First, if you choose to use the WIB, you can make request/response and async push operations concurrently on the same transport and port. You will however be limited to using the protocols that are available that are WIB compatible (that generally boils down to the binary protocol).
If you would like to provide a REST server too, accessible from web browsers, you would need an additional transport (with additional port) which handles the REST or AJAX protocol, since it operates in a different way compared to the WIB.
Basically all message routing is based on subscriptions. Your WIB transport would (in the simplest fashion) subscribe for > which means that it subscribes for all types of messages from anybody to anybody. This is an OK starting point, but the subscriptions definitely must be dressed more detailed up before your multi tier system goes into production (or even user test).
You will often use a hub/spoke transport topology, where your traditional application server will act as a hub node, and the traditional clients as spoke nodes.
Hence the clients connects as usual to the server (in a similar way as you are used to).
The clients will each of them usually announce the subjects they subscribe on, to the hub, and the hub will only deliver messages to spokes that are subscribing for those messages. But it also means that a message may be delivered to a number of spokes, if multiple spokes subscriptions match with the subject of that message.
A request is simply a message. It differs by having a subject starting with REQ.something. Hence the server must be able to receive messages that have subjects starting with REQ to be able to process them. With the initial simple subscription for > (which is a catch all subscription), the server will get all REQ messages sent by any client node.
When a server has processed a REQ message, it will reply with a RES message. The reply will go out with an address (as part of the subject) that includes the specific node’s node ID that originally made the request. For that reason, nodes should only subscribe for REQ.xxxxx subjects that contain their own node id. AutoSetupResponseSubscription is a simple property to set on the client transport to set to true before connecting. Then the relevant RES..xxxx subscription is setup on the client node.
A client may do the regular request with a blocking wait for the response, or it may ask for the response to be async, in which case an event or an anonymous method is called.
Other messages can be sent async by simply using SendMessage fron any node.
Look great!
Hi,
For the life of me i canāt get this to work. I can get the api as a download file buthttp://localhost:888/myserver/api/index.html?url=/myserver/api
gives me back a āRequest not supportedā. I followed the instructions as best as possible.
5.10.20 Community Edition
on Delphi 10.3 CE
Thanks.
Thank you for the lazarus fixes.
Congrats!
v. 5.13.10 has been released.
It is primarily a bugfix release.
5.13.10 Nov 15 2020
New stuff
=========
– Added SendTimeout to TkbmMWCustomTCPIPIndyMessagingServerTransport
Fixes
=====
– Fixed XE5 compilation
– Fixed warnings and hints.
– Fixed compilation when directive FMX is defined.
Great Post, I am waiting for the next Black Friday ⦠darn ⦠missed it š
Would it work in a MVVM architecture?
Yes, since it avoids direct hard links between GUI and data, it will work well in any disconnected architectures.
Hi Kim,
Did you get time to complete your screen cast with the RoloDex demo? I didnāt mention this in my original email, but Iād like to have the RPC stay RPC and the Messaging stay Messaging, meaning I donāt want the messaging to contain datasets that are currently passed back and forth using RPC. Obviously this is a long running project, Iāve got a few projects Iām juggling now, and will be back on this one for this request again soon.
Thanks,
Curt
Hi, I send two emails for the support and sales address regarding some question Iāve about kbmmemtable. But didnāt get any answers⦠are these still operative? if not how can I get support?
Hi,
I did reply, but perhaps the reply has gone missing in a spamfilter?
You asked if kbmMemTable supports FPC, and yes it works with FPC. I can not guarantee it works with all the FPC target platforms as I have primarily verified that it works with the Win32 target, but I see no reason why it should not work towards other targets.
best regards
Kim Madsen
>kbmMWHID contains high level support for: TkbmMWGenericBarcodeReaderHID
in which version kbmMW?
Hi,
kbmMW Enterprise Edition
best regards
Kim/C4D
Please report it to https://Quality.embarcadero.com so it can get fixed!
Done
Hello
I didn’t see this component (TkbmMWGenericBarcodeReaderHID) in kbmMW Enterprise Edition 5.13.10
Thanks
Hi,
It is in 5.14
Hi Kim,
Just downloaded the new 7.91 kbmMemtable, however it still has memory leak which I have reported on the forum: https://components4developers.blog/forums/topic/memory-leak-on-filter-is-enabled/
I have also sent an email to you attaching a simple project to demonstrate the error on Feb 24,2021.
Hope you can fix it so I can use the filter string on TKbmMemTable.
Thank you and best regards
Sorry, the correct link to the forum is: https://components4developers.blog/forums/topic/memory-leak-on-when-filter-is-enabled/
He may not see it in here. Write something to the post in order to bring the post up!
The post is already on the top. There are very few traffics there.
Hi,
The leak (only on Lazarus) is fixed in 7.91.10
best regards
Kim/C4D
I tried to compile this project using the guidelines provided for the 74 bit but get the linker error unresolved external āvtable for Kbmmemtable::TkbmMemTableā
Hi,
Another C++Builder user has reported a problem that while not using kbmMemTable, it exhibits same error, and a solution for it.
http://codeverge.com/embarcadero.cppbuilder.writing/c++-xe6-64-bit-package-with-pa/1989656
/Kim
If you have a compile problem with OutputDebugString in kbmMWSmartBindVCL.pas, please clear your browser cache and redownload kbmMW Enterprise Edition v. 5.15.00 again.
kbmMW 5.15.10 released which fixes compilation for Android and a very specific SmartBind shutdown / reuse error.
I have just spend time (too much) on setting C++Builder 10.4.2 up to compile kbmMemTable for Win64 and link a simple project with it. As long as one is following the instructions in the blog, and makes sure to setup your own project to compile and link with the appropriate settings (matching paths, target compiler etc. and matching compilation for using runtime libraries or not), then it will link.
C++Builder is however a PITA to work with IMO. Not because of C++Builder in itself, but because as a C++ developer you have to extremely careful about referencing the correct paths and files, and since there are so many of them, there is a real chance of referencing wrong ones.
I only recommend using C++Builder if you really have no other choice, because you would be so much more productive using Delphi.
The complete simple project can be downloaded from here (I used kbmMemTable Pro in this case, but replacing the text Pro with Std at relevant places within the project files, it will work as well with kbmMemTable Standard Edition).
https://drive.google.com/file/d/1OoxGNyRx3evnyNqf_3E2BXKnChwE1UsO/view?usp=sharing
I believe your exclusion from DelphiFeeds is just an oversite. We can also look at GetIt again, I donāt recall all the details. Iāll drop you an email.
Hi Jim,
Thank you for your reply!
I do not know why DelphiFeeds has never replied, nor reacted to any of the various ways I have tried to contact them over the years. I have no clue, but it distinctly feels like being ignored. I can understand messages getting lost from time to time, that happens to me too, but with the amount of attempts, and various ways both directly and indirectly, not hearing anything, it does feel more deliberate.
About GetIt, then there were issues at the time I submitted (May 31 2015) which Luis Navaro would look at during a conversation going on until July 1 2015, but it died after that. As I remember GetIt mostly preferred source files then, and were not great with replacing bpls that might be in use by the IDE.
/Kim
DelphiFeeds was started by the Gurock brothers. Even before their acquisition by Embarcadero for their TestRail product they had lost interest in Delphi and the DelphiFeeds website. I know of several other blog authors whoās please to be listed on DelphiFeeds went unheard, they werenāt just targeting you. These days Jim McKeeth has taken over DelphiFeeds and things have started to change. Personally though Iād recommend everyone use BeginEnd, itās a better site.
Good to hear it is not my gentle being that was not to their liking š
Jim mentioned it had to be a mistake/oversight, so I suppose it will be sorted at some point, although there seemingly has been no change at DelphiFeeds until now.
I have noticed though that BeginEnd is now aggregating this blog… Yay š
I suggested your Blog to BeginEnd and today itās listet!
Hi,
Thank you for your suggestion to them! I noticed them listing this blog a couple of days ago, but thank you for your support!
/Kim
https://quality.embarcadero.com/browse/RSP-28097
Hi,
I think that the issue is somewhat different. I do provide Unicode strings as the arguments, and it does work on IOS 64, which afaik mimics MacOS closely API and handling wise. But I have not tested it as an OSX application so I do not know if “my” problem will be there on OSX or not.
/Kim
Thanks, Ill publish this!
Hi!
There is also DelphiFeeds.ru ā a Russian-language Delphi-blog aggregator ( http://delphifeeds2.ru ). If Iām not mistaken it has been working since 2009.
Nice one. But using tabs for indentation hurts my eyes and the code style guide. alot.
Yeh… I agree… But it was done to make it “simple” for the contest to read it, as tab often is the choice for C like languages.
Downloaded from google and adapted for FPC/Lazarus. Only compiled for 64 bit. Project1 best result 14760. Project2 best result 11102.
Multi-threaded version of Project1 on 16 core cpu best result 98200.
Was it the multithreaded version I provided? Then it is actually a 1 bit per 1 prime candidate, which is what Project2 also does. Project1 is 1 byte per 1 prime candidate.
Hi,
Agree.
1. Donāt do free advertisment of this site and donāt list it here.
2. You can use source or resource fingerprinting to trace back to the leaker, Devexpress doing this it helps to discurage license owners from leaking the product.
Anyway you can try to fight this, with variable success rate. Best option (in my opinion) is the closed support forum for the license ownersā¦.
Regards
How do you identify the “leaker”? I imagine you would need to pay such sites to check if there is a leaked product and what “fingerprints” (if you are using any) there are.
My software is also listed there.
I doubt, the “crack” really works.
So anyone paying them will only loose money.
And they deserve so.
There is non-zero chance that this is a pure scam. E.g. they don’t actually have any cracks / source code, just grabbing money.
What you can do…
File a complain about its Facebook group: https://www.facebook.com/Developer-Team-100594108617421
File a complain about web-site to abuse@namecheap.com (DNS) and abuse@privatelayer.com (hosting).
Don’t know if any of this will help, but it is worth trying.
They are criminals. Period. May be worth filing with the FBI. Justice may be slow but sweet!https://www.fbi.gov/investigate/white-collar-crime/piracy-ip-theft
I don’t know why you are publicising them, they won’t care and you’ve just pointed all your legitimate customers at a way to get your software for less. Why tempt them with that?
Also providing a direct link to a pirate site is never a good idea. The site itself could be full of all sorts of malicious browser exploits that you’re potentially exposing your more curious readers to.
Thank you for the comments so far.
I have included the link to them because it is not an unknown site for people. Anyone searching for any of the known 3rdparty products will find that link as one of the search results. Google and Facebook have no problem in referring to the site.
I am pretty sure that the web site in it self, do not pose a threat, as I have numerous detectors running, who have not flagged it as dangerous.
Does it hurt my own business by pointing my customers to it?
If it does, then those customers would anyway be looking for a piracy site, and they would be arseholes from the outset, which I can’t do much about.
About tracking. Yes that is an option, one I have used several times. It does however not make sites as such go away. Being open about their affect on small developers is the only way forward I believe.
I have started the ball rolling, I hope others will pick it up and unite in an effort of informing our customers and specially potential customers (or would be arseholes) that it is just not worth it, using pirated software.
Dear Kim,
Maybe you donāt know, but at first I pirated your products.
I used it for 1 year in my own products. During this time, I saw that kbmmw worked very well and I was very satisfied.
After this satisfaction, I decided to buy. I have been your customer for about 10 years and I am satisfied with your products.
The reason why I am writing this; There may be a possibility that the pirated use will turn into a customer for a certain period of time.
Gogole Translate
Your website components4developers.com has not been working for a few days.
Hi, thank ypu for the report. It is back up running again.
The mORMot test program uses the wrong class on Windows.
It could be interresting to see also the new mORMot 2 THttpAsyncServer. Especially on Linux.
I have created an issue https://github.com/d-mozulyov/NetBenchmarks/issues/1
You don’t mention the OS, min. image size or spin-up times. Request responsiveness is important but when building systems to scale horizontally .. at, um, scale, deployment efficiency is also a consideration.
Hi,
OS is Win10 Pro reasonably new updates.
The monolithic executables range from 2MB to 12MB. The node.js sample required installation of the node.js runtime environment which is a 27MB download, and perhaps roughly twice the installation size. It was required anyway for the NetBenchmarks client.
I allowed for 6-8 seconds spin up time after start, before triggering the client, which in turn (depending on the number of client threads) took 1-2 seconds starting all threads up, before beginning the calls and measurements.
In addition the NetBenchmarks test included two JSON files, one which were sent to the server, and the other which can be used for comparison with the returned result.
Those two files are not a requirement when running the blank variant of the test, in which case only the node.js solution required anything but the simple executable.
why you donāt give a try to Webbroker default?
check this testhttps://en.delphipraxis.net/topic/5620-pgpool-linux-apache-top-performance-delphi11/
highly scalable both in IIS windows and Apache linuxhttps://github.com/danieleteti/delphimvcframework true MVC
really Delphi can be excellent as server
Hi
RTC is more or less abandon-ware now, which is very sad. I used it and was forced to drop when the Teppi bought it and dropped the development. There is some info about a totally rewritten new library, but no other sign. The package is not supporting Delphi 10.4 and 11.
It would very good if they restart the support for the latest Delphi.
Hi
The file uServers.pas absences in archive.
It is part of the NetBenchmark package on Github
Fijne kerstdagen!
I have been using kbmMW in desktop applications for 10 years, I am a fan. It’s a good framework. It works cool. But it is also a big pain:
1. The weak documentation. I can’t understand some approaches or methods.
2. The absence of demos with fresh features
3. The hidden errors in my complex application after any new release of kbMW (The last two was a broken JSON and a problem with load table from XML)
4. The ORM is cool – but I spent a lot of time on adaptation it with Firebird Database on my MPV project. I didn’t resolve a problem with creating definitions for hierarchical classes. I don’t sure what I will use ORM on my real application.
5. The absence of support. The waiting three or four weeks for an answer on errors’ notice – It is unacceptable
Hi Kim,
I uses 2.61 long time and 5.xx, so flexible product,
in my opinion you need to open a demo page on github
For the product, it would be much better if there was script language support.
I am currently trying to do something with python language.
a flexible infrastructure by using the power of kbmmw within the scripting language.
Best Regards
I use FastScript as a scripts interpreter in my projects. it’s very powerful
Hello Vadim,
I am interested in this topic, can you post sample code snippet
best regards
dryphon@gmail.com
This is a simple example. You can use the script from a file on kbmMW server. It can be used for changing the servers logic without changing a servers code.
unit Unit24;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, fs_iinterpreter, fs_iclassesrtti, fs_igraphicsrtti, fs_iformsrtti, fs_iextctrlsrtti, fs_idialogsrtti, fs_iinirtti, fs_imenusrtti,
fs_ipascal, fs_icpp, fs_ijs, fs_ibasic, fs_tree, Vcl.StdCtrls;
const script = ‘var s2 : String;’ +
‘begin ‘ +
‘s2 := ”Test”; ‘ +
‘s2 := sInput + s2;’ +
‘ShowMessage(”ShowMessage from Script ” + s2);’ +
‘sOutput := s2;’ +
‘end. ‘;
type
TForm24 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form24: TForm24;
implementation
{$R *.dfm}
procedure TForm24.Button1Click(Sender: TObject);
var s : TfsScript;
begin
s := TfsScript.Create(Self);
s.SyntaxType := ‘PascalScript’;
s.Parent := fsGlobalUnit;
s.Lines.Add(script);
s.AddVariable(‘sInput’,’String’,’DataForScript’);
s.AddVariable(‘sOutPut’,’String’,’DataForScript’);
// s.Compile;
s.Run;
ShowMessage(‘sOutPut: ‘ + s.Variables[‘sOutPut’]);
s.Free;
end;
end.
Hi,
C4D actually did have a product, that included script support, kbmMWM (kbmMW Management framework). It was back in the 2.5-3.x timeframe as I remember.
Despite the countless hours put into making an easy to use management console etc. for handling myriads of kbmMW servers, including (3rdparty) scripting built in, it was never a hit between users.
So I discontinued it after some years.
However I do understand the feature of scripting in relation to kbmMW could be very useful to some. I am however a bit unsure about exactly what level of scripting is really asked for.
Is it interesting to have a complete scripting based development IDE/kbmMW system and why? I somehow find it questionable that people would want to write a complete kbmMW based n-tier system in script language, when they can use Delphi and for some versions of kbmMW Lazarus/FPC for the same?
Hence my take would be to use scripting for specific functionality, like custom calculations and string management etc.
For that purpose kbmMemtable’s SQL parser actually works wonders as it can handle non SQL expressions to which can include math and string manipulation with variables, native functions etc.
In fact right now I am working on extending that feature to include scripted functions written in a math type of way: myfunc1(x,y)=sin(x)*y etc.
It even supports conditions and loops to make for a relatively simple to use, but very powerful scripting engine (that I am using in various customer projects too).
Then there is the scripting which produce for example HTML or other types of output. Is that a need/wish?
/Kim
Hi,
I’ve been writing desktop applications for years and I want to replace that with the web.
I want to create my business objects on the server layer using scripts and output html in the user interface.
I’ve been doing a qaurtex pascal review lately. kbmmw and qaurtex can be a good couple. I’ll do R&D on it.
Exactly what I mean is an integrated development environment, like sap.
best regards
Kudos ā¤
Great move!
Can you also add to the banned list the USA for the destruction of sovereign Yugoslavia, for the bombing of Iraq and Syria, for the overthrow of the legitimate government of Libya?
You obviously needs some history lessons Alex.
Start out with this: https://en.wikipedia.org/wiki/Timeline_of_Yugoslavia
Then read this: https://en.wikipedia.org/wiki/Socialist_Federal_Republic_of_Yugoslavia
Yugoslavia was forcefully put together by a dictator, and it was exploding from the inside out in various smaller or bigger events ever since.
Did US “help” that movement… yes most likely starting from 1984, but the base reason any “success” was the internal fractions and province nationalistic tendencies that was already existing.
Apart from the history lesson, it HAS NO BEARING ON UKRAINE!
Yes, we need to view a full list of companies who are support fascism and the destruction of civilians in Donetsk and Luhansk
Stupid comment Alex.
It was not Ukraine that invaded Russian territory. It was “little green absolutely not Russian men” that invaded and overtook the power in those territories. And now it is “little green men again” but this time at least out of the bush, showing themselves as Russian.
There are NO excuse for this invasion what so ever!
I am proud of trying to stay on the right side of history on this one. You ought to do the same, many Russians are well aware that what is happening now, is not right.
Although I see it as a good cause and I’m against what is happening. I’m disappointed to see the lack of rage when in Iraq, Libya, Syria, Yemen and Afghanistan cities were/are completely destroyed and hundreds of thousands of civilians were/are killed. Even the decision to bomb Yugoslavia and separate Kosovo were made exclusively by NATO, not the UN. You may create good guys and bad guys or justifications for past actions, but based on your comments that’s not your point/ goal but the humanitarian crisis it creates, which is the same one that was created on all those countries when they were invaded. I’m sad to see that European life’s are more important than those from Africa, Middle east or in any case almost everywhere else in the world. I doubt I’ll ever see you posting “I will not sell to the super power on the west” doesnt matter what they do and they have done a lot, unless it is in Europe off course. In any case, is your statement and I respect it.
Hi Mike,
Firstly I am 100% focused on what is going on in Ukraine. What is happening does not only have an impact on Ukraine, but the rest of Europe why it obviously is in need of attention. I am sure if you feel your home place being attacked or in danger of being attacked, then you would react too in one way or the other.
Secondly, war is bad, civilian casualties are bad, regardless of where it happens. This is not a religious war, it is not even really a war about minerals or rare metals or food or water. It is a war without ANY reason except the delusions of a despot trying to hide his own crimes in the fog of war.
Although I know most wars are blamed on the US, it is not really the full truth for the majority of them.
The Yugoslavian war was something going on since the forced dictatorship in 1928ish, and there were all sorts of problems and attacks between the fractions all the way until the break up of Yugoslavia. It is easy to blame the US, but in reality the base problems started way before the US had any involvement in anything. You should blame the Soviet Union more than the US or NATO, since they were in all practical reasons in charge, like they were in all of eastern Europe.
I remember the horrendous killings in Srebrenica, and I remember how UN forces did not do anything of all sorts of reasons, one of them not having the mandate.
I remember the Danish operation “BĆøllebank” where Danish battle tanks took out several positions that were attempting to ambush the UN vehicles and positions.
The war was vicious, but the atrocities did not happen because of the UN or US or EU or Denmark being there, but despite them.
The fighting in Africa is going on about all sorts of things. And yes I believe there are most likely western big business involved there too, at least in some of the conflicts. That is terrible, and again all conflicts should be stopped.
The fighting in the Middle East usually has been against some dictator that was treating some parts of the population ok, but the remaining badly. The uprising would not happen, regardless of external involvement, if citizens would be content with their system.
The exit from Afghanistan was terrible and was entirely a shit show left behind by Trump and is complete ignorance. However there is truth in the fact that it is extremely difficult to make people talk with each other when corruption and religion goes hand in hand, because nobody wants to loose out. So I somewhat understand the rationale of leaving, but I absolutely think the control should have been moved to UN level although I have personally heard from war correspondents that there really was no solution, and the warlords had no intention at any time of putting down arms and cooperate, and the sitting government, regardless of who it would have been would be extremely corrupt.
On the surface it looks easy to just say no to war, but we are dealing with humans.
I will not silently accept the Ukrainian war, and certainly not that Putin is going to dictate that numerous European countries should be moved back in time into the rule of Russia again, against their will.
So blame me for this, I do not care. I am loosing loads of money on caring, but I am at least not in physical danger like the brave people of Ukraine!
This is European hypocrisy. Why didn’t Europeans talk to those who lost their lives in Iraq, Libya, Syria, Afghanistan, Palestine and Africa because of the war launched by Europe and the United States? I can only say fuck you.
čæå°±ęÆę¬§ę“²äŗŗēčä¼Ŗćé£äŗå 为欧擲åē¾å½ååØęäŗå¤±å»ēå½ēäŗŗļ¼å¦ä¼ęå ćå©ęÆäŗćåå©äŗćéæåÆę±ćå·“åęÆå¦åé擲ļ¼ę¬§ę“²äŗŗå½ę¶ęä¹äøč·³åŗę„å½å£ęÆå©ļ¼ęåŖč½čÆ“ęä½ å¤§ē·ć
And yet another mature comment from a confused Chinese citizen (37540862@qq.com)
But I suppose I can get out of it that it is strengthening my stance on the decision.
Certain people just want to have everything for nothing.
Go donate money to Ukraine and you can get a f…. license yourself instead of acting as a moron, but you will have to come out of hiding!
fuck your mother.
A very mature comment by a very confused Chinese citizen (1233344442@qq.com)
Come on, please behave yourself, you can have different opinions, but donāt embarrass yourself, or our race. Thanks.
US Kill milions people for yearsć
its time to change sale to USA.right?
double standard is your face~~
Hi Chinese cowardly anonymous friend from Hongkong.
You know what is double standard? You complaining about having to pay the SAME PRICE as everybody else for my products!
The SAME PRICE the people of the USA has been paying all the time!
You most likely do not even have an interest in using it in the first place. But you still feel compelled to complain.
Now you can get it _EVEN_ cheaper than the agreement that has been POSTPONED or PUT ON PAUSE if you do not understand what I mean by postsponed.. Just show your compassion with the people of the sovereign country of Ukraine, and DONATE some money. Then you can also get a f…. license for almost no money. But you will have to come out of hiding… guitar player š
/Kim
Should Close sale to china and russia and America Immediatelyļ¼just do it~~~
And you should stop being a dick! Just do it!
Do you have a brainļ¼ļ¼ļ¼
Hi coward hiding behind an american IP address, and a fake email address.
Surely I have more heart than brain in this case, would you not say that?
In fact I have more courage and spine than you obviously have! Tossing out idiotic comments without being man or woman enough to stand by it!
COWARD!
What Ukraine is to Russia is different from what Taiwan and Hong Kong are to China. No country will tolerate a part of its territory being divided from it. The U.S. has done a lot of things against China over the years to hinder its rise, but of course all of them are disguised in a so-called democratic veneer, which is very confusing to the general public. The conflict between Russia and Ukraine is actually a Russian-American conflict. Ukraine is just taking a beating for the United States. Faced with the pressure of NATO’s eastward expansion, Putin has no choice. Over the years you should have heard the contradiction between the promise that NATO will never expand east and the fact that NATO is expanding east. This is also why there is a lot of public opinion from Chinese folk in favor of Russia. I can’t imagine that when you you are faced with continuous provocations from others you will always exercise restraint and forbearance. I don’t think there is any justice in tying your business to the complex game of international politics, rather it is a very funny thing.
Hi Helle.
Thank you for your actual attempt to enter a debate, rather than just using name calling.
I would first like to know why none of the commenters here has the courage to stand up for their opinions by not being anonymous? I write on my company’s blog using my name, and is facing all sorts of potential problems standing up for my opinion, but all those who have a differing opinion or just dislike me or my actions, are ANONYMOUS?
Where is the courage? Where is the spine? Where is the honour?
Ok… back to your points.
“What Ukraine is to Russia is different from what Taiwan and Hong Kong are to China”
Is that not what all people are using as an excuse for their cause being more important than some other people cause? “You can’t compare”
Putin has said directly that Ukraine is not a country. It should never have been a country. It has always been a part of Russia and is the brothers and sisters of Russian. How does that statement differ from the statements about Taiwan? Please enlighten me. Not with propaganda, but with ACTUAL facts.
“No country will tolerate a part of its territory being divided from it” – Well the truth being told The island that today is called Taiwan was under control by indigenous non Chinese people until the Dutch took over the ruling of the island. So in all fairness, it is a self imposed idea that it is part of China.
At some point warlords in China went to war against each other, and one of them kicked the Dutch out and moved to the island because he lost the war against the dynasty that became the foundation of current China.
So again it was not a Chinese island. It was an island with an exiled Chinese ruling it, but definitely not some that were happy about the people ruling China at the time.
40 years later that exiled Chinese was also conquered by the ruling Chinese from mainland China and parts of Taiwan came under Qing rule
But in 1895 it became a Japanese island after yet another war.
Then in 1945, when the Japanese were defeated, the Chinese moved in on the island again, for 4 years. Then another war, this time a civilian one in mainland China, where another looser of that battle relocated to Taiwan. Again an exile.
Then came in 1980 a democratic reform, and the Taiwan we more or less know today.
So how China can claim that Taiwan, that very specifically and with a huge majority do not want to be part of China, is part of China, is a serious mystery to me. Current China has only ruled the islands for an extremely short period of the islands inhabited times, and it seemingly have never been in any peacefully way, so I do not blame the Taiwanese to pursue their own future.
Like Russia, China is a huge country. The few extra square miles of Taiwan or Ukraine should matter nothing in terms of space, so why is it that Ukraine and Taiwan are not allowed to pursue own happiness?
Is it an envy that they are actually doing better than Russia and China?
It is not Ukraines or Taiwans fault. It is the fault of the Russian and Chinese leaders (although I would say both were doing better and better all the way until this stupid conflict that are costing the lives not only of Russian and Ukrainian soldiers, but lots of children!
Anybody who are trying to make this war acceptable in any way will have to live with the death of children on their conscience.
Consider for a moment if it would be YOUR children. You would find country XXXXX invading your neighbourhood, shelling your house, killing your wife and your kids.
How would you feel when the other side is using as a reason… “you are my brothers and sisters, you belong with us!”
“NATO expanding east”
No that is a lie constantly being peddled. What is happening is not that NATO is invading countries forcing them to be members. What is happening is that countries actively and with extreme passion want to be part of the NATO and EU communities. Why is it like that?
Because they have already been under the “protection” of the Soviet Union, in which they were not treated as equals, and with safety in mind. If they would have enjoyed being part of that union, the Soviet Union and Warsaw pact would never have ended. It did, because of the way it was run.
And right now Putin is proving they were right in asking for NATO membership. The ones already part of NATO, knew the time would come, when some idiot in Russia would become powerful enough that he could assign dictatorial properties on himself, that would make him able to redo a new USSR v2.
So the proof is in the pudding.
NATO is not expanding, but countries are fleeing to it…. now proven with good reason.
China is attempting to show as the reasonable country with ability to clearly think things thru, to work for the peaceful aspect of living etc. So why did they not directly say to Russia… Hey… this is not acceptable. We do not support that type of aggression. It will hurt not only soldiers but children too!
Instead China is working against the community trying to empower Ukraine to keep its country, while being attacked with an overwhelming force.
“I donāt think there is any justice in tying your business to the complex game of international politics, rather it is a very funny thing.”
That is the problem Helle… It is not funny at all! Would it be funny if it were your children? As I like to say to others… DO NOT BE A MORON.
Kim/C4D
Hello,
What Russia does is clearly an invasion of another sovereign country, just as was what NATO countries have done to Serbia. These are facts, but why they happened can be interpreted by anyone. I feel sorry for all Ukraine civilians and especially Ukraine citizens of Russian ethnicity in Donbass area, who have suffered indescribable atrocities from Ukraine military units such as the Azov battalion.
What does it have to do with China or Chinese developers? It is a fact that the Chinese government is not as enthusiastic as NATO countries to impose sanctions against Russia, it voted abstention during UN meeting for this purpose, but at the same time countries of almost half the population of the world voted abstention: India, Pakistan, Iran, Iraq… Unfortunately, in politics “abstention” itself is a strong strong opinion. But it seems that it bothers you that others don’t agree with you and don’t do what you want them to.
In your announce, you said “I canāt have a clean conscience supporting (even how slightly that is) the Chinese governmentās stance on the atrocities happening towards the Ukrainian people. A stance most likely fueled by Chinaās similar ambitions to take over Taiwan in due course.”, I think this is what makes people frown because the second half was pure speculation, how could you know? And use it as an argument to justify your decision?
Also, you seem to jump to conclusions concerning Taiwan without much fact checking. When the Japs surrendered in 1945, they were forced to return all occupied territories according to Potsdam Declaration. To whom? Of course the official government which was POC back then. As you said later on, there was a civil war at the end of which POC defected to Taiwan island, part of China under the government POC. Then this civil war is never ended because there is no truce agreement signed, of course as you can guess that’s because of US military interference for their interests to keep a separated China. So the reality is complicated but very clear: Taiwan is part of China. The problem is who represents China, PRC or POC? Well, it is again complicated and clear: the winner the civil war, which isn’t ended yet even though there is no major casualty or any at all. If you still believe Taiwan and Ukraine are the same situation, I challenge you to find a UN document that states Taiwan is a country, or any document at all from US/EU.
You mentioned also that “NATO is not expanding, people are fleeing to NATO”. Well again, the fact is NATO expansion happened, as for why it happened, I am sure that you will hear different opinions from NATO and from Russia. NATO would tell you the countries wanted to join, Russia would tell you NATO initiated it. Of course you choose to ignore Russia, I’d imagine?
At last, you don’t have any “potential risk”, the politically correct environment forces people to take a stance against Russia, people cannot have no opinion on the war, look at what happens to Russian footballers, orchestra conductors, ballet dancers, Russian literature, music, cats, trees… So deep down, you know very well that you are safely on a moral high land, there is no risk.
So back to your announce to Chinese/Russian developers, apart from your sincere worries of Ukraine civilians (except the Donbass residents of Russain ethnicity perhaps), as most people will share, I see you basically try to force users of your product to agree with your stance, and hopefully they can force their government to agree with the stance of your government. It still baffles me why China is singled out, the other countries who don’t sanction Russia for the moment, don’t seem to get the equal anger/concern from you.
I am a developer, I am Chinese, I live in France, I do my part to reduce a little bit of pain for Ukraine civilians, but other than that, there is really nothing I see myself fit doing.I am very disappointed how the tech communities have become facing political matters. I hope that one day you won’t ban Chinese developers because their government doesn’t agree with Greta Thunberg.
Hi Tonyk
Thank you for providing a true debate on this. This is how things should be. Also between Russia and the world.
Unfortunately that is not what is going on.
I am fully aware that it is not the individual Chinese citizen, nor the individual Russian citizen that bear the full responsibility of such things happening, but it is indeed those people who, in the end, have the most potential influence on their own governments.
Apart from war, where people turn physical weapons against each other, a slightly more “humane” option is to use sanctions. EU and the USA have imposed “light” sanctions against Russia since the Russian invasion into Ukraine in 2014. But with this full scale invasion, very hard targeted sanctions were introduced, sanctions that are also hurting the west. So we are not doing it for own pleasure, but because we simply can’t tolerate Russia to gobble up Ukraine as if it was a simple package. We are talking about people here! Not things. Those people have expressed no interest in being part of Russia, so Russia should respect that.
Further letting Russia take over Ukraine without the strongest protest and resistance from the west, would allow Putins megalomania to threaten the rest of Europe, which is absolutely not something we want to happen! And I am surprised that China do not see that as an existential threat towards itself. If Russia gets to gobble up Europe, because we all should be so understanding, when will they turn towards China?
It will not go that way. The reason is that Europe as a whole + the USA + many more countries around the world (in fact 150 or so of them) do not condone what is happening.
But China started out with directly condemning the sanctions. Later the Chinese government have soften up that stance somewhat, and why do you think that is? If it was zen to condemn, why has that stance softened? It shows that the Chinese govt. (of course) are doing what they think is best for China. They are not doing it for the wellbeing of the world. In that calculation, Ukraine may easily be sacrificable, but for Europe it is a completely different equation, where Ukraine obviously must be able to remain a free and sovereign country.
I may actually have been the first company to talk about boycotting Russia in the West, but as you may see now, almost all are. It should send a signal about where our red lines goes. And that signal should be read and understood also by the Chinese govt. and I actually think it is understood by now.
The countries you mention, that decided to abstain, all have close business and defence relations with Russia. So it is not so much of a surprise. Or actually – it was – in relation to India. I did not know India were so close in bed with Putin that they seemingly are, but I learned that the Modi government entered into close defence cooperation with Russia so that mostly explained that part.
Hence the countries abstaining are doing so because of defence and business reasons. It has nothing to do with trying to prevent a greater catastrophe or to make life easier for the victims (right now Ukraine).
I can easily see what is going to happen…. The west will stop buying oil and gas from Russia, Russia will sell that to China to recoup losses. China will use the energy to produce solar panels and batteries for the West, essentially making especially Russia dependant on China resulting in the power relationship changing between the two powers, in China’s favour. That is obviously brilliantly played for local Chinese interests, but do not expect the west to have the same interest, and thus expect the west to act differently, for example with even more interest in Taiwan and moving more production out of China.
What is going on is a nasty power game, and it is hurting children and what makes this conflict different to all the other atrocities that also hurts children, is that if this is not stopped here, it might end up hurting my own children! It is not a “simple” war between to minor nations. It is a potential complete change of world order with potentially unseen consequences for mankind!
So to sum it up. I have for years provided a deal for Chinese people that were far better than deals for any other country. So it is not like I have been punishing Chinese. In fact Chinese have been favoured for a long time, and that favoritism has now ended, since Chinese (as a govt.) actively is assisting someone that in the end is trying to hurt me, my family and my country. In the process towards that, they are going to hurt Ukraine, Moldova, Lithuania, Estonia, Latvia and Poland. That is on the menu at the moment for Putin!
And that is simply not going to happen, with or without the help of China.
Regarding NATO and expansion. Why do you not ask the countries that asked to join NATO why they did? If they were pressured into it from NATO? I think you will find that they did so due to the explanation I provided. The only villain in that situation is the entity they are trying to escape from… Russia.
Let me use an analogy. If someone came and wanted to kill you in your house, and you decide to escape from the house to a police station, who then prevents you from being killed, will you then shout “police state!” since the police obviously has expanded into your house? Or would you be happy they saved you and allowed you to be in a safe haven?
Kim/C4D
When NATO broke its promise to expand eastward some years ago, why didn’t Your Excellency cancel the license of your software in EU countries? Now that Russia has been pushed to the point of no return, thus taking military action against Ukraine, you only see the invasion without seeing the reason for it? It was NATO that acted as a pusher to direct Russia’s military action.
Hi Mirroland you anonymous coward with a fake email address, writing from China (thinkday@vim.com)!
Please see above for my reply to Helle.
Oh…..I almost forgot! Do not be a moron!
Kim/C4D
What a sick brain, pure Neo Nazi!
(snip) lots of drivel(/snip)You are not even as good as the devil!(snip) more drivel (/snip) Boasting yourself on the moral commanding height, you are doing the acts of bandits and genocide against Indians and Australian Aborigines. You are not even as good as animals!
Hi Nidaye….
Is this really the best you can do? No arguments? No debate? No reasoning? Pure childish animalistic feelings?
What are you afraid of? Why do you not dare to engage brain? Why is the only thing you can do, is to spew insults.
Mind you, 8 out of 10 replies I have got, are Chinese people throwing childish insults, going completely berserk.
1 of 10 is a Russian debating civilized and 1 of 10 is a Chinese trying to explain the stance.
But 8 out of 10 CHINESE people do not have the brain or courage to actually argue. Is it only children sitting behind the computers with a huge list of insults they can copy from?
The Russians never had such a good deal like you Chinese had. And still you complain. That type of behaviour, with the rest of the Chinese silently condoning it, makes it much less likely that the decision I made was only for a period of time.
Stop being a MORON you anonymous coward!
US Kill milions people for years in Iraq Syria etcć
its time to change sale to USA.right?
double standard is your facećAre you the running dog of USļ¼
Yet another anonymous Chinese coward acting like a moron. (sunx@163.com)
One that apparently is also illiterate, since that charming spew of crap has been put out here before and answered.
You do not deserve a reply for being a moron.
Kim/C4D
请ē“ę„åę¢åƹäøå½ēØę· äæē½ęÆēØę·ēéå®ļ¼äøę°øčæäøč¦ę“ę¹ć
Just Stop sale to Chinese and Russians forever.
Yet another anonymous Chinese coward (305230354@qq.com).
Don’t you think it is going that way all by itself now?
Russians can’t buy since there is no practically working international transactions going on, and Chinese like you will choose to boycott somebody like me?
Kim/C4D
Hello. Has this function been integrated into kbmFMX in the meantime? Are the screenshots suitable for the App Store?
Hi,
Yes it is included in current release of kbmFMX.
I have released apps on App Store where the generated screenshots has been accepted without problems.
Obviously you need to make sure that you are making the screenshots with controls that looks equal on both the PC and the mobile device.
/Kim
Russian aggressors need to be shut down from our computer technology. The whole Czech Republic is behind Ukraine ! We have extensive experience with Russian aggressors from our history.
Thank you for the bugfixes
Word
Nice bro, you nailed those Ruski programers! DId you do the same for the American delphi programwea for the wars in Iraq 1 and 2, Afghanistan, Lybia, Kosovo, Syria, Egypt, Yugoslavia, Gulf, Panama, Tanker, Pakistan, Uganda, Somalli, Yemen, VIetnam, Korea, Lebanon, Cambodia, Dominican, Pig Bay, Laoti, Yemen …the orange revolutions, the arabs springs. the list is big dude.
Here we go again….
Hi Stefan,
Did you read the blog post?
Did you understand it all, or only the parts you want to understand?
When exactly did “American” (I suppose you mean USA) threaten with levelling the EU or NATO or my home country?
Please indulge me in my seek for an answer for that particular question!
/Kim
Obviously not, since the USA is an strategic and historic ally. Still doesnāt stop them from spying on European politiciansā¦
But yup, the US of A did mess a lot of countries up during and more so after WW2. As usual the real reason has always to do with resources and border protection. Same with Ukraine really. Just a bit closer to home.
I have been asked (by non Russians) about making a full refund for current paid subscriptions since there will be no access to new versions.
As the subscriptions are running at different offsets (each customer has his own purchase date), I will not refund the purchases, as the products has already been in the hands of the end users for a period of time.
Also remember that not all 600+ customers has current subscriptions, and many are free riders using our free tools.
However I have decided, so there will be no wrongful speculation, to simply take the income for the current subscriptions and donate to Ukraine via the UN donation program I have advocated for in previous posts.
As the current situation is a result of decisions by Russia, I feel no obligation towards Russia.
I do feel a professional sadness about the users in Russia who never wanted the war in the first place, and who are now going to suffer from it.
Most of their suffering will not be because of closing down access to their portal accounts, and thus kbmMW, but due to lots of other sanctions imposed upon them from a dead fast determined west!
However it can never be my, nor people in NATO, or EU or Ukraine’s responsibility that Russia has a despotic leader, unfortunately kept in power by a large enough proportion of Russians who are backing the leader.
So please point fingers where they belong!
Perfectly! Thank you very much from Ukraine!
> But I unfortunately canāt legally nor morally sit back and ignore what is going on.
Kim,
While I sympathize with the spirit of what you’re doing it it simply not legal. You are well within your right to refuse to do business with Russia going forward but the services you provide are not under embargo by EU or Denmark. If your Russian customers paid for a service then you are legally obliged to either deliver that service or refund the customers – regardless of your personal feelings or opinions.
With regard to the pointing of fingers; There’s no doubt that Russia is the aggressor in this war and that Ukraine has the moral high ground – on so many levels. And even though your Russian customers supposedly didn’t choose to have their leader go Stalin on them it’s obviously the responsibility of the Russian people to get rid of Putin – and they should have done so long time ago. However it’s not like what’s going on in Russia hasn’t been obvious to the world for many, many years (maybe even more obvious for those outside Russia) and yet many in the west has been enabling it by doing business with Russia. Regardless of Georgia, Chechnya, Crimea, Syria and the countless assassinations and false flag attacks that have followed the rise of Putin.
So maybe point one of your fingers at yourself.
Anders,
You are simply not correct. Dual use software is not allowed to be exported to Russia.
There can be made specific exemptions for certain specific things, but that require that the end user application software specifically will only be used for that exempt area of use. I have no chance of verifying that with a software development package which _is_ in military use today!
That you want to broadly make it my responsibility that I have “enabled” Russia to attack Ukraine, really deserves no reply. I am surprised you can even come up with such a claim!
I at least try to prevent it happening.
As for the (relatively few) people who are against my decision, the interesting part is most are non Russian and not affected.
/Kim
Any idea when kbMemTable will be released for Delphi 11?
It is already released š
It was supported in 7.95.00 Sep 12 2021
/Kim/C4D
I would like to know if this licence is permanent/ perpetual?
It is a perpetual license. It includes updates for 6 months after purchase. Additional 12 months can be added (SAU extension) to have access to newer releases, but you can continue to use the version you have also after the SAU expires.
/Kim/C4D
I“d like to know if this licence is a one shop purchase?
it is perpetual? permanent?
please I need this information asap
Hi,
The purchase includes 6 months of updates from time of purchase.
If you want to get access to updates after that, you can buy a SAU extension of 12 months which is approx. 1/2 the price of a new license (kbmMW).
But you can choose to just use the version you have perpetually, but only for the developer for which it was originally licensed for.
/Kim/C4D
How do I download the enterprise evaluation of kbmmw
Ajay
Hi,
We have something called Community Edition which includes the majority of kbmMW Enterprise Edition features, and which can be used for evaluation.
It is usually immediately available for download when registering on our download portal at portal.components4developers.com, but due to export restrictions to Russia and Belarusia due to the ongoing war in Ukraine, that is no longer automatically available.
But when you have registered, you can request access to one of the various products. You can thus request access to Community Edition.
We will scrutinize the request, including validity of email, address etc. and grant or deny access. It is important you specify as precisely as possible all contact information, when you register yourself, otherwise requests will usually be rejected.
/Kim/C4D
I“d like to know if I can pay the software by wire transfer?
It is possible?
Hello.
My name is Alyne Moreira and I’m contacting you on behalf of OSB Software .OSB Software is a software reseller company, with over than 2000 partnerships with suppliers all over the world. We are in the business since 2004, and we have a team with over 20 years of experience on software resale. We also count with OSB+, which is an extension of OSB Software, and it is dedicated on services such as training, development, implementation and technical support.
Currently, I am working on an opportunity for the product below:
KbmMW
Could you please, inform me our reseller cost for this opportunity?
How could we turn your partners in Brazil?
I also would like to know whether the license is perpetual or annual, if it is standalone or a server software, available via download or if it comes with a CD and if you accept wire transfer payments.
I look forward to hearing from you.
Atenciosamente | Cumprimentos | Kind Regards
Hi,
We use FastSpring for all our transactions, and they technically support Wire transfer, so it should be possible to set that up.
We usually do not use resellers, but if you have a good amount of business opportunity, then please feel free to email me at kbm@components4developers.com
The licenses are perpetual, but linked to a specific named developer and thus only transferable to another developer if accepted by us by email, and the original developer no longer in any way use the product.
The initial purchase of kbmMW Enterprise or kbmMW Pro Edition includes 6 months of updates from time of purchase. The access to updates can be extended by 12 months at a time for roughly 1/2 price of the original purchase.
/Kim/C4D
Is this capability available in kbmMW 5.08.10?
Hi,
Unfortunately not.
It was introduced in 5.09.00 released roughly May 11 2019.
/Kim/C4D
So instead of doing good to three sides (you: still making money, customers: continued support they paid for in these hard times, Ukraine people: you could for example donate them most part of payments from Russia) you just did bad for all of them (you: lost money and reputation for actually stealing money, customers: no support they paid for, Ukraine people: there could never be too much donations). Wise move, really.
Military applications in Delphi and middleware or mem table? Don’t make my boots laugh. You just make many customers to pirate.
Your websites to purchase this are timing out. I would like to purchase, but am unable to get to your store site.
Hi, please try again. It should be running again after some windows maintenance. /kim
Would be interesting to add https://github.com/DelphiBuilder/NetCom7 to the benchmark š
Regards Roland
NetCom7 is a basic TCP client/server which does not support HTTP and has poor usable of the socket API, even if it claims otherwise. It uses Select() on both Windows and POSIX, in blocking mode, in a single thread, and only check for reading state, not writing. A set of awful choices.
If you have attempted to download from the portal and been told that it could not find the file, please try again.
A mistake in file naming is the cause… Sorry!
/Kim
In your sieve you set num := factor * 3 SHR 1;
while actually you can set num = sqr(factor) because the square of the factor is the first bit you will find which is a multiple of factor with its bit set to 1.
UPDATE:
Jon Aasenden’s “Delphi Developer” group have invited me in again, and we have, I think, found an acceptable way that makes it possible to share my posts, while not putting too much of a burden on the moderators.
Therefore commenting on some of my announcements may be blocked, which I can live with.
If people want to discuss my post, they are welcome to do so on the original blog post, rather than spamming the Facebook group.
—-
I have just dropped participating in a known Delphi Telegram group since it seems that if one is posting a link to a New Year greeting (this post), then that New Year greeting is not deemed welcome, due to me supporting Ukraine.
In fact several posts came up, complaining about it. A Ukraine Delphi developer chimed in, explaining his life in Ukraine, fearing for his family as a reply to those posts. That post was deleted too.
I see the same pattern in several Delphi related Facebook groups.
I got to state very clearly!
People can do as they will with their channels, Facebook groups. But the problem does not go away! And putting your heads in the sand will not solve the problem.
I will no longer support any media, channel or group that has the attitude “It is not our problem”, so I have pulled myself from the Telegram group.
Further today I also pulled myself from the Facebook group “Delphi developer” run by Jon Aasenden.
I have a number of times posted information about the access to free kbmMW licenses if people donate to Ukraine or for Ukrainian developers. Those got many complaints, why Jon ended up deleting my posts.
I actually respect Jon and have a professional friendship with him, and he is actually quite sympathetic to my views, but alas, if I can’t post posts like the ones I do, I will no longer spend time on those groups.
In my book, there can’t be a censoring on posts related to Delphi, Delphi code just because I express sympathy and support for Ukraine!
Any censoring like that equals participating in war crimes. I do not want to participate in war crimes and I do not want to encourage such!
/Kim/C4D
As you noted that chat bot always provides answers that look very plausible but often are plain wrong. I am afraid that we will see such text all over the internet in the near future because they supply search engine āoptimizersā with cheap and plausible text. This will be really bad for internet research.
āI am afraid that we will see such text all over the internet in the near future because they supply search engine āoptimizersā with cheap and plausible text.ā
So the AI-supported search will have the same reliability as Wikipedia has now.
Hi Kim, how are you?
I would like to know if there is a free version of KBMMemtable for Lazarus?
Thanks.
Hi,
Free versions of kbmMemTable and kbmMW are only coming in binary form in the kbmMW Community Edition, matching specific Delphi releases.
To have access to a Lazarus supported version, you will have to purchase the US$30 Standard Edition license.
/Kim
Hi,
any recording?
Best Regards
There is supposed to be one released at some point in time by the Orange County Delphi UG.
It is supposed to show up here:
https://www.meetup.com/ocdelphi/events/wvqktryfccbhc/
/Kim
What is the differences between kbmMemTable Pro & Standard ?
kbmMemTable Pro is the fastest of the two. In fact it is the fastest of all memory tables period!
It however mostly shines when you are having high number of records.
Click the Performance tab on http://www.components4developers.com/products_kbmMemTable.html to read more.
/Kim
Do you have community edition for delphi xe11.3?
Unfortunately not.
no support for Delphi 12 athens yet?
>gives me back a āRequest not supportedā. I followed the instructions as best as possible.
Remove “strict” for service description and Swagger will be work
[kbmMW_Service(‘name:SMARTDEMO, version:1.0, minInstances:$(service.smartDemo.minInstances=32), maxInstances:$(service.smartDemo.maxInstances=128)’)]
// If defined on service, it sets the default path for this service instance. It must be absolute.
[kbmMW_Rest(‘path:/myserver’)]
But ?url=/myserver/api doesn’t work on demo application – Swagger shows default Pet Stores API
Hi,
Remember that it is the openapi call (../api) that is responsible for generating the data for Swagger.
Hence if you have multiple datamodules with each their own smart REST functions, you will need an OpenAPI method in each of them, and call them like this:
http://localhost:888/myserver1/api/index.html?url=/myserver1/api
http://localhost:888/myserver2/api/index.html?url=/myserver2/api
It is possible that Swagger or index.html can be modified to have one specific URL for getting the Swagger specific code, and refer to other URLs to get to their respective api (OpenAPI method).
That is basically up to Swagger and the index.html file.
/Kim
Did this get fixed eventually?
Yes it did.
can we watch the video recordings?
š š š š š¤¬
I’m experiencing the same delay. I paid for this 7 days ago and have not yet received the software. Iāve sent a license request via the portal 7 days ago too.
Hi,
Sorry for the delay. The license has been approved and the date forwarded to today.
best regards
C4D
Seems nice, more informations like a link to source or demo ?
There will be some more blog posts. Its being worked on at the moment.
Improvements since teaser:
– Performance improvements on large documents (12000 lines XML tested)
– Nested multilevel macro support with own highlighters… eg <somexmltag>[–SQL: select * from …–]</somexmltag>
Supports any highlighter for each macro level.
– Delphi highlighting
– C# highlighting
– JavaScript highlighting
– HTML highlighting
– CSS highlighting
– Math expression highlighting
Will be something of a powerhouse š
Absolutely right
Well…
I think that’s a overreaction to something that happens often in every forum: politics vs the rest.
In principle you are right. It happened before and due to the (imo very reasonable ruleset trying to keep politics out) I can’t comment on it on the group.
So being feisty as I usually am, I decided that I will not be on social media, where I can’t reply on people ganging up without risking (reasonably enough considering the ruleset of the channel) being “told off”.
I’m not a kid. I have a stance, and I do fight for it!
If people pick a fight with me, I will not be amputated in my options to reply.
Today, the head of German intelligence confirmed: the entire Russian people are ready to follow Putin and support the war. Although this was obvious even without German intelligence. Therefore, hating Russians today is a sign of a smart person who has critical thinking and adequately perceives reality. Russians are not people, they are moral freaks. Take them for what they are and don’t let these monsters affect your life.
I will never go to the extremes of judging a whole people of a country.
That is simply not fair to those who actually have a different opinion and want something else, but just feel unable to do something about it.
I have no issue in calling Putin and his corrupt cronies complete and utter murdering morons.
And there are obviously enough people in Russia that sympathizes with him, that makes it difficult to unpin him and his fellow idiots from their positions.
But there are also many who do not want what is happening, to happen. Some of them fight actively on the Ukrainian side! Some of them are put in prisons or otherwise pressured to keep quiet. And some of them are vocal within Russia, even with their lives being at risk.
Those people have my full respect! Those are the people that, with luck and good will, can end up saving Russia as a sensible functioning state, when all this is over.
Nice to see the new FMX Memo released. Two questions:
1. Does the control allow line numbers to be displayed (I see it in the screenshot, but want to make sure the developer doesn’t have to implement it themselves)?
2. Can I create my own syntax highlighting for my own domain language?
Thanks
Hi,
Yes, it includes the line numbers and a status line showing chosen dialect, highlighter name and style along with cursor pos.
And yes, you can make your own syntax highlighting. It is not extremely simple, but absolutely doable.
/Kim
Expand it to “Piss off, Geezer!” to inject a little bit of British humor into your insult.
Hi Kim.
Where can I see an example of using TkbmMWMultithreadMessageQueueProcessor?
Thanks.
Ive made a blog post:
https://components4developers.blog/2025/10/22/wib-3/
/Kim/C4D
Do you have the TkbmFMXSyntaxMemo for Delphi 13? Iād like to purchase a copy.
It will be released shortly.
/Kim
Chatgpt doesn’t fully support Delphi code, I believe that Claude is the only AI that claims to know Delphi, have you tried it there?
Ive not used Claude… I’ve good experience using Gemini for code generation and ChatGPT for reformatting and special cases where Gemini refuse to understand its in the wrong š
ChatGPT actually produce pretty good Delphi code and understands most of Delphi, but all AI’s I have tried do sometimes get confused and include syntaxes and features from C#.
When one points it out, they usually correct themselves.