Archive for the ‘Apollo’ Category

In-browser AIR functionality

Monday, November 19th, 2007

So, after my previous post moaning about how I think AIR functionality would be ideally suited in-browser, I did a little digging and it turns out you might kind-of be able to acheive some of it!

I’ve yet to test the feasability of this, but according to Jeffry Houser, local connection works between browser loaded swfs and AIR swfs. What this potentially means is you could create an AIR application that does nothing except run as a local service in the system tray and merely exposes AIR functionality through localconnection.

Take the example of Buzzword in my previous post, they could create an AIR application that does nothing except for offer a simple “saveLocal” function. The online version could then check through localconnection to see if that AIR application is available and if so offer users the facility to save their document locally (obviously if localconnection fails then it offers only the online version).

Jeffery raises concerns on the security side of things, but I’m not so sure that it is a problem, it comes down to the age old point of educating users to just be vigilent in who they download applications from.

I’m going to see if I can come up with a proof-of-concept for this but unfortunately have a lot on right now so if anyone else feels like having a go feel free and let me know how it goes.

Adobe AIR: Is breaking out of the browser the right next step?

Sunday, November 18th, 2007

If you read my blog regularly, you’ll know I was quick to jump on the AIR trip. I do still very much like AIR, have seen some good AIR apps and believe it has some good potential. I’ve played with a couple of AIR apps, have seen several AIR presentations (even presented one) and made numerous blog posts about it. So I feel I’m justified in my opinion that I’m not completely convinced that this is the best next step for RIAs, or at least not the best place we can end up.

I mentioned “played with a couple of AIR apps”, why only two? To be honest it’s probably slightly more, but still only very few. I’ve downloaded and installed the Pownce AIR app, now uninstalled as I didn’t use it. I downloaded and installed the Finetune AIR app, now uninstalled as I don’t keep much music on my computer and so it didn’t offer me much more than the in-browser version. I’ve also downloaded a couple of other apps out of interest but only was looking out of my interest in AIR and not so much because of the usefulness of the app. All gone, I currently have zero AIR apps installed.

The fact I uninstalled them isn’t really the point i’m trying to make, for me, those apps just didn’t add much value so I removed them, that could be the same as on any platform. The thing that bothers me about AIR apps is how few I can be bothered to try. I generally am not that inclined to download and install the applications in the first place. This is because breaking out of the browser breaks up my user experience. I love RIAs, I love the ease in which I can access, use and share them. These things just aren’t as good when I have to download and install the application I want to use, I just want to use it.

Okay, so the features that AIR offers aren’t available to the Flash player and I do think those features are hugely valuable. I just don’t think running an RIA as a completely separate entity to the browser works too well. A large draw for an RIA is simplicity and availability, both of which out-of-browser RIAs restrict.

Take Buzzword, which is a truely remarkable RIA and in my opinion is superior to any other online AND offline wordprocessing tool. I’ve not seen the AIR version of it which I believe is on it’s way and I can already see that what AIR offers will be a great addition to it. But wouldn’t it be even better if all the connectivity detection, local file storage, drag and drop etc were available to the in-browser version? If installing AIR gave me all those capabilities as an in-browser resource as well as a stand-alone runtime? Okay so no custom chrome for in-browser. Big deal! Apps like Buzzword already stamp such an impression with their branding and interface you really easily forget you have some boring browser buttons up there. We now have full-screen in Flash Player, let’s work out those secrity issues and make more use of that.

I know it’s not so easy with all the security sandbox constraints of running in browser but is there really that much difference to me saying “yes let this application i’m installing have access to the nether regions of my PC” vs “Oh, I tried to do something in this online app that wants access to my PC? Oh go on then let it”.

Security gurus can tell me that what i’m asking for isn’t possible and why it shouldn’t be, but I feel as long as I ultimately make the decision on what does and doesn’t have access then it shouldn’t matter whether this is in or out of browser. Am I alone in thinking this? Is this something that will be possible in the not-too-distant? I’ve not done enough homework to answer that but it certainly makes more sense to me as in some ways AIR feels like we’re taking a step backwards.

Are people still after Pownce invites?

Friday, July 27th, 2007

Aparently there are still some people after pownce invites, if so I have 12 so leave a comment and i’ll send you one.

What is an AIR database?

Saturday, June 23rd, 2007

As mentioned in my last post I want to explain to the un-database-initiated what a database in AIR is and how it differs to other databases you might have heard of or experienced.

Database Support In AIR
Adobe have recently added support for databases in AIR through support of SQLite. From the SQLite website:

SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.

What this means is that SQLite enables database functionality within a single system file without the need for a running database server or complex database applications. The real merit to this is that it is highly deployable and as such is a great addition to AIR. To better understand this it might pay dividend to see how this is different to traditional databases.

Other Common Databases
If you work in web development the liklihood is you will have worked with or at least heard of SQL Server and/or MySQL. These are the most commonly used databases in web development so we’ll start here to help understand SQLite.

SQL Server and MySQL are Database Management Systems (DBMS), in that they work on a schema of tables of data and identifying relationships between those tables. This is very much the same in SQLite, you store your data in tables (think spreadsheets) and you can link (”relate”) those tables to each other through the use of “keys” (more on this in a later article).
However, SQL Server and MySQL are Database Servers - they are hosted on a network accessible resource (I.e a server), requests are sent to the database server and information is returned. SQLite differs here because an SQLite database resides on the client machine in a single file and all database operations are carried out on that specific file.

Interactions between a MS SQL Server/MySQL database and an SQLite database are much the same in format (the surprisingly titled ‘Structured Query Language’) but SQLite interactions are carried out on a file whereas SQL Server/MySQL are carried out on the server. Understanding this difference will be key in assessing when to make use of the built in support for SQLite and when to use traditional DBMSs which will still require the use of a server-side language (e.g. php, .net or java).

When to use SQLite
So database server databases reside on servers (woah :P) and SQLite databases are files on the local filesystem. So are they viable alternatives or are there use-cases for one and use-cases for the other? There absolutely are different use cases for each approach:

Database Servers
Where all users need to share the same information - E.g. Forums and community sites
Users aren’t necessarily going to be accessing from the same machine - E.g. Remote vs office working
High volume of data transactions - single file local databases aren’t going to cut it with millions of data transactions. Modern database servers can handle much higher loads.
Concurrency Requirements- On a local database file with SQLite your database is either being accessed and therefore locked (I.e. one transaction at a time). database servers have much more advanced complex record locking and update mechanisms which are useful again for high volumes of data requests and updates.

SQLite
Disconnected Working - E.g. For applications when offline working is required
User preferences - Where the user audience need not know each others details E.g. layout settings
Local Processing - If alot of work is being done at the database that doesn’t need to be publicly shared E.g. summary reporting, calulations etc.

Best of both worlds
SQLite in AIR allows you to take your data driven applications and make use of local resources and avoid unecessary remote server calls. SQLite will not completely eliminate the need for remote code and databases but it will certainly help to enhance the desktop application experience. Database servers allow for shared access to data and distribution of data, combine this with SQLite for local, disconnected data access and you can really add value to your rich internet desktop applications.

AIR Databases 101 - Flash/Flex developers haven’t had this database stuff before!

Sunday, June 17th, 2007

In a recent conversation with Neil the significance of database access in ActionScript dawned on me. Whilst this feature has undoubtedly been driven by requests from those with previous experience of databases, there must be a huge amount of Flash/Flex devs who’ve never had to worry themselves with the wonderful world of DBMS’s (”Database Management Systems” or “databases” for the non anal). So I thought I’d put together a number of introductory posts on the essentials of databases.

Adobe AIR

A couple of things to note first: I have not touched databases in AIR before now, in fact despite the number of posts on Apollo, i’ve not touched Apollo/AIR in any decent capacity before now (purely due to the rare commodity of time). However, I am pretty well versed in other common databases namely MS SQL Server, MySQL, Oracle and of course, Access (barf).

Another thing to note is: to all you guys who spend all day every day creating amazing, interactive, fun and flashy things in Flash and Flex… databases might seem a bit dry. In fact sod that, they are dull as dishwater, paint drying and grass growth in comparison. However, if you’re planning on making some kick-ass AIR applications and don’t want to rely on webservers, server-side scripting and hard to setup and manage database servers and/or want to make use of the nice offlineyness in AIR, bear with it because it will be a very useful string to your AIR RIA (gotta love these acronyms) bow.

So what are these essentials of which I speak?
The below is a rough list of topics I’m going to cover. I’m starting from a real “assume no knowledge” level so please feel free to wait for the later articles if you’ve already some exposure to databases. I’m hoping to get these out over the next few days but if you have any comments, questions or suggestions please fire away and i’ll try to include as much as i can. I’m going to be creating plenty of simple examples using Flex3 (although this is already proving troublesome as my poor old laptop can’t hack it - but i’ll sort something out). Anyway, on with the planned topic list.

  • What is a database? - duh! Okay to put it a better way, how do databases in AIR compare to other databases that I’ve heard of?
  • What’s in a database (an AIR database) - Tables, Views, Triggers, Indexes
  • SQL - The mother tongue of nearly any database you’re likely to use.
  • Normalisation - ugh! initially this wont seem important and certainly not interesting. As soon as you want to start doing more advanced databasey stuff - you have to get this.
  • Database best practice - this is yet to be defined in the AIR world, however there are many databases in application best practices we can draw from other languages and databases to get us started.

As mentioned, if you think there’s anything unclear or you think I’ve missed let me know and I’ll try to cover it. First topic coming up shortly…

Apollo AS3 Learning Tool

Thursday, April 5th, 2007

This is a great example of community driven resources:

David Rorex’s AS3 Tip of the Day Apollo App

This app provides you with a simple interface for working through a set of posts on Kirupa by Senocular who’s written some excellent stuff for learning AS3. It removes all the ‘noise’ posts and caches locally leaving you with a rather excellent disconnected reference for learning AS3.

I’d like to see David expand on this with some sort of index and update checker and possibly a facility for adding other references, but David has provided the source so maybe I’ll have a hack about with it too.

If you’re learning AS3 or HTML parsing in Apollo, this is definitely worth a look.

The “Enterprise Widget”

Monday, April 2nd, 2007

I was just having a conversation with Ryan (through the medium of geek - aka twitter and blog comments) and we established a concept of “enterprise widgets”.

It’s not really a new concept rather than a different outlook on the “widget” concept. It is also something that Apollo is an ideal platform for developing.

In Ryan’s post he demonstrated use cases of when to focus on a browser app vs when to focus on a desktop app. One of the points about when to target the desktop was:

You’re building a “widget” application. Widgets are becoming bigger and bigger (in terms of capability) and you just can’t run a widget platform inside the browser. Widgets need to be accessible from the desktop, where they can take up a small space and be easily moved around. The browser restricts that too much.

He then asked for other ideas to which I responded:

Something that I’ve been harping on about a bit lately is the opportunity of a “desktop web service” (service in the desktop sense, not a web service). So that’s not too clear and a better term is needed, I think an example is in order:

Say you were a trader and wanted to be notified when certain things happened to rates/markets. With a desktop app you can have a form of service (or invisible app) that runs in the background watching the trading web services, when something pertinent happens you can fire into action informing the user.

This is a use case for a desktop app as you don’t want the user to rely on having a browser window open on a specific website.

Clear as mud? Wicked, I think i need to go away and create this application to aid my ill-eloquent thoughts-to-text abilities. :P

Ryan alerted me to the fact that my suggestion IS a widget of sorts. However, for myself, the term widget conjurs up the image of a small funky looking app that runs on your desktop and is used for fun, interest or time-passing E.g. weather reports, RSS readers, traffic warnings etc. In light of this I hadn’t associated my example (a corporate or enterprise type application) with the term “widget”.

So an “enterprise widget” is essentially a widget with or without a UI which can run as a desktop service until some event or action happens that would require further interaction with it (or another desktop or web application).

Another idea that could be classed as an enterprise widget is
Grant Skinners gTimer - I don’t know the specifics of this (it looks very cool and a something I’ve been wanting for a long time) but it could potentially run as an invisible application on your desktop (or just an icon in the system tray) and only prompt for client/project details when you open/close files and applications. Therefore negating the need to conciously update your timesheets when you switch projects.

Basically any action you need to take that needs to be responsive to some event or information change you can setup an enterprise widget to monitor activity and prompt with the necessary action based on certain flags. E.g. you could have an RSS reader that spurs you into a blogging frenzy whenever anyone mentions a specific term or technology you’re interested in.

Apollo seems to be the ideal choice for developing such enterprise widgets because of it sits squarely on the line between desktop and web. Making use of web services, desktop presence and desktop chromelessness (a word I just invented) are all key elements of the enterprise widget.

I’m not sure “Enterprise Widget” is the best term because, as I mentioned earlier, I don’t associated “widget” with a business tool but maybe that’s just me or maybe there is an existing definition that might be a better fit. I initially referred to it as a “desktop web service” but that was just plain confusing. Ideas?

My Apollo Presentation @ LFPUG

Friday, February 23rd, 2007

Last night I presented my “Apollo: The Unofficial WTF” at the LFPUG in London. I presented after Alias who did a presentation on procedural bitmap effects. Alias was relaxed and gave a great and interesting presentation with some stunning examples and work he’s been doing.

My presentation went okay, I’d like to have been a little more relaxed at the start because I started off rattling through the slides a bit quickly but when I got into it things went a little better. Some good debate at the end in a Java vs Apollo kinda style (cheers – eokyere ;)).

So whilst could have done better in my presentation style I’m fairly happy with it and look forward to doing it again sometime.

Heres the slides for Apollo the unofficial WTF (ppt) or pdf

ApolloCoders discussion mailing list

Friday, February 2nd, 2007

Okay, so maybe the name is a little premature and should be called ApolloCoderWannabes for the short-term (even the “Apollo” bit is only codename at present). However, Ryan has brought to the public’s attention an ApolloCoders mailing list created by Ted Patrick. If you’ve got a burning desire to start asking questions or discussing ideas about Apollo then looks like this is going to be the place.

Mike Downey’s Apollo preso @ DEMO

Thursday, February 1st, 2007

Mike Downey (Apollo Sr. Product Manager) gave an excellent short and precise demonstration of Apollo at DEMO. He demonstrates some of the functionality from the much discussed San Dimas project which is looking awesome and really shows off the power of Apollo.

Another cool showcase that has caught my attention is by the guys at Cynergy who are truely ahead of the game for Flex development, check out cynergysystems.tv. Not sure how into the Apollo thing these guys are but no doubt they’ll come up with some good stuff if they are.

[excuse for lack of recent posts: More thoughts on Apollo shortly, i'm totally snowed under at the moment moving house.]