<?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>Elucidsoft - Inside a Micro-ISV</title>
	<atom:link href="http://www.elucidsoft.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.elucidsoft.com/blog</link>
	<description></description>
	<lastBuildDate>Sat, 31 Dec 2011 22:27:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mono Android: Working with SQLite</title>
		<link>http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mono-android-working-with-sqlite</link>
		<comments>http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:27:17 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=145</guid>
		<description><![CDATA[<link rel="stylesheet" type="text/css" href="http://www.elucidsoft.com/blog/wp-content/plugins/crayon-syntax-highlighter/themes/classic/classic.css?ver1.5.1" />
If you are using Mono for Android and need to use SQLite you are in luck since the platform fully supports this scenario.  In fact you don&#8217;t even need to do anything special, and this post also applies if you are developing for Android in Java using Eclipse.  What&#8217;s different however is Eclipse will let [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/11/mono-android-marquee-text-view-2/' rel='bookmark' title='Mono Android: Marquee Text View'>Mono Android: Marquee Text View</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>If you are using Mono for Android and need to use SQLite you are in luck since the platform fully supports this scenario.  In fact you don&#8217;t even need to do anything special, and this post also applies if you are developing for Android in Java using Eclipse.  What&#8217;s different however is Eclipse will let you copy files from your Android device, in Mono you are using Visual Studio which at this time does not have that capability.</p>
<p>The preferred method (but not the only one) of creating, and managing a SQLite DB in Android is to create a class and inherit from SQLiteOpenHelper, which is in the namespace &#8216;Android.Database.Sqlite&#8217;, you will also need to add the references to assemblies: &#8216;Mono.Android&#8217;, &#8216;Mono.Data.Sqlite&#8217;</p>
<p>Below is an example of where you inherit SQLiteOpenHelper and then override two methods: &#8216;OnCreate&#8217; and &#8216;OnUpgrade&#8217;</p>
<p>

<!-- Crayon Syntax Highlighter v1.5.1 -->
<link rel="stylesheet" type="text/css" href="http://www.elucidsoft.com/blog/wp-content/plugins/crayon-syntax-highlighter/fonts/monospace.css?ver1.5.1" />

		<div id="crayon-524cef50d77ee" class="crayon-syntax crayon-theme-classic crayon-font-monospace" crayon-os="mac" settings=" scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both;">
		
			<div class="crayon-toolbar" settings=" mouseover overlay hide delay">
			<div class="crayon-tools"><a href="#" class="crayon-nums-button crayon-button" title="Toggle Line Numbers" onclick="toggle_nums('crayon-524cef50d77ee'); return false;"></a><a href="#" class="crayon-copy-button crayon-button" title="Copy Plain Code" onclick="copy_plain('crayon-524cef50d77ee'); return false;"></a><a href="#" class="crayon-popup-button crayon-button" title="Open Code in Window" onclick="return false;"></a><a href="#" class="crayon-plain-button crayon-button" title="Toggle Plain Code" onclick="toggle_plain('crayon-524cef50d77ee'); return false;"></a><span class="crayon-language">C#</span></div>
			</div><div><textarea class="crayon-plain" settings="dblclick" readonly  wrap="off" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">public class Database : Android.Database.Sqlite.SQLiteOpenHelper, IDatabase
{
private const string DATABASE_NAME = "MyDatabase";
private const int DATABASE_VERSION = 1;

public Database(Android.Content.Context context)
: base(context, DATABASE_NAME, null, DATABASE_VERSION)
{
}

public override void OnCreate(SQLiteDatabase db)
{
db.ExecSQL(@"CREATE TABLE MyTable (id INT PRIMARY KEY, comments TEXT NOT NULL");
}

public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.ExecSQL("DROP TABLE IF EXISTS MyTable");
OnCreate(db);
}
}</textarea></div><div class="crayon-info"></div>
			<div class="crayon-main" style="">
				<table class="crayon-table" cellpadding="0" cellspacing="0">
					<tr class="crayon-row">
				<td class="crayon-nums " settings="show">
					<div class="crayon-nums-content"><div class="crayon-num">1</div><div class="crayon-num crayon-striped-num">2</div><div class="crayon-num">3</div><div class="crayon-num crayon-striped-num">4</div><div class="crayon-num">5</div><div class="crayon-num crayon-striped-num">6</div><div class="crayon-num">7</div><div class="crayon-num crayon-striped-num">8</div><div class="crayon-num">9</div><div class="crayon-num crayon-striped-num">10</div><div class="crayon-num">11</div><div class="crayon-num crayon-striped-num">12</div><div class="crayon-num">13</div><div class="crayon-num crayon-striped-num">14</div><div class="crayon-num">15</div><div class="crayon-num crayon-striped-num">16</div><div class="crayon-num">17</div><div class="crayon-num crayon-striped-num">18</div><div class="crayon-num">19</div><div class="crayon-num crayon-striped-num">20</div><div class="crayon-num">21</div></div>
				</td>
						<td class="crayon-code"><div class="crayon-pre"><div class="crayon-line" id="line-1"><span class="m ">public</span><span class="h "> </span><span class="t ">class</span><span class="h "> </span><span class="i ">Database</span><span class="h "> </span><span class="o ">:</span><span class="h "> </span><span class="i ">Android</span><span class="sy ">.</span><span class="v ">Database</span><span class="sy ">.</span><span class="v ">Sqlite</span><span class="sy ">.</span><span class="v ">SQLiteOpenHelper</span><span class="sy ">,</span><span class="h "> </span><span class="e ">IDatabase</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-2"><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-3"><span class="m ">private</span><span class="h "> </span><span class="m ">const</span><span class="h "> </span><span class="t ">string</span><span class="h "> </span><span class="i ">DATABASE_NAME</span><span class="h "> </span><span class="o ">=</span><span class="h "> </span><span class="s ">"MyDatabase"</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-4"><span class="m ">private</span><span class="h "> </span><span class="m ">const</span><span class="h "> </span><span class="t ">int</span><span class="h "> </span><span class="i ">DATABASE_VERSION</span><span class="h "> </span><span class="o ">=</span><span class="h "> </span><span class="cn ">1</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-5"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-6"><span class="m ">public</span><span class="h "> </span><span class="e ">Database</span><span class="sy ">(</span><span class="i ">Android</span><span class="sy ">.</span><span class="v ">Content</span><span class="sy ">.</span><span class="v ">Context</span><span class="h "> </span><span class="i ">context</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-7"><span class="o ">:</span><span class="h "> </span><span class="r ">base</span><span class="sy ">(</span><span class="i ">context</span><span class="sy ">,</span><span class="h "> </span><span class="i ">DATABASE_NAME</span><span class="sy ">,</span><span class="h "> </span><span class="t ">null</span><span class="sy ">,</span><span class="h "> </span><span class="i ">DATABASE_VERSION</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-8"><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-9"><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-10"><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-11"><span class="m ">public</span><span class="h "> </span><span class="m ">override</span><span class="h "> </span><span class="t ">void</span><span class="h "> </span><span class="e ">OnCreate</span><span class="sy ">(</span><span class="i ">SQLiteDatabase</span><span class="h "> </span><span class="i ">db</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-12"><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-13"><span class="i ">db</span><span class="sy ">.</span><span class="e ">ExecSQL</span><span class="sy ">(</span><span class="sy ">@</span><span class="s ">"CREATE TABLE MyTable (id INT PRIMARY KEY, comments TEXT NOT NULL"</span><span class="sy ">)</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-14"><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-15"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-16"><span class="m ">public</span><span class="h "> </span><span class="m ">override</span><span class="h "> </span><span class="t ">void</span><span class="h "> </span><span class="e ">OnUpgrade</span><span class="sy ">(</span><span class="i ">SQLiteDatabase</span><span class="h "> </span><span class="i ">db</span><span class="sy ">,</span><span class="h "> </span><span class="t ">int</span><span class="h "> </span><span class="i ">oldVersion</span><span class="sy ">,</span><span class="h "> </span><span class="t ">int</span><span class="h "> </span><span class="i ">newVersion</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-17"><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-18"><span class="i ">db</span><span class="sy ">.</span><span class="e ">ExecSQL</span><span class="sy ">(</span><span class="s ">"DROP TABLE IF EXISTS MyTable"</span><span class="sy ">)</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-19"><span class="e ">OnCreate</span><span class="sy ">(</span><span class="i ">db</span><span class="sy ">)</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-20"><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-21"><span class="sy ">}</span><span class="h "></span></div></div></td>
					</tr>
				</table>
			</div>
		</div>
<!-- [Parse Time: 0.0000 seconds] [Format Time: 0.0838 seconds] -->

</p>
<p>It is important to note that OnCreate is ONLY called when the database is accessed for the very first time, subsequent calls are ignored. If the DB already exists, it is ignored, OnUpgrade is called only if the version number has been incremented, the database already exists and when the database is accessed for the first time per that instance.  Also to note is that I am taking an extremely lazy approach to upgrade where I simply drop the tables and re-create them, obviously not ideal for real world scenario because you would lose all your data.</p>
<p>At the top of the file I am defining two constants, DATABASE_NAME and DATABASE_VERSION which I mentioned above briefly is used for upgrade scenarios. The name is the actual name the DB file will end up being names on the Android file system.  In order to browse the file system you will need to have your Android device rooted or you will need to have a developer Android device that you obtained directly from Google.</p>
<p>These instructions pertain to (Windows users only, the commands will be similar however on OSX)</p>
<ol>
<li>Open cmd</li>
<li>Type &#8216;adb shell&#8217;, if you get an error type &#8216;adb kill-server&#8217; and try again.</li>
<li>Type &#8216;su&#8217; (for super user access, your phone must be rooted or be dev phone)</li>
<li>Once you are in the shell, type ls (you will notice its a linux shell)</li>
<li>Type &#8216;cd data/data&#8217;, it will list out all of the directories</li>
<li>Type &#8216;ls data&#8217;, and find your applications directory</li>
<li>Type cd &lt;com.company.appname&gt;</li>
<li>Type cd &#8216;databases&#8217;</li>
<li>Type &#8216;ls&#8217; to look at your databases</li>
<li>Note the name of your database matches your constant defined above (if everything worked&#8230;)</li>
<li>Type &#8216;pwd&#8217; (print working directory)</li>
<li>Copy the path of this directory to Notepad or somewhere safe</li>
</ol>
<p>To browse the database you can download <a href="http://sqlitebrowser.sourceforge.net/">SQLite Database Browser</a> for free, and do the following.</p>
<div>
<ol>
<li>In order to browse the database your must copy the db file from your Android device onto your computer, I created a batch file for this and I run it when I need to take a look at something.</li>
<li>Open &#8216;cmd&#8217; prompts</li>
<li>Type &#8216;adb pull &lt;path of db file&gt; &lt;local path&gt;&#8217; for example &#8216;adb pull /data/data/com.elucidsoft.myapp/databases/MyDatabase D:\MyDatabase</li>
<li>Open up SQLite Database Browser</li>
<li>File -&gt; Open -&gt; D:\MyDatabase</li>
<li>Whenever you need to see the new version you need to File -&gt; Close Database, and repeat step 3, otherwise it can not copy over an in-use database file</li>
</ol>
<p>I hope this helps you when working with SQLite on Android, it definitely helps me!</p>
</div>
<div class="shr-publisher-145"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F12%2F31%2Fmono-android-working-with-sqlite%2F' data-shr_title='Mono+Android%3A+Working+with+SQLite'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F12%2F31%2Fmono-android-working-with-sqlite%2F' data-shr_title='Mono+Android%3A+Working+with+SQLite'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F12%2F31%2Fmono-android-working-with-sqlite%2F' data-shr_title='Mono+Android%3A+Working+with+SQLite'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=145&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/11/mono-android-marquee-text-view-2/' rel='bookmark' title='Mono Android: Marquee Text View'>Mono Android: Marquee Text View</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mono Android: Using Logcat Effectively</title>
		<link>http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mono-android-using-logcat-effectively</link>
		<comments>http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 21:13:53 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=138</guid>
		<description><![CDATA[In my previous post I showed how you can use adb and logcat to help debug your Mono Android application.  Well I have further refined the ability to use logcat with filters to get rid of all the cruft, with the following command you will only see Mono Android related issues for your application: C# cmd [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>In my <a href="http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/">previous post</a> I showed how you can use adb and logcat to help debug your Mono Android application.  Well I have further refined the ability to use logcat with filters to get rid of all the cruft, with the following command you will only see Mono Android related issues for your application:<br />


<!-- Crayon Syntax Highlighter v1.5.1 -->
<link rel="stylesheet" type="text/css" href="http://www.elucidsoft.com/blog/wp-content/plugins/crayon-syntax-highlighter/fonts/monospace.css?ver1.5.1" />

		<div id="crayon-524cef52c4011" class="crayon-syntax crayon-theme-classic crayon-font-monospace" crayon-os="mac" settings=" scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both;">
		
			<div class="crayon-toolbar" settings=" mouseover delay">
			<div class="crayon-tools"><a href="#" class="crayon-nums-button crayon-button" title="Toggle Line Numbers" onclick="toggle_nums('crayon-524cef52c4011'); return false;"></a><a href="#" class="crayon-copy-button crayon-button" title="Copy Plain Code" onclick="copy_plain('crayon-524cef52c4011'); return false;"></a><a href="#" class="crayon-popup-button crayon-button" title="Open Code in Window" onclick="return false;"></a><a href="#" class="crayon-plain-button crayon-button" title="Toggle Plain Code" onclick="toggle_plain('crayon-524cef52c4011'); return false;"></a><span class="crayon-language">C#</span></div>
			</div><div><textarea class="crayon-plain" settings="dblclick" readonly  wrap="off" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">cmd /c "C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" logcat setprop debug.mono.trace ActivityManager:* WindowManager:* AndroidRuntime:* MonoDroid:* dalvikvm:* mono *:E *:S</textarea></div><div class="crayon-info"></div>
			<div class="crayon-main" style="">
				<table class="crayon-table" cellpadding="0" cellspacing="0">
					<tr class="crayon-row">
				<td class="crayon-nums " settings="hide">
					<div class="crayon-nums-content"><div class="crayon-num">1</div></div>
				</td>
						<td class="crayon-code"><div class="crayon-pre"><div class="crayon-line" id="line-1"><span class="i ">cmd</span><span class="h "> </span><span class="o ">/</span><span class="i ">c</span><span class="h "> </span><span class="s ">"C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe"</span><span class="h "> </span><span class="i ">logcat</span><span class="h "> </span><span class="i ">setprop</span><span class="h "> </span><span class="i ">debug</span><span class="sy ">.</span><span class="v ">mono</span><span class="sy ">.</span><span class="v ">trace</span><span class="h "> </span><span class="i ">ActivityManager</span><span class="o ">:</span><span class="o ">*</span><span class="h "> </span><span class="i ">WindowManager</span><span class="o ">:</span><span class="o ">*</span><span class="h "> </span><span class="i ">AndroidRuntime</span><span class="o ">:</span><span class="o ">*</span><span class="h "> </span><span class="i ">MonoDroid</span><span class="o ">:</span><span class="o ">*</span><span class="h "> </span><span class="i ">dalvikvm</span><span class="o ">:</span><span class="o ">*</span><span class="h "> </span><span class="i ">mono</span><span class="h "> </span><span class="o ">*</span><span class="o ">:</span><span class="i ">E</span><span class="h "> </span><span class="o ">*</span><span class="o ">:</span><span class="i ">S</span><span class="h "></span></div></div></td>
					</tr>
				</table>
			</div>
		</div>
<!-- [Parse Time: 0.0000 seconds] [Format Time: 0.0020 seconds] -->

</p>
<p>Each filter is defined by &lt;name&gt;:&lt;wild card&gt;, so this filters logcat by &#8220;ActivityManager&#8221;, &#8220;WindowManager&#8221;, &#8220;AndroidRuntime&#8221;, &#8220;dalvikvm&#8221;, &#8220;mono&#8221; and the &#8220;E&#8221;, and &#8220;S&#8221; are types of log activity which are reversed because we don&#8217;t care what they come from since we already defined that filter, but instead we want ALL types for &#8220;E&#8221; and &#8220;S&#8221; of the filters we just defined.</p>
<p>Just drop it in a batch file on your desktop and launch it, keep it open the entire time you do your development.  Occasionally you might lose your adb connection, if that happens just type adb logcat in the shell to restart it over again.</p>
<p><em><strong>Update: Added MonoDroid:* to capture some missing log information&#8230;</strong></em></p>
<div class="shr-publisher-138"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F27%2Fmono-android-using-logcat-effectively%2F' data-shr_title='Mono+Android%3A+Using+Logcat+Effectively'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F27%2Fmono-android-using-logcat-effectively%2F' data-shr_title='Mono+Android%3A+Using+Logcat+Effectively'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F27%2Fmono-android-using-logcat-effectively%2F' data-shr_title='Mono+Android%3A+Using+Logcat+Effectively'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=138&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mono Android: Marquee Text View</title>
		<link>http://www.elucidsoft.com/blog/2011/11/11/mono-android-marquee-text-view-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mono-android-marquee-text-view-2</link>
		<comments>http://www.elucidsoft.com/blog/2011/11/11/mono-android-marquee-text-view-2/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 05:22:14 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=137</guid>
		<description><![CDATA[On mobile devices you have a limited set of real estate on the screen, often the text you need to display is to long to be shown.  You have several options, you can wrap it and take up additional vertical space, you ellipse it and expand it in a dialog, or you can scroll it [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/12/mono-android-linking-xamarin/' rel='bookmark' title='Mono Android Linking (Xamarin)'>Mono Android Linking (Xamarin)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>On mobile devices you have a limited set of real estate on the screen, often the text you need to display is to long to be shown.  You have several options, you can wrap it and take up additional vertical space, you ellipse it and expand it in a dialog, or you can scroll it marquee style to display it. Android supports all of these options, the one I chose to use for certain situations is marquee because its unobtrusive and can easily display the data to the user with zero interaction on their part.</p>
<p>There are some issues with the control unfortunately, one of them being the default behavior is to not marquee the text unless the TextView has focus.  The fix to this in Android is easy, inherit from TextView and override a couple of methods.  In Mono Android it was not so clear, I fussed with this for a while before diving into reflection to actually figure out how to get this to work.</p>
<p>Here is the code to allow a Marquee TextView in Mono Android:<br />


<!-- Crayon Syntax Highlighter v1.5.1 -->
<link rel="stylesheet" type="text/css" href="http://www.elucidsoft.com/blog/wp-content/plugins/crayon-syntax-highlighter/fonts/monospace.css?ver1.5.1" />

		<div id="crayon-524cef54d1bfb" class="crayon-syntax crayon-theme-classic crayon-font-monospace" crayon-os="mac" settings=" scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; float: none; clear: both;">
		
			<div class="crayon-toolbar" settings=" mouseover overlay hide delay">
			<div class="crayon-tools"><a href="#" class="crayon-nums-button crayon-button" title="Toggle Line Numbers" onclick="toggle_nums('crayon-524cef54d1bfb'); return false;"></a><a href="#" class="crayon-copy-button crayon-button" title="Copy Plain Code" onclick="copy_plain('crayon-524cef54d1bfb'); return false;"></a><a href="#" class="crayon-popup-button crayon-button" title="Open Code in Window" onclick="return false;"></a><a href="#" class="crayon-plain-button crayon-button" title="Toggle Plain Code" onclick="toggle_plain('crayon-524cef54d1bfb'); return false;"></a><span class="crayon-language">C#</span></div>
			</div><div><textarea class="crayon-plain" settings="dblclick" readonly  wrap="off" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">  public class MarqueeTextView : TextView
    {
        [Register(".ctor", "(Landroid/content/Context;)V", "")]
        public MarqueeTextView(Context context)
            : base(context) { }

        public MarqueeTextView(IntPtr doNotUse)
            : base(doNotUse) { }

        [Register(".ctor", "(Landroid/content/Context;Landroid/util/AttributeSet;)V", "")]
        public MarqueeTextView(Context context, IAttributeSet attrs)
            : base(context, attrs) { }

        [Register(".ctor", "(Landroid/content/Context;Landroid/util/AttributeSet;I)V", "")]
        public MarqueeTextView(Context context, IAttributeSet attrs, int defStyle)
            : base(context, attrs, defStyle) { }

        protected override void OnFocusChanged(bool gainFocus, FocusSearchDirection direction, Android.Graphics.Rect previouslyFocusedRect)
        {
            if (gainFocus)
                base.OnFocusChanged(gainFocus, direction, previouslyFocusedRect);
        }

        public override void OnWindowFocusChanged(bool hasWindowFocus)
        {
            if (hasWindowFocus)
                base.OnWindowFocusChanged(hasWindowFocus);
        }

        public override bool IsFocused
        {
            get
            {
                return true;
            }
        }
    }</textarea></div><div class="crayon-info"></div>
			<div class="crayon-main" style="">
				<table class="crayon-table" cellpadding="0" cellspacing="0">
					<tr class="crayon-row">
				<td class="crayon-nums " settings="show">
					<div class="crayon-nums-content"><div class="crayon-num">1</div><div class="crayon-num crayon-striped-num">2</div><div class="crayon-num">3</div><div class="crayon-num crayon-striped-num">4</div><div class="crayon-num">5</div><div class="crayon-num crayon-striped-num">6</div><div class="crayon-num">7</div><div class="crayon-num crayon-striped-num">8</div><div class="crayon-num">9</div><div class="crayon-num crayon-striped-num">10</div><div class="crayon-num">11</div><div class="crayon-num crayon-striped-num">12</div><div class="crayon-num">13</div><div class="crayon-num crayon-striped-num">14</div><div class="crayon-num">15</div><div class="crayon-num crayon-striped-num">16</div><div class="crayon-num">17</div><div class="crayon-num crayon-striped-num">18</div><div class="crayon-num">19</div><div class="crayon-num crayon-striped-num">20</div><div class="crayon-num">21</div><div class="crayon-num crayon-striped-num">22</div><div class="crayon-num">23</div><div class="crayon-num crayon-striped-num">24</div><div class="crayon-num">25</div><div class="crayon-num crayon-striped-num">26</div><div class="crayon-num">27</div><div class="crayon-num crayon-striped-num">28</div><div class="crayon-num">29</div><div class="crayon-num crayon-striped-num">30</div><div class="crayon-num">31</div><div class="crayon-num crayon-striped-num">32</div><div class="crayon-num">33</div><div class="crayon-num crayon-striped-num">34</div><div class="crayon-num">35</div><div class="crayon-num crayon-striped-num">36</div><div class="crayon-num">37</div></div>
				</td>
						<td class="crayon-code"><div class="crayon-pre"><div class="crayon-line" id="line-1"><span class="h ">  </span><span class="m ">public</span><span class="h "> </span><span class="t ">class</span><span class="h "> </span><span class="i ">MarqueeTextView</span><span class="h "> </span><span class="o ">:</span><span class="h "> </span><span class="e ">TextView</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-2"><span class="h ">    </span><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-3"><span class="h ">        </span><span class="sy ">[</span><span class="e ">Register</span><span class="sy ">(</span><span class="s ">".ctor"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">"(Landroid/content/Context;)V"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">""</span><span class="sy ">)</span><span class="sy ">]</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-4"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="e ">MarqueeTextView</span><span class="sy ">(</span><span class="i ">Context</span><span class="h "> </span><span class="i ">context</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-5"><span class="h ">            </span><span class="o ">:</span><span class="h "> </span><span class="r ">base</span><span class="sy ">(</span><span class="i ">context</span><span class="sy ">)</span><span class="h "> </span><span class="sy ">{</span><span class="h "> </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-6"><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-7"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="e ">MarqueeTextView</span><span class="sy ">(</span><span class="i ">IntPtr</span><span class="h "> </span><span class="i ">doNotUse</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-8"><span class="h ">            </span><span class="o ">:</span><span class="h "> </span><span class="r ">base</span><span class="sy ">(</span><span class="i ">doNotUse</span><span class="sy ">)</span><span class="h "> </span><span class="sy ">{</span><span class="h "> </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-9"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-10"><span class="h ">        </span><span class="sy ">[</span><span class="e ">Register</span><span class="sy ">(</span><span class="s ">".ctor"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">"(Landroid/content/Context;Landroid/util/AttributeSet;)V"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">""</span><span class="sy ">)</span><span class="sy ">]</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-11"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="e ">MarqueeTextView</span><span class="sy ">(</span><span class="i ">Context</span><span class="h "> </span><span class="i ">context</span><span class="sy ">,</span><span class="h "> </span><span class="i ">IAttributeSet</span><span class="h "> </span><span class="i ">attrs</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-12"><span class="h ">            </span><span class="o ">:</span><span class="h "> </span><span class="r ">base</span><span class="sy ">(</span><span class="i ">context</span><span class="sy ">,</span><span class="h "> </span><span class="i ">attrs</span><span class="sy ">)</span><span class="h "> </span><span class="sy ">{</span><span class="h "> </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-13"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-14"><span class="h ">        </span><span class="sy ">[</span><span class="e ">Register</span><span class="sy ">(</span><span class="s ">".ctor"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">"(Landroid/content/Context;Landroid/util/AttributeSet;I)V"</span><span class="sy ">,</span><span class="h "> </span><span class="s ">""</span><span class="sy ">)</span><span class="sy ">]</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-15"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="e ">MarqueeTextView</span><span class="sy ">(</span><span class="i ">Context</span><span class="h "> </span><span class="i ">context</span><span class="sy ">,</span><span class="h "> </span><span class="i ">IAttributeSet</span><span class="h "> </span><span class="i ">attrs</span><span class="sy ">,</span><span class="h "> </span><span class="t ">int</span><span class="h "> </span><span class="i ">defStyle</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-16"><span class="h ">            </span><span class="o ">:</span><span class="h "> </span><span class="r ">base</span><span class="sy ">(</span><span class="i ">context</span><span class="sy ">,</span><span class="h "> </span><span class="i ">attrs</span><span class="sy ">,</span><span class="h "> </span><span class="i ">defStyle</span><span class="sy ">)</span><span class="h "> </span><span class="sy ">{</span><span class="h "> </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-17"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-18"><span class="h ">        </span><span class="m ">protected</span><span class="h "> </span><span class="m ">override</span><span class="h "> </span><span class="t ">void</span><span class="h "> </span><span class="e ">OnFocusChanged</span><span class="sy ">(</span><span class="t ">bool</span><span class="h "> </span><span class="i ">gainFocus</span><span class="sy ">,</span><span class="h "> </span><span class="i ">FocusSearchDirection</span><span class="h "> </span><span class="i ">direction</span><span class="sy ">,</span><span class="h "> </span><span class="i ">Android</span><span class="sy ">.</span><span class="v ">Graphics</span><span class="sy ">.</span><span class="v ">Rect</span><span class="h "> </span><span class="i ">previouslyFocusedRect</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-19"><span class="h ">        </span><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-20"><span class="h ">            </span><span class="st ">if</span><span class="h "> </span><span class="sy ">(</span><span class="i ">gainFocus</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-21"><span class="h ">                </span><span class="r ">base</span><span class="sy ">.</span><span class="e ">OnFocusChanged</span><span class="sy ">(</span><span class="i ">gainFocus</span><span class="sy ">,</span><span class="h "> </span><span class="i ">direction</span><span class="sy ">,</span><span class="h "> </span><span class="i ">previouslyFocusedRect</span><span class="sy ">)</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-22"><span class="h ">        </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-23"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-24"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="m ">override</span><span class="h "> </span><span class="t ">void</span><span class="h "> </span><span class="e ">OnWindowFocusChanged</span><span class="sy ">(</span><span class="t ">bool</span><span class="h "> </span><span class="i ">hasWindowFocus</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-25"><span class="h ">        </span><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-26"><span class="h ">            </span><span class="st ">if</span><span class="h "> </span><span class="sy ">(</span><span class="i ">hasWindowFocus</span><span class="sy ">)</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-27"><span class="h ">                </span><span class="r ">base</span><span class="sy ">.</span><span class="e ">OnWindowFocusChanged</span><span class="sy ">(</span><span class="i ">hasWindowFocus</span><span class="sy ">)</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-28"><span class="h ">        </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-29"><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-30"><span class="h ">        </span><span class="m ">public</span><span class="h "> </span><span class="m ">override</span><span class="h "> </span><span class="t ">bool</span><span class="h "> </span><span class="e ">IsFocused</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-31"><span class="h ">        </span><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-32"><span class="h ">            </span><span class="e ">get</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-33"><span class="h ">            </span><span class="sy ">{</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-34"><span class="h ">                </span><span class="st ">return</span><span class="h "> </span><span class="t ">true</span><span class="sy ">;</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-35"><span class="h ">            </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line crayon-striped-line" id="line-36"><span class="h ">        </span><span class="sy ">}</span><span class="h "></span><span class="h "></span></div><div class="crayon-line" id="line-37"><span class="h ">    </span><span class="sy ">}</span><span class="h "></span></div></div></td>
					</tr>
				</table>
			</div>
		</div>
<!-- [Parse Time: 0.0000 seconds] [Format Time: 0.1053 seconds] -->

</p>
<div class="shr-publisher-137"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F11%2Fmono-android-marquee-text-view-2%2F' data-shr_title='Mono+Android%3A+Marquee+Text+View'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F11%2Fmono-android-marquee-text-view-2%2F' data-shr_title='Mono+Android%3A+Marquee+Text+View'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F11%2F11%2Fmono-android-marquee-text-view-2%2F' data-shr_title='Mono+Android%3A+Marquee+Text+View'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=137&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/12/mono-android-linking-xamarin/' rel='bookmark' title='Mono Android Linking (Xamarin)'>Mono Android Linking (Xamarin)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/11/11/mono-android-marquee-text-view-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Site Redesign Done&#8230;</title>
		<link>http://www.elucidsoft.com/blog/2011/09/07/131/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=131</link>
		<comments>http://www.elucidsoft.com/blog/2011/09/07/131/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 23:19:46 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[company/business]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=131</guid>
		<description><![CDATA[I have been working on the new site design for what seems ages now and its finally up! The changes are subtle but noticeable, there may be some caching issues with your browser if it looks all crazy.  I tried to mitigate this with some htcaccess rules but due to the way I handled caching [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/03/20/site-maintenance/' rel='bookmark' title='Site Maintenance'>Site Maintenance</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/05/16/our-new-face/' rel='bookmark' title='Our new face!'>Our new face!</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/05/08/new-site-design-and-wordpress-theme/' rel='bookmark' title='New Site Design and WordPress Theme'>New Site Design and WordPress Theme</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>I have been working on the new site design for what seems ages now and its finally up! The changes are subtle but noticeable, there may be some caching issues with your browser if it looks all crazy.  I tried to mitigate this with some htcaccess rules but due to the way I handled caching prior it may cause issues this time around, lesson learned. Just refresh your browser if something looks broken to get the new content.</p>
<p>As for the changes, I cleaned up the site quite a bit, everything aligns to the grid more evenly now. Cleaned the logo up, reduced number of fonts down to two or three depending on the page.  Also cleaned up the blog theme to match the site, fixed some sizing issues, added gzip compression, and the backbone is powered by a custom php templating engine I slapped together.</p>
<p>Oh, and I also finally added the BlackOut product page! <img src='http://www.elucidsoft.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="shr-publisher-131"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F09%2F07%2F131%2F' data-shr_title='Site+Redesign+Done...'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F09%2F07%2F131%2F' data-shr_title='Site+Redesign+Done...'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F09%2F07%2F131%2F' data-shr_title='Site+Redesign+Done...'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=131&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/03/20/site-maintenance/' rel='bookmark' title='Site Maintenance'>Site Maintenance</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/05/16/our-new-face/' rel='bookmark' title='Our new face!'>Our new face!</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/05/08/new-site-design-and-wordpress-theme/' rel='bookmark' title='New Site Design and WordPress Theme'>New Site Design and WordPress Theme</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/09/07/131/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InfiniteListView Mono Android</title>
		<link>http://www.elucidsoft.com/blog/2011/08/31/infinitelistview-mono-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=infinitelistview-mono-android</link>
		<comments>http://www.elucidsoft.com/blog/2011/08/31/infinitelistview-mono-android/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 01:49:44 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=130</guid>
		<description><![CDATA[Been working with Mono Android a lot lately and thought I would give a quick example at something that I think is very useful.  I have created a quick example of how to create an InfiniteListView using Mono for Android and the .NET Framework. It’s pretty simple, but at the same time kind of hard [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Been working with Mono Android a lot lately and thought I would give a quick example at something that I think is very useful.  I have created a quick example of how to create an InfiniteListView using Mono for Android and the .NET Framework.</p>
<p>It’s pretty simple, but at the same time kind of hard to get right.  You can <a href="http://www.elucidsoft.com/files/InfiniteListExample.zip">download the example here</a>. It is commented in the sections that I think are relevant to describe exactly what to watch out for and how/why it is that way.</p>
<div class="shr-publisher-130"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F31%2Finfinitelistview-mono-android%2F' data-shr_title='InfiniteListView+Mono+Android'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F31%2Finfinitelistview-mono-android%2F' data-shr_title='InfiniteListView+Mono+Android'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F31%2Finfinitelistview-mono-android%2F' data-shr_title='InfiniteListView+Mono+Android'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=130&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/08/31/infinitelistview-mono-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Mono Android Debugging Tips</title>
		<link>http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-mono-android-debugging-tips</link>
		<comments>http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 21:10:39 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=128</guid>
		<description><![CDATA[Install the new Mono Android release 1.0.3, which substantially improves debugging performance and various other problems.  You can read more about it, and download it from here. If you followed the instructions of my previous post, I have gathered even more information on how to improve the logcat experience.  Create a bat file on your [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><ol>
<li>Install the new Mono Android release 1.0.3, which substantially improves debugging performance and various other problems.  You can <a href="http://android.xamarin.com/Releases/Mono_for_Android_1/Release_1.0.3">read more about it, and download it from here</a>.</li>
<li>If you followed the instructions of my previous post, I have gathered even more information on how to improve the logcat experience.  Create a bat file on your desktop and add the following lines:</li>
</ol>
<div style="font-size: 11px; padding-top: 10px; padding-left: 10px;"><strong>cmd /C &#8220;C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe&#8221; adb shell setprop debug.mono.trace E:all</strong></div>
<div style="font-size: 11px; padding-left: 10px;"><strong>cmd /K &#8220;C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe&#8221; logcat</strong></div>
<p>The first command enables verbose logging for mono, note that I do not know if this will decrease performance but I can only imagine it will since it has to log more often and in more places.  If you are testing performance in your app I suggest you do not keep this enabled.  If you are testing memory usage, or you want the FULL details of every single stack trace, crash, etc than definitely keep this setting.</p>
<p>Now to launch logcat I simply double click the bat file, much easier&#8230;.</p>
<div class="shr-publisher-128"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F26%2Fmore-mono-android-debugging-tips%2F' data-shr_title='More+Mono+Android+Debugging+Tips'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F26%2Fmore-mono-android-debugging-tips%2F' data-shr_title='More+Mono+Android+Debugging+Tips'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F26%2Fmore-mono-android-debugging-tips%2F' data-shr_title='More+Mono+Android+Debugging+Tips'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=128&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mono Android Debugging</title>
		<link>http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mono-android-debugging</link>
		<comments>http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 20:14:46 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=124</guid>
		<description><![CDATA[I thought I would share a series of tips what I have found to most useful while working with Mono Android.  I will post them as I discover new ways, for now I am going to start with the most basic version of debugging on Android and its using LogCat.  To get the most out [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>I thought I would share a series of tips what I have found to most useful while working with Mono Android.  I will post them as I discover new ways, for now I am going to start with the most basic version of debugging on Android and its using LogCat.  To get the most out of LogCat there are several tweaks I recommend, these instructions apply to Windows since I use Visual Studio as my development IDE.</p>
<p>First, have a multi-monitor development environment.  I have three monitors, which is ideal since you can browse the web for help, documentation, etc. on minitor 1, do all your coding &amp; work on monitor 2, and have your logging and other various diagnostic windows on window 3.</p>
<p>LogCat is a program located in the adb shell for Android, adb is a program located at Android-SDK\android-sdk\platform-tools directory.  To execute LogCat,</p>
<ol>
<li>Open a cmd prompt</li>
<li>Change directory to the adb applications in the Android-SDK folder</li>
<li>Type: adb logcat</li>
</ol>
<p>For an optimal experience I suggest you tweak the cmd windows options, to do this click in the upper left hand window of the cmd window on the icon itself and choose properties. I set my cmd window properties as such and then set LogCat maximzed to the entire screen.  LogCat is realtime, so you will see every event that is occuring on your Android device which is extremely helpful.</p>
<p>My cmd properties:</p>

<a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/font/' title='font'><img width="150" height="150" src="http://www.elucidsoft.com/blog/wp-content/uploads/2011/08/font-150x150.png" class="attachment-thumbnail" alt="font" title="font" /></a>
<a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/layout/' title='layout'><img width="150" height="150" src="http://www.elucidsoft.com/blog/wp-content/uploads/2011/08/layout-150x150.png" class="attachment-thumbnail" alt="layout" title="layout" /></a>
<a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/options/' title='options'><img width="150" height="150" src="http://www.elucidsoft.com/blog/wp-content/uploads/2011/08/options-150x150.png" class="attachment-thumbnail" alt="options" title="options" /></a>

<p>Occasionally LogCat may disconnect, or lost connection.  Simply type adb logcat again in the cmd window to relaunch it.  If you are experiencing issues where it can&#8217;t connect load Task Manager and kill adb.exe and try again.</p>
<div class="shr-publisher-124"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F14%2Fmono-android-debugging%2F' data-shr_title='Mono+Android+Debugging'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F14%2Fmono-android-debugging%2F' data-shr_title='Mono+Android+Debugging'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F14%2Fmono-android-debugging%2F' data-shr_title='Mono+Android+Debugging'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=124&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/12/31/mono-android-working-with-sqlite/' rel='bookmark' title='Mono Android: Working with SQLite'>Mono Android: Working with SQLite</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mono Android Linking (Xamarin)</title>
		<link>http://www.elucidsoft.com/blog/2011/08/12/mono-android-linking-xamarin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mono-android-linking-xamarin</link>
		<comments>http://www.elucidsoft.com/blog/2011/08/12/mono-android-linking-xamarin/#comments</comments>
		<pubDate>Sat, 13 Aug 2011 03:30:24 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Mono]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=121</guid>
		<description><![CDATA[As mentioned on this blog post, setting Linking to Sdk and User Assemblies for Mono Android is a good idea.  It not only reduces the overall footprint of your application, but it drastically increases performance as well.  I noticed a pretty substantial difference in both when I turned it on.  I also noticed my application [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>As mentioned on this <a href="http://spouliot.wordpress.com/2011/08/11/when-to-link-monotouch-applications/">blog post</a>, setting Linking to Sdk and User Assemblies for Mono Android is a good idea.  It not only reduces the overall footprint of your application, but it drastically increases performance as well.  I noticed a pretty substantial difference in both when I turned it on.  I also noticed my application crashed, it crashed because I have an assembly where I keep all of my serializable xml types.  If you take a look at Xamarin <a href="http://android.xamarin.com/Documentation/Linking">help</a>, you will see where there are several solutions to this, in fact the <a href="http://spouliot.wordpress.com/2011/08/11/when-to-link-monotouch-applications/">blog post</a> I mentioned also discusses a couple.</p>
<p>For my situation, I have an assembly that only contains serializable classes.  So the best course of action is to simply exclude this assembly entirely from Linking, you can do this easily by download MonoDevelop and installing the Android package.  Then open up your solution, go to project options for your main project (start project), select &#8220;Mono for Android Build&#8221; and set &#8220;Extra arguments&#8221; to &#8220;-linkskip=&lt;assemblyName as you can also see in the screenshot below:</p>
<p><a href="http://www.elucidsoft.com/blog/wp-content/uploads/2011/08/monodevelop.png"><img class="alignnone size-full wp-image-122" title="monodevelop" src="http://www.elucidsoft.com/blog/wp-content/uploads/2011/08/monodevelop.png" alt="" width="568" height="162" /></a></p>
<p>You can also do this much easier in Visual Studio by simply right clicking on your main project (start project), choose &#8220;Unload Project&#8221;, at which point it will appear grayed out, then right click it again and choose &#8220;Edit&#8221;.  This will open it up in the text editor. Find the PropertyGroup with the Condition of &#8216;$(Configuration)|$(Platform)&#8217; == &#8216;Debug|AnyCPU&#8217; and at the bottom add the following line:</p>
<p>&lt;MandroidExtraArgs&gt;-linkskip=MyApp.Services.Metadata&lt;/MandroidExtraArgs&gt;</p>
<p>You may want to repeat this for the &#8216;$(Configuration)|$(Platform)&#8217; == &#8216;Release|AnyCPU&#8217; block as well so the release build will also do the link skipping of this assembly.</p>
<div class="shr-publisher-121"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F12%2Fmono-android-linking-xamarin%2F' data-shr_title='Mono+Android+Linking+%28Xamarin%29'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F12%2Fmono-android-linking-xamarin%2F' data-shr_title='Mono+Android+Linking+%28Xamarin%29'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F08%2F12%2Fmono-android-linking-xamarin%2F' data-shr_title='Mono+Android+Linking+%28Xamarin%29'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=121&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/14/mono-android-debugging/' rel='bookmark' title='Mono Android Debugging'>Mono Android Debugging</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/08/26/more-mono-android-debugging-tips/' rel='bookmark' title='More Mono Android Debugging Tips'>More Mono Android Debugging Tips</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/11/27/mono-android-using-logcat-effectively/' rel='bookmark' title='Mono Android: Using Logcat Effectively'>Mono Android: Using Logcat Effectively</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/08/12/mono-android-linking-xamarin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still Alive and Kicking!</title>
		<link>http://www.elucidsoft.com/blog/2011/06/22/still-alive-and-kicking/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=still-alive-and-kicking</link>
		<comments>http://www.elucidsoft.com/blog/2011/06/22/still-alive-and-kicking/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 21:30:42 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=118</guid>
		<description><![CDATA[Its been a while since I have posted anything, just wanted to let you know that I am still alive and kicking.  Working very hard on the next application and its coming along nicely.  It is the largest application that Elucidsoft will have to offer up to this point and I am very excited about [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/04/25/mobile-platforms-and-vertical-markets/' rel='bookmark' title='Mobile Platforms and Vertical Markets'>Mobile Platforms and Vertical Markets</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/08/02/agiledash-sp-being-delayed/' rel='bookmark' title='AgileDash SP Being Delayed'>AgileDash SP Being Delayed</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/12/28/sneak-peek-at-next-wp7-game-and-the-future/' rel='bookmark' title='Sneak Peek at Next WP7 Game and the future&#8230;'>Sneak Peek at Next WP7 Game and the future&#8230;</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Its been a while since I have posted anything, just wanted to let you know that I am still alive and kicking.  Working very hard on the next application and its coming along nicely.  It is the largest application that Elucidsoft will have to offer up to this point and I am very excited about it.  I hope to have it on the market by August and hopefully sooner.  The first release of the application will be for Android, with Windows Phone to follow shortly after, to be followed up by iPhone and iPad versions.  I plan to pull this cross platform deployment to all future applications we release!</p>
<p>So keep an eye out, I will post something as soon as its available.</p>
<div class="shr-publisher-118"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F06%2F22%2Fstill-alive-and-kicking%2F' data-shr_title='Still+Alive+and+Kicking%21'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F06%2F22%2Fstill-alive-and-kicking%2F' data-shr_title='Still+Alive+and+Kicking%21'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F06%2F22%2Fstill-alive-and-kicking%2F' data-shr_title='Still+Alive+and+Kicking%21'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=118&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/04/25/mobile-platforms-and-vertical-markets/' rel='bookmark' title='Mobile Platforms and Vertical Markets'>Mobile Platforms and Vertical Markets</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/08/02/agiledash-sp-being-delayed/' rel='bookmark' title='AgileDash SP Being Delayed'>AgileDash SP Being Delayed</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/12/28/sneak-peek-at-next-wp7-game-and-the-future/' rel='bookmark' title='Sneak Peek at Next WP7 Game and the future&#8230;'>Sneak Peek at Next WP7 Game and the future&#8230;</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/06/22/still-alive-and-kicking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Platforms and Vertical Markets</title>
		<link>http://www.elucidsoft.com/blog/2011/04/25/mobile-platforms-and-vertical-markets/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mobile-platforms-and-vertical-markets</link>
		<comments>http://www.elucidsoft.com/blog/2011/04/25/mobile-platforms-and-vertical-markets/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 01:48:02 +0000</pubDate>
		<dc:creator>Eric Malamisura</dc:creator>
				<category><![CDATA[company/business]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://www.elucidsoft.com/blog/?p=116</guid>
		<description><![CDATA[Let&#8217;s face it, mobile application development is targeted to a very small vertical market. Each platform being its own unique and distinct vertical market with some very minor horizontal growth.  If you focus on a single platform, you are not only limiting your applications growth to that market, but you are limiting your companies.  So how do [...]


Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/31/infinitelistview-mono-android/' rel='bookmark' title='InfiniteListView Mono Android'>InfiniteListView Mono Android</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/06/22/still-alive-and-kicking/' rel='bookmark' title='Still Alive and Kicking!'>Still Alive and Kicking!</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/08/02/agiledash-sp-being-delayed/' rel='bookmark' title='AgileDash SP Being Delayed'>AgileDash SP Being Delayed</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Let&#8217;s face it, mobile application development is targeted to a very small vertical market. Each platform being its own unique and distinct vertical market with some very minor horizontal growth.  If you focus on a single platform, you are not only limiting your applications growth to that market, but you are limiting your companies.  So how do you expand horizontally, without incurring massive expense?  Developing for multiple platforms is expensive, and time consuming.  Each platform has its own language, its own development tools, and their own unique constraints. The three platforms that IMO are worth discussing and targeting are Android, iOS, and Windows Phone 7.</p>
<p>For instance on Android you have to handle several different types of handsets, each with a unique screen type and resolution.   Each device may have some hardware components, while others may not, you may have a lot of memory on one and very little on the other, etc.  Android is also developed using Java with a custom framework.</p>
<p>The iOS devices on the other hand are an entirely different spectrum and at first glance bare nearly no similarities.  The iPhone has almost nearly the same specifications for all models, you know exactly what you are designing against.  iOS development is done using Objective-C with a custom framework, and you MUST have an Apple computer to do any kind of iOS development.</p>
<p>Next is Windows Phone 7 (WP7), which has a strong similarity to the way Android is handled but with key differences.  When Microsoft developed WP7 they setup a set of strict criteria that each WP7 handset must adhere to as a minimum specification.  So while you may not know exactly what you are targeting, you do know the minimum spec and you can develop against that in the very least.  WP7 development is done using the .NET Framework, with a custom framework for the phone.</p>
<p>So how do you target all three, without re-writing your code?  There are two solutions that I have found, and one that IMO is far superior and preferred.</p>
<p>The first option is to use <a href="http://www.appcelerator.com/products/titanium-cross-platform-application-development/" class="broken_link">Appcelerator Titanium</a>, its free and supports iPhone, iPad, and Android.  I would imagine when WP7 releases IE9 with HTML 5 support they may also be able to support WP7, but this speculation on my part.  The way Titanium works is you develop your app using JavaScript and a custom JavaScript Framework that they have developed.  You then compile your JavaScript using a custom compiler they have designed, it will then output a native Objective-C application (iPhone, iPad) from your JavaScript, or a native Java application (Android).  I have several problems with this, first you are developing everything in JavaScript.</p>
<p>It is very difficult to develop a rich application entirely in JavaScript, it is not very object oriented and just a pain.  Also based on my experience, their framework has several bugs and if you write the app for iPhone and expect it to work on Android as they advertise it doesn&#8217;t always turn out that way and you may end up tweaking things.</p>
<p>The second option, and the preferred in my opinion is to use <a href="http://www.mono-project.com/Main_Page">Mono</a>.  Mono is a project by Novell to develop an open source version of .NET that is nearly 100% compatible with Microsoft .NET.  Mono has released MonoTouch which is for iPad, iPhone and iPod; and Mono Android which is for Android.  The beauty of this is that you write a Windows Phone 7 app in native code, take that code and it will work with both <a href="http://monotouch.net/">MonoTouch </a>and <a href="http://mono-android.net/">Mono Android</a> with some exceptions.</p>
<p>The exception here is that you will need to build a separate UI for each platform, but the rest of your code such as the Data Layer, Business Layer, Domain Model, etc. can be reused. Another caveat is that they are not free, they cost quite a bit of money. But the reason I think this option is superior, especially if you are a .NET developer is that you get to work with the .NET Framework.  It is object oriented, is very feature rich, and you can bring in already built frameworks in most cases to use in your project.  It has things like OData, Serialization, WebServices, out of the box.</p>
<p>As you can see there is no perfect option, each one has its pros and cons.  But if you plan to succeed, you must target multiple platforms, try to spread your application horizontally across multiple verticals.  If you do this you can potentially increase your target audience from 2 million to 200 million.</p>
<p>You may be thinking some developers have made huge money and only targeted one platform, you may have read about them in the news in fact!  But these successes are extremely rare, so rare that they are published in the news, otherwise it wouldn&#8217;t be newsworthy material.  You have about the same odds of having that kind of success as winning the lottery, its far and few between.  But by being smart, increasing your target audience, you can still do very well!</p>
<div class="shr-publisher-116"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F04%2F25%2Fmobile-platforms-and-vertical-markets%2F' data-shr_title='Mobile+Platforms+and+Vertical+Markets'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F04%2F25%2Fmobile-platforms-and-vertical-markets%2F' data-shr_title='Mobile+Platforms+and+Vertical+Markets'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.elucidsoft.com%2Fblog%2F2011%2F04%2F25%2Fmobile-platforms-and-vertical-markets%2F' data-shr_title='Mobile+Platforms+and+Vertical+Markets'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.elucidsoft.com/blog/?ak_action=api_record_view&id=116&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.elucidsoft.com/blog/2011/08/31/infinitelistview-mono-android/' rel='bookmark' title='InfiniteListView Mono Android'>InfiniteListView Mono Android</a></li>
<li><a href='http://www.elucidsoft.com/blog/2011/06/22/still-alive-and-kicking/' rel='bookmark' title='Still Alive and Kicking!'>Still Alive and Kicking!</a></li>
<li><a href='http://www.elucidsoft.com/blog/2010/08/02/agiledash-sp-being-delayed/' rel='bookmark' title='AgileDash SP Being Delayed'>AgileDash SP Being Delayed</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.elucidsoft.com/blog/2011/04/25/mobile-platforms-and-vertical-markets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 23.263 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-10-02 23:15:33 -->
