<?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>Apkudo &#187; Uncategorized</title>
	<atom:link href="http://mspotten.com/wordpress/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://mspotten.com/wordpress</link>
	<description></description>
	<lastBuildDate>Mon, 05 Jan 2015 21:04:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Fire up the DRV. Josh Matthews appears on Bloomberg TV today!</title>
		<link>http://mspotten.com/wordpress/fire-up-the-drv-josh-matthews-appears-on-bloomberg-tv-today/</link>
		<comments>http://mspotten.com/wordpress/fire-up-the-drv-josh-matthews-appears-on-bloomberg-tv-today/#comments</comments>
		<pubDate>Mon, 24 Jun 2013 18:45:09 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=1081</guid>
		<description><![CDATA[Fresh off the heels of Apkudo&#8217;s FierceWireless &#8220;Fierce 15&#8221; award, Josh Matthews will appear on Bloomberg TV&#8217;s famed in-depth investor program &#8220;Taking Stock with Pimm Fox&#8221; today at 5:20 pm EST! Josh will sit down with Pimm to discuss what makes Apkudo fierce, the state of Android, and how Apkudo helps mobile network operators, device manufacturers, and application developers make fierce products. Watch &#8220;Taking Stock with Pimm Fox&#8221; on Bloomberg TV at 5:20 pm EST! Click here to find Bloomberg TV in your area, or watch it online! Did you miss Josh&#8217;s last appearance on &#8220;Taking Stock&#8221;? No worries, you...]]></description>
				<content:encoded><![CDATA[<div>
<p>Fresh off the heels of Apkudo&#8217;s <em>FierceWireless</em> &#8220;<a href="http://blog.apkudo.com/2013/06/20/fiercewireless-names-apkudo-as-one-of-its-fierce-15-wireless-companies-of-2013/" target="_blank">Fierce 15</a>&#8221; award, Josh Matthews will appear on Bloomberg TV&#8217;s famed in-depth investor program &#8220;<a href="http://www.bloomberg.com/video/taking-stock/" target="_blank">Taking Stock with Pimm Fox</a>&#8221; <strong>today at 5:20 pm EST!</strong> Josh will sit down with Pimm to discuss what makes Apkudo fierce, the state of Android, and how Apkudo helps mobile network operators, device manufacturers, and application developers make fierce products.</p>
</div>
<p><strong>Watch &#8220;Taking Stock with Pimm Fox&#8221; on Bloomberg TV at 5:20 pm EST!</strong><br />
<a href="http://www.bloomberg.com/tv/channel-finder/" target="_blank">Click here</a> to find Bloomberg TV in your area, or watch it <a href="http://www.bloomberg.com/tv/" target="_blank">online</a>!</p>
<p>Did you miss Josh&#8217;s last appearance on &#8220;Taking Stock&#8221;? No worries, you can check it out here:<br />
<a href="http://www.bloomberg.com/video/how-do-you-define-an-app-NLcR6mDkQTWI%7EhGmTn66Zg.html" target="_blank">How Do You Define an App? Part 1</a><br />
<a href="http://www.bloomberg.com/video/nowait-has-over-ten-million-patrons-uZc5zvKyT2GrOwyHNZ4ecw.html" target="_blank">How Do You Define an App? Part 2</a></p>
<p>Enjoy!!</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/fire-up-the-drv-josh-matthews-appears-on-bloomberg-tv-today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking for Fun and Profit (Mostly for Fun) &#8211; AnDevCon Boston!</title>
		<link>http://mspotten.com/wordpress/hacking-for-fun-and-profit-mostly-for-fun-andevcon-boston/</link>
		<comments>http://mspotten.com/wordpress/hacking-for-fun-and-profit-mostly-for-fun-andevcon-boston/#comments</comments>
		<pubDate>Wed, 19 Jun 2013 17:49:30 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=1068</guid>
		<description><![CDATA[This May our very own David Teitelbaum gave a class at AnDevCon Boston about hacking APKs. A variation on his previous AnDevCon class, this session showed Android developers how to dive deep into the internals of Android. Check out his slides and you will explore the wonders of Dalvik bytecode, smali syntax, decompilation tools, patching techniques, and common methods you can use to (try to) protect your apps. Check out his slides, here! Thanks to all the wonderful folks at AnDevCon and the Android developers that attended David&#8217;s class! We hope you enjoyed it!]]></description>
				<content:encoded><![CDATA[<p>This May our very own <a href="https://twitter.com/davtbaum" target="_blank">David Teitelbaum</a> gave a class at <a href="http://www.andevcon.com" target="_blank">AnDevCon</a> Boston about hacking APKs. A variation on his previous AnDevCon class, this session showed Android developers how to dive deep into the internals of Android. Check out his slides and you will explore the wonders of Dalvik bytecode, smali syntax, decompilation tools, patching techniques, and common methods you can use to (try to) protect your apps.</p>
<p>Check out his slides, <a href="http://www.slideshare.net/Apkudo/hackingforfunandforprofit" target="_blank">here</a>!</p>
<p>Thanks to all the wonderful folks at AnDevCon and the Android developers that attended David&#8217;s class! We hope you enjoyed it!</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/hacking-for-fun-and-profit-mostly-for-fun-andevcon-boston/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cincinnati Bell Saved $500,000.00 Using Objective User Experience Data to Reduce Android Device Returns</title>
		<link>http://mspotten.com/wordpress/cincinnati-bell-saved-500000-00-using-objective-user-experience-data-to-reduce-android-device-returns/</link>
		<comments>http://mspotten.com/wordpress/cincinnati-bell-saved-500000-00-using-objective-user-experience-data-to-reduce-android-device-returns/#comments</comments>
		<pubDate>Wed, 29 May 2013 14:20:57 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=1048</guid>
		<description><![CDATA[Cincinnati Bell Saved $500,000.00 Using Objective User Experience Data to Reduce Android Device Returns May 29, 2013 &#8211; Baltimore, MD – Apkudo, the Android innovation company, today announced the release of a case study with wireless carrier Cincinnati Bell discussing how their use of the Apkudo Approved program on one of their Android devices saved the company at least half a million dollars in device return associated costs over the course of a year. Apkudo Approved objectively analyzes the user experience of a carrier’s Android devices, generating millions of data points against potential user and app scenarios allowing carriers to...]]></description>
				<content:encoded><![CDATA[<p><strong>Cincinnati Bell Saved $500,000.00 Using Objective User Experience Data to Reduce Android Device Returns</strong></p>
<p>May 29, 2013 &#8211; Baltimore, MD – Apkudo, the Android innovation company, today announced the release of a case study with wireless carrier Cincinnati Bell discussing how their use of the Apkudo Approved program on one of their Android devices saved the company at least half a million dollars in device return associated costs over the course of a year. Apkudo Approved objectively analyzes the user experience of a carrier’s Android devices, generating millions of data points against potential user and app scenarios allowing carriers to better understand, standardize, stabilize and create a better user experience. Cincinnati Bell has since mandated that all of their Android devices must now complete the Apkudo Approved program before release to consumers.</p>
<p>Android is a huge opportunity for wireless carriers, having shipped in 75% of  smartphones sold in Q1 2013. With hundreds of makes and models released yearly, Android gives consumers unprecedented choice and represents a critical element in a regional carrier’s growth strategy. Android can also bring frustration to carriers when releasing these devices. Cincinnati Bell was no exception, having experienced the difficulty of releasing these complex devices with mixed results.</p>
<p>In order to reduce the dreaded &#8216;no trouble found&#8217; device returns (associated as poor user experience) Cincinnati Bell enlisted the help of Apkudo to analyze the user experience of one of their high-tier Android devices. The Apkudo Approved program uncovered a number of key user experience issues, allowing Cincinnati Bell to present objective, third-party to the OEM to assist in mitigating the issues before the device’s release. After the device was launched Cincinnati Bell calculated at least a $500,000.00 savings from potential device return-associated costs over the course of a year for this one device, then moved to mandate that all devices will be Apkudo Approved to realize similar savings. Cincinnati Bell saved time and money while making their customers happy.</p>
<p>To learn more about how Apkudo Approved helped Cincinnati Bell mitigate issues early and save half a million dollars, please download the case study:</p>
<p>https://www.apkudo.com/customers.html</p>
<p><strong>About Apkudo</strong><br />
An Android user experience innovation company, Apkudo is pioneering analysis technologies that deeply and holistically test pre-release Android devices against millions of different possible use-cases and activities to discover bugs and refine the user interface and experience, taking devices from bad to good, and good to great. Apkudo works with many of the world’s largest device manufacturers, including Samsung, Sony, HTC, and LG, and carriers such as MetroPCS, Cricket and Cincinnati Bell.</p>
<p>Apkudo is headquartered in Baltimore, MD. The Apkudo team includes deep research expertise with the Android operating system including optimization, usability and performance testing, and is focused on helping the ecosystem deliver the best possible user experience to Android device owners. Learn more at http://www.apkudo.com and email hello@apkudo.com for additional information.</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/cincinnati-bell-saved-500000-00-using-objective-user-experience-data-to-reduce-android-device-returns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apkudo Joins the Competitive Carriers Association</title>
		<link>http://mspotten.com/wordpress/apkudo-joins-the-competitive-carriers-association/</link>
		<comments>http://mspotten.com/wordpress/apkudo-joins-the-competitive-carriers-association/#comments</comments>
		<pubDate>Wed, 30 Jan 2013 15:16:43 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=922</guid>
		<description><![CDATA[Baltimore, MD – Apkudo, an Android user experience innovation company, today announced it has joined the Competitive Carriers Association (CCA) as an Associate Member. The CCA is the nation’s leading association for competitive wireless providers and stakeholders across the United States. The licensed service area of CCA’s more than 100 members covers 95 percent of the nation. As leaders in Android device analysis, Apkudo helps worldwide mobile device manufacturers and network operators assess every aspect of the user experience of Android devices before launch, providing an opportunity to optimize performance, better market and position devices, and improve customer satisfaction. “We’ve...]]></description>
				<content:encoded><![CDATA[<p><strong>Baltimore, MD</strong> – <a href="http://apkudo.com" target="_blank">Apkudo</a>, an Android user experience innovation company, today announced it has joined the <a href="http://rca-usa.org/" target="_blank">Competitive Carriers Association</a> (CCA) as an Associate Member. The CCA is the nation’s leading association for competitive wireless providers and stakeholders across the United States. The licensed service area of CCA’s more than 100 members covers 95 percent of the nation. As leaders in Android device analysis, Apkudo helps worldwide mobile device manufacturers and network operators assess every aspect of the user experience of Android devices before launch, providing an opportunity to optimize performance, better market and position devices, and improve customer satisfaction.</p>
<p>“We’ve had the pleasure of working with a number of the United State’s largest Tier 2 carriers – such as MetroPCS and Cricket – by collecting user experience data on their pre-release Android devices, exposing likely areas of consumer satisfaction and dissatisfaction,” said Josh Matthews, Apkudo CEO and co-founder. “Apkudo is helping device manufacturers and carriers improve the overall quality of Android devices. We’re excited to use our Associate Membership with the CCA as a platform to engage with regional carriers and show them how to do the same.”</p>
<p>“I am delighted to welcome Apkudo to CCA,” said CCA President &amp; CEO Steven K. Berry.  “CCA’s associate members play an important role in the competitive carrier ecosystem, and Apkudo’s offers unique services and tools to assist in the delivery of next generation networks through Android devices.  Apkudo’s industry perspective will certainly be a valuable addition for the entire membership, and we are glad to have them on board.”</p>
<h3>About Apkudo</h3>
<p>Apkudo helps mobile operators and device manufacturers launch successful Android devices. An Android user experience innovation company, Apkudo is pioneering analysis technologies that deeply and holistically characterize and compare the user experience, taking devices from bad to good, and good to great. Starting early in the device approvals process and continuing throughout friendly user trials, the Apkudo Approved data-informed approach speeds time to market, ensures issues are alleviated early, and significantly reduces device return associated costs. The end result is a device that exceeds consumer expectations.</p>
<p>Apkudo is headquartered in Baltimore, MD. The Apkudo team includes deep research expertise with the Android operating system including optimization, usability and performance testing, and is focused on helping the ecosystem deliver the best possible user experience to Android device owners. Learn more at <a href="http://www.apkudo.com" target="_blank">http://www.apkudo.com</a> and email <a href="mailto:hello@apkudo.com" target="_blank">hello@apkudo.com</a> for additional information.</p>
<h3><b>About the Competitive Carriers Association</b></h3>
<p>CCA is the nation’s leading association for competitive wireless providers and stakeholders across the United States. The licensed service area of CCA’s more than 100 members covers 95 percent of the nation. Visit <a href="http://www.competitivecarriers.org" target="_blank">http://www.competitivecarriers.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/apkudo-joins-the-competitive-carriers-association/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Rise of Android: an Infographic</title>
		<link>http://mspotten.com/wordpress/the-rise-of-android-an-infographic/</link>
		<comments>http://mspotten.com/wordpress/the-rise-of-android-an-infographic/#comments</comments>
		<pubDate>Mon, 14 Jan 2013 19:36:40 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=901</guid>
		<description><![CDATA[Created by: MBAOnline.com]]></description>
				<content:encoded><![CDATA[<div style="width: 560px" class="wp-caption aligncenter"><a href="http://www.mbaonline.com/android"><img style="border:0;" title="The Rise of Android" alt="Android" src="http://images.mbaonline.com.s3.amazonaws.com/ANDROID-MBA.gif" width="550" height="4835" border="0" /></a><p class="wp-caption-text">The Rise of Android: 2005-2012</p></div>
<p>Created by: <a href="http://mbaonline.com/" target="_blank">MBAOnline.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/the-rise-of-android-an-infographic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python packages and plugins</title>
		<link>http://mspotten.com/wordpress/python-packages-and-plugins/</link>
		<comments>http://mspotten.com/wordpress/python-packages-and-plugins/#comments</comments>
		<pubDate>Sat, 06 Oct 2012 19:47:55 +0000</pubDate>
		<dc:creator><![CDATA[wyattkund]]></dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=754</guid>
		<description><![CDATA[While we obviously do a lot of work on the innards of Android, putting together a backend infrastructure requires a lot of engineering. We use a number of different technologies for this, and from time to time come across stuff we think could be generally interesting to others (even if it isn&#8217;t Android focused). This post is focused on Python, which we use pretty extensively. We like keeping up with the new language developments, so most of our Python posts will be related to Python 3, not the old Python 2.7. One thing that can be a little confusing with...]]></description>
				<content:encoded><![CDATA[<p>While we obviously do a lot of work on the innards of Android, putting together a backend infrastructure requires a lot of engineering. We use a number of different technologies for this, and from time to time come across stuff we think could be generally interesting to others (even if it isn&#8217;t Android focused). This post is focused on Python, which we use pretty extensively. We like keeping up with the new language developments, so most of our Python posts will be related to Python 3, not the old Python 2.7.</p>
<p>One thing that can be a little confusing with Python is how packages work. Packages let you group your modules together and gives you a nice namespace. You can read all about them in the <a href="http://docs.python.org/tutorial/modules.html#packages" target="_blank">Python docs.</a></p>
<p>Something that&#8217;s pretty confusing is that importing a package <strong>does not</strong> mean that any modules inside that package are loaded.</p>
<p>Imagine a very simple package called <code>testing</code>, with a single <code>foo</code> module. E.g:</p>
<pre>testing/
    __init__.py
    foo.py</pre>
<p>The <code>foo</code> module might look something like:</p>
<pre>def bar():
    return 'bar'</pre>
<p>Now, you might expect to be able to write code such as:</p>
<pre>import testing
print(testing.foo.bar())</pre>
<p>However, trying this won’t work, you end up with an<strong><code>AttributeError</code></strong>:</p>
<pre>Traceback (most recent call last):
  File "t.py", line 2, in 
    testing.foo.bar()
AttributeError: 'module' object has no attribute 'foo'</pre>
<p>So, to fix this you need to actually import the module. There are (at least) two ways you can do this:</p>
<pre>import testing.foo
from testing import foo</pre>
<p>Either of these put <code>testing.foo</code> into <code>sys.modules</code>, and<code>testing.foo.bar()</code> will work fine.</p>
<p>But, what if you want to load all the modules in a package? Well, as far as I know there isn&#8217;t any built-in approach to doing this, so what we’ve come up with is a pretty simple function that, given a package, will load all the modules in the package, and return them as a dictionary keyed by the module name.</p>
<pre>def plugin_load(pkg):
    """Load all the plugin modules in a specific package.

    A dictionary of modules is returned indexed by the module name.

    Note: This assumes packages have a single path, and will only
    find modules with a .py file extension.

    """
    path = pkg.__path__[0]
    pkg_name = pkg.__name__
    module_names = [os.path.splitext(m)[0] for m in
                    os.listdir(path)
                    if os.path.splitext(m)[1] == '.py' and m != '__init__.py']
    imported = __import__(pkg_name, fromlist=module_names)
    return {m: getattr(imported, m) for m in module_names}</pre>
<p>There are plenty of caveats to be aware of here. It only works with modules ending in <code>.py</code>, which may miss out on some cases. Also, at this point it doesn’t support packages that span multiple directories (although that would be relatively simple to add). <strong>Note:</strong> code testing on Python 3.2, probably needs some modification to work on 2.x (in particular I don’t think <a href="http://www.python.org/dev/peps/pep-0274/">dictionary comprehensions</a> work in 2.x).</p>
<p>If you’ve got a better way for achieving this, please let us know in the comments.</p>
<p>Benno Leslie</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/python-packages-and-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Testing MindMap &#8211; there&#8217;s a lot to consider!</title>
		<link>http://mspotten.com/wordpress/android-testing-mindmap-theres-a-lot-to-consider/</link>
		<comments>http://mspotten.com/wordpress/android-testing-mindmap-theres-a-lot-to-consider/#comments</comments>
		<pubDate>Mon, 17 Sep 2012 20:29:06 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apkudo]]></category>
		<category><![CDATA[App Analytics]]></category>
		<category><![CDATA[MindMap]]></category>
		<category><![CDATA[Testing Sucks]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=712</guid>
		<description><![CDATA[Think Android testing is easy? Think again! Friend of Apkudo Daniel Box, Quality Assurance Manager over at Mubaloo, recently completed the intense task of creating an Android testing MindMap. As you can see, there&#8217;s a lot to take into account when testing an Android app or website. Have a look below and if you&#8217;d like to download it yourself, check it out here. Many thanks to Dan for including us in the MindMap. Be sure to follow him on Twitter @dnlkbox!]]></description>
				<content:encoded><![CDATA[<p>Think Android testing is easy? Think again!</p>
<p>Friend of Apkudo <a href="http://www.linkedin.com/in/dnlkbox" target="_blank">Daniel Box</a>, Quality Assurance Manager over at <a href="http://mubaloo.com/" target="_blank">Mubaloo</a>, recently completed the intense task of creating an Android testing MindMap. As you can see, there&#8217;s a lot to take into account when testing an Android app or website. Have a look below and if you&#8217;d like to download it yourself, check it out <a href="http://www.ministryoftesting.com/2012/09/android-testing-mindmap/" target="_blank">here</a>.</p>
<div id="attachment_713" style="width: 1034px" class="wp-caption aligncenter"><a href="http://apkudo.files.wordpress.com/2012/09/7993630076_f3de083050_h.jpg"><img class="size-large wp-image-713" title="7993630076_f3de083050_h" src="http://apkudo.files.wordpress.com/2012/09/7993630076_f3de083050_h.jpg?w=1024" alt="" width="1024" height="599" /></a><p class="wp-caption-text">Android Testing MindMap by Daniel Box</p></div>
<p>Many thanks to Dan for including us in the MindMap. Be sure to follow him on Twitter @<a href="https://twitter.com/dnlkbox" target="_blank">dnlkbox</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/android-testing-mindmap-theres-a-lot-to-consider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Think You Know Android? Name That Device pt. II!</title>
		<link>http://mspotten.com/wordpress/think-you-know-android-name-that-device-pt-ii/</link>
		<comments>http://mspotten.com/wordpress/think-you-know-android-name-that-device-pt-ii/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 13:35:29 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Contest]]></category>
		<category><![CDATA[Name That Device]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.apkudo.com/?p=581</guid>
		<description><![CDATA[It has been two weeks; I am here to issue you with another challenge. It’s not as physically taxing as the Ironman Triathlon, and not as delicious as the Cinnamon Challenge. No, this is much, much worse. Are you ready for a mind-melting, brainteaser that will leave you puzzled for the next 5 days? You’re about to be stumped by the multitudes of Android Devices available to consumers all over the world. We’ve got every Android Device in the App Analytics Lab. Can you identify them all? Here’s a reminder of how to play: Take a look at the hint...]]></description>
				<content:encoded><![CDATA[<p>It has been two weeks; I am here to issue you with another challenge. It’s not as physically taxing as the <a title="Ironman Triathlon" href="http://en.wikipedia.org/wiki/Ironman_Triathlon" target="_blank">Ironman Triathlon</a>, and not as delicious as the <a title="Cinnamon Challenge" href="http://www.cinnamonchallenge.com/" target="_blank">Cinnamon Challenge</a>. No, this is much, much worse. Are you ready for a mind-melting, brainteaser that will leave you puzzled for the next 5 days? You’re about to be stumped by the multitudes of Android Devices available to consumers all over the world. We’ve got every Android Device in the App Analytics Lab. Can you identify them all? Here’s a reminder of how to play:</p>
<ul>
<li>Take a look at the hint and photo and try to guess what the mystery device is.</li>
<li>Post your answers in the comments section below. Each person to get it right will be entered into a drawing to win a free Apkudo t-shirt (they’re pretty badass).</li>
<li>When posting your answer, be sure to include your Twitter address so we can get in touch with you. No Twitter address? That’s cool – just check back to the blog to see if you won.</li>
<li>All answers must be submitted within 5 days of the post, and only one answer per person will be accepted.</li>
</ul>
<p>Accept or deny my challenge, however “impossible” is a word only found in the dictionary of fools.</p>
<p align="center"><a href="http://apkudo.files.wordpress.com/2012/08/challenge.jpeg"><img class=" wp-image" src="http://apkudo.files.wordpress.com/2012/08/challenge.jpeg?w=390" alt="Image" width="312" height="234" /></a></p>
<p>Here is your hint for this challenge:</p>
<p align="center"><em>The edge of a knife, the tip of a sword</em></p>
<p align="center"><em>In the US this brand is often ignored</em><em> </em></p>
<p align="center"><em>Both TV and phone share the same name</em></p>
<p align="center"><em>You’ll need more than the model to win at this game</em></p>
<p align="center"><em>Composed of mixed origin, like a Prius or Leaf</em></p>
<p align="center"><em>Plus the fact that its waterproof is quite a relief</em><em> </em></p>
<p align="center"><em>Include the whole name or your answer we’ll forgo</em></p>
<p align="center"><em>Now put your guess in the comments below</em></p>
<p style="text-align:left;" align="center">Best of luck to everyone!</p>
<p style="text-align:left;" align="center">-Asa Gismervik, Lab Manager<br />
<a href="https://twitter.com/asagismervik" target="_blank">@asagismervik</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/think-you-know-android-name-that-device-pt-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling HierarchyViewer on Rooted Android Devices</title>
		<link>http://mspotten.com/wordpress/enabling-hierarchyviewer-on-rooted-android-devices/</link>
		<comments>http://mspotten.com/wordpress/enabling-hierarchyviewer-on-rooted-android-devices/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 17:27:52 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[baksmali]]></category>
		<category><![CDATA[dexopt]]></category>
		<category><![CDATA[Hierarchy Viewer]]></category>
		<category><![CDATA[patching]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[Romain]]></category>
		<category><![CDATA[smali]]></category>
		<category><![CDATA[ViewServer]]></category>

		<guid isPermaLink="false">http://apkudo.wordpress.com/?p=397</guid>
		<description><![CDATA[The HierarchyViewer is an Android SDK tool that gives developers the ability to introspect on all aspects of an application&#8217;s layout at runtime. The tool can be extremely useful for developers when debugging the view state of an application across a realm of devices. Unfortunately, the Android SDK has limited this tool to &#8220;devices running a developer version of the Android system&#8221;. I personally had no idea what Android meant by this statement, so we spent some time investigating the implementation of the ViewServer in Android OS and fortunately found that the HierarchyViewer can be enabled with any Android device as...]]></description>
				<content:encoded><![CDATA[<p>The <a href="http://developer.android.com/tools/debugging/debugging-ui.html" target="_blank">HierarchyViewer</a> is an Android SDK tool that gives developers the ability to introspect on all aspects of an application&#8217;s layout at runtime. The tool can be extremely useful for developers when debugging the view state of an application across a realm of devices. Unfortunately, the Android SDK has limited this tool to <a href="http://developer.android.com/tools/debugging/debugging-ui.html" target="_blank">&#8220;devices running a developer version of the Android system&#8221;</a>. I personally had no idea what Android meant by this statement, so we spent some time investigating the implementation of the ViewServer in Android OS and fortunately found that the<strong> HierarchyViewer can be enabled with any Android device as long as it has root access.</strong></p>
<div id="attachment_477" style="width: 1034px" class="wp-caption aligncenter"><a href="http://apkudo.files.wordpress.com/2012/07/screenshot-at-2012-07-26-17_06_32.png" target="_blank"><img class="size-large wp-image-477  " title="Android HierarchyViewer in Tree Mode" src="http://apkudo.files.wordpress.com/2012/07/screenshot-at-2012-07-26-17_06_32.png?w=1024" alt="" width="1024" height="576" /></a><p class="wp-caption-text">Android HierarchyViewer in Tree Mode on the Galaxy SII</p></div>
<p>So how does it actually work? The HierarchyViewer utilizes a service running on the device called ViewServer located in</p>
<pre>frameworks/base/services/java/com/android/server/ViewServer.java</pre>
<p>When launched, ViewServer opens up a socket on local port 4939 and receives commands from a client (usually HierarchyViewer) to dump the current view state of the device. The ViewServer dispatches these calls via binder to the ViewRoot class, which serializes the view state and transmits it to the client over the socket. The WindowManagerService manages the ViewServer and provides a hook (via binder service call) to spawn the service.</p>
<p>A client can only launch the ViewServer if the device&#8217;s properties ro.debuggable=1 and ro.secure=0, and the client contains manifest.dump permission (in the usual case, HierarchyView, as the client, has these permissions via adb). Although Google Engineer <a href="https://groups.google.com/forum/?fromgroups#!topic/android-developers/q1lRBJacmQY" target="_blank">Romain Guy has been very adamant</a> that the ViewServer is not enabled for production devices, we&#8217;ve found a pretty easy way to bypass its restrictions if you have root. The portion of the code dictating the restrictions can be found in<strong> line 5501</strong> of <a href="https://github.com/android/platform_frameworks_base/blob/ics-mr1-release/services/java/com/android/server/wm/WindowManagerService.java" target="_blank">WindowManagerService.java</a> and is shown below.</p>
[sourcecode language=&#8221;java&#8221;]
  public boolean startViewServer(int port) {<br />
        if (isSystemSecure()) {<br />
            return false;<br />
        }</p>
<p>        if (!checkCallingPermission(Manifest.permission.DUMP, &quot;startViewServer&quot;)) {<br />
            return false;<br />
        }<br />
[/sourcecode]
<p>&nbsp;</p>
[sourcecode language=&#8221;java&#8221;]
  private boolean isSystemSecure() {<br />
        return &quot;1&quot;.equals(SystemProperties.get(SYSTEM_SECURE, &quot;1&quot;)) &amp;&amp;<br />
                &quot;0&quot;.equals(SystemProperties.get(SYSTEM_DEBUGGABLE, &quot;0&quot;));<br />
    }<br />
[/sourcecode]
<p>One can go about bypassing these restrictions in two ways: patch the WindowManagerService to allow anyone to spawn the server _or_ modify the ro.debuggable and ro.secure properties in the default.prop file. Because of the potential negative ramifications of modifying the ro.debuggable and ro.secure properties in Android (not to mention the fact that the default.prop file is part of the ramdisk, which makes editing it a bitch), we decided to patch the WindowManagerService. The patch is minimally invasive and provides a good intro into the power of patching the Android framework.</p>
<p>In order to perform this patch you will need the <strong><a href="http://code.google.com/p/smali/" target="_blank">smali/baksmali</a> tools, <a href="http://code.google.com/p/just-for-you/downloads/detail?name=dexopt-wrapper" target="_blank">dextopt-wrapper</a>, and access to a rooted device with <a href="http://code.google.com/p/busybox-android/" target="_blank">BusyBox</a> installed</strong>. If you have no idea what these tools are or how they work, you may want to <a href="http://code.google.com/p/smali/w/list" target="_blank">do some reading first</a>. We&#8217;ve only tested this on the HTC One S and a 4.0.3 Galaxy S II, so if you brick your device we&#8217;ll feel bad but can&#8217;t really do anything about it (hey, maybe we&#8217;ll send you a t-shirt).</p>
<p><strong>Step 1 &#8211; Backup the phone&#8217;s /system/framework/ on your machine</strong></p>
<pre>$ mkdir ./system
$ mkdir ./system/framework
$ adb pull /system/framework/ ./system/framework/</pre>
<p><em> Important: Make sure the directory structure matches the device&#8217;s for step 3.</em></p>
<p><strong>Step 2 &#8211; Grab the bootclasspath from the device</strong></p>
<pre>$ adb shell
# echo $BOOTCLASSPATH</pre>
<p><em>Copy this path.</em></p>
<p><strong>Step 3 &#8211; Disassemble (baksmali) the services odex</strong></p>
<pre>$ baksmali -x -a 14 -c &lt;copied bootclasspath&gt; ./system/framework/services.odex</pre>
<p><em>-x = odex</em><br />
<em>-a = api level 14</em><br />
<em>-c = classes (loaded from the bootclasspath, separated by colon)</em><br />
<em>If you&#8217;ve done this correctly you will now see a directory called &#8216;out&#8217;</em><strong><em>, </em></strong><em>otherwise verify you&#8217;ve pulled the jars and bootclasspath correctly.</em></p>
<p><strong>Step 4 &#8211; In your favorite text editor, open up WindowManagerService.smali</strong></p>
<pre>$ emacs out/com/android/server/wm/WindowManagerService.smali</pre>
<p><em> Search for isSystemSecure(). This is the method they use (only for ViewServer) to verify the system is not secure. We happened to find this on line 4815. Note: In 4.0 they moved WindowManagerService into the wm directory, it may just be in out/com/android/server/</em></p>
<p><strong>Step 5 &#8211; Patch the return value of isSystemSecure() to always return false</strong></p>
[sourcecode]
.method private isSystemSecure()Z<br />
    .registers 4</p>
<p>    .prologue<br />
    .line 5965<br />
    const-string v0, &quot;1&quot;</p>
<p>    const-string v1, &quot;ro.secure&quot;</p>
<p>    const-string v2, &quot;1&quot;</p>
<p>    invoke-static {v1, v2}, Landroid/os/SystemProperties;-&gt;get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;</p>
<p>    move-result-object v1</p>
<p>    invoke-virtual {v0, v1}, Ljava/lang/String;-&gt;equals(Ljava/lang/Object;)Z</p>
<p>    move-result v0</p>
<p>    if-eqz v0, :cond_22</p>
<p>    const-string v0, &quot;0&quot;</p>
<p>    const-string v1, &quot;ro.debuggable&quot;</p>
<p>    const-string v2, &quot;0&quot;</p>
<p>    invoke-static {v1, v2}, Landroid/os/SystemProperties;-&gt;get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;</p>
<p>    move-result-object v1</p>
<p>    invoke-virtual {v0, v1}, Ljava/lang/String;-&gt;equals(Ljava/lang/Object;)Z</p>
<p>    move-result v0</p>
<p>    if-eqz v0, :cond_22</p>
<p>    const/4 v0, 0x1</p>
<p>    :goto_21</p>
<p>    return v0</p>
<p>    :cond_22<br />
    const/4 v0, 0x0</p>
<p>    goto :goto_21<br />
.end method<br />
[/sourcecode]
<p><em>We can see from above that the v0 register contains the return value of this method. Let&#8217;s add a simple</em></p>
<pre>const/4 v0, 0x0</pre>
<p><em>in the <strong>line 41</strong> above return v0 to ensure this method will always return false, giving the WMS the go ahead to spawn view server. Easy enough, right?</em></p>
<p><strong>Step 6 &#8211; Reassemble into Dex</strong></p>
<pre>$ smali ./out -o classes.dex</pre>
<p><em>-o = output file (classes.dex is the default name for apks in Android)</em></p>
<p><strong>Step 7 &#8211; Zip dex</strong></p>
<pre>$ zip services_hacked.jar ./classes.dex</pre>
<p><strong>Step 8 &#8211; Remount /system</strong></p>
<pre>$ adb remount</pre>
<p><strong> OR</strong></p>
<pre>$ adb shell
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system</pre>
<p><strong>Step 9 &#8211; Push dexopt-wrapper and services_hacked.jar onto /data/local/tmp</strong></p>
<pre>$ adb push ./services_hacked.jar /data/local/tmp
$ adb push ./dexopt-wrapper /data/local/tmp</pre>
<p><strong>Step 10 &#8211; Optimize the services_hacked.jar into services_hacked.odex</strong></p>
<pre>$ adb shell
# cd /data/local/tmp
# chmod 777 ./dexopt-wrapper</pre>
<p><em>Important: We need to feed in the bootclasspath into dexopt, but because we have modified a member of that class path, we need to make sure we don&#8217;t include it. To do this, copy bootclasspath (via method in step 2) and omit the &#8220;:/system/framework/services.jar&#8221;. Forgetting this step will likely result in a boot loop.</em></p>
<pre># ./dexopt-wrapper ./services_hacked.jar ./services_hacked.odex &lt;copied bootclasspath excluding ":/system/framework/services.jar"&gt;</pre>
<p><em>Our final command looked something like</em></p>
<pre>./dexopt-wrapper ./services_hacked.jar ./services_hacked.odex /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/android.policy.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar:/system/framework/sechardware.jar:/system/framework/wimax.jar</pre>
<p><em> A great way to check that this command has worked is to see that the /system/framework/services.odex and the services_hacked.odex are nearly identical in size. The two files shouldn&#8217;t differ by more than 1KB.</em></p>
<p><strong>Step 11 &#8211; Copy in the signature</strong></p>
<p><em>Each odex is signed with a 20 byte signature located at a 52 byte offset within the odex. Let&#8217;s trick the OS into thinking our hacked odex matches the system signature by copying it from the original</em></p>
<pre># busybox dd if=/system/framework/services.odex of=/data/local/tmp/services_hacked.odex bs=1 count=20 skip=52 seek=52 conv=notrunc</pre>
<p><em>if = input file<br />
of = output file<br />
bs = block size (1 byte)<br />
count = number of blocks<br />
skip = input file offset<br />
seek = output file offset<br />
conv=notrunc &#8211; don&#8217;t truncate the output file.</em></p>
<p><strong>Step 12 &#8211; Replace the original odex with the hacked version</strong></p>
<pre># dd if=/data/local/tmp/services_hacked.odex of=/system/framework/services.odex</pre>
<p><strong>Step 13 &#8211; Let the device reset</strong></p>
<p><em>The previous step should result in a software reset, and it may be worthwhile to logcat as this loads. If you see the Dalvik logs stating &#8220;some deps went away&#8221; or &#8220;not all deps represented&#8221; then you&#8217;ve definitely screwed up step 10. These errors are a result of passing in the wrong bootclasspath to dexopt-wrapper. If this causes a bootloop, see step 16.</em></p>
<p><strong>Step 14 &#8211; Launch ViewServer</strong></p>
<p>WindowManagerService provides a (heavily undocumented) hook into spawning ViewServer. To start the server on port 4939,</p>
<pre>$ adb shell service call window 1 i32 4939</pre>
<p>To stop the server</p>
<pre>$ adb shell service call window 2</pre>
<p>To check if the server is running</p>
<pre>$ adb shell service call window 3</pre>
<p>If ViewServer is running, you should see</p>
<pre>Result: Parcel(00000000 00000001   '........')</pre>
<p><strong> Step 15 &#8211; Launch HierarchyViewer</strong></p>
<pre>$ ./sdk/tools/hierarchyviewer</pre>
<p><em>You will now see your rooted phone available in the HierarchyViewer. Double click on a layout to introspect on that view tree.</em></p>
<p><strong>Step 16 (if you get stuck in a bootloop)</strong></p>
<p>Don&#8217;t panic! Simply push the backed up services.odex to system/framework to revert to your previous state.</p>
<pre>$ adb push ./system/framework/services.odex /system/framework/services.odex</pre>
<p><em> Note, you should make sure you don&#8217;t reboot when if you get a bootloop. In some cases the OS will not be at a state at which your SU binary is functional (I&#8217;ve seen it segfault many times). If you don&#8217;t have root your only option is to reflash the device via fastboot or other bootloader.</em></p>
<p>Although this API is not meant to be public, it&#8217;s extremely useful to developers when debugging their UI. It&#8217;s a shame you have to jump through so many hoops to obtain this functionality. I hope to see Android keep the ViewServer in further builds and provide a means of using the HierarchyViewer on production phones as well.</p>
<p>(As an aside: we refered to HierarchyViewer as the &#8220;usual client&#8221; of ViewServer above. Other clients are certainly possible. One issue with HierarchyViewer is it&#8217;s pretty damn slow &#8211; we&#8217;ve been working on our own optimized client over here at Apkudo, which will be the subject of a future blog!)</p>
<p>Happy Hacking,</p>
<p>David Teitelbaum<br />
VP of Engineering<br />
<a href="https://twitter.com/davtbaum">@davtbaum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/enabling-hierarchyviewer-on-rooted-android-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AnDevCon III &#8211; Another One for the Books</title>
		<link>http://mspotten.com/wordpress/andevcon-iii-another-one-for-the-books/</link>
		<comments>http://mspotten.com/wordpress/andevcon-iii-another-one-for-the-books/#comments</comments>
		<pubDate>Thu, 24 May 2012 18:46:19 +0000</pubDate>
		<dc:creator><![CDATA[mspotten]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://apkudo.wordpress.com/?p=211</guid>
		<description><![CDATA[This time last week we were drinking lots of water and taking aspirin, handing out t-shirts on the show floor, talking to developers about Apkudo App Analytics and Apkudo Device Analytics, and debating how awesome the Apkudo cookies were (survey says: very awesome, as seen here). We&#8217;d just pulled ourselves from bed after a wonderful party at Knuckle&#8217;s Bar the night before replete with drinks, food, and a lot of laughs. We met some really excellent people and reconnected with plenty of others. While it&#8217;s true that conferences can take a lot out of you (energy and electrolytes, mostly), they...]]></description>
				<content:encoded><![CDATA[<p><a href="http://apkudo.files.wordpress.com/2012/05/img_18121.jpg"><img class="size-thumbnail wp-image-231 alignright" title="Cookies" src="http://apkudo.files.wordpress.com/2012/05/img_18121.jpg?w=150" alt="" width="150" height="100" /></a>This time last week we were drinking lots of water and taking aspirin, handing out t-shirts on the show floor, talking to developers about Apkudo App Analytics and Apkudo Device Analytics, and debating how awesome the Apkudo cookies were (survey says: very awesome, as seen here).</p>
<p>We&#8217;d just pulled ourselves from bed after a wonderful party at Knuckle&#8217;s Bar the night before replete with drinks, food, and a lot of laughs. We met some really excellent people and reconnected with plenty of others. While it&#8217;s true that conferences can take a lot out of you (energy and electrolytes, mostly), they definitely give back much, much more. So huge thanks to all of you &#8211; our new friends, our old friends, and even those few devs we didn&#8217;t get a chance to meet. We hope our paths cross again soon!</p>
<p>As promised here are some highlights from AnDevCon III!</p>
<h3>Look Out, Leader Boards&#8230;</h3>
<p>We started off the show with a quick 30 minute session, &#8220;Who Needs Thumbs? Reverse Engineering Scramble With Friends,&#8221; on Tuesday, May 15. According to the AnDevCon organizers, ours was the highest attended session of the conference! Congrats to <a href="https://twitter.com/#!/davtbaum" target="_blank">David</a> and <a href="https://twitter.com/#!/jshmthws" target="_blank">Josh</a> on their great class and thank you to all who attended! We recorded the session and you can check it out on YouTube in a 3 part series. Unfortunately, Steven Spielberg cancelled on us at the last minute and James Cameron was all, &#8220;I&#8217;m only doing Avatar movies from now on!&#8221; so I had to record this myself. Consider it an homage to the &#8220;bootleg movie theater&#8221; style films of yore.</p>
<p><a href="http://youtu.be/8heru-WNjCU" target="_blank">Who Needs Thumbs? Part 1</a></p>
<p><a href="http://youtu.be/QPZuFIrDh5Q" target="_blank">Who Needs Thumbs? Part 2</a></p>
<p><a href="http://youtu.be/0fejQNQ3uPs" target="_blank">Who Needs Thumbs? Part 3</a></p>
<p>We&#8217;ve also uploaded the slides to Slideshare so click <a href="http://www.slideshare.net/Apkudo/who-needs-thumbs-reverse-engineering-scramble-with-friends" target="_blank">here</a> to view, download, and share with your pals.</p>
<h3>When Lightning Strikes</h3>
<p>We went old school with this recording. Good ole tripod. In case you missed Josh&#8217;s 5 minutes of fame you can take a gander here to get a sneak peek at our new App Analytics UI, to hear about Ape, and our work with OEMs and Operators via Apkudo Device Analytics.</p>
<p><a href="http://youtu.be/NjC68SwZshc" target="_blank">Josh Matthews&#8217; AnDevCon III Lightning Talk</a></p>
<h3>Android Developers Know How to Party</h3>
<p>Wednesday night marked the second Apkudo Drink-Up. There were drinks (many, many drinks), food, and even a themed drink: The Apkudo. What&#8217;s The Apkudo you ask? Maker&#8217;s Mark on the Rocks. Like Apkudo App Analytics, it&#8217;s uncomplicated, easy, and awesome. Perfect drink for a perfect night. Thanks to everyone who came out, we had an absolute blast! Check out a few pictures below. The rest are on our <a href="http://www.facebook.com/media/set/?set=a.299214816836467.67268.126189217472362&amp;type=1" target="_blank">Facebook</a> page. Spot yourself in one of the pics? &#8220;Like&#8221; us and we&#8217;ll tag you!</p>
<p><a href="http://apkudo.files.wordpress.com/2012/05/img_1741.jpg"><img class=" wp-image-216 alignnone" title="Hackers" src="http://apkudo.files.wordpress.com/2012/05/img_1741.jpg?w=300" alt="" width="210" height="140" /></a><a href="http://apkudo.files.wordpress.com/2012/05/img_17381.jpg"><img class="wp-image-217 alignright" title="Cheers" src="http://apkudo.files.wordpress.com/2012/05/img_17381.jpg?w=300" alt="" width="210" height="140" /></a></p>
<p><a href="http://apkudo.files.wordpress.com/2012/05/img_1750.jpg"><img class=" wp-image-218 alignnone" title="Party!" src="http://apkudo.files.wordpress.com/2012/05/img_1750.jpg?w=300" alt="" width="210" height="140" /></a><a href="http://apkudo.files.wordpress.com/2012/05/img_1776.jpg"><img class="wp-image-219 alignright" title="Great times" src="http://apkudo.files.wordpress.com/2012/05/img_1776.jpg?w=300" alt="" width="210" height="140" /></a></p>
<p>Once again, thanks to everyone who helped make AnDevCon III a success &#8211; from BZ Media to the Apkudo staff that held things down in Baltimore to all of the bad-ass attendees, we couldn&#8217;t have done it without you!</p>
<p>Until next time&#8230;</p>
<p>-Kate Lyons, COO<br />
@<a href="https://twitter.com/#!/katelyons3">katelyons3</a><br />
@<a href="https://twitter.com/#!/apkudo">apkudo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mspotten.com/wordpress/andevcon-iii-another-one-for-the-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
