Contact on the blog
If you tried to contact me via the contact page in the last few days, I was not reachable. The reason is, that I changed my gmail account password and forgot to change it in wordpress SMTP plugin. So if you did not receive a response, please try again and sorry for the inconvenience.
Gad D Lord wrote,
I guess you have a typo in the headline.
Link | March 16th, 2011 at 11:42 pm
Iztok Kacin wrote,
Yes I just noticed. Thanks for pointing it out. I really should be more careful, but it is late and I am very tired.
Link | March 16th, 2011 at 11:51 pm
aykut wrote,
the contact section does not working. so i wrote here
IPC – Fast inter process communication (CBuilder)
i am a cbuilder user and i follow you. i want to use this component in my projects and tried to generate all related cbuilder files (lib, hpp, obj files). i succeed. but i couldn’t write a working example. you used interface concept and i couldn’t pass it. can you provide a simple cbuilder example?
for example you wrote “….const Request, Response: IIPCData…”. in cbuilder, directly IIPCData can not be used.There are tricks which i could not solve…(
by the way, i converted your simplelog component into bcb component and i can use it)
if you disagree, can you provide here borland packages. maybe i can use it. i tried to make a package from source codes but i think source files somehow are not compatible with bcb so the package was empty.
Link | May 19th, 2011 at 3:42 pm
Iztok Kacin wrote,
It works, but it does give the impression it does not. I did not figure out yet why. I responded to you via e-mail.
Link | May 19th, 2011 at 3:49 pm
M Apgar wrote,
I am selling the Simplelog.com domain, if you are interested, make your bid on sedo.com. Contact me via email with questions.
Link | July 13th, 2011 at 6:52 pm
Harry Rogers wrote,
Hi. Many thanks for posting DirectoryWatch it does exactly what I need! (D2010 Pro)
- Contact Page does not seem to be working currently -
if I add this to the dpr -> ReportMemoryLeaksOnShutdown := DebugHook 0;
I get a reported memory leak when I exit the program.
- I assumed it was my coding so I tried EurekaLog as a means to track it down…
EurekaLog (6.1.02) seems to think it is caused by
TDirWatchThreadExecute (in Cromis.DirectoryWatch)
… GetMem(Filename, NotifyData^,..
- Exceeds my Knowledge to understand it though ! -
Thank you once again
Link | August 11th, 2011 at 3:55 pm
Thomas Reimann wrote,
Contact page does not work, so I post it here.
The Simplestorage demo executables will not run, because FastMM_FullDebugMode.dll is missing.
Link | February 15th, 2012 at 1:04 am
Heinz Schneider wrote,
I’m just trying to start with your IPC library under Delphi 7. First of all, I tried to compile your Demo (server) and get an error on line 120 of Cromis.AnyValue: ‘.’ or ‘,’ expected, but ‘FData’ found. Could it be possible that the actual version doesn’t work anymore with Delphi 7? Or is there a workaround?
Link | June 5th, 2012 at 9:44 am
Iztok Kacin wrote,
All the code in my library is Delphi 2006 and upwards compatible. I do not support older Delphi versions. Some of the units my work, some may need only small changes, but I am not actively supporting them. Its just not worth it. I strongly advice to all that you should start using newer version of Delphi. I know it is not possible in all scenarios.
If nothing else I can help you with advice if you wish to make the IPC Delphi 7 compatible but I think it would be hard to do as I use smart records a lot and Delphi 7 does not support them.
Link | June 5th, 2012 at 9:56 am
Daniel Kiradjiev wrote,
Thanks for the great cron scheduler !
The only think I think I should mention is that the link with cron format (http://www.nncron.ru/help/EN/working/cron-format.htm) is with examples that include only six parameters in string:
* * * * * *
| | | | | |
| | | | | +– Year (range: 1900-3000)
| | | | +—- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +—— Month of the Year (range: 1-12)
| | +——– Day of the Month (range: 1-31)
| +———- Hour (range: 0-23)
+———— Minute (range: 0-59)
While your examples have seconds included as a 7-th parameter which can be a bit confusing at first sight.
Of course after little reading and testing I found out how great your code works! Thanks again !
Regards,
Daniel
Link | June 5th, 2012 at 12:32 pm
Iztok Kacin wrote,
Sorry about that
I made a more precise version of CRON format. CRON does not need seconds, but I do on occasions, so I added them. I will write somewhere that, so it will be clear and people will know at first sight.
Link | June 5th, 2012 at 12:37 pm
Daniel Kiradjiev wrote,
Here is another issue that may be better to be resolved.
I found out that when I use TSchEventList.Delete(EventName: string) method, it actually frees TScheduledEvent Object but its presence in the TObjectList (parent class of TSchEventList) remains. So after deletion, if you use TSchEventList.Count you would get a wrong number of objects (events). The solution which I use is to replace the Items[I].Free; on line 917 in Cromis.Scheduler.pas with Self.Remove(Items[I]); I checked and it’s memory safe because the default value for TObjectList.OwnsObjects is true so calling the Remove method frees the object in addition to removing it from the list
Regards,
Daniel
Link | June 19th, 2012 at 9:07 am
Iztok Kacin wrote,
@Daniel, thanks, don’t know how I missed that one. Its an ugly bug. I already fixed it in my SVN. I will try to upload the new version this evening.
Link | June 20th, 2012 at 6:26 am
Iztok Kacin wrote,
The Scheduler has been updated.
Link | June 20th, 2012 at 7:58 pm
Frank Bishop wrote,
Iztok,
I just ran accross your site today. It was recommended by someone on the ADUG user group. And I am looking at the IMC code. Let me first say its a breath of fresh air to find someone sharing code who isn’t packaging it up or suggesting I use it in a component. I move between 2006 and 2010 and having to maintain the same version of components on multiple machines is a pain. Also I love the runtime encapsulation rather than having to slog through someones forms with design time components dropped on them.
procedure TIMCClient.ConnectClient(const ConnectTimeout: Cardinal);
begin
if FIsConnected = true then
begin
exit;
end;
I had to add this protection block to procedure TIMCClient.ConnectClient
if FIsConnected = false then
begin
…… Your code goes in here
end;
In order to get the demo to work
You might have set your compiler to ignore the indy error or maybe I have a slightly different version or something.
I just thought I’d mention it.
I look forward to browsing through and studying your code, lots of interesting stuff here
Frank
Link | July 10th, 2012 at 8:41 pm
Frank Bishop wrote,
Opps I forgot to remove the sloppy
if FIsConnected = true then
begin
exit;
end;
check before I redid the cleaner
if FIsConnected = false then
begin
… your code goes here
end;
I hate the Exit statement but just used it for a quick test
Frank
Link | July 10th, 2012 at 8:44 pm
Iztok Kacin wrote,
@Frank
Hi, I am glad you like the code. Like you I hate all the necessary components out there especially non visual ones. That is why I do not make them
Anyway the problem with IMC was that the demo was a little bit outdated. That “if FIsConnected = true then” is correct. The problem was in the:
Result := IMCClient.ExecuteRequest(Request);
which should be
Result := IMCClient.ExecuteConnectedRequest(Request);
Now the difference is the following. “ExecuteRequest” calls connect then internally calls ExecuteConnectedRequest and then calls disconnect. “ExecuteConnectedRequest” as the name implies executes an already connected client request. Why the different routines you may ask? Two reasons:
1. I wanted the code to be identical on the prototype level with Cromis.IPC. You can actually route answer from IMC to IPC or vice verse. They have the same routines and same data packets
2. If you only call one request and then stop “ExecuteRequest” is simpler as it handles connect / disconnect for you. But if you do a lot of sequential calls the overhead of connect is substancial and here the “ExecuteConnectedRequest” comes into play.
I updated the demo code and the code on the blog page.
Hope I was clear
Link | July 11th, 2012 at 12:40 pm
Chris wrote,
Not a biggy, but it might pay to Close the FChangeEvent handle in the destroy of the TDirWatchThread class.
Link | July 11th, 2012 at 2:03 pm
Iztok Kacin wrote,
@Chris
Absolutely a bug. Thanks for reporting. Will be fixed.
Link | July 11th, 2012 at 2:09 pm
Frank Bishop wrote,
• Fast inter process comunication channel
is missing an m
and thanks for the
ExecuteRequest / ExecuteConnectedRequest clarification its nice to see your active on the blog.
Link | July 17th, 2012 at 8:19 pm
Eric wrote,
Is it possible to watch multiple directories on Directory Watch?
Link | September 12th, 2012 at 7:29 am
Iztok Kacin wrote,
@Eric
It is possible if you use multiple DirectoryWatch components. With a single component is is not possible.
Link | September 12th, 2012 at 8:07 am
Eric wrote,
thanks for you fast reply, Iztok! That’s exactly what I’ve just done right now.
again, thanks for your great library.
Link | September 12th, 2012 at 8:29 am
glhopital wrote,
Hello,
Great job you made here.
I managed to port Cromis.Scheduler to Free Pascal / Lazarus for the project I currently work on. If you agree, I’m able to send you the modified comis.scheduler unit in witch I included compilation directives to handle differencies between the platforms. I runs smooth as far. Just give me an email address to send you the modified file please.
On the other side, I think I face a bug located somewhere in FindNextScheduleDate but wasn’t able to point it, here’s how to reproduce :
Test made the 28 Nov 2012. for a schedule with a given eventplan, I test the NextEvent :
’0 0 * * * 1 *’ gives 3-12-12
’0 0 * * * 2 *’gives 4-12-12
’0 0 * * * 3 *’ gives 28-11-12 16:00:00
but
’0 0 * * * 4 *’ gives 5-1-12 should be 29-11-12
’0 0 * * * 5 *’ gives 6-1-12…
’0 0 * * * 6 *’ gives 7-1-12…
’0 0 * * * 7 *’ gives 1-1-12…
If you could take a look at this…
Many thanks
Link | November 28th, 2012 at 4:05 pm
chro wrote,
The ‘CommTimeouts’ is not work?
And Somebody said that “You cannot use SetCommTimeouts with named pipes”
http://stackoverflow.com/questions/13767989/named-pipe-reading-timeout
Link | December 25th, 2012 at 6:54 am
Arioch wrote,
Xtea page – check download link, named wrong
Link | January 11th, 2013 at 12:35 pm
Moz wrote,
Croimis.Scheduler seems to be excellent from the initial testing I’ve been doing.
Because you use threads and date conversions, you’re afflicted with the “threads use US dates” problem, so need to do this at least once in the app: SetThreadLocale(LOCALE_USER_DEFAULT);
GetFormatSettings; in older versions of Delphi (I’m using 2007. Call can be done in dpr, or in your code). Otherwise I get occasional EConvertErrors from the EncodeDateTimne function.
Also, why do you use one thread per scheduled event, rather than one thread per list of events? I initially found this while looking for a “find next CRON time” function, which you have. Extending your waiting code to “… in list” would reduce the number of threads significantly for busy apps. I’m working on a setup that has at least 10 events in each installation, likely more, and having 10 threads where we could have 1 seems wasteful.
thanks for the handy code,
Moz
Link | January 16th, 2013 at 11:56 pm
Iztok Kacin wrote,
@Arioch
Thanks. Fixed it.
Link | January 17th, 2013 at 2:05 pm
Iztok Kacin wrote,
@chro
I think it works as far as I know.
Link | January 17th, 2013 at 2:06 pm
Iztok Kacin wrote,
@Moz
Hm, are you sure about the dates problem? Can you make a demo of the error so I can debug it and fix the problem?
About the threads, yea I know there could be only one thread probably, but I should do some heavy refactoring and right now I don’t have time for that. To be honest these threads are very lite and do not cause any significant resource usage.
Link | January 17th, 2013 at 2:07 pm
Moz wrote,
Odd, I submitted a comment a week ago in reply to this. Unfortunately the link I had to the Embarcadero forums is now lost to me.
Yes, I’m sure. A bit more searching finds a difference reference: http://stackoverflow.com/questions/1767946/getthreadlocale-returns-different-value-than-getuserdefaultlcid
Look at MSDN for SetThreadLocale as well
Link | January 22nd, 2013 at 11:02 pm
Moz wrote,
Also, the tricky thing about reproducing the issue is that you need a Vista or Win7 computer that has been installed with a non-US date locale and never been changed. For people who have a stack of virtual machine lying around that’s not usually a problem, but those VM images are not easy to find if you’re not already using VMs.
I’ve had your CRON library running in a service for about a week now with no issues. You’re hopefully not surprised by that, but I’m very grateful.
Link | January 24th, 2013 at 12:19 am
Iztok Kacin wrote,
@Moz
Thanks for more info. I will look into it and try to reproduce the problem. You gave me enough info so I think I can solve the problem. I am glad it works ok for you. It should be very stable. I use it in production for years and never had any problems.
Link | January 24th, 2013 at 7:54 am