<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to Feature requests and improvements</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/</link><description>Recent posts to Feature requests and improvements</description><atom:link href="https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/feed.rss" rel="self"/><language>en</language><lastBuildDate>Thu, 15 Jan 2026 14:49:46 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/feed.rss" rel="self" type="application/rss+xml"/><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#0c77</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;The last bit actually should be reordered as follows&lt;/p&gt;
&lt;p&gt;Hint: Use menu "Empty-&amp;gt;Empty Standby List" to clear the cache, , try your app, File-&amp;gt;Refresh to refresh the display, then view what files are cached in the "File Summary" tab which can be ordered by path.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Thu, 15 Jan 2026 14:49:46 -0000</pubDate><guid>https://sourceforge.net1e2f0340d132a9ffcaf69770056ca0b0b1963963</guid></item><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#c1f4</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Stefan,&lt;/p&gt;
&lt;p&gt;Forgot to say my tests did conclusively reveal that it is the combined size of the directory that determines the great majority of the response time rather than the number of files for your function.  This makes sense when considering it takes time to copy all these files from disk to the cache. &lt;/p&gt;
&lt;p&gt;Also note I have confirmed that your function does cache the files whereas my faster one doesn't using RamMap from SysInternals. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-gb/sysinternals/downloads/rammap" rel="nofollow"&gt;https://learn.microsoft.com/en-gb/sysinternals/downloads/rammap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You could try RamMap with  QFileInfo::size()  to confirm if it doesn't use cached files. &lt;/p&gt;
&lt;p&gt;Hint: Use menu "Empty-&amp;gt;Empty Standby List"  to clear the cache, File-&amp;gt;Refresh to refresh the display, try your app, then view what files are cached in the "File Summary" tab which can be ordered by path.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Thu, 15 Jan 2026 07:29:58 -0000</pubDate><guid>https://sourceforge.net7a3aa3da6f39e25b9c9933dd0c76ca1771c049cc</guid></item><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#65bc/d8b2</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Stefan,&lt;/p&gt;
&lt;p&gt;The built in function (which uses QFile::size() )  is fast once the files are all added to the MS Windows file cache but that takes ages for large directories (50 seconds in my case) with it blocking in the meantime and actually slows the rest of operating system down overall who is also fighting for the disk cache. &lt;/p&gt;
&lt;p&gt;I've looked at the QT source code (see below) but got lost at the lower levels. QFileInfo.size()  is probably much faster as it seems to use fstat (see below),  primarily , which uses the MFT (Master File Table)  which according to Google AI (see below) is generally cached in memory. Of coarse the only way to find out for sure is to test it.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;
&lt;p&gt;**QFile::size() **&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codebrowser.dev/qt5/qtbase/src/corelib/io/qfile.cpp.html" rel="nofollow"&gt;https://codebrowser.dev/qt5/qtbase/src/corelib/io/qfile.cpp.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;qint64 QFile::size() const&lt;br/&gt;
{&lt;br/&gt;
    return QFileDevice::size(); // for now&lt;br/&gt;
}&lt;/p&gt;
&lt;p&gt;qint64 QFileDevice::size() const&lt;br/&gt;
{&lt;br/&gt;
    Q_D(const QFileDevice);&lt;br/&gt;
    if (!d-&amp;gt;ensureFlushed())&lt;br/&gt;
        return 0;&lt;br/&gt;
    d-&amp;gt;cachedSize = d-&amp;gt;engine()-&amp;gt;size();&lt;br/&gt;
    return d-&amp;gt;cachedSize;&lt;br/&gt;
}&lt;/p&gt;
&lt;p&gt;**QFileDevice::size() **&lt;/p&gt;
&lt;p&gt;qint64 QFileDevice::size() const&lt;br/&gt;
{&lt;br/&gt;
    Q_D(const QFileDevice);&lt;br/&gt;
    if (!d-&amp;gt;ensureFlushed())&lt;br/&gt;
        return 0;&lt;br/&gt;
    d-&amp;gt;cachedSize = d-&amp;gt;engine()-&amp;gt;size();&lt;br/&gt;
    return d-&amp;gt;cachedSize;&lt;br/&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;QFileInfo::size()&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following is fast and generally filled by fstat at invocation of QFileInfo for each file.&lt;/p&gt;
&lt;p&gt;"{ return d-&amp;gt;metaData.size(); }"&lt;/p&gt;
&lt;p&gt;The fallback "d-&amp;gt;fileEngine-&amp;gt;size()" is what QFile ::size() uses and  as the code suggests uses cached file data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codebrowser.dev/qt5/qtbase/src/corelib/io/qfileinfo.cpp.html#1394" rel="nofollow"&gt;https://codebrowser.dev/qt5/qtbase/src/corelib/io/qfileinfo.cpp.html#1394&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;qint64 QFileInfo::size() const&lt;br/&gt;
{&lt;br/&gt;
    Q_D(const QFileInfo);&lt;br/&gt;
    return d-&amp;gt;checkAttribute&amp;lt;qint64&amp;gt;(&lt;br/&gt;
                QFileSystemMetaData::SizeAttribute,&lt;br/&gt;
&lt;a href="./"&gt;d&lt;/a&gt; { return d-&amp;gt;metaData.size(); },&lt;br/&gt;
&lt;a href="./"&gt;d&lt;/a&gt; {&lt;br/&gt;
            if (!d-&amp;gt;getCachedFlag(QFileInfoPrivate::CachedSize)) {&lt;br/&gt;
                d-&amp;gt;setCachedFlag(QFileInfoPrivate::CachedSize);&lt;br/&gt;
                d-&amp;gt;fileSize = d-&amp;gt;fileEngine-&amp;gt;size();&lt;br/&gt;
            }&lt;br/&gt;
            return d-&amp;gt;fileSize;&lt;br/&gt;
        });&lt;br/&gt;
}&amp;lt;/qint64&amp;gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;**From Google AI (which may not be correct as it hashes databases)**
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The speed of fstat() on Windows is generally very fast for retrieving file metadata (an O(1) operation),&lt;/p&gt;
&lt;p&gt;Speed is for Metadata: fstat() retrieves metadata (like file size, timestamps, permissions) which is typically stored in the file system's Master File Table (MFT) and can be accessed quickly in memory. It is not a measure of data transfer speed.&lt;/p&gt;
&lt;p&gt;Overhead Varies: The actual time taken can be a few milliseconds or less per call. The overhead becomes noticeable if a program performs a large number of calls in a tight loop&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Thu, 15 Jan 2026 07:14:13 -0000</pubDate><guid>https://sourceforge.netd3b104b7d4d2c4fdfedf9f1b2f2a67cf946b47f5</guid></item><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#65bc</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Andy,&lt;/p&gt;
&lt;p&gt;I was not aware that the built in function is so slow. I think createProcessAsynchronous with du.exe is the way to go.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Stefan&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Zieker</dc:creator><pubDate>Thu, 15 Jan 2026 06:24:59 -0000</pubDate><guid>https://sourceforge.net5136d5cad76da030f79ee4fe81b9ab101f6b392d</guid></item><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#62e3</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Note I nearly have finished a script to create a new timestamped log file each day and also limit the log directory size.  However even though the functionality can be implemented in a script it's a rather slow and technical complex way (with a few headaches) for something I think would be worthwhile building in the the app.&lt;/p&gt;
&lt;p&gt;My intention is to share this script here because there are parts in it that many will find useful (directory size reading, daily log files, execution of external commands, and a useful exception handler).&lt;/p&gt;
&lt;p&gt;The only problems I've had so far with this is getting the directory size in a speedy way.&lt;/p&gt;
&lt;p&gt;The inbuilt ScriptCommunicator function scriptFile.getFileSize is very slow on first read as it caches the entire file (it uses QT QFile.size() from QJSEngine which is the Javascript engine used by ScriptCommunicator). For a  small 5 file 30kb directory it only takes 3ms. However on a large 319MB directory with 1525 files it takes 50 seconds for the first directory size read and approx 150ms thereafter.&lt;/p&gt;
&lt;p&gt;I tried using an external program via scriptThread.createProcessAsynchronous which is much faster for  the first directory read at 140-150ms with most of this being overhead of just calling the external program (approx 130ms).  &lt;/p&gt;
&lt;p&gt;My program is a VBscript so there may be significant program startup time even when not reading directory sizes (directory size readings only took about 10ms as already mentioned judging on the response time when the directory code was commented out). I will eventually try other file types to see if that has significant effect on times. I may try SysInternals du.exe which is said to be superfast for reading directories.&lt;/p&gt;
&lt;p&gt;Whilst this directory read timing is fine for me others may need faster response. Any suggestions?&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Thu, 15 Jan 2026 02:09:23 -0000</pubDate><guid>https://sourceforge.net1f68f3a20ec5c7c59a2f7832760091e8d636f5bc</guid></item><item><title>Logging - Dating of logs</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/dbd4e132a5/?limit=25#7129</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;For log management purposes it would be useful to have an option create a new log each day and append a date suffix. I note that the current dating option only creates new dated logs on certain conditions and this isn't one of them . &lt;/p&gt;
&lt;p&gt;The above option would enable an external program to delete old logs after a certain time.&lt;/p&gt;
&lt;p&gt;Even better would be an internal option to delete old log files after X amount of days or after Z amount of disk space is taken.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Mon, 12 Jan 2026 15:53:07 -0000</pubDate><guid>https://sourceforge.netb35a8aba10296e7d9655ea021c2abda5168ab675</guid></item><item><title>Scheduler</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/d45826c6f4/?limit=25#7420</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi all&lt;/p&gt;
&lt;p&gt;It would be nice to incorporate a scheduler to run any script or single sequence at any date/time or period. This would include the cyclic sequence facility.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Mon, 12 Jan 2026 15:44:48 -0000</pubDate><guid>https://sourceforge.neteeed19b4a64699d80c2d4fcee4462b9266a8ce00</guid></item><item><title>Cyclic Sequence:  Forever + Pause units + Save + Simultaneous</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/bf23494165/?limit=25#7b8c</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;One option not provided for the Cyclic Sequence that would be very useful is repetitions  forever.&lt;/p&gt;
&lt;p&gt;I do acknowledge this can be done with worker scripts but this is rather complex for something that seems simple and likely could be easily implemented in the cyclic sequence.&lt;/p&gt;
&lt;p&gt;The easiest way to implement this would be to change the  "Repetitions" field (and maybe appropriately renamed) so "0"=continuous, "1"= run once" , "2"= run twice, and so on..&lt;/p&gt;
&lt;p&gt;The other option mentioned in the subject is pause units such as a dropdown for secs, mins, hrs etc which is convenient when polling for data over long periods of time.&lt;/p&gt;
&lt;p&gt;in regards to the "Save" in the subject line  often the same cyclic settings are used over time. So therefore it would be useful to incorporate the cyclic settings in the single sequence table. &lt;/p&gt;
&lt;p&gt;In regards to  "Simultaneous" in the subject line enabling simultaneous execution of sequences would be ideal. I did observe that this is what worker threads can be seemingly used for but this requires script programming and cyclic sequences don't.  I acknowledge this isn't that simple to implement , as the issues with multiple threads and queues needed for this would have to be dealt with.  However it seems most of this work has already been done for worker threads so maybe combining both would be the way to go if this is implemented.&lt;/p&gt;
&lt;p&gt;Lastly the cyclic sequence option may be better incorporated in a scheduler. More about that in my next post.&lt;/p&gt;
&lt;p&gt;Cheers&lt;br/&gt;
Andy&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">andrew bear</dc:creator><pubDate>Mon, 12 Jan 2026 15:38:42 -0000</pubDate><guid>https://sourceforge.netadfbfc39d732e0fa882c31be96287ee41387a6e2</guid></item><item><title>Add serialPort.read()</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/7a338d5b04/?limit=25#d076</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Agreed, i do it the same way, but using push&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lenght&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;rxbuffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;My hope hereby is that it more similar to a pipe. As the call to the sub is async, it might be that other subs reading from the buffer at the same time.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">devnull</dc:creator><pubDate>Fri, 19 Jan 2024 17:21:01 -0000</pubDate><guid>https://sourceforge.net1319fd4e790cafee2d2ca241a2ebf372aeda3357</guid></item><item><title>Add serialPort.read()</title><link>https://sourceforge.net/p/scriptcommunicator/discussion/featurerequests/thread/7a338d5b04/?limit=25#0941</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Yes, the user has to take care of it. What I usually do is this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;dataReceivedSlot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;data&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Save&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;received&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;g_storedReceivedData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g_storedReceivedData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Zieker</dc:creator><pubDate>Thu, 18 Jan 2024 07:12:53 -0000</pubDate><guid>https://sourceforge.net238168698b1b8a063e79200d81601e44a643ecf8</guid></item></channel></rss>