2014R3 vs 2014R2.1 Win32 File Size / ICU DLLs

I’ve noticed in the Feedback case that the solution to this under Linux will be to use the ICU library provided with the operating system.

I see two problems with this:

  1. If you are running on a 64 bit system with 32 bit compatibility installed there probably won’t be a 32 bit ICU library available.

  2. I imagine Xojo apps will rely on a certain version of the ICU library. I can see situations where the Xojo app is running on a system which has an incompatible version of ICU and cannot be changed due to the system being locked down.

Here’s a link to the case: <https://xojo.com/issue/37644>
(note to everyone: in Feedback app, click the gear icon and choose “copy link” to get a nice URL)

There is a note saying that they “will reduce the on-disk size” but I don’t think the 6.5MB is the new target.

From the case, it sounds like the 6.5MB is the existing size of the ICU DLLs when zipped (e.g. they start around 22MB and can be zipped to 6.5).

So we don’t as yet know what the new smaller size would be, should they implement this.

Correct.

ICU can be packed with UPX…goes from 22mb to 6 … can be used on all lib files to reduce compile size dramatically.

I’m intrigued by UPX (etc.) but I’ve seen some folks complaining that packed apps are more likely to trigger antivirus software…

Easy to see why since it has to have virus like behaviour to do what it does
And it doesn’t lessen the memory foot print - just the on disk foot print since it still has to unpack either to memory or disk to make the dll usable
http://en.wikipedia.org/wiki/UPX
http://upx.sourceforge.net

Cheapy antivirus’ that use bad heuristics and which generally have innumerable false positives should be the only antivirus’ to trigger when scanning a packed executable (using UPX since it has become an industry standard packing utility). Reliable antivirus’ made by knowledgable developers will automatically unpack and scan the executable in memory just as a zip file, tar, or any other archive is scanned by suites made by companies such as McAfee or Symantec. AVG, Avast, and Panda have been known to give innumerable false positives and permit malware and virii variants that the aforementioned suites automatically recognize as genuine threats. Signing your software helps; and if it’s for business development and you are a trusted developer with them, should they have a cheapy unreliable antivirus, it should be possible to have them allow an exception through the software settings. Or even better you could notify them that their systems are at risk by using unreliable antivirus software.

False positives are a reality - there’s no denying that.
But a lot of people will see “OMG ! My antivirus flagged it as suspicious!” and panic.
We have several bug reports about exactly this & we’ve had to pursue Symantec McAfee and several others to get the false positives rectified.

I guess my attitude would be “disk are cheap so suck up the extra space & don’t pack it and run the risk of someone falsely accusing you of shipping a virus”

YMMV

Norman is right though… with terabyte disk space size shouldn’t really be an issue. We don’t transport software on floppies anymore. In essense though McAfee and Symantec are correct to have flagged Xojo in the past since the compiler is binding files together… which is a direct “usually hostile act” (virii love to bind themselves to executables). Other compilers do all the binding of object code in memory (not on disk) so their actions remain blind to most antivirus software. The packer is merely tearing out empty bytes that take up space leaving a ‘junkless’ executable behind with minor PE compression. Unless your space is limited (ie single board computer with an SD card) size shouldn’t be an issue and Xojo is always improving with each version so I wouldn’t be surprised if the framework shrinks and improves over the next few or dozen releases. For a framework-less development environment Xojo is still number one in size for RAD compilation… .Net is gargantuan and others are still larger than Xojo. Xojo still ranks in the top for size compared to most competitors (Build an empty LiveCode project for starters to see a difference). See what the specs of your consumer are and tailor the needs to them. You don’t want to cause yourself more headaches than needed. You can test to see if your antivirus follows recognized standards by creating a text file and pasting:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

In it and saving it. McAfee finally caught up 2 years ago. Your antivirus should automatically prompt that the “Eicar test virus string” has been found. It doesn’t actually search for the string rather uses a heuristic algorithm. Compressing or archiving the Eicar test file should still prompt that it has been found. If not, what else is it missing or improperly flagging? :slight_smile: You can always use a version or two previous of Xojo to compile your application, which uses the old framework (still just as powerful), and render a smaller compiled application if it’s truly necessary. For personal software or systems you have some control over packers can save much disk space and very useful. The options are great to learn about though. Stick to Norman’s advice though and compile and distribute at ‘normal’ size. ****(Don’t forget to digitally sign the end result or your software will prompt ‘untrusted source’ when a user attempts to run the EXE… that’s a UAC Windows protection issue.) For every solution, a dozen problems can occur. Find the solution that’s best for each situation as a whole.

Mike, I feel your pain. I came to Real from years of using Delphi, where the size started around 459 kb, and the largest app size I turned out with multiple forms was around the 800kb mark.

I’ve been using Real since RB 5 (the first of what I consider to be the best) of the IDE’s. I stopped at 2014’s, but for each edition I checked the tiny snowflake special case base app size.

It really is incredible the changes over the years, going from about 1.7 megs in RB 5, to what I considered an extraordinary 5.4 megs in 2014.

RB 5

RB2006

RB2012

RB2013
And
lastly, RB/XOJO 2014

At almost 5x the combined size of the RB 5 exe, I’ve pretty much de-evolved to where I use 5 and 2006 almost entirely. 3 megs for the 2006 version is pretty hefty imho, almost double RB5, but the db improvements were worth a lot, so it continues to be my goto IDE for now, not to mention that on my machines, its far more stable and responds a ton quicker than any version after it.

Good luck with your projects, I only hope some day they find a way to implement some of the above suggestions and find their way back to turning out a product I can live with.

On my Sinclair ZX-81 back in 1981, I could whip up a complete program in less than 1K.

I started RB in 2002 with 4.5 or so and then, I was happy with 100 MB.

Back in 2003 or 2004 with 5.X, hards disks were around 200 MB, right ? Today the average machine has 500 GB. Gigantically more than 5 times.

The relative expansion of executable size in the latest 2015R3 for 32 bits apps is negligible for the average user.

Incidentally, the older the RB version, the less well it will support current versions of the OS. That can become a much bigger problem than a few megs. Especially for Mac OS X El Capitan, and to a lesser degree for Windows 10.

Add to that pre-Xojo (2013R1) RB/RS seldom had modern controls like ContainerControl (I could not live without today).

IMO, executable size and single-file executable are false problems inherited from older times preconceptions, pretty much as pass as procedural programming.

Wow, way to go way-back ! I could have started off with a ridiculous comparison like that myself, but the comparison instead was with current dev platforms, not something generations apart. The Delphi IDEs I mentioned were versions 5 - 7, and even Delphi 2007 (the last one I use regularly).

Lets agree that your perspective and mine are worlds apart as far as size goes, I don’t believe that just because something can take a huge amount of space that it should. I was similarly critical of MS when they went to the .net CLI, sure the program you wrote was small (somewhere around 24-100k), but at the time when .net was new, you had to download, or include, the GI-NORMOUS runtime of 100 + megs.

Of course, that changed since .net went on to be included with Windows itself, but at the time it was a BIG deal and a deal breaker. Xojo doesn’t find itself in the same position, and frankly I wouldn’t want them to. Then again, I don’t see the need for programs to be as large as possible just because they can.

Maybe I am archaic.

Aside from that, however, you have the 2nd set of problems with the way the IDE is going that I mentioned, which is stability and speed. You started using RB at 4.5 or so, therefore I am pretty sure you remember the days shortly before that, when programming with RB was a REAL gamble. Never mind the DB support, you were lucky if it a.) compiled, and b.) was able to replicate running on more than your own machine.

When 5 came out, I was THRILLED, and got it immediately. I still have it today, and still use it today, that is how thrilled I was with it.

B certainly has been fixed, except with how they treat Linux, but getting to a.) in 2014.x, and to a lesser degree all the way back to 2012.x, was an exercise in frustration.

2-5 second responses in the IDE no matter which platform I am running it in, having to save after just about any change before compiling cause LORD ALMIGHTY the thing might go again.

2006 had an occaisional problem shutting down the (new at the time) remote debugging, but it was tolerable since it happened so rarely. I think 5 crashed on me 6 times in the years that I’ve had it.

Somehow, I am sure you see these as “Big improvements”, but I doubt everyone feels the same way.


ps, I didn’t want you to think I hadn’t read your reply quite seriously, but if your talking about container control as being the active x container, instead of what I think of as a container control ( panel, grpbox, canvas, etc), I’ve been working with active x since 5 as well.

If you mean something other than that, please clarify, I rarely use the controls as they are, if at all.

ps. 2 - I also am assuming that you meant 100 - 200 GB, the last drive I had that was measured in MB was long before I used a gui in my programming. If that is the case, then your size doesn’t matter argument really makes no sense to me, if it mattered with 100-200 GB size, it still matters with 500 GB - 1 TB size.

If everything else (internet speeds, hard drive size limitations, etc… ) was still the same, this might be cause for alarm. But my main program in VB6 which crunched down to about a 7 MB download in 2005. The same program converted to Xojo is about a 12 MB download under Xojo 2015r3.1 after the installed zips and compresses it. Much likely a shorter download, and the roughly 60 or so MB disk space it takes (which includes the ICU DLLs) is peanuts today. In real world terms, Xojo is not perceived to be much different by anyone downloading or installing today. I used to be one of those that kind of got worked up about the size increase, before I checked into what it really meant to our customers… not much. I am sure there are some special apps where this is an issue, but for most people building a Windows app and deploying, it’s not a huge change.

Obviously I am not alone in this thinking, over the years I’ve seen this topic come up time and again. If you don’t think its important, absolutely for you it isn’t.

However, having said that, it doesn’t make it less important to people it does matter to. Certainly you can keep shrugging this off as a ‘non issue’, right up until it becomes ridiculous to even your most ardent customers.

I think 5 is a lot for a simple form, 5 is not the total of a complete application by any means.

When do you start to think it is a lot? 15? 20? 60? the size of the .net frame work? At what point do you start saying hm, I see no benefit to this size?

Again, the size part is only one aspect of my problem with the current versions, but one I think is pretty important. You would have to put it into a perspective for yourself.

2006 etc making single file exe’s will occasionally experience weird crashes that you wont be able to track down.
This has to do with how they work, Windows shims and a few other bits that, when single file exe’s were discontinued, were explained in depth by Aaron Ballman.
But that was done nearly 7 years ago

Make it so all your apps install into the same directory and can share one version of the framework libraries then the hit per app is reduced.
We have a number of customers that do exactly that for exactly that reason

Just to put things in perspective about executable size, the most usual tenants in modern storage are pictures, video and sound files.

Each picture from my iPhone takes 2.5 MB. An average song 7-9 MB. And an average HD movie ranges around 1.5 GB.

I rather have a true bundle for my Windows app like I have in Mac, including a real Resources folder unlike the past hacky-patchy older way embedding, and up to date stable Windows 10 technology, than nostalgic legacy executables. At a time when soon Microsoft will provide a way to turn Win32 apps in New API (formerly “Metro”) Universal Windows Apps AppX, I rather look to the future than bask in the past.

But that is just me. Live and let live. Whatever works for you works for you :slight_smile:

My app is 100 MB and no user ever complained. The data that my app can create can go to 100 GB for the really intensive user and this matters.

If the app is 5 or 10 MB: who cares, really?

[quote=231864:@Norman Palardy]2006 etc making single file exe’s will occasionally experience weird crashes that you wont be able to track down.
This has to do with how they work, Windows shims and a few other bits that, when single file exe’s were discontinued, were explained in depth by Aaron Ballman.
But that was done nearly 7 years ago[/quote]
Norm, boy seeing your name really brings back memories, along with Aaron Ballman and Thomas Tempelmann, and a whole lots of others. It probably wouldn’t be going to far to say most of what I accomplished in RB was based on the explanations I read from your collective tips and explanations.

I did already discover that tip, and to some degree it lessened the distro issues in the areas where I distribute to closed groups who already have other programs I wrote. Good tip to pass on though, others may not have known it.

I never did have the issue you describe sent back to me from any of my 5 and 06 projects, current or past, a few having been in solid known every day use for a tad over a decade. I don’t doubt it could happen though, I’ll take your word for it, I’ve never seen your statements prove out bad. I must have been out of class when Aaron explained it.

The size issue for me is, as I pointed out at least once up there, is only tertiary in the issues I personally have with the IDE and the way it has gone. As far as issues go, it would not alone stop me from using the newer IDEs, unless it really became egregious, like the early days of .net before it was installed everywhere (post 2 up there, I think). That was the main reason I started looking at RB all those years ago, in fact, I couldn’t see asking someone to go through the hassle of downloading / installing the .net framework just to run a program. RB 5 was an ideal solution, thank you very much ! '06 even more so, thank you AGAIN.

I can’t really speak to '07 → up, I never looked into them, since I didn’t have a requirement for them. I understand from a software producing company point of view, that that isn’t particularly good for the dinner plate, but from a customer pov, I think it is great that one product literally covered my needs for a solid 5 years. I sure try to build my own apps that way, in large part due to those IDEs it was easy to do.

2012 came along and I heard that pictures going into dbs’ was now a built in function, instead of a work around. Pony up to the bar boys! and I did. Now we are at the place where I had real primary and secondary issues. The first system I ran RB2012 on (where I ran all my dev stuff), it started up fine (speed covered), but it crashed 4 times in an hour. Hm.

I setup a clean system / os install, and tried it again. It was erratic to say the least. might run for 10 mins, might run an hour. I don’t think I got it to run longer than that. Tried it in a VM on another box (thinking hey, most generic kind of platform possible right? ) Didn’t work any better there. After a week or so, I figured it wasn’t worth the effort, 5 and '06 were workable and rock steady.

Company changed the name. Actually gave me something of a fright, wasn’t sure initially if it had been sold (like the really early days) or what. 2013 came out. I bought it. Nice to have the ability to dev for all 3 desktops without having to shell out top dollar, certainly crashed less than 2012, BONUS ! Unfortunately, after more than say, 6 controls were on a form, it started to slow down in responsiveness. No local help reference file? Why is it throwing an error when trying to go to the language reference on Linux? The more complicated the application, the less responsive the IDE became.

2014 came out. I got it. If possible, its responsiveness is even worse than 2013s, and that would have taken some doing. It wasn’t as selective as 2013, though, it is slow to respond on ALL the boxes I have, regardless of the os, chipset, or any other hardware related issues.

I have to admit, I haven’t tried 2015 yet, but then I doubt I am the primary kind of customer Xojo is targeting. I was when 5 and '06 came out.

Now, I sure don’t want to sound like I’m shooting off just to rain bricks down, and I apologize if that is how it sounds. I don’t begrudge the way the company went, just as I wouldn’t want to have someone else take me to task if My plans didn’t go just the way they hoped they would. It isn’t my company. I would listen, then make my decisions, just as I’m sure you consider, then decide.

I am ABSOLUTELY not asking for you, Xojo, or anyone else to go backwards, please do not take it that way.

All that is new I don’t by any means consider bad either. As I say, dev ability for 3 major systems without the original overhead is nice. When I don’t absolutely need it, I have previous products to fall back on. The new layout, not too bad at all. Certainly far more controls available than when I first came to the park to play :wink:

And, after being told for a long time that being able to change the text color on a button was nearly impossible, WHOA, the newer IDEs let you do just that ! Almost makes me think I wasted my time figuring out how to do it without sub-classing the canvas control. (Almost :wink: )

You have a lot of my respect, I certainly hope we part this discussion friends, or at least not combatants :wink:

…and I think that is what should take up the bulk of a users storage requirements, their personal files if your developing for general consumption. My learning period was spent dev’ing for the oldest existing platforms, or embedded ones, space much like the top poster originally put it, that space isn’t mine to consume.

If it helps put my opinions into perspective, I still dev to those types of standards, even when I am thinking of putting it out for the general public. When I am not, I have to dev to those standards, since the space simply isn’t there for my programs to be as bloated as possible.

Often times the 1 or 2 extra megs in size won’t kill the project, but when the choice is the extra megs or a svelter size, guess which is going to win that debate? Sometimes speed and expediency allows me to factor that against the size, but I’d rather not have that discussion to begin with.

[quote=231866:@Michel Bujardet]I rather have a true bundle for my Windows app like I have in Mac, including a real Resources folder unlike the past hacky-patchy older way embedding, and up to date stable Windows 10 technology, than nostalgic legacy executables. At a time when soon Microsoft will provide a way to turn Win32 apps in New API (formerly “Metro”) Universal Windows Apps AppX, I rather look to the future than bask in the past.[/quote] I’ll leave my views about the above for another discussion :smiley:

Agreed 500%, we have no beef far as I know :slight_smile:

Beatrix, I really don’t what to tell you, I’ve written what I consider to be some pretty heavy duty software in my time, but the only time I came close to that size was an early attempt at an OS. Since the programming world is so filled with diversity, all I can say is more power to you.

Just to correct the above oversight on my part in my post, I dl’d the demo 2015. Issues with speed and stability seem to have been corrected to a large degree ( YAY YOU GUYS !), and now we’re left with only size as an issue for me (lower on the list, as stated). I converted a 2006 project for a quick test, the new IDE went through its thang and updated controls (text fields), etc.

The 2006 exe was 3.4 megs in size (this is a complete db program, 3 forms + Module, general consumption closed group).

Since the 2015 IDE is a demo only here, I can only check the debug size output, but I figure it is probably relatively close. It came in at just under 12 megs, the greater bulk of which seems to be this, “XojoGUIFramework32.so” file, which weighed in at 7.6 megs.

I am going to go out on a huge limb and guess that if I totally rewrote the program from scratch (not going to happen, mind you), it would reduce the size to somewhere around 5-6 megs ?

Just for comparison, I did the same conversion in the 2013 IDE, and the total size without re-writing anything was 6.2 megs. Now I’m not so sure about my guess, although the files produced in the Libs folder are very different between the 2 versions as I would have guessed they must be.

So congrats on fixing the major points in my above posts, I’m sure that was a bit of work. Next time I’ll do the extra mile before typing a miles worth of commentary, sorry for any negativity that seeped through.

Edit
To Michel Bujardet, I did take the time to look up what you were (most likely) talking about with the container controls (an additional kind of class where you can group objects and embed them (or not) within a form or other control or in another container control). Interesting concept, thank you for bringing it to my attention.

It is extremely precious and very convenient. You basically create a window and stick it in another one. It is even flexible enough to let you take an existing window and make it a ContainerControl simply by changing the super.

If I had to replace it, I could, but it would be so cumbersome…