Discovr
  • Features
  • divider
  • About
  • divider
  • Blog
  • divider
  • Contact


  • 2010-08-30

    KIST partners with the Korea Tourism Organization to bring Discovr Korea

    KIST partners with the Korea Tourism Organization to bring Discovr Korea

    What only started as a research project not more than a year ago is now shaping up to become one of the best travel apps of 2010 and today we are happy to announce our first content partnership here in Korea.

    The Korea Tourism Organization (KTO) was first established in 1962 as a government-invested corporation responsible for the Korean Tourism industry and since then it’s been concentrated primarily on the promotion of Korea as a tourist destination and aims to attract foreign tourists. 

    Through this partnership both the Korea Institute of Science and Technology (KIST) and the Tourism Organization agreed to collaborate in the exploration of new forms of services and applications targeted at improving the experience of travelers visiting the country. Discovr Korea will be the first application to take advantage of this agreement and will become part of KTO’s Visit Korea Year 2010/2012 initiative.

    Discovr Korea will make its debut to the AppStore and the Android Market later this fall and just in time for Seoul’s G20 Summit, becoming the first mobile guide to be released with the Discovr Places signature. A platform that integrates curated travel media with real time information from social services like Foursquare, Facebook and others, meant for travelers to access and share information in a whole new way.

    Stay tuned as our launch date is just around the corner.

    PS: you can find more photos from the signing event in our Flickr site.

    Posted by: Gilbert Corrales

  • 2010-05-28

    Here at Discovr we are focused on studying the effect that social media has in tourism throughout its phases: before, during and after the trip has finished.

    We are strong believers that as the social graph keeps extending and we share more and more within it, a new era of social augmented experiences is set to be put in motion; thus, improving the way we go with our daily activities by better informing our actions based on other people’s experiences.

    The video above by Jer Thorp is a potential example of this.

    I was discussing H1N1 with a bioinformatics friend of mine last weekend, and we ended up talking about ways that epidemiologists model transmission of disease. I wondered how some of the information that is shared voluntarily on social networks might be used to build useful models of various kinds.

    Never before has the world of communication in mass been so prolific as it’s today and with the right set of questions and a few creatives ways to harness social media to get some answers, we soon will be looking to a universal cognition in the wild. 

    We are no longer passive observers in the history of the world… each one of us have become active characters on how the future can be changed today.

    For more info on how this project came to be check out Jer’s blog post and his views on open science.

    Posted by: Gilbert Corrales.

  • 2010-04-13

    How to design a GWT Layout that Scrolls

    In our previous post we showed you three different ways you can follow to implement your app’s layout using GWT. For this post, we would like to make some emphasis in a layout that has shown to be the trickiest of all: a scrollable layout.

    While DockLayoutPanel is Google’s new preferred way to start an app layout, we have found that there are some limitations in the way the code is generated (specially since you have to combine it with a RootLayoutPanel) and this might not make it a fit for your project.

    DockLayoutPanel case study: Google Wave

    On last year Google I|O Conference, one of the big announcements -other than Google Wave itself- was that Wave was been built using Google Web Toolkit 2.0 and that one of the most powerful features they took advantage of was the new layout system, these new widgets enabled them to load the layout much faster than before and all of this thanks to the use CSS behind the scenes.

    The way Google went to layout their new service was thru the use of DockLayoutPanel, now you are probably wondering… How do you know that? Let us show it for you:

    Here it is a screenshot of my Google Wave’s account in a “normal” size window:

    GWave in a "normal" state

    Now, the way that DockLayoutPanel works (and as a result of it’s parent the RootLayoutPanel) is that on page load it calculates the dimensions of its components based on the size of the window that will display it. Let’s resize a bit the page to see what we mean:

    GWave in a small size

    As you can see, the browser layout rearranges itself to fit as much as it can but a lot of stuff remain off the window; when I try to create a new wave I don’t even have enough space to see the text that I’m writing and I can hardly see the waves that I have in my inbox, now just imagine what if I had lots of windows and I would like to resize Google Wave to its a minimum size:

    GWave in a minimum size

    Don’t get us wrong, we are not saying that Google Wave is built in the wrong way. Despite that, we think the new layout system was meant for full browser experiences (read apps) and probably not meant for typical document-like implementations that scrolls (unless you want to go in and take care of that yourself, see ResizeComposite).

    If you come to think of it Google Wave is not just another website, Wave was built as any desktop app out there and for that like any other of this kind you need enough real state to work with; at least that’s what how we have come to think of it.

    Now, What if I want a normal web layout that scrolls?

    So what if you just want to build a typical web layout that scroll when resized or when the content grows out of the tipical view. We struggle thru this question and after some testing we came to a simple solution: Add a ScrollPanel at the top and, for our particular case, enter a VerticalPanel within it, this makes the layout work even in the smallest of the windows. 

    GWT ScrollPanel in action

    The following is a sample UiBinder that shows what we mean:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder
    xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>
    <ui:style>
    … 
    </ui:style>
    <gwt:ScrollPanel>
    <gwt:VerticalPanel>
    <gwt:Label>Header</gwt:Label>
    <gwt:Label>
    … Content ...
    </gwt:Label> 
    <gwt:Label>Footer</gwt:Label>
    </gwt:VerticalPanel>
    </gwt:ScrollPanel>
    </ui:UiBinder>

    That was easy right?

    You can also come to the same result by just using

    RootPanel.get().add(new VerticalPanel());

    instead of using RootLayoutPanel and removing the ScrollPanel altogether from the UiBinder, but in our case it proved that using it helped us in other caveats of our implementation.

    Update: Now, just to clarify we would like to point out that this solution will work as long as you stick to GWT’s Basic Panels inside the ScrollPanel - at least if what you want is the full page to scroll instead of just portions of the layout. This is because the way the new layout panels were implemented prohibit this implementation to work as you will expect, at least this is what we have found thru our experiments. We hope Google will fix this in the future as there is a lot to be gained using CSS-only implementations.

    We hope this will get you from wherever you are to happier lands and hopefully to happy programming!

    Posted by Helga Alvarez

  • Layout your App using GWT 2.0 the way you want it

    During the last few days we have been working on the base layout for our Discovr Administrator App. We have chosen GWT + AppEngine as our implementation platform and while getting things to work we found a few pitfalls implementing a flawless layout using GWT 2.0 and their new UiBinder approach.

    On this post we wanted to share some of our experiences and will show you a couple of ways how you can use GWT + UiBinder to implement some basic web layouts.

    First thing first

    While Google suggests the use of DockLayoutPanel as the starting point for your app layout there are other ways you can follow, coming up next we will walk you thru a couple other options we played with in order to accomplish the following layout:

    Basic layout using GWT

    Disclaimer: before we start we’d like you to know that for this implementation we’ll be using the RootLayoutPanel as our root container but rest assure this is NOT the only widget you can use as the root for your application; a more barebones solution is the use of the Document, for a sample of that you can check Google’s tutorial on the use of UiBinder.

    Using DockLayoutPanel to build a basic layout

    The DockLayoutPanel is Google’s preferred way to start an app layout, while powerful this solution might not be what you need. A DockLayoutPanel is a panel that places their children docked depending on the position that you indicate and expects your layout to take over the whole window.

    Here it is a sample code of what you the UiBinder declaration looks like:

      
    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder
      xmlns:ui='urn:ui:com.google.gwt.uibinder'
      xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>
      	<ui:style>
      		…
      	</ui:style>
      	<gwt:DockLayoutPanel unit="EM">
      		<gwt:north size="5">
      			<gwt:Label>Header</gwt:Label>
      		</gwt:north>
      		<gwt:center>
      			<gwt:Label>
      				… 
    	  		</gwt:Label>	
      		</gwt:center>
      		<gwt:south size="8">
      			<gwt:Label>Footer</gwt:Label>
      		</gwt:south>
      	</gwt:DockLayoutPanel> 
      </ui:UiBinder>
    
    

    … And for your the companion Java Class:

    interface Binder extends UiBinder { }
    
    	private static final Binder binder = GWT.create(Binder.class);
    	
    	public void onModuleLoad() {
    		DockLayoutPanel basicLayout = binder.createAndBindUi(this);
    	    RootLayoutPanel root = RootLayoutPanel.get();
    		root.add(basicLayout);
    		
    	}
    

    Going this way will get you somewhere similar to:

    DockLayoutPanel

    Now go ahead and look up for the code that GWT generates behind the scenes:

    • The <DockLayoutPanel> is translated to a <div>
    • And every child of this widget it’s translated to a <div> also

    As you can see the generated code consists of a couple of divs that sets overflow-x and overflow-y in hidden, basically that tell the browser your page will not have vertical scroll nor horizontal scroll and anything that goes beyond this borders should be hidden.

    On the other hand, the size that you specify for the center container is set thru the top and bottom’s property. Why is that? When you specify your center child (aka content in our case) GWT sets a top property that it is the sum of whatever is above the child and then a bottom property that defines the size of the south child therefore making your layout to take the whole window. Let’s see it:

    Properties of a DockLayoutPanel

    So, When should I use this?

    You may want to use a DockLayoutPanel when you know that your application will use all of the real state of the Window and the components will flow according to the size of the browser’s window, an example of this will be Google Wave, just keep in mind you will like to use some ScrollPanels inside in case your content grows. 

    Important to note also is that if you are going to use DockLayoutPanel you will have to use RootLayoutPanel as your root container as this is a pre-condition for this widget.

    Source code available: DLPanel 

    Using a VerticalPanel within a ScrollPanel

    This is a simple solution that you could use for your layout if what you want is a more typical webpage layout.

    Let’s understand these panels:

    • ScrollPanel: it’s a simple panel that adds a scroll in your content. Please be sure to add only one widget inside of it as it extends SimplePanel.
    • VerticalPanel: as the ScrollPanel, it’s a simple panel but here you can layout your widgets vertically into a single column.

    Here it is a sample code of what your UiBinder should look like:

      		
      <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder
      xmlns:ui='urn:ui:com.google.gwt.uibinder'
      xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>
      	<ui:style>
      	… 
      	</ui:style>
    	<gwt:ScrollPanel>
      		<gwt:VerticalPanel>
      			<gwt:Label>Header</gwt:Label>
      			<gwt:Label>
      				… 
    	  		</gwt:Label>	
    	  		<gwt:Label>Footer</gwt:Label>
      		</gwt:VerticalPanel>
      	</gwt:ScrollPanel>
      </ui:UiBinder>		
      	
    

    … And for your the companion Java Class:

    interface Binder extends UiBinder { }
    	private static final Binder binder = GWT.create(Binder.class);
    	
    	public void onModuleLoad() {
    		ScrollPanel basicLayout =  binder.createAndBindUi(this);
    	    RootLayoutPanel root = RootLayoutPanel.get();
    		root.add(basicLayout);
    		
    	}
    

    Finally this is how it will look:

    Layout using VerticalPanel within a ScrollPanel

    Notice that if you resize your browser or the content grows outside the boundaries of the window you will see scroll bars, letting you access the rest of the content:

    GWT ScrollPanel in action

    As you can see, the footer is not been set to be always visible in the bottom of the page… This is one of the cons of this solution. However, you can take a look here for a solution to it.

    Now, let’s take a look at the code that GWT generates:

    • The <ScrollPanel> is translated to a  <div>
    • The <VerticalPanel> is translated to a <table>
    • What it is inside the <VerticalPanel> depends on the widget that you use

    Update: You can also come to the same result by just using

    RootPanel.get().add(new VerticalPanel());

    instead of using RootLayoutPanel and removing the ScrollPanel altogether from the UIBinder, but in our case it proved that using it helped us in other caveats of our implementation.

    So, when should I use this?

    You may want to use this prefixed solution when you know that you content may grow a bit and you need a scroll to display all of it, this is pretty much the normal behavior of a web page.

    Source code available: VScrollPanel

    Making it your own : HTMLPanel

    Last but not least, this solution will need more work than the others but sometimes might come handy.

    HTMLPanel is a div based panel where you can add plain HTML markup. While this solution needs a specific position for the elements that you want to show, you have more freedom to build your layout. 

    A drawback is that there are some useful CSS hacks for compatibility browsers that GWT automatically provides when you use their own panels. If you use plain HTML, is your responsibility to hack the elements that you will put inside the widget to be compatible for all browsers.

    So, When should I use this?

    When the layout that you are building needs more flexibility to position elements or you already have the layout yourself (useful when integrating with legacy code).

    For this solution we are not going to provide source code, since it is a layout based on plain old HTML DOM elements.

    Last important points

    So here we are with some tips to help you start up the base layout for your app, but before we go we want to give you a couple of extra suggestions to making it right:

    • Create a wireframe and discuss pros and cons about the implementation with your mates.
    • Think about the panels and try those which you see a fit with the project that you are developing, but remain open to change them, GWT is prompt to surprise you when you never expect it.
    • Use UIBinder and GWT’s layout panels whenever possible. Remember if you use plain HTML you will have to position the elements yourself and account for them in all browsers.
    • Last but not least, test your layout in all major browsers and don’t forget to try resizing your window randomly and see how your app looks on it, you never know what you will find under these scenarios.

    GWT goes a long way removing much of the hard parts when developing web applications but remember this is still web stuff you are dealing with so TEST as much as you can and don’t leave any scenario out… you know Murphy!

    Posted by Helga Alvarez

  • We started our journey about a year ago as a Research effort from the Korea Institute of Science and Technology and what initially seemed as a interesting exploration in the use of web semantics in tourism is now taking shape as a service of its own.
Today we open our doors to the public and while we expect to share insights from how we are getting this to the hands of thousands of toursits around the world, we also will be sharing our experiences in how we are building it.
It&#8217;s in the core values of our team that we ought to share our experience in order to excel in our practice&#8230; and so we hope you will gain something in the journey ahead.
So come join us and let us be the perfect companion to your travel!
Happy tripping everyone!
Posted by Gilbert Corrales
Photo: NUCOA MARGERINE, KIDS ON SWING (via George Eastman House)

    We started our journey about a year ago as a Research effort from the Korea Institute of Science and Technology and what initially seemed as a interesting exploration in the use of web semantics in tourism is now taking shape as a service of its own.

    Today we open our doors to the public and while we expect to share insights from how we are getting this to the hands of thousands of toursits around the world, we also will be sharing our experiences in how we are building it.

    It’s in the core values of our team that we ought to share our experience in order to excel in our practice… and so we hope you will gain something in the journey ahead.

    So come join us and let us be the perfect companion to your travel!

    Happy tripping everyone!

    Posted by Gilbert Corrales

    Photo: NUCOA MARGERINE, KIDS ON SWING (via George Eastman House)

  • 2010-04-12

    Off we go!

    Howdy world!

    As the summer approaches steady and sometimes looks like it will skip the spring all together, we are gearing up to launch our Discovr services very soon.

    Whether you are a fierce traveler that like to make trips your own and is always eager to explore or maybe you just happen to have taken some time off to go out and relax, we are building Discovr to be your perfect travel companion.

    Coming this summer to the App Store we will start by providing tourists in Korea with an iPhone and iPod Touch companion that will let them explore, discover and share new places just as they travel.

    Support for new countries and devices will come soon after…

    So stay tuned as we are nearing our big opening.

    Cheers!

    - The Discovr Team.

Copyright © 2009-2010 Discovr. All rights reserved.
  • Privacy Statement
  • |
  • Terms
  • |
  • Privacy Policy
Find Us on: