 So ladies and gentlemen, it's 1 p.m., it's time for the session and I want to start with how was lunch? Great, that's kind of a great start. Okay, we're here today and we want to present on how to auto-generate your Drupal mobile app with PhoneGap is present by Jeff. Jeff Linwood. And me, Fabian Franz. I'm from Twellon and... I'm from Biscotti Labs. Okay, and yeah, this will be kind of a fun session, but it's also a beginner session. So if you're into fun, you can stay. But if you're kind of saying like and expecting some high level stuff going into code, deep level, then this is not the session for you and you have the chance to leave. But you will definitely miss something. But you'll see. The other thing is we would like to have the questions part at the end because the presentation flow is not designed to work with questions. Okay, everyone ready? Let's go. No, it's not my phone. Your client is calling. Hello there. Welcome to Drupal Web Shop LLC. What can I do for you? Hello there. Wow, we really enjoyed working with you on our last Drupal 7 website. It works so great, it's fantastic. And we just want to get one step further. You know, it's all about apps today and we really want a mobile app. Well, before I give you an answer, let's figure out what you want us to build. So, chapter two, gathering requirements. First of all, after some conversations with the client, you find out that the requirements are, it should be a mobile application for Android and iPhone. It should be available in Apple App Store and Android Market. It has to be offline content that can be reached without network. And it should also just get the newest news that you put up on your website directly into the app so it needs to support online content. It should have native device features because your client really, really wants to use a camera. So, what could we use for that? I think let's do some research. Google is always something good to ask and let's just see what comes up. Oh my God, what is that? I think I'm pretty clueless now and I think we are really lost in the jungle. It's a movie by mobile application development. But fortunately, we do have a magic wand. And with this magic wand, we'll use it and we'll see what happens. So, are you ready? Are you prepared? Let's do it. Three, two, one, magic. That looks much better. So really, what we found out from our Google research is that there are certain kind of partitions that we can put in our mobile development. There's, of course, Drupal. It has a services module. It has an Android SDK called Dandy. The Drupal iOS SDK. Then there's those mobile frameworks like JQ Touch, Sancho, Ajax, JigFury Mobile. Of course, you got the native applications like your Facebook app, Google Maps, whatever. For this, you have the Android SDK with Java and the iOS SDK with Objective-C. And then there's also HTML5 with HTML export, responsive design, HTML manifest. And then there's Hybrid. And there, for example, you could use Titanium, PhoneGap, and the secret we will today will be the mobile app generator. So, now that we kind of have the solution space, the next part is we have to analyze those solutions. So, this will now be the really boring stuff. You can expect 50 minutes of boredom analysis, and it will be very dull. So, you can get up your laptop, start stacking emails, very, very dull. And really, really, really boring. Oh, really? No, of course not. Meet the mobile tournament 2012. This will be now really, really fast, and it will be just for fun. You can later check the slides online, we'll put them on after the talk, and then you can check what is there. It will be too fast to follow. But it's for the fun, and no one wants to have 50 minutes of analysis. So, if you are not into this kind of stuff, just ignore the next three minutes. So, let's meet the fighters. We have the normal Drupal site, the mobile Drupal site, the web application, and the native application. We have the hybrid, and we have the mobile app generator. And fight. We have the normal Drupal site, it's through Plista, and it comes in with techniques. It has menu, blocks, and views, and panels. But it's not mobile by default, it's always online, and it has no native features. No. Mobile Drupal site, Omega T. Omega T comes in with responsive design, mobile frameworks, HTML manifest, but it's always online, has no native features. Next one, please. We have the web application, JQ. But it's technique, it has data load via eJax. It features services module, mobile frameworks, animated transitions, but it's always online, it has no native features. Services can be really a little complicated. So, next one. And then we have the native application. It's native UI and native UI. It has techniques, native code for iOS, Objective-C, native code for Android with Java. But it could be rather complicated. The knowledge could really not be available in your shop. There are two different versions you have to program for, and you have this native UI. So, let's meet our next fighter, hybrid application, hybrics. It's a web application running on the device. It has phone gaps, services, mobile framework. It's offline and online. It has native features. It's for Android and iPhone. It has JS, CSS, and HTML5. We have... We have it filled in as you can see. But what exactly is PhoneGap? And so, what PhoneGap lets you do is you can make your mobile web site, your mobile web application using all the stuff that we've talked about here at DrupalCon with jQuery mobile, with responsive design, with Drupal themes, your HTML, your CSS, your JavaScript, but you get access to all these really cool smartphone features that you only get with a native smartphone app. For instance, using PhoneGap, you can actually take your mobile website and get it up on the Apple App Store. You can get it up on the Android Market. You can have all kinds of really cool native functionality. You can actually use the camera. You can take photos. You can record video. You can get access to the person's contacts on their phone if they let you. You can do all kinds of interesting things with accelerometers, compasses, gyroscopes. It's a really cool way of taking your existing web programming skills and turning that into a mobile app. And to talk a little bit more about how that all works and some of the native functionality, I'm gonna turn it back over to Fabian. Yeah, I'm giving you an example here now how this is working because really what Jeff found out is that people do not really know what is PhoneGap. Is PhoneGap jQuery mobile? Is it CSS? Is it JavaScript? What is this PhoneGap? What does it do? So here we have an example. We have written a JavaScript and it's talked to the browser and it says, hey browser, take a picture. And the browser answers, hey you, what's wrong with you? I can't take a picture. I don't know how to do that. And yeah, a browser can't take a picture at the moment. So, and this is where PhoneGap comes into play. PhoneGap is really putting in this component. You again ask the browser, could you please take a picture? And PhoneGap is answering you, okay. It asks the camera and it knows how to access all the cameras of Android, iPhone and Windows Mobile and the camera is asked to take the picture. The picture has gotten back to PhoneGap and PhoneGap gives this information back to the JavaScript. So, this should kind of make it more clear of what PhoneGap really is. It is a bridge that is extending the browser features so that it can do all this cool stuff. So, now that we've looked a lot about what I can do with PhoneGap, what PhoneGap is, we actually have to ask ourselves the question, hey Jeff, what can I do with PhoneGap? Can I use it for Android and iPhone? It actually supports seven different platforms all with one code base. What about selling it? I really want to sell it. Can I sell it? Because it's a native app, you can actually sell it on all the app stores. And what about offline content? I really need to have some pages like in about us, page terms and conditions, et cetera. I need those to be always there in the app even if the user has no internet access. Can I do that? Actually, all you need to do is just copy those into a www folder. It gets packaged up with the app and it's just sitting on their phone waiting for them to use it. Okay, now that we have the online content, what about the offline content? What about the online content? I really want to have the news from my website featured in my mobile application. What would be a way to do that? Probably the easiest way to do that is set up services on Drupal. You can do that with Drupal 6, you can do it with Drupal 7. Take a look at services three. It's actually pretty easy just to make all the nodes that you want up and available to your users, to your mobile phones, to your Android's, iPhones, mobile web, put in that services layer and all the phone gap apps can start talking to your Drupal server and get fresh content. Okay, but what about those native features I've heard about? What does phone app support? What can I do with it? So the great thing about phone gap is that it's extensible. So right out of the box, it comes with plugins for the camera, push notifications, contacts, plugins, maps. It's really cool. One of the great things about phone gap is that you can extend it. So if there's new parts of a native app that you want in your phone gap app, you're not limited, you're not stuck. You can always just code those up as sort of a native app style, get those into your phone gap app and you're good to go. Oh wow, and this is now the matrix. So you really don't have to know all this, but it's just showing that phone gap supports tons of features across tons of platforms. So let's check our requirements from the beginning again of what our client wanted from us. So have we fulfilled our requirements? You know, I could go back to that big ugly screen, but I think I remember enough of it. So let's see, we have Android and iPhone, it's for sale, offline content, online content, and we have those native device features. Yes, I think we can use phone gap for the build out, but before we going into building that, we want to quickly give you some hints of when better not to use phone gap. So if you want to create a game and it needs to have really high performance and lots of graphics and needs to be really fast, phone gap is not what you use. You really want to use the native application. And when you don't need any of those native features, the offline content, or the possibility to put it on a market, then you could end up being better but just creating a web application with a mobile scene that kind of would give you the same and then phone gap is kind of overkill and just too much. And if you just want to display something mobile, you can just use a responsive design, make a mobile site, and you don't have to fiddle with native features. But as we will see later, it might be possible to just combine those two. And that's what we come to now meet mobile app generator. It was published today or better, this is the publishing Drupal.org project MAG. It's an extension to hybrid apps. You know, normally those apps are created in the following way. You create the app and you connect it with services. And you have to learn all those mobile frameworks, jQuery mobile. And for example, you now already made a site, it has a nice mobile scene, and now you have to rebuild all of that again, build it all in JavaScript, connect it with the services, et cetera. While sometimes you just want to use what you have as your Drupal skills, what you are already now, what you are using, and you just want to make this into an app. And this is what the mobile app generator really allows you to do. You can create your app completely in Drupal, just a mobile site, you can test it online, you can integrate it with services, and then with a click of a button, you export it for PhoneGap, you get a nice folder, you plug it in, you can test it on the device, and it all works. And so what before took like, I don't know, many, many, many hours of extra development to kind of get your Drupal site connected with your app, you can now use your mobile site and export certain things to it in just five minutes. So this is what we now want to see, how we kind of can use this mobile app generator. It's demo time, so let's go. Of course, you just download it, just download MAG, you enable it, you use a nice mobile theme, you create a menu, you create some notes, and then you click export. And this is what we want to take a look at now. So this is a mobile site, as you can see, and it has some nice menu, it's a jQuery mobile site, it has some images, and you can see it's, from the admin interface, it's just a normal Drupal site with some mobile theme. And it has, at this moment, nothing to do with kind of native features, PhoneGap, or anything like that. But now, if you want to export it, it's actually quite easy with your mobile app generator, we just select it from the menu, and then we can set up a path. At this point, I just set a path of sites all export, because I really want to make sure I can use it in my Git repository and edit there. But you are, of course, free to use any file scheme that Drupal supports. So you can even export it directly to S3 and run it from there. Can also help with performance. And then we have a Regex for saving those directorates, because it was the case that some modules were just not advertising all of the images and JS. And last but not least, we select the main menu, we save our configuration, and we generate the mobile app. Selecting the menu is important because we really are only exporting what is in that menu. And all other pages are kind of going to an offline page that says, if you want to see, just go to our normal website. So it's generated quite quick, and here it is. As I said, not even five minutes. You can start it up, and there you go. And as you can see from the header at the top, it's just static HTML pages, which are all exported now and would work nicely with PhoneGap. So we have those images in. It has detected all the assets of the web page, and kind of that's it. And what I would like to encourage you is, you've got homework now. You've all got to try this out at home. So the next part is how to actually get this into PhoneGap, and this is where I give back to Jeff. So with PhoneGap, you have a couple different choices for actually creating your app. If you're on a Mac, you can create apps for iOS, the iPhone, the iPad. You'll need to install Xcode, which is Apple's developer tools. Those are actually free right now on the Mac App Store, but you'll need a really recent Mac with a really recent version of the Mac OS X. And they're constantly pushing that Xcode stuff out to the latest and greatest Mac. So iPhone and iPad development though is only from a Mac. If you have a Windows or a Linux or a Mac, you can actually develop apps for Android using Eclipse and the Android SDK. You'll need to get those set up. The best place to do that is to just go to Google's Android site and click install the Android SDK and they have some pretty good directions in there. Once you have your development environment set up, you actually need to download PhoneGap and they have an excellent set of installation instructions no matter whether you're developing for Android or for iOS or for Windows Phone. They actually did a really good job of making that easy. And so go to PhoneGap.com, just follow their directions, they'll get you totally set up. And then all you need to do is create a new PhoneGap project for iPhone or Android from that development tool and you'll pretty much have a PhoneGap project up and running and that's an app right there, out of the box. So let me just show you a really quick PhoneGap project. So to create a new PhoneGap project, all I would need to do from this Xcode and this is that Apple developer tool I was talking to you about, about how to create iPhone and iPad. Just go to New Project, pick PhoneGap, click Next, we'll call it Drupal is awesome, save it. And that's a PhoneGap project. I already have one set up for DrupalCon right here and what I can do is show you what Fabian's mobile app generator actually looks like when you're running on an iPhone. And so there's that exact same mobile site that he just showed you how to create and now it's actually running as an iPhone app. This little iPhone simulator here is actually just the same as your iPhone that you're holding in your hand and so you can see how it works. I can actually take that same one and turn it into an iPad app and there's the exact same site but now running on an iPad instead of an iPhone because we set this up with jQuery mobile that actually takes care of the whole MI and iPad, MI and iPhone. You actually have both in one app in one site that was just sort of created for you in five minutes. So I'm gonna go back to presentation. And there's even a little more. As Jeff already said, some people might not be on a Mac and they still want to try to create iPhone apps or iPad apps and there's actually a solution for that. What not too many people now is there's PhoneGap build. It's the PhoneGap cloud, build.phonegap.com and in this case, you would just upload your generated WWW folder via Git to the PhoneGap cloud and it's actually completely free for public apps. So if you're kind of in a sector where you can publish everything and have everyone have access to the data directly, you can use it for free. If you use it commercial, you got one app free, the rest costs. The nice thing about the cloud is that it allows you to build directly for seven platforms which saves really much time because you might not have the BlackBerry environment, the Windows Mobile environment, the whatever new mobile solution is coming out tomorrow environment. So the next part we want to talk about is how you can now actually use PhoneGap with the native features. And Jeff will now show an example of how good this works with the camera. So one of the things that I've always heard people talk to me about when they want to talk about PhoneGap and Drupal is that they want to take a picture on their iPhone and then upload it to their Drupal site. And that's actually really easy with just JavaScript and PhoneGap. So you don't need to learn any crazy languages. You don't need to get really deep into image processing or something like that. It's actually just a couple lines of JavaScript that basically came right off the PhoneGap documentation. So here's the JavaScript you need to basically take a picture with the phone and then just put it into an HDL image inside your mobile web. So it actually makes things like taking a picture really straightforward using just straight up JavaScript. Another thing that you might need is especially with having online and offline content the ability to know if a device is actually connected or if you're at offline. And again, PhoneGap shows how easy this is to use because you can, you just add an event listener via the normal JavaScript API and on online function and here we are just setting up a little alert. There's also more functions in the PhoneGap API that's pretty well documented and easy to understand with some basic JavaScript knowledge where you can, for example, detect if you're on a wireless or if you're on a 3G or just on a mobile data plan and whatever the device is really giving to PhoneGap but especially the difference between being on a wireless or where you could show a movie and being just on a slow connection where you better should not, can be quite beneficial. Next we want to show you some tricks of how to develop your PhoneGap apps. The first thing to think here is do really not try to develop on a device. You will have to do some code, click the button and you have to wait, then you check it and you don't really have that good development and debugging tools as you have in the web browser. So if you are especially developing for iPhone and Android use any web kit based browser that would be Chrome or Safari and if you use one of those two, it usually will be that your app will on the phone be exactly looking like in the browser. So that's definitely a trick I can give you. And also do the testing and debugging in the browser. It says the JavaScript error and you're putting it into the iPhone simulator. You might see it, but it might be a little more difficult to debug. The other thing is now I said you should really test on a browser, but afterwards you need to test on real devices. In my experience, it sometimes came up that it was all working nicely and shiny in the browser and then you were testing it on a real device and then you were going with your phone to somewhere else where you were not in your home network and suddenly it broke. So it's really as important to make sure that you do a real test before going to the market because users will notice and they will be the first to complain with the stars. So and actually when I built my first phone gap app I didn't have an iPhone. So what I did was I did go to some store and I was asking them, hey there, could I just check out this app for a moment? It worked. Another thing is, especially with phone gap clients could get kind of the idea of, oh, we will just build the app for all of those seven platforms, directly and everything. But especially with BlackBerry, I was in another store and it didn't work. So you need to test extra for those platforms and if your client really wants to do that, it might be beneficial, or if you want to do it, it might be beneficial to just get the BlackBerry emulator. The same is true for Windows Mobile because it has not the same WebKit engine so rendering could be different, JavaScript could be different and they are all of those little quirks that can come up here. And Jeff here has something really nice. He has a Drupal plugin for phone gap. So if you want to dive a little bit deeper into phone gap and you want to talk to Drupal using the Drupal iOS SDK, I wrote a little plugin that really is just a bridge between the Drupal iOS SDK and phone gap to let you use JavaScript to access some Drupal services. Your nodes, your views, your comments, whatever. That's all up on that GitHub there and there's also a cool little simple project that lets you use the camera and jQuery mobile to upload pictures up to a Drupal site. So check that out if you want. Another thing that is really, really handy when developing now you want to test with a real device is a little trick I'm using, especially when I'm using the mobile app generator. So in phone gap you have a setting that's called, especially for the iPhone SDK, it's called external host. And this really means it's a white list where you can specify what kind of hosts are white listed. And those white listed hosts won't start up a new browser, but actually it would start in the same web kit. And now what you can do, if you're kind of developing your site locally on the local host, you can just add this function on device ready with location.arrich, HREP, and you can just forward to your mobile app. And in that way, you don't have to rebuild your app again and again, but you can just change it in your web browser and in your normal environment and then you can even test it on the SDK again, again, again. And really with phone gap and especially also the mobile app generator that we have introduced here today, it's really important that you play around. As I said, this is your home book. It can be really fun, you know, this experience when your app finally is running on this phone and you can download it from the market and user comments are coming in and the reviews are coming in and you are like, wow, that's great. Or think about your favorite restaurant or so. They might already have a website, they might already have a mobile site, but now you could provide them with a little effort and just creating this folder with some mobile app generator. You could provide them with a mobile app as well. And I heard more and more that just local restaurants, local businesses, they all want an app. So this is really an opportunity here where you can do really fun stuff and nice things. We are already at the questions part. We could also demo a little more. That would be also a possibility. But I think let's start with questions. Well, let me ask a real simple question. Could you drill in a little bit on the first part where you built your site in Drupal and then generated HTML and so on? But you used a mobile theme, because I haven't done this before, are there mobile themes available on Drupal.org? How much do you need to know of Jake Berry to do this? That's a really, really great question. And actually I was shocked because I was preparing the presentation and I was saying, okay, I'll just choose any of the available mobile themes on Drupal.org. And I was finding three that kind of looked like something from the start on. And I didn't have to put in a lot of effort to have it look like a mobile web application. One of them was just a theme looking mobile, but not really application-like. The other one is the Nokia theme that's just available for Drupal 6. So really what in the end came out is this is a Jake Berry mobile theme. It has some little bugs. I had to fix, I think, three bugs to prepare for the presentation. I put them later in into the issue queue, so that should be taken care of and you can really use it. And the other thing I did install is a Jake Berry mobile UI, but fixing those bugs and putting in the Jake Berry mobile UI and enabling the theme was basically everything I did to just have it looking like this. Before it was garland with the menu at the top and the notes below, I enabled the theme and it was looking like this. And yeah, I hope this answers the question. Hello? Do you guys support speech recognition on this or any plans for it? So the question was about speech recognition. As far as I know, you would have to support that with some sort of native library. I don't think that iOS comes with a good one if it comes with one. I don't know about Android, but it's certainly not part of the standard phone gap API. From what I understand, you have to license some very expensive libraries to get sort of like Siri-type speech recognition into your app. Thanks. Hi. My question is about analytics. Is there a connection to Google Analytics or I don't know what's in the iOS? So that actually raises an interesting point. As I was doing some research for the Drupal mobile guide as part of the Drupal 8 mobile initiative, there's actually a special plug-in for Google Analytics for Jake Berry mobile to make sure that when users hit the pages because everything's through Ajax that a Google Analytics gets recorded. So you'll actually get, if you have a Google Analytics module, then it should be recorded. There's other ways to get analytics from a native app, but that probably makes sense to integrate everything with Google Analytics for your desktop web and your mobile web and your phone gap app. Does that answer your question? Two questions about offline content. Sure. First is, can I download just a subset based on some criteria? That's exactly what a mobile app generator is doing. It's only exporting a subset and you define the subset by defining the menu. In this case, I just had the main menu and this was actually also the menu you were seeing, but you could also define a hidden menu with lots more content and it really is exporting everything you specify and what's not exported is going to an offline page which you define as an offline alias, for example, and then the user hits this offline page and they can write something like, well, this page is not available in the app, but if you want to know more, you can visit our web presence here and get more information. By content, can that be a content type of various sorts? Could you repeat, I didn't get? Could the content download be a content type like an article, for example? At the moment, the content is supporting nodes, but it would be very easy to also support other entities. For ease of use, it was made with nodes, but it could be easily extended, but it's not content type. We had an article there, we had a page there. You can specify whatever criteria you want. You just have to create the menu. My second question is, if I make a change offline, does it sync back to the main site? No, you shouldn't do changes offline. You should do changes online and to regenerate your app. In that case, the workflow would be working like this. You would just regenerate it into the same directory. It would override with the new data, and then what you would do is kind of, you would drag this folder again into PhoneGap or use your version control system to do it. But if you want to have online content, kind of, then you would use services here. Three very quick things. One, this was an awesome presentation. Thank you guys. Excuse me. Two, the menu position module that John Albin did would be really cool if it was integrated with this so that I could say all articles under this menu position would get converted over to mobile. Just a thought. That's a very good idea. If I do menu three, would I get, is it hooked in there? I'm not sure on the details, but I think it's called menu position. I know the module. I'm just thinking about where it hooks in, kind of, okay, that's a little technical for beginner. But yeah, that's a very great idea because that would allow a lot more flexibility. You could put a taxonomy term on anything, call it mobile, and then. Definitely, and then it would kind of auto generate your menu, which would give it a lot more flexibility. But yeah, I believe it should work. And number three, how does it handle user sessions? Can I have, for example, people log in or create an account using this system? In general, the exported pages would not kind of be online, but PhoneGap in itself, you can log in very easily. You want to talk a little about that because you have said. Sure, actually, so the way you would do that is to use the services API, and you can actually use System Connect, user log in, user log out, and then you'll have an authenticated session. Be sure in services to enable session authentication for your endpoint or it'll get these annoying errors. But it's definitely very, very possible, and that's actually how that camera app works on my GitHub is, you know, you log in as Joe Schmo or whatever. Hi guys, nice presentation, I echo that. I'm not a coder here, but the developer I work with developed an application, it's in a mobile application right now that it's using, it's a content type with views to like generate restaurants. You know, you could set like Asian restaurant or whatever in it, could that be exported? I mean, could that be brought in? And then I know, I mean, how's the data updated? When they go and update it something, you know, one of the items in Drupal, like a new restaurant or change a phone number or something, how would that happen? Yeah, you always, the point is, and that's kind of the nice thing about it, you build your app kind of in the way you want. So if you have a block where you say this one should always be logged via Ajax, you could use any of the Ajax load modules, and the mobile app generator would just generate your app, but the JavaScript for reloading the Ajax would be there, so it would actually try to load the block, and you could for example, just have a placeholder in there or the older information, just have it in there, then you use Ajax load or Ajax block or what is called or just some custom JavaScript code to actually reload the view, and then you could kind of have an app that's kind of, if it's online, has newer information than if it's offline, but usually in this case, kind of how apps would be updated would be through the app store. So we are also working on the approach that kind of you do an update online and the app is kind of downloading those updates, but it has some tricky bits, like for example, sync of a view, which is on one page and on the other as well, and then you have to update all of the pages, which could be a rather huge download. Thank you. I guess along the same line of what we just talked about, to create an experience like we have of the DrupalCon app where it has the sessions and knows what sessions there are and then you can press refresh. Is that like something that your module could support? It doesn't sound like it would be like a SQL store, local, something. You're mainly talking about kind of online content or synchronizing content. There was kind of also what I was going in the previous question, but it's a little different here. The DrupalCon app, as far as I've used it, you're not updating it over the app store, but it's kind of downloading the data, which you could do and that's supported. I have such running in kind of another approach, which is similar to the mobile app generator and will be combined with it later, but not just now, is you could, for example, do the following. You just put it on S3 like we've seen as that's possible and then you add a little code to your JavaScript. With PhoneGap, you have a file API. So what you could do is kind of, you could create a folder where you are downloading all the stuff and when you're sure that you have all the files, you just switch over. But kind of, if you just want to update information, kind of just reload things, I think it might be kind of better to use services for that at that point. Yeah, that makes sense. The second question I had was, does your module support the ability to create a different experience by serving two different themes, one for the iPhone, one for the iPad, for example? Or how would you do that? That kind of depends. Okay. If you're using a responsive design, for sure, because kind of the same rules to apply, you get kind of the responsive device with features and their Jaguar mobile, of course, also helps completely. But if you're talking like, if the user agent is an iPad, then you get this side. If the user agent is a mobile side, then you get this side. But what you could do is kind of, okay, that's still manual, but it's two clicks. You change the theme to mobile and you change the folder to WWI phone, export, change the theme to iPhone, WWI iPad, export, and you just create two separate apps. Awesome, thank you. In the case of, in the case of, say, user-generated data, sounds like PhoneGap is best if data is pushed from Drupal to the user. But in terms of, say, the user-generated data, account statuses, or, say, geolocation check-ins, is PhoneGap better, or is it an effective way to go over native? And would that something be done through, say, services and APIs? So PhoneGap itself lets you use services. You can do pretty much anything you want in PhoneGap in terms of connecting to an outside system. So if you wanted to do check-ins or create comments or something like that, you could absolutely do that. You would just simply create either an HTML form that talked directly to Drupal. I mean, that's the easiest way to do it, is actually in PhoneGap, say, hey, you know what? I need a live connection anyway to get a comment. Throw up a mobile-themed ad comment, ad node page on your Drupal site. You don't have to write extra JavaScript. You don't do anything extra. You've kind of got that right there. You've got everything built in. That's probably the easiest way to do it. The other way to do it is to make a JavaScript call and basically back up to services and say, hey, services, here's a new comment for this node or what have you. Does that answer your question? Yes, thank you. I also would like to kind of extend a little in regards to the mobile app generator. What's nice about just exporting a subset is that, for example, before we just removed it, but before you had this ad new comment on the article content type, so what you could do now is you could have the same app that's running in PhoneGap online and you could just switch the user over from his offline experience to an online experience by letting him logging in, posting commands and just having kind of as a mobile app generator is not touching the URLs, for example, for posting commands, that would still work and you could would kind of post it there and then we would get the response and then the only thing kind of you need to do is kind of to get back to the offline part. But I think on the online part that would be just some lines of JavaScript code or even a form state, but there would be kind of future back, but it's interesting. Thank you gentlemen, you've given us all lots of homework. Thank you. Great presentation, I love the battle at the start. My question is you mentioned titanium as a hybrid at the top. Can you talk about advantages and disadvantages of that versus PhoneGap? I can't. So I'm not a titanium developer, but I am a native developer, so I usually develop in Objective-C myself. Titanium is a great solution if it supports your needs in advance. So you have to do a little bit more research to make sure that what you're trying to do is easily done in titanium, but the big advantage of titanium is you get one code base for both iOS and Android. The downside is that while it does compile to a native app, you don't necessarily get every native feature right away when Apple releases it, but I know that the company behind titanium is putting a lot more effort into making that development really easy for people. For those of you who aren't aware of what titanium is, it's a way of creating iOS and Android apps in pure JavaScript, talking to the titanium API, and then that actually creates an iPhone app or an Android app from one JavaScript code base. So does that kind of answer your question? It's a very different approach from PhoneGap. Yeah, thanks. Would the mobile app generator support web forms through the export, or would you have to do something extra to get that submission to post to the site? As I said, if you have a web form is a content type, so yes, at the moment, I haven't tried it. Short answer, long answer. I believe what would happen kind of is that the site would be exported, but that the post URL was not changed, so it would still connect to from where you kind of generate the app. And if you're not generating from local host, but kind of from your life side, this means which will still be fast because it's all online on the web server that's done the creation of the app, which means that probably it would just post to the website, but the problem is you are then online. You would still need to put your online URL into the white list. And kind of the same answer as before, you would need to add some, just some custom JavaScript on the submission succeed page to just get the user back to an offline submission succeed page. So that should be quite easy to do, especially with my form. First, I want to say thanks for releasing the module. That's an awesome start. That's great. So I want to give you this. Two specific questions I've been starting to develop with this stuff, and maybe this is future development. Look into, have you done anything with ghost clicks and using the A object tab tags versus like a different tag and replacing links? I didn't forget the question quite. Have you heard of what's called ghost clicks when you're developing with PhoneGap? Nope. Oh, it has to do with the browser doing something three to milliseconds after you click because they're waiting to see if you do a second click like a double tap versus a single tap. Mm-hmm. So I was just curious if you'd done anything to replace the AHA ref tags with something else. Actually, this is taken care of by mobile frameworks. This is normally nothing to do with PhoneGap. I know of the problem, but JQTouch, JQuery Mobile, CentralTouch, they kind of all have solutions for that for replacing the click event with the touch event. That's basically everything you need to do to kind of get this to work in that. In the PhoneGap, kind of for exporting things, I'm using an approach very similar to the CDN module and Boost modules that were kind of the parents of the idea for doing that and for kind of getting everything out plus some dirty tricks. So a real quick one. So I went to the project page and the project is up there, but there don't seem to be any releases published yet? I pushed the release to day morning. I was under the impression that a release, if I pushed it, is kind of coming up on the next corn run, but what you can do to check it out already is you can hit the revision tab and you can just check out the 7x branch. It's still telling me no release is available, but we'll find it. Yeah, anyone find a webmaster of Drupal and he can push the release out? Do you know offhand whether PhoneGap supports access to the calendar on the phone? Take a look at the matrix, right? I didn't see anything listed for calendar on the matrix. That's what I was asking. I think you're correct. It is not supported and that's probably simply because the vendors themselves don't have that as one of the things they provide access to. So it's not really PhoneGap's fault. If I'm writing a regular iPhone app, I probably don't have access to that either. If that helps, answer your question. Okay, thanks. And I think we have time for one more question and we have, here's the lucky... It's a super quick one, I think. I just installed it and used it and it worked great. That's fantastic. Wow, great. Does it only publish the pages under the menu item that you specify on the config screen to actual flat HTML files? Does that make sense? Yes. On the export file, like I just had an empty sandbox, there was only index. So do I need to add menu items to that parent menu item to get them to publish to flat files on the export? Everything you need to... Could you repeat the question a little? What I had in the menu is I had the front page in there. So it could be if you're not having the front page in the menu that it does not work. That might be a possibility. I just ran into Vell and it made a bunch of nodes without menu entries and they didn't export out as flat files. Is that because they didn't have menu entries? Yes. It'll only export pages that exist in the menu. Yes, but as I'm quite dumb about the menu, it could be because I'm not checking the hidden flag or so that you can just hide the entries in the menu. And as the other person said, it might work with menu location and if it doesn't work yet, it might be very easy to implement just to have it work with taxonomy or whatever. But really, there's just one function that's kind of, it's three lines of code that's doing this exporting via menu and it could be easily extended. Contributions are welcome, of course. Well, it works great. Thanks a lot. So thanks a lot for attending our presentation. It was a great Q&A session. I'm Fabian Franz from TreloN. You can follow my posts on TreloN.com slash blog or on GitHub, Fabian Franz, Twitter at Fabian Franz. Same basically for me. You can follow me at JeffLinwood.com or GitHub, JeffLinwood or Twitter, JeffLinwood or pretty much anything else, JeffLinwood. Find me there. Yeah, and I want to thank the company TreloN for really sponsoring development of the mobile app generator. Please vote on the session for the mobile tournament 2012.