Friday, March 13, 2015
Apps Script Dashboard and Quotas
Apps Script developers have consistently expressed the need to monitor the health of various Apps Script services. Additionally, at every forum, event, hackathon or hangout, we have heard you express a need to know and understand the quota limits in Apps Script.
Apps Script Dashboard is born!
We heard your message loud and clear, so we started working on a dashboard for Apps Script. Today, we are launching the Google Apps Script Dashboard. This experimental dashboard can be used to monitor the health of 10 major services. It also provides a detailed view into the quota restrictions in Apps Script.

Features of the Apps Script Dashboard
- The dashboard offers a view into past and present states of 10 major Apps Script services. The past view goes back one week.
- Each Apps Script service has three states on the dashboard: Normal Service, Known Issues and Investigating.
- The Known Issues state signals that we know about the issues in that service and are working to fix them.
- Quotas are displayed for three different types of user accounts: Consumer accounts (for example @gmail.com accounts), Google Apps (free) accounts, and Google Apps for Business, EDU and Government accounts.
Interesting Facts About Quotas
Did you know that consumer accounts (for example @gmail.com accounts) have quota of 1 hour of CPU time per day for executing triggers? Imagine the extent of automation that can happen for each user with triggers. And how about 20,000 calls to any external APIs. Now that packs in a lot of 3rd party integration with the likes of Salesforce.com, Flickr, Twitter and other APIs. So, if you are thinking of building extensions in Google Apps for your product, then don’t forget to leverage the UrlFetch Service which has OAuth built-in. Event managers can create 5,000 calendar events per day and SQL aficionados get 10,000 JDBC calls a day.

Check out the Dashboard for more.
![]() | Saurabh Gupta profile | twitter | blog Saurabh is a Developer Programs Engineer at Google. He works closely with Google Apps Script developers to help them extend Google Apps. Over the last 10 years, he has worked in the financial services industry in different roles. His current mission is to bring automation and collaboration to Google Apps users. |
Tuesday, March 10, 2015
Integrating your Rails application with Google Apps and the Apps Marketplace
In this article you will find a step-by-step guide to integrating your Ruby on Rails application with Google Apps and launching it on the Google Apps Marketplace. The Google Apps Marketplace is a great platform to get new clients, show off our product and integrate Floorplanner with the services Google provides. At the beginning of the summer we tried to launch our application on the Marketplace. We found out that a lot of people were struggling with the existing Rails libraries and the OAuth authorization method, therefore we would like to provide this tutorial to help other developers. I would like to thank DuĊĦan Maliarik for building this implementation with me and finding the solution for using the two-legged OAuth authorization.
1. The initial setup
Before you start programming there is some required setup. You first have to add a new application on the Google Apps Marketplace. You will need a Vendor Profile for this and a Google account. Sign In to the Marketplace with your Google account and go to your Vendor Profile using the link at the top-right of the Marketplace homepage.After you enter some information about your company, there will be a list of your applications called “Listings.” You need to create a new listing to develop and test your application. When you create a new listing, check the box which says “My product may be directly installed into Google Apps domains.” This is necessary if you want the application to have an “Add it Now” button on the listing page, and allows you to add a Manifest to describe the application.
A Manifest describes all the settings of your application, like the name, URL’s and required permissions. Below you can find an example manifest. You will need to change all fields surrounded by brackets [ ].
<?xml version="1.0" encoding="UTF-8" ?>
<ApplicationManifest xmlns="http://schemas.google.com/ApplicationManifest/2009">
<Name>[ApplicationName]</Name>
<Description>[Description]</Description>
<!-- Administrators and users will be sent to this URL for application support -->
<Support>
<!-- URL for application setup as an optional redirect during the install -->
<Link rel="setup" href="[ApplicationSetupUrl]?domain=${DOMAIN_NAME}" />
<!-- URL for application configuration, accessed from the app settings page in the control panel -->
<Link rel="manage" href="[ApplicationAdminUrl]?domain=${DOMAIN_NAME}" />
<!-- URL explaining how customers get support. -->
<Link rel="support" href="[ApplicationHelpUrl]" />
<!-- URL that is displayed to admins during the deletion process, to specify policies such as data retention, how to claim accounts, etc. -->
<Link rel="deletion-policy" href="[ApplicationPolicyUrl]" />
</Support>
<!-- Show this link in Googles universal navigation for all users -->
<Extension id="navLink" type="link">
<Name>[ApplicationName]</Name>
<Url>[ApplicationLoginUrl]?domain=${DOMAIN_NAME}</Url>
<!-- Used APIs -->
<Scope ref="contactFeed"/>
<Scope ref="spreadsheetFeed"/>
<Scope ref="doclistFeed"/>
</Extension>
<!-- Declare our OpenID realm so our app is white listed -->
<Extension id="realm" type="openIdRealm">
<Url>[ApplicationRealm]</Url>
</Extension>
<Scope id="doclistFeed">
<Url>https://docs.google.com/feeds/</Url>
<Reason>[Reason]</Reason>
</Scope>
<Scope id="contactFeed">
<Url>https://www.google.com/m8/feeds/</Url>
<Reason>[Reason]</Reason>
</Scope>
</ApplicationManifest>
You should decide whether you want to create a setup page. During the installation process of the application you will be redirected to the URL you specified in the manifest under “setup”. This is useful for collecting additional information necessary for configuring the app, or setting up a new umbrella account for the company. The umbrella account allows you to use other users of the domain as sub-users. You can also retrieve other information, like the administrators of the domain, the logo of the Google Apps account, or the domain name of the Google Apps account. If you don’t want to redirect customers to your site during the installation process, then just remove the line from your manifest.
2. Rails libraries and OpenID
The code you’re going to use relies on several Rails plugins and gems. The plugins/gems needed for this tutorial are listed below.- OAuth Gem
- Ruby-openid
- Rack-openid
- Ruby-openid-apps-discovery
def login
# The domain needs to be set. For example with params[:domain]
authenticate_with_open_id(params[:domain]),
{ :required => ["http://axschema.org/contact/email"], :return_to => /login}) do |result, identity_url, registration|
if result.successful?
# Succesfully logged in, retrieve email address
email = get_email(registration)
else
# Failed to login
end
end
end
def get_email(registration)
ax_response = OpenID::AX::FetchResponse.from_success_response(
request.env[Rack::OpenID::RESPONSE])
ax_response.data["http://axschema.org/contact/email"].first
end
After reviewing this code sample you can alter it for using it with the setup page. Authenticate with OpenID when a user goes into the setup procedure and redirect them to the actual setup page after they are authenticated.
After your setup page is complete you can add your Google Apps Marketplace listing to your Google Apps account. Note that administrator privileges are necessary to add the application to your Google Apps account. You can add the application from the Vendor Profile when you click on your newly created application. A big blue button will appear on the right side of the listing’s information page. More information on this process can be found on the Creating a Listing page in the Marketplace developer documentation.
3. Using the Google Data APIs
When using the Google Data APIs outside of the Apps Marketplace you have to get access to a user’s data using three-legged OAuth, AuthSub or ClientLogin. These authorization methods require your application to redirect the user to Google’s site to request authorization. Because you’ve already authenticated the user by using OpenID and an administrator has granted authorization to the user’s data when they added your application to their Google Apps domain, you don’t want to use these methods.For the Google Apps Marketplace there is another option-- two-legged OAuth. Two-legged OAuth allows your application to use a single consumer key and secret (available from the Vendor Profile) to access the data for all your customers who have installed the Marketplace app and granted the appropriate permissions. Because the administrators have granted permission on behalf of their users, each user does not need to be prompted individually.
The first thing you should try is to retrieve a contact list of a user. You could use it for auto completion on forms, or you can let users quickly add friends to your application.
CONSUMER_KEY = "Your-consumer-key"
CONSUMER_SECRET = "Your-consumer-secret"
def get_contacts
# Retrieve contacts
email = "user@email.com"
url = "https://www.google.com/m8/feeds/contacts/default/full?xoauth_requestor_id=#{email}"
contacts = gdata_request(url, :get)
end
def gdata_request(url, method, headers = {}, data = "")
uri = URI.parse(url)
# Setting up two-legged-oauth
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET)
oauth_params = {:consumer => consumer, :method => method, :request_uri => uri.to_s}
# Set Net:HTTP connection
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.port == 443)
if method == :post
req = Net::HTTP::Post.new(uri.request_uri)
req.body = data
else
req = Net::HTTP::Get.new(uri.request_uri)
end
# Set authorization header
oauth_helper = OAuth::Client::Helper.new(req, oauth_params)
req.initialize_http_header(headers.merge({Authorization => oauth_helper.header}))
# Execute request
response = http.request(req)
response.body
end
The feature we struggled with the most during the integration of Floorplanner was the two-legged OAuth authorization. There was no documentation available for the gems and it took some attempts to get it right. We turned to the OAuth Playground to find out the differences between our own request and the working request. After numerous tries we found out that we need to specify the HTTP method in order to get it working. It was important to use the Net::HTTP::Post request when sending information and Net::HTTP::Get request when retrieving information. This sounds logical, but it also needed to be done when retrieving the authorization header in the OAuth Client Helper, as well as in the Net HTTP request. Now we have this code, we can generate a request for almost every call in the Google Data API’s.
In the next example, you will use the Google Docs API to send a CSV file to a user’s Google Docs account. You need to do a POST request to the Google Docs feed. The request is almost the same as in the previous example, only you need to add two more headers. One is the Content-Type where you specify the MIME type you want to send. In this case, you’re uploading a CSV file so “text/csv” will do. Another header you need to send is the Slug. This value specifies the name you want for the document in Google Docs. Another way of doing this is adding meta-data to the body of the request. More information on this method can be found in the the Google Docs documentation.
def submit_csv_to_gdocs
email = user@email.com
url = https://docs.google.com/feeds/default/private/full?xoauth_requestor_id=#{email}
# Create new CSV
csv = StringIO.new
CSV::Writer.generate(csv, ,) do |line|
line << ["Example 1", "Example 2"]
end
csv.rewind
# Send request
gdata_request(url, :post,
{ Content-Type => text/csv,
Slug => test.csv,
GData-Version => 3.0 },
csv.read)
end
Now, this is all you need to get started with the Google Data API’s. Be sure to check out the Google Apps Marketplace Developer overview for more information and to see which API’s you could use and how to use these. I would advise to check out the OAuth Playground if you have any problems with authorization. Using the playground with two-legged OAuth is very easy. Just follow these steps:
- Set the signature method to HMAC-SHA1
- Type in your consumer key and consumer secret (these can be found in your Vendor Profile)
- Set your Feed URL (step 6)
- Set GData-version to 3.0 unless the API only supports 2.0
- Click execute
Thank you for reading this tutorial. I know this isn’t the best approach on using two-legged OAuth but it will give you some insight. The best way would be to build in two-legged OAuth support in the Google Data APIs Ruby Utility Library. I haven’t done that yet but am planning to look into that soon. If you have any questions or comments, I would love to hear from you. You can email me at vincent@floorplanner.com.
One last note: These code snippets are just examples of how to use the Google Apps Marketplace with Rails. I would advise you not to use these examples in a production environment.
Want to weigh in on this topic? Discuss on Buzz
Monday, March 9, 2015
Updates on Authentication for Gmail IMAP POP and SMTP
Additional Scrutiny for Password Authentication
As previously announced, Google has begun increasing the security checks that occur when logging in with a user’s Google password. This includes access via Gmail IMAP, POP, and SMTP-MSA. It does not apply when authenticating with OAuth 2.0 via the XOAUTH2 mechanism.
If the checks detect anything suspicious about a password login attempt, our servers may deny login and return an error message requesting that the user first login to Google through a web browser. They may also require the user to explicitly enable “Less Secure Apps” on their account. Applications that perform password authentication to IMAP, POP, or SMTP are examples of "Less Secure Apps".
We strongly encourage developers to use OAuth 2.0 (via the XOAUTH2 mechanism for IMAP, POP, and SMTP) in order to better protect their users.
XOAUTH support ends May 5, 2015
The OAuth 1.0 XOAUTH authentication mechanism for Gmail IMAP and SMTP-MSA is deprecated and will stop being supported on May 5, 2015. Developers must migrate to XOAUTH2 in order to continue authenticating to Gmail after that date. You can migrate existing users without their intervention by following the instructions in this migration guide. Instructions for developing your XOAUTH2 code are in the XOAUTH2 documentation.
Posted by Jamie Nicolson, Gmail Software Engineer
Saturday, February 28, 2015
IMU Learning Series 01 Facebook for Learning and Teaching
- Zaid Ali Alsagoff
- Fareeza Marican
RECORDING
You are recommended to skip the first 10 minutes, so that you can get right into the action. If you have problems viewing, try updating your Flash Player.
IMU Learning Series 01 - Facebook for Learning and Teaching?

Stay tuned for the upcoming online session, which will be revealed soon :)
Wednesday, February 25, 2015
eLearning Grid and e TQM College Journals Dubai
- Link to eLearning Grid
- e-TQM College Journals
- The International Journal of Excellence in eLearning

ELEARNING GRID?
eLearning Grid was recently launched by the eTQM College in Dubai. Its mission is to become a central hub for developing an e-learning community, which actively contributes in spreading e-learning awareness (in the Middle East region and elsewhere in the world) and encourages the promotion and exchange of best practices and case studies in the field. It targets all those who have interest in e-learning as users, adopters or providers of e-Learning ...more
e-TQM COLLEGE JOURNALS?
"The launch of the eTQM College Journals is to support a strategy for the encouragement of growth and development of scientific thinking and publishing in the Arab World and the Middle East region. Recent research about scientific publishing and contribution from the region indicates that the Middle East region falls far behind other regions in terms of scientific research and publications and most of the scientific content comes from very few countries - with 54% from Israel, followed by Turkey, Saudi and Iran (Prof. Mohamed Zairi)" ...more
JOURNALS?
- International Journal of Excellence in eLearning
- International Journal of Excellence in Education
- International Journal of Excellence in Public Sector Management
- International Journal of Excellence in Healthcare Management
- International Journal of Excellence in Tourism, Hospitality and Catering
- International Journal of Excellence ine-Solutions for Management
Currently, you can enjoy free access to these online journals, and hopefully this will continue. If these two excellent initiatives (eLearning Grid and e-TQM College Journals) want to really contribute in spreading e-learning awareness, and facilitate the growth and development of scientific thinking and publishing in the Arab World and the Middle East region, I believe they have to remain free (to access).
In short, I am thrilled to learn about these two very important initiatives launched by the eTQM College in Dubai. Congratulations :)
236 Open Courseware Collections Podcasts and Videos
This collection of 236 free or open educational resources (URL above) is simply yummy (at least for people like me). I did create my own Open Educational Resources (OER) Index sometime back (Later UNESCO compiled a more organized and useful one named OER Useful resources). However, I like this one due to its comprehensiveness, simplicity and one-page index style (Click or scroll, but dont have to leave the page or pop-up out of here). Though, for those of you new to Open Educational Resources (OER), I have created a list below of OER resources you probably want to check out first, before you drown in the fast rising blue ocean of OER resources (and conclude that this is a waste of time). - OER Commons
OER Commons is the first comprehensive open learning network where teachers and professors (from pre-K to graduate school) can access their colleagues course materials, share their own, and collaborate on affecting todays classrooms. It uses Web 2.0 features (tags, ratings, comments, reviews, and social networking) to create an online experience that engages educators in sharing their best teaching and learning practices. - OCW Consortium Portal
Search for content across more than 50 existing OCW projects for the courses they are interested in, including materials from five language translation partners. The OpenCourseWare Consortium is a collaboration of more than 100 higher education institutions and associated organizations from around the world creating a broad and deep body of open educational content using a shared model. The mission of the OpenCourseWare Consortium is to advance education and empower people worldwide through opencourseware. - MIT OpenCourseware
A free and open educational resource for faculty, students, and self-learners around the world. OCW supports MITs mission to advance knowledge and education, and serve the world in the 21st century. It is true to MITs values of excellence, innovation, and leadership. - Stanford on iTunes
Stanford on iTunes provides access to a wide range of Stanford-related digital audio content via the iTunes Music Store, Apples popular music jukebox and online music store. The project includes two sites: 1) A public site, targeted primarily at alumni, which includes Stanford faculty lectures, learning materials, music, sports, and more. 2) An access-restricted site for students delivering course-based materials and advising content. - MERLOT
MERLOT is a free and open resource designed primarily for faculty and students of higher education. Links to online learning materials are collected here along with annotations such as peer reviews and assignments. - Connexions
Connexions is a rapidly growing collection of free scholarly materials and a powerful set of free software tools to help authors publish and collaborate instructors rapidly build and share custom courses learners explore the links among concepts, courses, and disciplines. The Content of Commons contains small "knowledge chunks" we call modules that connect into courses. Thanks to a Creative Commons open license, anyone can take our materials, adapt them to meet their needs, and contribute them back to the Commons. And everyone is invited to participate! - Berkeley UC Courses
The University of California, Berkeley is the preeminent public research and teaching institution in the nation. From classic literature to emerging technologies, the curricula of our 130 academic departments span the wide world of thought and knowledge. Supported by the people of California, the university has embraced public service as an essential part of its mission since 1868. The content on this page—drawn from campus seminars, courses and events—is just one part of UC Berkeleys commitment to the broadest possible dissemination of knowledge for the benefit of our state, the nation and the world. - World Lecture Hall
World Lecture Hall publishes links to pages created by faculty worldwide who are using the Web to deliver course materials in any language. Some courses are delivered entirely over the Internet. Others are designed for students in residence. Many fall somewhere in between. In all cases, they can be visited by anyone interested in courseware on the Internet faculty, developers, and curious students alike. - DLORN
One-stop source for learning object syndication. They retrieve learning object metadata from across the web and store it here. Thanks Stephen Downes! - Fathom Archive
This archive, provided by Columbia University, offers access to the complete range of free content developed for Fathom by its member institutions. Columbia encourages you to browse this archive of online learning resources, including lectures, articles, interviews, exhibits and free seminars. You can find additional online resources from Columbia University at ci.columbia.edu or cero.columbia.edu and from the members of the Fathom consortium at their own websites. - Open Learning Initiative
A collection of "cognitively informed," openly available and free online courses and course materials that enact instruction for an entire course in an online format. - Sofia Project
The Sofia project is an open content initiative launched by the Foothill - De Anza Community College District, which promotes faculty and institutional sharing of online content. Modeled after MIT?s OpenCourseWare Initiative, Sofia encourages the free exchange of community college-level materials on the World Wide Web. - Gutenberg Project
Project Gutenberg is the first and largest single collection of free electronic books, or eBooks. Michael Hart, founder of Project Gutenberg, invented eBooks in 1971 and continues to inspire the creation of eBooks and related technologies today. - Tufts OpenCourseware
Tufts OpenCourseWare is part of a new educational movement initiated by MIT where course content is accessible for free to everyone online. - W3 Schools
At W3Schools you will find all the Web-building tutorials you need, from basic HTML and XHTML to advanced XML, Multimedia and WAP. - Wikipedia
The Wikimedia Foundation Inc. is a non-profit organization with the goal of providing free knowledge to every person in the world. Meeting this goal through the maintenance, development and distribution of free content, Wikimedia relies on public donations to run its wiki-based projects.
I suppose these OER resources above could keep us busy for a few life times :)
Tuesday, February 24, 2015
E Learning and Sustainability Report
"The brief for the study was ?working out an analysis of how to manage a virtual learning environment in different countries and by different types of organisations (universities, SMEs, primary schools, international associations) in a sustainable way?. The report focuses on five aspects of sustainability (1. Learning platforms and learning software. 2. Institutional responses to the use of e-learning. 3. E-learning materials development. 4. Pedagogic approaches. 5. Teacher and trainers skills.)
- Develop and adopt strategies of implementing open source software.
- Establish data repositories or contribute to collective repositories.
- Look at what free resources are available (WWW is the largets e-Learning repository in the World).
- Encourage staff to share resources.
- Establish licence agreements (it is important that the effort and contribution of materials creators is recognised and their rights protected).
- Think carefully about alternatives to Virtual Learning Environments.
- Staff development and training (technical and pedagogy) is central to successful and sustainable e-learning.
- Develop and review strategies for implementing e-learning.
- A sustainable strategy should consider how different services can be integrated or can interoperate at a technical, pedagogic and human level.
- The provision and use of metadata and conformance to standards (e.g. SCORM) are key strategic issues for the sustainability of e-learning.
- Take pedagogies seriously (good technology is not enough!).
- Integrate ICT within the whole curriculum.
- Project funding is important in allowing opportunities for innovation and experimentation.
- Institutions should encourage staff to actively seek funding opportunities.
- Actively seek to develop partnerships and networks for e-learning.
- Share practice throughout organisation.
- Make sure sufficient support is available.
- Evaluate e-learning practice (e.g. anually)"
(If you dont have time to read the whole report, please read Graham Attwells "Recipes for sustainability" (conclusion). Excellent stuff! Thanks Graham! )
Tuesday, February 3, 2015
CyanogenMod on HP Touchpad step by step Guide and Tutorial
How to install CyanogenMod On HP Touchpad

Saturday, January 31, 2015
PhoneGap Tutorial Parsing xml file using javascipt and displaying the data on the android and ios mobile screens
Title : I am going to explain u how to parse xml file and display data on your mobile screen.
Description : In todays world every business application need to contact webservices or xml services or xml files in the server and parse the files and need to display some results on the screen.for example take a live cricket score card : in the server we write a program where the score will be updated ball by ball,run by run in the web service , and the xml file also get updated with the live score and now the our application screen should also contact the webservice every 5 seconds and parse xml file and will update the live score for us , I will explain this with source code latter , for now i will explain you a simple example.
Here is the xml file which we are going to parse.
MakeMyTrip.com
MakeMyTrip.com is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/makemytrip-logo.jpg
GoIbibo.com
GoIbibo.com is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/goibibo_logo.png
Abhibus.com
Abhibus.com is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/abhibus-logo.png
Travelyaari.com
Travelyaari.com is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/travelyaari-com-logo-w240.png
Redbus.in
Redbus.com is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/logo_bc9228d_163.jpg
Expedia.co.in
Expedia.co.in is one of the good website providing Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/expedia-logo.png
Other websites
We Provide more websites that offer good Travel services to book oonline Flight,Hotel,Train and Bus tickets with guranteed lowest prices and provides new deals , offers and discount coupons every week and help you save money upto 20% while you travel.
travellogos/travel-agency-logos.jpg
Now we have to parse the above file using java script and display the results using html5. Here is the html and javascript code to parse this xml file.
Javascript file
function travel(){
if (window.XMLHttpRequest)
{ // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{ // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","Travel.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
travels = xmlDoc.getElementsByTagName("website");
alert("travels:"+travels.length);
var websites = [];
var description = [];
var logos = [];
for(var travel=0;travelvar websitename = travels[travel].getElementsByTagName("sitename")[0].childNodes[0].nodeValue;
websites.push(websitename);
var des = travels[travel].getElementsByTagName("Description")[0].childNodes[0].nodeValue;
description.push(des);
var images = travels[travel].getElementsByTagName("Image")[0].childNodes[0].nodeValue;
logos.push(images);
}
var listview = document.getElementById("container");
var ul = document.createElement("ul");
for(var i=0;ivar livalue= document.createTextNode(websites[i]);
var desvalue = document.createTextNode(description[i]);
var li = document.createElement("li");
var table = document.createElement("table");
var table1 = document.createElement("table");
var tr1 = document.createElement("tr");
var td1 = document.createElement("td");
var img = new Image();
img.src= logos[i];
img.setAttribute("width",60);
img.setAttribute("height",30);
img.setAttribute(onclick, "test()");
td1.appendChild(img);
tr1.appendChild(td1);
var tr2 = document.createElement("tr");
var td2 = document.createElement("td");
var td3 = document.createElement("td");
td2.appendChild(livalue);
td3.appendChild(desvalue);
tr1.appendChild(td2);
tr2.appendChild(td3);
table.appendChild(tr1);
table1.appendChild(tr2);
li.appendChild(table);
li.appendChild(table1);
ul.appendChild(li);
}
listview.appendChild(ul);
}
Html File
Minimal AppLaud App
Coupons Shop

