tag:blogger.com,1999:blog-4822684209473355816.post4420376631884186995..comments2023-06-06T15:39:35.804+01:00Comments on flAir :: flashFlexAir: A framework for Modular AIR ApplicationsUnknownnoreply@blogger.comBlogger30125tag:blogger.com,1999:blog-4822684209473355816.post-29665397168473038922011-03-19T20:14:21.811+00:002011-03-19T20:14:21.811+00:00Stray, absolutely great work!! Very interesting an...Stray, absolutely great work!! Very interesting and usefull stuff.<br /><br />Hope to have some free time to test it and try to integrate in a project that we are working on.<br /><br />Thanks a lot for your contributions!Unknownhttps://www.blogger.com/profile/00450983757707393871noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-30371458317947227952011-01-06T15:01:27.309+00:002011-01-06T15:01:27.309+00:00Hi Adrian,
just in the normal way - I'd expos...Hi Adrian,<br /><br />just in the normal way - I'd expose a method for the shell to use to set it in the module.<br /><br />If you want the module to pull it from the shell then pass a function that the module can use to get it instead.<br /><br />I actually use the robotlegs framework for everything I build now - the modular version allows you to pass shared data around via a shared event dispatcher.<br /><br />It integrates with this framework really nicely.Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-77922429494372041662011-01-06T14:35:53.454+00:002011-01-06T14:35:53.454+00:00Hi Stray
first of all, thanks for this great part...Hi Stray<br /><br />first of all, thanks for this great part of software. It works really well. Now, communication from the host application to the module app can be done using a shared Interface.<br /><br />But I am interested in communication from the module to the host application. So assume I have a property called "sessionId" in the main application. How can a loaded module access this property?<br /><br />Thanks for your answer.Adrianhttps://www.blogger.com/profile/15680444495404277462noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-22871881548594422422010-11-15T01:34:34.515+00:002010-11-15T01:34:34.515+00:00In the Flex version of the code, in AirResourceUpd...In the Flex version of the code, in AirResourceUpdateManager.as, the second line of the checkForFile function has a return false before it even checks for the local module swf, therefore it never finds it and always downloads from the server. I just wanted to note that for anyone trying to use the Flex version that if they want to use the local file if it is there they will need to remove that return.<br /><br />Thanks again for this great resource.Jacobhttps://www.blogger.com/profile/04403593165885271240noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-91075444856944190972010-11-03T20:12:14.222+00:002010-11-03T20:12:14.222+00:00Up on github at https://github.com/Stray/Air-Secur...Up on github at <a href="https://github.com/Stray/Air-Secure-Module-Loading" rel="nofollow">https://github.com/Stray/Air-Secure-Module-Loading</a> now.Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-62056052851773061802010-11-03T17:17:14.868+00:002010-11-03T17:17:14.868+00:00That would be great if you don't mind posting ...That would be great if you don't mind posting it.<br /><br />Thanks for all your great work on this, I would probably be lost without your framework.Jacobhttps://www.blogger.com/profile/04403593165885271240noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-33913512117736110602010-11-03T09:05:40.874+00:002010-11-03T09:05:40.874+00:00I had time problems validating files over 150 Mb, ...I had time problems validating files over 150 Mb, I disabled this part and add other checks.<br /><br />Beside that everything worked great.<br /><br />If you're curious, the app was "The Land of Me", we were finalist at the MAX Awards in case you were there.<br /><br />Thanks again for sharing the code :)Unknownhttps://www.blogger.com/profile/05089643964988126169noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-16150798755666004032010-11-03T08:48:39.927+00:002010-11-03T08:48:39.927+00:00@ Jacob - yes, they currently just sit in the app ...@ Jacob - yes, they currently just sit in the app storage directory - for my purposes this is ideal as the IT dept want to know the history, but you could delete them if they're taking up space and it's causing a problem.<br /><br />Glad you managed to answer your previous question re versioning - I have to say I like the approach we've taken, but it's made more viable by a ruby script that does the renaming and bundling of the modules with their new version numbers, and uploads them to the server. I'll put that up on github with the actual code shortly - let me know if you think you could use it before I do that.<br /><br />@Soundstep - I just realised you asked a question about validation times a while back... and I didn't answer it. Any joy there?Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-18109360754239850022010-11-02T23:10:53.055+00:002010-11-02T23:10:53.055+00:00Stray,
When I asked about versioning I had somehow...Stray,<br />When I asked about versioning I had somehow missed your earlier comment about the naming convention you use on modules to handle versions. I kind of like this idea, but my question is what happens to the outdated module files? Do they just sit in application storage forever since they are not being replaced?<br /><br />Thanks!Jacobhttps://www.blogger.com/profile/04403593165885271240noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-14626227389807949242010-11-02T08:26:21.604+00:002010-11-02T08:26:21.604+00:00You'll need to build a database or XML to hold...You'll need to build a database or XML to hold your version numbers. That's what I've done. I handled the download myself, it was a requirement. I'm not sure you can automate that with the air updater.<br /><br />RomuUnknownhttps://www.blogger.com/profile/05089643964988126169noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-12281051507977818332010-11-01T22:33:01.779+00:002010-11-01T22:33:01.779+00:00Does the framework support versioning of modules a...Does the framework support versioning of modules at all? As far as I can tell it doesn't, but I wanted to ask to make sure. What we are looking to do is only pull the module from the remote location if the remote module is of a newer version than the one previously loaded to the users system.Jacobhttps://www.blogger.com/profile/04403593165885271240noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-7218576710793642142010-10-30T20:12:05.521+01:002010-10-30T20:12:05.521+01:00Ah - sorry about that, I must have accidentally dr...Ah - sorry about that, I must have accidentally dragged the zip with something else. Reinstated now so it should be working again.Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-46495510267672522282010-10-29T10:31:06.468+01:002010-10-29T10:31:06.468+01:00hi,
flex files link is broken, could You fix it?...hi, <br /><br />flex files link is broken, could You fix it? thx in advance.<br /><br />bestAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-10060602262488599582009-12-14T22:53:54.794+00:002009-12-14T22:53:54.794+00:00Flex files finally up (sorry for the delay there)....Flex files finally up (sorry for the delay there). Thanks Philoo!Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-58871022668591626882009-12-09T15:40:15.381+00:002009-12-09T15:40:15.381+00:00Hi Daniel,
I sort of have dealt with that issue. ...Hi Daniel,<br /><br />I sort of have dealt with that issue. In our case all the actual module zip files are only loaded after the user has logged in.<br /><br />Attached to their account is a 'module profile' which is basically a list of which versions of which modules should be loaded - whether they're held locally or need to be downloaded from the server.<br /><br />The server delivers that xml with all the module data in that the whole system relies on. So - user A shouldn't be able to load user B's modules.<br /><br />In addition, we have lesson content which we definitely didn't want to be usable outside of the software. The lessons are .swf files.<br /><br />In theory the lessons can still be decompiled and looked at that way, but at runtime they basically implode unless they're being loaded into the actual e-learning software, or they're being run by a developer, with a registration file on our dev machines.<br /><br />So - hopefully that gives you some clues?Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-84899579058916544722009-12-09T15:32:51.217+00:002009-12-09T15:32:51.217+00:00Stray,
Thanks for this really helpful code!! I...Stray,<br /><br />Thanks for this really helpful code!! I'm trying to create a way that an AIR client can download graphic symbol libraries from a server. Your framework really gets me going in the right direction. Thanks for making this available.<br /><br />One problem I'll still need to solve is how to make sure 1) the client is allowed to download the modules they want and 2) only the client that downloaded the modules can use them -- that way somebody couldn't just start passing the modules around to those who shouldn't have access to the modules.<br /><br />Have you tackled this issue, and if so, any thoughts?<br /><br />Thanks again.<br /><br />Daniel McQuillen<br />mcquilleninteractive.comMcQuillenshttps://www.blogger.com/profile/03986666688415498929noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-78031148245345594502009-11-24T16:01:54.085+00:002009-11-24T16:01:54.085+00:00Stray,
Sorry for the late reply...
You are correct...Stray,<br />Sorry for the late reply...<br />You are correct, it only grabs modules if they are not present. Which is good (I want the remote module when I don't have a local one) and bad (if I have a newer remote version, I can't get it because I already have a local one).<br />In the version I sent to you, I did not include the version check, so the weird Flash folder name must come from the Air runtime. I haven't investigated yet.Philoohttps://www.blogger.com/profile/08957019754714140501noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-68160420147871157392009-11-13T17:28:08.725+00:002009-11-13T17:28:08.725+00:00Hi Stray
I sent you an email about an issue about ...Hi Stray<br />I sent you an email about an issue about the manifest validation.<br />Basically it works fine but take way too long because of the _stream.readBYtes, about 20 sec for 30 Mb.<br />My Main need is to validate that the SWF file of the module is valid, so it won't load it if a third-application is replacing the SWF with another.<br />Any solution?<br />RomuRomuhttps://www.blogger.com/profile/17341303597838831317noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-34859064859492015082009-11-11T21:10:26.229+00:002009-11-11T21:10:26.229+00:00Hey Philoo, now you've got me thinking...
Whe...Hey Philoo, now you've got me thinking...<br /><br />When I'm testing it, it definitely only downloads the xml - then it only grabs modules that are actually missing - so they should already be being detected and skipped if they're present.<br /><br />However - I've noticed that when testing air, sometimes Flash decides to create a new application storage folder with a long name like myapp-2374839742328493. I expect that what's happening is that your test is creating a new temporary app storage folder with this bizarre name - and of course your previously downloaded modules are in an app-storage directory with a different name. If you actually compile and install the app you should see this stop happening. It definitely only grabs what you need once.<br /><br />We haven't gone for version control via the xml, instead we're using a naming convention so NavControlModule1_2 becomes NavControlModule1_3 with a new package name. It makes it possible for the tech support guys to instantly see which versions of which modules are installed - but I'm guessing that adding a digit check in there isn't a major job (though may not be necessary given what I said above).<br /><br />Let me know if your installed app is also downloading the modules multiple times... that would be a problem!Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-44443523820943387282009-11-11T21:00:39.004+00:002009-11-11T21:00:39.004+00:00I agree. I think the best way is to download a new...I agree. I think the best way is to download a new module in a temporary folder and then copy in the final directory if the certificate is OK and then always delete the temporary folder.<br />Also, I realized after working a couple of days on the framework that having a way to check which version is installed vs. which version is on the server is a must. Pretty much like what the Air app updater does. This adds quite some complexity but avoid downloading the modules each time the application is launched. When I tested the original framework, the download of a 600kB modules took >10s (I have a local server...) so after attempts to understand, I resolved to first check the module version and then download only if a newer version is available.Philoohttps://www.blogger.com/profile/08957019754714140501noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-41215255319977855702009-11-11T14:07:35.139+00:002009-11-11T14:07:35.139+00:00Hi Philoo - thanks for the flex files - I'll p...Hi Philoo - thanks for the flex files - I'll put them up later today.<br /><br />That's a good catch - there are only limited situations in which it could happen but writing over a good module with a bad one definitely isn't desirable.<br /><br />It wouldn't be a bad idea to do something clever though with renaming to keep a backup of the original - or keep the unpacked on in a quarantined file til it's verified. I'll add that to my list. Thanks!Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-5797345484638981702009-11-04T04:49:49.334+00:002009-11-04T04:49:49.334+00:00Hi Stray,
Thanks, hope you enjoyed the Flex versio...Hi Stray,<br />Thanks, hope you enjoyed the Flex version I sent.<br />There might be one gotcha. If a modules fails verification, it is still written in the app-storage folder and may overwrite a valid one. On the next application launch, the corrupted module will fail again.<br /><br />Have I missed something?Philoohttps://www.blogger.com/profile/08957019754714140501noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-60169055512098547852009-10-29T15:50:36.454+00:002009-10-29T15:50:36.454+00:00Absolutely!
Go for it - I just haven't put i...Absolutely! <br /><br />Go for it - I just haven't put in the MIT license blah stuff, but yes - it's completely free to use for whatever you like.<br /><br />Just - if you find any bugs / problems I'd appreciate it if you let me know.<br /><br />Good luck!Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-34107701832123171472009-10-29T15:43:58.228+00:002009-10-29T15:43:58.228+00:00Hi Stray,
Great post! Can we use the source withou...Hi Stray,<br />Great post! Can we use the source without restrictions?<br />- BreizoPhiloohttps://www.blogger.com/profile/08957019754714140501noreply@blogger.comtag:blogger.com,1999:blog-4822684209473355816.post-2452655924248613992009-09-21T16:37:06.972+01:002009-09-21T16:37:06.972+01:00Only content that is going to be loading into your...Only content that is going to be loading into your AIR app needs to be signed, so that's what needs to be a .air package renamed .zip.<br /><br />I *think* that your initial launcher can be anything you like - if the purpose of it is simply to launch the actual AIR app and pass it some info about the CD contents.<br /><br />I think it's a good idea to do it both ways though - allow the user to open the AIR app and browse to the CD.<br /><br />You can filter file type in the AIR file browser, and you can also get a folder listing. Both those things might help to make it even easier for the user to point the AIR app at the correct location to load the data.<br /><br />Good luck!Strayhttps://www.blogger.com/profile/09283777118421693358noreply@blogger.com