<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nathan and his Open Ideals &#187; android</title>
	<atom:link href="http://openideals.org/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://openideals.org</link>
	<description>... and the trouble it often gets him in</description>
	<lastBuildDate>Mon, 07 May 2012 02:15:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Another small step for a Tibetan keyboard on Android</title>
		<link>http://openideals.org/2010/11/26/another-small-step-for-a-tibetan-keyboard-on-android/</link>
		<comments>http://openideals.org/2010/11/26/another-small-step-for-a-tibetan-keyboard-on-android/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 16:54:48 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Announcing...]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[tibet]]></category>

		<guid isPermaLink="false">http://openideals.org/?p=665</guid>
		<description><![CDATA[There has been a lot of excitement this week about the robust support for the Tibetan written language in Apple&#8217;s iOS 4.2 for iPhone and iPad. This is a fantastic achievement that many contributed to, and that Apple should be &#8230; <a href="http://openideals.org/2010/11/26/another-small-step-for-a-tibetan-keyboard-on-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There has been a lot of excitement this week about the robust support for the <a href="http://digitaltibetan.org/index.php/Tibetan_Input_Method_for_Apple_iOS_4.2_devices_(iPhone,_iPad,_iPod_touch)">Tibetan written language in Apple&#8217;s iOS 4.2 for iPhone and iPad</a>. This is a fantastic achievement that many contributed to, and that Apple should be loudly applauded for.</p>
<p>Unfortunately, the state of Tibetan on Android is still poor, but not hopeless. While <a href="http://tom.to/blog/">Tom Meyer</a> has provided a <a href="http://tom.to/blog/archives/117">great starting point for rendering text properly</a>, I still am not aware of any means for inputing Tibetan characters. With that in mind, I set out to investigate the ability to create a new Tibetan &#8220;Input Method&#8221; (as Google calls it) for Android, and quickly realized that one could just write a Language Pack add-on for the <a href="http://code.google.com/p/softkeyboard">open-source AnySoftKeyboard project</a>. This solution still requires you to <a href="http://openideals.com/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/">root your phone and install the Dzongkha&#8221;རྫོང་ཁ font</a>, but is still a step in the right direction!</p>
<p>You can find the open-source code for my new project, the <a href="https://github.com/nathanfreitas/Tibetan-AnySoftKeyboard">Tibetan AnySoftKeyboard Language Pack on Github</a>. If you would like to try it out, you must have a <a href="http://tom.to/blog/archives/76">rooted device with the Dzongkha&#8221;རྫོང་ཁ font installed</a>, then install the &#8220;AnySoftKeyboard&#8221; from the Android Market, then you can install the first test <a href="https://github.com/nathanfreitas/Tibetan-AnySoftKeyboard/TibetanAnySoftKeyboard.apk/qr_code">Add-on APK</a> file, and the Tibetan option should come up in keyboard settings.</p>
<p>Below you can see a screenshot of the initial keyboard writing text into the <a href="http://www.openintents.org/en/notepad">OI Notepad</a> app. It appears to be properly stacking characters as well, but I may be wrong. Also the current implementation does not yet support the SHIFT key or other modifiers. I would love to have some help setting up the rest of the <a href="https://github.com/nathanfreitas/Tibetan-AnySoftKeyboard/blob/master/res/xml/tibetan_qwerty.xml">QWERTY mappings in this XML file</a>. Otherwise, any other comments, feedback, advice or pointers to other Android Tibetan keyboard work would be much appreciated!</p>
<p><a href="http://openideals.org/wp-content/uploads/2010/11/TibetanAnysoftKeyboard.png"><img class="alignnone size-medium wp-image-666" title="TibetanAnysoftKeyboard" src="http://openideals.org/wp-content/uploads/2010/11/TibetanAnysoftKeyboard-180x300.png" alt="" width="180" height="300" /></a> <a href="http://openideals.org/wp-content/uploads/2010/11/TibetanAnysoftKeyboardsettings.png"><img class="alignnone size-medium wp-image-667" title="TibetanAnysoftKeyboardsettings" src="http://openideals.org/wp-content/uploads/2010/11/TibetanAnysoftKeyboardsettings-180x300.png" alt="" width="180" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://openideals.org/2010/11/26/another-small-step-for-a-tibetan-keyboard-on-android/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>Searching and Playing YouTube Videos using Appcelerator Titanium</title>
		<link>http://openideals.org/2010/09/30/searching-and-playing-youtube-videos-using-appcelerator-titanium/</link>
		<comments>http://openideals.org/2010/09/30/searching-and-playing-youtube-videos-using-appcelerator-titanium/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 05:30:46 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://openideals.org/?p=640</guid>
		<description><![CDATA[This tutorial is part of content I am developed for the NYU ITP course I am teaching this semester, &#8220;Social Activism using Mobile Technology&#8221;. You can find the original document posted here. This code comes from the open-source project (of which &#8230; <a href="http://openideals.org/2010/09/30/searching-and-playing-youtube-videos-using-appcelerator-titanium/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style>
table
{
border:1px solid #333;
font-family:courier;
font-size:10pt;
}
</style>
<div>This tutorial is part of content I am developed for the <a href="http://itp.nyu.edu">NYU ITP</a> course I am teaching this semester, <a href="http://openideals.com/itp2800">&#8220;Social Activism using Mobile Technology&#8221;</a>. You can find the original document posted <a href="https://docs.google.com/document/pub?id=1-SBFGbnwLRSSG_oluaGsLw6FarO-QmnxzLxtgIap708">here</a>. This code comes from the open-source project (of which I am the lead developer) located here: <a href="http://github.com/nysenatecio/NYSenateMobileApp">http://github.com/nysenatecio/NYSenateMobileApp</a>. If you want to see this code &#8220;in action&#8221;, download the <a href="http://nysenate.gov/mobile">NYSenate Mobile app for iPhone, iPad or Android</a>.</div>
<div>This tutorial will demonstrate using the <a href="http://www.appcelerator.com/products/titanium-mobile-application-development/">Appcelerator Titanium Mobile API</a>, a Javascript-based cross-mobile-platform toolkit, how to accomplish the following feats in a mobile app:</div>
<div>
<ul>
<li>Search for video by channel name or keyword from the YouTube API</li>
<li>Use the Titanium HTTP client for async XML requests and response handling</li>
<li>Retrieve video results from YouTube and display thumbnail &amp; text in a table</li>
<li>Create a WebView window and use it to display YouTube video player</li>
<li>Hand-off YouTube video links to the OS for external playback</li>
</ul>
<p>All in all, following this tutorial, you should be able to perform the basic functions you would need to build an app that front-ended video content stored on YouTube.</p>
<p>First, we declare our variables:</p>
<table>
<tbody>
<tr>
<td>//this is the main app window</p>
<p>var win = Titanium.UI.currentWindow;<br />
//this creates a spinning widget we can display while the user waits</p>
<p>var toolActInd = Titanium.UI.createActivityIndicator();<br />
//this is the table we will load videos into</p>
<p>var tableview;<br />
//and the data array for the table</p>
<p>var data = [];<br />
//the window and webview for displaying youtube player (iOS only)</p>
<p>var webModal;</p>
<p>var webModalView;<br />
//stores the current link being displayed in the web view</p>
<p>var currentLink;<br />
//this is the network request object</p>
<p>var xhr = Ti.Network.createHTTPClient();</td>
</tr>
</tbody>
</table>
<p>Now you need to declare a function that knows how to play YouTube videos on iOS and Android. Every YouTube video has a GUID (globally unique id &#8211; or at least unique for YouTube) and a title. You pass those two values to this function and it will either launch the YouTube player directly (Android) or display a thumbnail with playbutton that the user can launch (iOS).</p>
<table>
<tbody>
<tr>
<td>function playYouTube (vtitle, vguid)<br />
{<br />
if (Titanium.Platform.name == &#8216;iPhone OS&#8217;)<br />
{<br />
var ytVideoSrc = &#8220;http://www.youtube.com/v/&#8221; + vguid;<br />
var thumbPlayer = &#8216;&lt;html&gt;&lt;head&gt;&lt;style type=&#8221;text/css&#8221;&gt; body { background-color: black;color: white;} &lt;/style&gt;&lt;/head&gt;&lt;body style=&#8221;margin:0&#8243;&gt;&lt;br/&gt;&lt;br/&gt;&lt;center&gt;&lt;embed id=&#8221;yt&#8221; src=&#8221;&#8216; + ytVideoSrc + &#8216;&#8221; type=&#8221;application/x-shockwave-flash&#8221; width=&#8221;100%&#8221; height=&#8221;75%&#8221;&gt;&lt;/embed&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&#8217;;</p>
<p>showHTMLContent(vtitle,&#8217;http://www.youtube.com/watch?v=&#8217; + vguid,thumbPlayer);<br />
}<br />
else //on android<br />
{<br />
//this call to openURL hands off the link to the operating<br />
//system, and starts any player that supports <a href="http://youtube.com/">youtube.com</a><br />
Titanium.Platform.openURL(&#8216;http://www.youtube.com/watch?v=&#8217; + vguid);<br />
}<br />
}</td>
</tr>
</tbody>
</table>
<p>The reason you show an embedded YouTube thumbnail player on iOS, is that it will allow the video to play inside of the app without leaving the context of the app. This was more a problem on the non-multitasking iOS 3.x, and is still an issue on the iPad until iOS 4.2.</p>
<p>In the function above, there is a showHTMLContent() function call. This function is not built-in, and is just a way to simplify the common need to show some bits of HTML markup within your app. The arguments for the function are a title of the page, an optional URL to the source content of the page, and the direct HTML markup content to display.</p>
<table>
<tbody>
<tr>
<td>function showHTMLContent(wTitle, wUrl, wHTMLContent)<br />
{</p>
<p>//store the link for later use<br />
currentLink = wUrl;</p>
<p>//create the window to hold the web view<br />
webModal = Ti.UI.createWindow({});</p>
<p>//set the orientation modes for basically any which way<br />
webModal.orientationModes = [<br />
Titanium.UI.PORTRAIT,<br />
Titanium.UI.LANDSCAPE_LEFT,<br />
Titanium.UI.LANDSCAPE_RIGHT<br />
];</p>
<p>//create the webview aka the embedded web browser (webkit/safari)<br />
webModalView = Ti.UI.createWebView();<br />
webModalView.scalesPageToFit = true;</p>
<p>//add the web video to the modal window<br />
webModal.add(webModalView);</p>
<p>//set the title of the window<br />
webModal.title = wTitle;</p>
<p>//if you are using a tab UI in the app, this will open the window<br />
Titanium.UI.currentTab.open(webModal,{animated:true});</p>
<p>//set the HTML to display to the markup passed into the function<br />
webModalView.html = wHTMLContent;</p>
<p>};</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
<p>Great, so now we have the ability to display a YouTube player within our app using an embedded WebView. Pretty awesome so far, and hopefully you see how might use components like WebView for other mashups of native and web content in your apps.</p>
<p>Now we need to demonstrate how to get the data from YouTube on what videos are available. For this, we create another function called “doYouTubeSearch()”. This function takes two parameters: you can specify the channel name to retrieve videos from, or you can specify a search term, and you can combine these as well, to search videos from a specific channel only.</p>
<table>
<tbody>
<tr>
<td>function doYouTubeSearch (channel, searchTerm)<br />
{</p>
<p>//first show a “loading” spinning indicator to the user<br />
toolActInd.message = &#8216;Loading videos&#8230;&#8217;;</p>
<p>win.setToolbar([toolActInd],{animated:true});</p>
<p>toolActInd.show();<br />
//create the YouTube API search URL from the function parameters<br />
var searchUrl = &#8216;http://gdata.youtube.com/feeds/api/videos?alt=rss&amp;author=&#8217; + escape(channel) + &#8216;&amp;q=&#8217; + escape(searchTerm) + &#8220;&amp;orderby=published&amp;max-results=25&amp;v=2&#8243;;</p>
<p>//use the xhr http client object to do an HTTP GET request to the URL<br />
xhr.open(&#8220;GET&#8221;,searchUrl);<br />
xhr.send();<br />
}</td>
</tr>
</tbody>
</table>
<p>That was all pretty straightforward, right? You build up a URL, and you make the request using it for data from YouTube. Now, how you receive the response to that request is our next step. To do this, you must define an “onload” function for the ‘xhr’ object.</p>
<p>It is in this function that you will receive the data back from YouTube (usually in JSON or XML format), and you can process it to display in your app.</p>
<table>
<tbody>
<tr>
<td>xhr.onload = function()<br />
{<br />
try<br />
{</p>
<p>//the doc object holds the response structure</p>
<p>var doc;</p>
<p>//check whether the data coming back is in XML format or not</p>
<p>if (!this.responseXML)<br />
{<br />
//if not XML you have to convert it to XML<br />
doc = Titanium.XML.parseString(this.responseText).documentElement;<br />
}<br />
else<br />
{<br />
//if it is XML, then just set the doc variable<br />
doc = this.responseXML.documentElement;<br />
}</p>
<p>//now we can easily get a list of items from teh results<br />
var items = doc.getElementsByTagName(&#8220;item&#8221;);</p>
<p>//some simple variables for tracking the loop<br />
var x = 0;<br />
var c;</p>
<p>//now just loop through the response array to see what videos we have</p>
<p>for (c=0;c&lt;items.length;c++)<br />
{<br />
//get the current item<br />
var item = items.item(c);</p>
<p>//get the text for the video title tag using standard DOM XML calls<br />
var title = item.getElementsByTagName(&#8220;title&#8221;).item(0).text;</p>
<p>//build up a summary string to display below the title<br />
var summary = &#8220;&#8221;;<br />
if (item.getElementsByTagName(&#8220;pubDate&#8221;))<br />
{<br />
summary = item.getElementsByTagName(&#8220;pubDate&#8221;).item(0).text;<br />
}</p>
<p>//get the link to the youtube video<br />
var link = &#8220;&#8221;;</p>
<p>if (item.getElementsByTagName(&#8220;link&#8221;))<br />
{<br />
link = item.getElementsByTagName(&#8220;link&#8221;).item(0).text;<br />
}</p>
<p>//now here is where we perform a trick<br />
//we find the GUID code from within the link b/c we know the link format<br />
var guid = link.substring(link.indexOf(&#8220;?v=&#8221;)+3);<br />
guid = guid.substring(0,guid.indexOf(&#8220;&amp;&#8221;));</p>
<p>//now we can use that guid to load up a thumbnail image<br />
var thumbnail = &#8220;http://i.ytimg.com/vi/&#8221; + guid + &#8220;/2.jpg&#8221;;</p>
<p>//okay we have all the data we need for that item<br />
//now we need to create a row to add to the table in order to display it</p>
<p>//create the row item and set the height to 80 pixels<br />
var row = Ti.UI.createTableViewRow({height:80});</p>
<p>//set parameters for the row so we can get the youtube data out later<br />
row.url = link;<br />
row.guid = guid;<br />
row.videotitle = title;</p>
<p>//create a label for displaying the title and add it to the row<br />
var labelTitle = Ti.UI.createLabel({<br />
text:title,<br />
left:105,<br />
top:10,<br />
height:40,<br />
font:{fontSize:16}<br />
});<br />
row.add(labelTitle);</p>
<p>//create a label for the summary and add it to the row<br />
var labelSummary = Ti.UI.createLabel({<br />
text:summary,<br />
left:105,<br />
top:45,<br />
font:{fontSize:12}<br />
});<br />
row.add(labelSummary);</p>
<p>//create an image from the thumbnail, and add it to the row<br />
var img = Ti.UI.createImageView({<br />
url:thumbnail,<br />
left:0,<br />
height:80,<br />
width:100<br />
});<br />
row.add(img);</p>
<p>//add the row to the data array<br />
data[x++] = row;</p>
<p>}</p>
<p>//if tableview has been created, reset the data on the table<br />
//you can update data on the table multiple times<br />
if (tableview)<br />
{<br />
tableview.setData(data);<br />
}<br />
else<br />
{</p>
<p>//if table has not been created, build it up with the data array<br />
tableview = Titanium.UI.createTableView({<br />
data:data<br />
});</p>
<p>//add the table to the current window for display<br />
Titanium.UI.currentWindow.add(tableview);</p>
<p>//add a ‘click’ listener so that when someone taps on a row<br />
//the video will be played using the function we defined earlier<br />
tableview.addEventListener(&#8216;click&#8217;,function(e)<br />
{<br />
playYouTube(e.row.videotitle,e.row.guid);<br />
});</p>
<p>}<br />
}<br />
catch(E)<br />
{<br />
//if anything bad happens, show the error to the user and log it<br />
Titanium.API.debug(E);<br />
Titanium.UI.createAlertDialog({title:&#8217;NY Senate&#8217;, message:&#8217;No videos were found for this search.&#8217;}).show();</p>
<p>}</p>
<p>//hide the spinning ‘loading’ widget<br />
toolActInd.hide();<br />
win.setToolbar(null,{animated:true});<br />
};</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
<p>Okay, so that was a lot I know, but go back through it a few times, and you will see it is not so hard. First, we get XML back from YouTube. Then, we turn that XML into an array of items. Them we loop through those items and build up an array of rows. Then, we set the table with that array, and display the table. Finally, we handle the ‘click’ or touch events on the row, and display the YouTube player in the embedded webview. Ta-da! You now have a customizable YouTube search and player app.</p>
<p><img src="https://docs.google.com/drawings/image?id=sAK2r0Nq6OULyan-_AFS4yA&amp;w=537&amp;h=362&amp;rev=1&amp;ac=1" alt="" width="537px;" height="362px;" /></p>
<p>Now here are three examples how you might kick off all this activity.</p>
<p>First, in this case, we are doing a search for any video in the ‘NYSenate’ YouTube channel.</p>
<table>
<tbody>
<tr>
<td>doYouTubeSearch(&#8216;NYSenate&#8217;,&#8221;);</td>
</tr>
</tbody>
</table>
<p>In this example, we are searching all of YouTube for a “skateboard dog”.</p>
<table>
<tbody>
<tr>
<td>doYouTubeSearch(&#8221;,&#8217;skateboard dog&#8217;);</td>
</tr>
</tbody>
</table>
<p>Finally, in this example, we are</p>
<table>
<tbody>
<tr>
<td>doYouTubeSearch(&#8216;NYSenate&#8217;,'Brooklyn&#8217;);</td>
</tr>
</tbody>
</table>
<p>In review, this lesson has showed you how to display HTML web content, how to create YouTube players embedded in that content, how to make HTTP requests to web services and APIs, how to parse the XML returned from those services, and how to display data in a Table format.</p>
<p>This example was built upon code that comes from the open-source project located here: <a href="http://github.com/nysenatecio/NYSenateMobileApp">http://github.com/nysenatecio/NYSenateMobileApp</a> so go grab the code there and use it as a basis of your own app!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://openideals.org/2010/09/30/searching-and-playing-youtube-videos-using-appcelerator-titanium/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>The &#8220;Took&#8221;: Tibetan-enabled Nook eReader</title>
		<link>http://openideals.org/2010/08/07/the-took-tibetan-enabled-nook-ereader/</link>
		<comments>http://openideals.org/2010/08/07/the-took-tibetan-enabled-nook-ereader/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 05:01:54 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Emerging Tech]]></category>
		<category><![CDATA[Guardian]]></category>
		<category><![CDATA[New Idea]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[tibet]]></category>
		<category><![CDATA[typeface]]></category>

		<guid isPermaLink="false">http://openideals.org/?p=590</guid>
		<description><![CDATA[Thanks to amazing work by Tibetan font experts Tom Meyer and Chris Fynn, as well as the Barnes and Noble Nook eInk reader device hackers at NookDevs.com, I have modified my $199 Nook  ($149 if you get the wifi only &#8230; <a href="http://openideals.org/2010/08/07/the-took-tibetan-enabled-nook-ereader/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Thanks to amazing work by Tibetan font experts <a href="http://tom.to/blog/archives/117">Tom Meyer</a> and <a href="http://sites.google.com/site/chrisfynn2/">Chris Fynn</a>, as well as the Barnes and Noble Nook eInk reader device hackers at <a href="http://nookdevs.com">NookDevs.com</a>, I have modified my $199 Nook  ($149 if you get the wifi only model!)  to support proper rendering of Tibetan characters. This is dynamic rendering of Unicode text, and not just static pre-rendered images.</p>
<p><a href="http://openideals.org/wp-content/uploads/2010/08/IMG_20100807_000637.jpg"><img class="alignnone size-medium wp-image-591" title="IMG_20100807_000637" src="http://openideals.org/wp-content/uploads/2010/08/IMG_20100807_000637-225x300.jpg" alt="" width="225" height="300" /></a> <a href="http://openideals.org/wp-content/uploads/2010/08/IMG_20100807_005100.jpg"><img class="alignnone size-medium wp-image-596" title="IMG_20100807_005100" src="http://openideals.org/wp-content/uploads/2010/08/IMG_20100807_005100-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>You might have seen an <a href="http://openideals.com/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/">earlier post I wrote about this here</a>,  and I&#8217;ve essentially done the same thing this time, but with an  important  addition of code from Tom that properly stacks the characters (a  critical feature often not available in an OS font library), and a new  Tibetan  font (actually Bhutanese) from Chris which is small, lightweight and  efficient enough to be  used on Android. All together this provides support for reading Tibetan  text on web pages, and within full  application user interfaces, eBooks and more.</p>
<p>With up to 32gb of  storage possible via the tiny micro SD Card, this one device could  probably store and serve up the majority of Tibetan Buddhist texts, not to mention literary, poetic and historic works, that  exist, all in a lightweight, energy-efficient device. Since the device is also networked, you can use it to pull down the latest Tibetan language <a href="http://www1.voanews.com/tibetan/news/">online news</a> and <a href="http://yarlungraging.blogspot.com/2010/07/blog-post.html">blogs</a>.</p>
<p>And yes, this is all possible because the Nook is based on the free, open-source Android operating system. <em>Yay for freedom in all forms!</em></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">This is support for both web pages, as well as full applications on the device.</div>
]]></content:encoded>
			<wfw:commentRss>http://openideals.org/2010/08/07/the-took-tibetan-enabled-nook-ereader/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>The Droid&#039;s Dharma: Supporting the Tibetan Language on Android</title>
		<link>http://openideals.org/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/</link>
		<comments>http://openideals.org/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 06:11:27 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Guardian]]></category>
		<category><![CDATA[Mashups]]></category>
		<category><![CDATA[Mobile Mobile]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[tibet]]></category>

		<guid isPermaLink="false">http://openideals.com/?p=477</guid>
		<description><![CDATA[DISCLAIMER: I am by no means an expert in this issue &#8211; I am just an an enthusiastic hacker with a dream. Also I don&#8217;t read Tibetan, but I enjoy looking at it! Thanks to the open-source movement and the &#8230; <a href="http://openideals.org/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>DISCLAIMER: I am by no means an expert in this issue &#8211; I am just an an enthusiastic hacker with a dream. Also I don&#8217;t read Tibetan, but I enjoy looking at it!</em></p>
<p>Thanks to the <a href="http://www.gnu.org/">open-source movement</a> and the hard work of many <a href="https://collab.itc.virginia.edu/access/wiki/site/26a34146-33a6-48ce-001e-f16ce7908a6a/tibetan%20fonts.html">Tibet supporters and typography experts</a>, I am happy to announce that  rendering of Tibetan characters is now supported on the most fantastic of mobile smartphones, <a href="http://www.android.com/">Google Android</a>!!!</p>
<p><a title="YarlungRaging2.JPG by nathanialfreitas, on Flickr" href="http://www.flickr.com/photos/natty/4118510985/"><img src="http://farm3.static.flickr.com/2686/4118510985_379d582822.jpg" alt="YarlungRaging2.JPG" width="500" height="375" /></a><br />
<em>Tendor&#8217;s <a href="http://yarlungraging.blogspot.com">Yarlung Raging</a> blog viewed on a T-Mobile myTouch3G Android Phone</em></p>
<p>While it only has a small alphabet of characters, the Tibetan language has been notoriously difficult to support on Mac, Windows and Linux due to some complexities in how one character can modify the next. Dedicated academics, volunteers and software engineers have stayed focused on solving this and the most recent versions of all major operating systems are able to render Tibetan and provide Tibetan character input tools. Google Android is based on Linux, and fortunately is able to support the use of the GPL-licensed <a href="https://collab.itc.virginia.edu/access/wiki/site/26a34146-33a6-48ce-001e-f16ce7908a6a/tibetan%20machine%20uni.html">Tibet Machine Unicode font</a>.</p>
<div style="float:left;margin:3px"><a title="YarlungMobile1.jpg by nathanialfreitas, on Flickr" href="http://www.flickr.com/photos/natty/4118510513/"><img src="http://farm3.static.flickr.com/2722/4118510513_c1b63dfe25_m.jpg" alt="YarlungMobile1.jpg" width="180" height="240" /></a></div>
<p>However, by default Android only has a small number of fonts built-in, and doesn&#8217;t support the easy addition of new fonts or locales. It does however have something called the &#8220;fallback&#8221; font, which is used to render any encoded text it comes across that it doesn&#8217;t quite know what to do with.</p>
<p>What I realized is that you could replace this font with a Tibetan unicode font compatible with Linux, and that this would then enable Tibetan support in all applications on Android, including the web browser, email apps, instant messaging, and short messaging (SMS), among others.</p>
<p>The steps below outline the technical how to for Android users.<br />
<br style="clear:left;" /><br />
<strong>WARNING: This is not for novices. However, it isn&#8217;t rocket science either. Your average neighborhood mobile phone enthusiast should be able to figure out how to do this, and potentially help their friends do it too. Down the road, I hope we can make this process easier and/or Google will allow for the addition of any font to the system.</strong></p>
<p><strong>Step 1:</strong> Get Root on your Android device. You don&#8217;t need to mod your phone with a custom firmware, you just need root access to change system fonts. Here&#8217;s some places to start looking on how to (this changes weekly, btw, and differs for each type of Android phone):</p>
<ul>
<li><a href="http://wiki.cyanogenmod.com/index.php/Main_Page#How_do_I_unlock_or_root_my_device.3F">CyanogenMod: How To Root</a></li>
<li><a href="http://www.ryebrye.com/blog/2009/08/16/android-rooting-in-1-click-in-progress/">Android 1-click Root</a></li>
<li><a href="http://neilandtheresa.co.uk/Android/">Android InstantRoot</a></li>
</ul>
<p><strong>Step 2:</strong> Download <a href="https://collab.itc.virginia.edu/access/wiki/site/26a34146-33a6-48ce-001e-f16ce7908a6a/tibetan%20machine%20uni.html">Tibet Machine Unicode font</a>. <em>You can learn more about the variety of Tibetan fonts available <a href="https://collab.itc.virginia.edu/access/wiki/site/26a34146-33a6-48ce-001e-f16ce7908a6a/home.html">here</a>.</em></p>
<p><strong>Step 3:</strong> Make the system font folder writeable and backup the existing font<br />
<em>This can be done using desktop &#8216;adb&#8217; tool from the SDK or the Android terminal app on the device</em></p>
<blockquote><p># su<br />
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br />
# chmod 777 /system/fonts<br />
# cd /system/fonts<br />
# mv DroidSansFallback.ttf DroidSansFallback.ttf.bak<br />
# exit</p></blockquote>
<p><strong>Step 4:</strong> Write the Tibetan unicode font as the new fallback font:<br />
<em>Using <a href="http://developer.android.com/guide/developing/tools/adb.html">ADB Desktop tool</a> with Android connected via USB</em></p>
<blockquote><p>adb push TibMachUni-1.901b.ttf /system/fonts/DroidSansFallback.ttf</p></blockquote>
<p><em>Using on-device terminal app: </em></p>
<blockquote><p>#cd /system/fonts<br />
#wget -o DroidSansFallback.ttf  http://tinyurl.com/tibfont /system/fonts/DroidSansFallback.ttf</p></blockquote>
<p><strong>Step 5:</strong> Reboot your Android phone</p>
<p><strong>Step 6:</strong> Point your Android browser at <a href="http://yarlungraging.blogspot.com">http://yarlungraging.blogspot.com</a>, <a href="http://lobsangmonlam.org/">http://lobsangmonlam.org/</a> or <a href="http://tb.tibet.cn">http://tb.tibet.cn </a> to verify the Tibetan font support is properly installed.</p>
<h2>What&#8217;s Next</h2>
<p><strong>Two big steps from here&#8230; this is a call to action for Android developers out there:</strong></p>
<ul>
<li>Develop a one-click app that can install Tibetan (or any other third-party language) font for any rooted device</li>
<li>Port an existing <a href="http://old.thdl.org/tools/input.html#jskad">Java-based Tibetan input utility</a> into Android as an <a href="http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html">Input Method Editor</a> so that you can have a way to write Tibetan character emails, SMS messages and blog posts.</li>
</ul>
<hr />Many thanks to the authors and developer behind the following posts upon whose work this effort was based:<br />
<a href="http://karuppuswamy.com/wordpress/2009/04/25/how-to-change-fonts-in-android/">karuppuswamy.com: How to change fonts in Android?</a><br />
<a href="http://karuppuswamy.com/wordpress/2009/04/25/mounting-system-partition-in-read-write-mode-in-android/">karuppuswamy.com: Mounting /system partition in read-write mode in Android</a><br />
<a href="http://www.android-devs.com/?p=33">android-devs.com: Adding Additional Language Fonts to Android</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openideals.org/2009/11/20/the-droids-dharma-supporting-the-tibetan-language-on-android/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Orbot: An Anonymous Proxy for Android using Tor</title>
		<link>http://openideals.org/2009/10/22/orbot-proxy/</link>
		<comments>http://openideals.org/2009/10/22/orbot-proxy/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 11:46:12 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Announcing...]]></category>
		<category><![CDATA[Emerging Tech]]></category>
		<category><![CDATA[Guardian]]></category>
		<category><![CDATA[Mobile Mobile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[guardianphone]]></category>
		<category><![CDATA[proxies]]></category>
		<category><![CDATA[tor]]></category>

		<guid isPermaLink="false">http://openideals.com/?p=452</guid>
		<description><![CDATA[I&#8217;d like to make this post without much fanfare. Just looking to share information on the work I&#8217;ve been doing with the fantastically radical team over at the Tor Project, as part of my work on the Guardian Project. We &#8230; <a href="http://openideals.org/2009/10/22/orbot-proxy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to make this post without much fanfare. Just looking to share information on the work I&#8217;ve been doing with the fantastically radical team over at the <a href="http://torproject.org">Tor Project</a>, as part of my work on the <a href="http://openideals.com/guardian">Guardian Project</a>. We have successfully ported the native C Tor app to Android and built an Android application bundle that installs, runs and provides the glue needed to make it useful to end users&#8230;. secure, anonymous access to the web via Tor on Android is now a reality. (<em>Update: Tor doesn&#8217;t magically encrypt all of your Internet activities, though. You should <a href="https://www.torproject.org/download.html.en#Warning">understand what Tor does and does not do for you</a>.</em>)</p>
<p>However, there is still much work to be done&#8230; read on!</p>
<p>1) <strong>Tor 0.2.2.5-alpha release</strong> contains all the necessary code for building the Tor binary exe using the Android C SDK. I utilized <a href="http://github.com/tmurakam/droid-wrapper" target="_blank">http://github.com/tmurakam/droid-wrapper</a> toolchain wrapper scripts to make life easier. This will produce the output Tor exe that can run on Android w/o needing root.</p>
<p><em>Update: Thanks to <a href="http://www.appelbaum.net/">Jake</a>, you can now read the updated <a href="https://svn.torproject.org/svn/projects/android/trunk/Orbot/BUILD">Orbot BUILD doc</a> for the step by step build how to.</em></p>
<p><a href="http://www.flickr.com/photos/ioerror/3933276410/"><img src="http://farm4.static.flickr.com/3510/3933276410_275a88c115_d.jpg" alt="" /></a><br />
<em>(thanks to <a href="http://www.flickr.com/photos/ioerror">ioerror</a> for the pic)</em></p>
<p>At this point, we are pretty convinced that the performance and efficiency of the C binary is quite significantly better than the Java-based ports of Tor running within Dalvik&#8230; this translate to a better experience for the user, with no noticeable increase in battery drain or lag on the rest of the device while Tor is running in the background.</p>
<p>2) <strong>Orbot</strong> &#8211; this is the new Android app which bundles the Tor binary, handles its proper installation on the device and then provides a gui for starting/stopping, view the log and torrc, etc. It also provides a built-in HTTP Proxy and is licensed under the <a href="https://www.torproject.org/eff/tor-legal-faq.html">Tor license</a>.</p>
<p><a title="home.jpg by nathanialfreitas, on Flickr" href="http://www.flickr.com/photos/natty/4034052788/"><img src="http://farm3.static.flickr.com/2588/4034052788_cff2aaf55c_m.jpg" alt="home.jpg" width="161" height="240" /></a><a title="tor-on.jpg by nathanialfreitas, on Flickr" href="http://www.flickr.com/photos/natty/4033299037/"><img src="http://farm3.static.flickr.com/2503/4033299037_49517e87b7_m.jpg" alt="tor-on.jpg" width="161" height="240" /></a><a title="log.jpg by nathanialfreitas, on Flickr" href="http://www.flickr.com/photos/natty/4034052826/"><img src="http://farm3.static.flickr.com/2484/4034052826_e326c056fc_m.jpg" alt="log.jpg" width="161" height="240" /></a><br />
<em></em></p>
<p><em>Just to be clear &#8211; we aren&#8217;t using the NDK or a shared library&#8230; we are actually extracting a binary and managing it via Runtime.getRuntime().exec() calls. This is 100% supported &#8211; who knew?! More info on how to do this <a href="http://remotedroid.net/blog/2009/04/13/running-native-code-in-android/">here</a><br />
</em></p>
<p>The first code is up here&#8230; all is working, but def needs much polish:<br />
<a href="https://svn.torproject.org/svn/projects/android/trunk/Orbot/" target="_blank">https://svn.torproject.org/svn/projects/android/trunk/Orbot/</a></p>
<p>This post is in part a call for developers to contribute to the continued development of Orbot, so we can get it to a 1.0 state. The other big task is to modify the open-source, privacy focused <a href="http://www.cl.cam.ac.uk/research/dtg/android/tor/">Shadow browser</a>, from the University of Cambridge DTG group, in order to make it work with our HTTP proxy. That would be a really great step forward, as right now, we have to ask users to set their global APN (read: <a href="https://svn.torproject.org/svn/projects/android/trunk/Orbot/INSTALL" target="_blank">https://svn.torproject.org/svn/projects/android/trunk/Orbot/INSTALL</a>)</p>
<p>Thanks for everyone&#8217;s help and support to get here. I&#8217;d like to keep pushing on to a public release via the App Market very soon. Let me know if you&#8217;d like to contribute in any way &#8211; code, screen designs, icons, testing&#8230;. <strong> </strong></p>
<p><strong>Domo arigato, Mr. Orbot-o!</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://openideals.org/2009/10/22/orbot-proxy/feed/</wfw:commentRss>
		<slash:comments>151</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
